code-conjure 0.4.2 → 0.4.4
raw patch · 66 files changed
+12642/−7826 lines, 66 filesdep ~expressdep ~speculatePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: express, speculate
API changes (from Hackage documentation)
+ Conjure: [maxDeconstructionSize] :: Args -> Int
+ Conjure: class (Show a, Typeable a) => Express a
+ Conjure: class Name a
+ Conjure: expr :: Express a => a -> Expr
+ Conjure: name :: Name a => a -> String
+ Conjure.Conjurable: candidateDeconstructionsFrom :: Expr -> [Expr]
+ Conjure.Conjurable: class (Show a, Typeable a) => Express a
+ Conjure.Conjurable: class Name a
+ Conjure.Conjurable: conjureIsDeconstruction :: Conjurable f => f -> Int -> Expr -> Bool
+ Conjure.Conjurable: expr :: Express a => a -> Expr
+ Conjure.Conjurable: name :: Name a => a -> String
+ Conjure.Engine: [maxDeconstructionSize] :: Args -> Int
+ Conjure.Engine: deconstructions :: (a -> Bool) -> (a -> a) -> a -> [a]
+ Conjure.Engine: div' :: Expr -> Expr -> Expr
+ Conjure.Engine: divE :: Expr
+ Conjure.Engine: doubleCheck :: (Expr -> Expr -> Bool) -> Thy -> Thy
+ Conjure.Engine: init' :: Expr -> Expr
+ Conjure.Engine: mod' :: Expr -> Expr -> Expr
+ Conjure.Engine: modE :: Expr
+ Conjure.Engine: oo :: Expr -> Expr -> Expr
+ Conjure.Engine: ooE :: Expr
+ Conjure.Engine: question :: Expr
+ Conjure.Engine: quot' :: Expr -> Expr -> Expr
+ Conjure.Engine: quotE :: Expr
+ Conjure.Engine: rem' :: Expr -> Expr -> Expr
+ Conjure.Engine: remE :: Expr
+ Conjure.Expr: div' :: Expr -> Expr -> Expr
+ Conjure.Expr: divE :: Expr
+ Conjure.Expr: init' :: Expr -> Expr
+ Conjure.Expr: mod' :: Expr -> Expr -> Expr
+ Conjure.Expr: modE :: Expr
+ Conjure.Expr: oo :: Expr -> Expr -> Expr
+ Conjure.Expr: ooE :: Expr
+ Conjure.Expr: question :: Expr
+ Conjure.Expr: quot' :: Expr -> Expr -> Expr
+ Conjure.Expr: quotE :: Expr
+ Conjure.Expr: rem' :: Expr -> Expr -> Expr
+ Conjure.Expr: remE :: Expr
- Conjure: Args :: Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> [[Expr]] -> Args
+ Conjure: Args :: Int -> Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> [[Expr]] -> Args
- Conjure.Engine: Args :: Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> [[Expr]] -> Args
+ Conjure.Engine: Args :: Int -> Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> [[Expr]] -> Args
Files
- .gitignore +2/−0
- Makefile +2/−0
- README.md +9/−8
- TODO.md +10/−8
- bench/candidates.hs +1/−1
- bench/candidates.out +9723/−7483
- bench/gps.hs +601/−0
- bench/gps.out +334/−14
- bench/gps2.hs +797/−0
- bench/gps2.out +349/−0
- bench/ill-hit.out +6/−6
- bench/lowtests.out +1/−1
- bench/p12.out +4/−4
- bench/runtime/zero/bench/candidates.runtime +1/−1
- bench/runtime/zero/bench/gps.runtime +1/−1
- bench/runtime/zero/bench/gps2.runtime +1/−0
- bench/runtime/zero/bench/lowtests.runtime +1/−1
- bench/runtime/zero/bench/p12.runtime +1/−1
- bench/runtime/zero/bench/take-drop.runtime +1/−1
- bench/runtime/zero/bench/terpret.runtime +1/−0
- bench/runtime/zero/eg/bools.runtime +1/−1
- bench/runtime/zero/eg/count.runtime +1/−1
- bench/runtime/zero/eg/dupos.runtime +1/−1
- bench/runtime/zero/eg/factorial.runtime +1/−1
- bench/runtime/zero/eg/fib01.runtime +1/−1
- bench/runtime/zero/eg/fibonacci.runtime +1/−1
- bench/runtime/zero/eg/ints.runtime +1/−1
- bench/runtime/zero/eg/list.runtime +1/−1
- bench/runtime/zero/eg/pow.runtime +1/−1
- bench/runtime/zero/eg/setelem.runtime +1/−1
- bench/runtime/zero/eg/sort.runtime +1/−1
- bench/runtime/zero/eg/tree.runtime +1/−1
- bench/runtime/zero/versions +2/−2
- bench/take-drop.hs +13/−10
- bench/take-drop.out +20/−18
- bench/terpret.hs +249/−0
- bench/terpret.out +156/−0
- changelog.md +12/−0
- code-conjure.cabal +4/−4
- eg/arith.out +3/−3
- eg/bools.out +2/−2
- eg/count.out +5/−5
- eg/dupos.out +2/−2
- eg/factorial.hs +13/−63
- eg/factorial.out +17/−16
- eg/fib01.hs +6/−0
- eg/fib01.out +1/−1
- eg/fibonacci.hs +5/−16
- eg/fibonacci.out +15/−14
- eg/gcd.hs +1/−1
- eg/gcd.out +3/−3
- eg/ints.hs +26/−8
- eg/ints.out +23/−23
- eg/pow.hs +3/−6
- eg/pow.out +12/−11
- eg/replicate.hs +2/−1
- eg/replicate.out +6/−5
- eg/setelem.out +6/−6
- eg/tapps.out +4/−4
- eg/tree.out +4/−4
- mk/depend.mk +26/−0
- src/Conjure.hs +2/−0
- src/Conjure/Conjurable.hs +36/−1
- src/Conjure/Engine.hs +63/−53
- stack.yaml +2/−2
- test/conjurable.hs +40/−0
.gitignore view
@@ -56,7 +56,9 @@ bench/p30 bench/candidates bench/gps+bench/gps2 bench/lowtests+bench/terpret proto/u-conjure test/expr test/conjurable
Makefile view
@@ -33,6 +33,8 @@ bench/p12 \ bench/p30 \ bench/gps \+ bench/gps2 \+ bench/terpret \ proto/u-conjure TESTS = \
README.md view
@@ -94,7 +94,7 @@ , pr (1::Int) , prim "+" ((+) :: Int -> Int -> Int) , prim "*" ((*) :: Int -> Int -> Int)- , prim "dec" (subtract 1 :: Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int) ] running@@ -105,15 +105,16 @@ factorial :: Int -> Int -- testing 4 combinations of argument values- -- pruning with 22/42 rules+ -- pruning with 27/65 rules -- looking through 3 candidates of size 1- -- looking through 6 candidates of size 2- -- looking through 16 candidates of size 3- -- looking through 39 candidates of size 4- -- looking through 78 candidates of size 5- -- looking through 166 candidates of size 6+ -- looking through 4 candidates of size 2+ -- looking through 13 candidates of size 3+ -- looking through 34 candidates of size 4+ -- looking through 75 candidates of size 5+ -- looking through 183 candidates of size 6+ -- looking through 577 candidates of size 7 factorial 0 = 1- factorial x = x * factorial (dec x)+ factorial x = x * factorial (x - 1) in less than a second.
TODO.md view
@@ -3,25 +3,27 @@ A non-exhaustive list of things TO DO for Conjure. -* pretty-print top-level ifs?+* consider not breaking in some cases (increased crossproduct of patterns) -* carry on implementing all GPS benches while taking notes on the paper+* reduce the number of `deconstructions` considered: -* consider memoizing `recs ep` in `candidateDefnsC`- and a sub function with `vs` arguments.+ 1. place a `traceShowId` in `deconstructions :: [Expr]`+ 2. run the GCD example -* remove `requireDescent=False` requirement from `gcd`- (add and use `isDeconstruction`)- this would also eliminate the requirement of providing `dec`+ [_ `mod` y :: Int,x `mod` _ :: Int,_ `mod` x :: Int,y `mod` _ :: Int,0 `mod` _ :: Int,0 `mod` _ :: Int] -* consider not breaking in some cases (increased crossproduct of patterns)+ 3. there's no need to go variable by variable. Just generating expressions+ with a _single hole_ should be enough. + ### for later * allow specifying properties that need to be true * allow recursion under any lazy functions (discover them by testing!)++* pretty-print top-level ifs? * exclude magic numbers? e.g.: `1+1`?
bench/candidates.hs view
@@ -38,7 +38,7 @@ , pr (1 :: Int) , prim "+" ((+) :: Int -> Int -> Int) , prim "*" ((+) :: Int -> Int -> Int)- , prim "dec" (subtract 1 :: Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int) ] printCandidates 9 6 "?" (undefined :: Int -> Int -> Int)
bench/candidates.out view
@@ -1,7487 +1,9727 @@ Candidates for: foo :: Int -> Int- pruning with 13/26 rules- [3,2,4,3,12,7,27,25,58] direct candidates, 0 duplicates- [3,6,15,34,61,111,174,344,529] pattern candidates, 0 duplicates--rules:-dec 1 == 0-x * y == x + y-x * y == y + x-x + 0 == x-0 + x == x-dec (x + y) == x + dec y-dec (x + y) == y + dec x-dec (x + y) == dec x + y-dec (x + y) == dec y + x-1 + dec x == x-dec x + 1 == x-(x + y) + z == x + (y + z)-(x + y) + z == y + (x + z)-equations:-y + x == x + y-y + dec x == x + dec y-dec x + y == x + dec y-dec y + x == dec x + y-x + dec 0 == dec x-dec 0 + x == dec x-y + (x + z) == x + (y + z)-z + (x + y) == x + (y + z)-z + (y + x) == x + (y + z)-y + dec (dec x) == x + dec (dec y)-dec (dec x) + y == x + dec (dec y)-x + dec (dec 0) == dec (dec x)-dec (dec 0) + x == dec (dec x)--direct candidates:--foo x = x--foo x = 0--foo x = 1--foo x = dec x--foo x = dec 0--foo x = x + x--foo x = x + 1--foo x = 1 + x--foo x = 1 + 1--foo x = dec 0 + x--foo x = x + dec x--foo x = x + dec 0--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 x = dec x + dec x--foo x = dec x + dec 0--foo x = dec 0 + dec x--foo x = dec 0 + dec 0--foo x = x + (dec 0 + x)--foo x = x + (x + dec x)--foo x = x + (x + dec 0)--foo x = 1 + (dec 0 + x)--foo x = 1 + (x + dec x)--foo x = 1 + (x + dec 0)--foo x = dec 0 + (x + x)---pattern candidates:--foo x = x--foo x = 0--foo x = 1--foo x = dec x--foo x = dec 0--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 0 = 0-foo x = dec x--foo 0 = 0-foo x = dec 0--foo 0 = 1-foo x = dec x--foo 0 = 1-foo x = dec 0--foo 0 = dec 0-foo x = x--foo 0 = dec 0-foo x = 0--foo 0 = dec 0-foo x = 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 = foo (dec x)--foo 0 = 1-foo x = foo (dec x)--foo x = dec 0 + x--foo x = x + dec x--foo x = x + dec 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 = dec 0-foo x = dec x--foo 0 = 1 + 1-foo x = x--foo 0 = 1 + 1-foo x = 0--foo 0 = 1 + 1-foo x = 1--foo 1 = 0-foo x = dec x--foo 1 = 0-foo x = dec 0--foo 1 = 1-foo x = dec x--foo 1 = 1-foo x = dec 0--foo 1 = dec 0-foo x = x--foo 1 = dec 0-foo x = 0--foo 1 = dec 0-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 = dec (foo (dec x))--foo 0 = 1-foo x = dec (foo (dec x))--foo 0 = dec 0-foo x = foo (dec x)--foo 1 = 0-foo x = foo (dec x)--foo 1 = 1-foo x = foo (dec 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 x = dec x + dec x--foo x = dec x + dec 0--foo x = dec 0 + dec x--foo x = dec 0 + dec 0--foo 0 = 0-foo x = dec 0 + x--foo 0 = 0-foo x = x + dec x--foo 0 = 0-foo x = x + dec 0--foo 0 = 1-foo x = dec 0 + x--foo 0 = 1-foo x = x + dec x--foo 0 = 1-foo x = x + dec 0--foo 0 = dec 0-foo x = x + x--foo 0 = dec 0-foo x = x + 1--foo 0 = dec 0-foo x = 1 + x--foo 0 = dec 0-foo x = 1 + 1--foo 0 = 1 + 1-foo x = dec x--foo 0 = 1 + 1-foo x = dec 0--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 = dec 0-foo x = dec x--foo 1 = 1 + 1-foo x = x--foo 1 = 1 + 1-foo x = 0--foo 1 = 1 + 1-foo x = 1--foo 0 = 0-foo 1 = 0-foo x = dec x--foo 0 = 0-foo 1 = 0-foo x = dec 0--foo 0 = 0-foo 1 = 1-foo x = dec x--foo 0 = 0-foo 1 = 1-foo x = dec 0--foo 0 = 0-foo 1 = dec 0-foo x = x--foo 0 = 0-foo 1 = dec 0-foo x = 0--foo 0 = 0-foo 1 = dec 0-foo x = 1--foo 0 = 1-foo 1 = 0-foo x = dec x--foo 0 = 1-foo 1 = 0-foo x = dec 0--foo 0 = 1-foo 1 = 1-foo x = dec x--foo 0 = 1-foo 1 = 1-foo x = dec 0--foo 0 = 1-foo 1 = dec 0-foo x = x--foo 0 = 1-foo 1 = dec 0-foo x = 0--foo 0 = 1-foo 1 = dec 0-foo x = 1--foo 0 = dec 0-foo 1 = 0-foo x = x--foo 0 = dec 0-foo 1 = 0-foo x = 0--foo 0 = dec 0-foo 1 = 0-foo x = 1--foo 0 = dec 0-foo 1 = 1-foo x = x--foo 0 = dec 0-foo 1 = 1-foo x = 0--foo 0 = dec 0-foo 1 = 1-foo x = 1--foo 0 = 0-foo x = x + foo (dec x)--foo 0 = 0-foo x = foo (dec x) + x--foo 0 = 0-foo x = foo (dec x) + 1--foo 0 = 0-foo x = 1 + foo (dec x)--foo 0 = 1-foo x = x + foo (dec x)--foo 0 = 1-foo x = foo (dec x) + x--foo 0 = 1-foo x = foo (dec x) + 1--foo 0 = 1-foo x = 1 + foo (dec x)--foo 0 = dec 0-foo x = dec (foo (dec x))--foo 0 = 1 + 1-foo x = foo (dec x)--foo 1 = 0-foo x = dec (foo (dec x))--foo 1 = 1-foo x = dec (foo (dec x))--foo 1 = dec 0-foo x = foo (dec x)--foo 0 = 0-foo 1 = 0-foo x = foo (dec x)--foo 0 = 0-foo 1 = 1-foo x = foo (dec x)--foo 0 = 1-foo 1 = 0-foo x = foo (dec x)--foo 0 = 1-foo 1 = 1-foo x = foo (dec x)--foo x = x + (dec 0 + x)--foo x = x + (x + dec x)--foo x = x + (x + dec 0)--foo x = 1 + (dec 0 + x)--foo x = 1 + (x + dec x)--foo x = 1 + (x + dec 0)--foo x = dec 0 + (x + 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 = 0-foo x = dec x + dec x--foo 0 = 0-foo x = dec x + dec 0--foo 0 = 0-foo x = dec 0 + dec x--foo 0 = 0-foo x = dec 0 + dec 0--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-foo x = dec x + dec x--foo 0 = 1-foo x = dec x + dec 0--foo 0 = 1-foo x = dec 0 + dec x--foo 0 = 1-foo x = dec 0 + dec 0--foo 0 = dec 0-foo x = dec 0 + x--foo 0 = dec 0-foo x = x + dec x--foo 0 = dec 0-foo x = x + dec 0--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 = dec 0 + dec 0-foo x = x--foo 0 = dec 0 + dec 0-foo x = 0--foo 0 = dec 0 + dec 0-foo x = 1--foo 1 = 0-foo x = dec 0 + x--foo 1 = 0-foo x = x + dec x--foo 1 = 0-foo x = x + dec 0--foo 1 = 1-foo x = dec 0 + x--foo 1 = 1-foo x = x + dec x--foo 1 = 1-foo x = x + dec 0--foo 1 = dec 0-foo x = x + x--foo 1 = dec 0-foo x = x + 1--foo 1 = dec 0-foo x = 1 + x--foo 1 = dec 0-foo x = 1 + 1--foo 1 = 1 + 1-foo x = dec x--foo 1 = 1 + 1-foo x = dec 0--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 = dec 0-foo x = dec x--foo 0 = 0-foo 1 = dec 0-foo x = dec 0--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 = dec 0-foo x = dec x--foo 0 = 1-foo 1 = dec 0-foo x = dec 0--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 = dec 0-foo 1 = 0-foo x = dec x--foo 0 = dec 0-foo 1 = 0-foo x = dec 0--foo 0 = dec 0-foo 1 = 1-foo x = dec x--foo 0 = dec 0-foo 1 = 1-foo x = dec 0--foo 0 = dec 0-foo 1 = dec 0-foo x = x--foo 0 = dec 0-foo 1 = dec 0-foo x = 0--foo 0 = dec 0-foo 1 = dec 0-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 10/23 rules- [3,3,4,10,17,26,54,93,162] direct candidates, 0 duplicates- [3,11,39,88,245,596,1542,3881,9466] pattern candidates, 0 duplicates--rules:-x * y == x + y-x * y == y + x-x + 0 == x-0 + x == x-dec (x + y) == x + dec y-dec (x + y) == y + dec x-dec (x + y) == dec x + y-dec (x + y) == dec y + x-(x + y) + z == x + (y + z)-(x + y) + z == y + (x + z)-equations:-y + x == x + y-y + dec x == x + dec y-dec x + y == x + dec y-dec y + x == dec x + y-x + dec 0 == dec x-dec 0 + x == dec x-y + (x + z) == x + (y + z)-z + (x + y) == x + (y + z)-z + (y + x) == x + (y + z)-y + dec (dec x) == x + dec (dec y)-dec (dec x) + y == x + dec (dec y)-x + dec (dec 0) == dec (dec x)-dec (dec 0) + x == dec (dec x)--direct candidates:--x ? y = x--x ? y = y--x ? y = 0--x ? y = dec x--x ? y = dec y--x ? y = dec 0--x ? y = x + x--x ? y = x + y--x ? y = y + x--x ? y = y + y--x ? y = dec x + y--x ? y = dec y + x--x ? y = dec 0 + x--x ? y = dec 0 + y--x ? y = x + dec x--x ? y = x + dec y--x ? y = x + dec 0--x ? y = y + dec x--x ? y = y + dec y--x ? y = y + dec 0--x ? y = x + (x + x)--x ? y = x + (x + y)--x ? y = x + (y + x)--x ? y = x + (y + y)--x ? y = y + (x + x)--x ? y = y + (x + y)--x ? y = y + (y + x)--x ? y = y + (y + y)--x ? y = dec x + dec x--x ? y = dec x + dec y--x ? y = dec x + dec 0--x ? y = dec y + dec x--x ? y = dec y + dec y--x ? y = dec y + dec 0--x ? y = dec 0 + dec x--x ? y = dec 0 + dec y--x ? y = dec 0 + dec 0--x ? y = x + (dec x + y)--x ? y = x + (dec y + x)--x ? y = x + (dec 0 + x)--x ? y = x + (dec 0 + y)--x ? y = x + (x + dec x)--x ? y = x + (x + dec y)--x ? y = x + (x + dec 0)--x ? y = x + (y + dec x)--x ? y = x + (y + dec y)--x ? y = x + (y + dec 0)--x ? y = y + (dec x + y)--x ? y = y + (dec y + x)--x ? y = y + (dec 0 + x)--x ? y = y + (dec 0 + y)--x ? y = y + (x + dec x)--x ? y = y + (x + dec y)--x ? y = y + (x + dec 0)--x ? y = y + (y + dec x)--x ? y = y + (y + dec y)--x ? y = y + (y + dec 0)--x ? y = dec x + (y + y)--x ? y = dec y + (x + x)--x ? y = dec 0 + (x + x)--x ? y = dec 0 + (x + y)--x ? y = dec 0 + (y + x)--x ? y = dec 0 + (y + y)---pattern candidates:--x ? y = x--x ? y = y--x ? y = 0--x ? y = dec x--x ? y = dec y--x ? y = dec 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--x ? 0 = x-x ? y = dec x--x ? 0 = x-x ? y = dec y--x ? 0 = x-x ? y = dec 0--x ? 0 = 0-x ? y = dec x--x ? 0 = 0-x ? y = dec y--x ? 0 = 0-x ? y = dec 0--x ? 0 = dec x-x ? y = x--x ? 0 = dec x-x ? y = y--x ? 0 = dec x-x ? y = 0--x ? 0 = dec 0-x ? y = x--x ? 0 = dec 0-x ? y = y--x ? 0 = dec 0-x ? y = 0--0 ? x = x-x ? y = dec x--0 ? x = x-x ? y = dec y--0 ? x = x-x ? y = dec 0--0 ? x = 0-x ? y = dec x--0 ? x = 0-x ? y = dec y--0 ? x = 0-x ? y = dec 0--0 ? x = dec x-x ? y = x--0 ? x = dec x-x ? y = y--0 ? x = dec x-x ? y = 0--0 ? x = dec 0-x ? y = x--0 ? x = dec 0-x ? y = y--0 ? x = dec 0-x ? y = 0--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 ? y = dec x + y--x ? y = dec y + x--x ? y = dec 0 + x--x ? y = dec 0 + y--x ? y = x + dec x--x ? y = x + dec y--x ? y = x + dec 0--x ? y = y + dec x--x ? y = y + dec y--x ? y = y + dec 0--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 = dec x-x ? y = dec y--x ? 0 = dec x-x ? y = dec 0--x ? 0 = dec 0-x ? y = dec x--x ? 0 = dec 0-x ? y = dec 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 = dec x-x ? y = dec y--0 ? x = dec x-x ? y = dec 0--0 ? x = dec 0-x ? y = dec x--0 ? x = dec 0-x ? y = dec y--0 ? x = x + x-x ? y = x--0 ? x = x + x-x ? y = y--0 ? x = x + x-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = 0--x ? 0 = x-x ? y = x ? dec x--x ? 0 = x-x ? y = x ? dec y--x ? 0 = x-x ? y = y ? dec x--x ? 0 = x-x ? y = y ? dec y--x ? 0 = x-x ? y = 0 ? dec x--x ? 0 = x-x ? y = 0 ? dec y--x ? 0 = x-x ? y = dec x ? x--x ? 0 = x-x ? y = dec x ? y--x ? 0 = x-x ? y = dec x ? 0--x ? 0 = x-x ? y = dec y ? x--x ? 0 = x-x ? y = dec y ? y--x ? 0 = x-x ? y = dec y ? 0--x ? 0 = 0-x ? y = x ? dec x--x ? 0 = 0-x ? y = x ? dec y--x ? 0 = 0-x ? y = y ? dec x--x ? 0 = 0-x ? y = y ? dec y--x ? 0 = 0-x ? y = 0 ? dec x--x ? 0 = 0-x ? y = 0 ? dec y--x ? 0 = 0-x ? y = dec x ? x--x ? 0 = 0-x ? y = dec x ? y--x ? 0 = 0-x ? y = dec x ? 0--x ? 0 = 0-x ? y = dec y ? x--x ? 0 = 0-x ? y = dec y ? y--x ? 0 = 0-x ? y = dec y ? 0--0 ? x = x-x ? y = x ? dec x--0 ? x = x-x ? y = x ? dec y--0 ? x = x-x ? y = y ? dec x--0 ? x = x-x ? y = y ? dec y--0 ? x = x-x ? y = 0 ? dec x--0 ? x = x-x ? y = 0 ? dec y--0 ? x = x-x ? y = dec x ? x--0 ? x = x-x ? y = dec x ? y--0 ? x = x-x ? y = dec x ? 0--0 ? x = x-x ? y = dec y ? x--0 ? x = x-x ? y = dec y ? y--0 ? x = x-x ? y = dec y ? 0--0 ? x = 0-x ? y = x ? dec x--0 ? x = 0-x ? y = x ? dec y--0 ? x = 0-x ? y = y ? dec x--0 ? x = 0-x ? y = y ? dec y--0 ? x = 0-x ? y = 0 ? dec x--0 ? x = 0-x ? y = 0 ? dec y--0 ? x = 0-x ? y = dec x ? x--0 ? x = 0-x ? y = dec x ? y--0 ? x = 0-x ? y = dec x ? 0--0 ? x = 0-x ? y = dec y ? x--0 ? x = 0-x ? y = dec y ? y--0 ? x = 0-x ? y = dec y ? 0--x ? y = x + (x + x)--x ? y = x + (x + y)--x ? y = x + (y + x)--x ? y = x + (y + y)--x ? y = y + (x + x)--x ? y = y + (x + y)--x ? y = y + (y + x)--x ? y = y + (y + y)--x ? y = dec x + dec x--x ? y = dec x + dec y--x ? y = dec x + dec 0--x ? y = dec y + dec x--x ? y = dec y + dec y--x ? y = dec y + dec 0--x ? y = dec 0 + dec x--x ? y = dec 0 + dec y--x ? y = dec 0 + dec 0--x ? 0 = x-x ? y = dec x + y--x ? 0 = x-x ? y = dec y + x--x ? 0 = x-x ? y = dec 0 + x--x ? 0 = x-x ? y = dec 0 + y--x ? 0 = x-x ? y = x + dec x--x ? 0 = x-x ? y = x + dec y--x ? 0 = x-x ? y = x + dec 0--x ? 0 = x-x ? y = y + dec x--x ? 0 = x-x ? y = y + dec y--x ? 0 = x-x ? y = y + dec 0--x ? 0 = 0-x ? y = dec x + y--x ? 0 = 0-x ? y = dec y + x--x ? 0 = 0-x ? y = dec 0 + x--x ? 0 = 0-x ? y = dec 0 + y--x ? 0 = 0-x ? y = x + dec x--x ? 0 = 0-x ? y = x + dec y--x ? 0 = 0-x ? y = x + dec 0--x ? 0 = 0-x ? y = y + dec x--x ? 0 = 0-x ? y = y + dec y--x ? 0 = 0-x ? y = y + dec 0--x ? 0 = dec x-x ? y = x + x--x ? 0 = dec x-x ? y = x + y--x ? 0 = dec x-x ? y = y + x--x ? 0 = dec x-x ? y = y + y--x ? 0 = dec 0-x ? y = x + x--x ? 0 = dec 0-x ? y = x + y--x ? 0 = dec 0-x ? y = y + x--x ? 0 = dec 0-x ? y = y + y--x ? 0 = x + x-x ? y = dec x--x ? 0 = x + x-x ? y = dec y--x ? 0 = x + x-x ? y = dec 0--x ? 0 = dec 0 + x-x ? y = x--x ? 0 = dec 0 + x-x ? y = y--x ? 0 = dec 0 + x-x ? y = 0--x ? 0 = x + dec x-x ? y = x--x ? 0 = x + dec x-x ? y = y--x ? 0 = x + dec x-x ? y = 0--x ? 0 = x + dec 0-x ? y = x--x ? 0 = x + dec 0-x ? y = y--x ? 0 = x + dec 0-x ? y = 0--0 ? x = x-x ? y = dec x + y--0 ? x = x-x ? y = dec y + x--0 ? x = x-x ? y = dec 0 + x--0 ? x = x-x ? y = dec 0 + y--0 ? x = x-x ? y = x + dec x--0 ? x = x-x ? y = x + dec y--0 ? x = x-x ? y = x + dec 0--0 ? x = x-x ? y = y + dec x--0 ? x = x-x ? y = y + dec y--0 ? x = x-x ? y = y + dec 0--0 ? x = 0-x ? y = dec x + y--0 ? x = 0-x ? y = dec y + x--0 ? x = 0-x ? y = dec 0 + x--0 ? x = 0-x ? y = dec 0 + y--0 ? x = 0-x ? y = x + dec x--0 ? x = 0-x ? y = x + dec y--0 ? x = 0-x ? y = x + dec 0--0 ? x = 0-x ? y = y + dec x--0 ? x = 0-x ? y = y + dec y--0 ? x = 0-x ? y = y + dec 0--0 ? x = dec x-x ? y = x + x--0 ? x = dec x-x ? y = x + y--0 ? x = dec x-x ? y = y + x--0 ? x = dec x-x ? y = y + y--0 ? x = dec 0-x ? y = x + x--0 ? x = dec 0-x ? y = x + y--0 ? x = dec 0-x ? y = y + x--0 ? x = dec 0-x ? y = y + y--0 ? x = x + x-x ? y = dec x--0 ? x = x + x-x ? y = dec y--0 ? x = x + x-x ? y = dec 0--0 ? x = dec 0 + x-x ? y = x--0 ? x = dec 0 + x-x ? y = y--0 ? x = dec 0 + x-x ? y = 0--0 ? x = x + dec x-x ? y = x--0 ? x = x + dec x-x ? y = y--0 ? x = x + dec x-x ? y = 0--0 ? x = x + dec 0-x ? y = x--0 ? x = x + dec 0-x ? y = y--0 ? x = x + dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = x + x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = x + y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = y + x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = y + y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = x + x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = x + y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = y + x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = y + y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x + x-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = x + x-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = x + x-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = x + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = x + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = y + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = y + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = x + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = x + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = y + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = y + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + x-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + x-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + x-x ? y = 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = dec x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = dec y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = dec x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = dec y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec x-x ? y = x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec x-x ? y = y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec x-x ? y = 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = dec x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = dec y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = dec x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = dec y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = x + x-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = x + x-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = x + x-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = x + x-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = x + x-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = x + x-x ? 0 = 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = dec x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = dec y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = dec x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = dec y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec x-x ? y = x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec x-x ? y = y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec x-x ? y = 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec 0-x ? y = x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec 0-x ? y = y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = dec x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = dec y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = dec x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = dec y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec x-x ? y = x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec x-x ? y = y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec x-x ? y = 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec 0-x ? y = x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec 0-x ? y = y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = x-x ? y = x--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = x-x ? y = y--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = x-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = 0-x ? y = x--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = 0-x ? y = y--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = x-x ? y = x--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = x-x ? y = y--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = x-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = 0-x ? y = x--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = 0-x ? y = y--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = 0-x ? y = 0--x ? 0 = x-x ? y = dec x ? dec x--x ? 0 = x-x ? y = dec x ? dec y--x ? 0 = x-x ? y = dec x ? dec 0--x ? 0 = x-x ? y = dec y ? dec x--x ? 0 = x-x ? y = dec y ? dec y--x ? 0 = x-x ? y = dec y ? dec 0--x ? 0 = x-x ? y = dec 0 ? dec x--x ? 0 = x-x ? y = dec 0 ? dec y--x ? 0 = 0-x ? y = dec x ? dec x--x ? 0 = 0-x ? y = dec x ? dec y--x ? 0 = 0-x ? y = dec x ? dec 0--x ? 0 = 0-x ? y = dec y ? dec x--x ? 0 = 0-x ? y = dec y ? dec y--x ? 0 = 0-x ? y = dec y ? dec 0--x ? 0 = 0-x ? y = dec 0 ? dec x--x ? 0 = 0-x ? y = dec 0 ? dec y--0 ? x = x-x ? y = dec x ? dec x--0 ? x = x-x ? y = dec x ? dec y--0 ? x = x-x ? y = dec x ? dec 0--0 ? x = x-x ? y = dec y ? dec x--0 ? x = x-x ? y = dec y ? dec y--0 ? x = x-x ? y = dec y ? dec 0--0 ? x = x-x ? y = dec 0 ? dec x--0 ? x = x-x ? y = dec 0 ? dec y--0 ? x = 0-x ? y = dec x ? dec x--0 ? x = 0-x ? y = dec x ? dec y--0 ? x = 0-x ? y = dec x ? dec 0--0 ? x = 0-x ? y = dec y ? dec x--0 ? x = 0-x ? y = dec y ? dec y--0 ? x = 0-x ? y = dec y ? dec 0--0 ? x = 0-x ? y = dec 0 ? dec x--0 ? x = 0-x ? y = dec 0 ? dec y--x ? 0 = x-x ? y = dec (x ? dec x)--x ? 0 = x-x ? y = dec (x ? dec y)--x ? 0 = x-x ? y = dec (y ? dec x)--x ? 0 = x-x ? y = dec (y ? dec y)--x ? 0 = x-x ? y = dec (0 ? dec x)--x ? 0 = x-x ? y = dec (0 ? dec y)--x ? 0 = x-x ? y = dec (dec x ? x)--x ? 0 = x-x ? y = dec (dec x ? y)--x ? 0 = x-x ? y = dec (dec x ? 0)--x ? 0 = x-x ? y = dec (dec y ? x)--x ? 0 = x-x ? y = dec (dec y ? y)--x ? 0 = x-x ? y = dec (dec y ? 0)--x ? 0 = 0-x ? y = dec (x ? dec x)--x ? 0 = 0-x ? y = dec (x ? dec y)--x ? 0 = 0-x ? y = dec (y ? dec x)--x ? 0 = 0-x ? y = dec (y ? dec y)--x ? 0 = 0-x ? y = dec (0 ? dec x)--x ? 0 = 0-x ? y = dec (0 ? dec y)--x ? 0 = 0-x ? y = dec (dec x ? x)--x ? 0 = 0-x ? y = dec (dec x ? y)--x ? 0 = 0-x ? y = dec (dec x ? 0)--x ? 0 = 0-x ? y = dec (dec y ? x)--x ? 0 = 0-x ? y = dec (dec y ? y)--x ? 0 = 0-x ? y = dec (dec y ? 0)--x ? 0 = dec x-x ? y = x ? dec x--x ? 0 = dec x-x ? y = x ? dec y--x ? 0 = dec x-x ? y = y ? dec x--x ? 0 = dec x-x ? y = y ? dec y--x ? 0 = dec x-x ? y = 0 ? dec x--x ? 0 = dec x-x ? y = 0 ? dec y--x ? 0 = dec x-x ? y = dec x ? x--x ? 0 = dec x-x ? y = dec x ? y--x ? 0 = dec x-x ? y = dec x ? 0--x ? 0 = dec x-x ? y = dec y ? x--x ? 0 = dec x-x ? y = dec y ? y--x ? 0 = dec x-x ? y = dec y ? 0--x ? 0 = dec 0-x ? y = x ? dec x--x ? 0 = dec 0-x ? y = x ? dec y--x ? 0 = dec 0-x ? y = y ? dec x--x ? 0 = dec 0-x ? y = y ? dec y--x ? 0 = dec 0-x ? y = 0 ? dec x--x ? 0 = dec 0-x ? y = 0 ? dec y--x ? 0 = dec 0-x ? y = dec x ? x--x ? 0 = dec 0-x ? y = dec x ? y--x ? 0 = dec 0-x ? y = dec x ? 0--x ? 0 = dec 0-x ? y = dec y ? x--x ? 0 = dec 0-x ? y = dec y ? y--x ? 0 = dec 0-x ? y = dec y ? 0--0 ? x = x-x ? y = dec (x ? dec x)--0 ? x = x-x ? y = dec (x ? dec y)--0 ? x = x-x ? y = dec (y ? dec x)--0 ? x = x-x ? y = dec (y ? dec y)--0 ? x = x-x ? y = dec (0 ? dec x)--0 ? x = x-x ? y = dec (0 ? dec y)--0 ? x = x-x ? y = dec (dec x ? x)--0 ? x = x-x ? y = dec (dec x ? y)--0 ? x = x-x ? y = dec (dec x ? 0)--0 ? x = x-x ? y = dec (dec y ? x)--0 ? x = x-x ? y = dec (dec y ? y)--0 ? x = x-x ? y = dec (dec y ? 0)--0 ? x = 0-x ? y = dec (x ? dec x)--0 ? x = 0-x ? y = dec (x ? dec y)--0 ? x = 0-x ? y = dec (y ? dec x)--0 ? x = 0-x ? y = dec (y ? dec y)--0 ? x = 0-x ? y = dec (0 ? dec x)--0 ? x = 0-x ? y = dec (0 ? dec y)--0 ? x = 0-x ? y = dec (dec x ? x)--0 ? x = 0-x ? y = dec (dec x ? y)--0 ? x = 0-x ? y = dec (dec x ? 0)--0 ? x = 0-x ? y = dec (dec y ? x)--0 ? x = 0-x ? y = dec (dec y ? y)--0 ? x = 0-x ? y = dec (dec y ? 0)--0 ? x = dec x-x ? y = x ? dec x--0 ? x = dec x-x ? y = x ? dec y--0 ? x = dec x-x ? y = y ? dec x--0 ? x = dec x-x ? y = y ? dec y--0 ? x = dec x-x ? y = 0 ? dec x--0 ? x = dec x-x ? y = 0 ? dec y--0 ? x = dec x-x ? y = dec x ? x--0 ? x = dec x-x ? y = dec x ? y--0 ? x = dec x-x ? y = dec x ? 0--0 ? x = dec x-x ? y = dec y ? x--0 ? x = dec x-x ? y = dec y ? y--0 ? x = dec x-x ? y = dec y ? 0--0 ? x = dec 0-x ? y = x ? dec x--0 ? x = dec 0-x ? y = x ? dec y--0 ? x = dec 0-x ? y = y ? dec x--0 ? x = dec 0-x ? y = y ? dec y--0 ? x = dec 0-x ? y = 0 ? dec x--0 ? x = dec 0-x ? y = 0 ? dec y--0 ? x = dec 0-x ? y = dec x ? x--0 ? x = dec 0-x ? y = dec x ? y--0 ? x = dec 0-x ? y = dec x ? 0--0 ? x = dec 0-x ? y = dec y ? x--0 ? x = dec 0-x ? y = dec y ? y--0 ? x = dec 0-x ? y = dec y ? 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = x ? dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = x ? dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = y ? dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = y ? dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = 0 ? dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = 0 ? dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec x ? x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec x ? y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec x ? 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec y ? x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec y ? y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec y ? 0--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x ? x-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x ? 0-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x ? x-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x ? 0-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x ? x-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x ? 0-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = x ? dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = x ? dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = y ? dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = y ? dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = 0 ? dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = 0 ? dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec x ? x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec x ? y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec x ? 0--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec y ? x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec y ? y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec y ? 0--0 ? 0 = 0-0 ? x = x ? dec x-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = 0 ? dec x-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = x ? dec x-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = 0 ? dec x-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = x ? dec x-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = 0 ? dec x-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = x ? dec x-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = 0 ? dec x-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = x ? dec x-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = 0 ? dec x-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = x ? dec x-x ? 0 = 0-x ? y = 0--0 ? 0 = 0-0 ? x = 0 ? dec x-x ? 0 = 0-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = x ? dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = x ? dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = y ? dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = y ? dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = 0 ? dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = 0 ? dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec x ? x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec x ? y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec x ? 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec y ? x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec y ? y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec y ? 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x ? x-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x ? 0-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x ? x-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x ? 0-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x ? x-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x ? 0-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = x ? dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = x ? dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = y ? dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = y ? dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = 0 ? dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = 0 ? dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec x ? x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec x ? y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec x ? 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec y ? x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec y ? y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec y ? 0--x ? y = x + (dec x + y)--x ? y = x + (dec y + x)--x ? y = x + (dec 0 + x)--x ? y = x + (dec 0 + y)--x ? y = x + (x + dec x)--x ? y = x + (x + dec y)--x ? y = x + (x + dec 0)--x ? y = x + (y + dec x)--x ? y = x + (y + dec y)--x ? y = x + (y + dec 0)--x ? y = y + (dec x + y)--x ? y = y + (dec y + x)--x ? y = y + (dec 0 + x)--x ? y = y + (dec 0 + y)--x ? y = y + (x + dec x)--x ? y = y + (x + dec y)--x ? y = y + (x + dec 0)--x ? y = y + (y + dec x)--x ? y = y + (y + dec y)--x ? y = y + (y + dec 0)--x ? y = dec x + (y + y)--x ? y = dec y + (x + x)--x ? y = dec 0 + (x + x)--x ? y = dec 0 + (x + y)--x ? y = dec 0 + (y + x)--x ? y = dec 0 + (y + y)--x ? 0 = x-x ? y = x + (x + x)--x ? 0 = x-x ? y = x + (x + y)--x ? 0 = x-x ? y = x + (y + x)--x ? 0 = x-x ? y = x + (y + y)--x ? 0 = x-x ? y = y + (x + x)--x ? 0 = x-x ? y = y + (x + y)--x ? 0 = x-x ? y = y + (y + x)--x ? 0 = x-x ? y = y + (y + y)--x ? 0 = x-x ? y = dec x + dec x--x ? 0 = x-x ? y = dec x + dec y--x ? 0 = x-x ? y = dec x + dec 0--x ? 0 = x-x ? y = dec y + dec x--x ? 0 = x-x ? y = dec y + dec y--x ? 0 = x-x ? y = dec y + dec 0--x ? 0 = x-x ? y = dec 0 + dec x--x ? 0 = x-x ? y = dec 0 + dec y--x ? 0 = x-x ? y = dec 0 + dec 0--x ? 0 = 0-x ? y = x + (x + x)--x ? 0 = 0-x ? y = x + (x + y)--x ? 0 = 0-x ? y = x + (y + x)--x ? 0 = 0-x ? y = x + (y + y)--x ? 0 = 0-x ? y = y + (x + x)--x ? 0 = 0-x ? y = y + (x + y)--x ? 0 = 0-x ? y = y + (y + x)--x ? 0 = 0-x ? y = y + (y + y)--x ? 0 = 0-x ? y = dec x + dec x--x ? 0 = 0-x ? y = dec x + dec y--x ? 0 = 0-x ? y = dec x + dec 0--x ? 0 = 0-x ? y = dec y + dec x--x ? 0 = 0-x ? y = dec y + dec y--x ? 0 = 0-x ? y = dec y + dec 0--x ? 0 = 0-x ? y = dec 0 + dec x--x ? 0 = 0-x ? y = dec 0 + dec y--x ? 0 = 0-x ? y = dec 0 + dec 0--x ? 0 = dec x-x ? y = dec x + y--x ? 0 = dec x-x ? y = dec y + x--x ? 0 = dec x-x ? y = dec 0 + x--x ? 0 = dec x-x ? y = dec 0 + y--x ? 0 = dec x-x ? y = x + dec x--x ? 0 = dec x-x ? y = x + dec y--x ? 0 = dec x-x ? y = x + dec 0--x ? 0 = dec x-x ? y = y + dec x--x ? 0 = dec x-x ? y = y + dec y--x ? 0 = dec x-x ? y = y + dec 0--x ? 0 = dec 0-x ? y = dec x + y--x ? 0 = dec 0-x ? y = dec y + x--x ? 0 = dec 0-x ? y = dec 0 + x--x ? 0 = dec 0-x ? y = dec 0 + y--x ? 0 = dec 0-x ? y = x + dec x--x ? 0 = dec 0-x ? y = x + dec y--x ? 0 = dec 0-x ? y = x + dec 0--x ? 0 = dec 0-x ? y = y + dec x--x ? 0 = dec 0-x ? y = y + dec y--x ? 0 = dec 0-x ? y = y + dec 0--x ? 0 = x + x-x ? y = x + y--x ? 0 = x + x-x ? y = y + x--x ? 0 = x + x-x ? y = y + y--x ? 0 = dec 0 + x-x ? y = dec x--x ? 0 = dec 0 + x-x ? y = dec y--x ? 0 = dec 0 + x-x ? y = dec 0--x ? 0 = x + dec x-x ? y = dec x--x ? 0 = x + dec x-x ? y = dec y--x ? 0 = x + dec x-x ? y = dec 0--x ? 0 = x + dec 0-x ? y = dec x--x ? 0 = x + dec 0-x ? y = dec y--x ? 0 = x + dec 0-x ? y = dec 0--x ? 0 = x + (x + x)-x ? y = x--x ? 0 = x + (x + x)-x ? y = y--x ? 0 = x + (x + x)-x ? y = 0--x ? 0 = dec x + dec x-x ? y = x--x ? 0 = dec x + dec x-x ? y = y--x ? 0 = dec x + dec x-x ? y = 0--x ? 0 = dec x + dec 0-x ? y = x--x ? 0 = dec x + dec 0-x ? y = y--x ? 0 = dec x + dec 0-x ? y = 0--x ? 0 = dec 0 + dec x-x ? y = x--x ? 0 = dec 0 + dec x-x ? y = y--x ? 0 = dec 0 + dec x-x ? y = 0--x ? 0 = dec 0 + dec 0-x ? y = x--x ? 0 = dec 0 + dec 0-x ? y = y--x ? 0 = dec 0 + dec 0-x ? y = 0--0 ? x = x-x ? y = x + (x + x)--0 ? x = x-x ? y = x + (x + y)--0 ? x = x-x ? y = x + (y + x)--0 ? x = x-x ? y = x + (y + y)--0 ? x = x-x ? y = y + (x + x)--0 ? x = x-x ? y = y + (x + y)--0 ? x = x-x ? y = y + (y + x)--0 ? x = x-x ? y = y + (y + y)--0 ? x = x-x ? y = dec x + dec x--0 ? x = x-x ? y = dec x + dec y--0 ? x = x-x ? y = dec x + dec 0--0 ? x = x-x ? y = dec y + dec x--0 ? x = x-x ? y = dec y + dec y--0 ? x = x-x ? y = dec y + dec 0--0 ? x = x-x ? y = dec 0 + dec x--0 ? x = x-x ? y = dec 0 + dec y--0 ? x = x-x ? y = dec 0 + dec 0--0 ? x = 0-x ? y = x + (x + x)--0 ? x = 0-x ? y = x + (x + y)--0 ? x = 0-x ? y = x + (y + x)--0 ? x = 0-x ? y = x + (y + y)--0 ? x = 0-x ? y = y + (x + x)--0 ? x = 0-x ? y = y + (x + y)--0 ? x = 0-x ? y = y + (y + x)--0 ? x = 0-x ? y = y + (y + y)--0 ? x = 0-x ? y = dec x + dec x--0 ? x = 0-x ? y = dec x + dec y--0 ? x = 0-x ? y = dec x + dec 0--0 ? x = 0-x ? y = dec y + dec x--0 ? x = 0-x ? y = dec y + dec y--0 ? x = 0-x ? y = dec y + dec 0--0 ? x = 0-x ? y = dec 0 + dec x--0 ? x = 0-x ? y = dec 0 + dec y--0 ? x = 0-x ? y = dec 0 + dec 0--0 ? x = dec x-x ? y = dec x + y--0 ? x = dec x-x ? y = dec y + x--0 ? x = dec x-x ? y = dec 0 + x--0 ? x = dec x-x ? y = dec 0 + y--0 ? x = dec x-x ? y = x + dec x--0 ? x = dec x-x ? y = x + dec y--0 ? x = dec x-x ? y = x + dec 0--0 ? x = dec x-x ? y = y + dec x--0 ? x = dec x-x ? y = y + dec y--0 ? x = dec x-x ? y = y + dec 0--0 ? x = dec 0-x ? y = dec x + y--0 ? x = dec 0-x ? y = dec y + x--0 ? x = dec 0-x ? y = dec 0 + x--0 ? x = dec 0-x ? y = dec 0 + y--0 ? x = dec 0-x ? y = x + dec x--0 ? x = dec 0-x ? y = x + dec y--0 ? x = dec 0-x ? y = x + dec 0--0 ? x = dec 0-x ? y = y + dec x--0 ? x = dec 0-x ? y = y + dec y--0 ? x = dec 0-x ? y = y + dec 0--0 ? x = x + x-x ? y = x + y--0 ? x = x + x-x ? y = y + x--0 ? x = x + x-x ? y = y + y--0 ? x = dec 0 + x-x ? y = dec x--0 ? x = dec 0 + x-x ? y = dec y--0 ? x = dec 0 + x-x ? y = dec 0--0 ? x = x + dec x-x ? y = dec x--0 ? x = x + dec x-x ? y = dec y--0 ? x = x + dec x-x ? y = dec 0--0 ? x = x + dec 0-x ? y = dec x--0 ? x = x + dec 0-x ? y = dec y--0 ? x = x + dec 0-x ? y = dec 0--0 ? x = x + (x + x)-x ? y = x--0 ? x = x + (x + x)-x ? y = y--0 ? x = x + (x + x)-x ? y = 0--0 ? x = dec x + dec x-x ? y = x--0 ? x = dec x + dec x-x ? y = y--0 ? x = dec x + dec x-x ? y = 0--0 ? x = dec x + dec 0-x ? y = x--0 ? x = dec x + dec 0-x ? y = y--0 ? x = dec x + dec 0-x ? y = 0--0 ? x = dec 0 + dec x-x ? y = x--0 ? x = dec 0 + dec x-x ? y = y--0 ? x = dec 0 + dec x-x ? y = 0--0 ? x = dec 0 + dec 0-x ? y = x--0 ? x = dec 0 + dec 0-x ? y = y--0 ? x = dec 0 + dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec x + y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec y + x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec 0 + x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = dec 0 + y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = x + dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = x + dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = x + dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = y + dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = y + dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = x-x ? y = y + dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec x + y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec y + x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec 0 + x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = dec 0 + y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = x + dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = x + dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = x + dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = y + dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = y + dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = 0-x ? y = y + dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = x + x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = x + y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = y + x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec x-x ? y = y + y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = x + x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = x + y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = y + x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0-x ? y = y + y--0 ? 0 = 0-0 ? x = x-x ? 0 = x + x-x ? y = dec x--0 ? 0 = 0-0 ? x = x-x ? 0 = x + x-x ? y = dec y--0 ? 0 = 0-0 ? x = x-x ? 0 = x + x-x ? y = dec 0--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0 + x-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0 + x-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = dec 0 + x-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x + dec x-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = x + dec x-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = x + dec x-x ? y = 0--0 ? 0 = 0-0 ? x = x-x ? 0 = x + dec 0-x ? y = x--0 ? 0 = 0-0 ? x = x-x ? 0 = x + dec 0-x ? y = y--0 ? 0 = 0-0 ? x = x-x ? 0 = x + dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec x + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec y + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec 0 + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = dec 0 + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = x + dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = x + dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = x + dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = y + dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = y + dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x-x ? y = y + dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec x + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec y + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec 0 + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = dec 0 + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = x + dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = x + dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = x + dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = y + dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = y + dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = 0-x ? y = y + dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = x + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = x + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = y + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec x-x ? y = y + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = x + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = x + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = y + x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0-x ? y = y + y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + x-x ? y = dec x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + x-x ? y = dec y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + x-x ? y = dec 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0 + x-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0 + x-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = dec 0 + x-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + dec x-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + dec x-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + dec x-x ? y = 0--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + dec 0-x ? y = x--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + dec 0-x ? y = y--0 ? 0 = 0-0 ? x = 0-x ? 0 = x + dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = x + x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = x + y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = y + x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x-x ? y = y + y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = x + x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = x + y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = y + x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = 0-x ? y = y + y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec x-x ? y = dec x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec x-x ? y = dec y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec x-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = dec x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = dec y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x + x-x ? y = x--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x + x-x ? y = y--0 ? 0 = 0-0 ? x = dec x-x ? 0 = x + x-x ? y = 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = x + x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = x + y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = y + x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x-x ? y = y + y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = x + x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = x + y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = y + x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = 0-x ? y = y + y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = dec x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = dec y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = dec x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = dec y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x + x-x ? y = x--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x + x-x ? y = y--0 ? 0 = 0-0 ? x = dec 0-x ? 0 = x + x-x ? y = 0--0 ? 0 = 0-0 ? x = x + x-x ? 0 = x-x ? y = dec x--0 ? 0 = 0-0 ? x = x + x-x ? 0 = x-x ? y = dec y--0 ? 0 = 0-0 ? x = x + x-x ? 0 = x-x ? y = dec 0--0 ? 0 = 0-0 ? x = x + x-x ? 0 = 0-x ? y = dec x--0 ? 0 = 0-0 ? x = x + x-x ? 0 = 0-x ? y = dec y--0 ? 0 = 0-0 ? x = x + x-x ? 0 = 0-x ? y = dec 0--0 ? 0 = 0-0 ? x = x + x-x ? 0 = dec x-x ? y = x--0 ? 0 = 0-0 ? x = x + x-x ? 0 = dec x-x ? y = y--0 ? 0 = 0-0 ? x = x + x-x ? 0 = dec x-x ? y = 0--0 ? 0 = 0-0 ? x = x + x-x ? 0 = dec 0-x ? y = x--0 ? 0 = 0-0 ? x = x + x-x ? 0 = dec 0-x ? y = y--0 ? 0 = 0-0 ? x = x + x-x ? 0 = dec 0-x ? y = 0--0 ? 0 = 0-0 ? x = dec 0 + x-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = dec 0 + x-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = dec 0 + x-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = dec 0 + x-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = dec 0 + x-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = dec 0 + x-x ? 0 = 0-x ? y = 0--0 ? 0 = 0-0 ? x = x + dec x-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = x + dec x-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = x + dec x-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = x + dec x-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = x + dec x-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = x + dec x-x ? 0 = 0-x ? y = 0--0 ? 0 = 0-0 ? x = x + dec 0-x ? 0 = x-x ? y = x--0 ? 0 = 0-0 ? x = x + dec 0-x ? 0 = x-x ? y = y--0 ? 0 = 0-0 ? x = x + dec 0-x ? 0 = x-x ? y = 0--0 ? 0 = 0-0 ? x = x + dec 0-x ? 0 = 0-x ? y = x--0 ? 0 = 0-0 ? x = x + dec 0-x ? 0 = 0-x ? y = y--0 ? 0 = 0-0 ? x = x + dec 0-x ? 0 = 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = x + x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = x + y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = y + x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x-x ? y = y + y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = x + x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = x + y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = y + x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = 0-x ? y = y + y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec x-x ? y = dec x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec x-x ? y = dec y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec x-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec 0-x ? y = dec x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec 0-x ? y = dec y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = dec 0-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x + x-x ? y = x--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x + x-x ? y = y--0 ? 0 = dec 0-0 ? x = x-x ? 0 = x + x-x ? y = 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = x + x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = x + y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = y + x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x-x ? y = y + y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = x + x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = x + y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = y + x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = 0-x ? y = y + y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec x-x ? y = dec x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec x-x ? y = dec y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec x-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec 0-x ? y = dec x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec 0-x ? y = dec y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = dec 0-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x + x-x ? y = x--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x + x-x ? y = y--0 ? 0 = dec 0-0 ? x = 0-x ? 0 = x + x-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = x-x ? y = dec x--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = x-x ? y = dec y--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = x-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = 0-x ? y = dec x--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = 0-x ? y = dec y--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = 0-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = dec x-x ? y = x--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = dec x-x ? y = y--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = dec x-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = x--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = y--0 ? 0 = dec 0-0 ? x = dec x-x ? 0 = dec 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = x-x ? y = dec x--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = x-x ? y = dec y--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = x-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = 0-x ? y = dec x--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = 0-x ? y = dec y--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = 0-x ? y = dec 0--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = x--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = y--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = dec x-x ? y = 0--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = x--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = y--0 ? 0 = dec 0-0 ? x = dec 0-x ? 0 = dec 0-x ? y = 0--0 ? 0 = dec 0-0 ? x = x + x-x ? 0 = x-x ? y = x--0 ? 0 = dec 0-0 ? x = x + x-x ? 0 = x-x ? y = y--0 ? 0 = dec 0-0 ? x = x + x-x ? 0 = x-x ? y = 0--0 ? 0 = dec 0-0 ? x = x + x-x ? 0 = 0-x ? y = x--0 ? 0 = dec 0-0 ? x = x + x-x ? 0 = 0-x ? y = y--0 ? 0 = dec 0-0 ? x = x + x-x ? 0 = 0-x ? y = 0---Candidates for: goo :: [Int] -> [Int]- pruning with 4/4 rules- [2,0,1,0,1,0,1,0,1] direct candidates, 0 duplicates- [2,1,2,3,4,7,10,17,26] pattern candidates, 0 duplicates--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) = 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,8,0,16,0,32] direct candidates, 0 duplicates- [3,8,15,66,152,362,1400,2084,11820] pattern candidates, 0 duplicates--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--xs ?? ys = xs ++ (xs ++ xs)--xs ?? ys = xs ++ (xs ++ ys)--xs ?? ys = xs ++ (ys ++ xs)--xs ?? ys = xs ++ (ys ++ ys)--xs ?? ys = ys ++ (xs ++ xs)--xs ?? ys = ys ++ (xs ++ ys)--xs ?? ys = ys ++ (ys ++ xs)--xs ?? ys = 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) = ys ?? xs--xs ?? [] = xs-xs ?? (x:ys) = ys ?? ys--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) = ys ?? xs--xs ?? [] = []-xs ?? (x:ys) = ys ?? ys--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 = ys ?? xs--[] ?? xs = xs-(x:xs) ?? ys = ys ?? ys--[] ?? 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 = ys ?? xs--[] ?? xs = []-(x:xs) ?? ys = ys ?? ys--[] ?? 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 = []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ?? xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ?? ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ?? []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ?? xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ?? ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y: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 ?? xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ?? []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = [] ?? xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ?? xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ?? []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = [] ?? xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ?? xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ?? []-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = [] ?? xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ?? xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ?? ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ?? []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ?? xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ?? ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ?? []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [] ?? xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [] ?? ys--[] ?? [] = []-[] ?? (x:xs) = xs ?? xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs ?? []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = [] ?? xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs ?? xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs ?? []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = [] ?? xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs ?? xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs ?? []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = [] ?? xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs ?? xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs ?? []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = [] ?? xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs ?? xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs ?? []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = [] ?? xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs ?? xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs ?? []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = [] ?? xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ?? xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ?? ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ?? []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ?? xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ?? ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = 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 ?? xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ?? []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = [] ?? xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ?? xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ?? []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = [] ?? xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ?? xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ?? []-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = [] ?? xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ?? xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ?? ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ?? []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ?? xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ?? ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ?? []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [] ?? xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [] ?? ys--xs ?? ys = xs ++ (xs ++ xs)--xs ?? ys = xs ++ (xs ++ ys)--xs ?? ys = xs ++ (ys ++ xs)--xs ?? ys = xs ++ (ys ++ ys)--xs ?? ys = ys ++ (xs ++ xs)--xs ?? ys = ys ++ (xs ++ ys)--xs ?? ys = ys ++ (ys ++ xs)--xs ?? ys = ys ++ (ys ++ ys)--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = x:xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = x:ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = [x]--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = y:xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = y:ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = [y]--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ++ xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ++ ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ++ xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ++ ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = x:xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = x:ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [x]--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = y:xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = y:ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [y]--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ++ xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ++ ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ++ xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ++ ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = x:xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = x:xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = x:xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = [x]-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = [x]-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = [x]-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ++ xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ++ xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs-(x:xs) ?? [] = xs ++ xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = x:xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = x:ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = [x]--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = y:xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = y:ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = [y]--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ++ xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs ++ ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ++ xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys ++ ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = x:xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = x:ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [x]--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = y:xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = y:ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = [y]--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ++ xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs ++ ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ++ xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys ++ ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = x:xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = x:xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = x:xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = [x]-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = [x]-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = [x]-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ++ xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ++ xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = []-(x:xs) ?? [] = xs ++ xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = x:xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = x:xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = x:xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = x:xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = x:xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = x:xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = [x]-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = [x]-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = [x]-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = [x]-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = [x]-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = [x]-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs ++ xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs ++ xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs ++ xs-(x:xs) ?? [] = xs-(x:xs) ?? (y:ys) = []--[] ?? [] = []-[] ?? (x:xs) = xs ++ xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = xs--[] ?? [] = []-[] ?? (x:xs) = xs ++ xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = ys--[] ?? [] = []-[] ?? (x:xs) = xs ++ xs-(x:xs) ?? [] = []-(x:xs) ?? (y:ys) = []--xs ?? [] = xs-xs ?? (x:ys) = (x:xs) ?? xs--xs ?? [] = xs-xs ?? (x:ys) = (x:xs) ?? ys--xs ?? [] = xs-xs ?? (x:ys) = (x:xs) ?? []--xs ?? [] = xs-xs ?? (x:ys) = (x:ys) ?? xs--xs ?? [] = xs-xs ?? (x:ys) = (x:ys) ?? ys--xs ?? [] = xs-xs ?? (x:ys) = (x: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-xs ?? (x:ys) = (xs ++ xs) ?? ys--xs ?? [] = xs-xs ?? (x:ys) = (xs ++ xs) ?? []--xs ?? [] = xs-xs ?? (x:ys) = (xs ++ ys) ?? xs--xs ?? [] = xs-xs ?? (x:ys) = (xs ++ ys) ?? ys--xs ?? [] = xs-xs ?? (x:ys) = (xs ++ ys) ?? []--xs ?? [] = xs-xs ?? (x:ys) = (ys ++ xs) ?? xs--xs ?? [] = xs-xs ?? (x:ys) = (ys ++ xs) ?? ys--xs ?? [] = xs-xs ?? (x:ys) = (ys ++ xs) ?? []--xs ?? [] = xs-xs ?? (x:ys) = (ys ++ ys) ?? xs--xs ?? [] = xs-xs ?? (x:ys) = (ys ++ ys) ?? ys--xs ?? [] = xs-xs ?? (x:ys) = (ys ++ ys) ?? []--xs ?? [] = []-xs ?? (x:ys) = (x:xs) ?? xs--xs ?? [] = []-xs ?? (x:ys) = (x:xs) ?? ys--xs ?? [] = []-xs ?? (x:ys) = (x:xs) ?? []--xs ?? [] = []-xs ?? (x:ys) = (x:ys) ?? xs--xs ?? [] = []-xs ?? (x:ys) = (x:ys) ?? ys--xs ?? [] = []-xs ?? (x:ys) = (x: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 ?? [] = []-xs ?? (x:ys) = (xs ++ xs) ?? ys--xs ?? [] = []-xs ?? (x:ys) = (xs ++ xs) ?? []--xs ?? [] = []-xs ?? (x:ys) = (xs ++ ys) ?? xs--xs ?? [] = []-xs ?? (x:ys) = (xs ++ ys) ?? ys--xs ?? [] = []-xs ?? (x:ys) = (xs ++ ys) ?? []--xs ?? [] = []-xs ?? (x:ys) = (ys ++ xs) ?? xs--xs ?? [] = []-xs ?? (x:ys) = (ys ++ xs) ?? ys--xs ?? [] = []-xs ?? (x:ys) = (ys ++ xs) ?? []--xs ?? [] = []-xs ?? (x:ys) = (ys ++ ys) ?? xs--xs ?? [] = []-xs ?? (x:ys) = (ys ++ ys) ?? ys--xs ?? [] = []-xs ?? (x:ys) = (ys ++ ys) ?? []--[] ?? xs = xs-(x:xs) ?? ys = xs ?? (x:xs)--[] ?? xs = xs-(x:xs) ?? ys = xs ?? (x:ys)--[] ?? xs = xs-(x:xs) ?? ys = xs ?? [x]--[] ?? xs = xs-(x:xs) ?? ys = xs ?? (xs ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = xs ?? (xs ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = xs ?? (ys ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = xs ?? (ys ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = ys ?? (x:xs)--[] ?? xs = xs-(x:xs) ?? ys = ys ?? (x:ys)--[] ?? xs = xs-(x:xs) ?? ys = ys ?? [x]--[] ?? xs = xs-(x:xs) ?? ys = ys ?? (xs ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = ys ?? (xs ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = ys ?? (ys ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = ys ?? (ys ++ 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 = xs ?? (x:xs)--[] ?? xs = []-(x:xs) ?? ys = xs ?? (x:ys)--[] ?? xs = []-(x:xs) ?? ys = xs ?? [x]--[] ?? xs = []-(x:xs) ?? ys = xs ?? (xs ++ xs)--[] ?? xs = []-(x:xs) ?? ys = xs ?? (xs ++ ys)--[] ?? xs = []-(x:xs) ?? ys = xs ?? (ys ++ xs)--[] ?? xs = []-(x:xs) ?? ys = xs ?? (ys ++ ys)--[] ?? xs = []-(x:xs) ?? ys = ys ?? (x:xs)--[] ?? xs = []-(x:xs) ?? ys = ys ?? (x:ys)--[] ?? xs = []-(x:xs) ?? ys = ys ?? [x]--[] ?? xs = []-(x:xs) ?? ys = ys ?? (xs ++ xs)--[] ?? xs = []-(x:xs) ?? ys = ys ?? (xs ++ ys)--[] ?? xs = []-(x:xs) ?? ys = ys ?? (ys ++ xs)--[] ?? xs = []-(x:xs) ?? ys = 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:ys) = x:xs ?? xs--xs ?? [] = xs-xs ?? (x:ys) = x:xs ?? ys--xs ?? [] = xs-xs ?? (x:ys) = x:xs ?? []--xs ?? [] = xs-xs ?? (x:ys) = x:ys ?? xs--xs ?? [] = xs-xs ?? (x:ys) = x:ys ?? ys--xs ?? [] = xs-xs ?? (x:ys) = x:ys ?? []--xs ?? [] = xs-xs ?? (x:ys) = [x,] ?? xs--xs ?? [] = xs-xs ?? (x:ys) = [x,] ?? ys--xs ?? [] = xs-xs ?? (x:ys) = xs ++ xs ?? xs--xs ?? [] = xs-xs ?? (x:ys) = xs ++ xs ?? ys--xs ?? [] = xs-xs ?? (x:ys) = xs ++ xs ?? []--xs ?? [] = xs-xs ?? (x:ys) = xs ++ ys ?? xs--xs ?? [] = xs-xs ?? (x:ys) = xs ++ ys ?? ys--xs ?? [] = xs-xs ?? (x:ys) = xs ++ ys ?? []--xs ?? [] = xs-xs ?? (x:ys) = xs ++ [] ?? xs--xs ?? [] = xs-xs ?? (x:ys) = xs ++ [] ?? ys--xs ?? [] = xs-xs ?? (x:ys) = ys ++ xs ?? xs--xs ?? [] = xs-xs ?? (x:ys) = ys ++ xs ?? ys--xs ?? [] = xs-xs ?? (x:ys) = ys ++ xs ?? []--xs ?? [] = xs-xs ?? (x:ys) = ys ++ ys ?? xs--xs ?? [] = xs-xs ?? (x:ys) = ys ++ ys ?? ys--xs ?? [] = xs-xs ?? (x:ys) = ys ++ ys ?? []--xs ?? [] = xs-xs ?? (x:ys) = ys ++ [] ?? xs--xs ?? [] = xs-xs ?? (x:ys) = ys ++ [] ?? ys--xs ?? [] = xs-xs ?? (x:ys) = xs ?? xs ++ xs--xs ?? [] = xs-xs ?? (x:ys) = xs ?? ys ++ xs--xs ?? [] = xs-xs ?? (x:ys) = xs ?? [] ++ xs--xs ?? [] = xs-xs ?? (x:ys) = ys ?? xs ++ xs--xs ?? [] = xs-xs ?? (x:ys) = ys ?? ys ++ xs--xs ?? [] = xs-xs ?? (x:ys) = ys ?? [] ++ xs--xs ?? [] = xs-xs ?? (x:ys) = [] ?? xs ++ xs--xs ?? [] = xs-xs ?? (x:ys) = [] ?? ys ++ xs--xs ?? [] = xs-xs ?? (x:ys) = xs ?? xs ++ ys--xs ?? [] = xs-xs ?? (x:ys) = xs ?? ys ++ ys--xs ?? [] = xs-xs ?? (x:ys) = xs ?? [] ++ ys--xs ?? [] = xs-xs ?? (x:ys) = ys ?? xs ++ ys--xs ?? [] = xs-xs ?? (x:ys) = ys ?? ys ++ ys--xs ?? [] = xs-xs ?? (x:ys) = ys ?? [] ++ ys--xs ?? [] = xs-xs ?? (x:ys) = [] ?? xs ++ ys--xs ?? [] = xs-xs ?? (x:ys) = [] ?? ys ++ ys--xs ?? [] = []-xs ?? (x:ys) = x:xs ?? xs--xs ?? [] = []-xs ?? (x:ys) = x:xs ?? ys--xs ?? [] = []-xs ?? (x:ys) = x:xs ?? []--xs ?? [] = []-xs ?? (x:ys) = x:ys ?? xs--xs ?? [] = []-xs ?? (x:ys) = x:ys ?? ys--xs ?? [] = []-xs ?? (x:ys) = x:ys ?? []--xs ?? [] = []-xs ?? (x:ys) = [x,] ?? xs--xs ?? [] = []-xs ?? (x:ys) = [x,] ?? ys--xs ?? [] = []-xs ?? (x:ys) = xs ++ xs ?? xs--xs ?? [] = []-xs ?? (x:ys) = xs ++ xs ?? ys--xs ?? [] = []-xs ?? (x:ys) = xs ++ xs ?? []--xs ?? [] = []-xs ?? (x:ys) = xs ++ ys ?? xs--xs ?? [] = []-xs ?? (x:ys) = xs ++ ys ?? ys--xs ?? [] = []-xs ?? (x:ys) = xs ++ ys ?? []--xs ?? [] = []-xs ?? (x:ys) = xs ++ [] ?? xs--xs ?? [] = []-xs ?? (x:ys) = xs ++ [] ?? ys--xs ?? [] = []-xs ?? (x:ys) = ys ++ xs ?? xs--xs ?? [] = []-xs ?? (x:ys) = ys ++ xs ?? ys--xs ?? [] = []-xs ?? (x:ys) = ys ++ xs ?? []--xs ?? [] = []-xs ?? (x:ys) = ys ++ ys ?? xs--xs ?? [] = []-xs ?? (x:ys) = ys ++ ys ?? ys--xs ?? [] = []-xs ?? (x:ys) = ys ++ ys ?? []--xs ?? [] = []-xs ?? (x:ys) = ys ++ [] ?? xs--xs ?? [] = []-xs ?? (x:ys) = ys ++ [] ?? ys--xs ?? [] = []-xs ?? (x:ys) = xs ?? xs ++ xs--xs ?? [] = []-xs ?? (x:ys) = xs ?? ys ++ 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) = [] ?? xs ++ xs--xs ?? [] = []-xs ?? (x:ys) = [] ?? ys ++ xs--xs ?? [] = []-xs ?? (x:ys) = xs ?? xs ++ ys--xs ?? [] = []-xs ?? (x:ys) = xs ?? ys ++ ys--xs ?? [] = []-xs ?? (x:ys) = xs ?? [] ++ ys--xs ?? [] = []-xs ?? (x:ys) = ys ?? xs ++ ys--xs ?? [] = []-xs ?? (x:ys) = ys ?? ys ++ ys--xs ?? [] = []-xs ?? (x:ys) = ys ?? [] ++ ys--xs ?? [] = []-xs ?? (x:ys) = [] ?? xs ++ ys--xs ?? [] = []-xs ?? (x:ys) = [] ?? ys ++ ys--xs ?? [] = xs ++ xs-xs ?? (x:ys) = xs ?? xs--xs ?? [] = xs ++ xs-xs ?? (x:ys) = xs ?? ys--xs ?? [] = xs ++ xs-xs ?? (x:ys) = xs ?? []--xs ?? [] = xs ++ xs-xs ?? (x:ys) = ys ?? xs--xs ?? [] = xs ++ xs-xs ?? (x:ys) = ys ?? ys--xs ?? [] = xs ++ xs-xs ?? (x:ys) = ys ?? []--xs ?? [] = xs ++ xs-xs ?? (x:ys) = [] ?? xs--xs ?? [] = xs ++ xs-xs ?? (x:ys) = [] ?? ys--[] ?? xs = xs-(x:xs) ?? ys = x:xs ?? xs--[] ?? xs = xs-(x:xs) ?? ys = x:xs ?? ys--[] ?? xs = xs-(x:xs) ?? ys = x:xs ?? []--[] ?? xs = xs-(x:xs) ?? ys = x:ys ?? xs--[] ?? xs = xs-(x:xs) ?? ys = x:ys ?? ys--[] ?? xs = xs-(x:xs) ?? ys = x:ys ?? []--[] ?? xs = xs-(x:xs) ?? ys = [x,] ?? xs--[] ?? xs = xs-(x:xs) ?? ys = [x,] ?? ys--[] ?? xs = xs-(x:xs) ?? ys = xs ++ xs ?? xs--[] ?? xs = xs-(x:xs) ?? ys = xs ++ xs ?? ys--[] ?? xs = xs-(x:xs) ?? ys = xs ++ xs ?? []--[] ?? xs = xs-(x:xs) ?? ys = xs ++ ys ?? xs--[] ?? xs = xs-(x:xs) ?? ys = xs ++ ys ?? ys--[] ?? xs = xs-(x:xs) ?? ys = xs ++ ys ?? []--[] ?? xs = xs-(x:xs) ?? ys = xs ++ [] ?? xs--[] ?? xs = xs-(x:xs) ?? ys = xs ++ [] ?? ys--[] ?? xs = xs-(x:xs) ?? ys = ys ++ xs ?? xs--[] ?? xs = xs-(x:xs) ?? ys = ys ++ xs ?? ys--[] ?? xs = xs-(x:xs) ?? ys = ys ++ xs ?? []--[] ?? xs = xs-(x:xs) ?? ys = ys ++ ys ?? xs--[] ?? xs = xs-(x:xs) ?? ys = ys ++ ys ?? ys--[] ?? xs = xs-(x:xs) ?? ys = ys ++ ys ?? []--[] ?? xs = xs-(x:xs) ?? ys = ys ++ [] ?? xs--[] ?? xs = xs-(x:xs) ?? ys = ys ++ [] ?? ys--[] ?? xs = xs-(x:xs) ?? ys = xs ?? xs ++ xs--[] ?? xs = xs-(x:xs) ?? ys = xs ?? ys ++ xs--[] ?? xs = xs-(x:xs) ?? ys = xs ?? [] ++ xs--[] ?? xs = xs-(x:xs) ?? ys = ys ?? xs ++ xs--[] ?? xs = xs-(x:xs) ?? ys = ys ?? ys ++ xs--[] ?? xs = xs-(x:xs) ?? ys = ys ?? [] ++ xs--[] ?? xs = xs-(x:xs) ?? ys = [] ?? xs ++ xs--[] ?? xs = xs-(x:xs) ?? ys = [] ?? ys ++ xs--[] ?? xs = xs-(x:xs) ?? ys = xs ?? xs ++ ys--[] ?? xs = xs-(x:xs) ?? ys = xs ?? ys ++ ys--[] ?? xs = xs-(x:xs) ?? ys = xs ?? [] ++ ys--[] ?? xs = xs-(x:xs) ?? ys = ys ?? xs ++ ys--[] ?? xs = xs-(x:xs) ?? ys = ys ?? ys ++ ys--[] ?? xs = xs-(x:xs) ?? ys = ys ?? [] ++ ys--[] ?? xs = xs-(x:xs) ?? ys = [] ?? xs ++ ys--[] ?? xs = xs-(x:xs) ?? ys = [] ?? ys ++ ys--[] ?? xs = []-(x:xs) ?? ys = x:xs ?? xs--[] ?? xs = []-(x:xs) ?? ys = x:xs ?? ys--[] ?? xs = []-(x:xs) ?? ys = x:xs ?? []--[] ?? xs = []-(x:xs) ?? ys = x:ys ?? xs--[] ?? xs = []-(x:xs) ?? ys = x:ys ?? ys--[] ?? xs = []-(x:xs) ?? ys = x:ys ?? []--[] ?? xs = []-(x:xs) ?? ys = [x,] ?? xs--[] ?? xs = []-(x:xs) ?? ys = [x,] ?? ys--[] ?? xs = []-(x:xs) ?? ys = xs ++ xs ?? xs--[] ?? xs = []-(x:xs) ?? ys = xs ++ xs ?? ys--[] ?? xs = []-(x:xs) ?? ys = xs ++ xs ?? []--[] ?? xs = []-(x:xs) ?? ys = xs ++ ys ?? xs--[] ?? xs = []-(x:xs) ?? ys = xs ++ ys ?? ys--[] ?? xs = []-(x:xs) ?? ys = xs ++ ys ?? []--[] ?? xs = []-(x:xs) ?? ys = xs ++ [] ?? xs--[] ?? xs = []-(x:xs) ?? ys = xs ++ [] ?? ys--[] ?? xs = []-(x:xs) ?? ys = ys ++ xs ?? xs--[] ?? xs = []-(x:xs) ?? ys = ys ++ xs ?? ys--[] ?? xs = []-(x:xs) ?? ys = ys ++ xs ?? []--[] ?? xs = []-(x:xs) ?? ys = ys ++ ys ?? xs--[] ?? xs = []-(x:xs) ?? ys = ys ++ ys ?? ys--[] ?? xs = []-(x:xs) ?? ys = ys ++ ys ?? []--[] ?? xs = []-(x:xs) ?? ys = ys ++ [] ?? xs--[] ?? xs = []-(x:xs) ?? ys = ys ++ [] ?? ys--[] ?? xs = []-(x:xs) ?? ys = xs ?? xs ++ xs--[] ?? xs = []-(x:xs) ?? ys = xs ?? ys ++ 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 = [] ?? xs ++ xs--[] ?? xs = []-(x:xs) ?? ys = [] ?? ys ++ xs--[] ?? xs = []-(x:xs) ?? ys = xs ?? xs ++ ys--[] ?? xs = []-(x:xs) ?? ys = xs ?? ys ++ ys--[] ?? xs = []-(x:xs) ?? ys = xs ?? [] ++ ys--[] ?? xs = []-(x:xs) ?? ys = ys ?? xs ++ ys--[] ?? xs = []-(x:xs) ?? ys = ys ?? ys ++ ys--[] ?? xs = []-(x:xs) ?? ys = ys ?? [] ++ ys--[] ?? xs = []-(x:xs) ?? ys = [] ?? xs ++ ys--[] ?? xs = []-(x:xs) ?? ys = [] ?? ys ++ ys--[] ?? xs = xs ++ xs-(x:xs) ?? ys = xs ?? xs--[] ?? xs = xs ++ xs-(x:xs) ?? ys = xs ?? ys--[] ?? xs = xs ++ xs-(x:xs) ?? ys = xs ?? []--[] ?? xs = xs ++ xs-(x:xs) ?? ys = ys ?? xs--[] ?? xs = xs ++ xs-(x:xs) ?? ys = ys ?? ys--[] ?? xs = xs ++ xs-(x:xs) ?? ys = ys ?? []--[] ?? xs = xs ++ xs-(x:xs) ?? ys = [] ?? xs--[] ?? xs = xs ++ xs-(x:xs) ?? ys = [] ?? ys--xs ?? [] = xs-xs ?? (x:ys) = x:x:xs--xs ?? [] = xs-xs ?? (x:ys) = x:x:ys--xs ?? [] = xs-xs ?? (x:ys) = [x,x]--xs ?? [] = xs-xs ?? (x:ys) = x:(xs ++ xs)--xs ?? [] = xs-xs ?? (x:ys) = x:(xs ++ ys)--xs ?? [] = xs-xs ?? (x:ys) = x:(ys ++ xs)--xs ?? [] = xs-xs ?? (x:ys) = x:(ys ++ ys)--xs ?? [] = xs-xs ?? (x:ys) = xs ++ (x:xs)--xs ?? [] = xs-xs ?? (x:ys) = xs ++ (x:ys)--xs ?? [] = xs-xs ?? (x:ys) = xs ++ [x]--xs ?? [] = xs-xs ?? (x:ys) = xs ++ (xs ++ xs)--xs ?? [] = xs-xs ?? (x:ys) = xs ++ (xs ++ ys)--xs ?? [] = xs-xs ?? (x:ys) = xs ++ (ys ++ xs)--xs ?? [] = xs-xs ?? (x:ys) = xs ++ (ys ++ ys)--xs ?? [] = xs-xs ?? (x:ys) = ys ++ (x:xs)--xs ?? [] = xs-xs ?? (x:ys) = ys ++ (x:ys)--xs ?? [] = xs-xs ?? (x:ys) = ys ++ [x]--xs ?? [] = xs-xs ?? (x:ys) = ys ++ (xs ++ xs)--xs ?? [] = xs-xs ?? (x:ys) = ys ++ (xs ++ ys)--xs ?? [] = xs-xs ?? (x:ys) = ys ++ (ys ++ xs)--xs ?? [] = xs-xs ?? (x:ys) = ys ++ (ys ++ ys)--xs ?? [] = []-xs ?? (x:ys) = x:x:xs--xs ?? [] = []-xs ?? (x:ys) = x:x:ys--xs ?? [] = []-xs ?? (x:ys) = [x,x]--xs ?? [] = []-xs ?? (x:ys) = x:(xs ++ xs)--xs ?? [] = []-xs ?? (x:ys) = x:(xs ++ ys)--xs ?? [] = []-xs ?? (x:ys) = x:(ys ++ xs)--xs ?? [] = []-xs ?? (x:ys) = x:(ys ++ ys)--xs ?? [] = []-xs ?? (x:ys) = xs ++ (x:xs)--xs ?? [] = []-xs ?? (x:ys) = xs ++ (x:ys)--xs ?? [] = []-xs ?? (x:ys) = xs ++ [x]--xs ?? [] = []-xs ?? (x:ys) = xs ++ (xs ++ xs)--xs ?? [] = []-xs ?? (x:ys) = xs ++ (xs ++ ys)--xs ?? [] = []-xs ?? (x:ys) = xs ++ (ys ++ xs)--xs ?? [] = []-xs ?? (x:ys) = xs ++ (ys ++ ys)--xs ?? [] = []-xs ?? (x:ys) = ys ++ (x:xs)--xs ?? [] = []-xs ?? (x:ys) = ys ++ (x:ys)--xs ?? [] = []-xs ?? (x:ys) = ys ++ [x]--xs ?? [] = []-xs ?? (x:ys) = ys ++ (xs ++ xs)--xs ?? [] = []-xs ?? (x:ys) = ys ++ (xs ++ ys)--xs ?? [] = []-xs ?? (x:ys) = ys ++ (ys ++ xs)--xs ?? [] = []-xs ?? (x:ys) = ys ++ (ys ++ ys)--xs ?? [] = xs ++ xs-xs ?? (x:ys) = x:xs--xs ?? [] = xs ++ xs-xs ?? (x:ys) = x:ys--xs ?? [] = xs ++ xs-xs ?? (x:ys) = [x]--xs ?? [] = xs ++ xs-xs ?? (x:ys) = xs ++ ys--xs ?? [] = xs ++ xs-xs ?? (x:ys) = ys ++ xs--xs ?? [] = xs ++ xs-xs ?? (x:ys) = ys ++ ys--xs ?? [] = xs ++ (xs ++ xs)-xs ?? (x:ys) = xs--xs ?? [] = xs ++ (xs ++ xs)-xs ?? (x:ys) = ys--xs ?? [] = xs ++ (xs ++ xs)-xs ?? (x:ys) = []--[] ?? xs = xs-(x:xs) ?? ys = x:x:xs--[] ?? xs = xs-(x:xs) ?? ys = x:x:ys--[] ?? xs = xs-(x:xs) ?? ys = [x,x]--[] ?? xs = xs-(x:xs) ?? ys = x:(xs ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = x:(xs ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = x:(ys ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = x:(ys ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = xs ++ (x:xs)--[] ?? xs = xs-(x:xs) ?? ys = xs ++ (x:ys)--[] ?? xs = xs-(x:xs) ?? ys = xs ++ [x]--[] ?? xs = xs-(x:xs) ?? ys = xs ++ (xs ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = xs ++ (xs ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = xs ++ (ys ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = xs ++ (ys ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = ys ++ (x:xs)--[] ?? xs = xs-(x:xs) ?? ys = ys ++ (x:ys)--[] ?? xs = xs-(x:xs) ?? ys = ys ++ [x]--[] ?? xs = xs-(x:xs) ?? ys = ys ++ (xs ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = ys ++ (xs ++ ys)--[] ?? xs = xs-(x:xs) ?? ys = ys ++ (ys ++ xs)--[] ?? xs = xs-(x:xs) ?? ys = ys ++ (ys ++ ys)--[] ?? xs = []-(x:xs) ?? ys = x:x:xs--[] ?? xs = []-(x:xs) ?? ys = x:x:ys--[] ?? xs = []-(x:xs) ?? ys = [x,x]--[] ?? xs = []-(x:xs) ?? ys = x:(xs ++ xs)--[] ?? xs = []-(x:xs) ?? ys = x:(xs ++ ys)--[] ?? xs = []-(x:xs) ?? ys = x:(ys ++ xs)--[] ?? xs = []-(x:xs) ?? ys = x:(ys ++ ys)--[] ?? xs = []-(x:xs) ?? ys = xs ++ (x:xs)--[] ?? xs = []-(x:xs) ?? ys = xs ++ (x:ys)--[] ?? xs = []-(x:xs) ?? ys = xs ++ [x]--[] ?? xs = []-(x:xs) ?? ys = xs ++ (xs ++ xs)--[] ?? xs = []-(x:xs) ?? ys = xs ++ (xs ++ ys)--[] ?? xs = []-(x:xs) ?? ys = xs ++ (ys ++ xs)--[] ?? xs = []-(x:xs) ?? ys = xs ++ (ys ++ ys)--[] ?? xs = []-(x:xs) ?? ys = ys ++ (x:xs)--[] ?? xs = []-(x:xs) ?? ys = ys ++ (x:ys)--[] ?? xs = []-(x:xs) ?? ys = ys ++ [x]--[] ?? xs = []-(x:xs) ?? ys = ys ++ (xs ++ xs)--[] ?? xs = []-(x:xs) ?? ys = ys ++ (xs ++ ys)--[] ?? xs = []-(x:xs) ?? ys = ys ++ (ys ++ xs)--[] ?? xs = []-(x:xs) ?? ys = ys ++ (ys ++ ys)--[] ?? xs = xs ++ xs-(x:xs) ?? ys = x:xs--[] ?? xs = xs ++ xs-(x:xs) ?? ys = x:ys--[] ?? xs = xs ++ xs-(x:xs) ?? ys = [x]--[] ?? xs = xs ++ xs-(x:xs) ?? ys = xs ++ ys--[] ?? xs = xs ++ xs-(x:xs) ?? ys = ys ++ xs--[] ?? xs = xs ++ xs-(x:xs) ?? ys = ys ++ ys--[] ?? xs = xs ++ (xs ++ xs)-(x:xs) ?? ys = xs--[] ?? xs = xs ++ (xs ++ xs)-(x:xs) ?? ys = ys--[] ?? xs = xs ++ (xs ++ xs)-(x:xs) ?? ys = []---Candidates for: ton :: Bool -> Bool- pruning with 39/49 rules- [3,1,0,0,0,0,0,0,0] direct candidates, 0 duplicates- [3,3,0,0,0,0,0,0,0] pattern candidates, 0 duplicates--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---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,32,36,112,264] direct candidates, 0 duplicates- [4,14,30,8,4,32,36,112,264] pattern candidates, 0 duplicates--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---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+ pruning with 15/35 rules+ [3,0,7,0,20,0,75,0,297] direct candidates, 0 duplicates+ [3,4,12,32,54,139,287,691,1713] pattern candidates, 0 duplicates++rules:+x * y == x + y+x * y == y + x+x - x == 0+x + 0 == x+0 + x == x+x - 0 == x+(x + y) + z == x + (y + z)+(x + y) + z == y + (x + z)+x - (y - z) == z + (x - y)+(x - y) - z == x - (y + z)+(x - y) - z == x - (z + y)+(x + y) - z == x + (y - z)+(x + y) - z == y + (x - z)+x + (y - x) == y+(x - y) + y == x+equations:+y + x == x + y+y + (x + z) == x + (y + z)+z + (x + y) == x + (y + z)+z + (y + x) == x + (y + z)+y + (x - z) == x + (y - z)+(x - z) + y == x + (y - z)+(z - y) + x == (x - y) + z+y - (x + y) == 0 - x+y - (y + x) == 0 - x+z - (y + z) == x - (x + y)+z - (y + z) == x - (y + x)+z - (z + y) == x - (x + y)+z - (z + y) == x - (y + x)+x + (0 - y) == x - y+(0 - y) + x == x - y+x - (x + 1) == 0 - 1+x - (1 + x) == 0 - 1+y - (y + 1) == x - (x + 1)+y - (y + 1) == x - (1 + x)+y - (1 + y) == x - (1 + x)++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 - 1++foo x = 0 - x++foo x = 0 - 1++foo x = (0 - 1) + x++foo x = x + (x + x)++foo x = x + (x + 1)++foo x = x + (1 + x)++foo x = x + (1 + 1)++foo x = x + (x - 1)++foo x = x + (0 - 1)++foo x = 1 + (x + x)++foo x = 1 + (x + 1)++foo x = 1 + (1 + x)++foo x = 1 + (1 + 1)++foo x = 1 + (0 - x)++foo x = x - (x + x)++foo x = x - (x + 1)++foo x = x - (1 + x)++foo x = x - (1 + 1)++foo x = 0 - (x + x)++foo x = 0 - (x + 1)++foo x = 0 - (1 + x)++foo x = 0 - (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 x = x - 1++foo x = 0 - x++foo x = 0 - 1++foo x = 1 - x++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 = 0+foo x = x - 1++foo 0 = 0+foo x = 0 - x++foo 0 = 0+foo x = 0 - 1++foo 0 = 0+foo x = 1 - x++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+foo x = x - 1++foo 0 = 1+foo x = 0 - x++foo 0 = 1+foo x = 0 - 1++foo 0 = 1+foo x = 1 - x++foo 0 = 1 + 1+foo x = x++foo 0 = 1 + 1+foo x = 0++foo 0 = 1 + 1+foo x = 1++foo 0 = 0 - 1+foo x = x++foo 0 = 0 - 1+foo x = 0++foo 0 = 0 - 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 - 1)++foo 0 = 0+foo x = foo (1 - x)++foo 0 = 1+foo x = foo (x - 1)++foo 0 = 1+foo x = foo (1 - x)++foo x = (x - 1) + x++foo x = (0 - x) + 1++foo x = (0 - 1) + x++foo x = (1 - x) + 1++foo x = x + (x + x)++foo x = x + (x + 1)++foo x = x + (1 + x)++foo x = x + (1 + 1)++foo x = x + (x - 1)++foo x = x + (0 - 1)++foo x = 1 + (x + x)++foo x = 1 + (x + 1)++foo x = 1 + (1 + x)++foo x = 1 + (1 + 1)++foo x = 1 + (0 - x)++foo x = 1 + (1 - x)++foo x = x - (x + x)++foo x = x - (x + 1)++foo x = x - (1 + x)++foo x = x - (1 + 1)++foo x = 0 - (x + x)++foo x = 0 - (x + 1)++foo x = 0 - (1 + x)++foo x = 0 - (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 = 0+foo x = x - 1++foo 1 = 0+foo x = 0 - x++foo 1 = 0+foo x = 0 - 1++foo 1 = 0+foo x = 1 - x++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+foo x = x - 1++foo 1 = 1+foo x = 0 - x++foo 1 = 1+foo x = 0 - 1++foo 1 = 1+foo x = 1 - x++foo 1 = 1 + 1+foo x = x++foo 1 = 1 + 1+foo x = 0++foo 1 = 1 + 1+foo x = 1++foo 1 = 0 - 1+foo x = x++foo 1 = 0 - 1+foo x = 0++foo 1 = 0 - 1+foo x = 1++foo 1 = 0+foo x = foo (x - 1)++foo 1 = 0+foo x = foo (1 - x)++foo 1 = 1+foo x = foo (x - 1)++foo 1 = 1+foo x = foo (1 - x)++foo 0 = 0+foo x = (x - 1) + x++foo 0 = 0+foo x = (0 - x) + 1++foo 0 = 0+foo x = (0 - 1) + x++foo 0 = 0+foo x = (1 - x) + 1++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 = x + (x - 1)++foo 0 = 0+foo x = x + (0 - 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 = 0+foo x = 1 + (0 - x)++foo 0 = 0+foo x = 1 + (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 = 0 - (x + x)++foo 0 = 0+foo x = 0 - (x + 1)++foo 0 = 0+foo x = 0 - (1 + x)++foo 0 = 0+foo x = 0 - (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 - 1) + x++foo 0 = 1+foo x = (0 - x) + 1++foo 0 = 1+foo x = (0 - 1) + x++foo 0 = 1+foo x = (1 - x) + 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 = x + (x - 1)++foo 0 = 1+foo x = x + (0 - 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+foo x = 1 + (0 - x)++foo 0 = 1+foo x = 1 + (1 - x)++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 = 0 - (x + x)++foo 0 = 1+foo x = 0 - (x + 1)++foo 0 = 1+foo x = 0 - (1 + x)++foo 0 = 1+foo x = 0 - (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+foo x = x - 1++foo 0 = 1 + 1+foo x = 0 - x++foo 0 = 1 + 1+foo x = 0 - 1++foo 0 = 1 + 1+foo x = 1 - x++foo 0 = 0 - 1+foo x = x + x++foo 0 = 0 - 1+foo x = x + 1++foo 0 = 0 - 1+foo x = 1 + x++foo 0 = 0 - 1+foo x = 1 + 1++foo 0 = 0 - 1+foo x = x - 1++foo 0 = 0 - 1+foo x = 0 - x++foo 0 = 0 - 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 - (1 + 1)+foo x = x++foo 0 = 0 - (1 + 1)+foo x = 0++foo 0 = 0 - (1 + 1)+foo x = 1++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 = 0+foo x = x - 1++foo 0 = 0+foo 1 = 0+foo x = 0 - x++foo 0 = 0+foo 1 = 0+foo x = 0 - 1++foo 0 = 0+foo 1 = 0+foo x = 1 - x++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+foo x = x - 1++foo 0 = 0+foo 1 = 1+foo x = 0 - x++foo 0 = 0+foo 1 = 1+foo x = 0 - 1++foo 0 = 0+foo 1 = 1+foo x = 1 - x++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 = 0+foo 1 = 0 - 1+foo x = x++foo 0 = 0+foo 1 = 0 - 1+foo x = 0++foo 0 = 0+foo 1 = 0 - 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 = 0+foo x = x - 1++foo 0 = 1+foo 1 = 0+foo x = 0 - x++foo 0 = 1+foo 1 = 0+foo x = 0 - 1++foo 0 = 1+foo 1 = 0+foo x = 1 - x++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+foo x = x - 1++foo 0 = 1+foo 1 = 1+foo x = 0 - x++foo 0 = 1+foo 1 = 1+foo x = 0 - 1++foo 0 = 1+foo 1 = 1+foo x = 1 - x++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+foo 1 = 0 - 1+foo x = x++foo 0 = 1+foo 1 = 0 - 1+foo x = 0++foo 0 = 1+foo 1 = 0 - 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++foo 0 = 0 - 1+foo 1 = 0+foo x = x++foo 0 = 0 - 1+foo 1 = 0+foo x = 0++foo 0 = 0 - 1+foo 1 = 0+foo x = 1++foo 0 = 0 - 1+foo 1 = 1+foo x = x++foo 0 = 0 - 1+foo 1 = 1+foo x = 0++foo 0 = 0 - 1+foo 1 = 1+foo x = 1+++Candidates for: ? :: Int -> Int -> Int+ pruning with 10/23 rules+ [3,3,4,10,17,26,54,93,162] direct candidates, 0 duplicates+ [3,11,42,117,346,955,2714,7510,20754] pattern candidates, 0 duplicates++rules:+x * y == x + y+x * y == y + x+x + 0 == x+0 + x == x+dec (x + y) == x + dec y+dec (x + y) == y + dec x+dec (x + y) == dec x + y+dec (x + y) == dec y + x+(x + y) + z == x + (y + z)+(x + y) + z == y + (x + z)+equations:+y + x == x + y+y + dec x == x + dec y+dec x + y == x + dec y+dec y + x == dec x + y+x + dec 0 == dec x+dec 0 + x == dec x+y + (x + z) == x + (y + z)+z + (x + y) == x + (y + z)+z + (y + x) == x + (y + z)+y + dec (dec x) == x + dec (dec y)+dec (dec x) + y == x + dec (dec y)+x + dec (dec 0) == dec (dec x)+dec (dec 0) + x == dec (dec x)++direct candidates:++x ? y = x++x ? y = y++x ? y = 0++x ? y = dec x++x ? y = dec y++x ? y = dec 0++x ? y = x + x++x ? y = x + y++x ? y = y + x++x ? y = y + y++x ? y = dec x + y++x ? y = dec y + x++x ? y = dec 0 + x++x ? y = dec 0 + y++x ? y = x + dec x++x ? y = x + dec y++x ? y = x + dec 0++x ? y = y + dec x++x ? y = y + dec y++x ? y = y + dec 0++x ? y = x + (x + x)++x ? y = x + (x + y)++x ? y = x + (y + x)++x ? y = x + (y + y)++x ? y = y + (x + x)++x ? y = y + (x + y)++x ? y = y + (y + x)++x ? y = y + (y + y)++x ? y = dec x + dec x++x ? y = dec x + dec y++x ? y = dec x + dec 0++x ? y = dec y + dec x++x ? y = dec y + dec y++x ? y = dec y + dec 0++x ? y = dec 0 + dec x++x ? y = dec 0 + dec y++x ? y = dec 0 + dec 0++x ? y = x + (dec x + y)++x ? y = x + (dec y + x)++x ? y = x + (dec 0 + x)++x ? y = x + (dec 0 + y)++x ? y = x + (x + dec x)++x ? y = x + (x + dec y)++x ? y = x + (x + dec 0)++x ? y = x + (y + dec x)++x ? y = x + (y + dec y)++x ? y = x + (y + dec 0)++x ? y = y + (dec x + y)++x ? y = y + (dec y + x)++x ? y = y + (dec 0 + x)++x ? y = y + (dec 0 + y)++x ? y = y + (x + dec x)++x ? y = y + (x + dec y)++x ? y = y + (x + dec 0)++x ? y = y + (y + dec x)++x ? y = y + (y + dec y)++x ? y = y + (y + dec 0)++x ? y = dec x + (y + y)++x ? y = dec y + (x + x)++x ? y = dec 0 + (x + x)++x ? y = dec 0 + (x + y)++x ? y = dec 0 + (y + x)++x ? y = dec 0 + (y + y)+++pattern candidates:++x ? y = x++x ? y = y++x ? y = 0++x ? y = dec x++x ? y = dec y++x ? y = dec 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++x ? y = dec (dec x)++x ? y = dec (dec y)++x ? y = dec (dec 0)++x ? 0 = x+x ? y = dec x++x ? 0 = x+x ? y = dec y++x ? 0 = x+x ? y = dec 0++x ? 0 = 0+x ? y = dec x++x ? 0 = 0+x ? y = dec y++x ? 0 = 0+x ? y = dec 0++x ? 0 = dec x+x ? y = x++x ? 0 = dec x+x ? y = y++x ? 0 = dec x+x ? y = 0++x ? 0 = dec 0+x ? y = x++x ? 0 = dec 0+x ? y = y++x ? 0 = dec 0+x ? y = 0++0 ? x = x+x ? y = dec x++0 ? x = x+x ? y = dec y++0 ? x = x+x ? y = dec 0++0 ? x = 0+x ? y = dec x++0 ? x = 0+x ? y = dec y++0 ? x = 0+x ? y = dec 0++0 ? x = dec x+x ? y = x++0 ? x = dec x+x ? y = y++0 ? x = dec x+x ? y = 0++0 ? x = dec 0+x ? y = x++0 ? x = dec 0+x ? y = y++0 ? x = dec 0+x ? y = 0++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 ? y = dec x + x++x ? y = dec x + y++x ? y = dec y + x++x ? y = dec y + y++x ? y = dec 0 + x++x ? y = dec 0 + y++x ? y = dec (dec (dec x))++x ? y = dec (dec (dec y))++x ? y = dec (dec (dec 0))++x ? y = x + dec x++x ? y = x + dec y++x ? y = x + dec 0++x ? y = y + dec x++x ? y = y + dec y++x ? y = y + dec 0++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 = x+x ? y = dec (dec x)++x ? 0 = x+x ? y = dec (dec y)++x ? 0 = x+x ? y = dec (dec 0)++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 = 0+x ? y = dec (dec x)++x ? 0 = 0+x ? y = dec (dec y)++x ? 0 = 0+x ? y = dec (dec 0)++x ? 0 = dec x+x ? y = dec y++x ? 0 = dec x+x ? y = dec 0++x ? 0 = dec 0+x ? y = dec x++x ? 0 = dec 0+x ? y = dec y++x ? 0 = x + x+x ? y = x++x ? 0 = x + x+x ? y = y++x ? 0 = x + x+x ? y = 0++x ? 0 = dec (dec x)+x ? y = x++x ? 0 = dec (dec x)+x ? y = y++x ? 0 = dec (dec x)+x ? y = 0++x ? 0 = dec (dec 0)+x ? y = x++x ? 0 = dec (dec 0)+x ? y = y++x ? 0 = dec (dec 0)+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 = x+x ? y = dec (dec x)++0 ? x = x+x ? y = dec (dec y)++0 ? x = x+x ? y = dec (dec 0)++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 = 0+x ? y = dec (dec x)++0 ? x = 0+x ? y = dec (dec y)++0 ? x = 0+x ? y = dec (dec 0)++0 ? x = dec x+x ? y = dec y++0 ? x = dec x+x ? y = dec 0++0 ? x = dec 0+x ? y = dec x++0 ? x = dec 0+x ? y = dec y++0 ? x = x + x+x ? y = x++0 ? x = x + x+x ? y = y++0 ? x = x + x+x ? y = 0++0 ? x = dec (dec x)+x ? y = x++0 ? x = dec (dec x)+x ? y = y++0 ? x = dec (dec x)+x ? y = 0++0 ? x = dec (dec 0)+x ? y = x++0 ? x = dec (dec 0)+x ? y = y++0 ? x = dec (dec 0)+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = 0++x ? 0 = x+x ? y = x ? dec y++x ? 0 = x+x ? y = y ? dec y++x ? 0 = x+x ? y = 0 ? dec y++x ? 0 = x+x ? y = dec x ? x++x ? 0 = x+x ? y = dec x ? y++x ? 0 = x+x ? y = dec x ? 0++x ? 0 = 0+x ? y = x ? dec y++x ? 0 = 0+x ? y = y ? dec y++x ? 0 = 0+x ? y = 0 ? dec y++x ? 0 = 0+x ? y = dec x ? x++x ? 0 = 0+x ? y = dec x ? y++x ? 0 = 0+x ? y = dec x ? 0++0 ? x = x+x ? y = x ? dec y++0 ? x = x+x ? y = y ? dec y++0 ? x = x+x ? y = 0 ? dec y++0 ? x = x+x ? y = dec x ? x++0 ? x = x+x ? y = dec x ? y++0 ? x = x+x ? y = dec x ? 0++0 ? x = 0+x ? y = x ? dec y++0 ? x = 0+x ? y = y ? dec y++0 ? x = 0+x ? y = 0 ? dec y++0 ? x = 0+x ? y = dec x ? x++0 ? x = 0+x ? y = dec x ? y++0 ? x = 0+x ? y = dec x ? 0++x ? y = dec (dec x) + x++x ? y = dec (dec x) + y++x ? y = dec (dec y) + x++x ? y = dec (dec y) + y++x ? y = dec (dec 0) + x++x ? y = dec (dec 0) + y++x ? y = dec (dec (dec (dec x)))++x ? y = dec (dec (dec (dec y)))++x ? y = dec (dec (dec (dec 0)))++x ? y = x + (x + x)++x ? y = x + (x + y)++x ? y = x + (y + x)++x ? y = x + (y + y)++x ? y = x + dec (dec x)++x ? y = x + dec (dec y)++x ? y = x + dec (dec 0)++x ? y = y + (x + x)++x ? y = y + (x + y)++x ? y = y + (y + x)++x ? y = y + (y + y)++x ? y = y + dec (dec x)++x ? y = y + dec (dec y)++x ? y = y + dec (dec 0)++x ? y = dec x + dec x++x ? y = dec x + dec y++x ? y = dec x + dec 0++x ? y = dec y + dec x++x ? y = dec y + dec y++x ? y = dec y + dec 0++x ? y = dec 0 + dec x++x ? y = dec 0 + dec y++x ? y = dec 0 + dec 0++x ? 0 = x+x ? y = dec x + x++x ? 0 = x+x ? y = dec x + y++x ? 0 = x+x ? y = dec y + x++x ? 0 = x+x ? y = dec y + y++x ? 0 = x+x ? y = dec 0 + x++x ? 0 = x+x ? y = dec 0 + y++x ? 0 = x+x ? y = dec (dec (dec x))++x ? 0 = x+x ? y = dec (dec (dec y))++x ? 0 = x+x ? y = dec (dec (dec 0))++x ? 0 = x+x ? y = x + dec x++x ? 0 = x+x ? y = x + dec y++x ? 0 = x+x ? y = x + dec 0++x ? 0 = x+x ? y = y + dec x++x ? 0 = x+x ? y = y + dec y++x ? 0 = x+x ? y = y + dec 0++x ? 0 = 0+x ? y = dec x + x++x ? 0 = 0+x ? y = dec x + y++x ? 0 = 0+x ? y = dec y + x++x ? 0 = 0+x ? y = dec y + y++x ? 0 = 0+x ? y = dec 0 + x++x ? 0 = 0+x ? y = dec 0 + y++x ? 0 = 0+x ? y = dec (dec (dec x))++x ? 0 = 0+x ? y = dec (dec (dec y))++x ? 0 = 0+x ? y = dec (dec (dec 0))++x ? 0 = 0+x ? y = x + dec x++x ? 0 = 0+x ? y = x + dec y++x ? 0 = 0+x ? y = x + dec 0++x ? 0 = 0+x ? y = y + dec x++x ? 0 = 0+x ? y = y + dec y++x ? 0 = 0+x ? y = y + dec 0++x ? 0 = dec x+x ? y = x + x++x ? 0 = dec x+x ? y = x + y++x ? 0 = dec x+x ? y = y + x++x ? 0 = dec x+x ? y = y + y++x ? 0 = dec x+x ? y = dec (dec x)++x ? 0 = dec x+x ? y = dec (dec y)++x ? 0 = dec x+x ? y = dec (dec 0)++x ? 0 = dec 0+x ? y = x + x++x ? 0 = dec 0+x ? y = x + y++x ? 0 = dec 0+x ? y = y + x++x ? 0 = dec 0+x ? y = y + y++x ? 0 = dec 0+x ? y = dec (dec x)++x ? 0 = dec 0+x ? y = dec (dec y)++x ? 0 = dec 0+x ? y = dec (dec 0)++x ? 0 = x + x+x ? y = dec x++x ? 0 = x + x+x ? y = dec y++x ? 0 = x + x+x ? y = dec 0++x ? 0 = dec (dec x)+x ? y = dec x++x ? 0 = dec (dec x)+x ? y = dec y++x ? 0 = dec (dec x)+x ? y = dec 0++x ? 0 = dec (dec 0)+x ? y = dec x++x ? 0 = dec (dec 0)+x ? y = dec y++x ? 0 = dec (dec 0)+x ? y = dec 0++x ? 0 = dec x + x+x ? y = x++x ? 0 = dec x + x+x ? y = y++x ? 0 = dec x + x+x ? y = 0++x ? 0 = dec 0 + x+x ? y = x++x ? 0 = dec 0 + x+x ? y = y++x ? 0 = dec 0 + x+x ? y = 0++x ? 0 = dec (dec (dec x))+x ? y = x++x ? 0 = dec (dec (dec x))+x ? y = y++x ? 0 = dec (dec (dec x))+x ? y = 0++x ? 0 = dec (dec (dec 0))+x ? y = x++x ? 0 = dec (dec (dec 0))+x ? y = y++x ? 0 = dec (dec (dec 0))+x ? y = 0++x ? 0 = x + dec x+x ? y = x++x ? 0 = x + dec x+x ? y = y++x ? 0 = x + dec x+x ? y = 0++x ? 0 = x + dec 0+x ? y = x++x ? 0 = x + dec 0+x ? y = y++x ? 0 = x + dec 0+x ? y = 0++0 ? x = x+x ? y = dec x + x++0 ? x = x+x ? y = dec x + y++0 ? x = x+x ? y = dec y + x++0 ? x = x+x ? y = dec y + y++0 ? x = x+x ? y = dec 0 + x++0 ? x = x+x ? y = dec 0 + y++0 ? x = x+x ? y = dec (dec (dec x))++0 ? x = x+x ? y = dec (dec (dec y))++0 ? x = x+x ? y = dec (dec (dec 0))++0 ? x = x+x ? y = x + dec x++0 ? x = x+x ? y = x + dec y++0 ? x = x+x ? y = x + dec 0++0 ? x = x+x ? y = y + dec x++0 ? x = x+x ? y = y + dec y++0 ? x = x+x ? y = y + dec 0++0 ? x = 0+x ? y = dec x + x++0 ? x = 0+x ? y = dec x + y++0 ? x = 0+x ? y = dec y + x++0 ? x = 0+x ? y = dec y + y++0 ? x = 0+x ? y = dec 0 + x++0 ? x = 0+x ? y = dec 0 + y++0 ? x = 0+x ? y = dec (dec (dec x))++0 ? x = 0+x ? y = dec (dec (dec y))++0 ? x = 0+x ? y = dec (dec (dec 0))++0 ? x = 0+x ? y = x + dec x++0 ? x = 0+x ? y = x + dec y++0 ? x = 0+x ? y = x + dec 0++0 ? x = 0+x ? y = y + dec x++0 ? x = 0+x ? y = y + dec y++0 ? x = 0+x ? y = y + dec 0++0 ? x = dec x+x ? y = x + x++0 ? x = dec x+x ? y = x + y++0 ? x = dec x+x ? y = y + x++0 ? x = dec x+x ? y = y + y++0 ? x = dec x+x ? y = dec (dec x)++0 ? x = dec x+x ? y = dec (dec y)++0 ? x = dec x+x ? y = dec (dec 0)++0 ? x = dec 0+x ? y = x + x++0 ? x = dec 0+x ? y = x + y++0 ? x = dec 0+x ? y = y + x++0 ? x = dec 0+x ? y = y + y++0 ? x = dec 0+x ? y = dec (dec x)++0 ? x = dec 0+x ? y = dec (dec y)++0 ? x = dec 0+x ? y = dec (dec 0)++0 ? x = x + x+x ? y = dec x++0 ? x = x + x+x ? y = dec y++0 ? x = x + x+x ? y = dec 0++0 ? x = dec (dec x)+x ? y = dec x++0 ? x = dec (dec x)+x ? y = dec y++0 ? x = dec (dec x)+x ? y = dec 0++0 ? x = dec (dec 0)+x ? y = dec x++0 ? x = dec (dec 0)+x ? y = dec y++0 ? x = dec (dec 0)+x ? y = dec 0++0 ? x = dec x + x+x ? y = x++0 ? x = dec x + x+x ? y = y++0 ? x = dec x + x+x ? y = 0++0 ? x = dec 0 + x+x ? y = x++0 ? x = dec 0 + x+x ? y = y++0 ? x = dec 0 + x+x ? y = 0++0 ? x = dec (dec (dec x))+x ? y = x++0 ? x = dec (dec (dec x))+x ? y = y++0 ? x = dec (dec (dec x))+x ? y = 0++0 ? x = dec (dec (dec 0))+x ? y = x++0 ? x = dec (dec (dec 0))+x ? y = y++0 ? x = dec (dec (dec 0))+x ? y = 0++0 ? x = x + dec x+x ? y = x++0 ? x = x + dec x+x ? y = y++0 ? x = x + dec x+x ? y = 0++0 ? x = x + dec 0+x ? y = x++0 ? x = x + dec 0+x ? y = y++0 ? x = x + dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = x + x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = x + y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = y + x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = y + y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = x + x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = x + y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = y + x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = y + y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x + x+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = x + x+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = x + x+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = x + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = x + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = y + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = y + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = x + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = x + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = y + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = y + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + x+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + x+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + x+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = dec x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = dec y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec x+x ? y = x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec x+x ? y = y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec x+x ? y = 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = x + x+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = x + x+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = x + x+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = x + x+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = x + x+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = x + x+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = dec x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = dec y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = dec x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = dec y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec x+x ? y = x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec x+x ? y = y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec x+x ? y = 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec 0+x ? y = x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec 0+x ? y = y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = dec x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = dec y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = dec x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = dec y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec x+x ? y = x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec x+x ? y = y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec x+x ? y = 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec 0+x ? y = x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec 0+x ? y = y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = x+x ? y = x++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = x+x ? y = y++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = x+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = 0+x ? y = x++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = 0+x ? y = y++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = x+x ? y = x++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = x+x ? y = y++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = x+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = 0+x ? y = x++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = 0+x ? y = y++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = 0+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = x+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = x+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = x+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = 0+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = 0+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = 0+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = x+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = x+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = x+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = 0+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = 0+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = 0+x ? y = 0++x ? 0 = x+x ? y = x ? dec (dec y)++x ? 0 = x+x ? y = y ? dec (dec y)++x ? 0 = x+x ? y = 0 ? dec (dec y)++x ? 0 = x+x ? y = dec x ? dec x++x ? 0 = x+x ? y = dec x ? dec y++x ? 0 = x+x ? y = dec x ? dec 0++x ? 0 = x+x ? y = dec y ? dec y++x ? 0 = x+x ? y = dec 0 ? dec y++x ? 0 = x+x ? y = dec (dec x) ? x++x ? 0 = x+x ? y = dec (dec x) ? y++x ? 0 = x+x ? y = dec (dec x) ? 0++x ? 0 = 0+x ? y = x ? dec (dec y)++x ? 0 = 0+x ? y = y ? dec (dec y)++x ? 0 = 0+x ? y = 0 ? dec (dec y)++x ? 0 = 0+x ? y = dec x ? dec x++x ? 0 = 0+x ? y = dec x ? dec y++x ? 0 = 0+x ? y = dec x ? dec 0++x ? 0 = 0+x ? y = dec y ? dec y++x ? 0 = 0+x ? y = dec 0 ? dec y++x ? 0 = 0+x ? y = dec (dec x) ? x++x ? 0 = 0+x ? y = dec (dec x) ? y++x ? 0 = 0+x ? y = dec (dec x) ? 0++0 ? x = x+x ? y = x ? dec (dec y)++0 ? x = x+x ? y = y ? dec (dec y)++0 ? x = x+x ? y = 0 ? dec (dec y)++0 ? x = x+x ? y = dec x ? dec x++0 ? x = x+x ? y = dec x ? dec y++0 ? x = x+x ? y = dec x ? dec 0++0 ? x = x+x ? y = dec y ? dec y++0 ? x = x+x ? y = dec 0 ? dec y++0 ? x = x+x ? y = dec (dec x) ? x++0 ? x = x+x ? y = dec (dec x) ? y++0 ? x = x+x ? y = dec (dec x) ? 0++0 ? x = 0+x ? y = x ? dec (dec y)++0 ? x = 0+x ? y = y ? dec (dec y)++0 ? x = 0+x ? y = 0 ? dec (dec y)++0 ? x = 0+x ? y = dec x ? dec x++0 ? x = 0+x ? y = dec x ? dec y++0 ? x = 0+x ? y = dec x ? dec 0++0 ? x = 0+x ? y = dec y ? dec y++0 ? x = 0+x ? y = dec 0 ? dec y++0 ? x = 0+x ? y = dec (dec x) ? x++0 ? x = 0+x ? y = dec (dec x) ? y++0 ? x = 0+x ? y = dec (dec x) ? 0++x ? 0 = x+x ? y = dec (x ? dec y)++x ? 0 = x+x ? y = dec (y ? dec y)++x ? 0 = x+x ? y = dec (0 ? dec y)++x ? 0 = x+x ? y = dec (dec x ? x)++x ? 0 = x+x ? y = dec (dec x ? y)++x ? 0 = x+x ? y = dec (dec x ? 0)++x ? 0 = 0+x ? y = dec (x ? dec y)++x ? 0 = 0+x ? y = dec (y ? dec y)++x ? 0 = 0+x ? y = dec (0 ? dec y)++x ? 0 = 0+x ? y = dec (dec x ? x)++x ? 0 = 0+x ? y = dec (dec x ? y)++x ? 0 = 0+x ? y = dec (dec x ? 0)++x ? 0 = dec x+x ? y = x ? dec y++x ? 0 = dec x+x ? y = y ? dec y++x ? 0 = dec x+x ? y = 0 ? dec y++x ? 0 = dec x+x ? y = dec x ? x++x ? 0 = dec x+x ? y = dec x ? y++x ? 0 = dec x+x ? y = dec x ? 0++x ? 0 = dec 0+x ? y = x ? dec y++x ? 0 = dec 0+x ? y = y ? dec y++x ? 0 = dec 0+x ? y = 0 ? dec y++x ? 0 = dec 0+x ? y = dec x ? x++x ? 0 = dec 0+x ? y = dec x ? y++x ? 0 = dec 0+x ? y = dec x ? 0++0 ? x = x+x ? y = dec (x ? dec y)++0 ? x = x+x ? y = dec (y ? dec y)++0 ? x = x+x ? y = dec (0 ? dec y)++0 ? x = x+x ? y = dec (dec x ? x)++0 ? x = x+x ? y = dec (dec x ? y)++0 ? x = x+x ? y = dec (dec x ? 0)++0 ? x = 0+x ? y = dec (x ? dec y)++0 ? x = 0+x ? y = dec (y ? dec y)++0 ? x = 0+x ? y = dec (0 ? dec y)++0 ? x = 0+x ? y = dec (dec x ? x)++0 ? x = 0+x ? y = dec (dec x ? y)++0 ? x = 0+x ? y = dec (dec x ? 0)++0 ? x = dec x+x ? y = x ? dec y++0 ? x = dec x+x ? y = y ? dec y++0 ? x = dec x+x ? y = 0 ? dec y++0 ? x = dec x+x ? y = dec x ? x++0 ? x = dec x+x ? y = dec x ? y++0 ? x = dec x+x ? y = dec x ? 0++0 ? x = dec 0+x ? y = x ? dec y++0 ? x = dec 0+x ? y = y ? dec y++0 ? x = dec 0+x ? y = 0 ? dec y++0 ? x = dec 0+x ? y = dec x ? x++0 ? x = dec 0+x ? y = dec x ? y++0 ? x = dec 0+x ? y = dec x ? 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = x ? dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = y ? dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = 0 ? dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec x ? x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec x ? y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec x ? 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x ? x+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x ? 0+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x ? x+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x ? 0+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x ? x+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x ? 0+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = x ? dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = y ? dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = 0 ? dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec x ? x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec x ? y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec x ? 0++0 ? 0 = 0+0 ? x = x ? dec x+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = 0 ? dec x+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = x ? dec x+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = 0 ? dec x+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = x ? dec x+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = 0 ? dec x+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = x ? dec x+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = 0 ? dec x+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = x ? dec x+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = 0 ? dec x+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = x ? dec x+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = 0 ? dec x+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = x ? dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = y ? dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = 0 ? dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec x ? x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec x ? y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec x ? 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x ? x+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x ? 0+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x ? x+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x ? 0+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x ? x+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x ? 0+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = x ? dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = y ? dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = 0 ? dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec x ? x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec x ? y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec x ? 0++x ? y = dec (dec (dec x)) + x++x ? y = dec (dec (dec x)) + y++x ? y = dec (dec (dec y)) + x++x ? y = dec (dec (dec y)) + y++x ? y = dec (dec (dec 0)) + x++x ? y = dec (dec (dec 0)) + y++x ? y = dec (dec (dec (dec (dec x))))++x ? y = dec (dec (dec (dec (dec y))))++x ? y = dec (dec (dec (dec (dec 0))))++x ? y = x + (dec x + x)++x ? y = x + (dec x + y)++x ? y = x + (dec y + x)++x ? y = x + (dec y + y)++x ? y = x + (dec 0 + x)++x ? y = x + (dec 0 + y)++x ? y = x + dec (dec (dec x))++x ? y = x + dec (dec (dec y))++x ? y = x + dec (dec (dec 0))++x ? y = x + (x + dec x)++x ? y = x + (x + dec y)++x ? y = x + (x + dec 0)++x ? y = x + (y + dec x)++x ? y = x + (y + dec y)++x ? y = x + (y + dec 0)++x ? y = y + (dec x + x)++x ? y = y + (dec x + y)++x ? y = y + (dec y + x)++x ? y = y + (dec y + y)++x ? y = y + (dec 0 + x)++x ? y = y + (dec 0 + y)++x ? y = y + dec (dec (dec x))++x ? y = y + dec (dec (dec y))++x ? y = y + dec (dec (dec 0))++x ? y = y + (x + dec x)++x ? y = y + (x + dec y)++x ? y = y + (x + dec 0)++x ? y = y + (y + dec x)++x ? y = y + (y + dec y)++x ? y = y + (y + dec 0)++x ? y = dec x + (x + x)++x ? y = dec x + (x + y)++x ? y = dec x + (y + x)++x ? y = dec x + (y + y)++x ? y = dec x + dec (dec x)++x ? y = dec x + dec (dec y)++x ? y = dec x + dec (dec 0)++x ? y = dec y + (x + x)++x ? y = dec y + (x + y)++x ? y = dec y + (y + x)++x ? y = dec y + (y + y)++x ? y = dec y + dec (dec x)++x ? y = dec y + dec (dec y)++x ? y = dec y + dec (dec 0)++x ? y = dec 0 + (x + x)++x ? y = dec 0 + (x + y)++x ? y = dec 0 + (y + x)++x ? y = dec 0 + (y + y)++x ? y = dec 0 + dec (dec x)++x ? y = dec 0 + dec (dec y)++x ? y = dec 0 + dec (dec 0)++x ? y = dec (dec x) + dec x++x ? y = dec (dec x) + dec y++x ? y = dec (dec x) + dec 0++x ? y = dec (dec y) + dec x++x ? y = dec (dec y) + dec y++x ? y = dec (dec y) + dec 0++x ? y = dec (dec 0) + dec x++x ? y = dec (dec 0) + dec y++x ? y = dec (dec 0) + dec 0++x ? 0 = x+x ? y = dec (dec x) + x++x ? 0 = x+x ? y = dec (dec x) + y++x ? 0 = x+x ? y = dec (dec y) + x++x ? 0 = x+x ? y = dec (dec y) + y++x ? 0 = x+x ? y = dec (dec 0) + x++x ? 0 = x+x ? y = dec (dec 0) + y++x ? 0 = x+x ? y = dec (dec (dec (dec x)))++x ? 0 = x+x ? y = dec (dec (dec (dec y)))++x ? 0 = x+x ? y = dec (dec (dec (dec 0)))++x ? 0 = x+x ? y = x + (x + x)++x ? 0 = x+x ? y = x + (x + y)++x ? 0 = x+x ? y = x + (y + x)++x ? 0 = x+x ? y = x + (y + y)++x ? 0 = x+x ? y = x + dec (dec x)++x ? 0 = x+x ? y = x + dec (dec y)++x ? 0 = x+x ? y = x + dec (dec 0)++x ? 0 = x+x ? y = y + (x + x)++x ? 0 = x+x ? y = y + (x + y)++x ? 0 = x+x ? y = y + (y + x)++x ? 0 = x+x ? y = y + (y + y)++x ? 0 = x+x ? y = y + dec (dec x)++x ? 0 = x+x ? y = y + dec (dec y)++x ? 0 = x+x ? y = y + dec (dec 0)++x ? 0 = x+x ? y = dec x + dec x++x ? 0 = x+x ? y = dec x + dec y++x ? 0 = x+x ? y = dec x + dec 0++x ? 0 = x+x ? y = dec y + dec x++x ? 0 = x+x ? y = dec y + dec y++x ? 0 = x+x ? y = dec y + dec 0++x ? 0 = x+x ? y = dec 0 + dec x++x ? 0 = x+x ? y = dec 0 + dec y++x ? 0 = x+x ? y = dec 0 + dec 0++x ? 0 = 0+x ? y = dec (dec x) + x++x ? 0 = 0+x ? y = dec (dec x) + y++x ? 0 = 0+x ? y = dec (dec y) + x++x ? 0 = 0+x ? y = dec (dec y) + y++x ? 0 = 0+x ? y = dec (dec 0) + x++x ? 0 = 0+x ? y = dec (dec 0) + y++x ? 0 = 0+x ? y = dec (dec (dec (dec x)))++x ? 0 = 0+x ? y = dec (dec (dec (dec y)))++x ? 0 = 0+x ? y = dec (dec (dec (dec 0)))++x ? 0 = 0+x ? y = x + (x + x)++x ? 0 = 0+x ? y = x + (x + y)++x ? 0 = 0+x ? y = x + (y + x)++x ? 0 = 0+x ? y = x + (y + y)++x ? 0 = 0+x ? y = x + dec (dec x)++x ? 0 = 0+x ? y = x + dec (dec y)++x ? 0 = 0+x ? y = x + dec (dec 0)++x ? 0 = 0+x ? y = y + (x + x)++x ? 0 = 0+x ? y = y + (x + y)++x ? 0 = 0+x ? y = y + (y + x)++x ? 0 = 0+x ? y = y + (y + y)++x ? 0 = 0+x ? y = y + dec (dec x)++x ? 0 = 0+x ? y = y + dec (dec y)++x ? 0 = 0+x ? y = y + dec (dec 0)++x ? 0 = 0+x ? y = dec x + dec x++x ? 0 = 0+x ? y = dec x + dec y++x ? 0 = 0+x ? y = dec x + dec 0++x ? 0 = 0+x ? y = dec y + dec x++x ? 0 = 0+x ? y = dec y + dec y++x ? 0 = 0+x ? y = dec y + dec 0++x ? 0 = 0+x ? y = dec 0 + dec x++x ? 0 = 0+x ? y = dec 0 + dec y++x ? 0 = 0+x ? y = dec 0 + dec 0++x ? 0 = dec x+x ? y = dec x + x++x ? 0 = dec x+x ? y = dec x + y++x ? 0 = dec x+x ? y = dec y + x++x ? 0 = dec x+x ? y = dec y + y++x ? 0 = dec x+x ? y = dec 0 + x++x ? 0 = dec x+x ? y = dec 0 + y++x ? 0 = dec x+x ? y = dec (dec (dec x))++x ? 0 = dec x+x ? y = dec (dec (dec y))++x ? 0 = dec x+x ? y = dec (dec (dec 0))++x ? 0 = dec x+x ? y = x + dec x++x ? 0 = dec x+x ? y = x + dec y++x ? 0 = dec x+x ? y = x + dec 0++x ? 0 = dec x+x ? y = y + dec x++x ? 0 = dec x+x ? y = y + dec y++x ? 0 = dec x+x ? y = y + dec 0++x ? 0 = dec 0+x ? y = dec x + x++x ? 0 = dec 0+x ? y = dec x + y++x ? 0 = dec 0+x ? y = dec y + x++x ? 0 = dec 0+x ? y = dec y + y++x ? 0 = dec 0+x ? y = dec 0 + x++x ? 0 = dec 0+x ? y = dec 0 + y++x ? 0 = dec 0+x ? y = dec (dec (dec x))++x ? 0 = dec 0+x ? y = dec (dec (dec y))++x ? 0 = dec 0+x ? y = dec (dec (dec 0))++x ? 0 = dec 0+x ? y = x + dec x++x ? 0 = dec 0+x ? y = x + dec y++x ? 0 = dec 0+x ? y = x + dec 0++x ? 0 = dec 0+x ? y = y + dec x++x ? 0 = dec 0+x ? y = y + dec y++x ? 0 = dec 0+x ? y = y + dec 0++x ? 0 = x + x+x ? y = x + y++x ? 0 = x + x+x ? y = y + x++x ? 0 = x + x+x ? y = y + y++x ? 0 = x + x+x ? y = dec (dec x)++x ? 0 = x + x+x ? y = dec (dec y)++x ? 0 = x + x+x ? y = dec (dec 0)++x ? 0 = dec (dec x)+x ? y = x + x++x ? 0 = dec (dec x)+x ? y = x + y++x ? 0 = dec (dec x)+x ? y = y + x++x ? 0 = dec (dec x)+x ? y = y + y++x ? 0 = dec (dec x)+x ? y = dec (dec y)++x ? 0 = dec (dec x)+x ? y = dec (dec 0)++x ? 0 = dec (dec 0)+x ? y = x + x++x ? 0 = dec (dec 0)+x ? y = x + y++x ? 0 = dec (dec 0)+x ? y = y + x++x ? 0 = dec (dec 0)+x ? y = y + y++x ? 0 = dec (dec 0)+x ? y = dec (dec x)++x ? 0 = dec (dec 0)+x ? y = dec (dec y)++x ? 0 = dec x + x+x ? y = dec x++x ? 0 = dec x + x+x ? y = dec y++x ? 0 = dec x + x+x ? y = dec 0++x ? 0 = dec 0 + x+x ? y = dec x++x ? 0 = dec 0 + x+x ? y = dec y++x ? 0 = dec 0 + x+x ? y = dec 0++x ? 0 = dec (dec (dec x))+x ? y = dec x++x ? 0 = dec (dec (dec x))+x ? y = dec y++x ? 0 = dec (dec (dec x))+x ? y = dec 0++x ? 0 = dec (dec (dec 0))+x ? y = dec x++x ? 0 = dec (dec (dec 0))+x ? y = dec y++x ? 0 = dec (dec (dec 0))+x ? y = dec 0++x ? 0 = x + dec x+x ? y = dec x++x ? 0 = x + dec x+x ? y = dec y++x ? 0 = x + dec x+x ? y = dec 0++x ? 0 = x + dec 0+x ? y = dec x++x ? 0 = x + dec 0+x ? y = dec y++x ? 0 = x + dec 0+x ? y = dec 0++x ? 0 = dec (dec x) + x+x ? y = x++x ? 0 = dec (dec x) + x+x ? y = y++x ? 0 = dec (dec x) + x+x ? y = 0++x ? 0 = dec (dec 0) + x+x ? y = x++x ? 0 = dec (dec 0) + x+x ? y = y++x ? 0 = dec (dec 0) + x+x ? y = 0++x ? 0 = dec (dec (dec (dec x)))+x ? y = x++x ? 0 = dec (dec (dec (dec x)))+x ? y = y++x ? 0 = dec (dec (dec (dec x)))+x ? y = 0++x ? 0 = dec (dec (dec (dec 0)))+x ? y = x++x ? 0 = dec (dec (dec (dec 0)))+x ? y = y++x ? 0 = dec (dec (dec (dec 0)))+x ? y = 0++x ? 0 = x + (x + x)+x ? y = x++x ? 0 = x + (x + x)+x ? y = y++x ? 0 = x + (x + x)+x ? y = 0++x ? 0 = x + dec (dec x)+x ? y = x++x ? 0 = x + dec (dec x)+x ? y = y++x ? 0 = x + dec (dec x)+x ? y = 0++x ? 0 = x + dec (dec 0)+x ? y = x++x ? 0 = x + dec (dec 0)+x ? y = y++x ? 0 = x + dec (dec 0)+x ? y = 0++x ? 0 = dec x + dec x+x ? y = x++x ? 0 = dec x + dec x+x ? y = y++x ? 0 = dec x + dec x+x ? y = 0++x ? 0 = dec x + dec 0+x ? y = x++x ? 0 = dec x + dec 0+x ? y = y++x ? 0 = dec x + dec 0+x ? y = 0++x ? 0 = dec 0 + dec x+x ? y = x++x ? 0 = dec 0 + dec x+x ? y = y++x ? 0 = dec 0 + dec x+x ? y = 0++x ? 0 = dec 0 + dec 0+x ? y = x++x ? 0 = dec 0 + dec 0+x ? y = y++x ? 0 = dec 0 + dec 0+x ? y = 0++0 ? x = x+x ? y = dec (dec x) + x++0 ? x = x+x ? y = dec (dec x) + y++0 ? x = x+x ? y = dec (dec y) + x++0 ? x = x+x ? y = dec (dec y) + y++0 ? x = x+x ? y = dec (dec 0) + x++0 ? x = x+x ? y = dec (dec 0) + y++0 ? x = x+x ? y = dec (dec (dec (dec x)))++0 ? x = x+x ? y = dec (dec (dec (dec y)))++0 ? x = x+x ? y = dec (dec (dec (dec 0)))++0 ? x = x+x ? y = x + (x + x)++0 ? x = x+x ? y = x + (x + y)++0 ? x = x+x ? y = x + (y + x)++0 ? x = x+x ? y = x + (y + y)++0 ? x = x+x ? y = x + dec (dec x)++0 ? x = x+x ? y = x + dec (dec y)++0 ? x = x+x ? y = x + dec (dec 0)++0 ? x = x+x ? y = y + (x + x)++0 ? x = x+x ? y = y + (x + y)++0 ? x = x+x ? y = y + (y + x)++0 ? x = x+x ? y = y + (y + y)++0 ? x = x+x ? y = y + dec (dec x)++0 ? x = x+x ? y = y + dec (dec y)++0 ? x = x+x ? y = y + dec (dec 0)++0 ? x = x+x ? y = dec x + dec x++0 ? x = x+x ? y = dec x + dec y++0 ? x = x+x ? y = dec x + dec 0++0 ? x = x+x ? y = dec y + dec x++0 ? x = x+x ? y = dec y + dec y++0 ? x = x+x ? y = dec y + dec 0++0 ? x = x+x ? y = dec 0 + dec x++0 ? x = x+x ? y = dec 0 + dec y++0 ? x = x+x ? y = dec 0 + dec 0++0 ? x = 0+x ? y = dec (dec x) + x++0 ? x = 0+x ? y = dec (dec x) + y++0 ? x = 0+x ? y = dec (dec y) + x++0 ? x = 0+x ? y = dec (dec y) + y++0 ? x = 0+x ? y = dec (dec 0) + x++0 ? x = 0+x ? y = dec (dec 0) + y++0 ? x = 0+x ? y = dec (dec (dec (dec x)))++0 ? x = 0+x ? y = dec (dec (dec (dec y)))++0 ? x = 0+x ? y = dec (dec (dec (dec 0)))++0 ? x = 0+x ? y = x + (x + x)++0 ? x = 0+x ? y = x + (x + y)++0 ? x = 0+x ? y = x + (y + x)++0 ? x = 0+x ? y = x + (y + y)++0 ? x = 0+x ? y = x + dec (dec x)++0 ? x = 0+x ? y = x + dec (dec y)++0 ? x = 0+x ? y = x + dec (dec 0)++0 ? x = 0+x ? y = y + (x + x)++0 ? x = 0+x ? y = y + (x + y)++0 ? x = 0+x ? y = y + (y + x)++0 ? x = 0+x ? y = y + (y + y)++0 ? x = 0+x ? y = y + dec (dec x)++0 ? x = 0+x ? y = y + dec (dec y)++0 ? x = 0+x ? y = y + dec (dec 0)++0 ? x = 0+x ? y = dec x + dec x++0 ? x = 0+x ? y = dec x + dec y++0 ? x = 0+x ? y = dec x + dec 0++0 ? x = 0+x ? y = dec y + dec x++0 ? x = 0+x ? y = dec y + dec y++0 ? x = 0+x ? y = dec y + dec 0++0 ? x = 0+x ? y = dec 0 + dec x++0 ? x = 0+x ? y = dec 0 + dec y++0 ? x = 0+x ? y = dec 0 + dec 0++0 ? x = dec x+x ? y = dec x + x++0 ? x = dec x+x ? y = dec x + y++0 ? x = dec x+x ? y = dec y + x++0 ? x = dec x+x ? y = dec y + y++0 ? x = dec x+x ? y = dec 0 + x++0 ? x = dec x+x ? y = dec 0 + y++0 ? x = dec x+x ? y = dec (dec (dec x))++0 ? x = dec x+x ? y = dec (dec (dec y))++0 ? x = dec x+x ? y = dec (dec (dec 0))++0 ? x = dec x+x ? y = x + dec x++0 ? x = dec x+x ? y = x + dec y++0 ? x = dec x+x ? y = x + dec 0++0 ? x = dec x+x ? y = y + dec x++0 ? x = dec x+x ? y = y + dec y++0 ? x = dec x+x ? y = y + dec 0++0 ? x = dec 0+x ? y = dec x + x++0 ? x = dec 0+x ? y = dec x + y++0 ? x = dec 0+x ? y = dec y + x++0 ? x = dec 0+x ? y = dec y + y++0 ? x = dec 0+x ? y = dec 0 + x++0 ? x = dec 0+x ? y = dec 0 + y++0 ? x = dec 0+x ? y = dec (dec (dec x))++0 ? x = dec 0+x ? y = dec (dec (dec y))++0 ? x = dec 0+x ? y = dec (dec (dec 0))++0 ? x = dec 0+x ? y = x + dec x++0 ? x = dec 0+x ? y = x + dec y++0 ? x = dec 0+x ? y = x + dec 0++0 ? x = dec 0+x ? y = y + dec x++0 ? x = dec 0+x ? y = y + dec y++0 ? x = dec 0+x ? y = y + dec 0++0 ? x = x + x+x ? y = x + y++0 ? x = x + x+x ? y = y + x++0 ? x = x + x+x ? y = y + y++0 ? x = x + x+x ? y = dec (dec x)++0 ? x = x + x+x ? y = dec (dec y)++0 ? x = x + x+x ? y = dec (dec 0)++0 ? x = dec (dec x)+x ? y = x + x++0 ? x = dec (dec x)+x ? y = x + y++0 ? x = dec (dec x)+x ? y = y + x++0 ? x = dec (dec x)+x ? y = y + y++0 ? x = dec (dec x)+x ? y = dec (dec y)++0 ? x = dec (dec x)+x ? y = dec (dec 0)++0 ? x = dec (dec 0)+x ? y = x + x++0 ? x = dec (dec 0)+x ? y = x + y++0 ? x = dec (dec 0)+x ? y = y + x++0 ? x = dec (dec 0)+x ? y = y + y++0 ? x = dec (dec 0)+x ? y = dec (dec x)++0 ? x = dec (dec 0)+x ? y = dec (dec y)++0 ? x = dec x + x+x ? y = dec x++0 ? x = dec x + x+x ? y = dec y++0 ? x = dec x + x+x ? y = dec 0++0 ? x = dec 0 + x+x ? y = dec x++0 ? x = dec 0 + x+x ? y = dec y++0 ? x = dec 0 + x+x ? y = dec 0++0 ? x = dec (dec (dec x))+x ? y = dec x++0 ? x = dec (dec (dec x))+x ? y = dec y++0 ? x = dec (dec (dec x))+x ? y = dec 0++0 ? x = dec (dec (dec 0))+x ? y = dec x++0 ? x = dec (dec (dec 0))+x ? y = dec y++0 ? x = dec (dec (dec 0))+x ? y = dec 0++0 ? x = x + dec x+x ? y = dec x++0 ? x = x + dec x+x ? y = dec y++0 ? x = x + dec x+x ? y = dec 0++0 ? x = x + dec 0+x ? y = dec x++0 ? x = x + dec 0+x ? y = dec y++0 ? x = x + dec 0+x ? y = dec 0++0 ? x = dec (dec x) + x+x ? y = x++0 ? x = dec (dec x) + x+x ? y = y++0 ? x = dec (dec x) + x+x ? y = 0++0 ? x = dec (dec 0) + x+x ? y = x++0 ? x = dec (dec 0) + x+x ? y = y++0 ? x = dec (dec 0) + x+x ? y = 0++0 ? x = dec (dec (dec (dec x)))+x ? y = x++0 ? x = dec (dec (dec (dec x)))+x ? y = y++0 ? x = dec (dec (dec (dec x)))+x ? y = 0++0 ? x = dec (dec (dec (dec 0)))+x ? y = x++0 ? x = dec (dec (dec (dec 0)))+x ? y = y++0 ? x = dec (dec (dec (dec 0)))+x ? y = 0++0 ? x = x + (x + x)+x ? y = x++0 ? x = x + (x + x)+x ? y = y++0 ? x = x + (x + x)+x ? y = 0++0 ? x = x + dec (dec x)+x ? y = x++0 ? x = x + dec (dec x)+x ? y = y++0 ? x = x + dec (dec x)+x ? y = 0++0 ? x = x + dec (dec 0)+x ? y = x++0 ? x = x + dec (dec 0)+x ? y = y++0 ? x = x + dec (dec 0)+x ? y = 0++0 ? x = dec x + dec x+x ? y = x++0 ? x = dec x + dec x+x ? y = y++0 ? x = dec x + dec x+x ? y = 0++0 ? x = dec x + dec 0+x ? y = x++0 ? x = dec x + dec 0+x ? y = y++0 ? x = dec x + dec 0+x ? y = 0++0 ? x = dec 0 + dec x+x ? y = x++0 ? x = dec 0 + dec x+x ? y = y++0 ? x = dec 0 + dec x+x ? y = 0++0 ? x = dec 0 + dec 0+x ? y = x++0 ? x = dec 0 + dec 0+x ? y = y++0 ? x = dec 0 + dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec x + x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec x + y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec y + x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec y + y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec 0 + x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec 0 + y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec (dec x))++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec (dec y))++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec (dec 0))++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = x + dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = x + dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = x + dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = y + dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = y + dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = x+x ? y = y + dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec x + x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec x + y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec y + x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec y + y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec 0 + x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec 0 + y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec (dec x))++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec (dec y))++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec (dec 0))++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = x + dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = x + dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = x + dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = y + dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = y + dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = 0+x ? y = y + dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = x + x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = x + y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = y + x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = y + y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = x + x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = x + y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = y + x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = y + y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = x+x ? 0 = x + x+x ? y = dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = x + x+x ? y = dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = x + x+x ? y = dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = dec x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = dec y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = dec 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x + x+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x + x+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec x + x+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0 + x+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0 + x+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec 0 + x+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec (dec x))+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec (dec x))+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec (dec x))+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec (dec 0))+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec (dec 0))+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = dec (dec (dec 0))+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x + dec x+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = x + dec x+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = x + dec x+x ? y = 0++0 ? 0 = 0+0 ? x = x+x ? 0 = x + dec 0+x ? y = x++0 ? 0 = 0+0 ? x = x+x ? 0 = x + dec 0+x ? y = y++0 ? 0 = 0+0 ? x = x+x ? 0 = x + dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec x + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec x + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec y + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec y + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec 0 + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec 0 + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec (dec x))++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec (dec y))++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec (dec 0))++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = x + dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = x + dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = x + dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = y + dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = y + dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x+x ? y = y + dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec x + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec x + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec y + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec y + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec 0 + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec 0 + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec (dec x))++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec (dec y))++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec (dec 0))++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = x + dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = x + dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = x + dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = y + dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = y + dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = 0+x ? y = y + dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = x + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = x + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = y + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = y + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = x + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = x + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = y + x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = y + y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + x+x ? y = dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + x+x ? y = dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + x+x ? y = dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = dec x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = dec y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = dec 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x + x+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x + x+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec x + x+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0 + x+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0 + x+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec 0 + x+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec (dec x))+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec (dec x))+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec (dec x))+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec (dec 0))+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec (dec 0))+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = dec (dec (dec 0))+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + dec x+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + dec x+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + dec x+x ? y = 0++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + dec 0+x ? y = x++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + dec 0+x ? y = y++0 ? 0 = 0+0 ? x = 0+x ? 0 = x + dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = x + x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = x + y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = y + x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = y + y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = x + x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = x + y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = y + x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = y + y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec x+x ? y = dec x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec x+x ? y = dec y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec x+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = dec x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = dec y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x + x+x ? y = x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x + x+x ? y = y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = x + x+x ? y = 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec (dec x)+x ? y = x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec (dec x)+x ? y = y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec (dec x)+x ? y = 0++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec (dec 0)+x ? y = x++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec (dec 0)+x ? y = y++0 ? 0 = 0+0 ? x = dec x+x ? 0 = dec (dec 0)+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = x + x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = x + y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = y + x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = y + y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = x + x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = x + y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = y + x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = y + y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec (dec x)++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec (dec y)++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec (dec 0)++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = dec x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = dec y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = dec x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = dec y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x + x+x ? y = x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x + x+x ? y = y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = x + x+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec (dec x)+x ? y = x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec (dec x)+x ? y = y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec (dec x)+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec (dec 0)+x ? y = x++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec (dec 0)+x ? y = y++0 ? 0 = 0+0 ? x = dec 0+x ? 0 = dec (dec 0)+x ? y = 0++0 ? 0 = 0+0 ? x = x + x+x ? 0 = x+x ? y = dec x++0 ? 0 = 0+0 ? x = x + x+x ? 0 = x+x ? y = dec y++0 ? 0 = 0+0 ? x = x + x+x ? 0 = x+x ? y = dec 0++0 ? 0 = 0+0 ? x = x + x+x ? 0 = 0+x ? y = dec x++0 ? 0 = 0+0 ? x = x + x+x ? 0 = 0+x ? y = dec y++0 ? 0 = 0+0 ? x = x + x+x ? 0 = 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = x + x+x ? 0 = dec x+x ? y = x++0 ? 0 = 0+0 ? x = x + x+x ? 0 = dec x+x ? y = y++0 ? 0 = 0+0 ? x = x + x+x ? 0 = dec x+x ? y = 0++0 ? 0 = 0+0 ? x = x + x+x ? 0 = dec 0+x ? y = x++0 ? 0 = 0+0 ? x = x + x+x ? 0 = dec 0+x ? y = y++0 ? 0 = 0+0 ? x = x + x+x ? 0 = dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = dec x++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = dec y++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = dec x++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = dec y++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = dec x+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = dec x+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = dec x+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = dec 0+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = dec 0+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec x)+x ? 0 = dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = dec x++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = dec y++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = dec x++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = dec y++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = dec 0++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = dec x+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = dec x+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = dec x+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = dec 0+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = dec 0+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec 0)+x ? 0 = dec 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec x + x+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec x + x+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec x + x+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec x + x+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec x + x+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec x + x+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0 + x+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec 0 + x+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec 0 + x+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec 0 + x+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec 0 + x+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec 0 + x+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec (dec x))+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec (dec x))+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec (dec x))+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec (dec x))+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec (dec x))+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec (dec x))+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec (dec 0))+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec (dec 0))+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec (dec 0))+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = dec (dec (dec 0))+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = dec (dec (dec 0))+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = dec (dec (dec 0))+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = x + dec x+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = x + dec x+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = x + dec x+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = x + dec x+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = x + dec x+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = x + dec x+x ? 0 = 0+x ? y = 0++0 ? 0 = 0+0 ? x = x + dec 0+x ? 0 = x+x ? y = x++0 ? 0 = 0+0 ? x = x + dec 0+x ? 0 = x+x ? y = y++0 ? 0 = 0+0 ? x = x + dec 0+x ? 0 = x+x ? y = 0++0 ? 0 = 0+0 ? x = x + dec 0+x ? 0 = 0+x ? y = x++0 ? 0 = 0+0 ? x = x + dec 0+x ? 0 = 0+x ? y = y++0 ? 0 = 0+0 ? x = x + dec 0+x ? 0 = 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = x + x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = x + y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = y + x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = y + y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec x)++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec y)++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x+x ? y = dec (dec 0)++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = x + x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = x + y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = y + x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = y + y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec x)++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec y)++0 ? 0 = dec 0+0 ? x = x+x ? 0 = 0+x ? y = dec (dec 0)++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec x+x ? y = dec x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec x+x ? y = dec y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec x+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec 0+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x + x+x ? y = x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x + x+x ? y = y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = x + x+x ? y = 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec (dec x)+x ? y = 0++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = x++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = y++0 ? 0 = dec 0+0 ? x = x+x ? 0 = dec (dec 0)+x ? y = 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = x + x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = x + y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = y + x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = y + y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec x)++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec y)++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x+x ? y = dec (dec 0)++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = x + x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = x + y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = y + x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = y + y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec x)++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec y)++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = 0+x ? y = dec (dec 0)++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec x+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec 0+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x + x+x ? y = x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x + x+x ? y = y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = x + x+x ? y = 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec (dec x)+x ? y = 0++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = x++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = y++0 ? 0 = dec 0+0 ? x = 0+x ? 0 = dec (dec 0)+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = x+x ? y = dec x++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = x+x ? y = dec y++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = x+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec x++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec y++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = 0+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = dec x+x ? y = x++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = dec x+x ? y = y++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = dec x+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = x++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = y++0 ? 0 = dec 0+0 ? x = dec x+x ? 0 = dec 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec x++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec y++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = x+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec x++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec y++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = 0+x ? y = dec 0++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = x++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = y++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = dec x+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = x++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = y++0 ? 0 = dec 0+0 ? x = dec 0+x ? 0 = dec 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = x + x+x ? 0 = x+x ? y = x++0 ? 0 = dec 0+0 ? x = x + x+x ? 0 = x+x ? y = y++0 ? 0 = dec 0+0 ? x = x + x+x ? 0 = x+x ? y = 0++0 ? 0 = dec 0+0 ? x = x + x+x ? 0 = 0+x ? y = x++0 ? 0 = dec 0+0 ? x = x + x+x ? 0 = 0+x ? y = y++0 ? 0 = dec 0+0 ? x = x + x+x ? 0 = 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = x++0 ? 0 = dec 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = y++0 ? 0 = dec 0+0 ? x = dec (dec x)+x ? 0 = x+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = x++0 ? 0 = dec 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = y++0 ? 0 = dec 0+0 ? x = dec (dec x)+x ? 0 = 0+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = x++0 ? 0 = dec 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = y++0 ? 0 = dec 0+0 ? x = dec (dec 0)+x ? 0 = x+x ? y = 0++0 ? 0 = dec 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = x++0 ? 0 = dec 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = y++0 ? 0 = dec 0+0 ? x = dec (dec 0)+x ? 0 = 0+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = x+x ? y = dec x++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = x+x ? y = dec y++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = x+x ? y = dec 0++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = 0+x ? y = dec x++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = 0+x ? y = dec y++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = 0+x ? y = dec 0++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = dec x+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = dec x+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = dec x+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = dec 0+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = dec 0+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = x+x ? 0 = dec 0+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = x+x ? y = dec x++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = x+x ? y = dec y++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = x+x ? y = dec 0++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = 0+x ? y = dec x++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = 0+x ? y = dec y++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = 0+x ? y = dec 0++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = dec x+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = dec x+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = dec x+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = dec 0+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = dec 0+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = 0+x ? 0 = dec 0+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = dec x+x ? 0 = x+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = dec x+x ? 0 = x+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = dec x+x ? 0 = x+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = dec x+x ? 0 = 0+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = dec x+x ? 0 = 0+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = dec x+x ? 0 = 0+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = dec 0+x ? 0 = x+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = dec 0+x ? 0 = x+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = dec 0+x ? 0 = x+x ? y = 0++0 ? 0 = dec (dec 0)+0 ? x = dec 0+x ? 0 = 0+x ? y = x++0 ? 0 = dec (dec 0)+0 ? x = dec 0+x ? 0 = 0+x ? y = y++0 ? 0 = dec (dec 0)+0 ? x = dec 0+x ? 0 = 0+x ? y = 0++0 ? 0 = dec (dec (dec 0))+0 ? x = x+x ? 0 = x+x ? y = x++0 ? 0 = dec (dec (dec 0))+0 ? x = x+x ? 0 = x+x ? y = y++0 ? 0 = dec (dec (dec 0))+0 ? x = x+x ? 0 = x+x ? y = 0++0 ? 0 = dec (dec (dec 0))+0 ? x = x+x ? 0 = 0+x ? y = x++0 ? 0 = dec (dec (dec 0))+0 ? x = x+x ? 0 = 0+x ? y = y++0 ? 0 = dec (dec (dec 0))+0 ? x = x+x ? 0 = 0+x ? y = 0++0 ? 0 = dec (dec (dec 0))+0 ? x = 0+x ? 0 = x+x ? y = x++0 ? 0 = dec (dec (dec 0))+0 ? x = 0+x ? 0 = x+x ? y = y++0 ? 0 = dec (dec (dec 0))+0 ? x = 0+x ? 0 = x+x ? y = 0++0 ? 0 = dec (dec (dec 0))+0 ? x = 0+x ? 0 = 0+x ? y = x++0 ? 0 = dec (dec (dec 0))+0 ? x = 0+x ? 0 = 0+x ? y = y++0 ? 0 = dec (dec (dec 0))+0 ? x = 0+x ? 0 = 0+x ? y = 0+++Candidates for: goo :: [Int] -> [Int]+ pruning with 4/4 rules+ [2,0,1,0,1,0,1,0,1] direct candidates, 0 duplicates+ [2,1,2,3,4,7,10,17,26] pattern candidates, 0 duplicates++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) = 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,8,0,16,0,32] direct candidates, 0 duplicates+ [3,8,15,66,152,362,1400,2084,11820] pattern candidates, 0 duplicates++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++xs ?? ys = xs ++ (xs ++ xs)++xs ?? ys = xs ++ (xs ++ ys)++xs ?? ys = xs ++ (ys ++ xs)++xs ?? ys = xs ++ (ys ++ ys)++xs ?? ys = ys ++ (xs ++ xs)++xs ?? ys = ys ++ (xs ++ ys)++xs ?? ys = ys ++ (ys ++ xs)++xs ?? ys = 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) = ys ?? xs++xs ?? [] = xs+xs ?? (x:ys) = ys ?? ys++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) = ys ?? xs++xs ?? [] = []+xs ?? (x:ys) = ys ?? ys++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 = ys ?? xs++[] ?? xs = xs+(x:xs) ?? ys = ys ?? ys++[] ?? 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 = ys ?? xs++[] ?? xs = []+(x:xs) ?? ys = ys ?? ys++[] ?? 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 = []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ?? xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ?? ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ?? []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ?? xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ?? ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y: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 ?? xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ?? []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = [] ?? xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ?? xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ?? []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = [] ?? xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ?? xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ?? []+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = [] ?? xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ?? xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ?? ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ?? []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ?? xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ?? ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ?? []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [] ?? xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [] ?? ys++[] ?? [] = []+[] ?? (x:xs) = xs ?? xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs ?? []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = [] ?? xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs ?? xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs ?? []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = [] ?? xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs ?? xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs ?? []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = [] ?? xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs ?? xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs ?? []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = [] ?? xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs ?? xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs ?? []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = [] ?? xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs ?? xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs ?? []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = [] ?? xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ?? xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ?? ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ?? []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ?? xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ?? ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = 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 ?? xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ?? []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = [] ?? xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ?? xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ?? []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = [] ?? xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ?? xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ?? []+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = [] ?? xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ?? xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ?? ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ?? []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ?? xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ?? ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ?? []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [] ?? xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [] ?? ys++xs ?? ys = xs ++ (xs ++ xs)++xs ?? ys = xs ++ (xs ++ ys)++xs ?? ys = xs ++ (ys ++ xs)++xs ?? ys = xs ++ (ys ++ ys)++xs ?? ys = ys ++ (xs ++ xs)++xs ?? ys = ys ++ (xs ++ ys)++xs ?? ys = ys ++ (ys ++ xs)++xs ?? ys = ys ++ (ys ++ ys)++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = x:xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = x:ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = [x]++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = y:xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = y:ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = [y]++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ++ xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ++ ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ++ xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ++ ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = x:xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = x:ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [x]++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = y:xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = y:ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [y]++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ++ xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ++ ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ++ xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ++ ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = x:xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = x:xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = x:xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = [x]+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = [x]+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = [x]+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ++ xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ++ xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs+(x:xs) ?? [] = xs ++ xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = x:xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = x:ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = [x]++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = y:xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = y:ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = [y]++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ++ xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs ++ ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ++ xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys ++ ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = x:xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = x:ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [x]++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = y:xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = y:ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = [y]++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ++ xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs ++ ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ++ xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys ++ ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = x:xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = x:xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = x:xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = [x]+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = [x]+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = [x]+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ++ xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ++ xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = []+(x:xs) ?? [] = xs ++ xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = x:xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = x:xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = x:xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = x:xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = x:xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = x:xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = [x]+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = [x]+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = [x]+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = [x]+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = [x]+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = [x]+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs ++ xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs ++ xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs ++ xs+(x:xs) ?? [] = xs+(x:xs) ?? (y:ys) = []++[] ?? [] = []+[] ?? (x:xs) = xs ++ xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = xs++[] ?? [] = []+[] ?? (x:xs) = xs ++ xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = ys++[] ?? [] = []+[] ?? (x:xs) = xs ++ xs+(x:xs) ?? [] = []+(x:xs) ?? (y:ys) = []++xs ?? [] = xs+xs ?? (x:ys) = (x:xs) ?? xs++xs ?? [] = xs+xs ?? (x:ys) = (x:xs) ?? ys++xs ?? [] = xs+xs ?? (x:ys) = (x:xs) ?? []++xs ?? [] = xs+xs ?? (x:ys) = (x:ys) ?? xs++xs ?? [] = xs+xs ?? (x:ys) = (x:ys) ?? ys++xs ?? [] = xs+xs ?? (x:ys) = (x: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+xs ?? (x:ys) = (xs ++ xs) ?? ys++xs ?? [] = xs+xs ?? (x:ys) = (xs ++ xs) ?? []++xs ?? [] = xs+xs ?? (x:ys) = (xs ++ ys) ?? xs++xs ?? [] = xs+xs ?? (x:ys) = (xs ++ ys) ?? ys++xs ?? [] = xs+xs ?? (x:ys) = (xs ++ ys) ?? []++xs ?? [] = xs+xs ?? (x:ys) = (ys ++ xs) ?? xs++xs ?? [] = xs+xs ?? (x:ys) = (ys ++ xs) ?? ys++xs ?? [] = xs+xs ?? (x:ys) = (ys ++ xs) ?? []++xs ?? [] = xs+xs ?? (x:ys) = (ys ++ ys) ?? xs++xs ?? [] = xs+xs ?? (x:ys) = (ys ++ ys) ?? ys++xs ?? [] = xs+xs ?? (x:ys) = (ys ++ ys) ?? []++xs ?? [] = []+xs ?? (x:ys) = (x:xs) ?? xs++xs ?? [] = []+xs ?? (x:ys) = (x:xs) ?? ys++xs ?? [] = []+xs ?? (x:ys) = (x:xs) ?? []++xs ?? [] = []+xs ?? (x:ys) = (x:ys) ?? xs++xs ?? [] = []+xs ?? (x:ys) = (x:ys) ?? ys++xs ?? [] = []+xs ?? (x:ys) = (x: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 ?? [] = []+xs ?? (x:ys) = (xs ++ xs) ?? ys++xs ?? [] = []+xs ?? (x:ys) = (xs ++ xs) ?? []++xs ?? [] = []+xs ?? (x:ys) = (xs ++ ys) ?? xs++xs ?? [] = []+xs ?? (x:ys) = (xs ++ ys) ?? ys++xs ?? [] = []+xs ?? (x:ys) = (xs ++ ys) ?? []++xs ?? [] = []+xs ?? (x:ys) = (ys ++ xs) ?? xs++xs ?? [] = []+xs ?? (x:ys) = (ys ++ xs) ?? ys++xs ?? [] = []+xs ?? (x:ys) = (ys ++ xs) ?? []++xs ?? [] = []+xs ?? (x:ys) = (ys ++ ys) ?? xs++xs ?? [] = []+xs ?? (x:ys) = (ys ++ ys) ?? ys++xs ?? [] = []+xs ?? (x:ys) = (ys ++ ys) ?? []++[] ?? xs = xs+(x:xs) ?? ys = xs ?? (x:xs)++[] ?? xs = xs+(x:xs) ?? ys = xs ?? (x:ys)++[] ?? xs = xs+(x:xs) ?? ys = xs ?? [x]++[] ?? xs = xs+(x:xs) ?? ys = xs ?? (xs ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = xs ?? (xs ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = xs ?? (ys ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = xs ?? (ys ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = ys ?? (x:xs)++[] ?? xs = xs+(x:xs) ?? ys = ys ?? (x:ys)++[] ?? xs = xs+(x:xs) ?? ys = ys ?? [x]++[] ?? xs = xs+(x:xs) ?? ys = ys ?? (xs ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = ys ?? (xs ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = ys ?? (ys ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = ys ?? (ys ++ 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 = xs ?? (x:xs)++[] ?? xs = []+(x:xs) ?? ys = xs ?? (x:ys)++[] ?? xs = []+(x:xs) ?? ys = xs ?? [x]++[] ?? xs = []+(x:xs) ?? ys = xs ?? (xs ++ xs)++[] ?? xs = []+(x:xs) ?? ys = xs ?? (xs ++ ys)++[] ?? xs = []+(x:xs) ?? ys = xs ?? (ys ++ xs)++[] ?? xs = []+(x:xs) ?? ys = xs ?? (ys ++ ys)++[] ?? xs = []+(x:xs) ?? ys = ys ?? (x:xs)++[] ?? xs = []+(x:xs) ?? ys = ys ?? (x:ys)++[] ?? xs = []+(x:xs) ?? ys = ys ?? [x]++[] ?? xs = []+(x:xs) ?? ys = ys ?? (xs ++ xs)++[] ?? xs = []+(x:xs) ?? ys = ys ?? (xs ++ ys)++[] ?? xs = []+(x:xs) ?? ys = ys ?? (ys ++ xs)++[] ?? xs = []+(x:xs) ?? ys = 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:ys) = x:xs ?? xs++xs ?? [] = xs+xs ?? (x:ys) = x:xs ?? ys++xs ?? [] = xs+xs ?? (x:ys) = x:xs ?? []++xs ?? [] = xs+xs ?? (x:ys) = x:ys ?? xs++xs ?? [] = xs+xs ?? (x:ys) = x:ys ?? ys++xs ?? [] = xs+xs ?? (x:ys) = x:ys ?? []++xs ?? [] = xs+xs ?? (x:ys) = [x,] ?? xs++xs ?? [] = xs+xs ?? (x:ys) = [x,] ?? ys++xs ?? [] = xs+xs ?? (x:ys) = xs ++ xs ?? xs++xs ?? [] = xs+xs ?? (x:ys) = xs ++ xs ?? ys++xs ?? [] = xs+xs ?? (x:ys) = xs ++ xs ?? []++xs ?? [] = xs+xs ?? (x:ys) = xs ++ ys ?? xs++xs ?? [] = xs+xs ?? (x:ys) = xs ++ ys ?? ys++xs ?? [] = xs+xs ?? (x:ys) = xs ++ ys ?? []++xs ?? [] = xs+xs ?? (x:ys) = xs ++ [] ?? xs++xs ?? [] = xs+xs ?? (x:ys) = xs ++ [] ?? ys++xs ?? [] = xs+xs ?? (x:ys) = ys ++ xs ?? xs++xs ?? [] = xs+xs ?? (x:ys) = ys ++ xs ?? ys++xs ?? [] = xs+xs ?? (x:ys) = ys ++ xs ?? []++xs ?? [] = xs+xs ?? (x:ys) = ys ++ ys ?? xs++xs ?? [] = xs+xs ?? (x:ys) = ys ++ ys ?? ys++xs ?? [] = xs+xs ?? (x:ys) = ys ++ ys ?? []++xs ?? [] = xs+xs ?? (x:ys) = ys ++ [] ?? xs++xs ?? [] = xs+xs ?? (x:ys) = ys ++ [] ?? ys++xs ?? [] = xs+xs ?? (x:ys) = xs ?? xs ++ xs++xs ?? [] = xs+xs ?? (x:ys) = xs ?? ys ++ xs++xs ?? [] = xs+xs ?? (x:ys) = xs ?? [] ++ xs++xs ?? [] = xs+xs ?? (x:ys) = ys ?? xs ++ xs++xs ?? [] = xs+xs ?? (x:ys) = ys ?? ys ++ xs++xs ?? [] = xs+xs ?? (x:ys) = ys ?? [] ++ xs++xs ?? [] = xs+xs ?? (x:ys) = [] ?? xs ++ xs++xs ?? [] = xs+xs ?? (x:ys) = [] ?? ys ++ xs++xs ?? [] = xs+xs ?? (x:ys) = xs ?? xs ++ ys++xs ?? [] = xs+xs ?? (x:ys) = xs ?? ys ++ ys++xs ?? [] = xs+xs ?? (x:ys) = xs ?? [] ++ ys++xs ?? [] = xs+xs ?? (x:ys) = ys ?? xs ++ ys++xs ?? [] = xs+xs ?? (x:ys) = ys ?? ys ++ ys++xs ?? [] = xs+xs ?? (x:ys) = ys ?? [] ++ ys++xs ?? [] = xs+xs ?? (x:ys) = [] ?? xs ++ ys++xs ?? [] = xs+xs ?? (x:ys) = [] ?? ys ++ ys++xs ?? [] = []+xs ?? (x:ys) = x:xs ?? xs++xs ?? [] = []+xs ?? (x:ys) = x:xs ?? ys++xs ?? [] = []+xs ?? (x:ys) = x:xs ?? []++xs ?? [] = []+xs ?? (x:ys) = x:ys ?? xs++xs ?? [] = []+xs ?? (x:ys) = x:ys ?? ys++xs ?? [] = []+xs ?? (x:ys) = x:ys ?? []++xs ?? [] = []+xs ?? (x:ys) = [x,] ?? xs++xs ?? [] = []+xs ?? (x:ys) = [x,] ?? ys++xs ?? [] = []+xs ?? (x:ys) = xs ++ xs ?? xs++xs ?? [] = []+xs ?? (x:ys) = xs ++ xs ?? ys++xs ?? [] = []+xs ?? (x:ys) = xs ++ xs ?? []++xs ?? [] = []+xs ?? (x:ys) = xs ++ ys ?? xs++xs ?? [] = []+xs ?? (x:ys) = xs ++ ys ?? ys++xs ?? [] = []+xs ?? (x:ys) = xs ++ ys ?? []++xs ?? [] = []+xs ?? (x:ys) = xs ++ [] ?? xs++xs ?? [] = []+xs ?? (x:ys) = xs ++ [] ?? ys++xs ?? [] = []+xs ?? (x:ys) = ys ++ xs ?? xs++xs ?? [] = []+xs ?? (x:ys) = ys ++ xs ?? ys++xs ?? [] = []+xs ?? (x:ys) = ys ++ xs ?? []++xs ?? [] = []+xs ?? (x:ys) = ys ++ ys ?? xs++xs ?? [] = []+xs ?? (x:ys) = ys ++ ys ?? ys++xs ?? [] = []+xs ?? (x:ys) = ys ++ ys ?? []++xs ?? [] = []+xs ?? (x:ys) = ys ++ [] ?? xs++xs ?? [] = []+xs ?? (x:ys) = ys ++ [] ?? ys++xs ?? [] = []+xs ?? (x:ys) = xs ?? xs ++ xs++xs ?? [] = []+xs ?? (x:ys) = xs ?? ys ++ 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) = [] ?? xs ++ xs++xs ?? [] = []+xs ?? (x:ys) = [] ?? ys ++ xs++xs ?? [] = []+xs ?? (x:ys) = xs ?? xs ++ ys++xs ?? [] = []+xs ?? (x:ys) = xs ?? ys ++ ys++xs ?? [] = []+xs ?? (x:ys) = xs ?? [] ++ ys++xs ?? [] = []+xs ?? (x:ys) = ys ?? xs ++ ys++xs ?? [] = []+xs ?? (x:ys) = ys ?? ys ++ ys++xs ?? [] = []+xs ?? (x:ys) = ys ?? [] ++ ys++xs ?? [] = []+xs ?? (x:ys) = [] ?? xs ++ ys++xs ?? [] = []+xs ?? (x:ys) = [] ?? ys ++ ys++xs ?? [] = xs ++ xs+xs ?? (x:ys) = xs ?? xs++xs ?? [] = xs ++ xs+xs ?? (x:ys) = xs ?? ys++xs ?? [] = xs ++ xs+xs ?? (x:ys) = xs ?? []++xs ?? [] = xs ++ xs+xs ?? (x:ys) = ys ?? xs++xs ?? [] = xs ++ xs+xs ?? (x:ys) = ys ?? ys++xs ?? [] = xs ++ xs+xs ?? (x:ys) = ys ?? []++xs ?? [] = xs ++ xs+xs ?? (x:ys) = [] ?? xs++xs ?? [] = xs ++ xs+xs ?? (x:ys) = [] ?? ys++[] ?? xs = xs+(x:xs) ?? ys = x:xs ?? xs++[] ?? xs = xs+(x:xs) ?? ys = x:xs ?? ys++[] ?? xs = xs+(x:xs) ?? ys = x:xs ?? []++[] ?? xs = xs+(x:xs) ?? ys = x:ys ?? xs++[] ?? xs = xs+(x:xs) ?? ys = x:ys ?? ys++[] ?? xs = xs+(x:xs) ?? ys = x:ys ?? []++[] ?? xs = xs+(x:xs) ?? ys = [x,] ?? xs++[] ?? xs = xs+(x:xs) ?? ys = [x,] ?? ys++[] ?? xs = xs+(x:xs) ?? ys = xs ++ xs ?? xs++[] ?? xs = xs+(x:xs) ?? ys = xs ++ xs ?? ys++[] ?? xs = xs+(x:xs) ?? ys = xs ++ xs ?? []++[] ?? xs = xs+(x:xs) ?? ys = xs ++ ys ?? xs++[] ?? xs = xs+(x:xs) ?? ys = xs ++ ys ?? ys++[] ?? xs = xs+(x:xs) ?? ys = xs ++ ys ?? []++[] ?? xs = xs+(x:xs) ?? ys = xs ++ [] ?? xs++[] ?? xs = xs+(x:xs) ?? ys = xs ++ [] ?? ys++[] ?? xs = xs+(x:xs) ?? ys = ys ++ xs ?? xs++[] ?? xs = xs+(x:xs) ?? ys = ys ++ xs ?? ys++[] ?? xs = xs+(x:xs) ?? ys = ys ++ xs ?? []++[] ?? xs = xs+(x:xs) ?? ys = ys ++ ys ?? xs++[] ?? xs = xs+(x:xs) ?? ys = ys ++ ys ?? ys++[] ?? xs = xs+(x:xs) ?? ys = ys ++ ys ?? []++[] ?? xs = xs+(x:xs) ?? ys = ys ++ [] ?? xs++[] ?? xs = xs+(x:xs) ?? ys = ys ++ [] ?? ys++[] ?? xs = xs+(x:xs) ?? ys = xs ?? xs ++ xs++[] ?? xs = xs+(x:xs) ?? ys = xs ?? ys ++ xs++[] ?? xs = xs+(x:xs) ?? ys = xs ?? [] ++ xs++[] ?? xs = xs+(x:xs) ?? ys = ys ?? xs ++ xs++[] ?? xs = xs+(x:xs) ?? ys = ys ?? ys ++ xs++[] ?? xs = xs+(x:xs) ?? ys = ys ?? [] ++ xs++[] ?? xs = xs+(x:xs) ?? ys = [] ?? xs ++ xs++[] ?? xs = xs+(x:xs) ?? ys = [] ?? ys ++ xs++[] ?? xs = xs+(x:xs) ?? ys = xs ?? xs ++ ys++[] ?? xs = xs+(x:xs) ?? ys = xs ?? ys ++ ys++[] ?? xs = xs+(x:xs) ?? ys = xs ?? [] ++ ys++[] ?? xs = xs+(x:xs) ?? ys = ys ?? xs ++ ys++[] ?? xs = xs+(x:xs) ?? ys = ys ?? ys ++ ys++[] ?? xs = xs+(x:xs) ?? ys = ys ?? [] ++ ys++[] ?? xs = xs+(x:xs) ?? ys = [] ?? xs ++ ys++[] ?? xs = xs+(x:xs) ?? ys = [] ?? ys ++ ys++[] ?? xs = []+(x:xs) ?? ys = x:xs ?? xs++[] ?? xs = []+(x:xs) ?? ys = x:xs ?? ys++[] ?? xs = []+(x:xs) ?? ys = x:xs ?? []++[] ?? xs = []+(x:xs) ?? ys = x:ys ?? xs++[] ?? xs = []+(x:xs) ?? ys = x:ys ?? ys++[] ?? xs = []+(x:xs) ?? ys = x:ys ?? []++[] ?? xs = []+(x:xs) ?? ys = [x,] ?? xs++[] ?? xs = []+(x:xs) ?? ys = [x,] ?? ys++[] ?? xs = []+(x:xs) ?? ys = xs ++ xs ?? xs++[] ?? xs = []+(x:xs) ?? ys = xs ++ xs ?? ys++[] ?? xs = []+(x:xs) ?? ys = xs ++ xs ?? []++[] ?? xs = []+(x:xs) ?? ys = xs ++ ys ?? xs++[] ?? xs = []+(x:xs) ?? ys = xs ++ ys ?? ys++[] ?? xs = []+(x:xs) ?? ys = xs ++ ys ?? []++[] ?? xs = []+(x:xs) ?? ys = xs ++ [] ?? xs++[] ?? xs = []+(x:xs) ?? ys = xs ++ [] ?? ys++[] ?? xs = []+(x:xs) ?? ys = ys ++ xs ?? xs++[] ?? xs = []+(x:xs) ?? ys = ys ++ xs ?? ys++[] ?? xs = []+(x:xs) ?? ys = ys ++ xs ?? []++[] ?? xs = []+(x:xs) ?? ys = ys ++ ys ?? xs++[] ?? xs = []+(x:xs) ?? ys = ys ++ ys ?? ys++[] ?? xs = []+(x:xs) ?? ys = ys ++ ys ?? []++[] ?? xs = []+(x:xs) ?? ys = ys ++ [] ?? xs++[] ?? xs = []+(x:xs) ?? ys = ys ++ [] ?? ys++[] ?? xs = []+(x:xs) ?? ys = xs ?? xs ++ xs++[] ?? xs = []+(x:xs) ?? ys = xs ?? ys ++ 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 = [] ?? xs ++ xs++[] ?? xs = []+(x:xs) ?? ys = [] ?? ys ++ xs++[] ?? xs = []+(x:xs) ?? ys = xs ?? xs ++ ys++[] ?? xs = []+(x:xs) ?? ys = xs ?? ys ++ ys++[] ?? xs = []+(x:xs) ?? ys = xs ?? [] ++ ys++[] ?? xs = []+(x:xs) ?? ys = ys ?? xs ++ ys++[] ?? xs = []+(x:xs) ?? ys = ys ?? ys ++ ys++[] ?? xs = []+(x:xs) ?? ys = ys ?? [] ++ ys++[] ?? xs = []+(x:xs) ?? ys = [] ?? xs ++ ys++[] ?? xs = []+(x:xs) ?? ys = [] ?? ys ++ ys++[] ?? xs = xs ++ xs+(x:xs) ?? ys = xs ?? xs++[] ?? xs = xs ++ xs+(x:xs) ?? ys = xs ?? ys++[] ?? xs = xs ++ xs+(x:xs) ?? ys = xs ?? []++[] ?? xs = xs ++ xs+(x:xs) ?? ys = ys ?? xs++[] ?? xs = xs ++ xs+(x:xs) ?? ys = ys ?? ys++[] ?? xs = xs ++ xs+(x:xs) ?? ys = ys ?? []++[] ?? xs = xs ++ xs+(x:xs) ?? ys = [] ?? xs++[] ?? xs = xs ++ xs+(x:xs) ?? ys = [] ?? ys++xs ?? [] = xs+xs ?? (x:ys) = x:x:xs++xs ?? [] = xs+xs ?? (x:ys) = x:x:ys++xs ?? [] = xs+xs ?? (x:ys) = [x,x]++xs ?? [] = xs+xs ?? (x:ys) = x:(xs ++ xs)++xs ?? [] = xs+xs ?? (x:ys) = x:(xs ++ ys)++xs ?? [] = xs+xs ?? (x:ys) = x:(ys ++ xs)++xs ?? [] = xs+xs ?? (x:ys) = x:(ys ++ ys)++xs ?? [] = xs+xs ?? (x:ys) = xs ++ (x:xs)++xs ?? [] = xs+xs ?? (x:ys) = xs ++ (x:ys)++xs ?? [] = xs+xs ?? (x:ys) = xs ++ [x]++xs ?? [] = xs+xs ?? (x:ys) = xs ++ (xs ++ xs)++xs ?? [] = xs+xs ?? (x:ys) = xs ++ (xs ++ ys)++xs ?? [] = xs+xs ?? (x:ys) = xs ++ (ys ++ xs)++xs ?? [] = xs+xs ?? (x:ys) = xs ++ (ys ++ ys)++xs ?? [] = xs+xs ?? (x:ys) = ys ++ (x:xs)++xs ?? [] = xs+xs ?? (x:ys) = ys ++ (x:ys)++xs ?? [] = xs+xs ?? (x:ys) = ys ++ [x]++xs ?? [] = xs+xs ?? (x:ys) = ys ++ (xs ++ xs)++xs ?? [] = xs+xs ?? (x:ys) = ys ++ (xs ++ ys)++xs ?? [] = xs+xs ?? (x:ys) = ys ++ (ys ++ xs)++xs ?? [] = xs+xs ?? (x:ys) = ys ++ (ys ++ ys)++xs ?? [] = []+xs ?? (x:ys) = x:x:xs++xs ?? [] = []+xs ?? (x:ys) = x:x:ys++xs ?? [] = []+xs ?? (x:ys) = [x,x]++xs ?? [] = []+xs ?? (x:ys) = x:(xs ++ xs)++xs ?? [] = []+xs ?? (x:ys) = x:(xs ++ ys)++xs ?? [] = []+xs ?? (x:ys) = x:(ys ++ xs)++xs ?? [] = []+xs ?? (x:ys) = x:(ys ++ ys)++xs ?? [] = []+xs ?? (x:ys) = xs ++ (x:xs)++xs ?? [] = []+xs ?? (x:ys) = xs ++ (x:ys)++xs ?? [] = []+xs ?? (x:ys) = xs ++ [x]++xs ?? [] = []+xs ?? (x:ys) = xs ++ (xs ++ xs)++xs ?? [] = []+xs ?? (x:ys) = xs ++ (xs ++ ys)++xs ?? [] = []+xs ?? (x:ys) = xs ++ (ys ++ xs)++xs ?? [] = []+xs ?? (x:ys) = xs ++ (ys ++ ys)++xs ?? [] = []+xs ?? (x:ys) = ys ++ (x:xs)++xs ?? [] = []+xs ?? (x:ys) = ys ++ (x:ys)++xs ?? [] = []+xs ?? (x:ys) = ys ++ [x]++xs ?? [] = []+xs ?? (x:ys) = ys ++ (xs ++ xs)++xs ?? [] = []+xs ?? (x:ys) = ys ++ (xs ++ ys)++xs ?? [] = []+xs ?? (x:ys) = ys ++ (ys ++ xs)++xs ?? [] = []+xs ?? (x:ys) = ys ++ (ys ++ ys)++xs ?? [] = xs ++ xs+xs ?? (x:ys) = x:xs++xs ?? [] = xs ++ xs+xs ?? (x:ys) = x:ys++xs ?? [] = xs ++ xs+xs ?? (x:ys) = [x]++xs ?? [] = xs ++ xs+xs ?? (x:ys) = xs ++ ys++xs ?? [] = xs ++ xs+xs ?? (x:ys) = ys ++ xs++xs ?? [] = xs ++ xs+xs ?? (x:ys) = ys ++ ys++xs ?? [] = xs ++ (xs ++ xs)+xs ?? (x:ys) = xs++xs ?? [] = xs ++ (xs ++ xs)+xs ?? (x:ys) = ys++xs ?? [] = xs ++ (xs ++ xs)+xs ?? (x:ys) = []++[] ?? xs = xs+(x:xs) ?? ys = x:x:xs++[] ?? xs = xs+(x:xs) ?? ys = x:x:ys++[] ?? xs = xs+(x:xs) ?? ys = [x,x]++[] ?? xs = xs+(x:xs) ?? ys = x:(xs ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = x:(xs ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = x:(ys ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = x:(ys ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = xs ++ (x:xs)++[] ?? xs = xs+(x:xs) ?? ys = xs ++ (x:ys)++[] ?? xs = xs+(x:xs) ?? ys = xs ++ [x]++[] ?? xs = xs+(x:xs) ?? ys = xs ++ (xs ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = xs ++ (xs ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = xs ++ (ys ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = xs ++ (ys ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = ys ++ (x:xs)++[] ?? xs = xs+(x:xs) ?? ys = ys ++ (x:ys)++[] ?? xs = xs+(x:xs) ?? ys = ys ++ [x]++[] ?? xs = xs+(x:xs) ?? ys = ys ++ (xs ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = ys ++ (xs ++ ys)++[] ?? xs = xs+(x:xs) ?? ys = ys ++ (ys ++ xs)++[] ?? xs = xs+(x:xs) ?? ys = ys ++ (ys ++ ys)++[] ?? xs = []+(x:xs) ?? ys = x:x:xs++[] ?? xs = []+(x:xs) ?? ys = x:x:ys++[] ?? xs = []+(x:xs) ?? ys = [x,x]++[] ?? xs = []+(x:xs) ?? ys = x:(xs ++ xs)++[] ?? xs = []+(x:xs) ?? ys = x:(xs ++ ys)++[] ?? xs = []+(x:xs) ?? ys = x:(ys ++ xs)++[] ?? xs = []+(x:xs) ?? ys = x:(ys ++ ys)++[] ?? xs = []+(x:xs) ?? ys = xs ++ (x:xs)++[] ?? xs = []+(x:xs) ?? ys = xs ++ (x:ys)++[] ?? xs = []+(x:xs) ?? ys = xs ++ [x]++[] ?? xs = []+(x:xs) ?? ys = xs ++ (xs ++ xs)++[] ?? xs = []+(x:xs) ?? ys = xs ++ (xs ++ ys)++[] ?? xs = []+(x:xs) ?? ys = xs ++ (ys ++ xs)++[] ?? xs = []+(x:xs) ?? ys = xs ++ (ys ++ ys)++[] ?? xs = []+(x:xs) ?? ys = ys ++ (x:xs)++[] ?? xs = []+(x:xs) ?? ys = ys ++ (x:ys)++[] ?? xs = []+(x:xs) ?? ys = ys ++ [x]++[] ?? xs = []+(x:xs) ?? ys = ys ++ (xs ++ xs)++[] ?? xs = []+(x:xs) ?? ys = ys ++ (xs ++ ys)++[] ?? xs = []+(x:xs) ?? ys = ys ++ (ys ++ xs)++[] ?? xs = []+(x:xs) ?? ys = ys ++ (ys ++ ys)++[] ?? xs = xs ++ xs+(x:xs) ?? ys = x:xs++[] ?? xs = xs ++ xs+(x:xs) ?? ys = x:ys++[] ?? xs = xs ++ xs+(x:xs) ?? ys = [x]++[] ?? xs = xs ++ xs+(x:xs) ?? ys = xs ++ ys++[] ?? xs = xs ++ xs+(x:xs) ?? ys = ys ++ xs++[] ?? xs = xs ++ xs+(x:xs) ?? ys = ys ++ ys++[] ?? xs = xs ++ (xs ++ xs)+(x:xs) ?? ys = xs++[] ?? xs = xs ++ (xs ++ xs)+(x:xs) ?? ys = ys++[] ?? xs = xs ++ (xs ++ xs)+(x:xs) ?? ys = []+++Candidates for: ton :: Bool -> Bool+ pruning with 39/49 rules+ [3,1,0,2,6,14,38,68,140] direct candidates, 0 duplicates+ [3,3,0,0,0,0,0,0,0] pattern candidates, 0 duplicates++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 p++ton p = p || ton p++ton p = p && ton (not p)++ton p = p || ton (not p)++ton p = p && not (ton p)++ton p = not p && ton p++ton p = p || not (ton p)++ton p = not p || ton 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)++ton p = p && (p && ton p)++ton p = p && (ton p && p)++ton p = p && (p || ton p)++ton p = p && (ton p || p)++ton p = not p && not (ton p)++ton p = p || p && ton p++ton p = p || ton p && p++ton p = p || (p || ton p)++ton p = p || (ton p || p)++ton p = not p || not (ton 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,32,128,468,1576,4924] direct candidates, 0 duplicates+ [4,14,30,8,4,48,60,280,592] pattern candidates, 0 duplicates++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 && p &| p++p &| q = p && p &| q++p &| q = p && p &| False++p &| q = p && p &| True++p &| q = p && q &| q++p &| q = p && False &| q++p &| q = p && True &| q++p &| q = q && p &| p++p &| q = q && p &| q++p &| q = q && p &| False++p &| q = q && p &| True++p &| q = q && q &| q++p &| q = q && False &| q++p &| q = q && True &| q++p &| q = p || p &| p++p &| q = p || p &| q++p &| q = p || p &| False++p &| q = p || p &| True++p &| q = p || q &| q++p &| q = p || False &| q++p &| q = p || True &| q++p &| q = q || p &| p++p &| q = q || p &| q++p &| q = q || p &| False++p &| q = q || p &| True++p &| q = q || q &| q++p &| q = q || False &| q++p &| q = q || True &| 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 = 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 p++p &| q = p && p &| not q++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 &| q++p &| q = q && p &| not p++p &| q = q && p &| not q++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 &| q++p &| q = p || p &| not p++p &| q = p || p &| not q++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 &| q++p &| q = q || p &| not p++p &| q = q || p &| not q++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 &| 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 &| q)++p &| q = p && not (False &| q)++p &| q = p && not (True &| 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 &| q)++p &| q = q && not (False &| q)++p &| q = q && not (True &| q)++p &| q = not p && p &| p++p &| q = not p && p &| q++p &| q = not p && p &| False++p &| q = not p && p &| True++p &| q = not p && q &| q++p &| q = not p && False &| q++p &| q = not p && True &| q++p &| q = not q && p &| p++p &| q = not q && p &| q++p &| q = not q && p &| False++p &| q = not q && p &| True++p &| q = not q && q &| q++p &| q = not q && False &| q++p &| q = not q && True &| 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 &| q)++p &| q = p || not (False &| q)++p &| q = p || not (True &| 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 &| q)++p &| q = q || not (False &| q)++p &| q = q || not (True &| q)++p &| q = not p || p &| p++p &| q = not p || p &| q++p &| q = not p || p &| False++p &| q = not p || p &| True++p &| q = not p || q &| q++p &| q = not p || False &| q++p &| q = not p || True &| q++p &| q = not q || p &| p++p &| q = not q || p &| q++p &| q = not q || p &| False++p &| q = not q || p &| True++p &| q = not q || q &| q++p &| q = not q || False &| q++p &| q = not q || True &| q+++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 = (not p || q) && p++p &| q = (not q || p) && q++p &| q = (p || not q) && q++p &| q = (q || not p) && p++p &| q = not p && q || p++p &| q = not q && p || q++p &| q = p && not q || q++p &| q = q && not p || 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 p && (p || q)++p &| q = not p && (q || p)++p &| q = not q && (p && q)++p &| q = not q && (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 p || (p || q)++p &| q = not p || (q || p)++p &| q = not q || p && q++p &| q = not q || q && p++p &| q = not q || (p || q)++p &| q = not q || (q || p) p &| q = (p || q) && not p
bench/gps.hs view
@@ -2,14 +2,31 @@ -- -- Copyright (C) 2021 Rudy Matela -- Distributed under the 3-Clause BSD licence (see the file LICENSE).+{-# LANGUAGE CPP #-} import Conjure import System.Environment (getArgs) import Data.Char (isLetter) -- GPS bench #5 import Data.Char (isSpace) -- GPS bench #7 import Data.Ratio ((%), numerator, denominator) -- GPS bench #10+import Data.List (findIndex) -- GPS bench #12+import Data.Maybe (fromJust) -- GPS bench #12+import Data.List (sort) -- GPS bench #16+import Data.Char (chr,ord) -- GPS bench #24 +-- GPS bench #16:+#if __GLASGOW_HASKELL__ >= 710+import Data.List (isSubsequenceOf)+#else+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+#endif + gps1p :: Int -> Float -> Float gps1p 0 1.0 = 1.0 gps1p 1 0.0 = 1.0@@ -315,6 +332,571 @@ , prim "wallisNext" wallisNext ] ++-- GPS Benchmark #11 -- Lengths Backwards++gps11p :: [String] -> [Int]+gps11p ["a"] = [1]+gps11p ["aa","a"] = [1,2]+gps11p ["a","aa"] = [2,1]+gps11p ["a","aa","aaa"] = [3,2,1]++gps11g :: [String] -> [Int]+gps11g = reverse . map length++gps11g2 :: [String] -> [Int]+gps11g2 [] = []+gps11g2 (s:ss) = gps11g2 ss ++ [length s]++gps11c :: IO ()+gps11c = do+ conjure "gps11" gps11p+ [ prim "reverse" (reverse :: [Int] -> [Int])+ , prim "length" (length :: String -> Int)+ , prim "map" (map :: (String -> Int) -> [String] -> [Int])+ ]++ conjure "gps11" gps11p+ [ pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim "++" ((++) :: [Int] -> [Int] -> [Int])+ , prim "length" (length :: String -> Int)+ ]+++-- GPS Benchmark #12 -- Last index or zero++gps12p :: [Int] -> Int+gps12p [0] = 0+gps12p [0,0] = 1+gps12p [0,1,0] = 2+gps12p [1,0,1] = 1+gps12p [0,1,0,1] = 2+gps12p [1,0,1,0] = 3++gps12g :: [Int] -> Int+gps12g xs = length xs - fromJust (findIndex (0==) (reverse xs)) - 1++gps12c :: IO ()+gps12c = do+ conjureWith args{maxSize = 11} "gps12" gps12p+ [ prim "length" (length :: [Int] -> Int)+ , prim "reverse" (reverse :: [Int] -> [Int])+ , prim "findIndex" (findIndex :: (Int -> Bool) -> [Int] -> Maybe Int)+ , prim "fromJust" (fromJust :: Maybe Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int)+ , prim "==" ((==) :: Int -> Int -> Bool)+ , pr (0 :: Int)+ , pr (1 :: Int)+ ]+++-- GPS Benchmark #13 -- Vector Average --++gps13p :: [Rational] -> Rational+gps13p [0,2] = 1+gps13p [1,2,3] = 2+gps13p [0,0,2,2] = 1++gps13g :: [Rational] -> Rational+gps13g qs = foldr (+) 0 qs / fromIntegral (length qs)++gps13c :: IO ()+gps13c = do+ conjure "gps13" gps13p+ [ prim "0" (0 :: Rational)+ , prim "+" ((+) :: Rational -> Rational -> Rational)+ , prim "/" ((/) :: Rational -> Rational -> Rational)+ , prim "foldr" (foldr :: (Rational -> Rational -> Rational) -> Rational -> [Rational] -> Rational)+ , prim "length" (length :: [Rational] -> Int)+ , prim "fromIntegral" (fromIntegral :: Int -> Rational)+ ]+++-- GPS Benchmark #14 -- Count Odds --++gps14p :: [Int] -> Int+gps14p [0,0] = 0+gps14p [1,3] = 2+gps14p [0,1,2] = 1++gps14g :: [Int] -> Int+gps14g xs = length (filter odd xs)+ where+ odd x = x `mod` 2 /= 0++gps14g2 :: [Int] -> Int+gps14g2 [] = 0+gps14g2 (x:xs) = if x `mod` 2 == 0+ then gps14g2 xs+ else 1 + gps14g2 xs++odd' :: Int -> Bool+odd' 0 = False+odd' 1 = True+odd' 2 = False+odd' 3 = True+odd' 4 = False+odd' 5 = True++gps14c :: IO ()+gps14c = do+ conjure "odd" odd'+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , pr (2 :: Int)+ , prim "`mod`" (mod :: Int -> Int -> Int)+ , prim "/=" ((/=) :: Int -> Int -> Bool)+ ]++ conjure "gps14" gps14p+ [ prim "odd" (odd :: Int -> Bool)+ , prim "filter" (filter :: (Int -> Bool) -> [Int] -> [Int])+ , prim "length" (length :: [Int] -> Int)+ ]++ -- hah! I was expecting Conjure to use an if like above, but it was smarter:+ -- gps14 [] = 0+ -- gps14 (x:xs) = x `mod` 2 + gps14 xs+ conjureWith args{maxSize=13} "gps14" gps14p+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , pr (2 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "`mod`" (mod :: Int -> Int -> Int)+ , prim "==" ((==) :: Int -> Int -> Bool)+ , prif (undefined :: Int)+ ]+++-- GPS Benchmark #15 -- Mirror Image --++gps15p :: [Int] -> [Int] -> Bool+gps15p [0] [0] = True+gps15p [0,1] [1,0] = True+gps15p [0,1] [0,1] = False+gps15p [0,0,1] [1,0,0] = True+gps15p [0,0,1] [0,0,1] = False++gps15g :: [Int] -> [Int] -> Bool+gps15g xs ys = reverse xs == ys++gps15c :: IO ()+gps15c = do+ conjure "gps15" gps15p+ [ prim "==" ((==) :: [Int] -> [Int] -> Bool)+ , prim "reverse" (reverse :: [Int] -> [Int])+ ]+++-- GPS Benchmark #16 -- Super Anagrams --++gps16p :: String -> String -> Bool+gps16p "a" "aa" = True+gps16p "aa" "a" = False+gps16p "ab" "ba" = True+gps16p "ba" "ab" = True+gps16p "ab" "c" = False+gps16p "ab" "aba" = True++gps16g :: String -> String -> Bool+gps16g cs ds = sort cs `isSubsequenceOf` sort ds++gps16c :: IO ()+gps16c = do+ conjure "gps16" gps16p+ [ prim "`isSubsequenceOf`" (isSubsequenceOf :: String -> String -> Bool)+ , prim "sort" (sort :: String -> String)+ ]+++-- GPS Benchmark #17 -- Sum of Squares --+-- Given integer _n_, return the sum of squaring each integer in 1 to n+gps17p :: Int -> Int+gps17p 1 = 1+gps17p 2 = 5+gps17p 3 = 14+gps17p 4 = 30++gps17g :: Int -> Int+gps17g n = n * n + gps17g (n - 1)++gps17c :: IO ()+gps17c = conjure "gps17" gps17p+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "*" ((*) :: Int -> Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int)+ ]+++-- GPS Benchmark #18 -- Vectors Summed --+-- zip with sum+gps18p :: [Int] -> [Int] -> [Int]+gps18p [0] [0] = [0]+gps18p [0,1] [0,1] = [0,2]+gps18p [1,0] [0,1] = [1,1]++gps18g :: [Int] -> [Int] -> [Int]+gps18g xs ys = zipWith (+) xs ys++gps18g' :: [Int] -> [Int] -> [Int]+gps18g' [] [] = []+gps18g' (x:xs) (y:ys) = x + y : gps18g' xs ys++gps18c :: IO ()+gps18c = do+ conjure "gps18" gps18p+ [ pr ([] :: [Int])+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ ]++ conjure "gps18" gps18p+ [ prim "+" ((+) :: Int -> Int -> Int)+ , prim "zipWith" (zipWith :: (Int -> Int -> Int) -> [Int] -> [Int] -> [Int])+ ]+++-- GPS Benchmark #19 -- X-Word Lines --++gps19p :: Int -> String -> String+gps19p 1 "a a a" = "a\na\na\n"+gps19p 1 "a\na\na" = "a\na\na\n"+gps19p 2 "a a a" = "a a\na\n"++gps19g :: Int -> String -> String+gps19g x xs = unlines (map unwords (chunk x (words xs)))++chunk :: Int -> [String] -> [[String]]+chunk x [] = []+chunk x ss = take x ss : chunk x (drop x ss)++gps19c :: IO ()+gps19c = do+ -- speculate takes too long+ conjure "gps19" gps19p $ take 0+ [ prim "words" (words :: String -> [String])+-- , prim "words" (lines :: String -> [String])+ , prim "unwords" (unwords :: [String] -> String)+ , prim "unlines" (unlines :: [String] -> String)+-- , prim "chunk" (chunk :: Int -> [String] -> [[String]])+-- , prim "map" (map :: ([String] -> String) -> [[String]] -> [String])+ ]+++-- GPS Benchmark #20 -- Pig Latin --+gps20p :: String -> String+gps20p "hello world" = "ellohay orldway"+gps20p "a string" = "aay tringsay"++gps20g :: String -> String+gps20g = pig++pig :: String -> String+pig = unwords . map pig1 . words++pig1 :: String -> String+pig1 (c:cs) = if isVowel c+ then (c:cs) ++ "ay"+ else cs ++ (c:"ay")++pig1' :: String -> String+pig1' "hello" = "ellohay"+pig1' "world" = "orldway"+pig1' "string" = "tringsay"+pig1' "east" = "eastay"++isVowel :: Char -> Bool+isVowel 'a' = True+isVowel 'e' = True+isVowel 'i' = True+isVowel 'o' = True+isVowel 'u' = True+isVowel 'y' = True+isVowel _ = False++isVowel' :: Char -> Bool+isVowel' 'a' = True+isVowel' 'e' = True+isVowel' 'i' = True+isVowel' 'o' = True+isVowel' 'u' = True+isVowel' 'y' = True+isVowel' ' ' = False+isVowel' 'b' = False+isVowel' 'c' = False+isVowel' 'd' = False+isVowel' 'f' = False+isVowel' 'g' = False++gps20c :: IO ()+gps20c = do+ conjureWith args{maxSize=22} "isVowel" isVowel'+ [ pr 'a'+ , pr 'e'+ , pr 'i'+ , pr 'o'+ , pr 'u'+ , pr 'y'+ , pr True+ , pr False+ ]++ let force = [ [val "hello"]+ , [val "world"]+ , [val "string"]+ , [val "east"]+ ]+ conjureWith args{forceTests=force, maxSize=14} "pig1" pig1'+ [ pr "ay"+ , prif (undefined :: String)+ , prim "isVowel" isVowel+ , prim "++" ((++) :: String -> String -> String)+ , prim ":" ((:) :: Char -> String -> String)+ ]++ let force = [ [val "hello world"]+ , [val "a string"]+ ]+ conjureWith args{forceTests=force} "gps20c" gps20p+ [ prim "words" (words :: String -> [String])+ , prim "unwords" (unwords :: [String] -> String)+ , prim "map" (map :: (String -> String) -> [String] -> [String])+ , prim "pig1" pig1+ ]++++-- GPS Benchmark #21 -- Negative To Zero --++gps21p :: [Int] -> [Int]+gps21p [1] = [1]+gps21p [-1] = [0]+gps21p [1,-1] = [1,0]+gps21p [-1,1] = [0,1]++gps21g :: [Int] -> [Int]+gps21g [] = []+gps21g (x:xs) = (if x < 0 then 0 else x) : gps21g xs++gps21c :: IO ()+gps21c = conjure "gps21" gps21p+ [ pr ([] :: [Int])+ , pr (0 :: Int)+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim "<" ((<) :: Int -> Int -> Bool)+ , prif (undefined :: Int)+ ]+++-- GPS Benchmark #22 -- Scrabble Score --+gps22p :: String -> Int+gps22p "a" = 1+gps22p "hello" = 8+gps22p "world" = 9+gps22p "scrabble" = 14++gps22g :: String -> Int+gps22g = scrabble++scrabble :: String -> Int+scrabble s = foldr (+) 0 (map scrabble1 s)++scrabble1 :: Char -> Int+scrabble1 'd' = 2+scrabble1 'g' = 2+scrabble1 'b' = 3+scrabble1 'c' = 3+scrabble1 'm' = 3+scrabble1 'p' = 3+scrabble1 'f' = 4+scrabble1 'h' = 4+scrabble1 'v' = 4+scrabble1 'w' = 4+scrabble1 'y' = 4+scrabble1 'k' = 5+scrabble1 'j' = 8+scrabble1 'x' = 8+scrabble1 'q' = 10+scrabble1 'z' = 10+scrabble1 _ = 1 -- aeilnorstu++gps22c :: IO ()+gps22c = do+ let force = [ [val "a"]+ , [val "hello"]+ , [val "world"]+ , [val "scrabble"]+ ]++ conjureWith args{forceTests=force} "gps22" gps22p+ [ pr (0 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "map" (map :: (Int -> Int) -> [Int] -> [Int])+ , prim "scrabble1" scrabble1+ ]+++-- GPS Benchmark #23 -- Word Stats --+gps23p :: String -> ([(Int,Int)], Int, Double)+gps23p "" = ([], 0, 1.0/0.0)++gps23c :: IO ()+gps23c = do+ conjure "gps23" gps23p []+++-- GPS Benchmark #24 -- Checksum --+gps24p :: String -> Char+gps24p "a" = 'A'+gps24p "aa" = '"'+gps24p "a a" = 'B'+gps24p "b" = 'B'++gps24g :: String -> Char+gps24g s = chr (sum (map ord s) `mod` 64 + ord ' ')++gps24c :: IO ()+gps24c = conjure "gps24" gps24p+ [ pr ' '+ , pr (64 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "`mod`" (mod :: Int -> Int -> Int)+ , prim "sum" (sum :: [Int] -> Int)+ , prim "ord" ord+ , prim "chr" chr+ , prim "map" (map :: (Char -> Int) -> String -> [Int])+ ]+++-- GPS Benchmark #25 -- Digits --+gps25p :: Int -> [Int]+gps25p 0 = [0]+gps25p 1 = [1]+gps25p 12 = [2,1]+gps25p (-21) = [1,-2]++gps25g :: Int -> [Int]+gps25g 0 = [0] -- 3+gps25g n = if abs n < 10 -- 8+ then [n] -- 11+ else abs (n `rem` 10) : gps25g (n `quot` 10) -- 20++-- out of reach performance-wise+gps25c :: IO ()+gps25c = conjureWith args{maxSize=20} "gps25" gps25p $ take 0+ [ pr (0 :: Int)+ , pr (10 :: Int)+ , pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prif (undefined :: [Int])+ , prim "abs" (abs :: Int -> Int)+ , prim "<" ((<) :: Int -> Int -> Bool)+ , prim "rem" (rem :: Int -> Int -> Int)+ , prim "quot" (quot :: Int -> Int -> Int)+ ]+++-- GPS Benchmark #26 -- Grade --+gps26p :: Int -> Int -> Int -> Int -> Int -> Char+gps26p 4 3 2 1 5 = 'A'+gps26p 4 3 2 1 4 = 'A'+gps26p 4 3 2 1 3 = 'B'+gps26p 4 3 2 1 2 = 'C'+gps26p 4 3 2 1 1 = 'D'+gps26p 4 3 2 1 0 = 'F'++gps26g :: Int -> Int -> Int -> Int -> Int -> Char+gps26g a b c d x+ | x >= a = 'A'+ | x >= b = 'B'+ | x >= c = 'C'+ | x >= d = 'D'+ | otherwise = 'F'++-- out of reach performance-wise+gps26c :: IO ()+gps26c = conjureWith args{maxSize=2} "gps26" gps26p+ [ pr 'A'+ , pr 'B'+ , pr 'C'+ , pr 'D'+ , pr 'F'+ , prif (undefined :: Char)+ , prim ">=" ((>=) :: Int -> Int -> Bool)+ ]+++-- GPS Benchmark #27 -- Median --+gps27p :: Int -> Int -> Int -> Int+gps27p 0 1 2 = 1+gps27p 1 0 2 = 1+gps27p (-1) 1 0 = 0++gps27g :: Int -> Int -> Int -> Int+gps27g x y z+ | y < x && x < z = x -- 8+ | x < y && y < z = y -- 16+ | otherwise = z -- 17+-- Conjure found a smaller implementation!++gps27c :: IO ()+gps27c = conjure "gps27" gps27p+ [ prim "<" ((<) :: Int -> Int -> Bool)+ , prim "&&" (&&)+ , prif (undefined :: Int)+ ]+++-- GPS Benchmark #28 -- Smallest --+gps28p :: Int -> Int -> Int -> Int -> Int+gps28p 0 1 2 3 = 0+gps28p 3 2 1 0 = 0+gps28p 1 0 2 3 = 0+gps28p 3 2 0 1 = 0+gps28p 1 1 1 2 = 1++gps28c :: IO ()+gps28c = conjure "gps28" gps28p+ [ prim "`min`" (min :: Int -> Int -> Int)+ ]+++-- GPS Benchmark #29 -- Syllables --+gps29p :: String -> Int+gps29p "pub" = 1+gps29p "hello" = 2+gps29p "world" = 1+gps29p "string" = 1+gps29p "haskell" = 2+gps29p "photography" = 4++gps29g :: String -> Int+gps29g "" = 0+gps29g (c:cs) = if isVowel c+ then 1 + gps29g cs+ else gps29g cs++gps29c :: IO ()+gps29c = conjureWith args{forceTests=force} "gps29" gps29p+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , prim "+" ((+) :: Int->Int->Int)+ , prif (undefined :: Int)+ , prim "isVowel" isVowel+ ]+ where+ force = [ [val "pub"]+ , [val "hello"]+ , [val "world"]+ , [val "string"]+ , [val "haskell"]+ , [val "photography"]+ ]++ main :: IO () main = do as <- getArgs@@ -334,4 +916,23 @@ , gps8c , gps9c , gps10c+ , gps11c+ , gps12c+ , gps13c+ , gps14c+ , gps15c+ , gps16c+ , gps17c+ , gps18c+ , gps19c+ , gps20c+ , gps21c+ , gps22c+ , gps23c+ , gps24c+ , gps25c+ , gps26c+ , gps27c+ , gps28c+ , gps29c ]
bench/gps.out view
@@ -35,7 +35,7 @@ -- looking through 0 candidates of size 5 -- looking through 1536 candidates of size 6 -- looking through 0 candidates of size 7--- looking through 26127 candidates of size 8+-- looking through 26991 candidates of size 8 gps3 x y z = enumFromThenTo x (x + z) (y - 1) gps3 :: Int -> Int -> Int -> [Int]@@ -83,10 +83,10 @@ -- pruning with 16/18 rules -- looking through 4 candidates of size 1 -- looking through 9 candidates of size 2--- looking through 30 candidates of size 3--- looking through 125 candidates of size 4--- looking through 415 candidates of size 5--- looking through 1602 candidates of size 6+-- looking through 33 candidates of size 3+-- looking through 146 candidates of size 4+-- looking through 624 candidates of size 5+-- looking through 2576 candidates of size 6 cannot conjure gps7 :: [Char] -> ([Char],Int)@@ -100,9 +100,9 @@ -- looking through 7 candidates of size 6 -- looking through 16 candidates of size 7 -- looking through 39 candidates of size 8--- looking through 86 candidates of size 9--- looking through 193 candidates of size 10--- looking through 414 candidates of size 11+-- looking through 88 candidates of size 9+-- looking through 201 candidates of size 10+-- looking through 442 candidates of size 11 gps7 cs = (init (unlines (words cs)),length (filter (not . isSpace) cs)) gps8 :: [Char] -> [Char] -> [(Int,Char,Char)]@@ -121,11 +121,11 @@ -- looking through 4 candidates of size 3 -- looking through 4 candidates of size 4 -- looking through 10 candidates of size 5--- looking through 25 candidates of size 6--- looking through 35 candidates of size 7--- looking through 87 candidates of size 8--- looking through 150 candidates of size 9--- looking through 272 candidates of size 10+-- looking through 24 candidates of size 6+-- looking through 34 candidates of size 7+-- looking through 83 candidates of size 8+-- looking through 143 candidates of size 9+-- looking through 259 candidates of size 10 gps9 x = filter even (filter (x >) (map sq [1..x])) wallisNext :: Ratio Integer -> Ratio Integer@@ -138,7 +138,7 @@ -- looking through 4 candidates of size 5 -- looking through 118 candidates of size 6 -- looking through 5 candidates of size 7--- looking through 825 candidates of size 8+-- looking through 1001 candidates of size 8 wallisNext (x % y) = (y + 1) % (x + 1) gps10 :: Int -> Ratio Integer@@ -153,4 +153,324 @@ -- looking through 8 candidates of size 7 -- looking through 13 candidates of size 8 gps10 x = product (take x (iterate wallisNext (2 % 3)))++gps11 :: [[Char]] -> [Int]+-- testing 4 combinations of argument values+-- pruning with 1/1 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 1 candidates of size 3+-- looking through 1 candidates of size 4+gps11 css = reverse (map length css)++gps11 :: [[Char]] -> [Int]+-- testing 4 combinations of argument values+-- pruning with 4/4 rules+-- looking through 1 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 1 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 1 candidates of size 5+-- looking through 2 candidates of size 6+-- looking through 0 candidates of size 7+-- looking through 2 candidates of size 8+gps11 [] = []+gps11 (cs:css) = gps11 css ++ [length cs]++gps12 :: [Int] -> Int+-- testing 6 combinations of argument values+-- pruning with 13/27 rules+-- looking through 2 candidates of size 1+-- looking through 5 candidates of size 2+-- looking through 5 candidates of size 3+-- looking through 16 candidates of size 4+-- looking through 26 candidates of size 5+-- looking through 71 candidates of size 6+-- looking through 160 candidates of size 7+-- looking through 432 candidates of size 8+-- looking through 1166 candidates of size 9+-- looking through 3187 candidates of size 10+-- looking through 9282 candidates of size 11+gps12 xs = (length xs - fromJust (findIndex (0 ==) (reverse xs))) - 1++gps13 :: [Ratio Integer] -> Ratio Integer+-- testing 3 combinations of argument values+-- pruning with 4/8 rules+-- looking through 1 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 10 candidates of size 4+-- looking through 15 candidates of size 5+-- looking through 56 candidates of size 6+-- looking through 125 candidates of size 7+-- looking through 449 candidates of size 8+gps13 qs = foldr (+) 0 qs / fromIntegral (length qs)++odd :: Int -> Bool+-- testing 6 combinations of argument values+-- pruning with 12/13 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 7 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 71 candidates of size 5+odd x = x `mod` 2 /= 0++gps14 :: [Int] -> Int+-- testing 3 combinations of argument values+-- pruning with 1/1 rules+-- looking through 0 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 1 candidates of size 4+gps14 xs = length (filter odd xs)++gps14 :: [Int] -> Int+-- testing 3 combinations of argument values+-- pruning with 39/58 rules+-- looking through 3 candidates of size 1+-- looking through 9 candidates of size 2+-- looking through 7 candidates of size 3+-- looking through 58 candidates of size 4+-- looking through 66 candidates of size 5+-- looking through 600 candidates of size 6+-- looking through 1034 candidates of size 7+gps14 [] = 0+gps14 (x:xs) = x `mod` 2 + gps14 xs++gps15 :: [Int] -> [Int] -> Bool+-- testing 5 combinations of argument values+-- pruning with 3/7 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 8 candidates of size 4+gps15 xs ys = reverse xs == ys++gps16 :: [Char] -> [Char] -> Bool+-- testing 6 combinations of argument values+-- pruning with 3/3 rules+-- 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+gps16 cs ds = sort cs `isSubsequenceOf` sort ds++gps17 :: Int -> Int+-- testing 4 combinations of argument values+-- pruning with 27/65 rules+-- looking through 3 candidates of size 1+-- looking through 4 candidates of size 2+-- looking through 13 candidates of size 3+-- looking through 34 candidates of size 4+-- looking through 75 candidates of size 5+-- looking through 183 candidates of size 6+-- looking through 577 candidates of size 7+-- looking through 1311 candidates of size 8+-- looking through 5282 candidates of size 9+gps17 0 = 0+gps17 x = x * x + gps17 (x - 1)++gps18 :: [Int] -> [Int] -> [Int]+-- testing 3 combinations of argument values+-- pruning with 2/6 rules+-- looking through 3 candidates of size 1+-- looking through 8 candidates of size 2+-- looking through 11 candidates of size 3+-- looking through 44 candidates of size 4+-- looking through 116 candidates of size 5+-- looking through 92 candidates of size 6+-- looking through 791 candidates of size 7+-- looking through 220 candidates of size 8+-- looking through 4632 candidates of size 9+gps18 [] [] = []+gps18 [] (x:xs) = xs+gps18 (x:xs) [] = xs+gps18 (x:xs) (y:ys) = x + y:gps18 xs ys++gps18 :: [Int] -> [Int] -> [Int]+-- testing 3 combinations of argument values+-- pruning with 2/7 rules+-- looking through 2 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 12 candidates of size 4+gps18 xs ys = zipWith (+) xs ys++gps19 :: Int -> [Char] -> [Char]+-- testing 2 combinations of argument values+-- pruning with 0/0 rules+-- looking through 1 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++isVowel :: Char -> Bool+-- testing 12 combinations of argument values+-- pruning with 0/0 rules+-- looking through 2 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 8 candidates of size 4+-- looking through 8 candidates of size 5+-- looking through 14 candidates of size 6+-- looking through 28 candidates of size 7+-- looking through 32 candidates of size 8+-- looking through 40 candidates of size 9+-- looking through 54 candidates of size 10+-- looking through 78 candidates of size 11+-- looking through 78 candidates of size 12+-- looking through 102 candidates of size 13+-- looking through 88 candidates of size 14+-- looking through 104 candidates of size 15+-- looking through 136 candidates of size 16+-- looking through 122 candidates of size 17+-- looking through 92 candidates of size 18+-- looking through 92 candidates of size 19+-- looking through 62 candidates of size 20+-- looking through 62 candidates of size 21+-- looking through 126 candidates of size 22+isVowel 'a' = True+isVowel 'e' = True+isVowel 'i' = True+isVowel 'o' = True+isVowel 'u' = True+isVowel 'y' = True+isVowel c = False++pig1 :: [Char] -> [Char]+-- testing 4 combinations of argument values+-- pruning with 5/5 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 5 candidates of size 3+-- looking through 8 candidates of size 4+-- looking through 14 candidates of size 5+-- looking through 28 candidates of size 6+-- looking through 47 candidates of size 7+-- looking through 126 candidates of size 8+-- looking through 201 candidates of size 9+-- looking through 631 candidates of size 10+-- looking through 1069 candidates of size 11+-- looking through 3495 candidates of size 12+-- looking through 6382 candidates of size 13+-- looking through 20409 candidates of size 14+pig1 "" = "ay"+pig1 (c:cs) = if isVowel c then (c:cs) ++ "ay" else cs ++ (c:"ay")++gps20c :: [Char] -> [Char]+-- testing 2 combinations of argument values+-- pruning with 1/1 rules+-- looking through 1 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 3 candidates of size 4+-- looking through 5 candidates of size 5+gps20c cs = unwords (map pig1 (words cs))++gps21 :: [Int] -> [Int]+-- testing 4 combinations of argument values+-- pruning with 4/4 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 6 candidates of size 4+-- looking through 5 candidates of size 5+-- looking through 13 candidates of size 6+-- looking through 9 candidates of size 7+-- looking through 30 candidates of size 8+-- looking through 25 candidates of size 9+-- looking through 65 candidates of size 10+gps21 [] = []+gps21 (x:xs) = (if x < 0 then 0 else x):gps21 xs++gps22 :: [Char] -> Int+-- testing 4 combinations of argument values+-- pruning with 5/9 rules+-- looking through 1 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 0 candidates of size 5+-- looking through 4 candidates of size 6+gps22 "" = 0+gps22 (c:cs) = scrabble1 c + gps22 cs++gps23 :: [Char] -> ([(Int,Int)],Int,Double)+-- testing 1 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++gps24 :: [Char] -> Char+-- testing 4 combinations of argument values+-- pruning with 15/19 rules+-- looking through 1 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 4 candidates of size 3+-- looking through 3 candidates of size 4+-- looking through 9 candidates of size 5+-- looking through 19 candidates of size 6+-- looking through 40 candidates of size 7+-- looking through 97 candidates of size 8+-- looking through 286 candidates of size 9+-- looking through 739 candidates of size 10+gps24 cs = chr (ord ' ' + sum (map ord cs) `mod` 64)++gps25 :: Int -> [Int]+-- testing 4 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+cannot conjure++gps26 :: Int -> Int -> Int -> Int -> Int -> Char+-- testing 5 combinations of argument values+-- pruning with 4/4 rules+-- looking through 5 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++gps27 :: Int -> Int -> Int -> Int+-- testing 3 combinations of argument values+-- pruning with 14/18 rules+-- looking through 3 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 0 candidates of size 5+-- looking through 36 candidates of size 6+-- looking through 0 candidates of size 7+-- looking through 0 candidates of size 8+-- looking through 0 candidates of size 9+-- looking through 180 candidates of size 10+-- looking through 2592 candidates of size 11+gps27 x y z = if x < y then (if y < z then y else z) else x++gps28 :: Int -> Int -> Int -> Int -> Int+-- testing 5 combinations of argument values+-- pruning with 6/10 rules+-- looking through 4 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 12 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 24 candidates of size 5+-- looking through 0 candidates of size 6+-- looking through 72 candidates of size 7+gps28 x y z x' = x `min` (y `min` (z `min` x'))++gps29 :: [Char] -> Int+-- testing 6 combinations of argument values+-- pruning with 7/11 rules+-- looking through 2 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 4 candidates of size 4+-- looking through 6 candidates of size 5+-- looking through 10 candidates of size 6+-- looking through 18 candidates of size 7+-- looking through 33 candidates of size 8+-- looking through 65 candidates of size 9+gps29 "" = 0+gps29 (c:cs) = (if isVowel c then 1 else 0) + gps29 cs
+ bench/gps2.hs view
@@ -0,0 +1,797 @@+-- gps2.hs: General Program Synthesis Benchmark Suite II+--+-- Copyright (C) 2021 Rudy Matela+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).+{-# LANGUAGE CPP, TemplateHaskell #-}+#if __GLASGOW_HASKELL__ <= 710+{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}+import Data.Typeable+#endif+import Conjure+import System.Environment (getArgs)++import Data.List (findIndex, inits) -- for #1+import Data.Char (toUpper) -- for #4+import Data.Ratio ((%)) -- for #7+import Data.List (findIndices, tails, isPrefixOf) -- for #12+import Data.Maybe (fromJust) -- for #23+import Test.LeanCheck -- for #24+import Data.Express -- for #24+++gps1p :: [Int] -> Maybe Int+gps1p [0,-1,2] = Just 1+gps1p [-1,0,1] = Just 0+gps1p [0,-1] = Just 1+gps1p [1,-1,-1] = Just 2++gps1g :: [Int] -> Maybe Int+gps1g xs = findIndex (0 >) (map sum (tail (inits xs)))++gps1p2 :: Int -> [Int] -> Int+gps1p2 0 [0,-1,2] = 1+gps1p2 0 [-1,0,1] = 0+gps1p2 0 [0,-1] = 1+gps1p2 0 [1,-1,-1] = 2+gps1p2 0 [0,0,0,-1] = 3+gps1p2 0 [1,0,0,-2] = 3++-- efficient gps1, unreachable performance-wise+gps1g2 :: Int -> [Int] -> Int+gps1g2 t [] = undefined -- 1+gps1g2 t (x:xs) = if t + x < 0 -- 7+ then 0 -- 8+ else 1 + gps1g2 (t + x) xs -- 15++gps1c :: IO ()+gps1c = do+ conjure "gps1" gps1p+ [ pr (0 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim ">" ((>) :: Int -> Int -> Bool)+ , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int)+ , prim "sum" (sum :: [Int] -> Int)+ , prim "findIndex" (findIndex :: (Int -> Bool) -> [Int] -> Maybe Int)+ , prim "map" (map :: ([Int] -> Int) -> [[Int]] -> [Int])+ , prim "inits" (inits :: [Int] -> [[Int]])+ , prim "tail" (tail :: [[Int]] -> [[Int]])+ ]++ conjure "gps1" gps1p+ [ pr (0 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim ">" ((>) :: Int -> Int -> Bool)+ , prim "sum" (sum :: [Int] -> Int)+ , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int)+ , prim "findIndex" (findIndex :: (Int -> Bool) -> [Int] -> Maybe Int)+ , prim "map" (map :: ([Int] -> Int) -> [[Int]] -> [Int])+ , prim "inits" (inits :: [Int] -> [[Int]])+ , prim "tail" (tail :: [[Int]] -> [[Int]])+ ]++ conjureWithMaxSize 4 "gps1" gps1p2+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "<" ((<) :: Int -> Int -> Bool)+ , prif (undefined :: Int)+ , prim "undefined" (undefined :: Int)+ ]+++gps2p :: Double -> Double -> Int -> Double+gps2p 2 1 1 = 2 + 1+gps2p 2 1 2 = 2 + 1 + 1 + 0.5+gps2p 2 1 3 = 2 + 1 + 1 + 0.5 + 0.5 + 0.25+gps2p 3 1 1 = 3 + 1+gps2p 3 1 2 = 3 + 1 + 1/3++-- apex to apex+gps2g :: Double -> Double -> Int -> Double+gps2g h0 h1 0 = h0 + h1+gps2g h0 h1 n = h0 + h1 + gps2g h1 (h1 * (h1 / h0)) (n - 1)+-- size 17, out of reach performance-wise++gps2c :: IO ()+gps2c = do+ conjureWithMaxSize 6 "gps2" gps2p+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , prim "*" ((*) :: Double -> Double -> Double)+ , prim "/" ((/) :: Double -> Double -> Double)+ , prim "+" ((+) :: Double -> Double -> Double)+ , prim "-" ((-) :: Double -> Double -> Double)+ ]+++gps3p :: String -> Int+gps3p "X X X X X X X X X XXX" = 300+gps3p "11 11 11 11 11 11 11 11 11 11" = 20++-- unreachable performance wise+-- I presume a correct solution would need around 30 symbols+gps3c :: IO ()+gps3c = conjure "gps3" gps3p []++++-- GPS #4: https://www.codewars.com/kata/517abf86da9663f1d2000003+-- Here we're using the problem description as in the GPS2 paper+-- considering we're getting input as kebab-case.+-- Nevertheless, this one is out of reach performance-wise (and OOM-wise)++gps4p :: String -> String+gps4p "the-stealth-warrior" = "theStealthWarrior"+--gps4p "The_Stealth_Warrior" = "TheStealthWarrior"+gps4p "camel-case" = "camelCase"+--gps4p "snake_case" = "snakeCase"+gps4p "Kebab-Case" = "KebabCase"++gps4g :: String -> String+gps4g "" = ""+-- gps4g ('-':c:cs) = toUpper c : gps4g cs+-- gps4g ('_':c:cs) = toUpper c : gps4g cs+gps4g (c:cs) = if c == '-' -- 5+ then if null cs -- 8+ then "" -- 9+ else toUpper (head cs) : gps4g (tail cs) -- 16+ else c : gps4g cs -- 19++gps4c :: IO ()+gps4c = do+ let force = [ [val "the-stealth-warrior"]+-- , [val "The_Stealth_Warrior"]+ , [val "camel-case"]+-- , [val "snake_case"]+ , [val "Kebab-Case"]+ ]+ conjureWith args{forceTests = force, maxSize=6} "gps4" gps4p+ [ pr '-'+-- , pr '_'+ , pr ("" :: String)+ , prim ":" ((:) :: Char -> String -> String)+ , prim "==" ((==) :: Char -> Char -> Bool)+ , prim "head" (head :: String -> Char)+ , prim "tail" (tail :: String -> String)+ , prif (undefined :: Char)+ , prif (undefined :: String)+ , prim "toUpper" (toUpper :: Char -> Char)+ ]+++-- GPS #5: Coin Sums+-- https://projecteuler.net/problem=31+--+-- The problem description is inconsistent with the one given in the paper.+--+-- Paper: change-making problem in USD+-- Euler: How many different ways can £2 be made using any number of coins?+--+-- I'm considering the Paper to be canonical, as the one in Project Euler can be solved by a constant function:+--+-- solution :: Int+-- solution = 6378216738 -- <-- arbitrary example here, I didn't run the numbers+gps5p :: Int -> [Int]+gps5p 100 = [4, 0, 0, 0]+gps5p 50 = [2, 0, 0, 0]+gps5p 25 = [1, 0, 0, 0]+gps5p 30 = [1, 0, 1, 0]+gps5p 20 = [0, 2, 0, 0]+gps5p 3 = [0, 0, 0, 3]++gps5p2 :: [Int] -> Int -> [Int]+gps5p2 [25, 10, 5, 1] 100 = [4, 0, 0, 0]+gps5p2 [25, 10, 5, 1] 50 = [2, 0, 0, 0]+gps5p2 [25, 10, 5, 1] 25 = [1, 0, 0, 0]+gps5p2 [25, 10, 5, 1] 30 = [1, 0, 1, 0]+gps5p2 [25, 10, 5, 1] 20 = [0, 2, 0, 0]+gps5p2 [25, 10, 5, 1] 3 = [0, 0, 0, 3]++coins :: [Int]+coins = [25, 10, 5, 1]++gps5g :: Int -> [Int]+gps5g = tell coins++tell :: [Int] -> Int -> [Int]+tell [] a = []+tell (n:ns) a = a `div` n : tell ns (a `mod` n)++gps5c :: IO ()+gps5c = do+ -- cannot conjure directly due to needing to introduce a local definition+ conjure "gps5" gps5p+ [+ ]++ let force = [ [val coins, val (100::Int)]+ , [val coins, val ( 50::Int)]+ , [val coins, val ( 25::Int)]+ , [val coins, val ( 30::Int)]+ , [val coins, val ( 20::Int)]+ , [val coins, val ( 3::Int)]+ ]+ conjureWith args{forceTests=force} "tell" gps5p2+ [ pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim "`div`" (div :: Int -> Int -> Int)+ , prim "`mod`" (mod :: Int -> Int -> Int)+ ]++ conjureWith args{forceTests=force} "gps5" gps5p+ [ pr coins+ , prim "tell" tell+ ]++ conjureWith args{forceTests=force} "gps5" gps5p+ [ pr (1 :: Int)+ , pr (5 :: Int)+ , pr (10 :: Int)+ , pr (25 :: Int)+ , pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim "tell" tell+ ]+++-- GPS2#6: Cut Vector+gps6g :: [Int] -> Int+gps6g xs = snd+ $ minimum+ [ (abs (sum xs0 - sum xs1), i)+ | i <- [0 .. length xs]+ , let (xs0, xs1) = splitAt i xs+ ]++-- not Conjurable due to needing local definition+-- I conjecture it _perhaps-maybe_ this could be done in 3 steps,+-- but I'll leave this as-is for now.+gps6c :: IO ()+gps6c =+ conjure "gps6" gps6g []+++-- GPS2#7: Dice Game+-- https://projecteuler.net/problem=31+-- https://github.com/thelmuth/Clojush/blob/psb2-v1.0/src/clojush/problems/psb2/dice_game.clj+-- again, paper and problem are inconsistent, going with paper+gps7p :: Integer -> Integer -> Rational+gps7p 4 6 = 1 % 4+gps7p 6 4 = 7 % 12+gps7p 2 4 = 1 % 8+gps7p 4 2 = 5 % 8+gps7p 2 6 = 1 % 12+gps7p 6 2 = 3 % 4++gps7g :: Integer -> Integer -> Rational+gps7g peter colin = sum (map (min colin) [0 .. (peter-1)]) % (colin*peter)++-- out of reach performance-wise+gps7c :: IO ()+gps7c = do+ conjureWith args{maxSize=6} "gps7" gps7p $ take 0+ [ pr (0 :: Integer)+ , pr (1 :: Integer)+ , prim "%" ((%) :: Integer -> Integer -> Rational)+ , prim "+" ((+) :: Integer -> Integer -> Integer)+ , prim "-" ((-) :: Integer -> Integer -> Integer)+ , prim "*" ((*) :: Integer -> Integer -> Integer)+ , prim "min" (min :: Integer -> Integer -> Integer)+ , prim ".." (enumFromTo :: Integer -> Integer -> [Integer])+ , prim "map" (map :: (Integer -> Integer) -> [Integer] -> [Integer])+ , prim "sum" (sum :: [Integer] -> Integer)+ ]+++gps8p :: Int -> [Int] -> (Int,Int)+gps8p 2 [1,1,2] = (1,1)+gps8p 3 [1,1,2] = (1,2)+gps8p 2 [0,1,0,2] = (0,2)++gps8g :: Int -> [Int] -> (Int,Int)+gps8g x xs = head [(y,z) | y <- xs, z <- xs, y + z == x]+-- this one could be generated but is a bit of a stretch...+-- it is unintuitive to provide the given symbols+-- gps8g :: Int -> [Int] -> (Int,Int)+-- gps8g x xs = head $ filter ((x ==) . uncurry (+)) $ liftA2 (,) xs xs++gps8c :: IO ()+gps8c = conjure "gps" gps8p []+++-- GPSB#9: Fizz Buzz (CW)+gps9p :: Int -> String+gps9p 3 = "Fizz"+gps9p 4 = "4"+gps9p 5 = "Buzz"+gps9p 6 = "Fizz"+gps9p 10 = "Buzz"+gps9p 15 = "FizzBuzz"+gps9p 17 = "17"++gps9g :: Int -> String+gps9g x+ | x `div` 3 == 0 = "Fizz" -- 7+ | x `div` 5 == 0 = "Buzz" -- 14+ | x `div` 3 == 0 && x `div` 5 == 0 = "FizzBuzz" -- 27+ | otherwise = show x -- 29++-- probably unreachable performance-wise+gps9c :: IO ()+gps9c = conjure "gps" gps9p []+++gps10p :: [Int] -> Int+gps10p [1,2,3] = -5+gps10p [10,20,30] = 13++-- does not do rounding+gps10g :: [Int] -> Int+gps10g xs = sum $ map (\x -> x `div` 3 - 2) xs+-- TODO: reachable with explicit fold?+-- gps10g [] = 0+-- gps10g (x:xs) = x`div`3 - 2 : gps10g xs+-- ??++-- unreachable due to lambda+gps10c :: IO ()+gps10c = conjure "gps" gps9p []+++gps11p :: Int -> Int -> Int+gps11p = gcd'+ where+ gcd' :: Int -> Int -> Int+ gcd' 1 1 = 1+ gcd' 1 2 = 1+ gcd' 2 1 = 1+ gcd' 2 2 = 2+ gcd' 2 6 = 2+ gcd' 6 2 = 2+ gcd' 3 6 = 3+ gcd' 6 3 = 3+ gcd' 6 9 = 3+ gcd' 9 6 = 3+ gcd' 12 18 = 6++gps11c :: IO ()+gps11c = conjure "gcd a b" gps11p+ [ pr (0::Int)+ , prim "`mod`" (mod :: Int -> Int -> Int)+ ]+ -- generated function:+ -- gcd x 0 = x+ -- gcd x y = gcd y (x `mod` y)+++gps12p :: String -> String -> [Int]+gps12p "a" "a" = [0]+gps12p "aa" "a" = [0,1]+gps12p "aa" "aa" = [0]+gps12p "a a" "a" = [0,2]+gps12p "b" "a" = []++gps12g :: String -> String -> [Int]+gps12g s s' = findIndices (s' `isPrefixOf`) (tails s)++gps12c :: IO ()+gps12c = conjure "gps12" gps12p+ [ prim "findIndices" (findIndices :: (String -> Bool) -> [String] -> [Int])+ , prim "`isPrefixOf`" (isPrefixOf :: String -> String -> Bool)+ , prim "tails" (tails :: String -> [String])+ ]+++gps13p :: [Int] -> [Int]+gps13p [0,1] = [1]+gps13p [1,0] = [1,0]+gps13p [2,0,1] = [2,1]+gps13p [1,0,1] = [1]++gps13g :: [Int] -> [Int]+gps13g = leaders+ where+ leaders [] = []+ leaders (x:xs) = if all (x >) xs+ then x : leaders xs+ else leaders xs++gps13c :: IO ()+gps13c = conjure "gps13_leaders" gps13p+ [ pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim ">" ((>) :: Int -> Int -> Bool)+ , prim "all" (all :: (Int -> Bool) -> [Int] -> Bool)+ , prif (undefined :: [Int])+ ]+++gps14p :: [Int] -> Int+gps14p = undefined++-- 30 symbols+gps14g :: [Int] -> Int+gps14g = luhn+ where+ luhn :: [Int] -> Int+ luhn xs = sum (firsts xs ++ map double9 (seconds xs))+ where+ double9 :: Int -> Int+ double9 x = if xx > 9+ then xx - 9+ else xx+ where+ xx = x * 2+ seconds :: [Int] -> [Int]+ seconds [] = []+ seconds (x:y:xs) = y : seconds xs+ firsts :: [Int] -> [Int]+ firsts [] = []+ firsts (x:y:xs) = x : seconds xs++-- cannot Conjure directly+gps14c :: IO ()+gps14c = conjure "gps14_luhn" gps14p+ [+ ]+++gps15p :: () -> ()+gps15p = undefined++-- skipped+gps15c :: IO ()+gps15c = conjure "gps15_mastermind" gps15p []+++gps16p :: String -> String+gps16p "a" = "a"+gps16p "aaa" = "a"+gps16p "aa" = "aa"+gps16p "a a" = " "+gps16p " a " = "a"+gps16p "a a " = " a"+gps16p " a a " = " "++gps16g1 :: String -> String+gps16g1 s = if odd len+ then take 1 (drop (len `div` 2) s)+ else take 2 (drop (len `div` 2 - 1) s)+ where+ len = length s++gps16g2 :: String -> String+gps16g2 "" = ""+gps16g2 (c:cs) = if length cs <= 1+ then c : cs+ else gps16g2 (init cs)++gps16c :: IO ()+gps16c = conjure "gps16_middle" gps16p+ [ pr ""+ , pr (1 :: Int)+ , prim "<=" ((<=) :: Int -> Int -> Bool)+ , prim ":" ((:) :: Char -> String -> String)+ , prim "length" (length :: String -> Int)+ , prim "init" (init :: String -> String)+ , prif (undefined :: String)+ ]+++gps17p :: [Int] -> Int+gps17p [0,1,0] = 0+gps17p [1,1] = 1+gps17p [1,1,0] = 1+gps17p [0,1,1] = 1+gps17p [1,1,1] = 2++gps17g :: [Int] -> Int+gps17g xs = pds xs+ where+ pds [] = 0+ pds (x:xs) = if not (null xs) && x == head xs+ then x + pds xs+ else pds xs+-- surprise:+-- gps17_pds [] = 0+-- gps17_pds (x:xs) = (if not (null xs) && head xs == x then x else 0) + gps17_pds xs+++-- can generate at size 15 in 18 seconds+-- setting limit of 5 for faster output+gps17c :: IO ()+gps17c = conjureWith args{maxSize=5} "gps17_pds" gps17p+ [ pr (0 :: Int)+ , prif (undefined :: Int)+ , prim "not" not+ , prim "null" (null :: [Int] -> Bool)+ , prim "==" ((==) :: Int -> Int -> Bool)+ , prim "head" (head :: [Int] -> Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "&&" (&&)+ ]+++gps18p :: [Double] -> [Double] -> Double+gps18p [1.0] [0.5] = 0.5+gps18p [2.0] [0.5] = 1.0+gps18p [1.0,1.0] [0.5,0.0] = 1.5+gps18p [1.0,1.0] [0.0,0.5] = 1.5++gps18g :: [Double] -> [Double] -> Double+gps18g prices discounts = foldr (+) 0 (zipWith (*) prices (map (1-) discounts))++-- this was OOM'd+gps18c :: IO ()+gps18c = conjureWithMaxSize 6 "gps18_price" gps18p+ [ pr (0 :: Double)+ , pr (1 :: Double)+ , prim "+" ((+) :: Double -> Double -> Double)+ , prim "*" ((*) :: Double -> Double -> Double)+ , prim "-" ((-) :: Double -> Double -> Double)+-- , prim "foldr" (foldr :: (Double -> Double -> Double) -> Double -> [Double] -> Double)+-- , prim "zipWith" (zipWith :: (Double -> Double -> Double) -> [Double] -> [Double] -> [Double])+-- , prim "map" (map :: (Double -> Double) -> [Double] -> [Double])+ ]+++gps19p :: Int -> Double -> Double -> Double -> Double+gps19p 0 0 1.0 1.0 = 0+gps19p 1 0 1.0 1.0 = 0+gps19p 2 0 1.0 1.0 = 0+gps19p 1 0 1.0 2.0 = 1.0+gps19p 2 0 1.0 2.0 = 2.0+gps19p 1 0 0.5 1.0 = 0.5+gps19p 2 0 0.5 1.0 = 1.0++gps19g :: Int -> Double -> Double -> Double -> Double+gps19g 0 total melt fall = total+gps19g n total melt fall = gps19p (n-1) (max 0 (total-melt+fall)) melt fall+-- size 14, out of reach performance wise.++gps19c :: IO ()+gps19c = conjureWithMaxSize 6 "gps19_snowday" gps19p+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , prim "max" (max :: Double -> Double -> Double)+ , prim "+" ((+) :: Double -> Double -> Double)+ , prim "-" ((-) :: Double -> Double -> Double)+ ]+++gps20p :: String -> Bool+gps20p = undefined++gps20c :: IO ()+gps20c = conjure "gps20" gps20p+ [+ ]+++gps21p :: String -> String+gps21p "word" = "word"+gps21p "words" = "sdrow"+gps21p "word words" = "word sdrow"+gps21p "words word" = "sdrow word"++spin' :: String -> String+spin' "abc" = "abc"+spin' "abcd" = "abcd"+spin' "word" = "word"+spin' "abcde" = "edcba"+spin' "words" = "sdrow"+spin' "hello" = "olleh"+spin' "world" = "dlrow"++spin :: String -> String+spin w = if length w >= 5+ then reverse w+ else w++gps21g :: String -> String+gps21g s = unwords (map spin (words s))++gps21c :: IO ()+gps21c = do+ let force = [ [ val "abc" ]+ , [ val "abcd" ]+ , [ val "word" ]+ , [ val "abcde" ]+ , [ val "words" ]+ , [ val "hello" ]+ , [ val "world" ]+ ]+ conjureWith args{maxSize=12, forceTests=force} "spin" spin'+ [ prim "length" (length :: String -> Int)+ , prim "reverse" (reverse :: String -> String)+ , prif (undefined :: String)+ , prim ">=" ((>=) :: Int -> Int -> Bool)+ , pr (5 :: Int)+ ]++ let force = [ [ val "word" ]+ , [ val "words" ]+ , [ val "word words" ]+ , [ val "words word" ]+ ]+ conjureWith args{maxSize=12, forceTests=force} "gps21_spinwords" gps21p+ [ prim "words" words+ , prim "unwords" unwords+ , prim "spin" (spin :: String -> String)+ , prim "map" (map :: (String -> String) -> [String] -> [String])+ , prim "length" (length :: String -> Int)+ , prim "reverse" (reverse :: String -> String)+ , prif (undefined :: String)+ , prim ">=" ((>=) :: Int -> Int -> Bool)+ , pr (5 :: Int)+ ]+++digits :: Int -> [Int]+digits 0 = []+digits n = n `mod` 10 : digits (n `div` 10)++digits' :: Int -> [Int]+digits' 1 = [1]+digits' 12 = [2,1]+digits' 21 = [1,2]+digits' 123 = [3,2,1]+digits' 321 = [1,2,3]++gps22p :: Int -> String+gps22p = undefined++gps22c :: IO ()+gps22c = do+ conjure "digits" digits'+ [ pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim "`div`" (div :: Int -> Int -> Int)+ , prim "`mod`" (mod :: Int -> Int -> Int)+ , prim "div10" ((`div` 10) :: Int -> Int)+ , pr (10 :: Int)+ ]++ conjure "gps22" gps22p+ [+ ]+++gps23p :: String -> String -> String -> String+gps23p "abcd" "abcd" "abcd" = "abcd"+gps23p "abcd" "dcba" "abcd" = "dcba"+gps23p "abcd" "1234" "abcd" = "1234"+gps23p "abcd" "1234" "bacd" = "2134"++gps23g :: String -> String -> String -> String+-- gps23g f t s = map (\c -> fromJust $ c `lookup` zipWith (,) f t) s+gps23g f t s = map (fromJust . (`lookup` zipWith (,) f t)) s++gps23c :: IO ()+gps23c = do+ let force = [ [ val "abcd", val "abcd", val "abcd" ]+ , [ val "abcd", val "dcba", val "abcd" ]+ , [ val "abcd", val "1234", val "abcd" ]+ , [ val "abcd", val "1234", val "bacd" ]+ ]+ -- cannot conjure, needs lambda+ conjureWith args{forceTests=force} "gps23" gps23p+ [+ ]+++data Twitter = Tweet Int+ | TooMany+ | Empty+ deriving (Eq, Show)++#if __GLASGOW_HASKELL__ <= 710+deriving instance Typeable Twitter++instance Express Twitter where+ expr (Tweet n) = value "Tweet" Tweet :$ expr n+ expr t = val t+#else+deriveExpress ''Twitter+#endif+deriveListable ''Twitter+deriveName ''Twitter++instance Conjurable Twitter where+ conjureExpress = reifyExpress+ conjureEquality = reifyEquality+ conjureTiers = reifyTiers++gps24g_twitter :: String -> Twitter+gps24g_twitter "" = Empty+gps24g_twitter s = if length s > 140+ then TooMany+ else Tweet (length s)++gps24p_twitter :: String -> Twitter+gps24p_twitter "" = Empty+gps24p_twitter "abcd" = Tweet 4+gps24p_twitter "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij" = Tweet 140+gps24p_twitter "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghijX" = TooMany++gps24c :: IO ()+gps24c = do+ let force = [ [ val "" ]+ , [ val "abcd" ]+ , [ val "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij" ]+ , [ val "0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghij0123456789abcdefghijX" ]+ ]+ conjureWith args{maxTests=360, forceTests=force} "gps24" gps24p_twitter+ [ pr Empty+ , pr TooMany+ , prim "Tweet" Tweet+ , prif (undefined :: Twitter)+ , pr ""+ , prim ":" ((:) :: Char -> String -> String)+ , prim "length" (length :: String -> Int)+ , pr (140 :: Int)+ , prim ">" ((>) :: Int -> Int -> Bool)+ ]+++gps25p :: [Double] -> [Double] -> Double+gps25p [0] [1] = 1+gps25p [1] [0] = 1+gps25p [-1] [1] = 2+gps25p [0,1] [1,0] = sqrt 2+gps25p [1,0] [0,1] = sqrt 2+gps25p [0,0,1] [1,0,0] = sqrt 2+gps25p [0,1,2] [1,2,3] = sqrt 3++gps25g :: [Double] -> [Double] -> Double+gps25g v1 v2 = sqrt (foldr (+) 0 (map (^2) (zipWith (-) v1 v2)))++-- out of reach performance-wise+gps25c :: IO ()+gps25c = conjureWith args{maxSize=6} "gps25" gps25p+ [ pr (0 :: Double)+ , pr (2 :: Double)+ , prim "+" ((+) :: Double -> Double -> Double)+ , prim "-" ((-) :: Double -> Double -> Double)+ , prim "**" ((**) :: Double -> Double -> Double)+ , prim "zipWith" (zipWith :: (Double -> Double -> Double) -> [Double] -> [Double] -> [Double])+ , prim "map" (map :: (Double -> Double) -> [Double] -> [Double])+ , prim "sqrt" (sqrt :: Double -> Double)+ ]+++main :: IO ()+main = do+ as <- getArgs+ case as of+ [] -> sequence_ gpss+ (n:_) -> gpss !! (read n - 1)+++gpss :: [IO ()]+gpss = [ gps1c+ , gps2c+ , gps3c+ , gps4c+ , gps5c+ , gps6c+ , gps7c+ , gps8c+ , gps9c+ , gps10c+ , gps11c+ , gps12c+ , gps13c+ , gps14c+ , gps15c+ , gps16c+ , gps17c+ , gps18c+ , gps19c+ , gps20c+ , gps21c+ , gps22c+ , gps23c+ , gps24c+ , gps25c+ ]
+ bench/gps2.out view
@@ -0,0 +1,349 @@+gps1 :: [Int] -> Maybe Int+-- testing 4 combinations of argument values+-- pruning with 11/21 rules+-- looking through 0 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 1 candidates of size 9+-- looking through 2 candidates of size 10+gps1 xs = findIndex (0 >) (map (foldr (+) 0) (tail (inits xs)))++gps1 :: [Int] -> Maybe Int+-- testing 4 combinations of argument values+-- pruning with 11/21 rules+-- looking through 0 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+-- looking through 0 candidates of size 6+-- looking through 1 candidates of size 7+-- looking through 4 candidates of size 8+gps1 xs = findIndex (0 >) (map sum (tail (inits xs)))++gps1 :: Int -> [Int] -> Int+-- testing 6 combinations of argument values+-- pruning with 8/9 rules+-- looking through 4 candidates of size 1+-- looking through 25 candidates of size 2+-- looking through 255 candidates of size 3+-- looking through 451 candidates of size 4+cannot conjure++gps2 :: Double -> Double -> Int -> Double+-- testing 5 combinations of argument values+-- pruning with 3/3 rules+-- looking through 2 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 18 candidates of size 3+-- looking through 70 candidates of size 4+-- looking through 314 candidates of size 5+-- looking through 1432 candidates of size 6+cannot conjure++gps3 :: [Char] -> Int+-- testing 0 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++gps4 :: [Char] -> [Char]+-- testing 3 combinations of argument values+-- pruning with 13/20 rules+-- looking through 2 candidates of size 1+-- looking through 3 candidates of size 2+-- looking through 9 candidates of size 3+-- looking through 22 candidates of size 4+-- looking through 54 candidates of size 5+-- looking through 124 candidates of size 6+cannot conjure++gps5 :: Int -> [Int]+-- testing 6 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+cannot conjure++tell :: [Int] -> Int -> [Int]+-- testing 6 combinations of argument values+-- pruning with 0/0 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 10 candidates of size 4+-- looking through 6 candidates of size 5+-- looking through 61 candidates of size 6+-- looking through 26 candidates of size 7+-- looking through 538 candidates of size 8+-- looking through 134 candidates of size 9+-- looking through 5299 candidates of size 10+tell [] x = []+tell (x:xs) y = y `div` x:tell xs (y `mod` x)++gps5 :: Int -> [Int]+-- testing 6 combinations of argument values+-- pruning with 0/0 rules+-- looking through 1 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 1 candidates of size 3+gps5 x = tell [25,10,5,1] x++gps5 :: Int -> [Int]+-- testing 6 combinations of argument values+-- pruning with 12/12 rules+-- looking through 1 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 5 candidates of size 3+-- looking through 9 candidates of size 4+-- looking through 44 candidates of size 5+-- looking through 91 candidates of size 6+-- looking through 441 candidates of size 7+-- looking through 946 candidates of size 8+-- looking through 4450 candidates of size 9+-- looking through 9710 candidates of size 10+-- looking through 44767 candidates of size 11+gps5 x = tell [25,10,5,1] x++gps6 :: [Int] -> Int+-- testing 360 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++gps7 :: Integer -> Integer -> Ratio Integer+-- testing 6 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+cannot conjure++gps :: Int -> [Int] -> (Int,Int)+-- testing 3 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++gps :: Int -> [Char]+-- testing 7 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+cannot conjure++gps :: Int -> [Char]+-- testing 7 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+cannot conjure++gcd :: Int -> Int -> Int+-- testing 11 combinations of argument values+-- pruning with 0/0 rules+-- looking through 3 candidates of size 1+-- looking through 8 candidates of size 2+-- looking through 20 candidates of size 3+-- looking through 60 candidates of size 4+-- looking through 150 candidates of size 5+-- looking through 472 candidates of size 6+gcd x 0 = x+gcd x y = gcd y (x `mod` y)++gps12 :: [Char] -> [Char] -> [Int]+-- testing 5 combinations of argument values+-- pruning with 1/2 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 4 candidates of size 5+gps12 cs ds = findIndices (ds `isPrefixOf`) (tails cs)++gps13_leaders :: [Int] -> [Int]+-- testing 4 combinations of argument values+-- pruning with 5/5 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 1 candidates of size 3+-- looking through 2 candidates of size 4+-- looking through 1 candidates of size 5+-- looking through 2 candidates of size 6+-- looking through 1 candidates of size 7+-- looking through 4 candidates of size 8+-- looking through 7 candidates of size 9+-- looking through 21 candidates of size 10+-- looking through 34 candidates of size 11+-- looking through 67 candidates of size 12+gps13_leaders [] = []+gps13_leaders (x:xs) = if all (x >) xs then x:gps13_leaders xs else gps13_leaders xs++gps14_luhn :: [Int] -> Int+-- testing 0 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++gps15_mastermind :: () -> ()+-- testing 0 combinations of argument values+-- pruning with 0/1 rules+-- looking through 1 candidates of size 1+gps15_mastermind u = u++gps16_middle :: [Char] -> [Char]+-- testing 7 combinations of argument values+-- pruning with 10/11 rules+-- looking through 2 candidates of size 1+-- looking through 3 candidates of size 2+-- looking through 7 candidates of size 3+-- looking through 12 candidates of size 4+-- looking through 21 candidates of size 5+-- looking through 34 candidates of size 6+-- looking through 61 candidates of size 7+-- looking through 126 candidates of size 8+-- looking through 307 candidates of size 9+-- looking through 824 candidates of size 10+-- looking through 2282 candidates of size 11+-- looking through 6293 candidates of size 12+gps16_middle "" = ""+gps16_middle (c:cs) = if length cs <= 1 then c:cs else gps16_middle (init cs)++gps17_pds :: [Int] -> Int+-- testing 5 combinations of argument values+-- pruning with 29/40 rules+-- looking through 1 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 1 candidates of size 4+-- looking through 5 candidates of size 5+cannot conjure++gps18_price :: [Double] -> [Double] -> Double+-- testing 4 combinations of argument values+-- pruning with 28/34 rules+-- looking through 2 candidates of size 1+-- looking through 8 candidates of size 2+-- looking through 72 candidates of size 3+-- looking through 72 candidates of size 4+-- looking through 1192 candidates of size 5+-- looking through 696 candidates of size 6+cannot conjure++gps19_snowday :: Int -> Double -> Double -> Double -> Double+-- testing 7 combinations of argument values+-- pruning with 7/12 rules+-- looking through 3 candidates of size 1+-- looking through 7 candidates of size 2+-- looking through 31 candidates of size 3+-- looking through 169 candidates of size 4+-- looking through 543 candidates of size 5+-- looking through 3608 candidates of size 6+cannot conjure++gps20 :: [Char] -> Bool+-- testing 0 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+cannot conjure++spin :: [Char] -> [Char]+-- testing 7 combinations of argument values+-- pruning with 6/6 rules+-- reasoning produced 1 incorrect properties, please re-run with more tests for faster results+-- looking through 1 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 0 candidates of size 5+-- looking through 0 candidates of size 6+-- looking through 0 candidates of size 7+-- looking through 4 candidates of size 8+spin cs = if length cs >= 5 then reverse cs else cs++gps21_spinwords :: [Char] -> [Char]+-- testing 4 combinations of argument values+-- pruning with 16/16 rules+-- reasoning produced 2 incorrect properties, please re-run with more tests for faster results+-- looking through 1 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 3 candidates of size 4+-- looking through 5 candidates of size 5+gps21_spinwords cs = unwords (map spin (words cs))++digits :: Int -> [Int]+-- testing 5 combinations of argument values+-- pruning with 7/7 rules+-- looking through 1 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 2 candidates of size 3+-- looking through 3 candidates of size 4+-- looking through 15 candidates of size 5+-- looking through 14 candidates of size 6+-- looking through 97 candidates of size 7+-- looking through 104 candidates of size 8+-- looking through 871 candidates of size 9+-- looking through 935 candidates of size 10+-- looking through 9018 candidates of size 11+-- looking through 9686 candidates of size 12+cannot conjure++gps22 :: Int -> [Char]+-- testing 0 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+cannot conjure++gps23 :: [Char] -> [Char] -> [Char] -> [Char]+-- testing 4 combinations of argument values+-- pruning with 0/0 rules+-- looking through 3 candidates of size 1+-- looking through 12 candidates of size 2+-- looking through 33 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 162 candidates of size 5+-- looking through 612 candidates of size 6+-- looking through 0 candidates of size 7+-- looking through 0 candidates of size 8+-- looking through 3168 candidates of size 9+-- looking through 0 candidates of size 10+-- looking through 0 candidates of size 11+-- looking through 5184 candidates of size 12+cannot conjure++gps24 :: [Char] -> Twitter+-- testing 4 combinations of argument values+-- pruning with 4/8 rules+-- reasoning produced 4 incorrect properties, please re-run with more tests for faster results+-- looking through 2 candidates of size 1+-- looking through 3 candidates of size 2+-- looking through 8 candidates of size 3+-- looking through 7 candidates of size 4+-- looking through 4 candidates of size 5+-- looking through 5 candidates of size 6+-- looking through 10 candidates of size 7+-- looking through 48 candidates of size 8+-- looking through 138 candidates of size 9+-- looking through 232 candidates of size 10+-- looking through 322 candidates of size 11+-- looking through 483 candidates of size 12+gps24 "" = Empty+gps24 (c:cs) = if 140 > length cs then Tweet (length (c:cs)) else TooMany++gps25 :: [Double] -> [Double] -> Double+-- testing 6 combinations of argument values+-- pruning with 33/58 rules+-- looking through 2 candidates of size 1+-- looking through 9 candidates of size 2+-- looking through 89 candidates of size 3+-- looking through 312 candidates of size 4+-- looking through 2262 candidates of size 5+-- looking through 9400 candidates of size 6+cannot conjure+
bench/ill-hit.out view
@@ -4,8 +4,8 @@ -- looking through 2 candidates of size 1 -- looking through 5 candidates of size 2 -- looking through 6 candidates of size 3--- looking through 19 candidates of size 4--- looking through 31 candidates of size 5+-- looking through 20 candidates of size 4+-- looking through 34 candidates of size 5 sum [] = 0 sum (x:xs) = x + sum xs @@ -15,8 +15,8 @@ -- looking through 2 candidates of size 1 -- looking through 5 candidates of size 2 -- looking through 6 candidates of size 3--- looking through 19 candidates of size 4--- looking through 31 candidates of size 5+-- looking through 20 candidates of size 4+-- looking through 34 candidates of size 5 sum [] = 0 sum (x:xs) = x + sum xs @@ -26,8 +26,8 @@ -- looking through 2 candidates of size 1 -- looking through 5 candidates of size 2 -- looking through 6 candidates of size 3--- looking through 19 candidates of size 4--- looking through 31 candidates of size 5+-- looking through 20 candidates of size 4+-- looking through 34 candidates of size 5 sum [] = 0 sum (x:xs) = x + sum xs
bench/lowtests.out view
@@ -8,7 +8,7 @@ sort xs `isSubsequenceOf` ys == xs `isSubsequenceOf` sort ys -}--- reasoning produced incorrect properties, please re-run with more tests for faster results+-- reasoning produced 1 incorrect properties, please re-run with more tests for faster results -- looking through 0 candidates of size 1 -- looking through 0 candidates of size 2 -- looking through 2 candidates of size 3
bench/p12.out view
@@ -4,10 +4,10 @@ -- pruning with 67/100 rules -- looking through 3 candidates of size 1 -- looking through 7 candidates of size 2--- looking through 22 candidates of size 3--- looking through 62 candidates of size 4--- looking through 175 candidates of size 5--- looking through 542 candidates of size 6+-- looking through 25 candidates of size 3+-- looking through 82 candidates of size 4+-- looking through 263 candidates of size 5+-- looking through 960 candidates of size 6 factorial 0 = 1 factorial x = x * factorial (dec x)
bench/runtime/zero/bench/candidates.runtime view
@@ -1,1 +1,1 @@-10.0+9.1
bench/runtime/zero/bench/gps.runtime view
@@ -1,1 +1,1 @@-15.2+23.8
+ bench/runtime/zero/bench/gps2.runtime view
@@ -0,0 +1,1 @@+9.5
bench/runtime/zero/bench/lowtests.runtime view
@@ -1,1 +1,1 @@-0.4+0.3
bench/runtime/zero/bench/p12.runtime view
@@ -1,1 +1,1 @@-3.5+3.2
bench/runtime/zero/bench/take-drop.runtime view
@@ -1,1 +1,1 @@-0.6+0.5
+ bench/runtime/zero/bench/terpret.runtime view
@@ -0,0 +1,1 @@+13.0
bench/runtime/zero/eg/bools.runtime view
@@ -1,1 +1,1 @@-3.5+3.3
bench/runtime/zero/eg/count.runtime view
@@ -1,1 +1,1 @@-0.7+0.5
bench/runtime/zero/eg/dupos.runtime view
@@ -1,1 +1,1 @@-5.4+3.1
bench/runtime/zero/eg/factorial.runtime view
@@ -1,1 +1,1 @@-0.8+2.4
bench/runtime/zero/eg/fib01.runtime view
@@ -1,1 +1,1 @@-5.8+4.4
bench/runtime/zero/eg/fibonacci.runtime view
@@ -1,1 +1,1 @@-1.4+8.8
bench/runtime/zero/eg/ints.runtime view
@@ -1,1 +1,1 @@-1.6+1.0
bench/runtime/zero/eg/list.runtime view
@@ -1,1 +1,1 @@-0.5+0.6
bench/runtime/zero/eg/pow.runtime view
@@ -1,1 +1,1 @@-2.3+3.5
bench/runtime/zero/eg/setelem.runtime view
@@ -1,1 +1,1 @@-2.5+2.1
bench/runtime/zero/eg/sort.runtime view
@@ -1,1 +1,1 @@-1.3+1.0
bench/runtime/zero/eg/tree.runtime view
@@ -1,1 +1,1 @@-2.2+1.5
bench/runtime/zero/versions view
@@ -1,4 +1,4 @@ GHC 8.10.4 leancheck-0.9.10-express-1.0.4-speculate-0.4.12+express-1.0.6+speculate-0.4.14
bench/take-drop.hs view
@@ -8,6 +8,10 @@ drop' 1 [x,y] = [y] drop' 2 [x,y] = [] drop' 3 [x,y] = []+drop' 0 [x,y,z] = [x,y,z]+drop' 1 [x,y,z] = [y,z]+drop' 2 [x,y,z] = [z]+drop' 3 [x,y,z] = [] take' :: Int -> [a] -> [a] take' 0 [] = []@@ -19,28 +23,27 @@ main :: IO () main = do- -- drop n xs = if n==0 || null xs then xs else drop (dec n) (tail xs)- -- needs size 13 -- drop 0 [] = [] -- 1 -- drop 0 (x:xs) = x : xs -- 4 -- drop n [] = [] -- 5- -- drop n (x:xs) = drop (dec n) xs -- 9+ -- drop n (x:xs) = drop (x - 1) xs -- 10 conjure "drop" (drop' :: Int -> [A] -> [A]) [ pr (0 :: Int)+ , pr (1 :: Int) , pr ([] :: [A]) , prim ":" ((:) :: A -> [A] -> [A])- , prim "dec" (subtract 1 :: Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int) ] - -- take n xs = if n==0 || null xs then [] else head xs : take (dec n) (tail xs)- -- needs size 16+ -- take 0 [] = [] -- 1+ -- take 0 (x:xs) = [] -- 2+ -- take x [] = [] -- 3+ -- take x (y:xs) = y:take (x - 1) xs -- 10 conjureWithMaxSize 16 "take" (take' :: Int -> [A] -> [A]) [ pr (0 :: Int)+ , pr (1 :: Int) , pr ([] :: [A])- , prim "null" (null :: [A] -> Bool) , prim "||" ((||) :: Bool -> Bool -> Bool)- , prim "dec" ((\n -> n-1) :: Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int) , prim ":" ((:) :: A -> [A] -> [A])- , prim "head" (head :: [A] -> A)- , prim "tail" (tail :: [A] -> [A]) ]
bench/take-drop.out view
@@ -1,32 +1,34 @@ drop :: Int -> [A] -> [A]--- testing 143 combinations of argument values--- pruning with 0/0 rules+-- testing 360 combinations of argument values+-- pruning with 4/7 rules -- looking through 2 candidates of size 1 -- looking through 3 candidates of size 2--- looking through 3 candidates of size 3--- looking through 5 candidates of size 4--- looking through 23 candidates of size 5--- looking through 24 candidates of size 6--- looking through 55 candidates of size 7--- looking through 71 candidates of size 8+-- looking through 5 candidates of size 3+-- looking through 15 candidates of size 4+-- looking through 27 candidates of size 5+-- looking through 41 candidates of size 6+-- looking through 132 candidates of size 7+-- looking through 127 candidates of size 8+-- looking through 458 candidates of size 9 drop 0 [] = [] drop 0 (x:xs) = x:xs drop x [] = []-drop x (y:xs) = drop (dec x) xs+drop x (y:xs) = drop (x - 1) xs take :: Int -> [A] -> [A] -- testing 143 combinations of argument values--- pruning with 14/18 rules+-- pruning with 14/21 rules -- looking through 2 candidates of size 1--- looking through 5 candidates of size 2--- looking through 17 candidates of size 3--- looking through 42 candidates of size 4--- looking through 136 candidates of size 5--- looking through 363 candidates of size 6--- looking through 921 candidates of size 7--- looking through 2354 candidates of size 8+-- looking through 3 candidates of size 2+-- looking through 5 candidates of size 3+-- looking through 15 candidates of size 4+-- looking through 27 candidates of size 5+-- looking through 41 candidates of size 6+-- looking through 132 candidates of size 7+-- looking through 127 candidates of size 8+-- looking through 458 candidates of size 9 take 0 [] = [] take 0 (x:xs) = [] take x [] = []-take x (y:xs) = y:take (dec x) xs+take x (y:xs) = y:take (x - 1) xs
+ bench/terpret.hs view
@@ -0,0 +1,249 @@+-- terpret.hs: Benchmark execution-model problems from TerpreT+--+-- Copyright (C) 2021 Rudy Matela+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).+--+-- You can find the description of these exercises on:+--+-- 1. https://dl.acm.org/doi/pdf/10.1145/3067695.3082533+-- 2. https://www.microsoft.com/en-us/research/uploads/prod/2017/03/1608.04428.pdf+--+-- Here, we prefer the simplified definitions found in 1.+import Conjure+import System.Environment (getArgs)+++-- TerpreT #1 -- invert --++t1p :: [Bool] -> [Bool]+t1p [False] = [True]+t1p [True] = [False]+t1p [False,True] = [True,False]+t1p [True,False] = [False,True]++t1g :: [Bool] -> [Bool]+t1g ps = map not ps++t1c :: IO ()+t1c = do+ putStrLn "TerpreT benchmark #1: invert\n"++ conjure "invert" t1p primitives123++-- the same primitives are used for TerpreT #1, #2 and #3+primitives123 :: [Prim]+primitives123 =+ [ pr False+ , pr True+ , prim "not" not+ , prim "&&" (&&)+ , prim "||" (||)+ , pr ([] :: [Bool])+ , prim ":" ((:) :: Bool -> [Bool] -> [Bool])+--, prim "map" (map :: (Bool -> Bool) -> [Bool] -> [Bool])+ , prif (undefined :: [Bool])+ ]+++-- TerpreT #2 -- prepend zero --+t2p :: [Bool] -> [Bool]+t2p [True] = [False,True]+t2p [False] = [False,False]+t2p [True,True] = [False,True,True]++t2g :: [Bool] -> [Bool]+t2g ps = False:ps++t2c :: IO ()+t2c = do+ putStrLn "TerpreT benchmark #2: prepend zero\n"++ conjure "prependZero" t2p primitives123+++-- TerpreT #3 -- binary decrement --+-- here we choose to represent with little-endian notation++t3p :: [Bool] -> [Bool]+-- t3p [True] = [False]+t3p [True,True] = [False,True] -- 11 - 1 = 10+t3p [False,True] = [True,False] -- 10 - 1 = 1+t3p [False,True,True] = [True,False,True] -- 110 - 1 = 101++t3g :: [Bool] -> [Bool]+t3g [] = []+t3g (p:ps) = if p+ then False : ps+ else True : t3g ps+-- hah! Conjure surprised me again:+-- decrement [] = []+-- decrement (p:ps) = not p:(if p then ps else decrement ps)++t3c :: IO ()+t3c = do+ putStrLn "TerpreT benchmark #3: binary decrement\n"++ conjure "decrement" t3p primitives123+++-- TerpreT #4 -- 2-bit controlled shift register --++t4p1 :: (Bool,Bool,Bool) -> (Bool,Bool,Bool)+t4p1 (False, True, False) = (False, True, False)+t4p1 (False, False, True) = (False, False, True)+t4p1 (True, True, False) = (True, False, True)+t4p1 (True, False, True) = (True, True, False)++t4p2 :: Bool -> Bool -> Bool -> (Bool,Bool,Bool)+t4p2 False True False = (False, True, False)+t4p2 False False True = (False, False, True)+t4p2 True True False = (True, False, True)+t4p2 True False True = (True, True, False)++t4g :: (Bool,Bool,Bool) -> (Bool,Bool,Bool)+t4g (False,p,q) = (False,p,q)+t4g (True,p,q) = (True,q,p)++t4c :: IO ()+t4c = do+ putStrLn "TerpreT benchmark #4: controlled shift\n"++ conjure "cshift" t4p1 $ primitives123 +++ [ prim ",," ((,,) :: Bool -> Bool -> Bool -> (Bool,Bool,Bool))+ , prif (undefined :: (Bool,Bool,Bool))+ ]++ conjure "cshift" t4p2 $ primitives123 +++ [ prim ",," ((,,) :: Bool -> Bool -> Bool -> (Bool,Bool,Bool))+ , prif (undefined :: (Bool,Bool,Bool))+ ]+++-- TerpreT #5 -- Full adder --++t5p :: Bool -> Bool -> Bool -> (Bool,Bool)+t5p False False False = (False,False)+t5p False False True = (False,True )+t5p False True False = (False,True )+t5p True False False = (False,True )+t5p False True True = (True ,False)+t5p True False True = (True ,False)+t5p True True False = (True ,False)+t5p True True True = (True ,True )++t5c :: IO ()+t5c = do+ putStrLn "TerpreT benchmark #5: full adder\n"++ -- using primitives123 below works, but increases the runtime to 18 seconds+ -- let's leave it commented out so runtime is faster when running automated tests+ conjure "fadder" t5p $ -- primitives123 +++ [ prim "not" not+ , prim "," ((,) :: Bool -> Bool -> (Bool,Bool))+ , prim "==" ((==) :: Bool -> Bool -> Bool)+-- , prim "^^" ((/=) :: Bool -> Bool -> Bool) -- poor man's xor+ , prif (undefined :: (Bool,Bool))+ ]+-- the printed function is weird, but correct+-- fadder p q r = if p == q then (p,r) else (r,not r)+++-- TerpreT #6 -- 2-bit adder --+t6p :: (Bool,Bool) -> (Bool,Bool) -> (Bool,Bool,Bool)+t6p (False,False) (False,False) = (False,False,False)+t6p (True ,False) (False,True ) = (False,True ,True )+t6p (True ,True ) (False,True ) = (True ,False,False)+t6p (True ,True ) (True ,False) = (True ,False,True )+t6p (True ,True ) (True ,True ) = (True ,True ,False)++t6c :: IO ()+t6c = do+ putStrLn "TerpreT benchmark #6: 2-bit adder\n"+ conjureWith args{maxSize=6} "adder2" t6p $ primitives123 +++ [ prim ",," ((,,) :: Bool -> Bool -> Bool -> (Bool,Bool,Bool))+ , prim "==" ((==) :: Bool -> Bool -> Bool)+ , prim "^^" ((/=) :: Bool -> Bool -> Bool) -- poor man's xor+ , prif (undefined :: (Bool,Bool,Bool))+ ]+++-- TerpreT #7 -- Access --+t7p :: [A] -> Int -> A+t7p [1,0] 0 = 1+t7p [1,0] 1 = 0+t7p [0,2,1] 0 = 0+t7p [0,2,1] 1 = 2+t7p [0,2,1] 2 = 1++t7g :: [A] -> Int -> A+t7g [] _ = undefined+t7g (x:xs) 0 = x+t7g (x:xs) i = t7g xs (i-1)++t7c :: IO ()+t7c = do+ putStrLn "TerpreT benchmark #7: access\n"+ -- yes, one can implement index with index...+ conjure "`access`" t7p+ [ prim "!!" ((!!) :: [A] -> Int -> A)+ ]++ conjure "`access`" t7p+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , pr ([] :: [A])+ , prim ":" ((:) :: A -> [A] -> [A])+ , prim "-" ((-) :: Int -> Int -> Int)+ , prim "undefined" (undefined :: A)+ ]+++-- TerpreT #8 -- Decrement Elements --+t8p :: [Int] -> [Int]+t8p [2] = [1]+t8p [1,0] = [0,-1]+t8p [0,1,2] = [-1,0,1]++t8c :: IO ()+t8c = do+ putStrLn "TerpreT benchmark #8: decrement elements\n"++ conjure "decrelements" t8p+ [ pr (1 :: Int)+ , pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim "-" ((-) :: Int -> Int -> Int)+ , prim "map" (map :: (Int -> Int) -> [Int] -> [Int])+ ]+ -- above, even though map is provided, Conjure cannot use it as it cannot+ -- introduce lambdas++ conjure "decrelements" t8p+ [ pr (1 :: Int)+ , pr ([] :: [Int])+ , prim ":" ((:) :: Int -> [Int] -> [Int])+ , prim "-" ((-) :: Int -> Int -> Int)+ , prim "map" (map :: (Int -> Int) -> [Int] -> [Int])+ , prim "subtract" (subtract :: Int -> Int -> Int)+ ]+ -- now above, the story changes because of subtract, map is used+++main :: IO ()+main = do+ as <- getArgs+ case as of+ [] -> sequence_ ts+ (n:_) -> ts !! (read n - 1)+++ts :: [IO ()]+ts = [ t1c+ , t2c+ , t3c+ , t4c+ , t5c+ , t6c+ , t7c+ , t8c+ ]
+ bench/terpret.out view
@@ -0,0 +1,156 @@+TerpreT benchmark #1: invert++invert :: [Bool] -> [Bool]+-- testing 4 combinations of argument values+-- pruning with 41/51 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 5 candidates of size 3+-- looking through 10 candidates of size 4+-- looking through 17 candidates of size 5+-- looking through 41 candidates of size 6+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+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 5 candidates of size 3+prependZero ps = False:ps++TerpreT benchmark #3: binary decrement++decrement :: [Bool] -> [Bool]+-- testing 3 combinations of argument values+-- pruning with 41/51 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 5 candidates of size 3+-- looking through 10 candidates of size 4+-- looking through 17 candidates of size 5+-- looking through 41 candidates of size 6+-- looking through 86 candidates of size 7+-- looking through 202 candidates of size 8+-- looking through 487 candidates of size 9+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+-- looking through 1 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 10 candidates of size 4+-- looking through 125 candidates of size 5+-- looking through 225 candidates of size 6+-- looking through 1075 candidates of size 7+-- looking through 2457 candidates of size 8+-- looking through 8154 candidates of size 9+-- looking through 27432 candidates of size 10+-- looking through 174839 candidates of size 11+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+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 125 candidates of size 4+-- looking through 225 candidates of size 5+-- looking through 1035 candidates of size 6+-- looking through 2457 candidates of size 7+-- looking through 20250 candidates of size 8+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+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 9 candidates of size 3+-- looking through 18 candidates of size 4+-- looking through 45 candidates of size 5+-- looking through 108 candidates of size 6+-- looking through 300 candidates of size 7+-- looking through 816 candidates of size 8+-- looking through 2148 candidates of size 9+-- looking through 5520 candidates of size 10+-- looking through 13656 candidates of size 11+fadder p q r = if p == q then (p,r) else (r,not r)++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+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 8 candidates of size 4+-- looking through 128 candidates of size 5+-- looking through 408 candidates of size 6+cannot conjure++TerpreT benchmark #7: access++access :: [A] -> Int -> A+-- testing 5 combinations of argument values+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 1 candidates of size 3+xs `access` x = xs !! x++access :: [A] -> Int -> A+-- testing 5 combinations of argument values+-- pruning with 4/7 rules+-- looking through 1 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 7 candidates of size 4+-- looking through 19 candidates of size 5+-- looking through 23 candidates of size 6+-- looking through 68 candidates of size 7+[] `access` 0 = undefined+[] `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+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 7 candidates of size 4+-- looking through 9 candidates of size 5+-- looking through 29 candidates of size 6+-- looking through 41 candidates of size 7+decrelements [] = []+decrelements (x:xs) = x - 1:decrelements xs++decrelements :: [Int] -> [Int]+-- testing 3 combinations of argument values+-- pruning with 5/26 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 8 candidates of size 4+decrelements xs = map (subtract 1) xs+
changelog.md view
@@ -2,6 +2,18 @@ ============================ +v0.4.4+------++* remove need for explicit deconstructions:+ - use `-` and `1` instead of `dec`;+ - allow `mod` and `div` as deconstructions;+* bump Express requirement to v1.0.6 (bugfix);+* complete the GPS1 benchmark;+* add GPS2 and TerpreT benchmarks;+* minor fixes in the README.++ v0.4.2 ------
code-conjure.cabal view
@@ -3,7 +3,7 @@ -- Copyright (C) 2021 Rudy Matela -- Distributed under the 3-Clause BSD licence (see the file LICENSE). name: code-conjure-version: 0.4.2+version: 0.4.4 synopsis: conjure Haskell functions out of partial definitions description: Conjure is a tool that produces Haskell functions out of partial definitions.@@ -66,7 +66,7 @@ source-repository this type: git location: https://github.com/rudymatela/conjure- tag: v0.4.2+ tag: v0.4.4 library exposed-modules: Conjure@@ -81,8 +81,8 @@ build-depends: base >= 4 && < 5 , leancheck >= 0.9.10 , template-haskell- , speculate >= 0.4.12- , express >= 1.0.4+ , speculate >= 0.4.14+ , express >= 1.0.6 hs-source-dirs: src default-language: Haskell2010
eg/arith.out view
@@ -29,8 +29,8 @@ -- looking through 4 candidates of size 2 -- looking through 9 candidates of size 3 -- looking through 23 candidates of size 4--- looking through 26 candidates of size 5--- looking through 65 candidates of size 6--- looking through 75 candidates of size 7+-- looking through 29 candidates of size 5+-- looking through 71 candidates of size 6+-- looking through 113 candidates of size 7 tnpo x = x + (x + (x + 1))
eg/bools.out view
@@ -5,7 +5,7 @@ -- looking through 6 candidates of size 2 -- looking through 12 candidates of size 3 -- looking through 16 candidates of size 4--- looking through 40 candidates of size 5+-- looking through 42 candidates of size 5 and [] = True and (p:ps) = p && and ps @@ -16,7 +16,7 @@ -- looking through 6 candidates of size 2 -- looking through 12 candidates of size 3 -- looking through 16 candidates of size 4--- looking through 40 candidates of size 5+-- looking through 42 candidates of size 5 or [] = False or (p:ps) = p || or ps
eg/count.out view
@@ -17,11 +17,11 @@ -- looking through 8 candidates of size 4 -- looking through 9 candidates of size 5 -- looking through 24 candidates of size 6--- looking through 44 candidates of size 7--- looking through 108 candidates of size 8--- looking through 244 candidates of size 9--- looking through 574 candidates of size 10--- looking through 1320 candidates of size 11+-- looking through 46 candidates of size 7+-- looking through 114 candidates of size 8+-- looking through 272 candidates of size 9+-- looking through 648 candidates of size 10+-- looking through 1549 candidates of size 11 count x [] = 0 count x (y:xs) = (if x == y then 1 else 0) + count x xs
eg/dupos.out view
@@ -16,8 +16,8 @@ -- looking through 141 candidates of size 13 -- looking through 322 candidates of size 14 -- looking through 644 candidates of size 15--- looking through 1185 candidates of size 16--- looking through 2153 candidates of size 17+-- looking through 1189 candidates of size 16+-- looking through 2189 candidates of size 17 duplicates [] = [] duplicates (x:xs) = if elem x xs && not (elem x (duplicates xs)) then x:duplicates xs else duplicates xs
eg/factorial.hs view
@@ -13,77 +13,27 @@ main :: IO () main = do- -- using enumFromTo- conjure "factorial n" factorial- [ pr (1::Int)- , prim ".." (enumFromTo :: Int -> Int -> [Int])- , prim "*" ((*) :: Int -> Int -> Int)- , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int)- ]- -- explicit recursion conjure "factorial n" factorial [ pr (0::Int) , pr (1::Int) , prim "+" ((+) :: Int -> Int -> Int) , prim "*" ((*) :: Int -> Int -> Int)- , prim "dec" (subtract 1 :: Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int) ]---- the actual factorial function:--- factorial n = if n == 0 then 1 else n * factorial (n - 1)--- 1 2 3 4 5 6 7 8 9 10 11 symbols------ OR------ factorial n = if n == 0 then 1 else n * factorial (dec n)--- 1 2 3 4 5 6 7 8 9 10 symbols------ OR------ factorial n = if (isZero n) then 1 else (n * factorial (dec n))--- 1 2 3 4 5 6 7 8 9 symbols---{---- Paramorphism of Naturals encoded as integers-para :: (Int -> b -> b) -> b -> Int -> b-para (?) z = p- where- p n | n < 0 = z -- no negatives for you :-)- p 0 = z- p n = n ? p (n-1)--The following works with a maxSize of 4, but not with a maxSize of 5.+ -- should produce:+ -- factorial 0 = 1+ -- factorial x = x * factorial (x - 1) - -- using a paramorphism+ -- using foldr and enumFromTo conjure "factorial n" factorial- [ pr (1::Int)- , prim "para" (para :: (Int->Int->Int) -> Int -> Int -> Int)+ [ pr (0::Int)+ , pr (1::Int)+ , prim "+" ((+) :: Int -> Int -> Int) , prim "*" ((*) :: Int -> Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int)+ , prim ".." (enumFromTo :: Int -> Int -> [Int])+ , prim "foldr" (foldr :: (Int -> Int -> Int) -> Int -> [Int] -> Int) ]---the factorial function is the following:--fact = para (*) 1---now consider the following grow_fast function:--grow_fast = para (para (*)) 1 :: Integer -> Integer---> growFast 1-1-> growFast 2-2-> growFast 3-6-> growFast 4-2880-> growFast 5-7148302174930174893017438921... 8000 digits!-> growFast 6-stack overflow--}+ -- should produce:+ -- factorial x = foldr (*) 1 [1..x]
eg/factorial.out view
@@ -1,23 +1,24 @@ factorial :: Int -> Int -- testing 4 combinations of argument values--- pruning with 4/8 rules--- looking through 2 candidates of size 1--- looking through 1 candidates of size 2--- looking through 1 candidates of size 3--- looking through 1 candidates of size 4--- looking through 1 candidates of size 5--- looking through 9 candidates of size 6-factorial x = foldr (*) 1 [1..x]+-- pruning with 27/65 rules+-- looking through 3 candidates of size 1+-- looking through 4 candidates of size 2+-- looking through 13 candidates of size 3+-- looking through 34 candidates of size 4+-- looking through 75 candidates of size 5+-- looking through 183 candidates of size 6+-- looking through 577 candidates of size 7+factorial 0 = 1+factorial x = x * factorial (x - 1) factorial :: Int -> Int -- testing 4 combinations of argument values--- pruning with 22/42 rules+-- pruning with 32/72 rules -- looking through 3 candidates of size 1--- looking through 6 candidates of size 2--- looking through 16 candidates of size 3--- looking through 39 candidates of size 4--- looking through 78 candidates of size 5--- looking through 166 candidates of size 6-factorial 0 = 1-factorial x = x * factorial (dec x)+-- looking through 4 candidates of size 2+-- looking through 13 candidates of size 3+-- looking through 34 candidates of size 4+-- looking through 75 candidates of size 5+-- looking through 247 candidates of size 6+factorial x = foldr (*) 1 [1..x]
eg/fib01.hs view
@@ -11,6 +11,12 @@ fib01 0 1 6 = 13 fib01 0 1 7 = 21 +fibonacci :: Int -> Int+fibonacci = f 0 1+ where+ f x y 0 = y+ f x y n = f y (x + y) (n - 1)+ main :: IO () main = do conjureWithMaxSize 5 "fib01" fib01
eg/fib01.out view
@@ -20,6 +20,6 @@ -- looking through 192 candidates of size 7 -- looking through 391 candidates of size 8 -- looking through 840 candidates of size 9--- looking through 15630 candidates of size 10+-- looking through 6414 candidates of size 10 cannot conjure
eg/fibonacci.hs view
@@ -9,28 +9,17 @@ fibonacci 4 = 5 fibonacci 5 = 8 fibonacci 6 = 13-fibonacci 7 = 21 main :: IO () main = do conjure "fibonacci n" fibonacci [ pr (0::Int) , pr (1::Int)- , prim "dec" (subtract 1 :: Int -> Int)+ , pr (2::Int) , prim "+" ((+) :: Int -> Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int) ] -- expected function:--- fibonacci n = if n <= 1 then 1 else fibonacci (dec n) + fibonacci (dec (dec n))--- 1 2 3 4 5 6 7 8 9 10 11 12 13---{- to note, if dec appears later than + in the primitives list:--conjureWith ... =--> print $ canReduceTo thy (xx -+- dec xx) (dec (dec xx))-False-> print $ canReduceTo thy (dec (dec xx)) (xx -+- dec xx)-True---}+-- fibonacci 0 = 1+-- fibonacci 1 = 1+-- fibonacci x = fibonacci (x - 1) + fibonacci (x - 2)
eg/fibonacci.out view
@@ -1,18 +1,19 @@ fibonacci :: Int -> Int--- testing 8 combinations of argument values--- pruning with 9/13 rules--- looking through 3 candidates of size 1--- looking through 6 candidates of size 2--- looking through 17 candidates of size 3--- looking through 41 candidates of size 4--- looking through 76 candidates of size 5--- looking through 155 candidates of size 6--- looking through 249 candidates of size 7--- looking through 481 candidates of size 8--- looking through 762 candidates of size 9--- looking through 1413 candidates of size 10--- looking through 2257 candidates of size 11+-- testing 7 combinations of argument values+-- pruning with 21/44 rules+-- looking through 4 candidates of size 1+-- looking through 9 candidates of size 2+-- looking through 20 candidates of size 3+-- looking through 87 candidates of size 4+-- looking through 127 candidates of size 5+-- looking through 420 candidates of size 6+-- looking through 845 candidates of size 7+-- looking through 2136 candidates of size 8+-- looking through 5185 candidates of size 9+-- looking through 13000 candidates of size 10+-- looking through 33460 candidates of size 11+-- looking through 85901 candidates of size 12 fibonacci 0 = 1 fibonacci 1 = 1-fibonacci x = fibonacci (dec x) + fibonacci (dec (dec x))+fibonacci x = fibonacci (x - 1) + fibonacci (x - 2)
eg/gcd.hs view
@@ -18,7 +18,7 @@ gcd' 12 18 = 6 main :: IO ()-main = conjureWith args{requireDescent=False} "gcd a b" gcd'+main = conjure "gcd a b" gcd' [ pr (0::Int) , prim "`mod`" (mod :: Int -> Int -> Int) ]
eg/gcd.out view
@@ -4,9 +4,9 @@ -- looking through 3 candidates of size 1 -- looking through 8 candidates of size 2 -- looking through 20 candidates of size 3--- looking through 88 candidates of size 4--- looking through 202 candidates of size 5--- looking through 808 candidates of size 6+-- looking through 60 candidates of size 4+-- looking through 150 candidates of size 5+-- looking through 472 candidates of size 6 gcd x 0 = x gcd x y = gcd y (x `mod` y)
eg/ints.hs view
@@ -25,12 +25,33 @@ main :: IO () main = do- conjure "second" (second :: [Int] -> Int) primitives- conjure "third" (third :: [Int] -> Int) primitives- conjure "sum" (sum' :: [Int] -> Int) primitives- conjure "product" (product' :: [Int] -> Int) primitives+ conjure "second" (second :: [Int] -> Int)+ [ prim "null" (null :: [Int] -> Bool)+ , prim "head" (head :: [Int] -> Int)+ , prim "tail" (tail :: [Int] -> [Int])+ ] - conjure "sum" (sum' :: [Int] -> Int) primitivesWithFold+ conjure "third" (third :: [Int] -> Int)+ [ prim "null" (null :: [Int] -> Bool)+ , prim "head" (head :: [Int] -> Int)+ , prim "tail" (tail :: [Int] -> [Int])+ ]++ conjure "sum" (sum' :: [Int] -> Int)+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "*" ((*) :: Int -> Int -> Int)+ ]++ conjure "product" (product' :: [Int] -> Int)+ [ pr (0 :: Int)+ , pr (1 :: Int)+ , prim "+" ((+) :: Int -> Int -> Int)+ , prim "*" ((*) :: Int -> Int -> Int)+ ]++ conjure "sum" (sum' :: [Int] -> Int) primitivesWithFold conjure "product" (product' :: [Int] -> Int) primitivesWithFold primitives :: [Prim]@@ -39,9 +60,6 @@ , pr (1 :: Int) , prim "+" ((+) :: Int -> Int -> Int) , prim "*" ((*) :: Int -> Int -> Int)- , prim "null" (null :: [Int] -> Bool)- , prim "head" (head :: [Int] -> Int)- , prim "tail" (tail :: [Int] -> [Int]) ] primitivesWithFold :: [Prim]
eg/ints.out view
@@ -1,28 +1,28 @@ second :: [Int] -> Int -- testing 360 combinations of argument values--- pruning with 14/25 rules--- looking through 2 candidates of size 1--- looking through 5 candidates of size 2--- looking through 6 candidates of size 3+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 1 candidates of size 3 second xs = head (tail xs) third :: [Int] -> Int -- testing 360 combinations of argument values--- pruning with 14/25 rules--- looking through 2 candidates of size 1--- looking through 5 candidates of size 2--- looking through 6 candidates of size 3--- looking through 19 candidates of size 4+-- pruning with 0/0 rules+-- looking through 0 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 1 candidates of size 3+-- looking through 1 candidates of size 4 third xs = head (tail (tail xs)) sum :: [Int] -> Int -- testing 360 combinations of argument values -- pruning with 14/25 rules -- looking through 2 candidates of size 1--- looking through 5 candidates of size 2--- looking through 6 candidates of size 3--- looking through 19 candidates of size 4--- looking through 31 candidates of size 5+-- looking through 4 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 13 candidates of size 4+-- looking through 14 candidates of size 5 sum [] = 0 sum (x:xs) = x + sum xs @@ -30,10 +30,10 @@ -- testing 360 combinations of argument values -- pruning with 14/25 rules -- looking through 2 candidates of size 1--- looking through 5 candidates of size 2--- looking through 6 candidates of size 3--- looking through 19 candidates of size 4--- looking through 31 candidates of size 5+-- looking through 4 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 13 candidates of size 4+-- looking through 14 candidates of size 5 product [] = 1 product (x:xs) = x * product xs @@ -41,17 +41,17 @@ -- testing 360 combinations of argument values -- pruning with 15/26 rules -- looking through 2 candidates of size 1--- looking through 5 candidates of size 2--- looking through 6 candidates of size 3--- looking through 22 candidates of size 4+-- looking through 4 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 16 candidates of size 4 sum xs = foldr (+) 0 xs product :: [Int] -> Int -- testing 360 combinations of argument values -- pruning with 15/26 rules -- looking through 2 candidates of size 1--- looking through 5 candidates of size 2--- looking through 6 candidates of size 3--- looking through 22 candidates of size 4+-- looking through 4 candidates of size 2+-- looking through 3 candidates of size 3+-- looking through 16 candidates of size 4 product xs = foldr (*) 1 xs
eg/pow.hs view
@@ -13,16 +13,13 @@ main :: IO () main = do- -- pow b e = if e == 0 then 1 else b * pow b (dec e)- -- 1 2 3 4 5 6 7 8 9 10 11- -- somehow the above takes 30s to run, the two arguments- -- of the same type introduce the difficulty here.- -- with cases below, runtime is ok:+ -- pow x 0 = 1+ -- pow x y = x * pow x (y - 1) conjureWithMaxSize 8 "pow" pow [ pr (0::Int) , pr (1::Int) , prim "*" ((*) :: Int -> Int -> Int)- , prim "dec" (subtract 1 :: Int -> Int)+ , prim "-" ((-) :: Int -> Int -> Int) ] -- pow b e = if e == 0 then 1 else pow b (halve e) * pow b (halve e) * if odd e then b else 1
eg/pow.out view
@@ -1,15 +1,16 @@ pow :: Int -> Int -> Int -- testing 5 combinations of argument values--- pruning with 8/12 rules+-- pruning with 14/30 rules -- looking through 4 candidates of size 1--- looking through 21 candidates of size 2--- looking through 129 candidates of size 3--- looking through 517 candidates of size 4--- looking through 2346 candidates of size 5--- looking through 8550 candidates of size 6--- looking through 32487 candidates of size 7+-- looking through 18 candidates of size 2+-- looking through 101 candidates of size 3+-- looking through 324 candidates of size 4+-- looking through 1668 candidates of size 5+-- looking through 3438 candidates of size 6+-- looking through 21096 candidates of size 7+-- looking through 34780 candidates of size 8 pow x 0 = 1-pow x y = x * pow x (dec y)+pow x y = x * pow x (y - 1) pow :: Int -> Int -> Int -- testing 5 combinations of argument values@@ -17,8 +18,8 @@ -- looking through 4 candidates of size 1 -- looking through 20 candidates of size 2 -- looking through 114 candidates of size 3--- looking through 376 candidates of size 4--- looking through 1714 candidates of size 5--- looking through 4706 candidates of size 6+-- looking through 378 candidates of size 4+-- looking through 1690 candidates of size 5+-- looking through 4572 candidates of size 6 cannot conjure
eg/replicate.hs view
@@ -27,7 +27,8 @@ main = do conjure "replicate" replicate' [ pr (0 :: Int)- , prim "dec" (subtract 1 :: Int -> Int)+ , pr (1 :: Int)+ , prim "-" ((-) :: Int -> Int -> Int) , pr "" , prim ":" ((:) :: Char -> String -> String) ]
eg/replicate.out view
@@ -1,15 +1,16 @@ replicate :: Int -> Char -> [Char] -- testing 360 combinations of argument values--- pruning with 0/0 rules+-- pruning with 4/7 rules -- looking through 1 candidates of size 1 -- looking through 0 candidates of size 2 -- looking through 1 candidates of size 3 -- looking through 2 candidates of size 4--- looking through 2 candidates of size 5--- looking through 3 candidates of size 6--- looking through 4 candidates of size 7+-- looking through 3 candidates of size 5+-- looking through 7 candidates of size 6+-- looking through 5 candidates of size 7+-- looking through 16 candidates of size 8 replicate 0 c = ""-replicate x c = c:replicate (dec x) c+replicate x c = c:replicate (x - 1) c replicates :: [Char] -> Int -> [Char] -- testing 360 combinations of argument values
eg/setelem.out view
@@ -6,9 +6,9 @@ -- looking through 5 candidates of size 3 -- looking through 28 candidates of size 4 -- looking through 73 candidates of size 5--- looking through 119 candidates of size 6--- looking through 277 candidates of size 7--- looking through 895 candidates of size 8+-- looking through 124 candidates of size 6+-- looking through 305 candidates of size 7+-- looking through 999 candidates of size 8 elem x [] = False elem x (y:xs) = x == y || elem x xs @@ -20,9 +20,9 @@ -- looking through 7 candidates of size 3 -- looking through 19 candidates of size 4 -- looking through 35 candidates of size 5--- looking through 81 candidates of size 6--- looking through 229 candidates of size 7--- looking through 546 candidates of size 8+-- looking through 83 candidates of size 6+-- looking through 245 candidates of size 7+-- looking through 617 candidates of size 8 set [] = True set (x:xs) = not (elem x xs) && set xs
eg/tapps.out view
@@ -4,7 +4,7 @@ -- looking through 2 candidates of size 1 -- looking through 5 candidates of size 2 -- looking through 6 candidates of size 3--- looking through 19 candidates of size 4+-- looking through 20 candidates of size 4 third xs = head (tail (tail xs)) product :: [Int] -> Int@@ -13,8 +13,8 @@ -- looking through 2 candidates of size 1 -- looking through 5 candidates of size 2 -- looking through 6 candidates of size 3--- looking through 19 candidates of size 4--- looking through 31 candidates of size 5+-- looking through 20 candidates of size 4+-- looking through 34 candidates of size 5 product [] = 1 product (x:xs) = x * product xs @@ -24,6 +24,6 @@ -- looking through 2 candidates of size 1 -- looking through 5 candidates of size 2 -- looking through 6 candidates of size 3--- looking through 22 candidates of size 4+-- looking through 23 candidates of size 4 product xs = foldr (*) 1 xs
eg/tree.out view
@@ -46,11 +46,11 @@ -- looking through 8 candidates of size 3 -- looking through 59 candidates of size 4 -- looking through 114 candidates of size 5--- looking through 388 candidates of size 6--- looking through 1255 candidates of size 7--- looking through 3833 candidates of size 8+-- looking through 472 candidates of size 6+-- looking through 1440 candidates of size 7+-- looking through 5781 candidates of size 8 height Leaf = -1-height (Node t1 x t2) = 1 + max (height t1) (height t2)+height (Node t1 x t2) = max (height t1) (height t2) + 1 mem :: Int -> Tree -> Bool -- testing 360 combinations of argument values
mk/depend.mk view
@@ -16,6 +16,19 @@ src/Conjure/Defn.hs \ src/Conjure/Conjurable.hs \ bench/candidates.hs+bench/gps2: \+ bench/gps2.hs \+ mk/toplibs+bench/gps2.o: \+ src/Conjure/Utils.hs \+ src/Conjure/Spec.hs \+ src/Conjure/Prim.hs \+ src/Conjure.hs \+ src/Conjure/Expr.hs \+ src/Conjure/Engine.hs \+ src/Conjure/Defn.hs \+ src/Conjure/Conjurable.hs \+ bench/gps2.hs bench/gps: \ bench/gps.hs \ mk/toplibs@@ -120,6 +133,19 @@ src/Conjure/Defn.hs \ src/Conjure/Conjurable.hs \ bench/take-drop.hs+bench/terpret: \+ bench/terpret.hs \+ mk/toplibs+bench/terpret.o: \+ src/Conjure/Utils.hs \+ src/Conjure/Spec.hs \+ src/Conjure/Prim.hs \+ src/Conjure.hs \+ src/Conjure/Expr.hs \+ src/Conjure/Engine.hs \+ src/Conjure/Defn.hs \+ src/Conjure/Conjurable.hs \+ bench/terpret.hs eg/arith: \ eg/arith.hs \ mk/toplibs
src/Conjure.hs view
@@ -76,6 +76,8 @@ , reifyEquality , reifyTiers , conjureType+ , Name (..)+ , Express (..) -- * Pure interfaces , conjpure
src/Conjure/Conjurable.hs view
@@ -27,12 +27,16 @@ , conjureMkEquation , A, B, C, D, E, F , conjureIsDeconstructor+ , conjureIsDeconstruction+ , candidateDeconstructionsFrom , conjureIsUnbreakable , conjureReification , conjureReification1 , cevaluate , ceval , cevl+ , Name (..)+ , Express (..) ) where @@ -44,6 +48,7 @@ import Test.Speculate.Expr import Data.Functor ((<$>)) import Control.Applicative ((<*>))+import Data.Express import Data.Int -- for instances import Data.Word -- for instances@@ -252,7 +257,37 @@ sz = head [sz | (_, _, _, _, _, sz) <- conjureReification f , isWellTyped (sz :$ h)] esz e = eval (0::Int) (sz :$ e)- is e = esz (h :$ e) < esz e+ is e' = errorToFalse $ esz (e :$ e') < esz e'++-- the result does not increase the size for at least half the time+-- the result decreases in size for at least a third of the time+conjureIsDeconstruction :: Conjurable f => f -> Int -> Expr -> Bool+conjureIsDeconstruction f maxTests ed = length (holes ed) == 1+ && typ h == typ ed+ && count is gs >= length gs `div` 2+ && count iz gs >= length gs `div` 3+ where+ gs = take maxTests $ grounds (conjureTiersFor f) ed+ [h] = holes ed+ sz = head [sz | (_, _, _, _, _, sz) <- conjureReification f+ , isWellTyped (sz :$ h)]+ esz e = eval (0::Int) (sz :$ e)+ is e = errorToFalse $ esz e <= esz (holeValue e)+ iz e = errorToFalse $ esz e < esz (holeValue e)+ holeValue e = fromMaybe err+ . lookup h+ . fromMaybe err+ $ e `match` ed+ err = error "conjureIsDeconstructor: the impossible happened"++candidateDeconstructionsFrom :: Expr -> [Expr]+candidateDeconstructionsFrom e =+ [ e'+ | v <- vars e+ , typ v == typ e+ , let e' = e //- [(v, holeAsTypeOf v)]+ , length (holes e') == 1+ ] conjureIsUnbreakable :: Conjurable f => f -> Expr -> Bool conjureIsUnbreakable f e = head
src/Conjure/Engine.hs view
@@ -23,6 +23,7 @@ , candidateDefnsC , conjureTheory , conjureTheoryWith+ , deconstructions , module Data.Express , module Data.Express.Fixtures , module Test.Speculate.Engine@@ -40,7 +41,7 @@ import Test.LeanCheck.Tiers import Test.LeanCheck.Error (errorToTrue, errorToFalse, errorToNothing) -import Test.Speculate.Reason (Thy, rules, equations, canReduceTo, printThy, closureLimit)+import Test.Speculate.Reason (Thy, rules, equations, invalid, canReduceTo, printThy, closureLimit, doubleCheck) import Test.Speculate.Engine (theoryFromAtoms, groundBinds, boolTy) import Conjure.Expr@@ -99,15 +100,16 @@ -- | Arguments to be passed to 'conjureWith' or 'conjpureWith'. -- See 'args' for the defaults. data Args = Args- { maxTests :: Int -- ^ maximum number of tests to each candidate- , maxSize :: Int -- ^ maximum size of candidate bodies- , maxEvalRecursions :: Int -- ^ maximum number of recursive evaluations when testing candidates- , maxEquationSize :: Int -- ^ maximum size of equation operands- , maxSearchTests :: Int -- ^ maximum number of tests to search for defined values- , requireDescent :: Bool -- ^ require recursive calls to deconstruct arguments- , usePatterns :: Bool -- ^ use pattern matching to create (recursive) candidates- , showTheory :: Bool -- ^ show theory discovered by Speculate used in pruning- , forceTests :: [[Expr]] -- ^ force tests+ { maxTests :: Int -- ^ maximum number of tests to each candidate+ , maxSize :: Int -- ^ maximum size of candidate bodies+ , maxEvalRecursions :: Int -- ^ maximum number of recursive evaluations when testing candidates+ , maxEquationSize :: Int -- ^ maximum size of equation operands+ , maxSearchTests :: Int -- ^ maximum number of tests to search for defined values+ , maxDeconstructionSize :: Int -- ^ maximum size of deconstructions (e.g.: @_ - 1@)+ , requireDescent :: Bool -- ^ require recursive calls to deconstruct arguments+ , usePatterns :: Bool -- ^ use pattern matching to create (recursive) candidates+ , showTheory :: Bool -- ^ show theory discovered by Speculate used in pruning+ , forceTests :: [[Expr]] -- ^ force tests } @@ -123,15 +125,16 @@ -- * don't show the theory used in pruning args :: Args args = Args- { maxTests = 360- , maxSize = 12- , maxEvalRecursions = 60- , maxEquationSize = 5- , maxSearchTests = 100000- , requireDescent = True- , usePatterns = True- , showTheory = False- , forceTests = []+ { maxTests = 360+ , maxSize = 12+ , maxEvalRecursions = 60+ , maxEquationSize = 5+ , maxSearchTests = 100000+ , maxDeconstructionSize = 4+ , requireDescent = True+ , usePatterns = True+ , showTheory = False+ , forceTests = [] } @@ -147,8 +150,9 @@ putStrLn $ "{-" printThy thy putStrLn $ "-}"- when (filtered thy) $- putStrLn $ "-- reasoning produced incorrect properties," -- TODO: add Num+ when (not . null $ invalid thy) $+ putStrLn $ "-- reasoning produced "+ ++ show (length (invalid thy)) ++ " incorrect properties," ++ " please re-run with more tests for faster results" pr 1 rs where@@ -263,11 +267,25 @@ (ef:exs) = unfoldApp efxs keep = isRootNormalE thy . fastMostGeneralVariation ds = filter (conjureIsDeconstructor f maxTests) es- keepR | requireDescent = descends (`elem` ds) efxs+ keepR | requireDescent = descends isDecOf efxs | otherwise = const True+ where+ e `isDecOf` e' = not $ null+ [ ()+ | d <- deconstructions+ , m <- maybeToList (e `match` d)+ , filter (uncurry (/=)) m == [(holeAsTypeOf e', e')]+ ]+ deconstructions :: [Expr]+ deconstructions = filter (conjureIsDeconstruction f maxTests)+ $ concatMap candidateDeconstructionsFrom+ $ concat . take maxDeconstructionSize+ $ concatMapT forN [hs]+ where+ hs = nub $ conjureArgumentHoles f recs = filterT keepR $ foldAppProducts ef [forN h | h <- conjureArgumentHoles f]- thy = filterTheory (===)+ thy = doubleCheck (===) . theoryFromAtoms (===) maxEquationSize . (:[]) . nub $ cjHoles (prim nm f:ps) ++ [val False, val True] ++ es (===) = cjAreEqual (prim nm f:ps) maxTests@@ -285,7 +303,7 @@ efxs = conjureVarApplication nm f (ef:exs) = unfoldApp efxs - keep = isRootNormalE thy . fastMostGeneralVariation+ keep = isRootNormal thy . fastMostGeneralVariation appsWith :: Expr -> [Expr] -> [[Expr]] appsWith eh vs = enumerateAppsFor eh keep $ vs ++ es@@ -314,8 +332,22 @@ fillingsFor = products . map fillingsFor1 ds = filter (conjureIsDeconstructor f maxTests) es- keepR ep | requireDescent = descends (`elem` ds) ep+ keepR ep | requireDescent = descends isDecOf ep | otherwise = const True+ where+ e `isDecOf` e' = not $ null+ [ ()+ | d <- deconstructions+ , m <- maybeToList (e `match` d)+ , filter (uncurry (/=)) m == [(holeAsTypeOf e', e')]+ ]+ deconstructions :: [Expr]+ deconstructions = filter (conjureIsDeconstruction f maxTests)+ $ concatMap candidateDeconstructionsFrom+ $ concat . take maxDeconstructionSize+ $ concatMapT (`appsWith` vars ep) [hs]+ where+ hs = nub $ conjureArgumentHoles f recs ep = filterT (keepR ep) . discardT (\e -> e == ep) $ recsV' (tail (vars ep))@@ -331,7 +363,7 @@ where evrs = [(vs, recsV vs) | vs <- nubSort $ map (tail . vars) possiblePats] - thy = filterTheory (===)+ thy = doubleCheck (===) . theoryFromAtoms (===) maxEquationSize . (:[]) . nub $ cjHoles (prim nm f:ps) ++ [val False, val True] ++ es (===) = cjAreEqual (prim nm f:ps) maxTests@@ -393,8 +425,8 @@ -- For all possible sets of arguments (2^n - 1 elements: 1 3 7 15 31), -- see if any projects the same variables while only using deconstructions -- and where there is at least a single deconstruction.-descends :: (Expr -> Bool) -> Expr -> Expr -> Bool-descends isDec e' e = any d1 ss+descends :: (Expr -> Expr -> Bool) -> Expr -> Expr -> Bool+descends isDecOf e' e = any d1 ss where desc = any d1 . uncurry useMatches . unzip d1 exys = all isNotConstruction exys@@ -403,12 +435,13 @@ exys = zip exs eys (_:exs) = unfoldApp e' (_:eys) = unfoldApp e- isDeconstruction (p,e) | isVar p = not (null cs) && all isDec cs+ isDeconstruction (p,e) | isVar p = e `isDecOf` p | otherwise = size e < size p where cs = consts e- isNotConstruction (p,e) | isVar p = all isDec (consts e)+ isNotConstruction (p,e) | isVar p = e == p || e `isDecOf` p | otherwise = size e <= size p -- TODO: allow filter and id somehow+-- TODO: improve this function with better isNotConstruction candidatesTD :: (Expr -> Bool) -> Expr -> [Expr] -> [[Expr]]@@ -466,29 +499,6 @@ where trie = T.fromList $ equations thy ++ map swap (equations thy) (->-) = canReduceTo thy------ double checks -----filtered :: Thy -> Bool-filtered = (< 0) . closureLimit--filterTheory :: (Expr -> Expr -> Bool) -> Thy -> Thy--- TODO: move filterTheory into Speculate, and add new Thy field "doubleChecked / invalid"--- or maybe have a third list of equations:--- invalid :: (Expr,Expr)--- that lists ones that were discarded-filterTheory (===) thy = thy- { rules = rs- , equations = es- , closureLimit = if r' && e'- then closureLimit thy- else -1- }- where- correct = uncurry (===)- (rs,r') = filterAnd correct (rules thy)- (es,e') = filterAnd correct (equations thy) --- tiers utils ---
stack.yaml view
@@ -10,5 +10,5 @@ extra-deps: - leancheck-0.9.10-- speculate-0.4.12-- express-1.0.4+- speculate-0.4.14+- express-1.0.6
test/conjurable.hs view
@@ -211,7 +211,47 @@ ] ] ]++ , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "dec" (subtract 1 :: Int -> Int))+ == True++ , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "halve" ((`div` 2) :: Int -> Int))+ == True++ , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "double" ((*2) :: Int -> Int))+ == False++ , conjureIsDeconstructor (undefined :: Int -> Int) 60 (value "inc" ((+1) :: Int -> Int))+ == False -- _almost_ converges half the time++ , conjureIsDeconstructor (undefined :: [Int] -> Int) 60 (value "tail" (tail :: [Int] -> [Int]))+ == True++ , conjureIsDeconstructor (undefined :: [Int] -> Int) 60 (value "prep" ((0:) :: [Int] -> [Int]))+ == False++ , isDecon (minus :$ i_ :$ one) == True+ , isDecon (minusOne -+- i_) == True+ , isDecon (div' i_ two) == True+ , isDecon (tail' is_) == True+ , isDecon (init' is_) == True+ , isDecon (mod' i_ two) == True+ , isDecon (mod' i_ xx) == True++ , isDecon (div' xx yy) == False -- must have a hole to indicate the value being deconstructed+ , isDecon (div' i_ i_) == False -- two holes are not allowed+ , isDecon (head' is_) == False -- must deconstruct to the same type+ , isDecon (i_ -*- two) == False -- increases the size++ , candidateDeconstructionsFrom (div' xx yy) == [ div' i_ yy+ , div' xx i_+ ]+ , candidateDeconstructionsFrom (div' xx xx) == []+ , candidateDeconstructionsFrom ((xx -+- xx) -+- yy) == [(xx -+- xx) -+- i_] ]++isDecon :: Expr -> Bool+isDecon = conjureIsDeconstruction (undefined :: [Int] -> [Char] -> [Bool]) 60 ffs :: Expr -> Expr ffs e = ffE :$ e