packages feed

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 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