TerpreT benchmark #1: invert invert :: [Bool] -> [Bool] -- testing 4 combinations of argument values -- pruning with 41/51 rules -- 2 candidates of size 1 -- 1 candidates of size 2 -- 4 candidates of size 3 -- 10 candidates of size 4 -- 15 candidates of size 5 -- 41 candidates of size 6 -- tested 33 candidates invert [] = [] invert (p:ps) = not p:invert ps TerpreT benchmark #2: prepend zero prependZero :: [Bool] -> [Bool] -- testing 3 combinations of argument values -- pruning with 41/51 rules -- 2 candidates of size 1 -- 1 candidates of size 2 -- 4 candidates of size 3 -- tested 4 candidates prependZero ps = False:ps TerpreT benchmark #3: binary decrement decrement :: [Bool] -> [Bool] -- testing 3 combinations of argument values -- pruning with 41/51 rules -- 2 candidates of size 1 -- 1 candidates of size 2 -- 4 candidates of size 3 -- 10 candidates of size 4 -- 15 candidates of size 5 -- 41 candidates of size 6 -- 82 candidates of size 7 -- 202 candidates of size 8 -- 479 candidates of size 9 -- tested 411 candidates decrement [] = [] decrement (p:ps) = not p:(if p then ps else decrement ps) TerpreT benchmark #4: controlled shift cshift :: (Bool,Bool,Bool) -> (Bool,Bool,Bool) -- testing 4 combinations of argument values -- pruning with 41/51 rules -- reasoning produced 2 incorrect properties, please re-run with more tests for faster results -- 1 candidates of size 1 -- 0 candidates of size 2 -- 0 candidates of size 3 -- 10 candidates of size 4 -- 125 candidates of size 5 -- 225 candidates of size 6 -- 625 candidates of size 7 -- 1242 candidates of size 8 -- 3087 candidates of size 9 -- 8937 candidates of size 10 -- 102200 candidates of size 11 -- tested 39710 candidates cshift (p,q,r) = if p then (p,r,q) else (p,q,r) cshift :: Bool -> Bool -> Bool -> (Bool,Bool,Bool) -- testing 4 combinations of argument values -- pruning with 41/51 rules -- reasoning produced 2 incorrect properties, please re-run with more tests for faster results -- 0 candidates of size 1 -- 0 candidates of size 2 -- 0 candidates of size 3 -- 125 candidates of size 4 -- 225 candidates of size 5 -- 585 candidates of size 6 -- 1242 candidates of size 7 -- 15183 candidates of size 8 -- tested 15459 candidates cshift False p q = (False,p,q) cshift True p q = (True,q,p) TerpreT benchmark #5: full adder fadder :: Bool -> Bool -> Bool -> (Bool,Bool) -- testing 8 combinations of argument values -- pruning with 18/22 rules -- 0 candidates of size 1 -- 0 candidates of size 2 -- 9 candidates of size 3 -- 18 candidates of size 4 -- 27 candidates of size 5 -- 72 candidates of size 6 -- 245 candidates of size 7 -- 663 candidates of size 8 -- tested 1034 candidates fadder False False False = (False,False) fadder False False True = (False,True) fadder False True False = (False,True) fadder False True True = (True,False) fadder True False False = (False,True) fadder True False True = (True,False) fadder True True False = (True,False) fadder True True True = (True,True) TerpreT benchmark #6: 2-bit adder adder2 :: (Bool,Bool) -> (Bool,Bool) -> (Bool,Bool,Bool) -- testing 5 combinations of argument values -- pruning with 74/92 rules -- reasoning produced 2 incorrect properties, please re-run with more tests for faster results -- 0 candidates of size 1 -- 0 candidates of size 2 -- 0 candidates of size 3 -- 8 candidates of size 4 -- 128 candidates of size 5 -- 408 candidates of size 6 -- tested 544 candidates cannot conjure TerpreT benchmark #7: access access :: [A] -> Int -> A -- testing 5 combinations of argument values -- pruning with 0/0 rules -- 0 candidates of size 1 -- 0 candidates of size 2 -- 1 candidates of size 3 -- tested 1 candidates xs `access` x = xs !! x access :: [A] -> Int -> A -- testing 5 combinations of argument values -- pruning with 4/7 rules -- 1 candidates of size 1 -- 1 candidates of size 2 -- 1 candidates of size 3 -- 1 candidates of size 4 -- 6 candidates of size 5 -- 5 candidates of size 6 -- 19 candidates of size 7 -- tested 18 candidates [] `access` x = undefined (x:xs) `access` 0 = x (x:xs) `access` y = xs `access` (y - 1) TerpreT benchmark #8: decrement elements decrelements :: [Int] -> [Int] -- testing 3 combinations of argument values -- pruning with 3/23 rules -- 2 candidates of size 1 -- 1 candidates of size 2 -- 2 candidates of size 3 -- 7 candidates of size 4 -- 8 candidates of size 5 -- 29 candidates of size 6 -- 39 candidates of size 7 -- tested 51 candidates decrelements [] = [] decrelements (x:xs) = x - 1:decrelements xs decrelements :: [Int] -> [Int] -- testing 3 combinations of argument values -- pruning with 5/26 rules -- 2 candidates of size 1 -- 1 candidates of size 2 -- 2 candidates of size 3 -- 8 candidates of size 4 -- tested 7 candidates decrelements xs = map (subtract 1) xs