subset :: [Int] -> [Int] -> Bool
-- testing 44 combinations of argument values
-- pruning with 3/3 rules
{-
rules:
xs `isSubsequenceOf` xs == True
sort (sort xs) == sort xs
sort xs `isSubsequenceOf` ys == xs `isSubsequenceOf` sort ys

-}
-- reasoning produced 1 incorrect properties, please re-run with more tests for faster results
{-
invalid:
xs `isSubsequenceOf` sort xs == True
-}
-- 0 candidates of size 1
-- 0 candidates of size 2
-- 2 candidates of size 3
-- 4 candidates of size 4
-- 0 candidates of size 5
-- 0 candidates of size 6
-- 3 candidates of size 7
-- 2 candidates of size 8
-- 0 candidates of size 9
-- 4 candidates of size 10
-- 8 candidates of size 11
-- 4 candidates of size 12
-- 0 candidates of size 13
-- 0 candidates of size 14
-- 0 candidates of size 15
-- 0 candidates of size 16
-- 0 candidates of size 17
-- 0 candidates of size 18
-- tested 27 candidates
subset  =  undefined  -- search exhausted

subset :: [Int] -> [Int] -> Bool
-- testing 44 combinations of argument values
-- pruning with 3/3 rules
{-
rules:
xs `isSubsequenceOf` xs == True
sort (sort xs) == sort xs
sort xs `isSubsequenceOf` xs == xs `isSubsequenceOf` sort xs

-}
-- 0 candidates of size 1
-- 0 candidates of size 2
-- 2 candidates of size 3
-- 6 candidates of size 4
-- 2 candidates of size 5
-- tested 9 candidates
subset xs ys  =  sort xs `isSubsequenceOf` sort ys

replicates :: [Char] -> Int -> [Char]
-- testing 60 combinations of argument values
-- pruning with 2/2 rules
{-
rules:
concat (transpose xss) == concat xss
transpose (transpose (transpose xss)) == transpose xss

-}
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 1 candidates of size 4
-- 0 candidates of size 5
-- 0 candidates of size 6
-- 1 candidates of size 7
-- 0 candidates of size 8
-- 0 candidates of size 9
-- 1 candidates of size 10
-- 0 candidates of size 11
-- 0 candidates of size 12
-- 1 candidates of size 13
-- 0 candidates of size 14
-- 0 candidates of size 15
-- 1 candidates of size 16
-- 0 candidates of size 17
-- 0 candidates of size 18
-- tested 6 candidates
replicates  =  undefined  -- search exhausted

replicates :: [Char] -> Int -> [Char]
-- testing 360 combinations of argument values
-- pruning with 2/2 rules
{-
rules:
transpose (transpose (transpose xss)) == transpose xss
replicate x (concat (transpose xss)) == replicate x (concat xss)

-}
-- 1 candidates of size 1
-- 0 candidates of size 2
-- 0 candidates of size 3
-- 1 candidates of size 4
-- 1 candidates of size 5
-- tested 3 candidates
replicates cs x  =  concat (transpose (replicate x cs))