import Test.Speculate isSubsequenceOf :: Eq a => [a] -> [a] -> Bool isSubsequenceOf [] _ = True isSubsequenceOf (_:_) [] = False isSubsequenceOf (x:xs) (y:ys) | x == y = xs `isSubsequenceOf` ys | otherwise = (x:xs) `isSubsequenceOf` ys main :: IO () main = speculate args { maxSemiSize = 0 , maxVars = 3 --, instances = [ mkOrdLessEqual (isPrefixOf :: [Int] -> [Int] -> Bool) ] --, instances = [ mkOrdLessEqual (isInfixOf :: [Int] -> [Int] -> Bool) ] , instances = [ mkOrdLessEqual (isSubsequenceOf :: [Int] -> [Int] -> Bool) ] , constants = [ showConstant ([] :: [Int]) , constant ":" ((:) :: Int -> [Int] -> [Int]) , constant "++" ((++) :: [Int] -> [Int] -> [Int]) , constant "head" (head :: [Int] -> Int) , constant "tail" (tail :: [Int] -> [Int]) -- , constant "null" (null :: [Int] -> Bool) ] }