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
-}
-- looking through 0 candidates of size 1
-- looking through 0 candidates of size 2
-- looking through 2 candidates of size 3
-- looking through 4 candidates of size 4
-- looking through 0 candidates of size 5
-- looking through 0 candidates of size 6
-- looking through 10 candidates of size 7
-- looking through 10 candidates of size 8
-- looking through 0 candidates of size 9
-- looking through 6 candidates of size 10
-- looking through 20 candidates of size 11
-- looking through 15 candidates of size 12
-- tested 67 candidates
cannot conjure

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

-}
-- looking through 0 candidates of size 1
-- looking through 0 candidates of size 2
-- looking through 2 candidates of size 3
-- looking through 6 candidates of size 4
-- looking through 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

-}
-- looking through 1 candidates of size 1
-- looking through 0 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 1 candidates of size 4
-- looking through 0 candidates of size 5
-- looking through 0 candidates of size 6
-- looking through 1 candidates of size 7
-- looking through 0 candidates of size 8
-- looking through 0 candidates of size 9
-- looking through 1 candidates of size 10
-- looking through 0 candidates of size 11
-- looking through 0 candidates of size 12
-- tested 4 candidates
cannot conjure

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)

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

