Candidates for: foo :: Int -> Int pruning with 6/10 rules [3,0,4,0,8,0] direct candidates [3,4,8,21,39,70] pattern candidates rules: x * y == x + y x * y == y + x x + 0 == x 0 + x == x (x + y) + z == x + (y + z) (x + y) + z == y + (x + z) equations: y + x == x + y y + (x + z) == x + (y + z) z + (x + y) == x + (y + z) z + (y + x) == x + (y + z) direct candidates: foo x = x foo x = 0 foo x = 1 foo x = x + x foo x = x + 1 foo x = 1 + x foo x = 1 + 1 foo x = x + (x + x) foo x = x + (x + 1) foo x = x + (1 + x) foo x = x + (1 + 1) foo x = 1 + (x + x) foo x = 1 + (x + 1) foo x = 1 + (1 + x) foo x = 1 + (1 + 1) pattern candidates: foo x = x foo x = 0 foo x = 1 foo 0 = 0 foo x = x foo 0 = 0 foo x = 1 foo 0 = 1 foo x = x foo 0 = 1 foo x = 0 foo x = x + x foo x = x + 1 foo x = 1 + x foo x = 1 + 1 foo 1 = 0 foo x = x foo 1 = 0 foo x = 1 foo 1 = 1 foo x = x foo 1 = 1 foo x = 0 foo 0 = 0 foo x = x + x foo 0 = 0 foo x = x + 1 foo 0 = 0 foo x = 1 + x foo 0 = 0 foo x = 1 + 1 foo 0 = 1 foo x = x + x foo 0 = 1 foo x = x + 1 foo 0 = 1 foo x = 1 + x foo 0 = 1 foo x = 1 + 1 foo 0 = 1 + 1 foo x = x foo 0 = 1 + 1 foo x = 0 foo 0 = 1 + 1 foo x = 1 foo 0 = 0 foo 1 = 0 foo x = x foo 0 = 0 foo 1 = 0 foo x = 1 foo 0 = 0 foo 1 = 1 foo x = x foo 0 = 0 foo 1 = 1 foo x = 0 foo 0 = 0 foo 1 = 1 foo x = 1 foo 0 = 1 foo 1 = 0 foo x = x foo 0 = 1 foo 1 = 0 foo x = 0 foo 0 = 1 foo 1 = 0 foo x = 1 foo 0 = 1 foo 1 = 1 foo x = x foo 0 = 1 foo 1 = 1 foo x = 0 foo 0 = 0 foo x = foo (x + x) foo 0 = 0 foo x = foo (x + 1) foo 0 = 0 foo x = foo (x + 1) foo 0 = 0 foo x = foo (1 + x) foo 0 = 0 foo x = foo (1 + x) foo 0 = 0 foo x = foo (x + x) foo 0 = 0 foo x = foo (x + 1) foo 0 = 0 foo x = foo (x + 1) foo 0 = 0 foo x = foo (1 + x) foo 0 = 0 foo x = foo (1 + x) foo 0 = 1 foo x = foo (x + x) foo 0 = 1 foo x = foo (x + 1) foo 0 = 1 foo x = foo (x + 1) foo 0 = 1 foo x = foo (1 + x) foo 0 = 1 foo x = foo (1 + x) foo 0 = 1 foo x = foo (x + x) foo 0 = 1 foo x = foo (x + 1) foo 0 = 1 foo x = foo (x + 1) foo 0 = 1 foo x = foo (1 + x) foo 0 = 1 foo x = foo (1 + x) foo x = x + (x + x) foo x = x + (x + 1) foo x = x + (1 + x) foo x = x + (1 + 1) foo x = 1 + (x + x) foo x = 1 + (x + 1) foo x = 1 + (1 + x) foo x = 1 + (1 + 1) foo 1 = 0 foo x = x + x foo 1 = 0 foo x = x + 1 foo 1 = 0 foo x = 1 + x foo 1 = 0 foo x = 1 + 1 foo 1 = 1 foo x = x + x foo 1 = 1 foo x = x + 1 foo 1 = 1 foo x = 1 + x foo 1 = 1 foo x = 1 + 1 foo 1 = 1 + 1 foo x = x foo 1 = 1 + 1 foo x = 0 foo 1 = 1 + 1 foo x = 1 foo 1 = 0 foo x = foo (x + x) foo 1 = 0 foo x = foo (x + 1) foo 1 = 0 foo x = foo (x + 1) foo 1 = 0 foo x = foo (1 + x) foo 1 = 0 foo x = foo (1 + x) foo 1 = 0 foo x = foo (x + x) foo 1 = 0 foo x = foo (x + 1) foo 1 = 0 foo x = foo (x + 1) foo 1 = 0 foo x = foo (1 + x) foo 1 = 0 foo x = foo (1 + x) foo 1 = 1 foo x = foo (x + x) foo 1 = 1 foo x = foo (x + 1) foo 1 = 1 foo x = foo (x + 1) foo 1 = 1 foo x = foo (1 + x) foo 1 = 1 foo x = foo (1 + x) foo 1 = 1 foo x = foo (x + x) foo 1 = 1 foo x = foo (x + 1) foo 1 = 1 foo x = foo (x + 1) foo 1 = 1 foo x = foo (1 + x) foo 1 = 1 foo x = foo (1 + x) foo 0 = 0 foo x = x + (x + x) foo 0 = 0 foo x = x + (x + 1) foo 0 = 0 foo x = x + (1 + x) foo 0 = 0 foo x = x + (1 + 1) foo 0 = 0 foo x = 1 + (x + x) foo 0 = 0 foo x = 1 + (x + 1) foo 0 = 0 foo x = 1 + (1 + x) foo 0 = 0 foo x = 1 + (1 + 1) foo 0 = 1 foo x = x + (x + x) foo 0 = 1 foo x = x + (x + 1) foo 0 = 1 foo x = x + (1 + x) foo 0 = 1 foo x = x + (1 + 1) foo 0 = 1 foo x = 1 + (x + x) foo 0 = 1 foo x = 1 + (x + 1) foo 0 = 1 foo x = 1 + (1 + x) foo 0 = 1 foo x = 1 + (1 + 1) foo 0 = 1 + 1 foo x = x + x foo 0 = 1 + 1 foo x = x + 1 foo 0 = 1 + 1 foo x = 1 + x foo 0 = 1 + (1 + 1) foo x = x foo 0 = 1 + (1 + 1) foo x = 0 foo 0 = 1 + (1 + 1) foo x = 1 foo 0 = 0 foo 1 = 0 foo x = x + x foo 0 = 0 foo 1 = 0 foo x = x + 1 foo 0 = 0 foo 1 = 0 foo x = 1 + x foo 0 = 0 foo 1 = 0 foo x = 1 + 1 foo 0 = 0 foo 1 = 1 foo x = x + x foo 0 = 0 foo 1 = 1 foo x = x + 1 foo 0 = 0 foo 1 = 1 foo x = 1 + x foo 0 = 0 foo 1 = 1 foo x = 1 + 1 foo 0 = 0 foo 1 = 1 + 1 foo x = x foo 0 = 0 foo 1 = 1 + 1 foo x = 0 foo 0 = 0 foo 1 = 1 + 1 foo x = 1 foo 0 = 1 foo 1 = 0 foo x = x + x foo 0 = 1 foo 1 = 0 foo x = x + 1 foo 0 = 1 foo 1 = 0 foo x = 1 + x foo 0 = 1 foo 1 = 0 foo x = 1 + 1 foo 0 = 1 foo 1 = 1 foo x = x + x foo 0 = 1 foo 1 = 1 foo x = x + 1 foo 0 = 1 foo 1 = 1 foo x = 1 + x foo 0 = 1 foo 1 = 1 foo x = 1 + 1 foo 0 = 1 foo 1 = 1 + 1 foo x = x foo 0 = 1 foo 1 = 1 + 1 foo x = 0 foo 0 = 1 foo 1 = 1 + 1 foo x = 1 foo 0 = 1 + 1 foo 1 = 0 foo x = x foo 0 = 1 + 1 foo 1 = 0 foo x = 0 foo 0 = 1 + 1 foo 1 = 0 foo x = 1 foo 0 = 1 + 1 foo 1 = 1 foo x = x foo 0 = 1 + 1 foo 1 = 1 foo x = 0 foo 0 = 1 + 1 foo 1 = 1 foo x = 1 Candidates for: ? :: Int -> Int -> Int pruning with 6/10 rules [3,0,4,0] direct candidates [3,8,15,84] pattern candidates rules: x * y == x + y x * y == y + x x + 0 == x 0 + x == x (x + y) + z == x + (y + z) (x + y) + z == y + (x + z) equations: y + x == x + y y + (x + z) == x + (y + z) z + (x + y) == x + (y + z) z + (y + x) == x + (y + z) direct candidates: x ? y = x x ? y = y x ? y = 0 x ? y = x + x x ? y = x + y x ? y = y + x x ? y = y + y pattern candidates: x ? y = x x ? y = y x ? y = 0 x ? 0 = x x ? y = y x ? 0 = x x ? y = 0 x ? 0 = 0 x ? y = x x ? 0 = 0 x ? y = y 0 ? x = x x ? y = y 0 ? x = x x ? y = 0 0 ? x = 0 x ? y = x 0 ? x = 0 x ? y = y x ? y = x + x x ? y = x + y x ? y = y + x x ? y = y + y 0 ? 0 = 0 0 ? x = x x ? 0 = x x ? y = x 0 ? 0 = 0 0 ? x = x x ? 0 = x x ? y = y 0 ? 0 = 0 0 ? x = x x ? 0 = x x ? y = 0 0 ? 0 = 0 0 ? x = x x ? 0 = 0 x ? y = x 0 ? 0 = 0 0 ? x = x x ? 0 = 0 x ? y = y 0 ? 0 = 0 0 ? x = x x ? 0 = 0 x ? y = 0 0 ? 0 = 0 0 ? x = 0 x ? 0 = x x ? y = x 0 ? 0 = 0 0 ? x = 0 x ? 0 = x x ? y = y 0 ? 0 = 0 0 ? x = 0 x ? 0 = x x ? y = 0 0 ? 0 = 0 0 ? x = 0 x ? 0 = 0 x ? y = x 0 ? 0 = 0 0 ? x = 0 x ? 0 = 0 x ? y = y x ? 0 = x x ? y = x ? x x ? 0 = x x ? y = x ? 0 x ? 0 = x x ? y = x ? 0 x ? 0 = x x ? y = y ? x x ? 0 = x x ? y = y ? y x ? 0 = x x ? y = y ? 0 x ? 0 = x x ? y = y ? 0 x ? 0 = x x ? y = 0 ? x x ? 0 = x x ? y = 0 ? y x ? 0 = x x ? y = 0 ? x x ? 0 = x x ? y = 0 ? y x ? 0 = x ? x x ? y = x x ? 0 = 0 ? x x ? y = x x ? 0 = 0 ? x x ? y = x x ? 0 = x ? x x ? y = y x ? 0 = 0 ? x x ? y = y x ? 0 = 0 ? x x ? y = y x ? 0 = x ? x x ? y = 0 x ? 0 = 0 ? x x ? y = 0 x ? 0 = 0 ? x x ? y = 0 x ? 0 = 0 x ? y = x ? x x ? 0 = 0 x ? y = x ? 0 x ? 0 = 0 x ? y = x ? 0 x ? 0 = 0 x ? y = y ? x x ? 0 = 0 x ? y = y ? y x ? 0 = 0 x ? y = y ? 0 x ? 0 = 0 x ? y = y ? 0 x ? 0 = 0 x ? y = 0 ? x x ? 0 = 0 x ? y = 0 ? y x ? 0 = 0 x ? y = 0 ? x x ? 0 = 0 x ? y = 0 ? y 0 ? x = x x ? y = x ? x 0 ? x = x x ? y = x ? 0 0 ? x = x x ? y = x ? 0 0 ? x = x x ? y = y ? x 0 ? x = x x ? y = y ? y 0 ? x = x x ? y = y ? 0 0 ? x = x x ? y = y ? 0 0 ? x = x x ? y = 0 ? x 0 ? x = x x ? y = 0 ? y 0 ? x = x x ? y = 0 ? x 0 ? x = x x ? y = 0 ? y 0 ? x = x ? x x ? y = x 0 ? x = x ? 0 x ? y = x 0 ? x = x ? 0 x ? y = x 0 ? x = x ? x x ? y = y 0 ? x = x ? 0 x ? y = y 0 ? x = x ? 0 x ? y = y 0 ? x = x ? x x ? y = 0 0 ? x = x ? 0 x ? y = 0 0 ? x = x ? 0 x ? y = 0 0 ? x = 0 x ? y = x ? x 0 ? x = 0 x ? y = x ? 0 0 ? x = 0 x ? y = x ? 0 0 ? x = 0 x ? y = y ? x 0 ? x = 0 x ? y = y ? y 0 ? x = 0 x ? y = y ? 0 0 ? x = 0 x ? y = y ? 0 0 ? x = 0 x ? y = 0 ? x 0 ? x = 0 x ? y = 0 ? y 0 ? x = 0 x ? y = 0 ? x 0 ? x = 0 x ? y = 0 ? y x ? 0 = x x ? y = x + x x ? 0 = x x ? y = x + y x ? 0 = x x ? y = y + x x ? 0 = x x ? y = y + y x ? 0 = 0 x ? y = x + x x ? 0 = 0 x ? y = x + y x ? 0 = 0 x ? y = y + x x ? 0 = 0 x ? y = y + y x ? 0 = x + x x ? y = x x ? 0 = x + x x ? y = y x ? 0 = x + x x ? y = 0 0 ? x = x x ? y = x + x 0 ? x = x x ? y = x + y 0 ? x = x x ? y = y + x 0 ? x = x x ? y = y + y 0 ? x = 0 x ? y = x + x 0 ? x = 0 x ? y = x + y 0 ? x = 0 x ? y = y + x 0 ? x = 0 x ? y = y + y 0 ? x = x + x x ? y = x 0 ? x = x + x x ? y = y 0 ? x = x + x x ? y = 0 Candidates for: goo :: [Int] -> [Int] pruning with 4/4 rules [2,0,1,0,1,0] direct candidates [2,1,2,3,10,7] pattern candidates rules: xs ++ [] == xs [] ++ xs == xs (xs ++ ys) ++ zs == xs ++ (ys ++ zs) (x:xs) ++ ys == x:(xs ++ ys) direct candidates: goo xs = xs goo xs = [] goo xs = xs ++ xs goo xs = xs ++ (xs ++ xs) pattern candidates: goo xs = xs goo xs = [] goo [] = [] goo (x:xs) = xs goo [] = [] goo (x:xs) = goo xs goo xs = xs ++ xs goo [] = [] goo (x:xs) = x:xs goo [] = [] goo (x:xs) = [x] goo [] = [] goo (x:xs) = xs ++ xs goo [] = [] goo (x:xs) = goo [x] goo [] = [] goo (x:xs) = goo [x] goo [] = [] goo (x:xs) = goo [x] goo [] = [] goo (x:xs) = goo [x] goo [] = [] goo (x:xs) = goo (xs ++ xs) goo [] = [] goo (x:xs) = goo (xs ++ xs) goo [] = [] goo (x:xs) = x:goo xs goo [] = [] goo (x:xs) = xs ++ goo xs goo [] = [] goo (x:xs) = goo xs ++ xs goo xs = xs ++ (xs ++ xs) goo [] = [] goo (x:xs) = goo xs ++ goo xs goo [] = [] goo (x:xs) = x:x:xs goo [] = [] goo (x:xs) = [x,x] goo [] = [] goo (x:xs) = x:(xs ++ xs) goo [] = [] goo (x:xs) = xs ++ (x:xs) goo [] = [] goo (x:xs) = xs ++ [x] goo [] = [] goo (x:xs) = xs ++ (xs ++ xs) Candidates for: ?? :: [Int] -> [Int] -> [Int] pruning with 4/4 rules [3,0,4,0] direct candidates [3,8,15,82] pattern candidates rules: xs ++ [] == xs [] ++ xs == xs (xs ++ ys) ++ zs == xs ++ (ys ++ zs) (x:xs) ++ ys == x:(xs ++ ys) direct candidates: xs ?? ys = xs xs ?? ys = ys xs ?? ys = [] xs ?? ys = xs ++ xs xs ?? ys = xs ++ ys xs ?? ys = ys ++ xs xs ?? ys = ys ++ ys pattern candidates: xs ?? ys = xs xs ?? ys = ys xs ?? ys = [] xs ?? [] = xs xs ?? (x:ys) = ys xs ?? [] = xs xs ?? (x:ys) = [] xs ?? [] = [] xs ?? (x:ys) = xs xs ?? [] = [] xs ?? (x:ys) = ys [] ?? xs = xs (x:xs) ?? ys = ys [] ?? xs = xs (x:xs) ?? ys = [] [] ?? xs = [] (x:xs) ?? ys = xs [] ?? xs = [] (x:xs) ?? ys = ys xs ?? ys = xs ++ xs xs ?? ys = xs ++ ys xs ?? ys = ys ++ xs xs ?? ys = ys ++ ys [] ?? [] = [] [] ?? (x:xs) = xs (x:xs) ?? [] = xs (x:xs) ?? (y:ys) = xs [] ?? [] = [] [] ?? (x:xs) = xs (x:xs) ?? [] = xs (x:xs) ?? (y:ys) = ys [] ?? [] = [] [] ?? (x:xs) = xs (x:xs) ?? [] = xs (x:xs) ?? (y:ys) = [] [] ?? [] = [] [] ?? (x:xs) = xs (x:xs) ?? [] = [] (x:xs) ?? (y:ys) = xs [] ?? [] = [] [] ?? (x:xs) = xs (x:xs) ?? [] = [] (x:xs) ?? (y:ys) = ys [] ?? [] = [] [] ?? (x:xs) = xs (x:xs) ?? [] = [] (x:xs) ?? (y:ys) = [] [] ?? [] = [] [] ?? (x:xs) = [] (x:xs) ?? [] = xs (x:xs) ?? (y:ys) = xs [] ?? [] = [] [] ?? (x:xs) = [] (x:xs) ?? [] = xs (x:xs) ?? (y:ys) = ys [] ?? [] = [] [] ?? (x:xs) = [] (x:xs) ?? [] = xs (x:xs) ?? (y:ys) = [] [] ?? [] = [] [] ?? (x:xs) = [] (x:xs) ?? [] = [] (x:xs) ?? (y:ys) = xs [] ?? [] = [] [] ?? (x:xs) = [] (x:xs) ?? [] = [] (x:xs) ?? (y:ys) = ys xs ?? [] = xs xs ?? (x:ys) = xs ?? xs xs ?? [] = xs xs ?? (x:ys) = xs ?? ys xs ?? [] = xs xs ?? (x:ys) = xs ?? [] xs ?? [] = xs xs ?? (x:ys) = xs ?? [] xs ?? [] = xs xs ?? (x:ys) = ys ?? xs xs ?? [] = xs xs ?? (x:ys) = ys ?? ys xs ?? [] = xs xs ?? (x:ys) = ys ?? [] xs ?? [] = xs xs ?? (x:ys) = ys ?? [] xs ?? [] = xs xs ?? (x:ys) = [] ?? xs xs ?? [] = xs xs ?? (x:ys) = [] ?? ys xs ?? [] = xs xs ?? (x:ys) = [] ?? xs xs ?? [] = xs xs ?? (x:ys) = [] ?? ys xs ?? [] = [] xs ?? (x:ys) = xs ?? xs xs ?? [] = [] xs ?? (x:ys) = xs ?? ys xs ?? [] = [] xs ?? (x:ys) = xs ?? [] xs ?? [] = [] xs ?? (x:ys) = xs ?? [] xs ?? [] = [] xs ?? (x:ys) = ys ?? xs xs ?? [] = [] xs ?? (x:ys) = ys ?? ys xs ?? [] = [] xs ?? (x:ys) = ys ?? [] xs ?? [] = [] xs ?? (x:ys) = ys ?? [] xs ?? [] = [] xs ?? (x:ys) = [] ?? xs xs ?? [] = [] xs ?? (x:ys) = [] ?? ys xs ?? [] = [] xs ?? (x:ys) = [] ?? xs xs ?? [] = [] xs ?? (x:ys) = [] ?? ys [] ?? xs = xs (x:xs) ?? ys = xs ?? xs [] ?? xs = xs (x:xs) ?? ys = xs ?? ys [] ?? xs = xs (x:xs) ?? ys = xs ?? [] [] ?? xs = xs (x:xs) ?? ys = xs ?? [] [] ?? xs = xs (x:xs) ?? ys = ys ?? xs [] ?? xs = xs (x:xs) ?? ys = ys ?? ys [] ?? xs = xs (x:xs) ?? ys = ys ?? [] [] ?? xs = xs (x:xs) ?? ys = ys ?? [] [] ?? xs = xs (x:xs) ?? ys = [] ?? xs [] ?? xs = xs (x:xs) ?? ys = [] ?? ys [] ?? xs = xs (x:xs) ?? ys = [] ?? xs [] ?? xs = xs (x:xs) ?? ys = [] ?? ys [] ?? xs = [] (x:xs) ?? ys = xs ?? xs [] ?? xs = [] (x:xs) ?? ys = xs ?? ys [] ?? xs = [] (x:xs) ?? ys = xs ?? [] [] ?? xs = [] (x:xs) ?? ys = xs ?? [] [] ?? xs = [] (x:xs) ?? ys = ys ?? xs [] ?? xs = [] (x:xs) ?? ys = ys ?? ys [] ?? xs = [] (x:xs) ?? ys = ys ?? [] [] ?? xs = [] (x:xs) ?? ys = ys ?? [] [] ?? xs = [] (x:xs) ?? ys = [] ?? xs [] ?? xs = [] (x:xs) ?? ys = [] ?? ys [] ?? xs = [] (x:xs) ?? ys = [] ?? xs [] ?? xs = [] (x:xs) ?? ys = [] ?? ys xs ?? [] = xs xs ?? (x:ys) = x:xs xs ?? [] = xs xs ?? (x:ys) = x:ys xs ?? [] = xs xs ?? (x:ys) = [x] xs ?? [] = xs xs ?? (x:ys) = xs ++ xs xs ?? [] = xs xs ?? (x:ys) = xs ++ ys xs ?? [] = xs xs ?? (x:ys) = ys ++ xs xs ?? [] = xs xs ?? (x:ys) = ys ++ ys xs ?? [] = [] xs ?? (x:ys) = x:xs xs ?? [] = [] xs ?? (x:ys) = x:ys xs ?? [] = [] xs ?? (x:ys) = [x] xs ?? [] = [] xs ?? (x:ys) = xs ++ xs xs ?? [] = [] xs ?? (x:ys) = xs ++ ys xs ?? [] = [] xs ?? (x:ys) = ys ++ xs xs ?? [] = [] xs ?? (x:ys) = ys ++ ys xs ?? [] = xs ++ xs xs ?? (x:ys) = xs xs ?? [] = xs ++ xs xs ?? (x:ys) = ys xs ?? [] = xs ++ xs xs ?? (x:ys) = [] [] ?? xs = xs (x:xs) ?? ys = x:xs [] ?? xs = xs (x:xs) ?? ys = x:ys [] ?? xs = xs (x:xs) ?? ys = [x] [] ?? xs = xs (x:xs) ?? ys = xs ++ xs [] ?? xs = xs (x:xs) ?? ys = xs ++ ys [] ?? xs = xs (x:xs) ?? ys = ys ++ xs [] ?? xs = xs (x:xs) ?? ys = ys ++ ys [] ?? xs = [] (x:xs) ?? ys = x:xs [] ?? xs = [] (x:xs) ?? ys = x:ys [] ?? xs = [] (x:xs) ?? ys = [x] [] ?? xs = [] (x:xs) ?? ys = xs ++ xs [] ?? xs = [] (x:xs) ?? ys = xs ++ ys [] ?? xs = [] (x:xs) ?? ys = ys ++ xs [] ?? xs = [] (x:xs) ?? ys = ys ++ ys [] ?? xs = xs ++ xs (x:xs) ?? ys = xs [] ?? xs = xs ++ xs (x:xs) ?? ys = ys [] ?? xs = xs ++ xs (x:xs) ?? ys = [] Candidates for: ton :: Bool -> Bool pruning with 39/49 rules [3,1,0,0,2,4] direct candidates [3,3,0,0,0,0] pattern candidates rules: not False == True not True == False p && p == p p || p == p not (not p) == p p && False == False p && True == p False && p == False True && p == p p || False == p p || True == True False || p == p True || p == True not (p && q) == not p || not q not (p && q) == not q || not p not (p || q) == not p && not q not (p || q) == not q && not p p && not p == False not p && p == False p || not p == True not p || p == True (p && q) && r == p && (q && r) (p && q) && r == q && (p && r) (p || q) || r == p || (q || r) (p || q) || r == q || (p || r) p && (p && q) == p && q p && (q && p) == p && q p && (q && p) == q && p p || (p || q) == p || q p || (q || p) == p || q p || (q || p) == q || p p && (p || q) == p p && (q || p) == p (p || q) && p == p (p || q) && q == q p || p && q == p p || q && p == p p && q || p == p p && q || q == q equations: q && p == p && q q || p == p || q q && (p && r) == p && (q && r) r && (p && q) == p && (q && r) r && (q && p) == p && (q && r) q || (p || r) == p || (q || r) r || (p || q) == p || (q || r) r || (q || p) == p || (q || r) (r || q) && p == p && (q || r) r && q || p == p || q && r direct candidates: ton p = p ton p = False ton p = True ton p = not p ton p = p && ton (not p) ton p = p || ton (not p) ton p = p && not (ton (not p)) ton p = not p && ton (not p) ton p = p || not (ton (not p)) ton p = not p || ton (not p) pattern candidates: ton p = p ton p = False ton p = True ton p = not p ton False = False ton True = True ton False = True ton True = False Candidates for: &| :: Bool -> Bool -> Bool pruning with 39/49 rules [4,2,4,8,4,72] direct candidates [4,14,30,8,4,32] pattern candidates rules: not False == True not True == False p && p == p p || p == p not (not p) == p p && False == False p && True == p False && p == False True && p == p p || False == p p || True == True False || p == p True || p == True not (p && q) == not p || not q not (p && q) == not q || not p not (p || q) == not p && not q not (p || q) == not q && not p p && not p == False not p && p == False p || not p == True not p || p == True (p && q) && r == p && (q && r) (p && q) && r == q && (p && r) (p || q) || r == p || (q || r) (p || q) || r == q || (p || r) p && (p && q) == p && q p && (q && p) == p && q p && (q && p) == q && p p || (p || q) == p || q p || (q || p) == p || q p || (q || p) == q || p p && (p || q) == p p && (q || p) == p (p || q) && p == p (p || q) && q == q p || p && q == p p || q && p == p p && q || p == p p && q || q == q equations: q && p == p && q q || p == p || q q && (p && r) == p && (q && r) r && (p && q) == p && (q && r) r && (q && p) == p && (q && r) q || (p || r) == p || (q || r) r || (p || q) == p || (q || r) r || (q || p) == p || (q || r) (r || q) && p == p && (q || r) r && q || p == p || q && r direct candidates: p &| q = p p &| q = q p &| q = False p &| q = True p &| q = not p p &| q = not q p &| q = p && q p &| q = q && p p &| q = p || q p &| q = q || p p &| q = not p && q p &| q = not q && p p &| q = not p || q p &| q = not q || p p &| q = p && not q p &| q = q && not p p &| q = p || not q p &| q = q || not p p &| q = not p && not q p &| q = not q && not p p &| q = not p || not q p &| q = not q || not p p &| q = p && (not p && q) p &| q = p && (not p || q) p &| q = p && (q && not p) p &| q = p && (q || not p) p &| q = q && (not q && p) p &| q = q && (not q || p) p &| q = q && (p && not q) p &| q = q && (p || not q) p &| q = p || not p && q p &| q = p || (not p || q) p &| q = p || q && not p p &| q = p || (q || not p) p &| q = q || not q && p p &| q = q || (not q || p) p &| q = q || p && not q p &| q = q || (p || not q) p &| q = not p && (p || q) p &| q = not p && (q || p) p &| q = not q && (p || q) p &| q = not q && (q || p) p &| q = not p || p && q p &| q = not p || q && p p &| q = not q || p && q p &| q = not q || q && p p &| q = (p || q) && not p p &| q = (p || q) && not q p &| q = (q || p) && not p p &| q = (q || p) && not q p &| q = p && q || not p p &| q = p && q || not q p &| q = q && p || not p p &| q = q && p || not q p &| q = p && p &| not q p &| q = p && q &| not p p &| q = p && q &| not q p &| q = p && False &| not q p &| q = p && True &| not q p &| q = p && not p &| p p &| q = p && not p &| q p &| q = p && not p &| False p &| q = p && not p &| True p &| q = p && not q &| p p &| q = q && p &| not q p &| q = q && q &| not p p &| q = q && q &| not q p &| q = q && False &| not q p &| q = q && True &| not q p &| q = q && not p &| p p &| q = q && not p &| q p &| q = q && not p &| False p &| q = q && not p &| True p &| q = q && not q &| p p &| q = p || p &| not q p &| q = p || q &| not p p &| q = p || q &| not q p &| q = p || False &| not q p &| q = p || True &| not q p &| q = p || not p &| p p &| q = p || not p &| q p &| q = p || not p &| False p &| q = p || not p &| True p &| q = p || not q &| p p &| q = q || p &| not q p &| q = q || q &| not p p &| q = q || q &| not q p &| q = q || False &| not q p &| q = q || True &| not q p &| q = q || not p &| p p &| q = q || not p &| q p &| q = q || not p &| False p &| q = q || not p &| True p &| q = q || not q &| p pattern candidates: p &| q = p p &| q = q p &| q = False p &| q = True p &| q = not p p &| q = not q p &| False = p p &| True = False p &| False = p p &| True = True p &| False = False p &| True = p p &| False = False p &| True = True p &| False = True p &| True = p p &| False = True p &| True = False False &| p = p True &| p = False False &| p = p True &| p = True False &| p = False True &| p = p False &| p = False True &| p = True False &| p = True True &| p = p False &| p = True True &| p = False p &| q = p && q p &| q = q && p p &| q = p || q p &| q = q || p p &| False = p p &| True = not p p &| False = False p &| True = not p p &| False = True p &| True = not p p &| False = not p p &| True = p p &| False = not p p &| True = False p &| False = not p p &| True = True False &| p = p True &| p = not p False &| p = False True &| p = not p False &| p = True True &| p = not p False &| p = not p True &| p = p False &| p = not p True &| p = False False &| p = not p True &| p = True False &| False = False False &| True = False True &| False = False True &| True = True False &| False = False False &| True = False True &| False = True True &| True = False False &| False = False False &| True = False True &| False = True True &| True = True False &| False = False False &| True = True True &| False = False True &| True = False False &| False = False False &| True = True True &| False = False True &| True = True False &| False = False False &| True = True True &| False = True True &| True = False False &| False = False False &| True = True True &| False = True True &| True = True False &| False = True False &| True = False True &| False = False True &| True = False False &| False = True False &| True = False True &| False = False True &| True = True False &| False = True False &| True = False True &| False = True True &| True = False False &| False = True False &| True = False True &| False = True True &| True = True False &| False = True False &| True = True True &| False = False True &| True = False False &| False = True False &| True = True True &| False = False True &| True = True False &| False = True False &| True = True True &| False = True True &| True = False p &| q = not p && q p &| q = not q && p p &| q = not p || q p &| q = not q || p p &| q = p && not q p &| q = q && not p p &| q = p || not q p &| q = q || not p p &| q = not p && not q p &| q = not q && not p p &| q = not p || not q p &| q = not q || not p p &| q = p && (not p && q) p &| q = p && (not p || q) p &| q = p && (q && not p) p &| q = p && (q || not p) p &| q = q && (not q && p) p &| q = q && (not q || p) p &| q = q && (p && not q) p &| q = q && (p || not q) p &| q = p || not p && q p &| q = p || (not p || q) p &| q = p || q && not p p &| q = p || (q || not p) p &| q = q || not q && p p &| q = q || (not q || p) p &| q = q || p && not q p &| q = q || (p || not q) p &| q = not p && (p || q) p &| q = not p && (q || p) p &| q = not q && (p || q) p &| q = not q && (q || p) p &| q = not p || p && q p &| q = not p || q && p p &| q = not q || p && q p &| q = not q || q && p p &| q = (p || q) && not p p &| q = (p || q) && not q p &| q = (q || p) && not p p &| q = (q || p) && not q p &| q = p && q || not p p &| q = p && q || not q p &| q = q && p || not p p &| q = q && p || not q