packages feed

code-conjure 0.5.6 → 0.5.8

raw patch · 116 files changed

+9772/−15043 lines, 116 filesdep ~expressPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: express

API changes (from Hackage documentation)

- Conjure.Conjurable: conjureIsDeconstructor :: Conjurable f => f -> Int -> Expr -> Bool
- Conjure.Engine: (-...) :: Expr -> Expr -> Expr
- Conjure.Engine: (-...-) :: Expr -> Expr -> Expr -> Expr
- Conjure.Expr: (-...) :: Expr -> Expr -> Expr
- Conjure.Expr: (-...-) :: Expr -> Expr -> Expr -> Expr
+ Conjure: [atomicNumbers] :: Args -> Bool
+ Conjure.Conjurable: conjureArgumentPats :: Conjurable f => [Expr] -> f -> [[[[Expr]]]]
+ Conjure.Conjurable: conjureIsNumeric :: Conjurable f => f -> Expr -> Bool
+ Conjure.Conjurable: conjureMostGeneralCanonicalVariation :: Conjurable f => f -> Expr -> Expr
+ Conjure.Conjurable: instance (Conjure.Conjurable.Conjurable a, Test.LeanCheck.Core.Listable a, GHC.Show.Show a, Data.Express.Express.Express a, Conjure.Conjurable.Conjurable b, Test.LeanCheck.Core.Listable b, GHC.Show.Show b, Data.Express.Express.Express b, Conjure.Conjurable.Conjurable c, Test.LeanCheck.Core.Listable c, GHC.Show.Show c, Data.Express.Express.Express c, Conjure.Conjurable.Conjurable d, Test.LeanCheck.Core.Listable d, GHC.Show.Show d, Data.Express.Express.Express d, Conjure.Conjurable.Conjurable e, Test.LeanCheck.Core.Listable e, GHC.Show.Show e, Data.Express.Express.Express e, Conjure.Conjurable.Conjurable f, Test.LeanCheck.Core.Listable f, GHC.Show.Show f, Data.Express.Express.Express f, Conjure.Conjurable.Conjurable g, Test.LeanCheck.Core.Listable g, GHC.Show.Show g, Data.Express.Express.Express g, Conjure.Conjurable.Conjurable h, Test.LeanCheck.Core.Listable h, GHC.Show.Show h, Data.Express.Express.Express h) => Conjure.Conjurable.Conjurable (a, b, c, d, e, f, g, h)
+ Conjure.Conjurable: instance (Conjure.Conjurable.Conjurable a, Test.LeanCheck.Core.Listable a, GHC.Show.Show a, Data.Express.Express.Express a, Conjure.Conjurable.Conjurable b, Test.LeanCheck.Core.Listable b, GHC.Show.Show b, Data.Express.Express.Express b, Conjure.Conjurable.Conjurable c, Test.LeanCheck.Core.Listable c, GHC.Show.Show c, Data.Express.Express.Express c, Conjure.Conjurable.Conjurable d, Test.LeanCheck.Core.Listable d, GHC.Show.Show d, Data.Express.Express.Express d, Conjure.Conjurable.Conjurable e, Test.LeanCheck.Core.Listable e, GHC.Show.Show e, Data.Express.Express.Express e, Conjure.Conjurable.Conjurable f, Test.LeanCheck.Core.Listable f, GHC.Show.Show f, Data.Express.Express.Express f, Conjure.Conjurable.Conjurable g, Test.LeanCheck.Core.Listable g, GHC.Show.Show g, Data.Express.Express.Express g, Conjure.Conjurable.Conjurable h, Test.LeanCheck.Core.Listable h, GHC.Show.Show h, Data.Express.Express.Express h, Conjure.Conjurable.Conjurable i, Test.LeanCheck.Core.Listable i, GHC.Show.Show i, Data.Express.Express.Express i) => Conjure.Conjurable.Conjurable (a, b, c, d, e, f, g, h, i)
+ Conjure.Conjurable: instance (Conjure.Conjurable.Conjurable a, Test.LeanCheck.Core.Listable a, GHC.Show.Show a, Data.Express.Express.Express a, Conjure.Conjurable.Conjurable b, Test.LeanCheck.Core.Listable b, GHC.Show.Show b, Data.Express.Express.Express b, Conjure.Conjurable.Conjurable c, Test.LeanCheck.Core.Listable c, GHC.Show.Show c, Data.Express.Express.Express c, Conjure.Conjurable.Conjurable d, Test.LeanCheck.Core.Listable d, GHC.Show.Show d, Data.Express.Express.Express d, Conjure.Conjurable.Conjurable e, Test.LeanCheck.Core.Listable e, GHC.Show.Show e, Data.Express.Express.Express e, Conjure.Conjurable.Conjurable f, Test.LeanCheck.Core.Listable f, GHC.Show.Show f, Data.Express.Express.Express f, Conjure.Conjurable.Conjurable g, Test.LeanCheck.Core.Listable g, GHC.Show.Show g, Data.Express.Express.Express g, Conjure.Conjurable.Conjurable h, Test.LeanCheck.Core.Listable h, GHC.Show.Show h, Data.Express.Express.Express h, Conjure.Conjurable.Conjurable i, Test.LeanCheck.Core.Listable i, GHC.Show.Show i, Data.Express.Express.Express i, Conjure.Conjurable.Conjurable j, Test.LeanCheck.Core.Listable j, GHC.Show.Show j, Data.Express.Express.Express j) => Conjure.Conjurable.Conjurable (a, b, c, d, e, f, g, h, i, j)
+ Conjure.Conjurable: instance (Conjure.Conjurable.Conjurable a, Test.LeanCheck.Core.Listable a, GHC.Show.Show a, Data.Express.Express.Express a, Conjure.Conjurable.Conjurable b, Test.LeanCheck.Core.Listable b, GHC.Show.Show b, Data.Express.Express.Express b, Conjure.Conjurable.Conjurable c, Test.LeanCheck.Core.Listable c, GHC.Show.Show c, Data.Express.Express.Express c, Conjure.Conjurable.Conjurable d, Test.LeanCheck.Core.Listable d, GHC.Show.Show d, Data.Express.Express.Express d, Conjure.Conjurable.Conjurable e, Test.LeanCheck.Core.Listable e, GHC.Show.Show e, Data.Express.Express.Express e, Conjure.Conjurable.Conjurable f, Test.LeanCheck.Core.Listable f, GHC.Show.Show f, Data.Express.Express.Express f, Conjure.Conjurable.Conjurable g, Test.LeanCheck.Core.Listable g, GHC.Show.Show g, Data.Express.Express.Express g, Conjure.Conjurable.Conjurable h, Test.LeanCheck.Core.Listable h, GHC.Show.Show h, Data.Express.Express.Express h, Conjure.Conjurable.Conjurable i, Test.LeanCheck.Core.Listable i, GHC.Show.Show i, Data.Express.Express.Express i, Conjure.Conjurable.Conjurable j, Test.LeanCheck.Core.Listable j, GHC.Show.Show j, Data.Express.Express.Express j, Conjure.Conjurable.Conjurable k, Test.LeanCheck.Core.Listable k, GHC.Show.Show k, Data.Express.Express.Express k) => Conjure.Conjurable.Conjurable (a, b, c, d, e, f, g, h, i, j, k)
+ Conjure.Conjurable: instance (Conjure.Conjurable.Conjurable a, Test.LeanCheck.Core.Listable a, GHC.Show.Show a, Data.Express.Express.Express a, Conjure.Conjurable.Conjurable b, Test.LeanCheck.Core.Listable b, GHC.Show.Show b, Data.Express.Express.Express b, Conjure.Conjurable.Conjurable c, Test.LeanCheck.Core.Listable c, GHC.Show.Show c, Data.Express.Express.Express c, Conjure.Conjurable.Conjurable d, Test.LeanCheck.Core.Listable d, GHC.Show.Show d, Data.Express.Express.Express d, Conjure.Conjurable.Conjurable e, Test.LeanCheck.Core.Listable e, GHC.Show.Show e, Data.Express.Express.Express e, Conjure.Conjurable.Conjurable f, Test.LeanCheck.Core.Listable f, GHC.Show.Show f, Data.Express.Express.Express f, Conjure.Conjurable.Conjurable g, Test.LeanCheck.Core.Listable g, GHC.Show.Show g, Data.Express.Express.Express g, Conjure.Conjurable.Conjurable h, Test.LeanCheck.Core.Listable h, GHC.Show.Show h, Data.Express.Express.Express h, Conjure.Conjurable.Conjurable i, Test.LeanCheck.Core.Listable i, GHC.Show.Show i, Data.Express.Express.Express i, Conjure.Conjurable.Conjurable j, Test.LeanCheck.Core.Listable j, GHC.Show.Show j, Data.Express.Express.Express j, Conjure.Conjurable.Conjurable k, Test.LeanCheck.Core.Listable k, GHC.Show.Show k, Data.Express.Express.Express k, Conjure.Conjurable.Conjurable l, Test.LeanCheck.Core.Listable l, GHC.Show.Show l, Data.Express.Express.Express l) => Conjure.Conjurable.Conjurable (a, b, c, d, e, f, g, h, i, j, k, l)
+ Conjure.Defn: canonicalizeBndn :: Bndn -> Bndn
+ Conjure.Defn: canonicalizeBndnLast :: Int -> Bndn -> Bndn
+ Conjure.Defn: hasRedundantRecursion :: Defn -> Bool
+ Conjure.Defn: hasUnbound :: Bndn -> Bool
+ Conjure.Defn: introduceVariableAt :: Int -> Bndn -> Bndn
+ Conjure.Defn: isBaseCase :: Bndn -> Bool
+ Conjure.Defn: isCompleteBndn :: Bndn -> Bool
+ Conjure.Defn: isCompleteDefn :: Defn -> Bool
+ Conjure.Defn: isDefined :: Defn -> Bool
+ Conjure.Defn: isRecursiveCase :: Bndn -> Bool
+ Conjure.Defn: isRecursiveDefn :: Defn -> Bool
+ Conjure.Defn: isRedundantByIntroduction :: Defn -> Bool
+ Conjure.Defn: isRedundantByRepetition :: Defn -> Bool
+ Conjure.Defn: isRedundantBySubsumption :: Defn -> Bool
+ Conjure.Defn: isUndefined :: Defn -> Bool
+ Conjure.Defn: noUnbound :: Bndn -> Bool
+ Conjure.Defn: printDefn :: Defn -> IO ()
+ Conjure.Defn: simplifyDefn :: Defn -> Defn
+ Conjure.Engine: ($$<) :: Expr -> [Expr] -> [Expr]
+ Conjure.Engine: (--..) :: (Expr, Expr) -> () -> Expr
+ Conjure.Engine: (--..-) :: (Expr, Expr) -> Expr -> Expr
+ Conjure.Engine: (>$$) :: [Expr] -> Expr -> [Expr]
+ Conjure.Engine: (>$$<) :: [Expr] -> [Expr] -> [Expr]
+ Conjure.Engine: [atomicNumbers] :: Args -> Bool
+ Conjure.Expr: ($!!) :: Expr -> Int -> Expr
+ Conjure.Expr: ($$<) :: Expr -> [Expr] -> [Expr]
+ Conjure.Expr: (--..) :: (Expr, Expr) -> () -> Expr
+ Conjure.Expr: (--..-) :: (Expr, Expr) -> Expr -> Expr
+ Conjure.Expr: (>$$) :: [Expr] -> Expr -> [Expr]
+ Conjure.Expr: conflicts :: Expr -> Expr -> [(Expr, Expr)]
+ Conjure.Expr: digApp :: Int -> Expr -> Expr
+ Conjure.Expr: extractApp :: Int -> Expr -> (Expr, Expr)
+ Conjure.Expr: hasAppInstanceOf :: Expr -> Expr -> Bool
+ Conjure.Expr: listConflicts :: [Expr] -> [[Expr]]
+ Conjure.Expr: updateAppAt :: Int -> (Expr -> Expr) -> Expr -> Expr
+ Conjure.Expr: varToConst :: Expr -> Expr
+ Conjure.Utils: (+++) :: Ord a => [a] -> [a] -> [a]
+ Conjure.Utils: allEqual2 :: Eq a => [a] -> Bool
+ Conjure.Utils: allEqualOn :: Eq b => (a -> b) -> [a] -> Bool
+ Conjure.Utils: both :: (a -> b) -> (a, a) -> (b, b)
+ Conjure.Utils: first :: (a -> a') -> (a, b) -> (a', b)
+ Conjure.Utils: infixr 5 +++
+ Conjure.Utils: none :: (a -> Bool) -> [a] -> Bool
+ Conjure.Utils: second :: (b -> b') -> (a, b) -> (a, b')
+ Conjure.Utils: updateAt :: Int -> (a -> a) -> [a] -> [a]
- Conjure: Args :: Int -> Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> Bool -> Bool -> Args
+ Conjure: Args :: Int -> Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Args
- Conjure: class Name a
+ Conjure: class () => Name a
- Conjure: data A
+ Conjure: data () => A
- Conjure: data B
+ Conjure: data () => B
- Conjure: data C
+ Conjure: data () => C
- Conjure: data D
+ Conjure: data () => D
- Conjure: data E
+ Conjure: data () => E
- Conjure: data Expr
+ Conjure: data () => Expr
- Conjure: data F
+ Conjure: data () => F
- Conjure.Conjurable: class Name a
+ Conjure.Conjurable: class () => Name a
- Conjure.Conjurable: data A
+ Conjure.Conjurable: data () => A
- Conjure.Conjurable: data B
+ Conjure.Conjurable: data () => B
- Conjure.Conjurable: data C
+ Conjure.Conjurable: data () => C
- Conjure.Conjurable: data D
+ Conjure.Conjurable: data () => D
- Conjure.Conjurable: data E
+ Conjure.Conjurable: data () => E
- Conjure.Conjurable: data F
+ Conjure.Conjurable: data () => F
- Conjure.Engine: (-..) :: Expr -> Expr
+ Conjure.Engine: (-..) :: Expr -> () -> Expr
- Conjure.Engine: Args :: Int -> Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> Bool -> Bool -> Args
+ Conjure.Engine: Args :: Int -> Int -> Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Args
- Conjure.Engine: class Name a
+ Conjure.Engine: class () => Name a
- Conjure.Engine: data Expr
+ Conjure.Engine: data () => Expr
- Conjure.Engine: data Thy
+ Conjure.Engine: data () => Thy
- Conjure.Engine: infix 4 -/=-
+ Conjure.Engine: infix 4 -<-
- Conjure.Engine: infixl 6 -+-
+ Conjure.Engine: infixl 6 -$-
- Conjure.Engine: infixr 5 -:-
+ Conjure.Engine: infixr 5 -++-
- Conjure.Expr: (-..) :: Expr -> Expr
+ Conjure.Expr: (-..) :: Expr -> () -> Expr
- Conjure.Expr: class Name a
+ Conjure.Expr: class () => Name a
- Conjure.Expr: data Expr
+ Conjure.Expr: data () => Expr
- Conjure.Expr: infix 4 -/=-
+ Conjure.Expr: infix 4 -<-
- Conjure.Expr: infixl 6 -+-
+ Conjure.Expr: infixl 6 -$-
- Conjure.Expr: infixr 5 -:-
+ Conjure.Expr: infixr 5 -++-

Files

.gitignore view
@@ -36,6 +36,8 @@ eg/factorial eg/fibonacci eg/fib01+eg/higher+eg/id eg/ints eg/gcd eg/list@@ -61,6 +63,7 @@ bench/gps2 bench/lowtests bench/terpret+bench/weird proto/u-conjure test/expr test/conjurable
Makefile view
@@ -8,7 +8,7 @@   -i $(shell find /usr/share/doc/ghc/html/libraries -name template-haskell.haddock | tail -1) \   $(shell grep -q "Arch Linux" /etc/lsb-release && echo --optghc=-dynamic) \   | grep -v "^Warning: Couldn't find .haddock for export [A-Z]$$"-INSTALL_DEPS = leancheck express speculate+INSTALL_DEPS = leancheck express speculate template-haskell  EG = \   eg/arith \@@ -17,6 +17,8 @@   eg/factorial \   eg/fibonacci \   eg/fib01 \+  eg/higher \+  eg/id \   eg/ints \   eg/bools \   eg/gcd \@@ -42,6 +44,7 @@   bench/gps \   bench/gps2 \   bench/terpret \+  bench/weird \   proto/u-conjure  TESTS = \
TODO.md view
@@ -3,36 +3,31 @@  A non-exhaustive list of things TO DO for Conjure. +* Review `bench/redundants.out` and prune redundant candidates.+  See sections below for ideas. -### for later -* pretty-print top-level if and case expressions?--* consider not breaking arguments in some cases-  (increased crossproduct of patterns).-  but which cases?+## Prune modulo rewriting -* exclude magic numbers?  e.g.: `1+1`?+The following is redundant, as only the second equation is necessary: -* allow conjuring from partially defined implementations?+	foo 0  =  0+	foo x  =  x + x -        partial :: ((Int -> Int) -> Int -> Int) -> (Int -> Int)-        partial impl  =  f-          where-          f n  =  if n == 0-                  then 1-                  else impl f n+Another example is: -* consider discover orderings on arguments?+	foo 0  =  1+	foo x  =  x + 1 -* consider leveraging lazyness somehow?-  (related to allowing recursion under any lazy functions)+The tricky part is when dealing with multiple arguments: -* consider leveraging polymorphism somehow?+	x ? 0  =  x+	x ? y  =  x + y -* consider allowing lambdas that introduce free variables?+One possible path would be to replace 0 in the second equation+then use the Theory to discover x + 0 is equal to 0.   This file is part of Conjure,-(C) 2021-2022 Rudy Matela,+(C) 2021-2024 Rudy Matela, Distribued under the 3-Clause BSD license.
bench/candidates.out view
@@ -1,12054 +1,6739 @@ Candidates for: foo :: Int -> Int   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,10,40,116,338,953,2702,7505,20728] 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  =  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  =  0--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 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 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  =  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 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  =  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  =  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  =  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  =  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 (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  =  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 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,7,13,66,152,361,1394,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  =  []--[] ?? 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)  =  []--[] ?? []  =  []-[] ?? (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 ++ 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,26,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  =  True-True &| False  =  False-True &| True  =  False--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  =  True--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--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---Candidates for: gcd :: Int -> Int -> Int-  pruning with 0/0 rules-  [3,0,9,0,54,0,405,0,3402] direct candidates, 0 duplicates-  [3,7,18,60,150,469,1245,3812,10634] pattern candidates, 0 duplicates--no rules.--direct candidates:--gcd x y  =  x--gcd x y  =  y--gcd x y  =  0--gcd x y  =  x `mod` x--gcd x y  =  x `mod` y--gcd x y  =  x `mod` 0--gcd x y  =  y `mod` x--gcd x y  =  y `mod` y--gcd x y  =  y `mod` 0--gcd x y  =  0 `mod` x--gcd x y  =  0 `mod` y--gcd x y  =  0 `mod` 0--gcd x y  =  (x `mod` x) `mod` x--gcd x y  =  (x `mod` x) `mod` y--gcd x y  =  (x `mod` x) `mod` 0--gcd x y  =  (x `mod` y) `mod` x--gcd x y  =  (x `mod` y) `mod` y--gcd x y  =  (x `mod` y) `mod` 0--gcd x y  =  (x `mod` 0) `mod` x--gcd x y  =  (x `mod` 0) `mod` y--gcd x y  =  (x `mod` 0) `mod` 0--gcd x y  =  (y `mod` x) `mod` x--gcd x y  =  (y `mod` x) `mod` y--gcd x y  =  (y `mod` x) `mod` 0--gcd x y  =  (y `mod` y) `mod` x--gcd x y  =  (y `mod` y) `mod` y--gcd x y  =  (y `mod` y) `mod` 0--gcd x y  =  (y `mod` 0) `mod` x--gcd x y  =  (y `mod` 0) `mod` y--gcd x y  =  (y `mod` 0) `mod` 0--gcd x y  =  (0 `mod` x) `mod` x--gcd x y  =  (0 `mod` x) `mod` y--gcd x y  =  (0 `mod` x) `mod` 0--gcd x y  =  (0 `mod` y) `mod` x--gcd x y  =  (0 `mod` y) `mod` y--gcd x y  =  (0 `mod` y) `mod` 0--gcd x y  =  (0 `mod` 0) `mod` x--gcd x y  =  (0 `mod` 0) `mod` y--gcd x y  =  (0 `mod` 0) `mod` 0--gcd x y  =  x `mod` (x `mod` x)--gcd x y  =  x `mod` (x `mod` y)--gcd x y  =  x `mod` (x `mod` 0)--gcd x y  =  x `mod` (y `mod` x)--gcd x y  =  x `mod` (y `mod` y)--gcd x y  =  x `mod` (y `mod` 0)--gcd x y  =  x `mod` (0 `mod` x)--gcd x y  =  x `mod` (0 `mod` y)--gcd x y  =  x `mod` (0 `mod` 0)--gcd x y  =  y `mod` (x `mod` x)--gcd x y  =  y `mod` (x `mod` y)--gcd x y  =  y `mod` (x `mod` 0)--gcd x y  =  y `mod` (y `mod` x)--gcd x y  =  y `mod` (y `mod` y)--gcd x y  =  y `mod` (y `mod` 0)--gcd x y  =  y `mod` (0 `mod` x)--gcd x y  =  y `mod` (0 `mod` y)--gcd x y  =  y `mod` (0 `mod` 0)--gcd x y  =  0 `mod` (x `mod` x)--gcd x y  =  0 `mod` (x `mod` y)--gcd x y  =  0 `mod` (x `mod` 0)--gcd x y  =  0 `mod` (y `mod` x)--gcd x y  =  0 `mod` (y `mod` y)--gcd x y  =  0 `mod` (y `mod` 0)--gcd x y  =  0 `mod` (0 `mod` x)--gcd x y  =  0 `mod` (0 `mod` y)--gcd x y  =  0 `mod` (0 `mod` 0)---pattern candidates:--gcd x y  =  x--gcd x y  =  y--gcd x y  =  0--gcd x 0  =  x-gcd x y  =  y--gcd x 0  =  x-gcd x y  =  0--gcd x 0  =  0-gcd x y  =  x--gcd x 0  =  0-gcd x y  =  y--gcd 0 x  =  x-gcd x y  =  0--gcd 0 x  =  0-gcd x y  =  x--gcd 0 x  =  0-gcd x y  =  y--gcd x y  =  x `mod` x--gcd x y  =  x `mod` y--gcd x y  =  x `mod` 0--gcd x y  =  y `mod` x--gcd x y  =  y `mod` y--gcd x y  =  y `mod` 0--gcd x y  =  0 `mod` x--gcd x y  =  0 `mod` y--gcd x y  =  0 `mod` 0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  y--gcd x 0  =  x-gcd x y  =  x `mod` x--gcd x 0  =  x-gcd x y  =  x `mod` y--gcd x 0  =  x-gcd x y  =  x `mod` 0--gcd x 0  =  x-gcd x y  =  y `mod` x--gcd x 0  =  x-gcd x y  =  y `mod` y--gcd x 0  =  x-gcd x y  =  y `mod` 0--gcd x 0  =  x-gcd x y  =  0 `mod` x--gcd x 0  =  x-gcd x y  =  0 `mod` y--gcd x 0  =  x-gcd x y  =  0 `mod` 0--gcd x 0  =  0-gcd x y  =  x `mod` x--gcd x 0  =  0-gcd x y  =  x `mod` y--gcd x 0  =  0-gcd x y  =  x `mod` 0--gcd x 0  =  0-gcd x y  =  y `mod` x--gcd x 0  =  0-gcd x y  =  y `mod` y--gcd x 0  =  0-gcd x y  =  y `mod` 0--gcd x 0  =  0-gcd x y  =  0 `mod` x--gcd x 0  =  0-gcd x y  =  0 `mod` y--gcd x 0  =  0-gcd x y  =  0 `mod` 0--gcd x 0  =  x `mod` x-gcd x y  =  x--gcd x 0  =  x `mod` x-gcd x y  =  y--gcd x 0  =  x `mod` x-gcd x y  =  0--gcd x 0  =  x `mod` 0-gcd x y  =  x--gcd x 0  =  x `mod` 0-gcd x y  =  y--gcd x 0  =  x `mod` 0-gcd x y  =  0--gcd x 0  =  0 `mod` x-gcd x y  =  x--gcd x 0  =  0 `mod` x-gcd x y  =  y--gcd x 0  =  0 `mod` x-gcd x y  =  0--gcd x 0  =  0 `mod` 0-gcd x y  =  x--gcd x 0  =  0 `mod` 0-gcd x y  =  y--gcd x 0  =  0 `mod` 0-gcd x y  =  0--gcd 0 x  =  x-gcd x y  =  x `mod` x--gcd 0 x  =  x-gcd x y  =  x `mod` y--gcd 0 x  =  x-gcd x y  =  x `mod` 0--gcd 0 x  =  x-gcd x y  =  y `mod` x--gcd 0 x  =  x-gcd x y  =  y `mod` y--gcd 0 x  =  x-gcd x y  =  y `mod` 0--gcd 0 x  =  x-gcd x y  =  0 `mod` x--gcd 0 x  =  x-gcd x y  =  0 `mod` y--gcd 0 x  =  x-gcd x y  =  0 `mod` 0--gcd 0 x  =  0-gcd x y  =  x `mod` x--gcd 0 x  =  0-gcd x y  =  x `mod` y--gcd 0 x  =  0-gcd x y  =  x `mod` 0--gcd 0 x  =  0-gcd x y  =  y `mod` x--gcd 0 x  =  0-gcd x y  =  y `mod` y--gcd 0 x  =  0-gcd x y  =  y `mod` 0--gcd 0 x  =  0-gcd x y  =  0 `mod` x--gcd 0 x  =  0-gcd x y  =  0 `mod` y--gcd 0 x  =  0-gcd x y  =  0 `mod` 0--gcd 0 x  =  x `mod` x-gcd x y  =  x--gcd 0 x  =  x `mod` x-gcd x y  =  y--gcd 0 x  =  x `mod` x-gcd x y  =  0--gcd 0 x  =  x `mod` 0-gcd x y  =  x--gcd 0 x  =  x `mod` 0-gcd x y  =  y--gcd 0 x  =  x `mod` 0-gcd x y  =  0--gcd 0 x  =  0 `mod` x-gcd x y  =  x--gcd 0 x  =  0 `mod` x-gcd x y  =  y--gcd 0 x  =  0 `mod` x-gcd x y  =  0--gcd 0 x  =  0 `mod` 0-gcd x y  =  x--gcd 0 x  =  0 `mod` 0-gcd x y  =  y--gcd 0 x  =  0 `mod` 0-gcd x y  =  0--gcd x y  =  (x `mod` x) `mod` x--gcd x y  =  (x `mod` x) `mod` y--gcd x y  =  (x `mod` x) `mod` 0--gcd x y  =  (x `mod` y) `mod` x--gcd x y  =  (x `mod` y) `mod` y--gcd x y  =  (x `mod` y) `mod` 0--gcd x y  =  (x `mod` 0) `mod` x--gcd x y  =  (x `mod` 0) `mod` y--gcd x y  =  (x `mod` 0) `mod` 0--gcd x y  =  (y `mod` x) `mod` x--gcd x y  =  (y `mod` x) `mod` y--gcd x y  =  (y `mod` x) `mod` 0--gcd x y  =  (y `mod` y) `mod` x--gcd x y  =  (y `mod` y) `mod` y--gcd x y  =  (y `mod` y) `mod` 0--gcd x y  =  (y `mod` 0) `mod` x--gcd x y  =  (y `mod` 0) `mod` y--gcd x y  =  (y `mod` 0) `mod` 0--gcd x y  =  (0 `mod` x) `mod` x--gcd x y  =  (0 `mod` x) `mod` y--gcd x y  =  (0 `mod` x) `mod` 0--gcd x y  =  (0 `mod` y) `mod` x--gcd x y  =  (0 `mod` y) `mod` y--gcd x y  =  (0 `mod` y) `mod` 0--gcd x y  =  (0 `mod` 0) `mod` x--gcd x y  =  (0 `mod` 0) `mod` y--gcd x y  =  (0 `mod` 0) `mod` 0--gcd x y  =  x `mod` (x `mod` x)--gcd x y  =  x `mod` (x `mod` y)--gcd x y  =  x `mod` (x `mod` 0)--gcd x y  =  x `mod` (y `mod` x)--gcd x y  =  x `mod` (y `mod` y)--gcd x y  =  x `mod` (y `mod` 0)--gcd x y  =  x `mod` (0 `mod` x)--gcd x y  =  x `mod` (0 `mod` y)--gcd x y  =  x `mod` (0 `mod` 0)--gcd x y  =  y `mod` (x `mod` x)--gcd x y  =  y `mod` (x `mod` y)--gcd x y  =  y `mod` (x `mod` 0)--gcd x y  =  y `mod` (y `mod` x)--gcd x y  =  y `mod` (y `mod` y)--gcd x y  =  y `mod` (y `mod` 0)--gcd x y  =  y `mod` (0 `mod` x)--gcd x y  =  y `mod` (0 `mod` y)--gcd x y  =  y `mod` (0 `mod` 0)--gcd x y  =  0 `mod` (x `mod` x)--gcd x y  =  0 `mod` (x `mod` y)--gcd x y  =  0 `mod` (x `mod` 0)--gcd x y  =  0 `mod` (y `mod` x)--gcd x y  =  0 `mod` (y `mod` y)--gcd x y  =  0 `mod` (y `mod` 0)--gcd x y  =  0 `mod` (0 `mod` x)--gcd x y  =  0 `mod` (0 `mod` y)--gcd x y  =  0 `mod` (0 `mod` 0)--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  x `mod` x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  x `mod` y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  x `mod` 0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  y `mod` x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  y `mod` y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  y `mod` 0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  0 `mod` x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  0 `mod` y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  0 `mod` 0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  x `mod` x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  x `mod` y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  x `mod` 0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  y `mod` x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  y `mod` y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  y `mod` 0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  0 `mod` x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  0 `mod` y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  0 `mod` 0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x `mod` x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x `mod` x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x `mod` x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x `mod` 0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x `mod` 0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  x `mod` 0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0 `mod` x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0 `mod` x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0 `mod` x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0 `mod` 0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0 `mod` 0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x-gcd x 0  =  0 `mod` 0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  x `mod` x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  x `mod` y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  x `mod` 0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  y `mod` x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  y `mod` y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  y `mod` 0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  0 `mod` x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  0 `mod` y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  0 `mod` 0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  x `mod` x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  x `mod` y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  x `mod` 0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  y `mod` x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  y `mod` y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  y `mod` 0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  0 `mod` x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  0 `mod` y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  0 `mod` 0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x `mod` x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x `mod` x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x `mod` x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x `mod` 0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x `mod` 0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  x `mod` 0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0 `mod` x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0 `mod` x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0 `mod` x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0 `mod` 0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0 `mod` 0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0-gcd x 0  =  0 `mod` 0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x `mod` x-gcd x 0  =  x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x `mod` x-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x `mod` x-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x `mod` x-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x `mod` x-gcd x 0  =  0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x `mod` x-gcd x 0  =  0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x `mod` 0-gcd x 0  =  x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x `mod` 0-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x `mod` 0-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  x `mod` 0-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  x `mod` 0-gcd x 0  =  0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  x `mod` 0-gcd x 0  =  0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0 `mod` x-gcd x 0  =  x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0 `mod` x-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0 `mod` x-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0 `mod` x-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0 `mod` x-gcd x 0  =  0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0 `mod` x-gcd x 0  =  0-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0 `mod` 0-gcd x 0  =  x-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0 `mod` 0-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0 `mod` 0-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0-gcd 0 x  =  0 `mod` 0-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0-gcd 0 x  =  0 `mod` 0-gcd x 0  =  0-gcd x y  =  y--gcd 0 0  =  0-gcd 0 x  =  0 `mod` 0-gcd x 0  =  0-gcd x y  =  0--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  x--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  x-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  y--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  x-gcd x 0  =  0-gcd x y  =  0--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  x--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  y--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  0-gcd x 0  =  x-gcd x y  =  0--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  x--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  y--gcd 0 0  =  0 `mod` 0-gcd 0 x  =  0-gcd x 0  =  0-gcd x y  =  0--gcd x 0  =  x-gcd x y  =  gcd x (x `mod` y)--gcd x 0  =  x-gcd x y  =  gcd x (y `mod` x)--gcd x 0  =  x-gcd x y  =  gcd x (y `mod` y)--gcd x 0  =  x-gcd x y  =  gcd x (0 `mod` y)--gcd x 0  =  x-gcd x y  =  gcd y (x `mod` y)--gcd x 0  =  x-gcd x y  =  gcd y (y `mod` x)--gcd x 0  =  x-gcd x y  =  gcd y (y `mod` y)--gcd x 0  =  x-gcd x y  =  gcd y (0 `mod` y)--gcd x 0  =  x-gcd x y  =  gcd 0 (x `mod` y)--gcd x 0  =  x-gcd x y  =  gcd 0 (y `mod` x)--gcd x 0  =  x-gcd x y  =  gcd 0 (y `mod` y)--gcd x 0  =  x-gcd x y  =  gcd 0 (0 `mod` y)--gcd x 0  =  x-gcd x y  =  gcd (x `mod` x) x--gcd x 0  =  x-gcd x y  =  gcd (x `mod` x) y--gcd x 0  =  x-gcd x y  =  gcd (x `mod` x) 0--gcd x 0  =  x-gcd x y  =  gcd (x `mod` y) x--gcd x 0  =  x-gcd x y  =  gcd (x `mod` y) y--gcd x 0  =  x-gcd x y  =  gcd (x `mod` y) 0--gcd x 0  =  x-gcd x y  =  gcd (y `mod` x) x--gcd x 0  =  x-gcd x y  =  gcd (y `mod` x) y--gcd x 0  =  x-gcd x y  =  gcd (y `mod` x) 0--gcd x 0  =  x-gcd x y  =  gcd (0 `mod` x) x--gcd x 0  =  x-gcd x y  =  gcd (0 `mod` x) y--gcd x 0  =  x-gcd x y  =  gcd (0 `mod` x) 0--gcd x 0  =  0-gcd x y  =  gcd x (x `mod` y)--gcd x 0  =  0-gcd x y  =  gcd x (y `mod` x)--gcd x 0  =  0-gcd x y  =  gcd x (y `mod` y)--gcd x 0  =  0-gcd x y  =  gcd x (0 `mod` y)--gcd x 0  =  0-gcd x y  =  gcd y (x `mod` y)--gcd x 0  =  0-gcd x y  =  gcd y (y `mod` x)--gcd x 0  =  0-gcd x y  =  gcd y (y `mod` y)--gcd x 0  =  0-gcd x y  =  gcd y (0 `mod` y)--gcd x 0  =  0-gcd x y  =  gcd 0 (x `mod` y)--gcd x 0  =  0-gcd x y  =  gcd 0 (y `mod` x)--gcd x 0  =  0-gcd x y  =  gcd 0 (y `mod` y)--gcd x 0  =  0-gcd x y  =  gcd 0 (0 `mod` y)--gcd x 0  =  0-gcd x y  =  gcd (x `mod` x) x--gcd x 0  =  0-gcd x y  =  gcd (x `mod` x) y--gcd x 0  =  0-gcd x y  =  gcd (x `mod` x) 0--gcd x 0  =  0-gcd x y  =  gcd (x `mod` y) x--gcd x 0  =  0-gcd x y  =  gcd (x `mod` y) y--gcd x 0  =  0-gcd x y  =  gcd (x `mod` y) 0--gcd x 0  =  0-gcd x y  =  gcd (y `mod` x) x--gcd x 0  =  0-gcd x y  =  gcd (y `mod` x) y--gcd x 0  =  0-gcd x y  =  gcd (y `mod` x) 0--gcd x 0  =  0-gcd x y  =  gcd (0 `mod` x) x--gcd x 0  =  0-gcd x y  =  gcd (0 `mod` x) y--gcd x 0  =  0-gcd x y  =  gcd (0 `mod` x) 0--gcd 0 x  =  x-gcd x y  =  gcd x (x `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd x (y `mod` x)--gcd 0 x  =  x-gcd x y  =  gcd x (y `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd x (0 `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd y (x `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd y (y `mod` x)--gcd 0 x  =  x-gcd x y  =  gcd y (y `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd y (0 `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd 0 (x `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd 0 (y `mod` x)--gcd 0 x  =  x-gcd x y  =  gcd 0 (y `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd 0 (0 `mod` y)--gcd 0 x  =  x-gcd x y  =  gcd (x `mod` x) x--gcd 0 x  =  x-gcd x y  =  gcd (x `mod` x) y--gcd 0 x  =  x-gcd x y  =  gcd (x `mod` x) 0--gcd 0 x  =  x-gcd x y  =  gcd (x `mod` y) x--gcd 0 x  =  x-gcd x y  =  gcd (x `mod` y) y--gcd 0 x  =  x-gcd x y  =  gcd (x `mod` y) 0--gcd 0 x  =  x-gcd x y  =  gcd (y `mod` x) x--gcd 0 x  =  x-gcd x y  =  gcd (y `mod` x) y--gcd 0 x  =  x-gcd x y  =  gcd (y `mod` x) 0--gcd 0 x  =  x-gcd x y  =  gcd (0 `mod` x) x--gcd 0 x  =  x-gcd x y  =  gcd (0 `mod` x) y--gcd 0 x  =  x-gcd x y  =  gcd (0 `mod` x) 0--gcd 0 x  =  0-gcd x y  =  gcd x (x `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd x (y `mod` x)--gcd 0 x  =  0-gcd x y  =  gcd x (y `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd x (0 `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd y (x `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd y (y `mod` x)--gcd 0 x  =  0-gcd x y  =  gcd y (y `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd y (0 `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd 0 (x `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd 0 (y `mod` x)--gcd 0 x  =  0-gcd x y  =  gcd 0 (y `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd 0 (0 `mod` y)--gcd 0 x  =  0-gcd x y  =  gcd (x `mod` x) x--gcd 0 x  =  0-gcd x y  =  gcd (x `mod` x) y--gcd 0 x  =  0-gcd x y  =  gcd (x `mod` x) 0--gcd 0 x  =  0-gcd x y  =  gcd (x `mod` y) x--gcd 0 x  =  0-gcd x y  =  gcd (x `mod` y) y--gcd 0 x  =  0-gcd x y  =  gcd (x `mod` y) 0--gcd 0 x  =  0-gcd x y  =  gcd (y `mod` x) x--gcd 0 x  =  0-gcd x y  =  gcd (y `mod` x) y--gcd 0 x  =  0-gcd x y  =  gcd (y `mod` x) 0--gcd 0 x  =  0-gcd x y  =  gcd (0 `mod` x) x--gcd 0 x  =  0-gcd x y  =  gcd (0 `mod` x) y--gcd 0 x  =  0-gcd x y  =  gcd (0 `mod` x) 0--gcd x 0  =  x-gcd x y  =  (x `mod` x) `mod` x--gcd x 0  =  x-gcd x y  =  (x `mod` x) `mod` y--gcd x 0  =  x-gcd x y  =  (x `mod` x) `mod` 0--gcd x 0  =  x-gcd x y  =  (x `mod` y) `mod` x--gcd x 0  =  x-gcd x y  =  (x `mod` y) `mod` y--gcd x 0  =  x-gcd x y  =  (x `mod` y) `mod` 0--gcd x 0  =  x-gcd x y  =  (x `mod` 0) `mod` x--gcd x 0  =  x-gcd x y  =  (x `mod` 0) `mod` y--gcd x 0  =  x-gcd x y  =  (x `mod` 0) `mod` 0--gcd x 0  =  x-gcd x y  =  (y `mod` x) `mod` x--gcd x 0  =  x-gcd x y  =  (y `mod` x) `mod` y--gcd x 0  =  x-gcd x y  =  (y `mod` x) `mod` 0--gcd x 0  =  x-gcd x y  =  (y `mod` y) `mod` x--gcd x 0  =  x-gcd x y  =  (y `mod` y) `mod` y--gcd x 0  =  x-gcd x y  =  (y `mod` y) `mod` 0--gcd x 0  =  x-gcd x y  =  (y `mod` 0) `mod` x--gcd x 0  =  x-gcd x y  =  (y `mod` 0) `mod` y--gcd x 0  =  x-gcd x y  =  (y `mod` 0) `mod` 0--gcd x 0  =  x-gcd x y  =  (0 `mod` x) `mod` x--gcd x 0  =  x-gcd x y  =  (0 `mod` x) `mod` y--gcd x 0  =  x-gcd x y  =  (0 `mod` x) `mod` 0--gcd x 0  =  x-gcd x y  =  (0 `mod` y) `mod` x--gcd x 0  =  x-gcd x y  =  (0 `mod` y) `mod` y--gcd x 0  =  x-gcd x y  =  (0 `mod` y) `mod` 0--gcd x 0  =  x-gcd x y  =  (0 `mod` 0) `mod` x--gcd x 0  =  x-gcd x y  =  (0 `mod` 0) `mod` y--gcd x 0  =  x-gcd x y  =  (0 `mod` 0) `mod` 0--gcd x 0  =  x-gcd x y  =  x `mod` (x `mod` x)--gcd x 0  =  x-gcd x y  =  x `mod` (x `mod` y)--gcd x 0  =  x-gcd x y  =  x `mod` (x `mod` 0)--gcd x 0  =  x-gcd x y  =  x `mod` (y `mod` x)--gcd x 0  =  x-gcd x y  =  x `mod` (y `mod` y)--gcd x 0  =  x-gcd x y  =  x `mod` (y `mod` 0)--gcd x 0  =  x-gcd x y  =  x `mod` (0 `mod` x)--gcd x 0  =  x-gcd x y  =  x `mod` (0 `mod` y)--gcd x 0  =  x-gcd x y  =  x `mod` (0 `mod` 0)--gcd x 0  =  x-gcd x y  =  y `mod` (x `mod` x)--gcd x 0  =  x-gcd x y  =  y `mod` (x `mod` y)--gcd x 0  =  x-gcd x y  =  y `mod` (x `mod` 0)--gcd x 0  =  x-gcd x y  =  y `mod` (y `mod` x)--gcd x 0  =  x-gcd x y  =  y `mod` (y `mod` y)--gcd x 0  =  x-gcd x y  =  y `mod` (y `mod` 0)--gcd x 0  =  x-gcd x y  =  y `mod` (0 `mod` x)--gcd x 0  =  x-gcd x y  =  y `mod` (0 `mod` y)--gcd x 0  =  x-gcd x y  =  y `mod` (0 `mod` 0)--gcd x 0  =  x-gcd x y  =  0 `mod` (x `mod` x)--gcd x 0  =  x-gcd x y  =  0 `mod` (x `mod` y)--gcd x 0  =  x-gcd x y  =  0 `mod` (x `mod` 0)--gcd x 0  =  x-gcd x y  =  0 `mod` (y `mod` x)--gcd x 0  =  x-gcd x y  =  0 `mod` (y `mod` y)--gcd x 0  =  x-gcd x y  =  0 `mod` (y `mod` 0)--gcd x 0  =  x-gcd x y  =  0 `mod` (0 `mod` x)--gcd x 0  =  x-gcd x y  =  0 `mod` (0 `mod` y)--gcd x 0  =  x-gcd x y  =  0 `mod` (0 `mod` 0)--gcd x 0  =  0-gcd x y  =  (x `mod` x) `mod` x--gcd x 0  =  0-gcd x y  =  (x `mod` x) `mod` y--gcd x 0  =  0-gcd x y  =  (x `mod` x) `mod` 0--gcd x 0  =  0-gcd x y  =  (x `mod` y) `mod` x--gcd x 0  =  0-gcd x y  =  (x `mod` y) `mod` y--gcd x 0  =  0-gcd x y  =  (x `mod` y) `mod` 0--gcd x 0  =  0-gcd x y  =  (x `mod` 0) `mod` x--gcd x 0  =  0-gcd x y  =  (x `mod` 0) `mod` y--gcd x 0  =  0-gcd x y  =  (x `mod` 0) `mod` 0--gcd x 0  =  0-gcd x y  =  (y `mod` x) `mod` x--gcd x 0  =  0-gcd x y  =  (y `mod` x) `mod` y--gcd x 0  =  0-gcd x y  =  (y `mod` x) `mod` 0--gcd x 0  =  0-gcd x y  =  (y `mod` y) `mod` x--gcd x 0  =  0-gcd x y  =  (y `mod` y) `mod` y--gcd x 0  =  0-gcd x y  =  (y `mod` y) `mod` 0--gcd x 0  =  0-gcd x y  =  (y `mod` 0) `mod` x--gcd x 0  =  0-gcd x y  =  (y `mod` 0) `mod` y--gcd x 0  =  0-gcd x y  =  (y `mod` 0) `mod` 0--gcd x 0  =  0-gcd x y  =  (0 `mod` x) `mod` x--gcd x 0  =  0-gcd x y  =  (0 `mod` x) `mod` y--gcd x 0  =  0-gcd x y  =  (0 `mod` x) `mod` 0--gcd x 0  =  0-gcd x y  =  (0 `mod` y) `mod` x--gcd x 0  =  0-gcd x y  =  (0 `mod` y) `mod` y--gcd x 0  =  0-gcd x y  =  (0 `mod` y) `mod` 0--gcd x 0  =  0-gcd x y  =  (0 `mod` 0) `mod` x--gcd x 0  =  0-gcd x y  =  (0 `mod` 0) `mod` y--gcd x 0  =  0-gcd x y  =  (0 `mod` 0) `mod` 0--gcd x 0  =  0-gcd x y  =  x `mod` (x `mod` x)--gcd x 0  =  0-gcd x y  =  x `mod` (x `mod` y)--gcd x 0  =  0-gcd x y  =  x `mod` (x `mod` 0)--gcd x 0  =  0-gcd x y  =  x `mod` (y `mod` x)--gcd x 0  =  0-gcd x y  =  x `mod` (y `mod` y)--gcd x 0  =  0-gcd x y  =  x `mod` (y `mod` 0)--gcd x 0  =  0-gcd x y  =  x `mod` (0 `mod` x)--gcd x 0  =  0-gcd x y  =  x `mod` (0 `mod` y)--gcd x 0  =  0-gcd x y  =  x `mod` (0 `mod` 0)--gcd x 0  =  0-gcd x y  =  y `mod` (x `mod` x)--gcd x 0  =  0-gcd x y  =  y `mod` (x `mod` y)--gcd x 0  =  0-gcd x y  =  y `mod` (x `mod` 0)--gcd x 0  =  0-gcd x y  =  y `mod` (y `mod` x)--gcd x 0  =  0-gcd x y  =  y `mod` (y `mod` y)--gcd x 0  =  0-gcd x y  =  y `mod` (y `mod` 0)--gcd x 0  =  0-gcd x y  =  y `mod` (0 `mod` x)--gcd x 0  =  0-gcd x y  =  y `mod` (0 `mod` y)--gcd x 0  =  0-gcd x y  =  y `mod` (0 `mod` 0)--gcd x 0  =  0-gcd x y  =  0 `mod` (x `mod` x)--gcd x 0  =  0-gcd x y  =  0 `mod` (x `mod` y)--gcd x 0  =  0-gcd x y  =  0 `mod` (x `mod` 0)--gcd x 0  =  0-gcd x y  =  0 `mod` (y `mod` x)--gcd x 0  =  0-gcd x y  =  0 `mod` (y `mod` y)--gcd x 0  =  0-gcd x y  =  0 `mod` (y `mod` 0)--gcd x 0  =  0-gcd x y  =  0 `mod` (0 `mod` x)--gcd x 0  =  0-gcd x y  =  0 `mod` (0 `mod` y)--gcd x 0  =  0-gcd x y  =  0 `mod` (0 `mod` 0)--gcd x 0  =  x `mod` x-gcd x y  =  x `mod` y--gcd x 0  =  x `mod` x-gcd x y  =  x `mod` 0--gcd x 0  =  x `mod` x-gcd x y  =  y `mod` x--gcd x 0  =  x `mod` x-gcd x y  =  y `mod` y--gcd x 0  =  x `mod` x-gcd x y  =  y `mod` 0--gcd x 0  =  x `mod` x-gcd x y  =  0 `mod` x--gcd x 0  =  x `mod` x-gcd x y  =  0 `mod` y--gcd x 0  =  x `mod` x-gcd x y  =  0 `mod` 0--gcd x 0  =  x `mod` 0-gcd x y  =  x `mod` x--gcd x 0  =  x `mod` 0-gcd x y  =  x `mod` y--gcd x 0  =  x `mod` 0-gcd x y  =  y `mod` x--gcd x 0  =  x `mod` 0-gcd x y  =  y `mod` y--gcd x 0  =  x `mod` 0-gcd x y  =  y `mod` 0--gcd x 0  =  x `mod` 0-gcd x y  =  0 `mod` x--gcd x 0  =  x `mod` 0-gcd x y  =  0 `mod` y--gcd x 0  =  x `mod` 0-gcd x y  =  0 `mod` 0--gcd x 0  =  0 `mod` x-gcd x y  =  x `mod` x--gcd x 0  =  0 `mod` x-gcd x y  =  x `mod` y--gcd x 0  =  0 `mod` x-gcd x y  =  x `mod` 0--gcd x 0  =  0 `mod` x-gcd x y  =  y `mod` x--gcd x 0  =  0 `mod` x-gcd x y  =  y `mod` y--gcd x 0  =  0 `mod` x-gcd x y  =  y `mod` 0--gcd x 0  =  0 `mod` x-gcd x y  =  0 `mod` y--gcd x 0  =  0 `mod` x-gcd x y  =  0 `mod` 0--gcd x 0  =  0 `mod` 0-gcd x y  =  x `mod` x--gcd x 0  =  0 `mod` 0-gcd x y  =  x `mod` y--gcd x 0  =  0 `mod` 0-gcd x y  =  x `mod` 0--gcd x 0  =  0 `mod` 0-gcd x y  =  y `mod` x--gcd x 0  =  0 `mod` 0-gcd x y  =  y `mod` y--gcd x 0  =  0 `mod` 0-gcd x y  =  y `mod` 0--gcd x 0  =  0 `mod` 0-gcd x y  =  0 `mod` x--gcd x 0  =  0 `mod` 0-gcd x y  =  0 `mod` y--gcd x 0  =  (x `mod` x) `mod` x-gcd x y  =  x--gcd x 0  =  (x `mod` x) `mod` x-gcd x y  =  y--gcd x 0  =  (x `mod` x) `mod` x-gcd x y  =  0--gcd x 0  =  (x `mod` x) `mod` 0-gcd x y  =  x--gcd x 0  =  (x `mod` x) `mod` 0-gcd x y  =  y--gcd x 0  =  (x `mod` x) `mod` 0-gcd x y  =  0--gcd x 0  =  (x `mod` 0) `mod` x-gcd x y  =  x--gcd x 0  =  (x `mod` 0) `mod` x-gcd x y  =  y--gcd x 0  =  (x `mod` 0) `mod` x-gcd x y  =  0--gcd x 0  =  (x `mod` 0) `mod` 0-gcd x y  =  x--gcd x 0  =  (x `mod` 0) `mod` 0-gcd x y  =  y--gcd x 0  =  (x `mod` 0) `mod` 0-gcd x y  =  0--gcd x 0  =  (0 `mod` x) `mod` x-gcd x y  =  x--gcd x 0  =  (0 `mod` x) `mod` x-gcd x y  =  y--gcd x 0  =  (0 `mod` x) `mod` x-gcd x y  =  0--gcd x 0  =  (0 `mod` x) `mod` 0-gcd x y  =  x--gcd x 0  =  (0 `mod` x) `mod` 0-gcd x y  =  y--gcd x 0  =  (0 `mod` x) `mod` 0-gcd x y  =  0--gcd x 0  =  (0 `mod` 0) `mod` x-gcd x y  =  x--gcd x 0  =  (0 `mod` 0) `mod` x-gcd x y  =  y--gcd x 0  =  (0 `mod` 0) `mod` x-gcd x y  =  0--gcd x 0  =  (0 `mod` 0) `mod` 0-gcd x y  =  x--gcd x 0  =  (0 `mod` 0) `mod` 0-gcd x y  =  y--gcd x 0  =  (0 `mod` 0) `mod` 0-gcd x y  =  0--gcd x 0  =  x `mod` (x `mod` x)-gcd x y  =  x--gcd x 0  =  x `mod` (x `mod` x)-gcd x y  =  y--gcd x 0  =  x `mod` (x `mod` x)-gcd x y  =  0--gcd x 0  =  x `mod` (x `mod` 0)-gcd x y  =  x--gcd x 0  =  x `mod` (x `mod` 0)-gcd x y  =  y--gcd x 0  =  x `mod` (x `mod` 0)-gcd x y  =  0--gcd x 0  =  x `mod` (0 `mod` x)-gcd x y  =  x--gcd x 0  =  x `mod` (0 `mod` x)-gcd x y  =  y--gcd x 0  =  x `mod` (0 `mod` x)-gcd x y  =  0--gcd x 0  =  x `mod` (0 `mod` 0)-gcd x y  =  x--gcd x 0  =  x `mod` (0 `mod` 0)-gcd x y  =  y--gcd x 0  =  x `mod` (0 `mod` 0)-gcd x y  =  0--gcd x 0  =  0 `mod` (x `mod` x)-gcd x y  =  x--gcd x 0  =  0 `mod` (x `mod` x)-gcd x y  =  y--gcd x 0  =  0 `mod` (x `mod` x)-gcd x y  =  0--gcd x 0  =  0 `mod` (x `mod` 0)-gcd x y  =  x--gcd x 0  =  0 `mod` (x `mod` 0)-gcd x y  =  y--gcd x 0  =  0 `mod` (x `mod` 0)-gcd x y  =  0--gcd x 0  =  0 `mod` (0 `mod` x)-gcd x y  =  x--gcd x 0  =  0 `mod` (0 `mod` x)-gcd x y  =  y--gcd x 0  =  0 `mod` (0 `mod` x)-gcd x y  =  0--gcd x 0  =  0 `mod` (0 `mod` 0)-gcd x y  =  x--gcd x 0  =  0 `mod` (0 `mod` 0)-gcd x y  =  y--gcd x 0  =  0 `mod` (0 `mod` 0)-gcd x y  =  0--gcd 0 x  =  x-gcd x y  =  (x `mod` x) `mod` x--gcd 0 x  =  x-gcd x y  =  (x `mod` x) `mod` y--gcd 0 x  =  x-gcd x y  =  (x `mod` x) `mod` 0--gcd 0 x  =  x-gcd x y  =  (x `mod` y) `mod` x--gcd 0 x  =  x-gcd x y  =  (x `mod` y) `mod` y--gcd 0 x  =  x-gcd x y  =  (x `mod` y) `mod` 0--gcd 0 x  =  x-gcd x y  =  (x `mod` 0) `mod` x--gcd 0 x  =  x-gcd x y  =  (x `mod` 0) `mod` y--gcd 0 x  =  x-gcd x y  =  (x `mod` 0) `mod` 0--gcd 0 x  =  x-gcd x y  =  (y `mod` x) `mod` x--gcd 0 x  =  x-gcd x y  =  (y `mod` x) `mod` y--gcd 0 x  =  x-gcd x y  =  (y `mod` x) `mod` 0--gcd 0 x  =  x-gcd x y  =  (y `mod` y) `mod` x--gcd 0 x  =  x-gcd x y  =  (y `mod` y) `mod` y--gcd 0 x  =  x-gcd x y  =  (y `mod` y) `mod` 0--gcd 0 x  =  x-gcd x y  =  (y `mod` 0) `mod` x--gcd 0 x  =  x-gcd x y  =  (y `mod` 0) `mod` y--gcd 0 x  =  x-gcd x y  =  (y `mod` 0) `mod` 0--gcd 0 x  =  x-gcd x y  =  (0 `mod` x) `mod` x--gcd 0 x  =  x-gcd x y  =  (0 `mod` x) `mod` y--gcd 0 x  =  x-gcd x y  =  (0 `mod` x) `mod` 0--gcd 0 x  =  x-gcd x y  =  (0 `mod` y) `mod` x--gcd 0 x  =  x-gcd x y  =  (0 `mod` y) `mod` y--gcd 0 x  =  x-gcd x y  =  (0 `mod` y) `mod` 0--gcd 0 x  =  x-gcd x y  =  (0 `mod` 0) `mod` x--gcd 0 x  =  x-gcd x y  =  (0 `mod` 0) `mod` y--gcd 0 x  =  x-gcd x y  =  (0 `mod` 0) `mod` 0--gcd 0 x  =  x-gcd x y  =  x `mod` (x `mod` x)--gcd 0 x  =  x-gcd x y  =  x `mod` (x `mod` y)--gcd 0 x  =  x-gcd x y  =  x `mod` (x `mod` 0)--gcd 0 x  =  x-gcd x y  =  x `mod` (y `mod` x)--gcd 0 x  =  x-gcd x y  =  x `mod` (y `mod` y)--gcd 0 x  =  x-gcd x y  =  x `mod` (y `mod` 0)--gcd 0 x  =  x-gcd x y  =  x `mod` (0 `mod` x)--gcd 0 x  =  x-gcd x y  =  x `mod` (0 `mod` y)--gcd 0 x  =  x-gcd x y  =  x `mod` (0 `mod` 0)--gcd 0 x  =  x-gcd x y  =  y `mod` (x `mod` x)--gcd 0 x  =  x-gcd x y  =  y `mod` (x `mod` y)--gcd 0 x  =  x-gcd x y  =  y `mod` (x `mod` 0)--gcd 0 x  =  x-gcd x y  =  y `mod` (y `mod` x)--gcd 0 x  =  x-gcd x y  =  y `mod` (y `mod` y)--gcd 0 x  =  x-gcd x y  =  y `mod` (y `mod` 0)--gcd 0 x  =  x-gcd x y  =  y `mod` (0 `mod` x)--gcd 0 x  =  x-gcd x y  =  y `mod` (0 `mod` y)--gcd 0 x  =  x-gcd x y  =  y `mod` (0 `mod` 0)--gcd 0 x  =  x-gcd x y  =  0 `mod` (x `mod` x)--gcd 0 x  =  x-gcd x y  =  0 `mod` (x `mod` y)--gcd 0 x  =  x-gcd x y  =  0 `mod` (x `mod` 0)--gcd 0 x  =  x-gcd x y  =  0 `mod` (y `mod` x)--gcd 0 x  =  x-gcd x y  =  0 `mod` (y `mod` y)--gcd 0 x  =  x-gcd x y  =  0 `mod` (y `mod` 0)--gcd 0 x  =  x-gcd x y  =  0 `mod` (0 `mod` x)--gcd 0 x  =  x-gcd x y  =  0 `mod` (0 `mod` y)--gcd 0 x  =  x-gcd x y  =  0 `mod` (0 `mod` 0)--gcd 0 x  =  0-gcd x y  =  (x `mod` x) `mod` x--gcd 0 x  =  0-gcd x y  =  (x `mod` x) `mod` y--gcd 0 x  =  0-gcd x y  =  (x `mod` x) `mod` 0--gcd 0 x  =  0-gcd x y  =  (x `mod` y) `mod` x--gcd 0 x  =  0-gcd x y  =  (x `mod` y) `mod` y--gcd 0 x  =  0-gcd x y  =  (x `mod` y) `mod` 0--gcd 0 x  =  0-gcd x y  =  (x `mod` 0) `mod` x--gcd 0 x  =  0-gcd x y  =  (x `mod` 0) `mod` y--gcd 0 x  =  0-gcd x y  =  (x `mod` 0) `mod` 0--gcd 0 x  =  0-gcd x y  =  (y `mod` x) `mod` x--gcd 0 x  =  0-gcd x y  =  (y `mod` x) `mod` y--gcd 0 x  =  0-gcd x y  =  (y `mod` x) `mod` 0--gcd 0 x  =  0-gcd x y  =  (y `mod` y) `mod` x--gcd 0 x  =  0-gcd x y  =  (y `mod` y) `mod` y--gcd 0 x  =  0-gcd x y  =  (y `mod` y) `mod` 0--gcd 0 x  =  0-gcd x y  =  (y `mod` 0) `mod` x--gcd 0 x  =  0-gcd x y  =  (y `mod` 0) `mod` y--gcd 0 x  =  0-gcd x y  =  (y `mod` 0) `mod` 0--gcd 0 x  =  0-gcd x y  =  (0 `mod` x) `mod` x--gcd 0 x  =  0-gcd x y  =  (0 `mod` x) `mod` y--gcd 0 x  =  0-gcd x y  =  (0 `mod` x) `mod` 0--gcd 0 x  =  0-gcd x y  =  (0 `mod` y) `mod` x--gcd 0 x  =  0-gcd x y  =  (0 `mod` y) `mod` y--gcd 0 x  =  0-gcd x y  =  (0 `mod` y) `mod` 0--gcd 0 x  =  0-gcd x y  =  (0 `mod` 0) `mod` x--gcd 0 x  =  0-gcd x y  =  (0 `mod` 0) `mod` y--gcd 0 x  =  0-gcd x y  =  (0 `mod` 0) `mod` 0--gcd 0 x  =  0-gcd x y  =  x `mod` (x `mod` x)--gcd 0 x  =  0-gcd x y  =  x `mod` (x `mod` y)--gcd 0 x  =  0-gcd x y  =  x `mod` (x `mod` 0)--gcd 0 x  =  0-gcd x y  =  x `mod` (y `mod` x)--gcd 0 x  =  0-gcd x y  =  x `mod` (y `mod` y)--gcd 0 x  =  0-gcd x y  =  x `mod` (y `mod` 0)--gcd 0 x  =  0-gcd x y  =  x `mod` (0 `mod` x)--gcd 0 x  =  0-gcd x y  =  x `mod` (0 `mod` y)--gcd 0 x  =  0-gcd x y  =  x `mod` (0 `mod` 0)--gcd 0 x  =  0-gcd x y  =  y `mod` (x `mod` x)--gcd 0 x  =  0-gcd x y  =  y `mod` (x `mod` y)--gcd 0 x  =  0-gcd x y  =  y `mod` (x `mod` 0)--gcd 0 x  =  0-gcd x y  =  y `mod` (y `mod` x)--gcd 0 x  =  0-gcd x y  =  y `mod` (y `mod` y)--gcd 0 x  =  0-gcd x y  =  y `mod` (y `mod` 0)--gcd 0 x  =  0-gcd x y  =  y `mod` (0 `mod` x)--gcd 0 x  =  0-gcd x y  =  y `mod` (0 `mod` y)--gcd 0 x  =  0-gcd x y  =  y `mod` (0 `mod` 0)--gcd 0 x  =  0-gcd x y  =  0 `mod` (x `mod` x)--gcd 0 x  =  0-gcd x y  =  0 `mod` (x `mod` y)--gcd 0 x  =  0-gcd x y  =  0 `mod` (x `mod` 0)--gcd 0 x  =  0-gcd x y  =  0 `mod` (y `mod` x)--gcd 0 x  =  0-gcd x y  =  0 `mod` (y `mod` y)--gcd 0 x  =  0-gcd x y  =  0 `mod` (y `mod` 0)--gcd 0 x  =  0-gcd x y  =  0 `mod` (0 `mod` x)--gcd 0 x  =  0-gcd x y  =  0 `mod` (0 `mod` y)--gcd 0 x  =  0-gcd x y  =  0 `mod` (0 `mod` 0)--gcd 0 x  =  x `mod` x-gcd x y  =  x `mod` y--gcd 0 x  =  x `mod` x-gcd x y  =  x `mod` 0--gcd 0 x  =  x `mod` x-gcd x y  =  y `mod` x--gcd 0 x  =  x `mod` x-gcd x y  =  y `mod` 0--gcd 0 x  =  x `mod` x-gcd x y  =  0 `mod` x--gcd 0 x  =  x `mod` x-gcd x y  =  0 `mod` y--gcd 0 x  =  x `mod` x-gcd x y  =  0 `mod` 0--gcd 0 x  =  x `mod` 0-gcd x y  =  x `mod` x--gcd 0 x  =  x `mod` 0-gcd x y  =  x `mod` y--gcd 0 x  =  x `mod` 0-gcd x y  =  y `mod` x--gcd 0 x  =  x `mod` 0-gcd x y  =  y `mod` y--gcd 0 x  =  x `mod` 0-gcd x y  =  0 `mod` x--gcd 0 x  =  x `mod` 0-gcd x y  =  0 `mod` y--gcd 0 x  =  x `mod` 0-gcd x y  =  0 `mod` 0--gcd 0 x  =  0 `mod` x-gcd x y  =  x `mod` x--gcd 0 x  =  0 `mod` x-gcd x y  =  x `mod` y--gcd 0 x  =  0 `mod` x-gcd x y  =  x `mod` 0--gcd 0 x  =  0 `mod` x-gcd x y  =  y `mod` x--gcd 0 x  =  0 `mod` x-gcd x y  =  y `mod` y--gcd 0 x  =  0 `mod` x-gcd x y  =  y `mod` 0--gcd 0 x  =  0 `mod` x-gcd x y  =  0 `mod` 0--gcd 0 x  =  0 `mod` 0-gcd x y  =  x `mod` x--gcd 0 x  =  0 `mod` 0-gcd x y  =  x `mod` y--gcd 0 x  =  0 `mod` 0-gcd x y  =  x `mod` 0--gcd 0 x  =  0 `mod` 0-gcd x y  =  y `mod` x--gcd 0 x  =  0 `mod` 0-gcd x y  =  y `mod` y--gcd 0 x  =  0 `mod` 0-gcd x y  =  y `mod` 0--gcd 0 x  =  0 `mod` 0-gcd x y  =  0 `mod` x--gcd 0 x  =  0 `mod` 0-gcd x y  =  0 `mod` y--gcd 0 x  =  (x `mod` x) `mod` x-gcd x y  =  x--gcd 0 x  =  (x `mod` x) `mod` x-gcd x y  =  y--gcd 0 x  =  (x `mod` x) `mod` x-gcd x y  =  0--gcd 0 x  =  (x `mod` x) `mod` 0-gcd x y  =  x--gcd 0 x  =  (x `mod` x) `mod` 0-gcd x y  =  y--gcd 0 x  =  (x `mod` x) `mod` 0-gcd x y  =  0--gcd 0 x  =  (x `mod` 0) `mod` x-gcd x y  =  x--gcd 0 x  =  (x `mod` 0) `mod` x-gcd x y  =  y--gcd 0 x  =  (x `mod` 0) `mod` x-gcd x y  =  0--gcd 0 x  =  (x `mod` 0) `mod` 0-gcd x y  =  x--gcd 0 x  =  (x `mod` 0) `mod` 0-gcd x y  =  y--gcd 0 x  =  (x `mod` 0) `mod` 0-gcd x y  =  0--gcd 0 x  =  (0 `mod` x) `mod` x-gcd x y  =  x--gcd 0 x  =  (0 `mod` x) `mod` x-gcd x y  =  y--gcd 0 x  =  (0 `mod` x) `mod` x-gcd x y  =  0--gcd 0 x  =  (0 `mod` x) `mod` 0-gcd x y  =  x--gcd 0 x  =  (0 `mod` x) `mod` 0-gcd x y  =  y--gcd 0 x  =  (0 `mod` x) `mod` 0-gcd x y  =  0--gcd 0 x  =  (0 `mod` 0) `mod` x-gcd x y  =  x--gcd 0 x  =  (0 `mod` 0) `mod` x-gcd x y  =  y--gcd 0 x  =  (0 `mod` 0) `mod` x-gcd x y  =  0--gcd 0 x  =  (0 `mod` 0) `mod` 0-gcd x y  =  x--gcd 0 x  =  (0 `mod` 0) `mod` 0-gcd x y  =  y--gcd 0 x  =  (0 `mod` 0) `mod` 0-gcd x y  =  0--gcd 0 x  =  x `mod` (x `mod` x)-gcd x y  =  x--gcd 0 x  =  x `mod` (x `mod` x)-gcd x y  =  y--gcd 0 x  =  x `mod` (x `mod` x)-gcd x y  =  0--gcd 0 x  =  x `mod` (x `mod` 0)-gcd x y  =  x--gcd 0 x  =  x `mod` (x `mod` 0)-gcd x y  =  y--gcd 0 x  =  x `mod` (x `mod` 0)-gcd x y  =  0--gcd 0 x  =  x `mod` (0 `mod` x)-gcd x y  =  x--gcd 0 x  =  x `mod` (0 `mod` x)-gcd x y  =  y--gcd 0 x  =  x `mod` (0 `mod` x)-gcd x y  =  0--gcd 0 x  =  x `mod` (0 `mod` 0)-gcd x y  =  x--gcd 0 x  =  x `mod` (0 `mod` 0)-gcd x y  =  y--gcd 0 x  =  x `mod` (0 `mod` 0)-gcd x y  =  0--gcd 0 x  =  0 `mod` (x `mod` x)-gcd x y  =  x--gcd 0 x  =  0 `mod` (x `mod` x)-gcd x y  =  y--gcd 0 x  =  0 `mod` (x `mod` x)-gcd x y  =  0--gcd 0 x  =  0 `mod` (x `mod` 0)-gcd x y  =  x--gcd 0 x  =  0 `mod` (x `mod` 0)-gcd x y  =  y--gcd 0 x  =  0 `mod` (x `mod` 0)-gcd x y  =  0--gcd 0 x  =  0 `mod` (0 `mod` x)-gcd x y  =  x--gcd 0 x  =  0 `mod` (0 `mod` x)-gcd x y  =  y--gcd 0 x  =  0 `mod` (0 `mod` x)-gcd x y  =  0--gcd 0 x  =  0 `mod` (0 `mod` 0)-gcd x y  =  x--gcd 0 x  =  0 `mod` (0 `mod` 0)-gcd x y  =  y--gcd 0 x  =  0 `mod` (0 `mod` 0)+  [3,0,7,0,19,0,90,0,454] direct candidates, 0 duplicates+  [3,3,8,13,29,52,139,212,629] 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 + 1++foo x  =  x - 1++foo x  =  0 - x++foo x  =  0 - 1++foo x  =  1 - x++foo x  =  x + (x + x)++foo x  =  x + (x + 1)++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 + 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 + 1)++foo x  =  0 - (x + x)++foo x  =  0 - (x + 1)++foo x  =  0 - (1 + 1)++foo x  =  1 - (x + x)++foo x  =  1 - (x + 1)++foo x  =  1 - (1 + 1)+++pattern candidates:++foo x  =  x++foo x  =  0++foo x  =  1++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  =  x - 1++foo x  =  0 - x++foo x  =  1 - x++foo 1  =  0+foo x  =  x++foo 1  =  0+foo x  =  1++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  =  x - 1++foo 0  =  0+foo x  =  0 - x++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  =  x - 1++foo 0  =  1+foo x  =  0 - x++foo 0  =  1+foo x  =  1 - x++foo 0  =  0+foo 1  =  0+foo x  =  1++foo 0  =  1+foo 1  =  0+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 (0 - x)++foo 0  =  0+foo x  =  foo (1 - x)++foo 0  =  1+foo x  =  foo (x - 1)++foo 0  =  1+foo x  =  foo (0 - x)++foo 0  =  1+foo x  =  foo (1 - x)++foo x  =  x + (x + x)++foo x  =  x + (x + 1)++foo x  =  x + (x - 1)++foo x  =  1 + (x + x)++foo x  =  1 + (x + 1)++foo x  =  1 + (0 - x)++foo x  =  1 + (1 - x)++foo x  =  x - (x + x)++foo x  =  x - (x + 1)++foo x  =  0 - (x + x)++foo x  =  0 - (x + 1)++foo x  =  1 - (x + x)++foo x  =  1 - (x + 1)++foo 1  =  0+foo x  =  x + x++foo 1  =  0+foo x  =  x + 1++foo 1  =  0+foo x  =  x - 1++foo 1  =  0+foo x  =  0 - x++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  =  x - 1++foo 1  =  1+foo x  =  0 - x++foo 1  =  1+foo x  =  1 - x++foo 1  =  0+foo x  =  foo (x - 1)++foo 1  =  0+foo x  =  foo (0 - x)++foo 1  =  0+foo x  =  foo (1 - x)++foo 1  =  1+foo x  =  foo (x - 1)++foo 1  =  1+foo x  =  foo (0 - x)++foo 1  =  1+foo x  =  foo (1 - x)++foo 0  =  0+foo x  =  x + (x + x)++foo 0  =  0+foo x  =  x + (x + 1)++foo 0  =  0+foo x  =  x + (x - 1)++foo 0  =  0+foo x  =  1 + (x + x)++foo 0  =  0+foo x  =  1 + (x + 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  =  0 - (x + x)++foo 0  =  0+foo x  =  0 - (x + 1)++foo 0  =  0+foo x  =  1 - (x + x)++foo 0  =  0+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 + (x - 1)++foo 0  =  1+foo x  =  1 + (x + x)++foo 0  =  1+foo x  =  1 + (x + 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  =  0 - (x + x)++foo 0  =  1+foo x  =  0 - (x + 1)++foo 0  =  1+foo x  =  1 - (x + x)++foo 0  =  1+foo x  =  1 - (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  =  x - 1++foo 0  =  0+foo 1  =  0+foo x  =  0 - x++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  =  x - 1++foo 0  =  0+foo 1  =  1+foo x  =  0 - x++foo 0  =  0+foo 1  =  1+foo x  =  1 - x++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  =  x - 1++foo 0  =  1+foo 1  =  0+foo x  =  0 - x++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  =  x - 1++foo 0  =  1+foo 1  =  1+foo x  =  0 - x++foo 0  =  1+foo 1  =  1+foo x  =  1 - x+++Candidates for: ? :: Int -> Int -> Int+  pruning with 10/23 rules+  [3,3,6,9,21,39,87,180,390] direct candidates, 0 duplicates+  [3,7,22,53,129,313,747,1743,4077] 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 + y++x ? y  =  dec (dec x)++x ? y  =  dec (dec y)++x ? y  =  dec (dec 0)++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 ? 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 + 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 + 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 y++x ? y  =  dec y + dec 0++x ? y  =  dec 0 + dec 0++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 (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 (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 + 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 + 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 + y)++x ? y  =  dec 0 + dec (dec x)++x ? y  =  dec 0 + dec (dec y)++x ? y  =  dec 0 + dec (dec 0)+++pattern candidates:++x ? y  =  x++x ? y  =  y++x ? y  =  0++x ? y  =  dec x++x ? y  =  dec y++x ? 0  =  x+x ? y  =  y++x ? 0  =  x+x ? y  =  0++x ? 0  =  0+x ? y  =  x++0 ? x  =  x+x ? y  =  0++0 ? x  =  0+x ? y  =  y++x ? y  =  x + x++x ? y  =  x + y++x ? y  =  y + y++x ? y  =  dec (dec x)++x ? y  =  dec (dec y)++x ? 0  =  x+x ? y  =  dec x++x ? 0  =  x+x ? y  =  dec y++x ? 0  =  0+x ? y  =  dec x++x ? 0  =  0+x ? y  =  dec y++x ? 0  =  dec x+x ? y  =  x++x ? 0  =  dec x+x ? y  =  y++x ? 0  =  dec x+x ? y  =  0++0 ? x  =  x+x ? y  =  dec x++0 ? x  =  x+x ? y  =  dec y++0 ? x  =  0+x ? y  =  dec x++0 ? x  =  0+x ? y  =  dec y++0 ? x  =  dec x+x ? y  =  x++0 ? x  =  dec x+x ? y  =  y++0 ? x  =  dec x+x ? y  =  0++0 ? x  =  x+x ? 0  =  x+x ? y  =  0++0 ? x  =  x+x ? 0  =  0+x ? y  =  x++0 ? x  =  0+x ? 0  =  x+x ? y  =  y++x ? y  =  dec (dec (dec x))++x ? y  =  dec (dec (dec y))++x ? y  =  x + dec x++x ? y  =  x + dec y++x ? y  =  y + dec x++x ? y  =  y + dec y++x ? 0  =  x+x ? y  =  x + x++x ? 0  =  x+x ? y  =  x + y++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  =  0+x ? y  =  x + x++x ? 0  =  0+x ? y  =  x + y++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  =  dec x+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++0 ? x  =  x+x ? y  =  x + x++0 ? x  =  x+x ? y  =  x + y++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  =  0+x ? y  =  x + x++0 ? x  =  0+x ? y  =  x + y++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  =  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  =  x+x ? 0  =  x+x ? y  =  dec x++0 ? x  =  x+x ? 0  =  x+x ? y  =  dec y++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec x++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec y++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  x++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  0++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec x++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec y++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec x++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec y++0 ? x  =  0+x ? 0  =  dec x+x ? y  =  y++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  y++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  0++0 ? x  =  dec x+x ? 0  =  0+x ? y  =  x++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  =  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++0 ? x  =  x+x ? y  =  x ? dec y++0 ? x  =  x+x ? y  =  y ? 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  =  dec x ? x++0 ? x  =  0+x ? y  =  dec x ? y++0 ? x  =  0+x ? y  =  dec x ? 0++x ? y  =  dec (dec (dec (dec x)))++x ? y  =  dec (dec (dec (dec y)))++x ? y  =  x + (x + x)++x ? y  =  x + (x + y)++x ? y  =  x + (y + y)++x ? y  =  x + dec (dec x)++x ? y  =  x + dec (dec y)++x ? y  =  y + (x + x)++x ? y  =  y + (x + y)++x ? y  =  y + (y + y)++x ? y  =  y + dec (dec x)++x ? y  =  y + dec (dec y)++x ? y  =  dec x + dec x++x ? y  =  dec x + dec y++x ? y  =  dec y + dec y++x ? 0  =  x+x ? y  =  dec (dec (dec x))++x ? 0  =  x+x ? y  =  dec (dec (dec y))++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  =  0+x ? y  =  dec (dec (dec x))++x ? 0  =  0+x ? y  =  dec (dec (dec y))++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  =  dec x+x ? y  =  x + x++x ? 0  =  dec x+x ? y  =  x + y++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  =  x + x+x ? y  =  dec x++x ? 0  =  x + x+x ? y  =  dec y++x ? 0  =  dec (dec x)+x ? y  =  dec x++x ? 0  =  dec (dec x)+x ? y  =  dec y++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  =  x + dec x+x ? y  =  x++x ? 0  =  x + dec x+x ? y  =  y++x ? 0  =  x + dec x+x ? y  =  0++0 ? x  =  x+x ? y  =  dec (dec (dec x))++0 ? x  =  x+x ? y  =  dec (dec (dec y))++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  =  0+x ? y  =  dec (dec (dec x))++0 ? x  =  0+x ? y  =  dec (dec (dec y))++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  =  dec x+x ? y  =  x + x++0 ? x  =  dec x+x ? y  =  x + y++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  =  x + x+x ? y  =  dec x++0 ? x  =  x + x+x ? y  =  dec y++0 ? x  =  dec (dec x)+x ? y  =  dec x++0 ? x  =  dec (dec x)+x ? y  =  dec y++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  =  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+x ? 0  =  x+x ? y  =  x + x++0 ? x  =  x+x ? 0  =  x+x ? y  =  x + y++0 ? x  =  x+x ? 0  =  x+x ? y  =  y + y++0 ? x  =  x+x ? 0  =  x+x ? y  =  dec (dec x)++0 ? x  =  x+x ? 0  =  x+x ? y  =  dec (dec y)++0 ? x  =  x+x ? 0  =  0+x ? y  =  x + x++0 ? x  =  x+x ? 0  =  0+x ? y  =  x + y++0 ? x  =  x+x ? 0  =  0+x ? y  =  y + y++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec (dec x)++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec (dec y)++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  dec y++0 ? x  =  x+x ? 0  =  x + x+x ? y  =  x++0 ? x  =  x+x ? 0  =  x + x+x ? y  =  0++0 ? x  =  x+x ? 0  =  dec (dec x)+x ? y  =  x++0 ? x  =  x+x ? 0  =  dec (dec x)+x ? y  =  0++0 ? x  =  0+x ? 0  =  x+x ? y  =  x + x++0 ? x  =  0+x ? 0  =  x+x ? y  =  x + y++0 ? x  =  0+x ? 0  =  x+x ? y  =  y + y++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec (dec x)++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec (dec y)++0 ? x  =  0+x ? 0  =  0+x ? y  =  x + x++0 ? x  =  0+x ? 0  =  0+x ? y  =  x + y++0 ? x  =  0+x ? 0  =  0+x ? y  =  y + y++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec (dec x)++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec (dec y)++0 ? x  =  0+x ? 0  =  dec x+x ? y  =  dec y++0 ? x  =  0+x ? 0  =  x + x+x ? y  =  y++0 ? x  =  0+x ? 0  =  dec (dec x)+x ? y  =  y++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  dec x++0 ? x  =  dec x+x ? 0  =  0+x ? y  =  dec x++0 ? x  =  dec x+x ? 0  =  dec x+x ? y  =  x++0 ? x  =  dec x+x ? 0  =  dec x+x ? y  =  y++0 ? x  =  dec x+x ? 0  =  dec x+x ? y  =  0++0 ? x  =  x + x+x ? 0  =  x+x ? y  =  y++0 ? x  =  x + x+x ? 0  =  x+x ? y  =  0++0 ? x  =  x + x+x ? 0  =  0+x ? y  =  x++0 ? x  =  dec (dec x)+x ? 0  =  x+x ? y  =  y++0 ? x  =  dec (dec x)+x ? 0  =  x+x ? y  =  0++0 ? x  =  dec (dec x)+x ? 0  =  0+x ? y  =  x++0 ? 0  =  0+0 ? x  =  dec x+x ? y  =  dec x++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 y ? dec y++x ? 0  =  x+x ? y  =  dec (dec x) ? x++x ? 0  =  x+x ? y  =  dec (dec x) ? y++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 y ? dec y++x ? 0  =  0+x ? y  =  dec (dec x) ? x++x ? 0  =  0+x ? y  =  dec (dec x) ? y++0 ? x  =  x+x ? y  =  x ? dec (dec y)++0 ? x  =  x+x ? y  =  y ? 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 y ? 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  =  dec x ? dec x++0 ? x  =  0+x ? y  =  dec x ? dec y++0 ? x  =  0+x ? y  =  dec y ? 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  =  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  =  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++0 ? x  =  x+x ? y  =  dec (x ? dec y)++0 ? x  =  x+x ? y  =  dec (y ? 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 (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  =  dec x ? x++0 ? x  =  dec x+x ? y  =  dec x ? y++0 ? x  =  dec x+x ? y  =  dec x ? 0++0 ? x  =  x+x ? 0  =  x+x ? y  =  x ? dec y++0 ? x  =  x+x ? 0  =  x+x ? y  =  y ? dec y++0 ? x  =  x+x ? 0  =  x+x ? y  =  dec x ? x++0 ? x  =  x+x ? 0  =  x+x ? y  =  dec x ? y++0 ? x  =  x+x ? 0  =  0+x ? y  =  x ? dec y++0 ? x  =  x+x ? 0  =  0+x ? y  =  y ? dec y++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec x ? x++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec x ? y++0 ? x  =  0+x ? 0  =  x+x ? y  =  x ? dec y++0 ? x  =  0+x ? 0  =  x+x ? y  =  y ? dec y++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec x ? x++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec x ? y++0 ? x  =  0+x ? 0  =  0+x ? y  =  x ? dec y++0 ? x  =  0+x ? 0  =  0+x ? y  =  y ? dec y++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec x ? x++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec x ? y++x ? y  =  dec (dec (dec (dec (dec x))))++x ? y  =  dec (dec (dec (dec (dec y))))++x ? y  =  x + dec (dec (dec x))++x ? y  =  x + dec (dec (dec y))++x ? y  =  x + (x + dec x)++x ? y  =  x + (x + dec y)++x ? y  =  x + (y + dec x)++x ? y  =  x + (y + dec y)++x ? y  =  y + dec (dec (dec x))++x ? y  =  y + dec (dec (dec y))++x ? y  =  y + (x + dec x)++x ? y  =  y + (x + dec y)++x ? y  =  y + (y + dec x)++x ? y  =  y + (y + dec y)++x ? y  =  dec x + (x + x)++x ? y  =  dec x + (x + y)++x ? y  =  dec x + (y + y)++x ? y  =  dec x + dec (dec x)++x ? y  =  dec x + dec (dec y)++x ? y  =  dec y + (x + x)++x ? y  =  dec y + (x + y)++x ? y  =  dec y + (y + y)++x ? y  =  dec y + dec (dec x)++x ? y  =  dec y + dec (dec 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  =  x + (x + x)++x ? 0  =  x+x ? y  =  x + (x + y)++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  =  y + (x + x)++x ? 0  =  x+x ? y  =  y + (x + y)++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  =  dec x + dec x++x ? 0  =  x+x ? y  =  dec x + dec y++x ? 0  =  x+x ? y  =  dec y + dec 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  =  x + (x + x)++x ? 0  =  0+x ? y  =  x + (x + y)++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  =  y + (x + x)++x ? 0  =  0+x ? y  =  y + (x + y)++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  =  dec x + dec x++x ? 0  =  0+x ? y  =  dec x + dec y++x ? 0  =  0+x ? y  =  dec y + dec 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  =  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  =  x + x+x ? y  =  x + y++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  =  dec (dec x)+x ? y  =  x + x++x ? 0  =  dec (dec x)+x ? y  =  x + y++x ? 0  =  dec (dec x)+x ? y  =  y + y++x ? 0  =  dec (dec x)+x ? y  =  dec (dec y)++x ? 0  =  dec (dec (dec x))+x ? y  =  dec x++x ? 0  =  dec (dec (dec x))+x ? y  =  dec y++x ? 0  =  x + dec x+x ? y  =  dec x++x ? 0  =  x + dec x+x ? y  =  dec y++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  =  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  =  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++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  =  x + (x + x)++0 ? x  =  x+x ? y  =  x + (x + y)++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  =  y + (x + x)++0 ? x  =  x+x ? y  =  y + (x + y)++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  =  dec x + dec x++0 ? x  =  x+x ? y  =  dec x + dec y++0 ? x  =  x+x ? y  =  dec y + dec 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  =  x + (x + x)++0 ? x  =  0+x ? y  =  x + (x + y)++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  =  y + (x + x)++0 ? x  =  0+x ? y  =  y + (x + y)++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  =  dec x + dec x++0 ? x  =  0+x ? y  =  dec x + dec y++0 ? x  =  0+x ? y  =  dec y + dec 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  =  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  =  x + x+x ? y  =  x + y++0 ? x  =  x + x+x ? y  =  dec (dec x)++0 ? x  =  x + x+x ? y  =  dec (dec y)++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 + y++0 ? x  =  dec (dec (dec x))+x ? y  =  dec x++0 ? x  =  dec (dec (dec x))+x ? y  =  dec y++0 ? x  =  x + dec x+x ? y  =  dec x++0 ? x  =  x + dec x+x ? y  =  dec y++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  =  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  =  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  =  x+x ? 0  =  x+x ? y  =  dec (dec (dec x))++0 ? x  =  x+x ? 0  =  x+x ? y  =  dec (dec (dec y))++0 ? x  =  x+x ? 0  =  x+x ? y  =  x + dec x++0 ? x  =  x+x ? 0  =  x+x ? y  =  x + dec y++0 ? x  =  x+x ? 0  =  x+x ? y  =  y + dec x++0 ? x  =  x+x ? 0  =  x+x ? y  =  y + dec y++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec (dec (dec x))++0 ? x  =  x+x ? 0  =  0+x ? y  =  dec (dec (dec y))++0 ? x  =  x+x ? 0  =  0+x ? y  =  x + dec x++0 ? x  =  x+x ? 0  =  0+x ? y  =  x + dec y++0 ? x  =  x+x ? 0  =  0+x ? y  =  y + dec x++0 ? x  =  x+x ? 0  =  0+x ? y  =  y + dec y++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  x + x++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  x + y++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  y + y++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  dec (dec x)++0 ? x  =  x+x ? 0  =  dec x+x ? y  =  dec (dec y)++0 ? x  =  x+x ? 0  =  x + x+x ? y  =  dec x++0 ? x  =  x+x ? 0  =  x + x+x ? y  =  dec y++0 ? x  =  x+x ? 0  =  dec (dec x)+x ? y  =  dec x++0 ? x  =  x+x ? 0  =  dec (dec x)+x ? y  =  dec y++0 ? x  =  x+x ? 0  =  dec (dec (dec x))+x ? y  =  x++0 ? x  =  x+x ? 0  =  dec (dec (dec x))+x ? y  =  0++0 ? x  =  x+x ? 0  =  x + dec x+x ? y  =  x++0 ? x  =  x+x ? 0  =  x + dec x+x ? y  =  0++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec (dec (dec x))++0 ? x  =  0+x ? 0  =  x+x ? y  =  dec (dec (dec y))++0 ? x  =  0+x ? 0  =  x+x ? y  =  x + dec x++0 ? x  =  0+x ? 0  =  x+x ? y  =  x + dec y++0 ? x  =  0+x ? 0  =  x+x ? y  =  y + dec x++0 ? x  =  0+x ? 0  =  x+x ? y  =  y + dec y++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec (dec (dec x))++0 ? x  =  0+x ? 0  =  0+x ? y  =  dec (dec (dec y))++0 ? x  =  0+x ? 0  =  0+x ? y  =  x + dec x++0 ? x  =  0+x ? 0  =  0+x ? y  =  x + dec y++0 ? x  =  0+x ? 0  =  0+x ? y  =  y + dec x++0 ? x  =  0+x ? 0  =  0+x ? y  =  y + dec y++0 ? x  =  0+x ? 0  =  dec x+x ? y  =  x + x++0 ? x  =  0+x ? 0  =  dec x+x ? y  =  x + y++0 ? x  =  0+x ? 0  =  dec x+x ? y  =  y + y++0 ? x  =  0+x ? 0  =  dec x+x ? y  =  dec (dec x)++0 ? x  =  0+x ? 0  =  dec x+x ? y  =  dec (dec y)++0 ? x  =  0+x ? 0  =  x + x+x ? y  =  dec x++0 ? x  =  0+x ? 0  =  x + x+x ? y  =  dec y++0 ? x  =  0+x ? 0  =  dec (dec x)+x ? y  =  dec x++0 ? x  =  0+x ? 0  =  dec (dec x)+x ? y  =  dec y++0 ? x  =  0+x ? 0  =  dec (dec (dec x))+x ? y  =  y++0 ? x  =  0+x ? 0  =  x + dec x+x ? y  =  y++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  x + x++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  x + y++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  y + y++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  dec (dec x)++0 ? x  =  dec x+x ? 0  =  x+x ? y  =  dec (dec y)++0 ? x  =  dec x+x ? 0  =  0+x ? y  =  x + x++0 ? x  =  dec x+x ? 0  =  0+x ? y  =  x + y++0 ? x  =  dec x+x ? 0  =  0+x ? y  =  y + y++0 ? x  =  dec x+x ? 0  =  0+x ? y  =  dec (dec x)++0 ? x  =  dec x+x ? 0  =  0+x ? y  =  dec (dec y)++0 ? x  =  dec x+x ? 0  =  x + x+x ? y  =  x++0 ? x  =  dec x+x ? 0  =  x + x+x ? y  =  y++0 ? x  =  dec x+x ? 0  =  x + x+x ? y  =  0++0 ? x  =  dec x+x ? 0  =  dec (dec x)+x ? y  =  x++0 ? x  =  dec x+x ? 0  =  dec (dec x)+x ? y  =  y++0 ? x  =  dec x+x ? 0  =  dec (dec x)+x ? y  =  0++0 ? x  =  x + x+x ? 0  =  x+x ? y  =  dec x++0 ? x  =  x + x+x ? 0  =  x+x ? y  =  dec y++0 ? x  =  x + x+x ? 0  =  0+x ? y  =  dec x++0 ? x  =  x + x+x ? 0  =  0+x ? y  =  dec y++0 ? x  =  x + x+x ? 0  =  dec x+x ? y  =  x++0 ? x  =  x + x+x ? 0  =  dec x+x ? y  =  y++0 ? x  =  x + x+x ? 0  =  dec x+x ? y  =  0++0 ? x  =  dec (dec x)+x ? 0  =  x+x ? y  =  dec x++0 ? x  =  dec (dec x)+x ? 0  =  x+x ? y  =  dec y++0 ? x  =  dec (dec x)+x ? 0  =  0+x ? y  =  dec x++0 ? x  =  dec (dec x)+x ? 0  =  0+x ? y  =  dec y++0 ? x  =  dec (dec x)+x ? 0  =  dec x+x ? y  =  x++0 ? x  =  dec (dec x)+x ? 0  =  dec x+x ? y  =  y++0 ? x  =  dec (dec x)+x ? 0  =  dec x+x ? y  =  0++0 ? x  =  dec (dec (dec x))+x ? 0  =  x+x ? y  =  y++0 ? x  =  dec (dec (dec x))+x ? 0  =  x+x ? y  =  0++0 ? x  =  dec (dec (dec x))+x ? 0  =  0+x ? y  =  x++0 ? x  =  x + dec x+x ? 0  =  x+x ? y  =  y++0 ? x  =  x + dec x+x ? 0  =  x+x ? y  =  0++0 ? x  =  x + dec x+x ? 0  =  0+x ? y  =  x++0 ? 0  =  0+0 ? x  =  dec x+x ? y  =  x + x++0 ? 0  =  0+0 ? x  =  dec x+x ? y  =  x + y++0 ? 0  =  0+0 ? x  =  dec x+x ? y  =  y + y++0 ? 0  =  0+0 ? x  =  dec x+x ? y  =  dec (dec x)++0 ? 0  =  0+0 ? x  =  dec x+x ? y  =  dec (dec y)++0 ? 0  =  0+0 ? x  =  x + x+x ? y  =  dec x++0 ? 0  =  0+0 ? x  =  x + x+x ? y  =  dec y++0 ? 0  =  0+0 ? x  =  dec (dec x)+x ? y  =  dec x++0 ? 0  =  0+0 ? x  =  dec (dec x)+x ? y  =  dec y+++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,7,15,59,139,331,987,2016,6970] 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  =  []++[] ?? 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++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x: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 ?? (x:ys)  =  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)  =  ys ?? xs++xs ?? []  =  []+xs ?? (x:ys)  =  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  =  []+(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 ?? []  =  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) ?? (y:ys)  =  xs ?? xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ?? ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ?? []++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ?? xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ?? ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ?? []++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ?? xs+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ?? []+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ?? xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ?? []+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ?? xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ?? []+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ?? xs++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ?? ys++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ?? []++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ?? xs++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ?? ys++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ?? []++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ?? xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ?? ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ?? []++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ?? xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ?? ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ?? []++[] ?? xs  =  []+(x:xs) ?? []  =  xs ?? xs+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs ?? []+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs ?? xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs ?? []+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs ?? xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  []+(x:xs) ?? []  =  xs ?? []+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ?? xs++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ?? ys++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ?? []++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ?? xs++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ?? ys++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ?? []++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  xs ?? xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  xs ?? ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  xs ?? []++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  ys ?? xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  ys ?? ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  ys ?? []++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  [] ?? xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  [] ?? ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs ?? xs+(x:xs) ?? ys  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs ?? []+(x:xs) ?? ys  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  [] ?? xs+(x:xs) ?? ys  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs ?? xs+(x:xs) ?? ys  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs ?? []+(x:xs) ?? ys  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  [] ?? xs+(x:xs) ?? ys  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs ?? xs+(x:xs) ?? ys  =  []++[] ?? []  =  []+[] ?? (x:xs)  =  xs ?? []+(x:xs) ?? ys  =  []++[] ?? []  =  []+[] ?? (x:xs)  =  [] ?? xs+(x:xs) ?? 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)++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  x:xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  x:ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  [x]++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  y:xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  y:ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  [y]++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ++ xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ++ ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ++ xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ++ ys++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  x:xs++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  x:ys++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  [x]++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  y:xs++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  y:ys++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  [y]++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ++ xs++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ++ ys++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ++ xs++[] ?? xs  =  xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ++ ys++[] ?? xs  =  xs+(x:xs) ?? []  =  x:xs+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  xs+(x:xs) ?? []  =  x:xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  xs+(x:xs) ?? []  =  x:xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  xs+(x:xs) ?? []  =  [x]+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  xs+(x:xs) ?? []  =  [x]+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  xs+(x:xs) ?? []  =  [x]+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  xs+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  x:xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  x:ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  [x]++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  y:xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  y:ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  [y]++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ++ xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  xs ++ ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ++ xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys ++ ys++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  x:xs++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  x:ys++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  [x]++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  y:xs++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  y:ys++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  [y]++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ++ xs++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs ++ ys++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ++ xs++[] ?? xs  =  []+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys ++ ys++[] ?? xs  =  []+(x:xs) ?? []  =  x:xs+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  []+(x:xs) ?? []  =  x:xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  []+(x:xs) ?? []  =  x:xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  []+(x:xs) ?? []  =  [x]+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  []+(x:xs) ?? []  =  [x]+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  []+(x:xs) ?? []  =  [x]+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  []+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  []+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  []+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  xs ++ xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys++[] ?? xs  =  xs ++ xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  []++[] ?? xs  =  xs ++ xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  xs++[] ?? xs  =  xs ++ xs+(x:xs) ?? []  =  []+(x:xs) ?? (y:ys)  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  x:xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  x:ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  [x]++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  xs ++ xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  xs ++ ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  ys ++ xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? ys  =  ys ++ ys++[] ?? []  =  []+[] ?? (x:xs)  =  x:xs+(x:xs) ?? ys  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  x:xs+(x:xs) ?? ys  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  x:xs+(x:xs) ?? ys  =  []++[] ?? []  =  []+[] ?? (x:xs)  =  [x]+(x:xs) ?? ys  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  [x]+(x:xs) ?? ys  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  [x]+(x:xs) ?? ys  =  []++[] ?? []  =  []+[] ?? (x:xs)  =  xs ++ xs+(x:xs) ?? ys  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs ++ xs+(x:xs) ?? ys  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs ++ xs+(x:xs) ?? ys  =  []++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)  =  [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 ++ ys) ?? xs++xs ?? []  =  xs+xs ?? (x:ys)  =  (xs ++ ys) ?? ys++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: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)  =  [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 ++ ys) ?? xs++xs ?? []  =  []+xs ?? (x:ys)  =  (xs ++ ys) ?? ys++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+(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  =  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: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)  =  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 ++ ys ?? xs++xs ?? []  =  xs+xs ?? (x:ys)  =  xs ++ ys ?? 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 ++ ys ?? xs++xs ?? []  =  xs+xs ?? (x:ys)  =  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)  =  ys ?? xs ++ xs++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 ++ ys++xs ?? []  =  xs+xs ?? (x:ys)  =  xs ?? ys ++ ys++xs ?? []  =  xs+xs ?? (x:ys)  =  ys ?? xs ++ ys++xs ?? []  =  xs+xs ?? (x:ys)  =  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:ys ?? xs++xs ?? []  =  []+xs ?? (x:ys)  =  x:ys ?? 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 ++ ys ?? xs++xs ?? []  =  []+xs ?? (x:ys)  =  xs ++ ys ?? 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 ++ ys ?? xs++xs ?? []  =  []+xs ?? (x:ys)  =  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)  =  ys ?? xs ++ xs++xs ?? []  =  []+xs ?? (x:ys)  =  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)  =  ys ?? xs ++ ys++xs ?? []  =  []+xs ?? (x:ys)  =  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)  =  ys ?? xs++xs ?? []  =  xs ++ xs+xs ?? (x:ys)  =  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  =  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  =  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  =  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 ++ 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  =  []+(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  =  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  =  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  =  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 ++ 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  =  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 ?? []++[] ?? []  =  []+[] ?? (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)  =  []++[] ?? []  =  []+[] ?? (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) ?? []  =  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)  =  []++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 ++ xs)+(x:xs) ?? ys  =  xs++[] ?? xs  =  xs ++ (xs ++ xs)+(x:xs) ?? ys  =  ys++[] ?? xs  =  xs ++ (xs ++ xs)+(x:xs) ?? 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+(x:xs) ?? (y:ys)  =  xs++[] ?? []  =  []+[] ?? (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)  =  []++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  xs++[] ?? []  =  []+[] ?? (x:xs)  =  xs+(x:xs) ?? []  =  xs ++ xs+(x:xs) ?? (y:ys)  =  []++[] ?? []  =  []+[] ?? (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]+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  [x]+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  []++[] ?? []  =  []+[] ?? (x:xs)  =  xs ++ xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  ys++[] ?? []  =  []+[] ?? (x:xs)  =  xs ++ xs+(x:xs) ?? []  =  xs+(x:xs) ?? (y:ys)  =  []+++Candidates for: ton :: Bool -> Bool+  pruning with 39/49 rules+  [3,1,0,2,6,10,22,40,76] 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 && (p || ton p)++ton p  =  not p && not (ton p)++ton p  =  p || p && ton p++ton p  =  p || (p || ton 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,2,4,30,112,342,1032,2852] direct candidates, 0 duplicates+  [4,14,26,10,2,16,18,60,120] 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  =  p || q++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 p || not 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 || 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 && (q && not p)++p &| q  =  p && (q || not p)++p &| q  =  q && (p && not q)++p &| q  =  q && (p || not q)++p &| q  =  p || q && not p++p &| q  =  p || (q || not p)++p &| q  =  q || p && not q++p &| q  =  q || (p || not q)++p &| q  =  not p && (p && q)++p &| q  =  not p && (p || q)++p &| q  =  not q && (p && q)++p &| q  =  not q && (p || q)++p &| q  =  not p || p && q++p &| q  =  not p || (p || q)++p &| q  =  not q || p && q++p &| q  =  not q || (p || 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  =  p || q++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 &| p  =  p+True &| False  =  False+True &| True  =  True++False &| p  =  p+True &| False  =  True+True &| True  =  False++False &| p  =  False+True &| False  =  False+True &| True  =  True++False &| p  =  False+True &| False  =  True+True &| True  =  False++False &| p  =  True+True &| False  =  False+True &| True  =  True++False &| p  =  True+True &| False  =  True+True &| True  =  False++False &| False  =  False+False &| True  =  True+True &| p  =  p++False &| False  =  False+False &| True  =  True+True &| p  =  False++False &| False  =  False+False &| True  =  True+True &| p  =  True++False &| False  =  True+False &| True  =  False+True &| p  =  p++False &| False  =  True+False &| True  =  False+True &| p  =  False++False &| False  =  True+False &| True  =  False+True &| p  =  True++p &| q  =  p && not q++p &| q  =  q && not p++p &| q  =  p || not q++p &| q  =  q || not p++False &| p  =  not p+True &| False  =  False+True &| True  =  True++False &| p  =  not p+True &| False  =  True+True &| True  =  False++False &| False  =  False+False &| True  =  True+True &| p  =  not p++False &| False  =  True+False &| True  =  False+True &| p  =  not p++False &| False  =  False+False &| True  =  True+True &| False  =  True+True &| True  =  False++False &| False  =  True+False &| True  =  False+True &| False  =  False+True &| True  =  True++p &| q  =  not p && not q++p &| q  =  not p || not q++p &| q  =  p && (q && not p)++p &| q  =  p && (q || not p)++p &| q  =  q && (p && not q)++p &| q  =  q && (p || not q)++p &| q  =  p || q && not p++p &| q  =  p || (q || not p)++p &| q  =  q || p && not q++p &| q  =  q || (p || not q)++p &| q  =  not p && (p && q)++p &| q  =  not p && (p || q)++p &| q  =  not q && (p && q)++p &| q  =  not q && (p || q)++p &| q  =  not p || p && q++p &| q  =  not p || (p || q)++p &| q  =  not q || p && q++p &| q  =  not q || (p || q)+++Candidates for: gcd :: Int -> Int -> Int+  pruning with 0/0 rules+  [3,0,9,0,54,0,405,0,3402] direct candidates, 0 duplicates+  [3,5,11,50,98,359,786,2836,6723] pattern candidates, 0 duplicates++no rules.++direct candidates:++gcd x y  =  x++gcd x y  =  y++gcd x y  =  0++gcd x y  =  x `mod` x++gcd x y  =  x `mod` y++gcd x y  =  x `mod` 0++gcd x y  =  y `mod` x++gcd x y  =  y `mod` y++gcd x y  =  y `mod` 0++gcd x y  =  0 `mod` x++gcd x y  =  0 `mod` y++gcd x y  =  0 `mod` 0++gcd x y  =  (x `mod` x) `mod` x++gcd x y  =  (x `mod` x) `mod` y++gcd x y  =  (x `mod` x) `mod` 0++gcd x y  =  (x `mod` y) `mod` x++gcd x y  =  (x `mod` y) `mod` y++gcd x y  =  (x `mod` y) `mod` 0++gcd x y  =  (x `mod` 0) `mod` x++gcd x y  =  (x `mod` 0) `mod` y++gcd x y  =  (x `mod` 0) `mod` 0++gcd x y  =  (y `mod` x) `mod` x++gcd x y  =  (y `mod` x) `mod` y++gcd x y  =  (y `mod` x) `mod` 0++gcd x y  =  (y `mod` y) `mod` x++gcd x y  =  (y `mod` y) `mod` y++gcd x y  =  (y `mod` y) `mod` 0++gcd x y  =  (y `mod` 0) `mod` x++gcd x y  =  (y `mod` 0) `mod` y++gcd x y  =  (y `mod` 0) `mod` 0++gcd x y  =  (0 `mod` x) `mod` x++gcd x y  =  (0 `mod` x) `mod` y++gcd x y  =  (0 `mod` x) `mod` 0++gcd x y  =  (0 `mod` y) `mod` x++gcd x y  =  (0 `mod` y) `mod` y++gcd x y  =  (0 `mod` y) `mod` 0++gcd x y  =  (0 `mod` 0) `mod` x++gcd x y  =  (0 `mod` 0) `mod` y++gcd x y  =  (0 `mod` 0) `mod` 0++gcd x y  =  x `mod` (x `mod` x)++gcd x y  =  x `mod` (x `mod` y)++gcd x y  =  x `mod` (x `mod` 0)++gcd x y  =  x `mod` (y `mod` x)++gcd x y  =  x `mod` (y `mod` y)++gcd x y  =  x `mod` (y `mod` 0)++gcd x y  =  x `mod` (0 `mod` x)++gcd x y  =  x `mod` (0 `mod` y)++gcd x y  =  x `mod` (0 `mod` 0)++gcd x y  =  y `mod` (x `mod` x)++gcd x y  =  y `mod` (x `mod` y)++gcd x y  =  y `mod` (x `mod` 0)++gcd x y  =  y `mod` (y `mod` x)++gcd x y  =  y `mod` (y `mod` y)++gcd x y  =  y `mod` (y `mod` 0)++gcd x y  =  y `mod` (0 `mod` x)++gcd x y  =  y `mod` (0 `mod` y)++gcd x y  =  y `mod` (0 `mod` 0)++gcd x y  =  0 `mod` (x `mod` x)++gcd x y  =  0 `mod` (x `mod` y)++gcd x y  =  0 `mod` (x `mod` 0)++gcd x y  =  0 `mod` (y `mod` x)++gcd x y  =  0 `mod` (y `mod` y)++gcd x y  =  0 `mod` (y `mod` 0)++gcd x y  =  0 `mod` (0 `mod` x)++gcd x y  =  0 `mod` (0 `mod` y)++gcd x y  =  0 `mod` (0 `mod` 0)+++pattern candidates:++gcd x y  =  x++gcd x y  =  y++gcd x y  =  0++gcd x 0  =  x+gcd x y  =  y++gcd x 0  =  x+gcd x y  =  0++gcd x 0  =  0+gcd x y  =  x++gcd 0 x  =  x+gcd x y  =  0++gcd 0 x  =  0+gcd x y  =  y++gcd x y  =  x `mod` x++gcd x y  =  x `mod` y++gcd x y  =  x `mod` 0++gcd x y  =  y `mod` x++gcd x y  =  y `mod` y++gcd x y  =  y `mod` 0++gcd x y  =  0 `mod` x++gcd x y  =  0 `mod` y++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  0++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  x++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  y++gcd x 0  =  x+gcd x y  =  x `mod` x++gcd x 0  =  x+gcd x y  =  x `mod` y++gcd x 0  =  x+gcd x y  =  x `mod` 0++gcd x 0  =  x+gcd x y  =  y `mod` x++gcd x 0  =  x+gcd x y  =  y `mod` y++gcd x 0  =  x+gcd x y  =  y `mod` 0++gcd x 0  =  x+gcd x y  =  0 `mod` x++gcd x 0  =  x+gcd x y  =  0 `mod` y++gcd x 0  =  0+gcd x y  =  x `mod` x++gcd x 0  =  0+gcd x y  =  x `mod` y++gcd x 0  =  0+gcd x y  =  x `mod` 0++gcd x 0  =  0+gcd x y  =  y `mod` x++gcd x 0  =  0+gcd x y  =  y `mod` y++gcd x 0  =  0+gcd x y  =  y `mod` 0++gcd x 0  =  0+gcd x y  =  0 `mod` x++gcd x 0  =  0+gcd x y  =  0 `mod` y++gcd x 0  =  x `mod` x+gcd x y  =  x++gcd x 0  =  x `mod` x+gcd x y  =  y++gcd x 0  =  x `mod` x+gcd x y  =  0++gcd x 0  =  x `mod` 0+gcd x y  =  x++gcd x 0  =  x `mod` 0+gcd x y  =  y++gcd x 0  =  x `mod` 0+gcd x y  =  0++gcd x 0  =  0 `mod` x+gcd x y  =  x++gcd x 0  =  0 `mod` x+gcd x y  =  y++gcd x 0  =  0 `mod` x+gcd x y  =  0++gcd 0 x  =  x+gcd x y  =  x `mod` x++gcd 0 x  =  x+gcd x y  =  x `mod` y++gcd 0 x  =  x+gcd x y  =  x `mod` 0++gcd 0 x  =  x+gcd x y  =  y `mod` x++gcd 0 x  =  x+gcd x y  =  y `mod` y++gcd 0 x  =  x+gcd x y  =  y `mod` 0++gcd 0 x  =  x+gcd x y  =  0 `mod` x++gcd 0 x  =  x+gcd x y  =  0 `mod` y++gcd 0 x  =  0+gcd x y  =  x `mod` x++gcd 0 x  =  0+gcd x y  =  x `mod` y++gcd 0 x  =  0+gcd x y  =  x `mod` 0++gcd 0 x  =  0+gcd x y  =  y `mod` x++gcd 0 x  =  0+gcd x y  =  y `mod` y++gcd 0 x  =  0+gcd x y  =  y `mod` 0++gcd 0 x  =  0+gcd x y  =  0 `mod` x++gcd 0 x  =  0+gcd x y  =  0 `mod` y++gcd 0 x  =  x `mod` x+gcd x y  =  x++gcd 0 x  =  x `mod` x+gcd x y  =  y++gcd 0 x  =  x `mod` x+gcd x y  =  0++gcd 0 x  =  x `mod` 0+gcd x y  =  x++gcd 0 x  =  x `mod` 0+gcd x y  =  y++gcd 0 x  =  x `mod` 0+gcd x y  =  0++gcd 0 x  =  0 `mod` x+gcd x y  =  x++gcd 0 x  =  0 `mod` x+gcd x y  =  y++gcd 0 x  =  0 `mod` x+gcd x y  =  0++gcd x y  =  (x `mod` x) `mod` x++gcd x y  =  (x `mod` x) `mod` y++gcd x y  =  (x `mod` x) `mod` 0++gcd x y  =  (x `mod` y) `mod` x++gcd x y  =  (x `mod` y) `mod` y++gcd x y  =  (x `mod` y) `mod` 0++gcd x y  =  (x `mod` 0) `mod` x++gcd x y  =  (x `mod` 0) `mod` y++gcd x y  =  (x `mod` 0) `mod` 0++gcd x y  =  (y `mod` x) `mod` x++gcd x y  =  (y `mod` x) `mod` y++gcd x y  =  (y `mod` x) `mod` 0++gcd x y  =  (y `mod` y) `mod` x++gcd x y  =  (y `mod` y) `mod` y++gcd x y  =  (y `mod` y) `mod` 0++gcd x y  =  (y `mod` 0) `mod` x++gcd x y  =  (y `mod` 0) `mod` y++gcd x y  =  (y `mod` 0) `mod` 0++gcd x y  =  (0 `mod` x) `mod` x++gcd x y  =  (0 `mod` x) `mod` y++gcd x y  =  (0 `mod` x) `mod` 0++gcd x y  =  (0 `mod` y) `mod` x++gcd x y  =  (0 `mod` y) `mod` y++gcd x y  =  (0 `mod` y) `mod` 0++gcd x y  =  x `mod` (x `mod` x)++gcd x y  =  x `mod` (x `mod` y)++gcd x y  =  x `mod` (x `mod` 0)++gcd x y  =  x `mod` (y `mod` x)++gcd x y  =  x `mod` (y `mod` y)++gcd x y  =  x `mod` (y `mod` 0)++gcd x y  =  x `mod` (0 `mod` x)++gcd x y  =  x `mod` (0 `mod` y)++gcd x y  =  y `mod` (x `mod` x)++gcd x y  =  y `mod` (x `mod` y)++gcd x y  =  y `mod` (x `mod` 0)++gcd x y  =  y `mod` (y `mod` x)++gcd x y  =  y `mod` (y `mod` y)++gcd x y  =  y `mod` (y `mod` 0)++gcd x y  =  y `mod` (0 `mod` x)++gcd x y  =  y `mod` (0 `mod` y)++gcd x y  =  0 `mod` (x `mod` x)++gcd x y  =  0 `mod` (x `mod` y)++gcd x y  =  0 `mod` (x `mod` 0)++gcd x y  =  0 `mod` (y `mod` x)++gcd x y  =  0 `mod` (y `mod` y)++gcd x y  =  0 `mod` (y `mod` 0)++gcd x y  =  0 `mod` (0 `mod` x)++gcd x y  =  0 `mod` (0 `mod` y)++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  x `mod` x++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  x `mod` y++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  x `mod` 0++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  y `mod` x++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  y `mod` y++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  y `mod` 0++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  0 `mod` x++gcd 0 x  =  x+gcd x 0  =  x+gcd x y  =  0 `mod` y++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  x `mod` x++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  x `mod` y++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  x `mod` 0++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  y `mod` x++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  y `mod` y++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  y `mod` 0++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  0 `mod` x++gcd 0 x  =  x+gcd x 0  =  0+gcd x y  =  0 `mod` y++gcd 0 x  =  x+gcd x 0  =  x `mod` x+gcd x y  =  x++gcd 0 x  =  x+gcd x 0  =  x `mod` x+gcd x y  =  0++gcd 0 x  =  x+gcd x 0  =  x `mod` 0+gcd x y  =  x++gcd 0 x  =  x+gcd x 0  =  x `mod` 0+gcd x y  =  0++gcd 0 x  =  x+gcd x 0  =  0 `mod` x+gcd x y  =  x++gcd 0 x  =  x+gcd x 0  =  0 `mod` x+gcd x y  =  0++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  x `mod` x++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  x `mod` y++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  x `mod` 0++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  y `mod` x++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  y `mod` y++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  y `mod` 0++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  0 `mod` x++gcd 0 x  =  0+gcd x 0  =  x+gcd x y  =  0 `mod` y++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  x `mod` x++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  x `mod` y++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  x `mod` 0++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  y `mod` x++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  y `mod` y++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  y `mod` 0++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  0 `mod` x++gcd 0 x  =  0+gcd x 0  =  0+gcd x y  =  0 `mod` y++gcd 0 x  =  0+gcd x 0  =  x `mod` x+gcd x y  =  y++gcd 0 x  =  0+gcd x 0  =  x `mod` 0+gcd x y  =  y++gcd 0 x  =  0+gcd x 0  =  0 `mod` x+gcd x y  =  y++gcd 0 x  =  x `mod` x+gcd x 0  =  x+gcd x y  =  y++gcd 0 x  =  x `mod` x+gcd x 0  =  x+gcd x y  =  0++gcd 0 x  =  x `mod` x+gcd x 0  =  0+gcd x y  =  x++gcd 0 x  =  x `mod` 0+gcd x 0  =  x+gcd x y  =  y++gcd 0 x  =  x `mod` 0+gcd x 0  =  x+gcd x y  =  0++gcd 0 x  =  x `mod` 0+gcd x 0  =  0+gcd x y  =  x++gcd 0 x  =  0 `mod` x+gcd x 0  =  x+gcd x y  =  y++gcd 0 x  =  0 `mod` x+gcd x 0  =  x+gcd x y  =  0++gcd 0 x  =  0 `mod` x+gcd x 0  =  0+gcd x y  =  x++gcd x 0  =  x+gcd x y  =  gcd x (x `mod` y)++gcd x 0  =  x+gcd x y  =  gcd x (y `mod` y)++gcd x 0  =  x+gcd x y  =  gcd x (0 `mod` y)++gcd x 0  =  x+gcd x y  =  gcd y (x `mod` y)++gcd x 0  =  x+gcd x y  =  gcd y (y `mod` y)++gcd x 0  =  x+gcd x y  =  gcd y (0 `mod` y)++gcd x 0  =  x+gcd x y  =  gcd 0 (x `mod` y)++gcd x 0  =  x+gcd x y  =  gcd 0 (y `mod` y)++gcd x 0  =  x+gcd x y  =  gcd 0 (0 `mod` y)++gcd x 0  =  x+gcd x y  =  gcd (x `mod` x) x++gcd x 0  =  x+gcd x y  =  gcd (x `mod` x) y++gcd x 0  =  x+gcd x y  =  gcd (y `mod` x) x++gcd x 0  =  x+gcd x y  =  gcd (y `mod` x) y++gcd x 0  =  x+gcd x y  =  gcd (0 `mod` x) x++gcd x 0  =  x+gcd x y  =  gcd (0 `mod` x) y++gcd x 0  =  0+gcd x y  =  gcd x (x `mod` y)++gcd x 0  =  0+gcd x y  =  gcd x (y `mod` y)++gcd x 0  =  0+gcd x y  =  gcd x (0 `mod` y)++gcd x 0  =  0+gcd x y  =  gcd y (x `mod` y)++gcd x 0  =  0+gcd x y  =  gcd y (y `mod` y)++gcd x 0  =  0+gcd x y  =  gcd y (0 `mod` y)++gcd x 0  =  0+gcd x y  =  gcd 0 (x `mod` y)++gcd x 0  =  0+gcd x y  =  gcd 0 (y `mod` y)++gcd x 0  =  0+gcd x y  =  gcd 0 (0 `mod` y)++gcd x 0  =  0+gcd x y  =  gcd (x `mod` x) x++gcd x 0  =  0+gcd x y  =  gcd (x `mod` x) y++gcd x 0  =  0+gcd x y  =  gcd (y `mod` x) x++gcd x 0  =  0+gcd x y  =  gcd (y `mod` x) y++gcd x 0  =  0+gcd x y  =  gcd (0 `mod` x) x++gcd x 0  =  0+gcd x y  =  gcd (0 `mod` x) y++gcd 0 x  =  x+gcd x y  =  gcd x (x `mod` y)++gcd 0 x  =  x+gcd x y  =  gcd x (y `mod` y)++gcd 0 x  =  x+gcd x y  =  gcd x (0 `mod` y)++gcd 0 x  =  x+gcd x y  =  gcd y (x `mod` y)++gcd 0 x  =  x+gcd x y  =  gcd y (y `mod` y)++gcd 0 x  =  x+gcd x y  =  gcd y (0 `mod` y)++gcd 0 x  =  x+gcd x y  =  gcd (x `mod` x) x++gcd 0 x  =  x+gcd x y  =  gcd (x `mod` x) y++gcd 0 x  =  x+gcd x y  =  gcd (x `mod` x) 0++gcd 0 x  =  x+gcd x y  =  gcd (y `mod` x) x++gcd 0 x  =  x+gcd x y  =  gcd (y `mod` x) y++gcd 0 x  =  x+gcd x y  =  gcd (y `mod` x) 0++gcd 0 x  =  x+gcd x y  =  gcd (0 `mod` x) x++gcd 0 x  =  x+gcd x y  =  gcd (0 `mod` x) y++gcd 0 x  =  x+gcd x y  =  gcd (0 `mod` x) 0++gcd 0 x  =  0+gcd x y  =  gcd x (x `mod` y)++gcd 0 x  =  0+gcd x y  =  gcd x (y `mod` y)++gcd 0 x  =  0+gcd x y  =  gcd x (0 `mod` y)++gcd 0 x  =  0+gcd x y  =  gcd y (x `mod` y)++gcd 0 x  =  0+gcd x y  =  gcd y (y `mod` y)++gcd 0 x  =  0+gcd x y  =  gcd y (0 `mod` y)++gcd 0 x  =  0+gcd x y  =  gcd (x `mod` x) x++gcd 0 x  =  0+gcd x y  =  gcd (x `mod` x) y++gcd 0 x  =  0+gcd x y  =  gcd (x `mod` x) 0++gcd 0 x  =  0+gcd x y  =  gcd (y `mod` x) x++gcd 0 x  =  0+gcd x y  =  gcd (y `mod` x) y++gcd 0 x  =  0+gcd x y  =  gcd (y `mod` x) 0++gcd 0 x  =  0+gcd x y  =  gcd (0 `mod` x) x++gcd 0 x  =  0+gcd x y  =  gcd (0 `mod` x) y++gcd 0 x  =  0+gcd x y  =  gcd (0 `mod` x) 0++gcd x 0  =  x+gcd x y  =  (x `mod` x) `mod` x++gcd x 0  =  x+gcd x y  =  (x `mod` x) `mod` y++gcd x 0  =  x+gcd x y  =  (x `mod` x) `mod` 0++gcd x 0  =  x+gcd x y  =  (x `mod` y) `mod` x++gcd x 0  =  x+gcd x y  =  (x `mod` y) `mod` y++gcd x 0  =  x+gcd x y  =  (x `mod` y) `mod` 0++gcd x 0  =  x+gcd x y  =  (x `mod` 0) `mod` x++gcd x 0  =  x+gcd x y  =  (x `mod` 0) `mod` y++gcd x 0  =  x+gcd x y  =  (x `mod` 0) `mod` 0++gcd x 0  =  x+gcd x y  =  (y `mod` x) `mod` x++gcd x 0  =  x+gcd x y  =  (y `mod` x) `mod` y++gcd x 0  =  x+gcd x y  =  (y `mod` x) `mod` 0++gcd x 0  =  x+gcd x y  =  (y `mod` y) `mod` x++gcd x 0  =  x+gcd x y  =  (y `mod` y) `mod` y++gcd x 0  =  x+gcd x y  =  (y `mod` y) `mod` 0++gcd x 0  =  x+gcd x y  =  (y `mod` 0) `mod` x++gcd x 0  =  x+gcd x y  =  (y `mod` 0) `mod` y++gcd x 0  =  x+gcd x y  =  (y `mod` 0) `mod` 0++gcd x 0  =  x+gcd x y  =  (0 `mod` x) `mod` x++gcd x 0  =  x+gcd x y  =  (0 `mod` x) `mod` y++gcd x 0  =  x+gcd x y  =  (0 `mod` x) `mod` 0++gcd x 0  =  x+gcd x y  =  (0 `mod` y) `mod` x++gcd x 0  =  x+gcd x y  =  (0 `mod` y) `mod` y++gcd x 0  =  x+gcd x y  =  (0 `mod` y) `mod` 0++gcd x 0  =  x+gcd x y  =  x `mod` (x `mod` x)++gcd x 0  =  x+gcd x y  =  x `mod` (x `mod` y)++gcd x 0  =  x+gcd x y  =  x `mod` (x `mod` 0)++gcd x 0  =  x+gcd x y  =  x `mod` (y `mod` x)++gcd x 0  =  x+gcd x y  =  x `mod` (y `mod` y)++gcd x 0  =  x+gcd x y  =  x `mod` (y `mod` 0)++gcd x 0  =  x+gcd x y  =  x `mod` (0 `mod` x)++gcd x 0  =  x+gcd x y  =  x `mod` (0 `mod` y)++gcd x 0  =  x+gcd x y  =  y `mod` (x `mod` x)++gcd x 0  =  x+gcd x y  =  y `mod` (x `mod` y)++gcd x 0  =  x+gcd x y  =  y `mod` (x `mod` 0)++gcd x 0  =  x+gcd x y  =  y `mod` (y `mod` x)++gcd x 0  =  x+gcd x y  =  y `mod` (y `mod` y)++gcd x 0  =  x+gcd x y  =  y `mod` (y `mod` 0)++gcd x 0  =  x+gcd x y  =  y `mod` (0 `mod` x)++gcd x 0  =  x+gcd x y  =  y `mod` (0 `mod` y)++gcd x 0  =  x+gcd x y  =  0 `mod` (x `mod` x)++gcd x 0  =  x+gcd x y  =  0 `mod` (x `mod` y)++gcd x 0  =  x+gcd x y  =  0 `mod` (x `mod` 0)++gcd x 0  =  x+gcd x y  =  0 `mod` (y `mod` x)++gcd x 0  =  x+gcd x y  =  0 `mod` (y `mod` y)++gcd x 0  =  x+gcd x y  =  0 `mod` (y `mod` 0)++gcd x 0  =  x+gcd x y  =  0 `mod` (0 `mod` x)++gcd x 0  =  x+gcd x y  =  0 `mod` (0 `mod` y)++gcd x 0  =  0+gcd x y  =  (x `mod` x) `mod` x++gcd x 0  =  0+gcd x y  =  (x `mod` x) `mod` y++gcd x 0  =  0+gcd x y  =  (x `mod` x) `mod` 0++gcd x 0  =  0+gcd x y  =  (x `mod` y) `mod` x++gcd x 0  =  0+gcd x y  =  (x `mod` y) `mod` y++gcd x 0  =  0+gcd x y  =  (x `mod` y) `mod` 0++gcd x 0  =  0+gcd x y  =  (x `mod` 0) `mod` x++gcd x 0  =  0+gcd x y  =  (x `mod` 0) `mod` y++gcd x 0  =  0+gcd x y  =  (x `mod` 0) `mod` 0++gcd x 0  =  0+gcd x y  =  (y `mod` x) `mod` x++gcd x 0  =  0+gcd x y  =  (y `mod` x) `mod` y++gcd x 0  =  0+gcd x y  =  (y `mod` x) `mod` 0++gcd x 0  =  0+gcd x y  =  (y `mod` y) `mod` x++gcd x 0  =  0+gcd x y  =  (y `mod` y) `mod` y++gcd x 0  =  0+gcd x y  =  (y `mod` y) `mod` 0++gcd x 0  =  0+gcd x y  =  (y `mod` 0) `mod` x++gcd x 0  =  0+gcd x y  =  (y `mod` 0) `mod` y++gcd x 0  =  0+gcd x y  =  (y `mod` 0) `mod` 0++gcd x 0  =  0+gcd x y  =  (0 `mod` x) `mod` x++gcd x 0  =  0+gcd x y  =  (0 `mod` x) `mod` y++gcd x 0  =  0+gcd x y  =  (0 `mod` x) `mod` 0++gcd x 0  =  0+gcd x y  =  (0 `mod` y) `mod` x++gcd x 0  =  0+gcd x y  =  (0 `mod` y) `mod` y++gcd x 0  =  0+gcd x y  =  (0 `mod` y) `mod` 0++gcd x 0  =  0+gcd x y  =  x `mod` (x `mod` x)++gcd x 0  =  0+gcd x y  =  x `mod` (x `mod` y)++gcd x 0  =  0+gcd x y  =  x `mod` (x `mod` 0)++gcd x 0  =  0+gcd x y  =  x `mod` (y `mod` x)++gcd x 0  =  0+gcd x y  =  x `mod` (y `mod` y)++gcd x 0  =  0+gcd x y  =  x `mod` (y `mod` 0)++gcd x 0  =  0+gcd x y  =  x `mod` (0 `mod` x)++gcd x 0  =  0+gcd x y  =  x `mod` (0 `mod` y)++gcd x 0  =  0+gcd x y  =  y `mod` (x `mod` x)++gcd x 0  =  0+gcd x y  =  y `mod` (x `mod` y)++gcd x 0  =  0+gcd x y  =  y `mod` (x `mod` 0)++gcd x 0  =  0+gcd x y  =  y `mod` (y `mod` x)++gcd x 0  =  0+gcd x y  =  y `mod` (y `mod` y)++gcd x 0  =  0+gcd x y  =  y `mod` (y `mod` 0)++gcd x 0  =  0+gcd x y  =  y `mod` (0 `mod` x)++gcd x 0  =  0+gcd x y  =  y `mod` (0 `mod` y)++gcd x 0  =  0+gcd x y  =  0 `mod` (x `mod` x)++gcd x 0  =  0+gcd x y  =  0 `mod` (x `mod` y)++gcd x 0  =  0+gcd x y  =  0 `mod` (x `mod` 0)++gcd x 0  =  0+gcd x y  =  0 `mod` (y `mod` x)++gcd x 0  =  0+gcd x y  =  0 `mod` (y `mod` y)++gcd x 0  =  0+gcd x y  =  0 `mod` (y `mod` 0)++gcd x 0  =  0+gcd x y  =  0 `mod` (0 `mod` x)++gcd x 0  =  0+gcd x y  =  0 `mod` (0 `mod` y)++gcd x 0  =  x `mod` x+gcd x y  =  x `mod` y++gcd x 0  =  x `mod` x+gcd x y  =  x `mod` 0++gcd x 0  =  x `mod` x+gcd x y  =  y `mod` x++gcd x 0  =  x `mod` x+gcd x y  =  y `mod` y++gcd x 0  =  x `mod` x+gcd x y  =  y `mod` 0++gcd x 0  =  x `mod` x+gcd x y  =  0 `mod` x++gcd x 0  =  x `mod` x+gcd x y  =  0 `mod` y++gcd x 0  =  x `mod` 0+gcd x y  =  x `mod` x++gcd x 0  =  x `mod` 0+gcd x y  =  y `mod` x++gcd x 0  =  x `mod` 0+gcd x y  =  y `mod` y++gcd x 0  =  x `mod` 0+gcd x y  =  y `mod` 0++gcd x 0  =  x `mod` 0+gcd x y  =  0 `mod` x++gcd x 0  =  x `mod` 0+gcd x y  =  0 `mod` y++gcd x 0  =  0 `mod` x+gcd x y  =  x `mod` x++gcd x 0  =  0 `mod` x+gcd x y  =  x `mod` y++gcd x 0  =  0 `mod` x+gcd x y  =  x `mod` 0++gcd x 0  =  0 `mod` x+gcd x y  =  y `mod` y++gcd x 0  =  0 `mod` x+gcd x y  =  y `mod` 0++gcd x 0  =  0 `mod` x+gcd x y  =  0 `mod` y++gcd x 0  =  (x `mod` x) `mod` x+gcd x y  =  x++gcd x 0  =  (x `mod` x) `mod` x+gcd x y  =  y++gcd x 0  =  (x `mod` x) `mod` x+gcd x y  =  0++gcd x 0  =  (x `mod` x) `mod` 0+gcd x y  =  x++gcd x 0  =  (x `mod` x) `mod` 0+gcd x y  =  y++gcd x 0  =  (x `mod` x) `mod` 0+gcd x y  =  0++gcd x 0  =  (x `mod` 0) `mod` x+gcd x y  =  x++gcd x 0  =  (x `mod` 0) `mod` x+gcd x y  =  y++gcd x 0  =  (x `mod` 0) `mod` x+gcd x y  =  0++gcd x 0  =  (x `mod` 0) `mod` 0+gcd x y  =  x++gcd x 0  =  (x `mod` 0) `mod` 0+gcd x y  =  y++gcd x 0  =  (x `mod` 0) `mod` 0+gcd x y  =  0++gcd x 0  =  (0 `mod` x) `mod` x+gcd x y  =  x++gcd x 0  =  (0 `mod` x) `mod` x+gcd x y  =  y++gcd x 0  =  (0 `mod` x) `mod` x+gcd x y  =  0++gcd x 0  =  (0 `mod` x) `mod` 0+gcd x y  =  x++gcd x 0  =  (0 `mod` x) `mod` 0+gcd x y  =  y++gcd x 0  =  (0 `mod` x) `mod` 0+gcd x y  =  0++gcd x 0  =  x `mod` (x `mod` x)+gcd x y  =  x++gcd x 0  =  x `mod` (x `mod` x)+gcd x y  =  y++gcd x 0  =  x `mod` (x `mod` x)+gcd x y  =  0++gcd x 0  =  x `mod` (x `mod` 0)+gcd x y  =  x++gcd x 0  =  x `mod` (x `mod` 0)+gcd x y  =  y++gcd x 0  =  x `mod` (x `mod` 0)+gcd x y  =  0++gcd x 0  =  x `mod` (0 `mod` x)+gcd x y  =  x++gcd x 0  =  x `mod` (0 `mod` x)+gcd x y  =  y++gcd x 0  =  x `mod` (0 `mod` x)+gcd x y  =  0++gcd x 0  =  0 `mod` (x `mod` x)+gcd x y  =  x++gcd x 0  =  0 `mod` (x `mod` x)+gcd x y  =  y++gcd x 0  =  0 `mod` (x `mod` x)+gcd x y  =  0++gcd x 0  =  0 `mod` (x `mod` 0)+gcd x y  =  x++gcd x 0  =  0 `mod` (x `mod` 0)+gcd x y  =  y++gcd x 0  =  0 `mod` (x `mod` 0)+gcd x y  =  0++gcd x 0  =  0 `mod` (0 `mod` x)+gcd x y  =  x++gcd x 0  =  0 `mod` (0 `mod` x)+gcd x y  =  y++gcd x 0  =  0 `mod` (0 `mod` x)+gcd x y  =  0++gcd 0 x  =  x+gcd x y  =  (x `mod` x) `mod` x++gcd 0 x  =  x+gcd x y  =  (x `mod` x) `mod` y++gcd 0 x  =  x+gcd x y  =  (x `mod` x) `mod` 0++gcd 0 x  =  x+gcd x y  =  (x `mod` y) `mod` x++gcd 0 x  =  x+gcd x y  =  (x `mod` y) `mod` y++gcd 0 x  =  x+gcd x y  =  (x `mod` y) `mod` 0++gcd 0 x  =  x+gcd x y  =  (x `mod` 0) `mod` x++gcd 0 x  =  x+gcd x y  =  (x `mod` 0) `mod` y++gcd 0 x  =  x+gcd x y  =  (x `mod` 0) `mod` 0++gcd 0 x  =  x+gcd x y  =  (y `mod` x) `mod` x++gcd 0 x  =  x+gcd x y  =  (y `mod` x) `mod` y++gcd 0 x  =  x+gcd x y  =  (y `mod` x) `mod` 0++gcd 0 x  =  x+gcd x y  =  (y `mod` y) `mod` x++gcd 0 x  =  x+gcd x y  =  (y `mod` y) `mod` y++gcd 0 x  =  x+gcd x y  =  (y `mod` y) `mod` 0++gcd 0 x  =  x+gcd x y  =  (y `mod` 0) `mod` x++gcd 0 x  =  x+gcd x y  =  (y `mod` 0) `mod` y++gcd 0 x  =  x+gcd x y  =  (y `mod` 0) `mod` 0++gcd 0 x  =  x+gcd x y  =  (0 `mod` x) `mod` x++gcd 0 x  =  x+gcd x y  =  (0 `mod` x) `mod` y++gcd 0 x  =  x+gcd x y  =  (0 `mod` x) `mod` 0++gcd 0 x  =  x+gcd x y  =  (0 `mod` y) `mod` x++gcd 0 x  =  x+gcd x y  =  (0 `mod` y) `mod` y++gcd 0 x  =  x+gcd x y  =  (0 `mod` y) `mod` 0++gcd 0 x  =  x+gcd x y  =  x `mod` (x `mod` x)++gcd 0 x  =  x+gcd x y  =  x `mod` (x `mod` y)++gcd 0 x  =  x+gcd x y  =  x `mod` (x `mod` 0)++gcd 0 x  =  x+gcd x y  =  x `mod` (y `mod` x)++gcd 0 x  =  x+gcd x y  =  x `mod` (y `mod` y)++gcd 0 x  =  x+gcd x y  =  x `mod` (y `mod` 0)++gcd 0 x  =  x+gcd x y  =  x `mod` (0 `mod` x)++gcd 0 x  =  x+gcd x y  =  x `mod` (0 `mod` y)++gcd 0 x  =  x+gcd x y  =  y `mod` (x `mod` x)++gcd 0 x  =  x+gcd x y  =  y `mod` (x `mod` y)++gcd 0 x  =  x+gcd x y  =  y `mod` (x `mod` 0)++gcd 0 x  =  x+gcd x y  =  y `mod` (y `mod` x)++gcd 0 x  =  x+gcd x y  =  y `mod` (y `mod` y)++gcd 0 x  =  x+gcd x y  =  y `mod` (y `mod` 0)++gcd 0 x  =  x+gcd x y  =  y `mod` (0 `mod` x)++gcd 0 x  =  x+gcd x y  =  y `mod` (0 `mod` y)++gcd 0 x  =  x+gcd x y  =  0 `mod` (x `mod` x)++gcd 0 x  =  x+gcd x y  =  0 `mod` (x `mod` y)++gcd 0 x  =  x+gcd x y  =  0 `mod` (x `mod` 0)++gcd 0 x  =  x+gcd x y  =  0 `mod` (y `mod` x)++gcd 0 x  =  x+gcd x y  =  0 `mod` (y `mod` y)++gcd 0 x  =  x+gcd x y  =  0 `mod` (y `mod` 0)++gcd 0 x  =  x+gcd x y  =  0 `mod` (0 `mod` x)++gcd 0 x  =  x+gcd x y  =  0 `mod` (0 `mod` y)++gcd 0 x  =  0+gcd x y  =  (x `mod` x) `mod` x++gcd 0 x  =  0+gcd x y  =  (x `mod` x) `mod` y++gcd 0 x  =  0+gcd x y  =  (x `mod` x) `mod` 0++gcd 0 x  =  0+gcd x y  =  (x `mod` y) `mod` x++gcd 0 x  =  0+gcd x y  =  (x `mod` y) `mod` y++gcd 0 x  =  0+gcd x y  =  (x `mod` y) `mod` 0++gcd 0 x  =  0+gcd x y  =  (x `mod` 0) `mod` x++gcd 0 x  =  0+gcd x y  =  (x `mod` 0) `mod` y++gcd 0 x  =  0+gcd x y  =  (x `mod` 0) `mod` 0++gcd 0 x  =  0+gcd x y  =  (y `mod` x) `mod` x++gcd 0 x  =  0+gcd x y  =  (y `mod` x) `mod` y++gcd 0 x  =  0+gcd x y  =  (y `mod` x) `mod` 0++gcd 0 x  =  0+gcd x y  =  (y `mod` y) `mod` x++gcd 0 x  =  0+gcd x y  =  (y `mod` y) `mod` y++gcd 0 x  =  0+gcd x y  =  (y `mod` y) `mod` 0++gcd 0 x  =  0+gcd x y  =  (y `mod` 0) `mod` x++gcd 0 x  =  0+gcd x y  =  (y `mod` 0) `mod` y++gcd 0 x  =  0+gcd x y  =  (y `mod` 0) `mod` 0++gcd 0 x  =  0+gcd x y  =  (0 `mod` x) `mod` x++gcd 0 x  =  0+gcd x y  =  (0 `mod` x) `mod` y++gcd 0 x  =  0+gcd x y  =  (0 `mod` x) `mod` 0++gcd 0 x  =  0+gcd x y  =  (0 `mod` y) `mod` x++gcd 0 x  =  0+gcd x y  =  (0 `mod` y) `mod` y++gcd 0 x  =  0+gcd x y  =  (0 `mod` y) `mod` 0++gcd 0 x  =  0+gcd x y  =  x `mod` (x `mod` x)++gcd 0 x  =  0+gcd x y  =  x `mod` (x `mod` y)++gcd 0 x  =  0+gcd x y  =  x `mod` (x `mod` 0)++gcd 0 x  =  0+gcd x y  =  x `mod` (y `mod` x)++gcd 0 x  =  0+gcd x y  =  x `mod` (y `mod` y)++gcd 0 x  =  0+gcd x y  =  x `mod` (y `mod` 0)++gcd 0 x  =  0+gcd x y  =  x `mod` (0 `mod` x)++gcd 0 x  =  0+gcd x y  =  x `mod` (0 `mod` y)++gcd 0 x  =  0+gcd x y  =  y `mod` (x `mod` x)++gcd 0 x  =  0+gcd x y  =  y `mod` (x `mod` y)++gcd 0 x  =  0+gcd x y  =  y `mod` (x `mod` 0)++gcd 0 x  =  0+gcd x y  =  y `mod` (y `mod` x)++gcd 0 x  =  0+gcd x y  =  y `mod` (y `mod` y)++gcd 0 x  =  0+gcd x y  =  y `mod` (y `mod` 0)++gcd 0 x  =  0+gcd x y  =  y `mod` (0 `mod` x)++gcd 0 x  =  0+gcd x y  =  y `mod` (0 `mod` y)++gcd 0 x  =  0+gcd x y  =  0 `mod` (x `mod` x)++gcd 0 x  =  0+gcd x y  =  0 `mod` (x `mod` y)++gcd 0 x  =  0+gcd x y  =  0 `mod` (x `mod` 0)++gcd 0 x  =  0+gcd x y  =  0 `mod` (y `mod` x)++gcd 0 x  =  0+gcd x y  =  0 `mod` (y `mod` y)++gcd 0 x  =  0+gcd x y  =  0 `mod` (y `mod` 0)++gcd 0 x  =  0+gcd x y  =  0 `mod` (0 `mod` x)++gcd 0 x  =  0+gcd x y  =  0 `mod` (0 `mod` y)++gcd 0 x  =  x `mod` x+gcd x y  =  x `mod` y++gcd 0 x  =  x `mod` x+gcd x y  =  x `mod` 0++gcd 0 x  =  x `mod` x+gcd x y  =  y `mod` x++gcd 0 x  =  x `mod` x+gcd x y  =  y `mod` 0++gcd 0 x  =  x `mod` x+gcd x y  =  0 `mod` x++gcd 0 x  =  x `mod` x+gcd x y  =  0 `mod` y++gcd 0 x  =  x `mod` 0+gcd x y  =  x `mod` x++gcd 0 x  =  x `mod` 0+gcd x y  =  x `mod` y++gcd 0 x  =  x `mod` 0+gcd x y  =  y `mod` y++gcd 0 x  =  x `mod` 0+gcd x y  =  0 `mod` x++gcd 0 x  =  x `mod` 0+gcd x y  =  0 `mod` y++gcd 0 x  =  0 `mod` x+gcd x y  =  x `mod` x++gcd 0 x  =  0 `mod` x+gcd x y  =  x `mod` 0++gcd 0 x  =  0 `mod` x+gcd x y  =  y `mod` x++gcd 0 x  =  0 `mod` x+gcd x y  =  y `mod` y++gcd 0 x  =  0 `mod` x+gcd x y  =  y `mod` 0++gcd 0 x  =  (x `mod` x) `mod` x+gcd x y  =  x++gcd 0 x  =  (x `mod` x) `mod` x+gcd x y  =  y++gcd 0 x  =  (x `mod` x) `mod` x+gcd x y  =  0++gcd 0 x  =  (x `mod` x) `mod` 0+gcd x y  =  x++gcd 0 x  =  (x `mod` x) `mod` 0+gcd x y  =  y++gcd 0 x  =  (x `mod` x) `mod` 0+gcd x y  =  0++gcd 0 x  =  (x `mod` 0) `mod` x+gcd x y  =  x++gcd 0 x  =  (x `mod` 0) `mod` x+gcd x y  =  y++gcd 0 x  =  (x `mod` 0) `mod` x+gcd x y  =  0++gcd 0 x  =  (x `mod` 0) `mod` 0+gcd x y  =  x++gcd 0 x  =  (x `mod` 0) `mod` 0+gcd x y  =  y++gcd 0 x  =  (x `mod` 0) `mod` 0+gcd x y  =  0++gcd 0 x  =  (0 `mod` x) `mod` x+gcd x y  =  x++gcd 0 x  =  (0 `mod` x) `mod` x+gcd x y  =  y++gcd 0 x  =  (0 `mod` x) `mod` x+gcd x y  =  0++gcd 0 x  =  (0 `mod` x) `mod` 0+gcd x y  =  x++gcd 0 x  =  (0 `mod` x) `mod` 0+gcd x y  =  y++gcd 0 x  =  (0 `mod` x) `mod` 0+gcd x y  =  0++gcd 0 x  =  x `mod` (x `mod` x)+gcd x y  =  x++gcd 0 x  =  x `mod` (x `mod` x)+gcd x y  =  y++gcd 0 x  =  x `mod` (x `mod` x)+gcd x y  =  0++gcd 0 x  =  x `mod` (x `mod` 0)+gcd x y  =  x++gcd 0 x  =  x `mod` (x `mod` 0)+gcd x y  =  y++gcd 0 x  =  x `mod` (x `mod` 0)+gcd x y  =  0++gcd 0 x  =  x `mod` (0 `mod` x)+gcd x y  =  x++gcd 0 x  =  x `mod` (0 `mod` x)+gcd x y  =  y++gcd 0 x  =  x `mod` (0 `mod` x)+gcd x y  =  0++gcd 0 x  =  0 `mod` (x `mod` x)+gcd x y  =  x++gcd 0 x  =  0 `mod` (x `mod` x)+gcd x y  =  y++gcd 0 x  =  0 `mod` (x `mod` x)+gcd x y  =  0++gcd 0 x  =  0 `mod` (x `mod` 0)+gcd x y  =  x++gcd 0 x  =  0 `mod` (x `mod` 0)+gcd x y  =  y++gcd 0 x  =  0 `mod` (x `mod` 0)+gcd x y  =  0++gcd 0 x  =  0 `mod` (0 `mod` x)+gcd x y  =  x++gcd 0 x  =  0 `mod` (0 `mod` x)+gcd x y  =  y++gcd 0 x  =  0 `mod` (0 `mod` x) gcd x y  =  0  
bench/gps.out view
@@ -4,9 +4,9 @@ -- looking through 1 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 4 -- tested 4 candidates-gps1 x y  =  fromIntegral x + y+gps1 x y  =  y + fromIntegral x  gps2 :: Int -> Maybe [Char] -- testing 6 combinations of argument values@@ -14,7 +14,7 @@ -- looking through 1 candidates of size 1 -- looking through 2 candidates of size 2 -- looking through 3 candidates of size 3--- looking through 3 candidates of size 4+-- looking through 2 candidates of size 4 -- looking through 2 candidates of size 5 -- looking through 0 candidates of size 6 -- looking through 32 candidates of size 7@@ -24,8 +24,10 @@ -- looking through 16 candidates of size 11 -- looking through 512 candidates of size 12 -- looking through 1792 candidates of size 13--- tested 1204 candidates-gps2 x  =  if 2000 <= x then Just "large" else (if x < 1000 then Just "small" else Nothing)+-- tested 1203 candidates+gps2 x  =  if 2000 <= x+           then Just "large"+           else if x < 1000 then Just "small" else Nothing  gps3 :: Int -> Int -> Int -> [Int] -- testing 2 combinations of argument values@@ -35,10 +37,10 @@ -- looking through 0 candidates of size 3 -- looking through 64 candidates of size 4 -- looking through 0 candidates of size 5--- looking through 1536 candidates of size 6+-- looking through 1248 candidates of size 6 -- looking through 0 candidates of size 7--- looking through 26858 candidates of size 8--- tested 19480 candidates+-- looking through 18627 candidates of size 8+-- tested 12358 candidates gps3 x y z  =  enumFromThenTo x (x + z) (y - 1)  gps3 :: Int -> Int -> Int -> [Int]@@ -48,11 +50,11 @@ -- looking through 0 candidates of size 2 -- looking through 3 candidates of size 3 -- looking through 0 candidates of size 4--- looking through 18 candidates of size 5+-- looking through 15 candidates of size 5 -- looking through 0 candidates of size 6--- looking through 108 candidates of size 7+-- looking through 81 candidates of size 7 -- looking through 36 candidates of size 8--- tested 166 candidates+-- tested 136 candidates cannot conjure  gps4 :: [Char] -> [Char] -> [Char] -> Bool@@ -67,9 +69,9 @@ -- looking through 0 candidates of size 7 -- looking through 0 candidates of size 8 -- looking through 162 candidates of size 9--- looking through 16 candidates of size 10--- looking through 30 candidates of size 11--- tested 187 candidates+-- looking through 26 candidates of size 10+-- looking through 15 candidates of size 11+-- tested 197 candidates gps4 cs ds es  =  length cs < length ds && length ds < length es  gps5 :: [Char] -> [Char]@@ -88,12 +90,12 @@ -- testing 9 combinations of argument values -- pruning with 16/18 rules -- looking through 4 candidates of size 1--- looking through 3 candidates of size 2--- looking through 27 candidates of size 3--- looking through 32 candidates of size 4--- looking through 506 candidates of size 5--- looking through 530 candidates of size 6--- tested 1102 candidates+-- looking through 2 candidates of size 2+-- looking through 14 candidates of size 3+-- looking through 17 candidates of size 4+-- looking through 188 candidates of size 5+-- looking through 200 candidates of size 6+-- tested 425 candidates cannot conjure  gps7 :: [Char] -> ([Char],Int)@@ -119,6 +121,7 @@ -- 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 -- tested 0 candidates cannot conjure @@ -130,12 +133,12 @@ -- looking through 4 candidates of size 3 -- looking through 4 candidates of size 4 -- looking through 10 candidates of size 5--- looking through 24 candidates of size 6+-- looking through 21 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--- tested 328 candidates+-- looking through 256 candidates of size 10+-- tested 325 candidates gps9 x  =  filter even (filter (x >) (map sq [1..x]))  wallisNext :: Ratio Integer -> Ratio Integer@@ -146,10 +149,10 @@ -- looking through 3 candidates of size 3 -- looking through 15 candidates of size 4 -- looking through 4 candidates of size 5--- looking through 118 candidates of size 6+-- looking through 86 candidates of size 6 -- looking through 5 candidates of size 7--- looking through 1001 candidates of size 8--- tested 1015 candidates+-- looking through 537 candidates of size 8+-- tested 588 candidates wallisNext (x % y)  =  (y + 1) % (x + 1)  wallisNext :: Ratio Integer -> Ratio Integer@@ -160,10 +163,10 @@ -- looking through 4 candidates of size 3 -- looking through 16 candidates of size 4 -- looking through 3 candidates of size 5--- looking through 103 candidates of size 6+-- looking through 71 candidates of size 6 -- looking through 5 candidates of size 7--- looking through 801 candidates of size 8--- tested 832 candidates+-- looking through 393 candidates of size 8+-- tested 451 candidates wallisNext (x % y)  =  (y + 1) % (x + 1)  gps10 :: Int -> Ratio Integer@@ -210,16 +213,16 @@ -- 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--- tested 10413 candidates+-- looking through 4 candidates of size 3+-- looking through 11 candidates of size 4+-- looking through 22 candidates of size 5+-- looking through 51 candidates of size 6+-- looking through 133 candidates of size 7+-- looking through 318 candidates of size 8+-- looking through 938 candidates of size 9+-- looking through 2418 candidates of size 10+-- looking through 7229 candidates of size 11+-- tested 8246 candidates gps12 xs  =  (length xs - fromJust (findIndex (0 ==) (reverse xs))) - 1  gps13 :: [Ratio Integer] -> Ratio Integer@@ -229,11 +232,11 @@ -- 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--- tested 317 candidates+-- looking through 14 candidates of size 5+-- looking through 51 candidates of size 6+-- looking through 105 candidates of size 7+-- looking through 365 candidates of size 8+-- tested 271 candidates gps13 qs  =  foldr (+) 0 qs / fromIntegral (length qs)  odd :: Int -> Bool@@ -241,11 +244,11 @@ -- 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 7 candidates of size 4--- looking through 83 candidates of size 5--- tested 29 candidates-odd x  =  x `mod` 2 /= 0+-- looking through 4 candidates of size 3+-- looking through 4 candidates of size 4+-- looking through 44 candidates of size 5+-- tested 25 candidates+odd x  =  0 /= x `mod` 2  gps14 :: [Int] -> Int -- testing 3 combinations of argument values@@ -262,24 +265,24 @@ -- 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--- tested 749 candidates+-- looking through 3 candidates of size 3+-- looking through 27 candidates of size 4+-- looking through 30 candidates of size 5+-- looking through 258 candidates of size 6+-- looking through 474 candidates of size 7+-- tested 381 candidates gps14 []  =  0-gps14 (x:xs)  =  x `mod` 2 + gps14 xs+gps14 (x:xs)  =  x + gps14 xs `mod` 2  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--- tested 4 candidates-gps15 xs ys  =  reverse xs == ys+-- looking through 1 candidates of size 3+-- looking through 4 candidates of size 4+-- tested 3 candidates+gps15 xs ys  =  xs == reverse ys  gps16 :: [Char] -> [Char] -> Bool -- testing 6 combinations of argument values@@ -296,33 +299,32 @@ -- 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 11 candidates of size 3--- looking through 29 candidates of size 4--- looking through 60 candidates of size 5--- looking through 145 candidates of size 6--- looking through 501 candidates of size 7--- looking through 1098 candidates of size 8--- looking through 4673 candidates of size 9--- tested 1852 candidates+-- looking through 3 candidates of size 2+-- looking through 7 candidates of size 3+-- looking through 13 candidates of size 4+-- looking through 35 candidates of size 5+-- looking through 61 candidates of size 6+-- looking through 219 candidates of size 7+-- looking through 354 candidates of size 8+-- looking through 1431 candidates of size 9+-- tested 729 candidates gps17 0  =  0-gps17 x  =  x * x + gps17 (x - 1)+gps17 x  =  gps17 (x - 1) + x * x  gps18 :: [Int] -> [Int] -> [Int] -- testing 3 combinations of argument values -- pruning with 2/6 rules -- looking through 3 candidates of size 1 -- looking through 7 candidates of size 2--- looking through 9 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 787 candidates of size 7--- looking through 220 candidates of size 8--- looking through 4632 candidates of size 9--- tested 3924 candidates-gps18 [] []  =  []-gps18 [] (x:xs)  =  xs+-- looking through 11 candidates of size 3+-- looking through 37 candidates of size 4+-- looking through 98 candidates of size 5+-- looking through 106 candidates of size 6+-- looking through 440 candidates of size 7+-- looking through 428 candidates of size 8+-- looking through 1950 candidates of size 9+-- tested 2031 candidates+gps18 [] xs  =  xs gps18 (x:xs) []  =  xs gps18 (x:xs) (y:ys)  =  x + y:gps18 xs ys @@ -331,9 +333,9 @@ -- pruning with 2/7 rules -- looking through 2 candidates of size 1 -- looking through 1 candidates of size 2--- looking through 0 candidates of size 3--- looking through 12 candidates of size 4--- tested 13 candidates+-- looking through 1 candidates of size 3+-- looking through 11 candidates of size 4+-- tested 14 candidates gps18 xs ys  =  zipWith (+) xs ys  gps19 :: Int -> [Char] -> [Char]@@ -396,7 +398,9 @@ -- looking through 20409 candidates of size 14 -- tested 27901 candidates pig1 ""  =  "ay"-pig1 (c:cs)  =  if isVowel c then (c:cs) ++ "ay" else cs ++ (c:"ay")+pig1 (c:cs)  =  if isVowel c+                then (c:cs) ++ "ay"+                else cs ++ (c:"ay")  gps20c :: [Char] -> [Char] -- pruning with 1/1 rules@@ -432,10 +436,10 @@ -- 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+-- looking through 3 candidates of size 6 -- tested 5 candidates gps22 ""  =  0-gps22 (c:cs)  =  scrabble1 c + gps22 cs+gps22 (c:cs)  =  gps22 cs + scrabble1 c  gps23 :: [Char] -> ([(Int,Int)],Int,Double) -- pruning with 0/0 rules@@ -451,13 +455,13 @@ -- 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--- tested 673 candidates+-- looking through 8 candidates of size 5+-- looking through 15 candidates of size 6+-- looking through 31 candidates of size 7+-- looking through 77 candidates of size 8+-- looking through 203 candidates of size 9+-- looking through 487 candidates of size 10+-- tested 485 candidates gps24 cs  =  chr (ord ' ' + sum (map ord cs) `mod` 64)  gps25 :: Int -> [Int]@@ -487,47 +491,49 @@ -- 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 90 candidates of size 10 -- looking through 2592 candidates of size 11--- tested 1579 candidates-gps27 x y z  =  if x < y then (if y < z then y else z) else x+-- tested 1489 candidates+gps27 x y z  =  if x < y+                then if y < z then y else z+                else x  gps27b :: Int -> Int -> Int -> Int -- testing 3 combinations of argument values -- pruning with 20/30 rules -- looking through 3 candidates of size 1 -- looking through 0 candidates of size 2--- looking through 12 candidates of size 3+-- looking through 6 candidates of size 3 -- looking through 0 candidates of size 4--- looking through 36 candidates of size 5--- tested 16 candidates-gps27b x y z  =  min (max x y) z+-- looking through 12 candidates of size 5+-- tested 15 candidates+gps27b x y z  =  min z (max x y)  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 6 candidates of size 3 -- looking through 0 candidates of size 4--- looking through 24 candidates of size 5+-- looking through 12 candidates of size 5 -- looking through 0 candidates of size 6--- looking through 72 candidates of size 7--- tested 44 candidates+-- looking through 36 candidates of size 7+-- tested 25 candidates gps28 x y z x'  =  x `min` (y `min` (z `min` x'))  gps29 :: [Char] -> Int -- 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--- tested 86 candidates+-- looking through 2 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 2 candidates of size 5+-- looking through 6 candidates of size 6+-- looking through 10 candidates of size 7+-- looking through 10 candidates of size 8+-- looking through 24 candidates of size 9+-- tested 40 candidates gps29 ""  =  0-gps29 (c:cs)  =  (if isVowel c then 1 else 0) + gps29 cs+gps29 (c:cs)  =  gps29 cs + (if isVowel c then 1 else 0) 
bench/gps2.hs view
@@ -280,7 +280,7 @@ -- gps8g x xs  =  head $ filter ((x ==) . uncurry (+)) $ liftA2 (,) xs xs  gps8c :: IO ()-gps8c  =  conjure "gps" gps8p []+gps8c  =  conjure "gps8" gps8p []   -- GPSB#9: Fizz Buzz (CW)@@ -302,24 +302,36 @@  -- probably unreachable performance-wise gps9c :: IO ()-gps9c  =  conjure "gps" gps9p []+gps9c  =  conjure "gps9" gps9p []   gps10p :: [Int] -> Int+gps10p [0]  =  -2+gps10p [3]  =  -1+gps10p [6]  =  0+gps10p [9]  =  1+gps10p [0,3]  =  -3+gps10p [3,0]  =  -3+gps10p [3,2,1]  =  -5 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--- ??+gps10g []  =  0+gps10g (x:xs)  =  (x `div` 3 - 2) + gps10g xs  -- unreachable due to lambda gps10c :: IO ()-gps10c  =  conjure "gps" gps9p []+gps10c  =  conjure "gps10" gps10p+  [ pr (0 :: Int)+  , pr (1 :: Int)+  , pr (2 :: Int)+  , pr (3 :: Int)+  , prim "`div`" (div :: Int -> Int -> Int)+  , prim "+" ((+) :: Int -> Int -> Int)+  , prim "-" ((-) :: Int -> Int -> Int)+  ]   gps11p :: Int -> Int -> Int
bench/gps2.out view
@@ -32,10 +32,10 @@ -- 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 237 candidates of size 3--- looking through 433 candidates of size 4--- tested 699 candidates+-- looking through 24 candidates of size 2+-- looking through 75 candidates of size 3+-- looking through 234 candidates of size 4+-- tested 337 candidates cannot conjure  gps2 :: Double -> Double -> Int -> Double@@ -43,11 +43,11 @@ -- pruning with 2/6 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 316 candidates of size 5--- looking through 1440 candidates of size 6--- tested 1848 candidates+-- looking through 17 candidates of size 3+-- looking through 62 candidates of size 4+-- looking through 266 candidates of size 5+-- looking through 1154 candidates of size 6+-- tested 1503 candidates cannot conjure  gps3 :: [Char] -> Int@@ -80,14 +80,14 @@ -- 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 8 candidates of size 4 -- looking through 6 candidates of size 5--- looking through 60 candidates of size 6+-- looking through 46 candidates of size 6 -- looking through 26 candidates of size 7--- looking through 538 candidates of size 8+-- looking through 400 candidates of size 8 -- looking through 134 candidates of size 9--- looking through 5296 candidates of size 10--- tested 2698 candidates+-- looking through 3914 candidates of size 10+-- tested 1552 candidates tell [] x  =  [] tell (x:xs) y  =  y `div` x:tell xs (y `mod` x) @@ -108,13 +108,13 @@ -- looking through 5 candidates of size 3 -- looking through 9 candidates of size 4 -- looking through 45 candidates of size 5--- looking through 92 candidates of size 6--- looking through 438 candidates of size 7--- looking through 944 candidates of size 8--- looking through 4413 candidates of size 9--- looking through 9649 candidates of size 10--- looking through 44336 candidates of size 11--- tested 32852 candidates+-- looking through 82 candidates of size 6+-- looking through 428 candidates of size 7+-- looking through 887 candidates of size 8+-- looking through 4354 candidates of size 9+-- looking through 9260 candidates of size 10+-- looking through 43875 candidates of size 11+-- tested 32327 candidates gps5 x  =  tell [25,10,5,1] x  gps6 :: [Int] -> Int@@ -133,7 +133,7 @@ -- tested 0 candidates cannot conjure -gps :: Int -> [Int] -> (Int,Int)+gps8 :: Int -> [Int] -> (Int,Int) -- testing 3 combinations of argument values -- pruning with 0/0 rules -- looking through 0 candidates of size 1@@ -141,30 +141,39 @@ -- tested 0 candidates cannot conjure -gps :: Int -> [Char]+gps9 :: Int -> [Char] -- testing 7 combinations of argument values -- pruning with 0/0 rules -- looking through 0 candidates of size 1 -- tested 0 candidates cannot conjure -gps :: Int -> [Char]+gps10 :: [Int] -> Int -- testing 7 combinations of argument values--- pruning with 0/0 rules--- looking through 0 candidates of size 1--- tested 0 candidates-cannot conjure+-- pruning with 67/100 rules+-- looking through 4 candidates of size 1+-- looking through 16 candidates of size 2+-- looking through 4 candidates of size 3+-- looking through 68 candidates of size 4+-- looking through 80 candidates of size 5+-- looking through 1084 candidates of size 6+-- looking through 1556 candidates of size 7+-- looking through 20600 candidates of size 8+-- looking through 35632 candidates of size 9+-- tested 29542 candidates+gps10 []  =  0+gps10 (x:xs)  =  gps10 xs + (x `div` 3 - 2)  gcd :: Int -> Int -> Int -- testing 11 combinations of argument values -- pruning with 0/0 rules -- looking through 3 candidates of size 1--- looking through 7 candidates of size 2--- looking through 18 candidates of size 3--- looking through 60 candidates of size 4--- looking through 150 candidates of size 5--- looking through 469 candidates of size 6--- tested 243 candidates+-- looking through 5 candidates of size 2+-- looking through 11 candidates of size 3+-- looking through 50 candidates of size 4+-- looking through 98 candidates of size 5+-- looking through 359 candidates of size 6+-- tested 171 candidates gcd x 0  =  x gcd x y  =  gcd y (x `mod` y) @@ -196,7 +205,9 @@ -- looking through 67 candidates of size 12 -- tested 83 candidates gps13_leaders []  =  []-gps13_leaders (x:xs)  =  if all (x >) xs then x:gps13_leaders xs else gps13_leaders xs+gps13_leaders (x:xs)  =  if all (x >) xs+                         then x:gps13_leaders xs+                         else gps13_leaders xs  gps14_luhn :: [Int] -> Int -- pruning with 0/0 rules@@ -228,7 +239,9 @@ -- looking through 6293 candidates of size 12 -- tested 3977 candidates gps16_middle ""  =  ""-gps16_middle (c:cs)  =  if length cs <= 1 then c:cs else gps16_middle (init cs)+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@@ -237,8 +250,8 @@ -- 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--- tested 11 candidates+-- looking through 3 candidates of size 5+-- tested 9 candidates cannot conjure  gps18_price :: [Double] -> [Double] -> Double@@ -246,23 +259,23 @@ -- pruning with 26/35 rules -- looking through 2 candidates of size 1 -- looking through 8 candidates of size 2--- looking through 64 candidates of size 3--- looking through 72 candidates of size 4--- looking through 1193 candidates of size 5--- looking through 714 candidates of size 6--- tested 2053 candidates+-- looking through 32 candidates of size 3+-- looking through 86 candidates of size 4+-- looking through 412 candidates of size 5+-- looking through 1072 candidates of size 6+-- tested 1612 candidates cannot conjure  gps19_snowday :: Int -> Double -> Double -> Double -> Double -- testing 7 combinations of argument values -- pruning with 6/19 rules -- looking through 3 candidates of size 1--- looking through 0 candidates of size 2--- looking through 24 candidates of size 3--- looking through 150 candidates of size 4--- looking through 546 candidates of size 5--- looking through 3540 candidates of size 6--- tested 4263 candidates+-- looking through 4 candidates of size 2+-- looking through 22 candidates of size 3+-- looking through 118 candidates of size 4+-- looking through 318 candidates of size 5+-- looking through 1936 candidates of size 6+-- tested 2401 candidates cannot conjure  gps20 :: [Char] -> Bool@@ -284,7 +297,9 @@ -- looking through 0 candidates of size 7 -- looking through 4 candidates of size 8 -- tested 3 candidates-spin cs  =  if length cs >= 5 then reverse cs else cs+spin cs  =  if length cs >= 5+            then reverse cs+            else cs  gps21_spinwords :: [Char] -> [Char] -- pruning with 16/16 rules@@ -304,15 +319,15 @@ -- looking through 0 candidates of size 2 -- looking through 2 candidates of size 3 -- looking through 3 candidates of size 4--- looking through 17 candidates of size 5--- looking through 14 candidates of size 6--- looking through 103 candidates of size 7+-- looking through 14 candidates of size 5+-- looking through 13 candidates of size 6+-- looking through 94 candidates of size 7 -- looking through 104 candidates of size 8--- looking through 901 candidates of size 9--- looking through 935 candidates of size 10--- looking through 9226 candidates of size 11+-- looking through 856 candidates of size 9+-- looking through 929 candidates of size 10+-- looking through 8914 candidates of size 11 -- looking through 9686 candidates of size 12--- tested 20992 candidates+-- tested 20616 candidates cannot conjure  gps22 :: Int -> [Char]@@ -324,18 +339,18 @@ gps23 :: [Char] -> [Char] -> [Char] -> [Char] -- pruning with 0/0 rules -- looking through 3 candidates of size 1--- looking through 5 candidates of size 2--- looking through 9 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--- tested 9143 candidates+-- looking through 9 candidates of size 2+-- looking through 31 candidates of size 3+-- looking through 36 candidates of size 4+-- looking through 187 candidates of size 5+-- looking through 627 candidates of size 6+-- looking through 944 candidates of size 7+-- looking through 863 candidates of size 8+-- looking through 951 candidates of size 9+-- looking through 3902 candidates of size 10+-- looking through 6758 candidates of size 11+-- looking through 3276 candidates of size 12+-- tested 17587 candidates cannot conjure  gps24 :: [Char] -> Twitter@@ -355,17 +370,19 @@ -- looking through 483 candidates of size 12 -- tested 936 candidates gps24 ""  =  Empty-gps24 (c:cs)  =  if 140 > length cs then Tweet (length (c:cs)) else TooMany+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 31/59 rules -- looking through 2 candidates of size 1 -- looking through 9 candidates of size 2--- looking through 81 candidates of size 3--- looking through 312 candidates of size 4--- looking through 2249 candidates of size 5--- looking through 9419 candidates of size 6--- tested 12072 candidates+-- looking through 49 candidates of size 3+-- looking through 211 candidates of size 4+-- looking through 1063 candidates of size 5+-- looking through 4717 candidates of size 6+-- tested 6051 candidates cannot conjure 
bench/ill-hit.out view
@@ -3,10 +3,10 @@ -- pruning with 14/25 rules -- looking through 2 candidates of size 1 -- looking through 3 candidates of size 2--- looking through 4 candidates of size 3--- looking through 10 candidates of size 4--- looking through 19 candidates of size 5--- tested 20 candidates+-- looking through 3 candidates of size 3+-- looking through 7 candidates of size 4+-- looking through 11 candidates of size 5+-- tested 16 candidates sum []  =  0 sum (x:xs)  =  x + sum xs @@ -14,10 +14,10 @@ -- 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 20 candidates of size 4--- looking through 34 candidates of size 5--- tested 34 candidates+-- looking through 5 candidates of size 3+-- looking through 12 candidates of size 4+-- looking through 18 candidates of size 5+-- tested 25 candidates sum []  =  0 sum (x:xs)  =  x + sum xs 
bench/lowtests.out view
@@ -22,10 +22,10 @@ -- looking through 12 candidates of size 7 -- looking through 21 candidates of size 8 -- looking through 8 candidates of size 9--- looking through 0 candidates of size 10--- looking through 0 candidates of size 11--- looking through 0 candidates of size 12--- tested 47 candidates+-- looking through 6 candidates of size 10+-- looking through 30 candidates of size 11+-- looking through 45 candidates of size 12+-- tested 128 candidates cannot conjure  subset :: [Int] -> [Int] -> Bool
bench/p12.out view
@@ -3,12 +3,12 @@ -- testing 6 combinations of argument values -- pruning with 67/100 rules -- looking through 3 candidates of size 1--- looking through 5 candidates of size 2--- looking through 14 candidates of size 3--- looking through 39 candidates of size 4--- looking through 128 candidates of size 5--- looking through 497 candidates of size 6--- tested 200 candidates+-- looking through 3 candidates of size 2+-- looking through 6 candidates of size 3+-- looking through 15 candidates of size 4+-- looking through 43 candidates of size 5+-- looking through 152 candidates of size 6+-- tested 77 candidates factorial 0  =  1 factorial x  =  x * factorial (dec x) 
bench/redundants.hs view
@@ -8,6 +8,7 @@ import Conjure.Engine import Conjure.Defn import Conjure.Utils+import Test.LeanCheck.Tiers (discardT)   -- | This function prints redundant candidates.@@ -34,7 +35,9 @@   numRedundant   =  numCandidates - numUnique   classes        =  classifyBy (equalModuloTesting maxTests maxEvalRecursions nm f) candidates   candidates     =  concat css-  css            =  take n css'+  css            =  take n+                 .  discardT isRedundantByIntroduction -- additional pruning rule+                 $  css'   (css', thy)    =  candidateDefnsC args nm f ps  -- Conjure uses this for listing candidates   nRules         =  length (rules thy)   nREs           =  length (equations thy) + nRules
bench/redundants.out view
@@ -1,2117 +1,953 @@ Redundant candidates for: foo :: Int -> Int   pruning with 15/35 rules-  [3,4,12,32,54] candidates-  68/105 unique candidates-  37/105 redundant candidates--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)--class of 4 equivalent candidates:--    foo x  =  x--    foo 0  =  0-    foo x  =  x--    foo 1  =  1-    foo x  =  x--    foo 0  =  0-    foo 1  =  1-    foo x  =  x---class of 2 equivalent candidates:--    foo 0  =  0-    foo x  =  1--    foo 0  =  0-    foo 1  =  1-    foo x  =  1---class of 2 equivalent candidates:--    foo 0  =  1-    foo x  =  x--    foo 0  =  1-    foo 1  =  1-    foo x  =  x---class of 2 equivalent candidates:--    foo 0  =  1-    foo x  =  0--    foo 0  =  1-    foo 1  =  0-    foo x  =  0---class of 2 equivalent candidates:--    foo x  =  x + x--    foo 0  =  0-    foo x  =  x + x---class of 4 equivalent candidates:--    foo x  =  x + 1--    foo x  =  1 + x--    foo 0  =  1-    foo x  =  x + 1--    foo 0  =  1-    foo x  =  1 + x---class of 4 equivalent candidates:--    foo x  =  x - 1--    foo x  =  (0 - 1) + x--    foo x  =  x + (0 - 1)--    foo 1  =  0-    foo x  =  x - 1---class of 5 equivalent candidates:--    foo x  =  0 - x--    foo 0  =  0-    foo x  =  0 - x--    foo x  =  x - (x + x)--    foo x  =  1 - (x + 1)--    foo x  =  1 - (1 + x)---class of 4 equivalent candidates:--    foo x  =  0 - 1--    foo x  =  x - (x + 1)--    foo x  =  x - (1 + x)--    foo x  =  1 - (1 + 1)---class of 5 equivalent candidates:--    foo x  =  1 - x--    foo 0  =  1-    foo x  =  1 - x--    foo x  =  (0 - x) + 1--    foo x  =  1 + (0 - x)--    foo 1  =  0-    foo x  =  1 - x---class of 2 equivalent candidates:--    foo 1  =  0-    foo x  =  x--    foo 0  =  0-    foo 1  =  0-    foo x  =  x---class of 2 equivalent candidates:--    foo 1  =  0-    foo x  =  1--    foo 0  =  1-    foo 1  =  0-    foo x  =  1---class of 2 equivalent candidates:--    foo 1  =  1-    foo x  =  0--    foo 0  =  0-    foo 1  =  1-    foo x  =  0---class of 2 equivalent candidates:--    foo 0  =  0-    foo x  =  x + 1--    foo 0  =  0-    foo x  =  1 + x---class of 2 equivalent candidates:--    foo x  =  (x - 1) + x--    foo x  =  x + (x - 1)---class of 2 equivalent candidates:--    foo x  =  (1 - x) + 1--    foo x  =  1 + (1 - x)---class of 3 equivalent candidates:--    foo x  =  x + (x + 1)--    foo x  =  x + (1 + x)--    foo x  =  1 + (x + x)---class of 3 equivalent candidates:--    foo x  =  x + (1 + 1)--    foo x  =  1 + (x + 1)--    foo x  =  1 + (1 + x)---class of 2 equivalent candidates:--    foo x  =  0 - (x + 1)--    foo x  =  0 - (1 + x)---class of 2 equivalent candidates:--    foo 1  =  0-    foo x  =  x + 1--    foo 1  =  0-    foo x  =  1 + x---class of 2 equivalent candidates:--    foo 1  =  1-    foo x  =  x + 1--    foo 1  =  1-    foo x  =  1 + x----Redundant candidates for: ? :: Int -> Int -> Int-  pruning with 10/23 rules-  [3,10,40,116,338] candidates-  363/507 unique candidates-  144/507 redundant candidates--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)--class of 2 equivalent candidates:--    x ? y  =  x--    0 ? x  =  0-    x ? y  =  x---class of 2 equivalent candidates:--    x ? y  =  y--    x ? 0  =  0-    x ? y  =  y---class of 3 equivalent candidates:--    x ? y  =  0--    x ? 0  =  0-    x ? y  =  dec x ? 0--    0 ? x  =  0-    x ? y  =  0 ? dec y---class of 4 equivalent candidates:--    x ? y  =  dec x--    x ? y  =  dec 0 + x--    x ? y  =  x + dec 0--    0 ? x  =  dec 0-    x ? y  =  dec x---class of 4 equivalent candidates:--    x ? y  =  dec y--    x ? y  =  dec 0 + y--    x ? y  =  y + dec 0--    x ? 0  =  dec 0-    x ? y  =  dec y---class of 2 equivalent candidates:--    x ? 0  =  x-    x ? y  =  y--    0 ? 0  =  0-    0 ? x  =  x-    x ? 0  =  x-    x ? y  =  y---class of 2 equivalent candidates:--    x ? 0  =  x-    x ? y  =  0--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  x-    x ? y  =  0---class of 2 equivalent candidates:--    x ? 0  =  0-    x ? y  =  x--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  0-    x ? y  =  x---class of 2 equivalent candidates:--    0 ? x  =  x-    x ? y  =  0--    0 ? 0  =  0-    0 ? x  =  x-    x ? 0  =  0-    x ? y  =  0---class of 2 equivalent candidates:--    0 ? x  =  0-    x ? y  =  y--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  0-    x ? y  =  y---class of 2 equivalent candidates:--    x ? y  =  x + x--    0 ? x  =  0-    x ? y  =  x + x---class of 8 equivalent candidates:--    x ? y  =  x + y--    x ? y  =  y + x--    x ? 0  =  x-    x ? y  =  x + y--    x ? 0  =  x-    x ? y  =  y + x--    0 ? x  =  x-    x ? y  =  x + y--    0 ? x  =  x-    x ? y  =  y + 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---class of 2 equivalent candidates:--    x ? y  =  y + y--    x ? 0  =  0-    x ? y  =  y + y---class of 5 equivalent candidates:--    x ? y  =  dec (dec x)--    x ? y  =  dec (dec 0) + x--    x ? y  =  x + dec (dec 0)--    x ? y  =  dec x + dec 0--    x ? y  =  dec 0 + dec x---class of 5 equivalent candidates:--    x ? y  =  dec (dec y)--    x ? y  =  dec (dec 0) + y--    x ? y  =  y + dec (dec 0)--    x ? y  =  dec y + dec 0--    x ? y  =  dec 0 + dec y---class of 2 equivalent candidates:--    x ? y  =  dec (dec 0)--    x ? y  =  dec 0 + dec 0---class of 5 equivalent candidates:--    x ? 0  =  x-    x ? y  =  dec x--    x ? 0  =  x-    x ? y  =  dec x ? 0--    x ? 0  =  x-    x ? y  =  dec 0 + x--    x ? 0  =  x-    x ? y  =  x + dec 0--    0 ? 0  =  0-    0 ? x  =  dec 0-    x ? 0  =  x-    x ? y  =  dec x---class of 4 equivalent candidates:--    x ? 0  =  x-    x ? y  =  dec y--    x ? 0  =  x-    x ? y  =  dec 0 + y--    x ? 0  =  x-    x ? y  =  y + dec 0--    0 ? 0  =  0-    0 ? x  =  dec x-    x ? 0  =  x-    x ? y  =  dec y---class of 2 equivalent candidates:--    x ? 0  =  x-    x ? y  =  dec 0--    0 ? 0  =  0-    0 ? x  =  dec 0-    x ? 0  =  x-    x ? y  =  dec 0---class of 4 equivalent candidates:--    x ? 0  =  0-    x ? y  =  dec x--    x ? 0  =  0-    x ? y  =  dec 0 + x--    x ? 0  =  0-    x ? y  =  x + dec 0--    0 ? 0  =  0-    0 ? x  =  dec 0-    x ? 0  =  0-    x ? y  =  dec x---class of 3 equivalent candidates:--    x ? 0  =  0-    x ? y  =  dec y--    x ? 0  =  0-    x ? y  =  dec 0 + y--    x ? 0  =  0-    x ? y  =  y + dec 0---class of 4 equivalent candidates:--    x ? 0  =  dec x-    x ? y  =  x--    x ? 0  =  dec 0 + x-    x ? y  =  x--    x ? 0  =  x + dec 0-    x ? y  =  x--    0 ? 0  =  dec 0-    0 ? x  =  0-    x ? 0  =  dec x-    x ? y  =  x---class of 4 equivalent candidates:--    x ? 0  =  dec x-    x ? y  =  y--    x ? 0  =  dec 0 + x-    x ? y  =  y--    x ? 0  =  x + dec 0-    x ? y  =  y--    0 ? 0  =  dec 0-    0 ? x  =  x-    x ? 0  =  dec x-    x ? y  =  y---class of 4 equivalent candidates:--    x ? 0  =  dec x-    x ? y  =  0--    x ? 0  =  dec 0 + x-    x ? y  =  0--    x ? 0  =  x + dec 0-    x ? y  =  0--    0 ? 0  =  dec 0-    0 ? x  =  0-    x ? 0  =  dec x-    x ? y  =  0---class of 2 equivalent candidates:--    x ? 0  =  dec 0-    x ? y  =  x--    0 ? 0  =  dec 0-    0 ? x  =  0-    x ? 0  =  dec 0-    x ? y  =  x---class of 4 equivalent candidates:--    0 ? x  =  x-    x ? y  =  dec x--    0 ? x  =  x-    x ? y  =  dec 0 + x--    0 ? x  =  x-    x ? y  =  x + dec 0--    0 ? 0  =  0-    0 ? x  =  x-    x ? 0  =  dec x-    x ? y  =  dec x---class of 5 equivalent candidates:--    0 ? x  =  x-    x ? y  =  dec y--    0 ? x  =  x-    x ? y  =  0 ? dec y--    0 ? x  =  x-    x ? y  =  dec 0 + y--    0 ? x  =  x-    x ? y  =  y + dec 0--    0 ? 0  =  0-    0 ? x  =  x-    x ? 0  =  dec 0-    x ? y  =  dec y---class of 2 equivalent candidates:--    0 ? x  =  x-    x ? y  =  dec 0--    0 ? 0  =  0-    0 ? x  =  x-    x ? 0  =  dec 0-    x ? y  =  dec 0---class of 3 equivalent candidates:--    0 ? x  =  0-    x ? y  =  dec x--    0 ? x  =  0-    x ? y  =  dec 0 + x--    0 ? x  =  0-    x ? y  =  x + dec 0---class of 4 equivalent candidates:--    0 ? x  =  0-    x ? y  =  dec y--    0 ? x  =  0-    x ? y  =  dec 0 + y--    0 ? x  =  0-    x ? y  =  y + dec 0--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  dec 0-    x ? y  =  dec y---class of 4 equivalent candidates:--    0 ? x  =  dec x-    x ? y  =  x--    0 ? x  =  dec 0 + x-    x ? y  =  x--    0 ? x  =  x + dec 0-    x ? y  =  x--    0 ? 0  =  dec 0-    0 ? x  =  dec x-    x ? 0  =  x-    x ? y  =  x---class of 4 equivalent candidates:--    0 ? x  =  dec x-    x ? y  =  y--    0 ? x  =  dec 0 + x-    x ? y  =  y--    0 ? x  =  x + dec 0-    x ? y  =  y--    0 ? 0  =  dec 0-    0 ? x  =  dec x-    x ? 0  =  0-    x ? y  =  y---class of 4 equivalent candidates:--    0 ? x  =  dec x-    x ? y  =  0--    0 ? x  =  dec 0 + x-    x ? y  =  0--    0 ? x  =  x + dec 0-    x ? y  =  0--    0 ? 0  =  dec 0-    0 ? x  =  dec x-    x ? 0  =  0-    x ? y  =  0---class of 2 equivalent candidates:--    0 ? x  =  dec 0-    x ? y  =  y--    0 ? 0  =  dec 0-    0 ? x  =  dec 0-    x ? 0  =  0-    x ? y  =  y---class of 2 equivalent candidates:--    x ? y  =  dec x + x--    x ? y  =  x + dec x---class of 4 equivalent candidates:--    x ? y  =  dec x + y--    x ? y  =  dec y + x--    x ? y  =  x + dec y--    x ? y  =  y + dec x---class of 2 equivalent candidates:--    x ? y  =  dec y + y--    x ? y  =  y + dec y---class of 2 equivalent candidates:--    x ? 0  =  x-    x ? y  =  x + x--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  x-    x ? y  =  x + x---class of 2 equivalent candidates:--    x ? 0  =  0-    x ? y  =  x + x--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  0-    x ? y  =  x + x---class of 4 equivalent candidates:--    x ? 0  =  0-    x ? y  =  x + y--    x ? 0  =  0-    x ? y  =  y + 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---class of 2 equivalent candidates:--    x ? 0  =  x + x-    x ? y  =  x--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  x + x-    x ? y  =  x---class of 2 equivalent candidates:--    x ? 0  =  x + x-    x ? y  =  y--    0 ? 0  =  0-    0 ? x  =  x-    x ? 0  =  x + x-    x ? y  =  y---class of 2 equivalent candidates:--    x ? 0  =  x + x-    x ? y  =  0--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  x + x-    x ? y  =  0---class of 2 equivalent candidates:--    0 ? x  =  x-    x ? y  =  y + y--    0 ? 0  =  0-    0 ? x  =  x-    x ? 0  =  0-    x ? y  =  y + y---class of 4 equivalent candidates:--    0 ? x  =  0-    x ? y  =  x + y--    0 ? x  =  0-    x ? y  =  y + 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---class of 2 equivalent candidates:--    0 ? x  =  0-    x ? y  =  y + y--    0 ? 0  =  0-    0 ? x  =  0-    x ? 0  =  0-    x ? y  =  y + y---class of 2 equivalent candidates:--    0 ? x  =  x + x-    x ? y  =  x--    0 ? 0  =  0-    0 ? x  =  x + x-    x ? 0  =  x-    x ? y  =  x---class of 2 equivalent candidates:--    0 ? x  =  x + x-    x ? y  =  y--    0 ? 0  =  0-    0 ? x  =  x + x-    x ? 0  =  0-    x ? y  =  y---class of 2 equivalent candidates:--    0 ? x  =  x + x-    x ? y  =  0--    0 ? 0  =  0-    0 ? x  =  x + x-    x ? 0  =  0-    x ? y  =  0---class of 3 equivalent candidates:--    x ? y  =  dec (dec x) + x--    x ? y  =  x + dec (dec x)--    x ? y  =  dec x + dec x---class of 6 equivalent candidates:--    x ? y  =  dec (dec x) + y--    x ? y  =  dec (dec y) + x--    x ? y  =  x + dec (dec y)--    x ? y  =  y + dec (dec x)--    x ? y  =  dec x + dec y--    x ? y  =  dec y + dec x---class of 3 equivalent candidates:--    x ? y  =  dec (dec y) + y--    x ? y  =  y + dec (dec y)--    x ? y  =  dec y + dec y---class of 3 equivalent candidates:--    x ? y  =  x + (x + y)--    x ? y  =  x + (y + x)--    x ? y  =  y + (x + x)---class of 3 equivalent candidates:--    x ? y  =  x + (y + y)--    x ? y  =  y + (x + y)--    x ? y  =  y + (y + x)---class of 2 equivalent candidates:--    x ? 0  =  x-    x ? y  =  dec x + x--    x ? 0  =  x-    x ? y  =  x + dec x---class of 4 equivalent candidates:--    x ? 0  =  x-    x ? y  =  dec x + y--    x ? 0  =  x-    x ? y  =  dec y + x--    x ? 0  =  x-    x ? y  =  x + dec y--    x ? 0  =  x-    x ? y  =  y + dec x---class of 2 equivalent candidates:--    x ? 0  =  x-    x ? y  =  dec y + y--    x ? 0  =  x-    x ? y  =  y + dec y---class of 2 equivalent candidates:--    x ? 0  =  0-    x ? y  =  dec x + x--    x ? 0  =  0-    x ? y  =  x + dec x---class of 4 equivalent candidates:--    x ? 0  =  0-    x ? y  =  dec x + y--    x ? 0  =  0-    x ? y  =  dec y + x--    x ? 0  =  0-    x ? y  =  x + dec y--    x ? 0  =  0-    x ? y  =  y + dec x---class of 2 equivalent candidates:--    x ? 0  =  0-    x ? y  =  dec y + y--    x ? 0  =  0-    x ? y  =  y + dec y---class of 2 equivalent candidates:--    x ? 0  =  dec x-    x ? y  =  x + y--    x ? 0  =  dec x-    x ? y  =  y + x---class of 2 equivalent candidates:--    x ? 0  =  dec 0-    x ? y  =  x + y--    x ? 0  =  dec 0-    x ? y  =  y + x---class of 2 equivalent candidates:--    x ? 0  =  dec x + x-    x ? y  =  x--    x ? 0  =  x + dec x-    x ? y  =  x---class of 2 equivalent candidates:--    x ? 0  =  dec x + x-    x ? y  =  y--    x ? 0  =  x + dec x-    x ? y  =  y---class of 2 equivalent candidates:--    x ? 0  =  dec x + x-    x ? y  =  0--    x ? 0  =  x + dec x-    x ? y  =  0---class of 2 equivalent candidates:--    0 ? x  =  x-    x ? y  =  dec x + x--    0 ? x  =  x-    x ? y  =  x + dec x---class of 4 equivalent candidates:--    0 ? x  =  x-    x ? y  =  dec x + y--    0 ? x  =  x-    x ? y  =  dec y + x--    0 ? x  =  x-    x ? y  =  x + dec y--    0 ? x  =  x-    x ? y  =  y + dec x---class of 2 equivalent candidates:--    0 ? x  =  x-    x ? y  =  dec y + y--    0 ? x  =  x-    x ? y  =  y + dec y---class of 2 equivalent candidates:--    0 ? x  =  0-    x ? y  =  dec x + x--    0 ? x  =  0-    x ? y  =  x + dec x---class of 4 equivalent candidates:--    0 ? x  =  0-    x ? y  =  dec x + y--    0 ? x  =  0-    x ? y  =  dec y + x--    0 ? x  =  0-    x ? y  =  x + dec y--    0 ? x  =  0-    x ? y  =  y + dec x---class of 2 equivalent candidates:--    0 ? x  =  0-    x ? y  =  dec y + y--    0 ? x  =  0-    x ? y  =  y + dec y---class of 2 equivalent candidates:--    0 ? x  =  dec x-    x ? y  =  x + y--    0 ? x  =  dec x-    x ? y  =  y + x---class of 2 equivalent candidates:--    0 ? x  =  dec 0-    x ? y  =  x + y--    0 ? x  =  dec 0-    x ? y  =  y + x---class of 2 equivalent candidates:--    0 ? x  =  dec x + x-    x ? y  =  x--    0 ? x  =  x + dec x-    x ? y  =  x---class of 2 equivalent candidates:--    0 ? x  =  dec x + x-    x ? y  =  y--    0 ? x  =  x + dec x-    x ? y  =  y---class of 2 equivalent candidates:--    0 ? x  =  dec x + x-    x ? y  =  0--    0 ? x  =  x + dec x-    x ? y  =  0---class of 2 equivalent candidates:--    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----Redundant candidates for: goo :: [Int] -> [Int]-  pruning with 4/4 rules-  [2,1,2,3,4] candidates-  9/12 unique candidates-  3/12 redundant candidates--rules:-xs ++ [] == xs-[] ++ xs == xs-(xs ++ ys) ++ zs == xs ++ (ys ++ zs)-(x:xs) ++ ys == x:(xs ++ ys)--class of 3 equivalent candidates:--    goo xs  =  xs--    goo []  =  []-    goo (x:xs)  =  x:xs--    goo []  =  []-    goo (x:xs)  =  x:goo xs---class of 2 equivalent candidates:--    goo xs  =  []--    goo []  =  []-    goo (x:xs)  =  goo xs----Redundant candidates for: ?? :: [Int] -> [Int] -> [Int]-  pruning with 4/4 rules-  [3,7,13,66,152] candidates-  161/241 unique candidates-  80/241 redundant candidates--rules:-xs ++ [] == xs-[] ++ xs == xs-(xs ++ ys) ++ zs == xs ++ (ys ++ zs)-(x:xs) ++ ys == x:(xs ++ ys)--class of 4 equivalent candidates:--    xs ?? ys  =  xs--    xs ?? []  =  xs-    xs ?? (x:ys)  =  xs ?? ys--    xs ?? []  =  xs-    xs ?? (x:ys)  =  xs ?? []--    [] ?? xs  =  []-    (x:xs) ?? ys  =  x:xs---class of 4 equivalent candidates:--    xs ?? ys  =  ys--    [] ?? xs  =  xs-    (x:xs) ?? ys  =  xs ?? ys--    [] ?? xs  =  xs-    (x:xs) ?? ys  =  [] ?? ys--    xs ?? []  =  []-    xs ?? (x:ys)  =  x:ys---class of 29 equivalent candidates:--    xs ?? ys  =  []--    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  =  []-    (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 ?? []--    [] ?? xs  =  []-    (x:xs) ?? ys  =  [] ?? xs--    [] ?? xs  =  []-    (x:xs) ?? 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 ?? 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---class of 3 equivalent candidates:--    xs ?? []  =  xs-    xs ?? (x:ys)  =  ys--    xs ?? []  =  xs-    xs ?? (x:ys)  =  ys ?? []--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  x:xs-    (x:xs) ?? (y:ys)  =  ys---class of 5 equivalent candidates:--    xs ?? []  =  xs-    xs ?? (x:ys)  =  []--    xs ?? []  =  xs-    xs ?? (x:ys)  =  ys ?? ys--    xs ?? []  =  xs-    xs ?? (x:ys)  =  [] ?? xs--    xs ?? []  =  xs-    xs ?? (x:ys)  =  [] ?? ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  x:xs-    (x:xs) ?? (y:ys)  =  []---class of 2 equivalent candidates:--    xs ?? []  =  []-    xs ?? (x:ys)  =  xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  []-    (x:xs) ?? (y:ys)  =  x:xs---class of 2 equivalent candidates:--    xs ?? []  =  []-    xs ?? (x:ys)  =  ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs ?? []-    (x:xs) ?? (y:ys)  =  ys---class of 5 equivalent candidates:--    [] ?? xs  =  xs-    (x:xs) ?? ys  =  []--    [] ?? xs  =  xs-    (x:xs) ?? ys  =  xs ?? xs--    [] ?? xs  =  xs-    (x:xs) ?? ys  =  xs ?? []--    [] ?? xs  =  xs-    (x:xs) ?? ys  =  ys ?? []--    [] ?? []  =  []-    [] ?? (x:xs)  =  x:xs-    (x:xs) ?? []  =  []-    (x:xs) ?? (y:ys)  =  []---class of 2 equivalent candidates:--    [] ?? xs  =  []-    (x:xs) ?? ys  =  xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  [] ?? xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  xs---class of 2 equivalent candidates:--    [] ?? xs  =  []-    (x:xs) ?? ys  =  ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  []-    (x:xs) ?? (y:ys)  =  y:ys---class of 3 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  []--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  xs ?? xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  ys ?? ys---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  []-    (x:xs) ?? (y:ys)  =  xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs ?? []-    (x:xs) ?? (y:ys)  =  xs---class of 7 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  []-    (x:xs) ?? (y: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) ?? []  =  []-    (x:xs) ?? (y:ys)  =  xs ?? xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  []-    (x:xs) ?? (y:ys)  =  xs ?? []--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  []-    (x:xs) ?? (y:ys)  =  ys ?? ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  []-    (x:xs) ?? (y:ys)  =  ys ?? []---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  [] ?? xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  ys---class of 7 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  []--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs ?? xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  []--    [] ?? []  =  []-    [] ?? (x:xs)  =  [] ?? xs-    (x:xs) ?? []  =  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)  =  ys ?? ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  [] ?? xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  [] ?? ys---class of 5 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x: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)  =  []-    (x:xs) ?? []  =  xs ?? []-    (x:xs) ?? (y:ys)  =  xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  [] ?? xs-    (x:xs) ?? (y:ys)  =  xs---class of 5 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x: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)  =  []-    (x:xs) ?? []  =  xs ?? []-    (x:xs) ?? (y:ys)  =  ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  []-    (x:xs) ?? []  =  [] ?? xs-    (x:xs) ?? (y:ys)  =  ys---class of 2 equivalent candidates:--    [] ?? xs  =  xs-    (x:xs) ?? ys  =  [] ?? xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  x:xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  xs---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  xs ?? ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  ys ?? xs---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  xs ?? []--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  [] ?? xs---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  ys ?? []--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  [] ?? ys---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs ?? xs-    (x:xs) ?? (y:ys)  =  xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  [] ?? xs-    (x:xs) ?? (y:ys)  =  xs---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  xs ?? xs-    (x:xs) ?? (y:ys)  =  ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs-    (x:xs) ?? []  =  [] ?? xs-    (x:xs) ?? (y:ys)  =  ys---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs ?? xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  xs--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs ?? []-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  xs---class of 2 equivalent candidates:--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs ?? xs-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  ys--    [] ?? []  =  []-    [] ?? (x:xs)  =  xs ?? []-    (x:xs) ?? []  =  xs-    (x:xs) ?? (y:ys)  =  ys----Redundant candidates for: ton :: Bool -> Bool-  pruning with 39/49 rules-  [3,3,0,0,0] candidates-  4/6 unique candidates-  2/6 redundant candidates--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--class of 2 equivalent candidates:--    ton p  =  p--    ton False  =  False-    ton True  =  True---class of 2 equivalent candidates:--    ton p  =  not p--    ton False  =  True-    ton True  =  False----Redundant candidates for: &| :: Bool -> Bool -> Bool-  pruning with 39/49 rules-  [4,14,26,8,4] candidates-  16/56 unique candidates-  40/56 redundant candidates--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--class of 2 equivalent candidates:--    p &| q  =  p--    False &| p  =  False-    True &| p  =  True---class of 2 equivalent candidates:--    p &| q  =  q--    p &| False  =  False-    p &| True  =  True---class of 2 equivalent candidates:--    p &| q  =  not p--    False &| p  =  True-    True &| p  =  False---class of 2 equivalent candidates:--    p &| q  =  not q--    p &| False  =  True-    p &| True  =  False---class of 5 equivalent candidates:--    p &| False  =  p-    p &| True  =  False--    False &| p  =  False-    True &| p  =  not p--    False &| False  =  False-    False &| True  =  False-    True &| False  =  True-    True &| True  =  False--    p &| q  =  not q && p--    p &| q  =  p && not q---class of 5 equivalent candidates:--    p &| False  =  p-    p &| True  =  True--    False &| p  =  p-    True &| p  =  True--    p &| q  =  p || q--    p &| q  =  q || p--    False &| False  =  False-    False &| True  =  True-    True &| False  =  True-    True &| True  =  True---class of 5 equivalent candidates:--    p &| False  =  False-    p &| True  =  p--    False &| p  =  False-    True &| p  =  p--    p &| q  =  p && q--    p &| q  =  q && p--    False &| False  =  False-    False &| True  =  False-    True &| False  =  False-    True &| True  =  True---class of 5 equivalent candidates:--    p &| False  =  True-    p &| True  =  p--    False &| p  =  not p-    True &| p  =  True--    False &| False  =  True-    False &| True  =  False-    True &| False  =  True-    True &| True  =  True--    p &| q  =  not q || p--    p &| q  =  p || not q---class of 5 equivalent candidates:--    False &| p  =  p-    True &| p  =  False--    p &| False  =  False-    p &| True  =  not p--    False &| False  =  False-    False &| True  =  True-    True &| False  =  False-    True &| True  =  False--    p &| q  =  not p && q--    p &| q  =  q && not p---class of 5 equivalent candidates:--    False &| p  =  True-    True &| p  =  p--    p &| False  =  not p-    p &| True  =  True--    False &| False  =  True-    False &| True  =  True-    True &| False  =  False-    True &| True  =  True--    p &| q  =  not p || q--    p &| q  =  q || not p---class of 3 equivalent candidates:--    p &| False  =  p-    p &| True  =  not p--    False &| p  =  p-    True &| p  =  not p--    False &| False  =  False-    False &| True  =  True-    True &| False  =  True-    True &| True  =  False---class of 5 equivalent candidates:--    p &| False  =  True-    p &| True  =  not p--    False &| p  =  True-    True &| p  =  not p--    False &| False  =  True-    False &| True  =  True-    True &| False  =  True-    True &| True  =  False--    p &| q  =  not p || not q--    p &| q  =  not q || not p---class of 3 equivalent candidates:--    p &| False  =  not p-    p &| True  =  p--    False &| p  =  not p-    True &| p  =  p--    False &| False  =  True-    False &| True  =  False-    True &| False  =  False-    True &| True  =  True---class of 5 equivalent candidates:--    p &| False  =  not p-    p &| True  =  False--    False &| p  =  not p-    True &| p  =  False--    False &| False  =  True-    False &| True  =  False-    True &| False  =  False-    True &| True  =  False--    p &| q  =  not p && not q--    p &| q  =  not q && not p+  [3,3,8,13,29] candidates+  46/56 unique candidates+  10/56 redundant candidates++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)++class of 2 equivalent candidates:++    foo x  =  x + x++    foo 0  =  0+    foo x  =  x + x+++class of 2 equivalent candidates:++    foo x  =  x + 1++    foo 0  =  1+    foo x  =  x + 1+++class of 2 equivalent candidates:++    foo x  =  x - 1++    foo 1  =  0+    foo x  =  x - 1+++class of 4 equivalent candidates:++    foo x  =  0 - x++    foo 0  =  0+    foo x  =  0 - x++    foo x  =  x - (x + x)++    foo x  =  1 - (x + 1)+++class of 4 equivalent candidates:++    foo x  =  1 - x++    foo 0  =  1+    foo x  =  1 - x++    foo x  =  1 + (0 - x)++    foo 1  =  0+    foo x  =  1 - x+++class of 2 equivalent candidates:++    foo x  =  x + (x + 1)++    foo x  =  1 + (x + x)++++Redundant candidates for: ? :: Int -> Int -> Int+  pruning with 10/23 rules+  [3,7,22,53,129] candidates+  192/214 unique candidates+  22/214 redundant candidates++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)++class of 2 equivalent candidates:++    x ? y  =  x + x++    0 ? x  =  0+    x ? y  =  x + x+++class of 4 equivalent candidates:++    x ? y  =  x + y++    x ? 0  =  x+    x ? y  =  x + y++    0 ? x  =  x+    x ? y  =  x + y++    0 ? x  =  x+    x ? 0  =  x+    x ? y  =  x + y+++class of 2 equivalent candidates:++    x ? y  =  y + y++    x ? 0  =  0+    x ? y  =  y + y+++class of 2 equivalent candidates:++    x ? y  =  x + dec y++    x ? y  =  y + dec x+++class of 2 equivalent candidates:++    x ? 0  =  x+    x ? y  =  x + x++    0 ? x  =  0+    x ? 0  =  x+    x ? y  =  x + x+++class of 2 equivalent candidates:++    x ? 0  =  0+    x ? y  =  x + x++    0 ? x  =  0+    x ? 0  =  0+    x ? y  =  x + x+++class of 2 equivalent candidates:++    x ? 0  =  0+    x ? y  =  x + y++    0 ? x  =  x+    x ? 0  =  0+    x ? y  =  x + y+++class of 2 equivalent candidates:++    0 ? x  =  x+    x ? y  =  y + y++    0 ? x  =  x+    x ? 0  =  0+    x ? y  =  y + y+++class of 2 equivalent candidates:++    0 ? x  =  0+    x ? y  =  x + y++    0 ? x  =  0+    x ? 0  =  x+    x ? y  =  x + y+++class of 2 equivalent candidates:++    0 ? x  =  0+    x ? y  =  y + y++    0 ? x  =  0+    x ? 0  =  0+    x ? y  =  y + y+++class of 2 equivalent candidates:++    x ? y  =  x + (x + y)++    x ? y  =  y + (x + x)+++class of 2 equivalent candidates:++    x ? y  =  x + (y + y)++    x ? y  =  y + (x + y)+++class of 2 equivalent candidates:++    x ? y  =  x + dec (dec x)++    x ? y  =  dec x + dec x+++class of 3 equivalent candidates:++    x ? y  =  x + dec (dec y)++    x ? y  =  y + dec (dec x)++    x ? y  =  dec x + dec y+++class of 2 equivalent candidates:++    x ? y  =  y + dec (dec y)++    x ? y  =  dec y + dec y+++class of 2 equivalent candidates:++    x ? 0  =  x+    x ? y  =  x + dec y++    x ? 0  =  x+    x ? y  =  y + dec x+++class of 2 equivalent candidates:++    x ? 0  =  0+    x ? y  =  x + dec y++    x ? 0  =  0+    x ? y  =  y + dec x+++class of 2 equivalent candidates:++    0 ? x  =  x+    x ? y  =  x + dec y++    0 ? x  =  x+    x ? y  =  y + dec x+++class of 2 equivalent candidates:++    0 ? x  =  0+    x ? y  =  x + dec y++    0 ? x  =  0+    x ? y  =  y + dec x++++Redundant candidates for: goo :: [Int] -> [Int]+  pruning with 4/4 rules+  [2,1,2,2,4] candidates+  9/11 unique candidates+  2/11 redundant candidates++rules:+xs ++ [] == xs+[] ++ xs == xs+(xs ++ ys) ++ zs == xs ++ (ys ++ zs)+(x:xs) ++ ys == x:(xs ++ ys)++class of 2 equivalent candidates:++    goo xs  =  xs++    goo []  =  []+    goo (x:xs)  =  x:goo xs+++class of 2 equivalent candidates:++    goo xs  =  []++    goo []  =  []+    goo (x:xs)  =  goo xs++++Redundant candidates for: ?? :: [Int] -> [Int] -> [Int]+  pruning with 4/4 rules+  [3,7,15,57,134] candidates+  160/216 unique candidates+  56/216 redundant candidates++rules:+xs ++ [] == xs+[] ++ xs == xs+(xs ++ ys) ++ zs == xs ++ (ys ++ zs)+(x:xs) ++ ys == x:(xs ++ ys)++class of 2 equivalent candidates:++    xs ?? ys  =  xs++    xs ?? []  =  xs+    xs ?? (x:ys)  =  xs ?? ys+++class of 2 equivalent candidates:++    xs ?? ys  =  ys++    [] ?? xs  =  xs+    (x:xs) ?? ys  =  xs ?? ys+++class of 22 equivalent candidates:++    xs ?? ys  =  []++    xs ?? []  =  []+    xs ?? (x:ys)  =  xs ?? ys++    xs ?? []  =  []+    xs ?? (x:ys)  =  ys ?? xs++    xs ?? []  =  []+    xs ?? (x:ys)  =  ys ?? ys++    xs ?? []  =  []+    xs ?? (x:ys)  =  [] ?? xs++    xs ?? []  =  []+    xs ?? (x: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 ?? []++    [] ?? xs  =  []+    (x:xs) ?? []  =  xs ?? xs+    (x:xs) ?? (y:ys)  =  []++    [] ?? xs  =  []+    (x:xs) ?? []  =  xs ?? []+    (x:xs) ?? (y:ys)  =  []++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  xs ?? xs++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  xs ?? ys++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  xs ?? []++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  ys ?? xs++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  ys ?? ys++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  ys ?? []++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs ?? xs+    (x:xs) ?? ys  =  []++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs ?? []+    (x:xs) ?? ys  =  []++    [] ?? []  =  []+    [] ?? (x:xs)  =  [] ?? xs+    (x:xs) ?? ys  =  []+++class of 5 equivalent candidates:++    xs ?? []  =  xs+    xs ?? (x:ys)  =  []++    xs ?? []  =  xs+    xs ?? (x:ys)  =  ys ?? ys++    xs ?? []  =  xs+    xs ?? (x:ys)  =  [] ?? xs++    xs ?? []  =  xs+    xs ?? (x:ys)  =  [] ?? ys++    [] ?? xs  =  []+    (x:xs) ?? []  =  x:xs+    (x:xs) ?? (y:ys)  =  []+++class of 2 equivalent candidates:++    xs ?? []  =  []+    xs ?? (x:ys)  =  xs++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  x:xs+++class of 3 equivalent candidates:++    xs ?? []  =  []+    xs ?? (x:ys)  =  ys++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs+    (x:xs) ?? ys  =  xs ?? ys++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs+    (x:xs) ?? ys  =  [] ?? ys+++class of 10 equivalent candidates:++    [] ?? xs  =  xs+    (x:xs) ?? ys  =  []++    [] ?? xs  =  xs+    (x:xs) ?? ys  =  xs ?? xs++    [] ?? xs  =  xs+    (x:xs) ?? ys  =  xs ?? []++    [] ?? xs  =  xs+    (x:xs) ?? ys  =  ys ?? []++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs ?? xs+    (x:xs) ?? (y:ys)  =  []++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs ?? []+    (x:xs) ?? (y:ys)  =  []++    [] ?? xs  =  xs+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  xs ?? xs++    [] ?? xs  =  xs+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  xs ?? []++    [] ?? xs  =  xs+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  ys ?? ys++    [] ?? xs  =  xs+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  ys ?? []+++class of 2 equivalent candidates:++    [] ?? xs  =  []+    (x:xs) ?? ys  =  xs++    [] ?? []  =  []+    [] ?? (x:xs)  =  [] ?? xs+    (x:xs) ?? ys  =  xs+++class of 3 equivalent candidates:++    [] ?? xs  =  []+    (x:xs) ?? ys  =  ys++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs ?? []+    (x:xs) ?? ys  =  ys++    [] ?? []  =  []+    [] ?? (x:xs)  =  [] ?? xs+    (x:xs) ?? ys  =  ys+++class of 3 equivalent candidates:++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs+    (x:xs) ?? (y:ys)  =  []++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs+    (x:xs) ?? (y:ys)  =  xs ?? xs++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs+    (x:xs) ?? (y:ys)  =  ys ?? ys+++class of 2 equivalent candidates:++    [] ?? xs  =  xs+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  xs++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs ?? []+    (x:xs) ?? (y:ys)  =  xs+++class of 2 equivalent candidates:++    [] ?? xs  =  xs+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  ys++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs ?? []+    (x:xs) ?? (y:ys)  =  ys+++class of 3 equivalent candidates:++    [] ?? xs  =  []+    (x:xs) ?? []  =  xs+    (x:xs) ?? (y:ys)  =  []++    [] ?? xs  =  []+    (x:xs) ?? []  =  xs+    (x:xs) ?? (y:ys)  =  xs ?? xs++    [] ?? xs  =  []+    (x:xs) ?? []  =  xs+    (x:xs) ?? (y:ys)  =  ys ?? ys+++class of 2 equivalent candidates:++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  xs++    [] ?? xs  =  []+    (x:xs) ?? []  =  xs ?? []+    (x:xs) ?? (y:ys)  =  xs+++class of 2 equivalent candidates:++    [] ?? xs  =  []+    (x:xs) ?? []  =  []+    (x:xs) ?? (y:ys)  =  ys++    [] ?? xs  =  []+    (x:xs) ?? []  =  xs ?? []+    (x:xs) ?? (y:ys)  =  ys+++class of 2 equivalent candidates:++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs+    (x:xs) ?? ys  =  ys++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs ?? xs+    (x:xs) ?? ys  =  ys+++class of 4 equivalent candidates:++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs+    (x:xs) ?? ys  =  []++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs+    (x:xs) ?? ys  =  xs ?? xs++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs+    (x:xs) ?? ys  =  xs ?? []++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs+    (x:xs) ?? ys  =  ys ?? []+++class of 2 equivalent candidates:++    [] ?? xs  =  xs+    (x:xs) ?? ys  =  ys ?? xs++    [] ?? xs  =  xs+    (x:xs) ?? []  =  xs+    (x:xs) ?? (y:ys)  =  xs ?? ys+++class of 2 equivalent candidates:++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs ?? xs+    (x:xs) ?? ys  =  xs++    [] ?? []  =  []+    [] ?? (x:xs)  =  xs ?? []+    (x:xs) ?? ys  =  xs++++Redundant candidates for: ton :: Bool -> Bool+  pruning with 39/49 rules+  [3,2,0,0,0] candidates+  4/5 unique candidates+  1/5 redundant candidates++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++class of 2 equivalent candidates:++    ton p  =  not p++    ton False  =  True+    ton True  =  False++++Redundant candidates for: &| :: Bool -> Bool -> Bool+  pruning with 39/49 rules+  [4,12,20,6,2] candidates+  16/44 unique candidates+  28/44 redundant candidates++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++class of 2 equivalent candidates:++    p &| q  =  not p++    False &| p  =  True+    True &| p  =  False+++class of 4 equivalent candidates:++    p &| q  =  not q++    p &| False  =  True+    p &| True  =  False++    False &| p  =  not p+    True &| False  =  True+    True &| True  =  False++    False &| False  =  True+    False &| True  =  False+    True &| p  =  not p+++class of 4 equivalent candidates:++    p &| False  =  p+    p &| True  =  False++    False &| p  =  False+    True &| p  =  not p++    False &| p  =  False+    True &| False  =  True+    True &| True  =  False++    p &| q  =  p && not q+++class of 3 equivalent candidates:++    p &| False  =  p+    p &| True  =  True++    False &| p  =  p+    True &| p  =  True++    p &| q  =  p || q+++class of 3 equivalent candidates:++    p &| False  =  False+    p &| True  =  p++    False &| p  =  False+    True &| p  =  p++    p &| q  =  p && q+++class of 4 equivalent candidates:++    p &| False  =  True+    p &| True  =  p++    False &| p  =  not p+    True &| p  =  True++    False &| False  =  True+    False &| True  =  False+    True &| p  =  True++    p &| q  =  p || not q+++class of 3 equivalent candidates:++    False &| p  =  p+    True &| p  =  False++    p &| False  =  False+    p &| True  =  not p++    p &| q  =  q && not p+++class of 3 equivalent candidates:++    False &| p  =  True+    True &| p  =  p++    p &| False  =  not p+    p &| True  =  True++    p &| q  =  q || not p+++class of 3 equivalent candidates:++    p &| False  =  p+    p &| True  =  not p++    False &| p  =  p+    True &| p  =  not p++    False &| p  =  p+    True &| False  =  True+    True &| True  =  False+++class of 4 equivalent candidates:++    p &| False  =  True+    p &| True  =  not p++    False &| p  =  True+    True &| p  =  not p++    False &| p  =  True+    True &| False  =  True+    True &| True  =  False++    p &| q  =  not p || not q+++class of 3 equivalent candidates:++    p &| False  =  not p+    p &| True  =  p++    False &| p  =  not p+    True &| p  =  p++    False &| False  =  True+    False &| True  =  False+    True &| p  =  p+++class of 4 equivalent candidates:++    p &| False  =  not p+    p &| True  =  False++    False &| p  =  not p+    True &| p  =  False++    False &| False  =  True+    False &| True  =  False+    True &| p  =  False++    p &| q  =  not p && not q   
+ bench/runtime/lapmatrud/bench/candidates.runtime view
@@ -0,0 +1,1 @@+8.0
+ bench/runtime/lapmatrud/bench/gps.runtime view
@@ -0,0 +1,1 @@+15.1
+ bench/runtime/lapmatrud/bench/gps2.runtime view
@@ -0,0 +1,1 @@+12.3
+ bench/runtime/lapmatrud/bench/ill-hit.runtime view
@@ -0,0 +1,1 @@+0.5
+ bench/runtime/lapmatrud/bench/longshot.runtime view
@@ -0,0 +1,1 @@+0.0
+ bench/runtime/lapmatrud/bench/lowtests.runtime view
@@ -0,0 +1,1 @@+0.2
+ bench/runtime/lapmatrud/bench/p12.runtime view
@@ -0,0 +1,1 @@+1.7
+ bench/runtime/lapmatrud/bench/p30.runtime view
@@ -0,0 +1,1 @@+0.0
+ bench/runtime/lapmatrud/bench/redundants.runtime view
@@ -0,0 +1,1 @@+1.9
+ bench/runtime/lapmatrud/bench/self.runtime view
@@ -0,0 +1,1 @@+0.0
+ bench/runtime/lapmatrud/bench/take-drop.runtime view
@@ -0,0 +1,1 @@+0.3
+ bench/runtime/lapmatrud/bench/terpret.runtime view
@@ -0,0 +1,1 @@+7.2
+ bench/runtime/lapmatrud/bench/weird.runtime view
@@ -0,0 +1,1 @@+2.8
+ bench/runtime/lapmatrud/eg/arith.runtime view
@@ -0,0 +1,1 @@+0.9
+ bench/runtime/lapmatrud/eg/bools.runtime view
@@ -0,0 +1,1 @@+1.8
+ bench/runtime/lapmatrud/eg/bst.runtime view
@@ -0,0 +1,1 @@+7.9
+ bench/runtime/lapmatrud/eg/count.runtime view
@@ -0,0 +1,1 @@+0.5
+ bench/runtime/lapmatrud/eg/dupos.runtime view
@@ -0,0 +1,1 @@+3.6
+ bench/runtime/lapmatrud/eg/factorial.runtime view
@@ -0,0 +1,1 @@+1.3
+ bench/runtime/lapmatrud/eg/fib01.runtime view
@@ -0,0 +1,1 @@+2.4
+ bench/runtime/lapmatrud/eg/fibonacci.runtime view
@@ -0,0 +1,1 @@+3.7
+ bench/runtime/lapmatrud/eg/gcd.runtime view
@@ -0,0 +1,1 @@+0.1
+ bench/runtime/lapmatrud/eg/higher.runtime view
@@ -0,0 +1,1 @@+0.6
+ bench/runtime/lapmatrud/eg/id.runtime view
@@ -0,0 +1,1 @@+0.0
+ bench/runtime/lapmatrud/eg/ints.runtime view
@@ -0,0 +1,1 @@+0.5
+ bench/runtime/lapmatrud/eg/list.runtime view
@@ -0,0 +1,1 @@+1.0
+ bench/runtime/lapmatrud/eg/pow.runtime view
@@ -0,0 +1,1 @@+4.7
+ bench/runtime/lapmatrud/eg/replicate.runtime view
@@ -0,0 +1,1 @@+0.3
+ bench/runtime/lapmatrud/eg/setelem.runtime view
@@ -0,0 +1,1 @@+1.1
+ bench/runtime/lapmatrud/eg/sort.runtime view
@@ -0,0 +1,1 @@+1.1
+ bench/runtime/lapmatrud/eg/spec.runtime view
@@ -0,0 +1,1 @@+0.6
+ bench/runtime/lapmatrud/eg/subset.runtime view
@@ -0,0 +1,1 @@+0.5
+ bench/runtime/lapmatrud/eg/tapps.runtime view
@@ -0,0 +1,1 @@+0.4
+ bench/runtime/lapmatrud/eg/tree.runtime view
@@ -0,0 +1,1 @@+1.2
+ bench/runtime/lapmatrud/proto/u-conjure.runtime view
@@ -0,0 +1,1 @@+0.2
+ bench/runtime/lapmatrud/versions view
@@ -0,0 +1,4 @@+GHC 9.0.2+leancheck-1.0.0+express-1.0.12+speculate-0.4.14
bench/runtime/zero/bench/candidates.runtime view
@@ -1,1 +1,1 @@-10.9+10.0
bench/runtime/zero/bench/gps.runtime view
@@ -1,1 +1,1 @@-26.2+28.4
bench/runtime/zero/bench/gps2.runtime view
@@ -1,1 +1,1 @@-9.3+22.6
bench/runtime/zero/bench/p12.runtime view
@@ -1,1 +1,1 @@-3.0+3.1
bench/runtime/zero/bench/redundants.runtime view
@@ -1,1 +1,1 @@-3.7+2.7
bench/runtime/zero/bench/self.runtime view
@@ -1,1 +1,1 @@-0.0+0.1
bench/runtime/zero/bench/terpret.runtime view
@@ -1,1 +1,1 @@-12.0+15.1
+ bench/runtime/zero/bench/weird.runtime view
@@ -0,0 +1,1 @@+5.1
bench/runtime/zero/eg/bst.runtime view
@@ -1,1 +1,1 @@-6.6+13.9
bench/runtime/zero/eg/count.runtime view
@@ -1,1 +1,1 @@-0.6+0.7
bench/runtime/zero/eg/dupos.runtime view
@@ -1,1 +1,1 @@-4.0+7.4
bench/runtime/zero/eg/fib01.runtime view
@@ -1,1 +1,1 @@-5.7+2.3
bench/runtime/zero/eg/fibonacci.runtime view
@@ -1,1 +1,1 @@-4.7+8.2
bench/runtime/zero/eg/gcd.runtime view
@@ -1,1 +1,1 @@-0.1+0.2
+ bench/runtime/zero/eg/higher.runtime view
@@ -0,0 +1,1 @@+1.2
+ bench/runtime/zero/eg/id.runtime view
@@ -0,0 +1,1 @@+0.0
bench/runtime/zero/eg/list.runtime view
@@ -1,1 +1,1 @@-1.2+2.0
bench/runtime/zero/eg/pow.runtime view
@@ -1,1 +1,1 @@-3.7+6.9
bench/runtime/zero/eg/replicate.runtime view
@@ -1,1 +1,1 @@-0.4+0.5
bench/runtime/zero/eg/setelem.runtime view
@@ -1,1 +1,1 @@-1.9+2.1
bench/runtime/zero/eg/sort.runtime view
@@ -1,1 +1,1 @@-1.2+2.5
bench/runtime/zero/eg/spec.runtime view
@@ -1,1 +1,1 @@-1.0+1.2
bench/runtime/zero/eg/subset.runtime view
@@ -1,1 +1,1 @@-0.8+0.9
bench/runtime/zero/eg/tree.runtime view
@@ -1,1 +1,1 @@-1.9+2.2
bench/self.out view
@@ -2,18 +2,18 @@ -- testing 360 combinations of argument values -- pruning with 0/0 rules -- looking through 4 candidates of size 1--- looking through 17 candidates of size 2--- looking through 80 candidates of size 3--- tested 23 candidates+-- looking through 15 candidates of size 2+-- looking through 55 candidates of size 3+-- tested 21 candidates x ? y  =  x + y  (?) :: Int -> Int -> Int -- testing 360 combinations of argument values -- pruning with 0/0 rules -- looking through 4 candidates of size 1--- looking through 17 candidates of size 2--- looking through 80 candidates of size 3--- tested 39 candidates+-- looking through 15 candidates of size 2+-- looking through 55 candidates of size 3+-- tested 33 candidates x ? y  =  x * y  i :: Int -> Int@@ -21,7 +21,7 @@ -- pruning with 0/0 rules -- looking through 3 candidates of size 1 -- looking through 2 candidates of size 2--- looking through 21 candidates of size 3+-- looking through 13 candidates of size 3 -- tested 8 candidates i x  =  x + 1 @@ -30,7 +30,7 @@ -- pruning with 0/0 rules -- looking through 3 candidates of size 1 -- looking through 3 candidates of size 2--- looking through 20 candidates of size 3--- tested 26 candidates+-- looking through 12 candidates of size 3+-- tested 18 candidates cannot conjure 
bench/take-drop.out view
@@ -4,15 +4,12 @@ -- looking through 2 candidates of size 1 -- looking through 3 candidates of size 2 -- looking through 4 candidates of size 3--- looking through 14 candidates of size 4--- looking through 26 candidates of size 5--- looking through 41 candidates of size 6--- looking through 130 candidates of size 7--- looking through 125 candidates of size 8--- looking through 458 candidates of size 9--- tested 488 candidates-drop 0 []  =  []-drop 0 (x:xs)  =  x:xs+-- looking through 9 candidates of size 4+-- looking through 10 candidates of size 5+-- looking through 28 candidates of size 6+-- looking through 50 candidates of size 7+-- tested 63 candidates+drop 0 xs  =  xs drop x []  =  [] drop x (y:xs)  =  drop (x - 1) xs @@ -22,15 +19,14 @@ -- looking through 2 candidates of size 1 -- looking through 3 candidates of size 2 -- looking through 4 candidates of size 3--- looking through 14 candidates of size 4--- looking through 26 candidates of size 5--- looking through 41 candidates of size 6--- looking through 130 candidates of size 7--- looking through 125 candidates of size 8--- looking through 458 candidates of size 9--- tested 477 candidates-take 0 []  =  []-take 0 (x:xs)  =  []+-- looking through 9 candidates of size 4+-- looking through 10 candidates of size 5+-- looking through 28 candidates of size 6+-- looking through 50 candidates of size 7+-- looking through 83 candidates of size 8+-- looking through 133 candidates of size 9+-- tested 249 candidates+take 0 xs  =  [] take x []  =  [] take x (y:xs)  =  y:take (x - 1) xs 
bench/terpret.out view
@@ -54,13 +54,15 @@ -- 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--- tested 137576 candidates-cshift (p,q,r)  =  if p then (p,r,q) else (p,q,r)+-- looking through 625 candidates of size 7+-- looking through 1242 candidates of size 8+-- looking through 3087 candidates of size 9+-- looking through 8937 candidates of size 10+-- looking through 102875 candidates of size 11+-- tested 40385 candidates+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@@ -71,10 +73,10 @@ -- 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--- tested 22191 candidates+-- looking through 585 candidates of size 6+-- looking through 1242 candidates of size 7+-- looking through 15183 candidates of size 8+-- tested 15459 candidates cshift False p q  =  (False,p,q) cshift True p q  =  (True,q,p) @@ -86,8 +88,12 @@ -- looking through 0 candidates of size 1 -- looking through 0 candidates of size 2 -- looking through 9 candidates of size 3--- looking through 19 candidates of size 4--- tested 28 candidates+-- looking through 18 candidates of size 4+-- looking through 27 candidates of size 5+-- looking through 72 candidates of size 6+-- looking through 245 candidates of size 7+-- looking through 663 candidates of size 8+-- tested 1034 candidates fadder False False False  =  (False,False) fadder False False True  =  (False,True) fadder False True False  =  (False,True)@@ -128,13 +134,12 @@ -- pruning with 4/7 rules -- looking through 1 candidates of size 1 -- looking through 1 candidates of size 2--- looking through 2 candidates of size 3--- looking through 6 candidates of size 4--- looking through 18 candidates of size 5--- looking through 23 candidates of size 6--- looking through 68 candidates of size 7--- tested 64 candidates-[] `access` 0  =  undefined+-- looking through 1 candidates of size 3+-- looking through 4 candidates of size 4+-- looking through 9 candidates of size 5+-- looking through 17 candidates of size 6+-- looking through 46 candidates of size 7+-- tested 46 candidates [] `access` x  =  undefined (x:xs) `access` 0  =  x (x:xs) `access` y  =  xs `access` (y - 1)
+ bench/weird.hs view
@@ -0,0 +1,33 @@+-- weird.hs: conjures some weird or unintuitive functions+--+-- Copyright (C) 2024 Rudy Matela+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).+--+-- This file conjures some weird or unintuitive functions.+-- It is here to make sure we do not overprune!+import Conjure++-- | xor for integers+--+-- returns the sum but only when one of the arguments is 0+(^^^) :: Int -> Int -> Int+0 ^^^ y  =  y+x ^^^ 0  =  x+_ ^^^ _  =  0++main :: IO ()+main = do+  conjure "^^^" (^^^) primitives+  conjureWith args{usePatterns = False} "^^^" (^^^) primitives++primitives :: [Prim]+primitives =+  [ pr (0::Int)+  , pr (1::Int)+  , prim "+" ((+) :: Int -> Int -> Int)+  , prim "*" ((*) :: Int -> Int -> Int)+  , prim "==" ((==) :: Int -> Int -> Bool)+  , prim "&&" (&&)+  , prim "||" (||)+  , prif (undefined :: Int)+  ]
+ bench/weird.out view
@@ -0,0 +1,29 @@+(^^^) :: Int -> Int -> Int+-- testing 360 combinations of argument values+-- pruning with 56/91 rules+-- looking through 4 candidates of size 1+-- looking through 15 candidates of size 2+-- looking through 39 candidates of size 3+-- tested 36 candidates+0 ^^^ x  =  x+x ^^^ 0  =  x+x ^^^ y  =  0++(^^^) :: Int -> Int -> Int+-- testing 360 combinations of argument values+-- pruning with 56/91 rules+-- looking through 4 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 9 candidates of size 3+-- looking through 0 candidates of size 4+-- looking through 39 candidates of size 5+-- looking through 60 candidates of size 6+-- looking through 225 candidates of size 7+-- looking through 1056 candidates of size 8+-- looking through 1488 candidates of size 9+-- looking through 13020 candidates of size 10+-- tested 7148 candidates+x ^^^ y  =  if 0 == x * y+            then x + y+            else 0+
changelog.md view
@@ -2,6 +2,18 @@ ============================  +v0.5.8+------++* prune redundant mutants using a few new rules+* rework numeric recursion criteria+* improve pretty-printing+* improve error handling+* refactor and lint throughout+* Conjurable tuples up to 12-tuples+* bump Express requirement to v1.0.14 (bugfix)++ v0.5.6 ------ 
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.5.6+version:             0.5.8 synopsis:            synthesize Haskell functions out of partial definitions description:   Conjure is a tool that synthesizes Haskell functions out of partial definitions.@@ -43,6 +43,10 @@                   , bench/runtime/zero/eg/*.runtime                   , bench/runtime/zero/proto/*.runtime                   , bench/runtime/zero/versions+                  , bench/runtime/lapmatrud/bench/*.runtime+                  , bench/runtime/lapmatrud/eg/*.runtime+                  , bench/runtime/lapmatrud/proto/*.runtime+                  , bench/runtime/lapmatrud/versions                   , bench/versions                   , bench/time                   , test/sdist@@ -60,7 +64,7 @@ source-repository this   type:            git   location:        https://github.com/rudymatela/conjure-  tag:             v0.5.6+  tag:             v0.5.8  library   exposed-modules: Conjure@@ -76,7 +80,7 @@                , leancheck >= 1.0.0                , template-haskell                , speculate >= 0.4.14-               , express >= 1.0.8+               , express >= 1.0.14   hs-source-dirs:      src   default-language:    Haskell2010 
eg/arith.out view
@@ -2,49 +2,49 @@ -- testing 4 combinations of argument values -- pruning with 14/25 rules -- looking through 3 candidates of size 1--- looking through 2 candidates of size 2--- looking through 8 candidates of size 3--- tested 6 candidates+-- looking through 1 candidates of size 2+-- looking through 6 candidates of size 3+-- tested 5 candidates double x  =  x + x  triple :: Int -> Int -- testing 4 combinations of argument values -- pruning with 14/25 rules -- looking through 3 candidates of size 1--- looking through 2 candidates of size 2--- looking through 8 candidates of size 3--- looking through 8 candidates of size 4--- looking through 21 candidates of size 5--- tested 25 candidates+-- looking through 1 candidates of size 2+-- looking through 6 candidates of size 3+-- looking through 4 candidates of size 4+-- looking through 11 candidates of size 5+-- tested 15 candidates triple x  =  x + (x + x)  add :: Int -> Int -> Int -- testing 4 combinations of argument values -- pruning with 14/25 rules -- looking through 4 candidates of size 1--- looking through 17 candidates of size 2--- looking through 61 candidates of size 3--- tested 23 candidates+-- looking through 15 candidates of size 2+-- looking through 39 candidates of size 3+-- tested 21 candidates add x y  =  x + y  square :: Int -> Int -- testing 3 combinations of argument values -- pruning with 14/25 rules -- looking through 3 candidates of size 1--- looking through 2 candidates of size 2--- looking through 7 candidates of size 3--- tested 10 candidates+-- looking through 1 candidates of size 2+-- looking through 4 candidates of size 3+-- tested 7 candidates square x  =  x * x  cube :: Int -> Int -- testing 3 combinations of argument values -- pruning with 14/25 rules -- looking through 3 candidates of size 1--- looking through 2 candidates of size 2--- looking through 7 candidates of size 3--- looking through 8 candidates of size 4--- looking through 21 candidates of size 5--- tested 36 candidates+-- looking through 1 candidates of size 2+-- looking through 4 candidates of size 3+-- looking through 3 candidates of size 4+-- looking through 11 candidates of size 5+-- tested 19 candidates cube x  =  x * (x * x)  tnpo :: Int -> Int@@ -52,11 +52,11 @@ -- pruning with 14/25 rules -- looking through 3 candidates of size 1 -- looking through 2 candidates of size 2--- looking through 8 candidates of size 3--- looking through 8 candidates of size 4--- looking through 21 candidates of size 5--- looking through 21 candidates of size 6--- looking through 90 candidates of size 7--- tested 87 candidates+-- looking through 6 candidates of size 3+-- looking through 5 candidates of size 4+-- looking through 11 candidates of size 5+-- looking through 11 candidates of size 6+-- looking through 35 candidates of size 7+-- tested 40 candidates tnpo x  =  x + (x + (x + 1)) 
eg/bools.out view
@@ -5,8 +5,8 @@ -- looking through 6 candidates of size 2 -- looking through 12 candidates of size 3 -- looking through 16 candidates of size 4--- looking through 42 candidates of size 5--- tested 45 candidates+-- looking through 28 candidates of size 5+-- tested 42 candidates and []  =  True and (p:ps)  =  p && and ps @@ -17,7 +17,7 @@ -- looking through 6 candidates of size 2 -- looking through 12 candidates of size 3 -- looking through 16 candidates of size 4--- looking through 42 candidates of size 5+-- looking through 28 candidates of size 5 -- tested 39 candidates or []  =  False or (p:ps)  =  p || or ps
eg/bst.hs view
@@ -3,27 +3,14 @@ -- Copyright (C) 2021 Rudy Matela -- Distributed under the 3-Clause BSD licence (see the file LICENSE). {-# LANGUAGE CPP, TemplateHaskell #-}-#if __GLASGOW_HASKELL__ == 708-{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}-import Data.Typeable (Typeable)-#endif  import Conjure import Test.LeanCheck import Data.Express hiding (height,size) --- TODO: remove the following import--- and fix build on GHC 7.10 and 7.8--- the generation of -: and ->>>: somehow fails.-import Test.LeanCheck.Utils- data Tree  =  Leaf            |  Node Tree Int Tree   deriving (Eq, Ord, Show, Read)--#if __GLASGOW_HASKELL__ == 708-deriving instance Typeable Tree-#endif  deriveExpress ''Tree 
eg/bst.out view
@@ -4,18 +4,18 @@ -- looking through 1 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 7 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 60 candidates of size 8--- looking through 120 candidates of size 9+-- looking through 31 candidates of size 8+-- looking through 92 candidates of size 9 -- looking through 0 candidates of size 10--- looking through 452 candidates of size 11--- looking through 424 candidates of size 12--- tested 707 candidates+-- looking through 304 candidates of size 11+-- looking through 199 candidates of size 12+-- tested 501 candidates mem x Leaf  =  False-mem x (Node t1 y t2)  =  mem x t1 || (x == y || mem x t2)+mem x (Node t1 y t2)  =  mem x t1 || (mem x t2 || x == y)  mem :: Int -> Tree -> Bool -- testing 360 combinations of argument values@@ -42,16 +42,16 @@ -- looking through 2 candidates of size 1 -- looking through 2 candidates of size 2 -- looking through 0 candidates of size 3--- looking through 10 candidates of size 4+-- looking through 8 candidates of size 4 -- looking through 21 candidates of size 5 -- looking through 0 candidates of size 6--- looking through 118 candidates of size 7+-- looking through 86 candidates of size 7 -- looking through 239 candidates of size 8--- looking through 216 candidates of size 9--- looking through 2204 candidates of size 10--- looking through 3651 candidates of size 11--- looking through 8280 candidates of size 12--- tested 14743 candidates+-- looking through 104 candidates of size 9+-- looking through 1558 candidates of size 10+-- looking through 3555 candidates of size 11+-- looking through 4028 candidates of size 12+-- tested 9603 candidates cannot conjure  before :: Int -> Tree -> Tree@@ -59,16 +59,16 @@ -- looking through 2 candidates of size 1 -- looking through 2 candidates of size 2 -- looking through 0 candidates of size 3--- looking through 10 candidates of size 4+-- looking through 8 candidates of size 4 -- looking through 21 candidates of size 5 -- looking through 0 candidates of size 6--- looking through 118 candidates of size 7+-- looking through 86 candidates of size 7 -- looking through 239 candidates of size 8--- looking through 216 candidates of size 9--- looking through 2204 candidates of size 10--- looking through 3651 candidates of size 11--- looking through 8280 candidates of size 12--- tested 14743 candidates+-- looking through 104 candidates of size 9+-- looking through 1558 candidates of size 10+-- looking through 3555 candidates of size 11+-- looking through 4028 candidates of size 12+-- tested 9603 candidates cannot conjure  before :: Int -> Tree -> Tree@@ -76,16 +76,16 @@ -- looking through 2 candidates of size 1 -- looking through 2 candidates of size 2 -- looking through 0 candidates of size 3--- looking through 10 candidates of size 4+-- looking through 8 candidates of size 4 -- looking through 21 candidates of size 5 -- looking through 0 candidates of size 6--- looking through 94 candidates of size 7+-- looking through 68 candidates of size 7 -- looking through 287 candidates of size 8--- looking through 72 candidates of size 9--- looking through 1784 candidates of size 10+-- looking through 32 candidates of size 9+-- looking through 1216 candidates of size 10 -- looking through 5103 candidates of size 11--- looking through 3312 candidates of size 12--- tested 10687 candidates+-- looking through 1472 candidates of size 12+-- tested 8211 candidates cannot conjure  beyond :: Int -> Tree -> Tree@@ -93,16 +93,16 @@ -- looking through 2 candidates of size 1 -- looking through 2 candidates of size 2 -- looking through 0 candidates of size 3--- looking through 10 candidates of size 4+-- looking through 8 candidates of size 4 -- looking through 21 candidates of size 5 -- looking through 0 candidates of size 6--- looking through 94 candidates of size 7+-- looking through 68 candidates of size 7 -- looking through 287 candidates of size 8--- looking through 72 candidates of size 9--- looking through 1784 candidates of size 10+-- looking through 32 candidates of size 9+-- looking through 1216 candidates of size 10 -- looking through 5103 candidates of size 11--- looking through 3312 candidates of size 12--- tested 10687 candidates+-- looking through 1472 candidates of size 12+-- tested 8211 candidates cannot conjure  union :: Tree -> Tree -> Tree@@ -110,13 +110,13 @@ -- pruning with 6/8 rules -- looking through 3 candidates of size 1 -- looking through 11 candidates of size 2--- looking through 40 candidates of size 3+-- looking through 32 candidates of size 3 -- looking through 84 candidates of size 4--- looking through 784 candidates of size 5--- looking through 1032 candidates of size 6--- looking through 8368 candidates of size 7--- looking through 24890 candidates of size 8--- looking through 75535 candidates of size 9--- tested 110747 candidates+-- looking through 470 candidates of size 5+-- looking through 1074 candidates of size 6+-- looking through 4088 candidates of size 7+-- looking through 16373 candidates of size 8+-- looking through 41366 candidates of size 9+-- tested 63501 candidates cannot conjure 
eg/count.out view
@@ -14,16 +14,16 @@ -- pruning with 8/13 rules -- looking through 2 candidates of size 1 -- looking through 2 candidates of size 2--- looking through 1 candidates of size 3--- looking through 8 candidates of size 4--- looking through 9 candidates of size 5--- looking through 24 candidates of size 6--- 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--- tested 1751 candidates+-- looking through 0 candidates of size 3+-- looking through 4 candidates of size 4+-- looking through 8 candidates of size 5+-- looking through 14 candidates of size 6+-- looking through 24 candidates of size 7+-- looking through 58 candidates of size 8+-- looking through 134 candidates of size 9+-- looking through 302 candidates of size 10+-- looking through 633 candidates of size 11+-- tested 909 candidates count x []  =  0-count x (y:xs)  =  (if x == y then 1 else 0) + count x xs+count x (y:xs)  =  count x xs + (if x == y then 1 else 0) 
eg/dupos.out view
@@ -12,15 +12,17 @@ -- looking through 16 candidates of size 9 -- looking through 25 candidates of size 10 -- looking through 36 candidates of size 11--- looking through 65 candidates of size 12--- looking through 141 candidates of size 13--- looking through 322 candidates of size 14--- looking through 644 candidates of size 15--- looking through 1189 candidates of size 16--- looking through 2189 candidates of size 17--- tested 2599 candidates+-- looking through 63 candidates of size 12+-- looking through 133 candidates of size 13+-- looking through 299 candidates of size 14+-- looking through 602 candidates of size 15+-- looking through 1116 candidates of size 16+-- looking through 2031 candidates of size 17+-- tested 2451 candidates duplicates []  =  []-duplicates (x:xs)  =  if elem x xs && not (elem x (duplicates xs)) then x:duplicates xs else duplicates xs+duplicates (x:xs)  =  if elem x xs && not (elem x (duplicates xs))+                      then x:duplicates xs+                      else duplicates xs  duplicates :: [Int] -> [Int] -- pruning with 21/26 rules@@ -35,15 +37,17 @@ -- looking through 16 candidates of size 9 -- looking through 25 candidates of size 10 -- looking through 36 candidates of size 11--- looking through 65 candidates of size 12--- looking through 141 candidates of size 13--- looking through 322 candidates of size 14--- looking through 644 candidates of size 15--- looking through 1189 candidates of size 16--- looking through 2189 candidates of size 17--- tested 2599 candidates+-- looking through 63 candidates of size 12+-- looking through 133 candidates of size 13+-- looking through 299 candidates of size 14+-- looking through 602 candidates of size 15+-- looking through 1116 candidates of size 16+-- looking through 2031 candidates of size 17+-- tested 2451 candidates duplicates []  =  []-duplicates (x:xs)  =  if elem x xs && not (elem x (duplicates xs)) then x:duplicates xs else duplicates xs+duplicates (x:xs)  =  if elem x xs && not (elem x (duplicates xs))+                      then x:duplicates xs+                      else duplicates xs  positionsFrom :: Int -> A -> [A] -> [Int] -- testing 360 combinations of argument values@@ -52,17 +56,17 @@ -- looking through 0 candidates of size 2 -- looking through 2 candidates of size 3 -- looking through 5 candidates of size 4--- looking through 15 candidates of size 5--- looking through 25 candidates of size 6--- looking through 59 candidates of size 7--- looking through 108 candidates of size 8--- looking through 256 candidates of size 9--- looking through 458 candidates of size 10--- looking through 1064 candidates of size 11--- looking through 1948 candidates of size 12--- looking through 4516 candidates of size 13--- looking through 8304 candidates of size 14--- tested 8844 candidates+-- looking through 13 candidates of size 5+-- looking through 18 candidates of size 6+-- looking through 47 candidates of size 7+-- looking through 77 candidates of size 8+-- looking through 193 candidates of size 9+-- looking through 293 candidates of size 10+-- looking through 738 candidates of size 11+-- looking through 1173 candidates of size 12+-- looking through 2879 candidates of size 13+-- looking through 4537 candidates of size 14+-- tested 5610 candidates positionsFrom x y []  =  [] positionsFrom x y (z:xs)  =  (if y == z then (x :) else id) (positionsFrom (x + 1) y xs) 
eg/factorial.out view
@@ -2,13 +2,13 @@ -- 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 11 candidates of size 3--- looking through 29 candidates of size 4--- looking through 60 candidates of size 5--- looking through 145 candidates of size 6--- looking through 501 candidates of size 7--- tested 283 candidates+-- looking through 3 candidates of size 2+-- looking through 7 candidates of size 3+-- looking through 13 candidates of size 4+-- looking through 35 candidates of size 5+-- looking through 61 candidates of size 6+-- looking through 219 candidates of size 7+-- tested 153 candidates factorial 0  =  1 factorial x  =  x * factorial (x - 1) @@ -16,11 +16,11 @@ -- testing 4 combinations of argument values -- pruning with 32/72 rules -- looking through 3 candidates of size 1--- looking through 4 candidates of size 2--- looking through 11 candidates of size 3--- looking through 29 candidates of size 4--- looking through 60 candidates of size 5--- looking through 209 candidates of size 6--- tested 148 candidates+-- looking through 3 candidates of size 2+-- looking through 7 candidates of size 3+-- looking through 13 candidates of size 4+-- looking through 35 candidates of size 5+-- looking through 101 candidates of size 6+-- tested 89 candidates factorial x  =  foldr (*) 1 [1..x] 
eg/fib01.out view
@@ -3,10 +3,10 @@ -- pruning with 6/10 rules -- looking through 4 candidates of size 1 -- looking through 24 candidates of size 2--- looking through 241 candidates of size 3--- looking through 1958 candidates of size 4--- looking through 10540 candidates of size 5--- tested 12767 candidates+-- looking through 115 candidates of size 3+-- looking through 470 candidates of size 4+-- looking through 1657 candidates of size 5+-- tested 2270 candidates cannot conjure  fib01 :: Int -> Int -> Int -> Int@@ -14,14 +14,14 @@ -- pruning with 18/37 rules -- looking through 4 candidates of size 1 -- looking through 4 candidates of size 2--- looking through 9 candidates of size 3--- looking through 21 candidates of size 4--- looking through 43 candidates of size 5--- looking through 84 candidates of size 6--- looking through 192 candidates of size 7--- looking through 391 candidates of size 8--- looking through 840 candidates of size 9--- looking through 6414 candidates of size 10--- tested 8002 candidates+-- looking through 10 candidates of size 3+-- looking through 16 candidates of size 4+-- looking through 44 candidates of size 5+-- looking through 92 candidates of size 6+-- looking through 234 candidates of size 7+-- looking through 544 candidates of size 8+-- looking through 1332 candidates of size 9+-- looking through 7796 candidates of size 10+-- tested 10076 candidates cannot conjure 
eg/fibonacci.out view
@@ -3,17 +3,17 @@ -- pruning with 21/44 rules -- looking through 4 candidates of size 1 -- looking through 3 candidates of size 2--- looking through 14 candidates of size 3--- looking through 17 candidates of size 4--- looking through 58 candidates of size 5--- looking through 69 candidates of size 6--- looking through 357 candidates of size 7--- looking through 390 candidates of size 8--- looking through 2265 candidates of size 9--- looking through 2502 candidates of size 10--- looking through 15355 candidates of size 11--- looking through 17083 candidates of size 12--- tested 21324 candidates+-- looking through 9 candidates of size 3+-- looking through 11 candidates of size 4+-- looking through 34 candidates of size 5+-- looking through 41 candidates of size 6+-- looking through 187 candidates of size 7+-- looking through 204 candidates of size 8+-- looking through 957 candidates of size 9+-- looking through 1059 candidates of size 10+-- looking through 5295 candidates of size 11+-- looking through 6052 candidates of size 12+-- tested 8126 candidates fibonacci 0  =  1 fibonacci 1  =  1 fibonacci x  =  fibonacci (x - 1) + fibonacci (x - 2)
eg/gcd.out view
@@ -2,12 +2,12 @@ -- testing 11 combinations of argument values -- pruning with 0/0 rules -- looking through 3 candidates of size 1--- looking through 7 candidates of size 2--- looking through 18 candidates of size 3--- looking through 60 candidates of size 4--- looking through 150 candidates of size 5--- looking through 469 candidates of size 6--- tested 243 candidates+-- looking through 5 candidates of size 2+-- looking through 11 candidates of size 3+-- looking through 50 candidates of size 4+-- looking through 98 candidates of size 5+-- looking through 359 candidates of size 6+-- tested 171 candidates gcd x 0  =  x gcd x y  =  gcd y (x `mod` y) 
+ eg/higher.hs view
@@ -0,0 +1,55 @@+-- higher.hs: conjuring higher order functions+--+-- Copyright (C) 2024 Rudy Matela+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).+import Conjure++appSpec :: ((Int -> Int) -> Int -> Int) -> Bool+appSpec ($)  =  ((+1) $ 2) == 3+             && (abs $ (-2)) == 2+             && (negate $ 1) == -1++-- composeSpec :: ((Int->Int) -> (Int->Int) -> Int->Int) -> ++composeSpec :: ((Int->Int) -> (Int->Int) -> Int->Int) -> Bool+composeSpec (.)  =  ((*2) . (*3)) 1 == 6+                 && (abs . negate) 7 == 7+                 && (negate . abs) 8 == -8++flipSpec :: ((Int -> Int -> Int) -> Int -> Int -> Int) -> Bool+flipSpec flip  =  flip const 1 2 == 2+               && flip div 2 10 == 5+               && flip mod 3 10 == 1++mapSpec :: ((Int -> Int) -> [Int] -> [Int]) -> Bool+mapSpec map  =  map (*2) [1,2,3] == [2,4,6]+             && map abs [0,-1,-2] == [0,1,2]++foldSpec :: ((Int -> Int -> Int) -> Int -> [Int] -> Int) -> Bool+foldSpec fold  =  fold (+) 0 [1,2,3] == 6+               && fold (*) 1 [1,2,3] == 6+               && fold (+) 0 [1,2,3,4] == 10+               && fold (*) 1 [1,2,3,4] == 24++filterSpec :: ((Int -> Bool) -> [Int] -> [Int]) -> Bool+filterSpec filter  =  filter (<0) [0,1,-1,2,-2] == [-1,-2]+                   && filter (>0) [0,1,-1,2,-2] == [1,2]+                   && filter odd [0,1,2,3,4,5,6] == [1,3,5]+                   && filter even [0,1,2,3,4,5,6] == [0,2,4,6]++main :: IO ()+main = do+  conjureFromSpec "$"      appSpec     primitives+  conjureFromSpec "."      composeSpec primitives+  conjureFromSpec "flip"   flipSpec    primitives+  conjureFromSpec "map"    mapSpec     primitives+  conjureFromSpec "fold"   foldSpec    primitives+  conjureFromSpec "filter" filterSpec  primitives+++primitives :: [Prim]+primitives  =+  [ pr ([] :: [Int])+  , prim ":" ((:) :: Int -> [Int] -> [Int])+  , prif (undefined :: [Int])+  ]
+ eg/higher.out view
@@ -0,0 +1,69 @@+($) :: (Int -> Int) -> Int -> Int+-- pruning with 3/3 rules+-- looking through 1 candidates of size 1+-- looking through 1 candidates of size 2+-- tested 2 candidates+f $ x  =  f x++(.) :: (Int -> Int) -> (Int -> Int) -> Int -> Int+-- pruning with 3/3 rules+-- looking through 1 candidates of size 1+-- looking through 2 candidates of size 2+-- looking through 4 candidates of size 3+-- tested 5 candidates+(f . g) x  =  f (g x)++flip :: (Int -> Int -> Int) -> Int -> Int -> Int+-- pruning with 3/3 rules+-- looking through 2 candidates of size 1+-- looking through 0 candidates of size 2+-- looking through 4 candidates of size 3+-- tested 5 candidates+flip f x y  =  f y x++map :: (Int -> Int) -> [Int] -> [Int]+-- pruning with 3/3 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 3 candidates of size 4+-- looking through 2 candidates of size 5+-- looking through 6 candidates of size 6+-- looking through 9 candidates of size 7+-- tested 17 candidates+map f []  =  []+map f (x:xs)  =  f x:map f xs++fold :: (Int -> Int -> Int) -> Int -> [Int] -> Int+-- pruning with 3/3 rules+-- looking through 1 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 1 candidates of size 3+-- looking through 6 candidates of size 4+-- looking through 4 candidates of size 5+-- looking through 23 candidates of size 6+-- looking through 26 candidates of size 7+-- tested 45 candidates+fold f x []  =  x+fold f x (y:xs)  =  fold f (f x y) xs++filter :: (Int -> Bool) -> [Int] -> [Int]+-- pruning with 3/3 rules+-- looking through 2 candidates of size 1+-- looking through 1 candidates of size 2+-- looking through 0 candidates of size 3+-- looking through 3 candidates of size 4+-- looking through 0 candidates of size 5+-- looking through 6 candidates of size 6+-- looking through 0 candidates of size 7+-- looking through 22 candidates of size 8+-- looking through 0 candidates of size 9+-- looking through 65 candidates of size 10+-- looking through 0 candidates of size 11+-- looking through 219 candidates of size 12+-- tested 166 candidates+filter f []  =  []+filter f (x:xs)  =  if f x+                    then x:filter f xs+                    else filter f xs+
+ eg/id.hs view
@@ -0,0 +1,12 @@+-- id.hs: conjuring the identity and const functions+--+-- Copyright (C) 2024 Rudy Matela+-- Distributed under the 3-Clause BSD licence (see the file LICENSE).+import Conjure++main :: IO ()+main = do+  -- conjure needs no primitives+  -- to figure out the implementation of id and const+  conjure "id"    (id :: Int -> Int)           []+  conjure "const" (const :: Int -> Int -> Int) []
+ eg/id.out view
@@ -0,0 +1,14 @@+id :: Int -> Int+-- testing 360 combinations of argument values+-- pruning with 0/0 rules+-- looking through 1 candidates of size 1+-- tested 1 candidates+id x  =  x++const :: Int -> Int -> Int+-- testing 360 combinations of argument values+-- pruning with 0/0 rules+-- looking through 2 candidates of size 1+-- tested 1 candidates+const x y  =  x+
eg/ints.out view
@@ -22,10 +22,10 @@ -- pruning with 14/25 rules -- looking through 2 candidates of size 1 -- 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--- tested 23 candidates+-- looking through 2 candidates of size 3+-- looking through 6 candidates of size 4+-- looking through 6 candidates of size 5+-- tested 15 candidates sum []  =  0 sum (x:xs)  =  x + sum xs @@ -34,10 +34,10 @@ -- pruning with 14/25 rules -- looking through 2 candidates of size 1 -- 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--- tested 33 candidates+-- looking through 2 candidates of size 3+-- looking through 6 candidates of size 4+-- looking through 6 candidates of size 5+-- tested 20 candidates product []  =  1 product (x:xs)  =  x * product xs @@ -46,9 +46,9 @@ -- pruning with 15/26 rules -- looking through 2 candidates of size 1 -- looking through 4 candidates of size 2--- looking through 3 candidates of size 3--- looking through 16 candidates of size 4--- tested 10 candidates+-- looking through 2 candidates of size 3+-- looking through 9 candidates of size 4+-- tested 9 candidates sum xs  =  foldr (+) 0 xs  product :: [Int] -> Int@@ -56,8 +56,8 @@ -- pruning with 15/26 rules -- looking through 2 candidates of size 1 -- looking through 4 candidates of size 2--- looking through 3 candidates of size 3--- looking through 16 candidates of size 4--- tested 12 candidates+-- looking through 2 candidates of size 3+-- looking through 9 candidates of size 4+-- tested 11 candidates product xs  =  foldr (*) 1 xs 
eg/list.hs view
@@ -52,6 +52,12 @@ ordered' [x,y]  =  x <= y ordered' [x,y,z]  =  x <= y && y <= z +zip' :: [Int] -> [Int] -> [(Int,Int)]+zip' [] []  =  []+zip' [x] [a]  =  [(x,a)]+zip' [x,y] [a,b]  =  [(x,a),(y,b)]+zip' [x,y,z] [a,b,c]  =  [(x,a),(y,b),(z,c)]+ main :: IO () main = do   conjure "length" length'@@ -75,6 +81,12 @@     [ pr ([] :: [Int])     , prim ":" ((:) :: Int -> [Int] -> [Int])     , prim "foldr" (foldr :: (Int -> [Int] -> [Int]) -> [Int] -> [Int] -> [Int])+    ]++  conjure "zip" (zip')+    [ pr ([] :: [(Int,Int)])+    , prim ":" ((:) :: (Int,Int) -> [(Int,Int)] -> [(Int,Int)])+    , prim "," ((,) :: Int -> Int -> (Int,Int))     ]    conjure "\\/" (\/)
eg/list.out view
@@ -3,10 +3,10 @@ -- pruning with 4/8 rules -- looking through 2 candidates of size 1 -- looking through 2 candidates of size 2--- looking through 2 candidates of size 3--- looking through 4 candidates of size 4--- looking through 5 candidates of size 5--- tested 13 candidates+-- looking through 1 candidates of size 3+-- looking through 2 candidates of size 4+-- looking through 2 candidates of size 5+-- tested 9 candidates length []  =  0 length (x:xs)  =  length xs + 1 @@ -29,11 +29,11 @@ -- pruning with 0/0 rules -- looking through 3 candidates of size 1 -- looking through 7 candidates of size 2--- looking through 9 candidates of size 3--- looking through 44 candidates of size 4--- looking through 116 candidates of size 5--- looking through 80 candidates of size 6--- tested 233 candidates+-- looking through 11 candidates of size 3+-- looking through 37 candidates of size 4+-- looking through 98 candidates of size 5+-- looking through 94 candidates of size 6+-- tested 194 candidates [] ++ xs  =  xs (x:xs) ++ ys  =  x:(xs ++ ys) @@ -42,21 +42,38 @@ -- pruning with 2/2 rules -- looking through 3 candidates of size 1 -- looking through 7 candidates of size 2--- looking through 9 candidates of size 3--- looking through 48 candidates of size 4--- tested 54 candidates+-- looking through 11 candidates of size 3+-- looking through 41 candidates of size 4+-- tested 48 candidates xs ++ ys  =  foldr (:) ys xs +zip :: [Int] -> [Int] -> [(Int,Int)]+-- testing 360 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 0 candidates of size 3+-- looking through 8 candidates of size 4+-- looking through 6 candidates of size 5+-- looking through 2 candidates of size 6+-- looking through 14 candidates of size 7+-- looking through 9 candidates of size 8+-- looking through 31 candidates of size 9+-- tested 50 candidates+zip [] xs  =  []+zip (x:xs) []  =  []+zip (x:xs) (y:ys)  =  (x,y):zip xs ys+ (\/) :: [Int] -> [Int] -> [Int] -- testing 360 combinations of argument values -- pruning with 0/0 rules -- looking through 3 candidates of size 1 -- looking through 7 candidates of size 2--- looking through 9 candidates of size 3--- looking through 44 candidates of size 4--- looking through 116 candidates of size 5--- looking through 80 candidates of size 6--- tested 235 candidates+-- looking through 11 candidates of size 3+-- looking through 37 candidates of size 4+-- looking through 98 candidates of size 5+-- looking through 94 candidates of size 6+-- tested 196 candidates [] \/ xs  =  xs (x:xs) \/ ys  =  x:ys \/ xs @@ -68,31 +85,31 @@ -- looking through 3 candidates of size 3 -- looking through 3 candidates of size 4 -- looking through 4 candidates of size 5--- looking through 16 candidates of size 6--- looking through 28 candidates of size 7--- looking through 48 candidates of size 8--- looking through 100 candidates of size 9--- looking through 226 candidates of size 10--- looking through 482 candidates of size 11--- tested 616 candidates+-- looking through 12 candidates of size 6+-- looking through 20 candidates of size 7+-- looking through 30 candidates of size 8+-- looking through 56 candidates of size 9+-- looking through 114 candidates of size 10+-- looking through 216 candidates of size 11+-- tested 333 candidates ordered []  =  True-ordered (x:xs)  =  (null xs || x <= head xs) && ordered xs+ordered (x:xs)  =  ordered xs && (null xs || x <= head xs)  merge :: [Int] -> [Int] -> [Int] -- testing 360 combinations of argument values -- pruning with 1/2 rules -- looking through 2 candidates of size 1 -- looking through 1 candidates of size 2--- looking through 2 candidates of size 3+-- looking through 3 candidates of size 3 -- looking through 12 candidates of size 4--- looking through 16 candidates of size 5--- looking through 20 candidates of size 6--- looking through 84 candidates of size 7--- looking through 40 candidates of size 8--- looking through 368 candidates of size 9--- looking through 216 candidates of size 10--- looking through 1838 candidates of size 11--- looking through 1016 candidates of size 12--- tested 3615 candidates+-- looking through 22 candidates of size 5+-- looking through 32 candidates of size 6+-- looking through 75 candidates of size 7+-- looking through 108 candidates of size 8+-- looking through 256 candidates of size 9+-- looking through 520 candidates of size 10+-- looking through 1329 candidates of size 11+-- looking through 2632 candidates of size 12+-- tested 4992 candidates cannot conjure 
eg/pow.out view
@@ -2,14 +2,14 @@ -- testing 5 combinations of argument values -- pruning with 14/30 rules -- looking through 4 candidates of size 1--- looking through 17 candidates of size 2--- looking through 92 candidates of size 3--- looking through 307 candidates of size 4--- looking through 1632 candidates of size 5--- looking through 3406 candidates of size 6--- looking through 21046 candidates of size 7--- looking through 34728 candidates of size 8--- tested 27145 candidates+-- looking through 15 candidates of size 2+-- looking through 45 candidates of size 3+-- looking through 168 candidates of size 4+-- looking through 491 candidates of size 5+-- looking through 1729 candidates of size 6+-- looking through 5420 candidates of size 7+-- looking through 17952 candidates of size 8+-- tested 8593 candidates pow x 0  =  1 pow x y  =  x * pow x (y - 1) @@ -17,11 +17,11 @@ -- testing 5 combinations of argument values -- pruning with 15/19 rules -- looking through 4 candidates of size 1--- looking through 19 candidates of size 2--- looking through 105 candidates of size 3--- looking through 360 candidates of size 4--- looking through 1649 candidates of size 5--- looking through 4534 candidates of size 6--- tested 6671 candidates+-- looking through 17 candidates of size 2+-- looking through 59 candidates of size 3+-- looking through 190 candidates of size 4+-- looking through 594 candidates of size 5+-- looking through 1784 candidates of size 6+-- tested 2648 candidates cannot conjure 
eg/replicate.out view
@@ -4,12 +4,12 @@ -- looking through 1 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--- looking through 3 candidates of size 5--- looking through 5 candidates of size 6--- looking through 5 candidates of size 7--- looking through 8 candidates of size 8--- tested 17 candidates+-- looking through 2 candidates of size 4+-- looking through 4 candidates of size 5+-- looking through 6 candidates of size 6+-- looking through 8 candidates of size 7+-- looking through 19 candidates of size 8+-- tested 33 candidates replicate 0 c  =  "" replicate x c  =  c:replicate (x - 1) c @@ -41,12 +41,12 @@ -- looking through 2 candidates of size 1 -- looking through 3 candidates of size 2 -- looking through 7 candidates of size 3--- looking through 24 candidates of size 4--- looking through 64 candidates of size 5--- looking through 161 candidates of size 6--- looking through 469 candidates of size 7--- looking through 1303 candidates of size 8--- tested 791 candidates+-- looking through 23 candidates of size 4+-- looking through 62 candidates of size 5+-- looking through 155 candidates of size 6+-- looking through 446 candidates of size 7+-- looking through 1231 candidates of size 8+-- tested 751 candidates replicates "" x  =  "" replicates (c:cs) x  =  replicate x c ++ replicates cs x 
eg/setelem.out view
@@ -4,14 +4,14 @@ -- looking through 2 candidates of size 1 -- looking through 3 candidates of size 2 -- looking through 5 candidates of size 3--- looking through 28 candidates of size 4--- looking through 73 candidates of size 5--- looking through 124 candidates of size 6--- looking through 305 candidates of size 7--- looking through 999 candidates of size 8--- tested 826 candidates+-- looking through 20 candidates of size 4+-- looking through 48 candidates of size 5+-- looking through 75 candidates of size 6+-- looking through 149 candidates of size 7+-- looking through 368 candidates of size 8+-- tested 396 candidates elem x []  =  False-elem x (y:xs)  =  x == y || elem x xs+elem x (y:xs)  =  elem x xs || x == y  set :: [Int] -> Bool -- testing 360 combinations of argument values@@ -21,10 +21,10 @@ -- looking through 5 candidates of size 3 -- looking through 11 candidates of size 4 -- looking through 20 candidates of size 5--- looking through 47 candidates of size 6--- looking through 136 candidates of size 7--- looking through 348 candidates of size 8--- tested 256 candidates+-- looking through 41 candidates of size 6+-- looking through 100 candidates of size 7+-- looking through 234 candidates of size 8+-- tested 200 candidates set []  =  True-set (x:xs)  =  not (elem x xs) && set xs+set (x:xs)  =  set xs && not (elem x xs) 
eg/sort.out view
@@ -46,16 +46,16 @@ -- pruning with 4/4 rules -- looking through 3 candidates of size 1 -- looking through 7 candidates of size 2--- looking through 9 candidates of size 3--- looking through 44 candidates of size 4--- looking through 116 candidates of size 5--- looking through 80 candidates of size 6--- looking through 715 candidates of size 7--- looking through 164 candidates of size 8--- looking through 3360 candidates of size 9--- looking through 1448 candidates of size 10--- looking through 12901 candidates of size 11--- looking through 15208 candidates of size 12--- tested 34055 candidates+-- looking through 11 candidates of size 3+-- looking through 37 candidates of size 4+-- looking through 98 candidates of size 5+-- looking through 94 candidates of size 6+-- looking through 383 candidates of size 7+-- looking through 375 candidates of size 8+-- looking through 1263 candidates of size 9+-- looking through 2252 candidates of size 10+-- looking through 4090 candidates of size 11+-- looking through 13481 candidates of size 12+-- tested 22094 candidates cannot conjure 
eg/spec.out view
@@ -1,17 +1,17 @@ square :: Int -> Int -- pruning with 14/25 rules -- looking through 3 candidates of size 1--- looking through 4 candidates of size 2--- looking through 9 candidates of size 3--- tested 12 candidates+-- looking through 3 candidates of size 2+-- looking through 6 candidates of size 3+-- tested 9 candidates square x  =  x * x  square :: Int -> Int -- pruning with 14/25 rules -- looking through 3 candidates of size 1--- looking through 4 candidates of size 2--- looking through 9 candidates of size 3--- tested 12 candidates+-- looking through 3 candidates of size 2+-- looking through 6 candidates of size 3+-- tested 9 candidates square x  =  x * x  sum :: [Int] -> Int@@ -20,7 +20,7 @@ -- looking through 2 candidates of size 2 -- looking through 3 candidates of size 3 -- looking through 4 candidates of size 4--- looking through 7 candidates of size 5+-- looking through 5 candidates of size 5 -- tested 11 candidates sum []  =  0 sum (x:xs)  =  x + sum xs@@ -29,11 +29,11 @@ -- pruning with 3/3 rules -- looking through 2 candidates of size 1 -- looking through 3 candidates of size 2--- looking through 10 candidates of size 3--- looking through 27 candidates of size 4--- looking through 78 candidates of size 5--- looking through 171 candidates of size 6--- tested 194 candidates+-- looking through 11 candidates of size 3+-- looking through 32 candidates of size 4+-- looking through 100 candidates of size 5+-- looking through 244 candidates of size 6+-- tested 234 candidates [] ++ xs  =  xs (x:xs) ++ ys  =  x:(xs ++ ys) 
eg/subset.out view
@@ -3,15 +3,15 @@ -- pruning with 29/39 rules -- looking through 2 candidates of size 1 -- looking through 4 candidates of size 2--- looking through 10 candidates of size 3--- looking through 40 candidates of size 4--- looking through 160 candidates of size 5--- looking through 0 candidates of size 6--- looking through 444 candidates of size 7--- looking through 784 candidates of size 8--- tested 1310 candidates+-- looking through 8 candidates of size 3+-- looking through 34 candidates of size 4+-- looking through 88 candidates of size 5+-- looking through 40 candidates of size 6+-- looking through 138 candidates of size 7+-- looking through 644 candidates of size 8+-- tested 790 candidates subset [] xs  =  True-subset (x:xs) ys  =  elem x ys && subset xs ys+subset (x:xs) ys  =  subset xs ys && elem x ys  subset :: [Int] -> [Int] -> Bool -- testing 44 combinations of argument values
eg/tapps.out view
@@ -3,9 +3,9 @@ -- 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 20 candidates of size 4--- tested 18 candidates+-- looking through 5 candidates of size 3+-- looking through 12 candidates of size 4+-- tested 16 candidates third xs  =  head (tail (tail xs))  product :: [Int] -> Int@@ -13,10 +13,10 @@ -- 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 20 candidates of size 4--- looking through 34 candidates of size 5--- tested 44 candidates+-- looking through 5 candidates of size 3+-- looking through 12 candidates of size 4+-- looking through 18 candidates of size 5+-- tested 30 candidates product []  =  1 product (x:xs)  =  x * product xs @@ -25,8 +25,8 @@ -- 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 23 candidates of size 4--- tested 20 candidates+-- looking through 5 candidates of size 3+-- looking through 15 candidates of size 4+-- tested 18 candidates product xs  =  foldr (*) 1 xs 
eg/tree.hs view
@@ -3,27 +3,14 @@ -- Copyright (C) 2021 Rudy Matela -- Distributed under the 3-Clause BSD licence (see the file LICENSE). {-# LANGUAGE CPP, TemplateHaskell #-}-#if __GLASGOW_HASKELL__ == 708-{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}-import Data.Typeable (Typeable)-#endif  import Conjure import Test.LeanCheck import Data.Express hiding (height,size) --- TODO: remove the following import--- and fix build on GHC 7.10 and 7.8--- the generation of -: and ->>>: somehow fails.-import Test.LeanCheck.Utils- data Tree  =  Leaf            |  Node Tree Int Tree   deriving (Eq, Ord, Show, Read)--#if __GLASGOW_HASKELL__ == 708-deriving instance Typeable Tree-#endif  deriveExpress ''Tree 
eg/tree.out view
@@ -10,7 +10,9 @@ -- looking through 16 candidates of size 7 -- tested 9 candidates leftmost Leaf  =  undefined-leftmost (Node t1 x t2)  =  if nil t1 then x else leftmost t1+leftmost (Node t1 x t2)  =  if nil t1+                            then x+                            else leftmost t1  rightmost :: Tree -> Int -- testing 360 combinations of argument values@@ -24,20 +26,22 @@ -- looking through 16 candidates of size 7 -- tested 18 candidates rightmost Leaf  =  undefined-rightmost (Node t1 x t2)  =  if nil t2 then x else rightmost t2+rightmost (Node t1 x t2)  =  if nil t2+                             then x+                             else rightmost t2  size :: Tree -> Int -- testing 360 combinations of argument values -- pruning with 4/8 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 9 candidates of size 5--- looking through 12 candidates of size 6--- looking through 25 candidates of size 7--- looking through 40 candidates of size 8--- tested 71 candidates+-- looking through 2 candidates of size 3+-- looking through 2 candidates of size 4+-- looking through 4 candidates of size 5+-- looking through 8 candidates of size 6+-- looking through 12 candidates of size 7+-- looking through 24 candidates of size 8+-- tested 42 candidates size Leaf  =  0 size (Node t1 x t2)  =  size t1 + (size t2 + 1) @@ -46,15 +50,15 @@ -- pruning with 49/65 rules -- looking through 3 candidates of size 1 -- looking through 3 candidates of size 2--- looking through 4 candidates of size 3--- looking through 13 candidates of size 4--- looking through 30 candidates of size 5--- looking through 88 candidates of size 6--- looking through 320 candidates of size 7--- looking through 1093 candidates of size 8--- tested 475 candidates+-- looking through 2 candidates of size 3+-- looking through 6 candidates of size 4+-- looking through 14 candidates of size 5+-- looking through 34 candidates of size 6+-- looking through 98 candidates of size 7+-- looking through 283 candidates of size 8+-- tested 202 candidates height Leaf  =  -1-height (Node t1 x t2)  =  max (height t1) (height t2) + 1+height (Node t1 x t2)  =  1 + max (height t1) (height t2)  mem :: Int -> Tree -> Bool -- testing 360 combinations of argument values@@ -62,18 +66,18 @@ -- looking through 1 candidates of size 1 -- looking through 0 candidates of size 2 -- looking through 0 candidates of size 3--- looking through 6 candidates of size 4+-- looking through 5 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 34 candidates of size 8+-- looking through 20 candidates of size 8 -- looking through 0 candidates of size 9 -- looking through 0 candidates of size 10 -- looking through 0 candidates of size 11--- looking through 184 candidates of size 12--- tested 107 candidates+-- looking through 96 candidates of size 12+-- tested 92 candidates mem x Leaf  =  False-mem x (Node t1 y t2)  =  mem x t1 || (x == y || mem x t2)+mem x (Node t1 y t2)  =  mem x t1 || (mem x t2 || x == y)  ordered :: Tree -> Bool -- testing 360 combinations of argument values@@ -85,12 +89,12 @@ -- looking through 10 candidates of size 5 -- looking through 20 candidates of size 6 -- looking through 0 candidates of size 7--- looking through 64 candidates of size 8--- looking through 144 candidates of size 9--- looking through 112 candidates of size 10--- looking through 964 candidates of size 11--- looking through 1480 candidates of size 12--- tested 2799 candidates+-- looking through 32 candidates of size 8+-- looking through 80 candidates of size 9+-- looking through 56 candidates of size 10+-- looking through 450 candidates of size 11+-- looking through 708 candidates of size 12+-- tested 1361 candidates cannot conjure  ordered :: Tree -> Bool
mk/depend.mk view
@@ -159,6 +159,19 @@   src/Conjure/Conjurable.hs \   src/Conjure/Conjurable/Derive.hs \   bench/terpret.hs+bench/weird: \+  bench/weird.hs \+  mk/toplibs+bench/weird.o: \+  src/Conjure/Utils.hs \+  src/Conjure/Prim.hs \+  src/Conjure.hs \+  src/Conjure/Expr.hs \+  src/Conjure/Engine.hs \+  src/Conjure/Defn.hs \+  src/Conjure/Conjurable.hs \+  src/Conjure/Conjurable/Derive.hs \+  bench/weird.hs eg/arith: \   eg/arith.hs \   mk/toplibs@@ -276,6 +289,32 @@   src/Conjure/Conjurable.hs \   src/Conjure/Conjurable/Derive.hs \   eg/gcd.hs+eg/higher: \+  eg/higher.hs \+  mk/toplibs+eg/higher.o: \+  src/Conjure/Utils.hs \+  src/Conjure/Prim.hs \+  src/Conjure.hs \+  src/Conjure/Expr.hs \+  src/Conjure/Engine.hs \+  src/Conjure/Defn.hs \+  src/Conjure/Conjurable.hs \+  src/Conjure/Conjurable/Derive.hs \+  eg/higher.hs+eg/id: \+  eg/id.hs \+  mk/toplibs+eg/id.o: \+  src/Conjure/Utils.hs \+  src/Conjure/Prim.hs \+  src/Conjure.hs \+  src/Conjure/Expr.hs \+  src/Conjure/Engine.hs \+  src/Conjure/Defn.hs \+  src/Conjure/Conjurable.hs \+  src/Conjure/Conjurable/Derive.hs \+  eg/id.hs eg/ints: \   eg/ints.hs \   mk/toplibs
src/Conjure/Conjurable.hs view
@@ -26,7 +26,6 @@   , conjureAreEqual   , conjureMkEquation   , A, B, C, D, E, F-  , conjureIsDeconstructor   , conjureIsDeconstruction   , candidateDeconstructionsFrom   , candidateDeconstructionsFromHoled@@ -34,11 +33,14 @@   , conjureReification   , conjureReification1   , conjureDynamicEq+  , conjureIsNumeric   , cevaluate   , ceval   , cevl   , Name (..)   , Express (..)+  , conjureArgumentPats+  , conjureMostGeneralCanonicalVariation   ) where @@ -259,9 +261,11 @@ -- >   conjureExpress  =  reifyExpress -- >   ... reifyExpress :: (Express a, Show a) => a -> Expr -> Expr-reifyExpress a e  =  case value "expr" (expr -:> a) $$ e of-  Nothing -> e         -- TODO: consider throwing an error-  Just e' -> eval e e' -- TODO: consider throwing an error+reifyExpress a e  =  case exprE $$ e of+  Nothing -> e -- identity needed for types such as functions+  Just e' -> eval (error $ "reifyExpress: cannot eval " ++ show e') e'+  where+  exprE  =  value "expr" (expr -:> a)  mkExprTiers :: (Listable a, Show a, Typeable a) => a -> [[Expr]] mkExprTiers a  =  mapT val (tiers -: [[a]])@@ -307,6 +311,13 @@                       ((e':_):_) | typ e' == typ e -> etiers                       _                            -> tf etc +conjureIsNumeric :: Conjurable f => f -> Expr -> Bool+conjureIsNumeric f e  =  case concat $ conjureTiersFor f e of+                         -- We assume tiers of numeric values start with 0+                         -- not so unfair...+                         (Value "0" _):_ -> True+                         _ -> False+ -- | Compute variable names for the given 'Expr' type. conjureNamesFor :: Conjurable f => f -> Expr -> [String] conjureNamesFor f e  =  head@@ -317,45 +328,27 @@ conjureMostGeneralCanonicalVariation f  =  canonicalizeWith (conjureNamesFor f)                                         .  fastMostGeneralVariation --- | Checks if an unary function encoded as an 'Expr' is a deconstructor.------ (cf. 'conjureIsDeconstruction')-conjureIsDeconstructor :: Conjurable f => f -> Int -> Expr -> Bool-conjureIsDeconstructor f maxTests e  =  case as of-  [] -> False-  (h:_) -> isDec h-  where-  as  =  [h | h <- hs, isWellTyped (e:$h), typ (e:$h) == typ h]-  hs  =  conjureArgumentHoles f-  isDec h  =  count is gs >= length gs `div` 2-    where-    gs  =  take maxTests $ grounds (conjureTiersFor f) h-    sz  =  head [sz | (_, _, _, _, _, sz) <- conjureReification f-                    , isWellTyped (sz :$ h)]-    esz e  =  eval (0::Int) (sz :$ e)-    is e'  =  errorToFalse $ esz (e :$ e') < esz e'- -- | Checks if an expression is a deconstruction. -- -- There should be a single 'hole' in the expression. ----- 1. The result does not increase the size for at least half the time.--- 2. The result decreases in size for at least a third of the time.+-- It should decrease the size of all arguments that have+-- a size greater than 0. -- -- (cf. 'conjureIsDeconstructor') 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+                                       && all is gs   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)+  x << 0  =  True+  x << y  =  x < y+  is e  =  errorToFalse $ esz e << esz (holeValue e)   holeValue e  =  fromMaybe err                .  lookup h                .  fromMaybe err@@ -429,13 +422,20 @@   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  abs+  conjureSize      =  size            where  size x | x < 0      =  0+                                                    | otherwise  =  x +-- allows easy modification of the global size function for integer values+-- duplicated above in the Int instance for performance reasons+integralSize :: Integral a => a -> Int+integralSize  =  fromIntegral . size  where  size x | x < 0      =  0+                                                    | otherwise  =  x+ instance Conjurable Integer where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Char where   conjureExpress   =  reifyExpress@@ -525,7 +525,7 @@                       , value "Just" (Just ->: mx) :$ hole x                       ]     where-    x  =  Just undefined -: mx+    Just x  =  undefined -: mx   conjureEquality mx  =  from <$> conjureEquality x     where     x  =  fromJust mx@@ -649,23 +649,80 @@   where   (nf:nas)  =  words nm ++ repeat "" + -- | Computes tiers of sets of patterns for the given function. -- -- > > conjurePats [zero] "f" (undefined :: Int -> Int) -- > [[[f x :: Int]],[[f 0 :: Int,f x :: Int]]] conjurePats :: Conjurable f => [Expr] -> String -> f -> [[ [Expr] ]]-conjurePats es nm f  =  mapT (map mkApp . prods) $ cs+conjurePats  es nm f  =  mapT (map mkApp)+                      $  combinePatternOptions+                      $  conjureArgumentPats es f   where   mkApp  =  foldApp . (ef:)          .  unfold          .  conjureMostGeneralCanonicalVariation f          .  fold   ef  =  var (head $ words nm) f  -- TODO: take the tail into account-  cs  =  products $ zipWith mk (conjureArgumentHoles f) (conjureArgumentCases f)++  -- What a horrible enumeration hack below...+  -- Good luck to anyone who plans to refactor this.++  -- after application of mkApp, we end up w/  [[ [Pat   ] ]]+  combinePatternOptions :: [ [[ [Expr] ]] ] -> [[ [[Expr]] ]]+  combinePatternOptions []            =  [[[[]]]]+  combinePatternOptions (esss:essss)  =  concatPrefixesWithT esss+                                      $  combinePatternOptions essss++  -- The three functions below are all transformations over the same type+  -- [[ [[Expr]] ]]+  -- That's tiers of complete LHS of function definitions.+  -- We proceed right to left building all possible patterns.++  -- concatenates all of the possibilities of prefixing+  -- from tiers of possibilities+  concatPrefixesWithT :: [[[Expr]]] -> [[ [[Expr]] ]] -> [[ [[Expr]] ]]+  concatPrefixesWithT esss r  =  concatMapT (`concatPrefixesWith` r) esss++  -- concatenates the possibilities of prefixing from a list of prefixes+  concatPrefixesWith :: [Expr] -> [[ [[Expr]] ]] -> [[ [[Expr]] ]]+  concatPrefixesWith es r  =  mapT concat $ products [prefixWith e r | e <- es]++  -- prefixes with the given expression+  prefixWith :: Expr -> [[ [[Expr]] ]] -> [[ [[Expr]] ]]+  prefixWith e  =  mapT (map (e:))++  -- this was useful in figuring out the implementations+  -- of the local functions above+  --+  -- > prefixWith2 :: Expr -> Expr -> [[Bs]] -> [[Bs]]+  -- > prefixWith2 e1 e2 r  =  productWith (++) (mapT (map (e1:)) r)+  -- >                                          (mapT (map (e2:)) r)+  --+  -- A prefixWith3 would follow similarly.++  -- To debug the above function use:+  -- > import Test.LeanCheck.Tiers (printTiers)+  -- > printTiers 100 $ newConjurePats [zero] "f" (undefined :: Int -> Int -> Int)+++-- | Returns a list of tiers of possible patterns for each argument.+--+-- The outer list has the same number of elements as the number of arguments+-- of the given function.+--+-- This function is internal and only used in the implementation of 'conjurePats'.+-- It may be removed from the API without further notice.+-- It has been temporarily promoted to public to help refactor 'conjurePats'.+conjureArgumentPats :: Conjurable f => [Expr] -> f -> [ [[ [Expr] ]] ]+conjureArgumentPats es f = zipWith mk (conjureArgumentHoles f) (conjureArgumentCases f)+  where+  -- deal with types that have no cases such as ints.   mk h []  =  mapT (++ [h]) $ setsOf [[e] | e <- es, typ e == typ h]+  -- deal with types that have cases, such as lists, maybes, etc.   mk h cs  =  [[[h]], [cs]]-  tiersFor  =  conjureTiersFor f + prods :: [[a]] -> [[a]] prods  =  foldr (productWith (:)) [[]]   where@@ -695,55 +752,55 @@   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Int16 where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Int32 where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Int64 where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Word where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Word8 where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Word16 where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Word32 where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable Word64 where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance (Integral a, Conjurable a, Listable a, Show a, Eq a, Express a) => Conjurable (Ratio a) where   conjureExpress   =  reifyExpress@@ -769,37 +826,37 @@   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable B where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable C where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable D where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable E where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize  instance Conjurable F where   conjureExpress   =  reifyExpress   conjureEquality  =  reifyEquality   conjureTiers     =  reifyTiers-  conjureSize      =  fromIntegral . abs+  conjureSize      =  integralSize   -- Conjurable tuples --@@ -926,7 +983,7 @@                           .  conjureType v                           .  conjureType u                           .  conjureType t-                         where (x,y,z,w,v,u,t) = xyzwvut+                          where (x,y,z,w,v,u,t) = xyzwvut   conjureEquality xyzwvut  =  from                           <$> conjureEquality x                           <*> conjureEquality y@@ -954,7 +1011,308 @@                                                         && u1 .....==. u2                                                         && t1 ......== t2 --- TODO: go up to 12-tuples+instance ( Conjurable a, Listable a, Show a, Express a+         , Conjurable b, Listable b, Show b, Express b+         , Conjurable c, Listable c, Show c, Express c+         , Conjurable d, Listable d, Show d, Express d+         , Conjurable e, Listable e, Show e, Express e+         , Conjurable f, Listable f, Show f, Express f+         , Conjurable g, Listable g, Show g, Express g+         , Conjurable h, Listable h, Show h, Express h+         ) => Conjurable (a,b,c,d,e,f,g,h) where+  conjureExpress   =  reifyExpress+  conjureTiers     =  reifyTiers+  conjureSubTypes xyzwvuts  =  conjureType x+                            .  conjureType y+                            .  conjureType z+                            .  conjureType w+                            .  conjureType v+                            .  conjureType u+                            .  conjureType t+                            .  conjureType s+                            where (x,y,z,w,v,u,t,s) = xyzwvuts+  conjureEquality xyzwvuts  =  from+                           <$> conjureEquality x+                           <*> conjureEquality y+                           <*> conjureEquality z+                           <*> conjureEquality w+                           <*> conjureEquality v+                           <*> conjureEquality u+                           <*> conjureEquality t+                           <*> conjureEquality s+    where+    (x,y,z,w,v,u,t,s)  =  xyzwvuts+    from e1 e2 e3 e4 e5 e6 e7 e8  =  value "==" (==)+      where+      (==.......)  =  evl e1 ==: x+      (.==......)  =  evl e2 ==: y+      (..==.....)  =  evl e3 ==: z+      (...==....)  =  evl e4 ==: w+      (....==...)  =  evl e5 ==: v+      (.....==..)  =  evl e6 ==: u+      (......==.)  =  evl e7 ==: t+      (.......==)  =  evl e8 ==: s+      (x1,y1,z1,w1,v1,u1,t1,s1) == (x2,y2,z2,w2,v2,u2,t2,s2)  =  x1 ==....... x2+                                                              && y1 .==...... y2+                                                              && z1 ..==..... z2+                                                              && w1 ...==.... w2+                                                              && v1 ....==... v2+                                                              && u1 .....==.. u2+                                                              && t1 ......==. t2+                                                              && s1 .......== s2++instance ( Conjurable a, Listable a, Show a, Express a+         , Conjurable b, Listable b, Show b, Express b+         , Conjurable c, Listable c, Show c, Express c+         , Conjurable d, Listable d, Show d, Express d+         , Conjurable e, Listable e, Show e, Express e+         , Conjurable f, Listable f, Show f, Express f+         , Conjurable g, Listable g, Show g, Express g+         , Conjurable h, Listable h, Show h, Express h+         , Conjurable i, Listable i, Show i, Express i+         ) => Conjurable (a,b,c,d,e,f,g,h,i) where+  conjureExpress   =  reifyExpress+  conjureTiers     =  reifyTiers+  conjureSubTypes xyzwvutsr  =  conjureType x+                             .  conjureType y+                             .  conjureType z+                             .  conjureType w+                             .  conjureType v+                             .  conjureType u+                             .  conjureType t+                             .  conjureType s+                             .  conjureType r+                             where (x,y,z,w,v,u,t,s,r) = xyzwvutsr+  conjureEquality xyzwvutsr  =  from+                            <$> conjureEquality x+                            <*> conjureEquality y+                            <*> conjureEquality z+                            <*> conjureEquality w+                            <*> conjureEquality v+                            <*> conjureEquality u+                            <*> conjureEquality t+                            <*> conjureEquality s+                            <*> conjureEquality r+    where+    (x,y,z,w,v,u,t,s,r)  =  xyzwvutsr+    from e1 e2 e3 e4 e5 e6 e7 e8 e9  =  value "==" (==)+      where+      (==........)  =  evl e1 ==: x+      (.==.......)  =  evl e2 ==: y+      (..==......)  =  evl e3 ==: z+      (...==.....)  =  evl e4 ==: w+      (....==....)  =  evl e5 ==: v+      (.....==...)  =  evl e6 ==: u+      (......==..)  =  evl e7 ==: t+      (.......==.)  =  evl e8 ==: s+      (........==)  =  evl e9 ==: r+      (x1,y1,z1,w1,v1,u1,t1,s1,r1) == (x2,y2,z2,w2,v2,u2,t2,s2,r2)  =  x1 ==........ x2+                                                                    && y1 .==....... y2+                                                                    && z1 ..==...... z2+                                                                    && w1 ...==..... w2+                                                                    && v1 ....==.... v2+                                                                    && u1 .....==... u2+                                                                    && t1 ......==.. t2+                                                                    && s1 .......==. s2+                                                                    && r1 ........== r2++instance ( Conjurable a, Listable a, Show a, Express a+         , Conjurable b, Listable b, Show b, Express b+         , Conjurable c, Listable c, Show c, Express c+         , Conjurable d, Listable d, Show d, Express d+         , Conjurable e, Listable e, Show e, Express e+         , Conjurable f, Listable f, Show f, Express f+         , Conjurable g, Listable g, Show g, Express g+         , Conjurable h, Listable h, Show h, Express h+         , Conjurable i, Listable i, Show i, Express i+         , Conjurable j, Listable j, Show j, Express j+         ) => Conjurable (a,b,c,d,e,f,g,h,i,j) where+  conjureExpress   =  reifyExpress+  conjureTiers     =  reifyTiers+  conjureSubTypes xyzwvutsrq  =  conjureType x+                              .  conjureType y+                              .  conjureType z+                              .  conjureType w+                              .  conjureType v+                              .  conjureType u+                              .  conjureType t+                              .  conjureType s+                              .  conjureType r+                              .  conjureType q+                              where (x,y,z,w,v,u,t,s,r,q) = xyzwvutsrq+  conjureEquality xyzwvutsrq  =  from+                             <$> conjureEquality x+                             <*> conjureEquality y+                             <*> conjureEquality z+                             <*> conjureEquality w+                             <*> conjureEquality v+                             <*> conjureEquality u+                             <*> conjureEquality t+                             <*> conjureEquality s+                             <*> conjureEquality r+                             <*> conjureEquality q+    where+    (x,y,z,w,v,u,t,s,r,q)  =  xyzwvutsrq+    from e1 e2 e3 e4 e5 e6 e7 e8 e9 e10  =  value "==" (==)+      where+      (==.........)  =  evl e1  ==: x+      (.==........)  =  evl e2  ==: y+      (..==.......)  =  evl e3  ==: z+      (...==......)  =  evl e4  ==: w+      (....==.....)  =  evl e5  ==: v+      (.....==....)  =  evl e6  ==: u+      (......==...)  =  evl e7  ==: t+      (.......==..)  =  evl e8  ==: s+      (........==.)  =  evl e9  ==: r+      (.........==)  =  evl e10 ==: q+      (x1,y1,z1,w1,v1,u1,t1,s1,r1,q1) == (x2,y2,z2,w2,v2,u2,t2,s2,r2,q2)  =  x1 ==......... x2+                                                                          && y1 .==........ y2+                                                                          && z1 ..==....... z2+                                                                          && w1 ...==...... w2+                                                                          && v1 ....==..... v2+                                                                          && u1 .....==.... u2+                                                                          && t1 ......==... t2+                                                                          && s1 .......==.. s2+                                                                          && r1 ........==. r2+                                                                          && q1 .........== q2+++instance ( Conjurable a, Listable a, Show a, Express a+         , Conjurable b, Listable b, Show b, Express b+         , Conjurable c, Listable c, Show c, Express c+         , Conjurable d, Listable d, Show d, Express d+         , Conjurable e, Listable e, Show e, Express e+         , Conjurable f, Listable f, Show f, Express f+         , Conjurable g, Listable g, Show g, Express g+         , Conjurable h, Listable h, Show h, Express h+         , Conjurable i, Listable i, Show i, Express i+         , Conjurable j, Listable j, Show j, Express j+         , Conjurable k, Listable k, Show k, Express k+         ) => Conjurable (a,b,c,d,e,f,g,h,i,j,k) where+  conjureExpress   =  reifyExpress+  conjureTiers     =  reifyTiers+  conjureSubTypes xyzwvutsrqp  =  conjureType x+                               .  conjureType y+                               .  conjureType z+                               .  conjureType w+                               .  conjureType v+                               .  conjureType u+                               .  conjureType t+                               .  conjureType s+                               .  conjureType r+                               .  conjureType q+                               .  conjureType p+                               where (x,y,z,w,v,u,t,s,r,q,p) = xyzwvutsrqp+  conjureEquality xyzwvutsrqp  =  from+                              <$> conjureEquality x+                              <*> conjureEquality y+                              <*> conjureEquality z+                              <*> conjureEquality w+                              <*> conjureEquality v+                              <*> conjureEquality u+                              <*> conjureEquality t+                              <*> conjureEquality s+                              <*> conjureEquality r+                              <*> conjureEquality q+                              <*> conjureEquality p+    where+    (x,y,z,w,v,u,t,s,r,q,p)  =  xyzwvutsrqp+    from e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11  =  value "==" (==)+      where+      (==..........)  =  evl e1  ==: x+      (.==.........)  =  evl e2  ==: y+      (..==........)  =  evl e3  ==: z+      (...==.......)  =  evl e4  ==: w+      (....==......)  =  evl e5  ==: v+      (.....==.....)  =  evl e6  ==: u+      (......==....)  =  evl e7  ==: t+      (.......==...)  =  evl e8  ==: s+      (........==..)  =  evl e9  ==: r+      (.........==.)  =  evl e10 ==: q+      (..........==)  =  evl e11 ==: p+      (x1,y1,z1,w1,v1,u1,t1,s1,r1,q1,p1) == (x2,y2,z2,w2,v2,u2,t2,s2,r2,q2,p2)  =  x1 ==.......... x2+                                                                                && y1 .==......... y2+                                                                                && z1 ..==........ z2+                                                                                && w1 ...==....... w2+                                                                                && v1 ....==...... v2+                                                                                && u1 .....==..... u2+                                                                                && t1 ......==.... t2+                                                                                && s1 .......==... s2+                                                                                && r1 ........==.. r2+                                                                                && q1 .........==. q2+                                                                                && p1 ..........== p2+++instance ( Conjurable a, Listable a, Show a, Express a+         , Conjurable b, Listable b, Show b, Express b+         , Conjurable c, Listable c, Show c, Express c+         , Conjurable d, Listable d, Show d, Express d+         , Conjurable e, Listable e, Show e, Express e+         , Conjurable f, Listable f, Show f, Express f+         , Conjurable g, Listable g, Show g, Express g+         , Conjurable h, Listable h, Show h, Express h+         , Conjurable i, Listable i, Show i, Express i+         , Conjurable j, Listable j, Show j, Express j+         , Conjurable k, Listable k, Show k, Express k+         , Conjurable l, Listable l, Show l, Express l+         ) => Conjurable (a,b,c,d,e,f,g,h,i,j,k,l) where+  conjureExpress   =  reifyExpress+  conjureTiers     =  reifyTiers+  conjureSubTypes xyzwvutsrqpo  =  conjureType x+                                .  conjureType y+                                .  conjureType z+                                .  conjureType w+                                .  conjureType v+                                .  conjureType u+                                .  conjureType t+                                .  conjureType s+                                .  conjureType r+                                .  conjureType q+                                .  conjureType p+                                .  conjureType o+                                where (x,y,z,w,v,u,t,s,r,q,p,o) = xyzwvutsrqpo+  conjureEquality xyzwvutsrqpo  =  from+                               <$> conjureEquality x+                               <*> conjureEquality y+                               <*> conjureEquality z+                               <*> conjureEquality w+                               <*> conjureEquality v+                               <*> conjureEquality u+                               <*> conjureEquality t+                               <*> conjureEquality s+                               <*> conjureEquality r+                               <*> conjureEquality q+                               <*> conjureEquality p+                               <*> conjureEquality o+    where+    (x,y,z,w,v,u,t,s,r,q,p,o)  =  xyzwvutsrqpo+    from e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11 e12  =  value "==" (==)+      where+      (==...........)  =  evl e1  ==: x+      (.==..........)  =  evl e2  ==: y+      (..==.........)  =  evl e3  ==: z+      (...==........)  =  evl e4  ==: w+      (....==.......)  =  evl e5  ==: v+      (.....==......)  =  evl e6  ==: u+      (......==.....)  =  evl e7  ==: t+      (.......==....)  =  evl e8  ==: s+      (........==...)  =  evl e9  ==: r+      (.........==..)  =  evl e10 ==: q+      (..........==.)  =  evl e11 ==: p+      (...........==)  =  evl e12 ==: o+      (x1,y1,z1,w1,v1,u1,t1,s1,r1,q1,p1,o1) == (x2,y2,z2,w2,v2,u2,t2,s2,r2,q2,p2,o2)  =  x1 ==........... x2+                                                                                      && y1 .==.......... y2+                                                                                      && z1 ..==......... z2+                                                                                      && w1 ...==........ w2+                                                                                      && v1 ....==....... v2+                                                                                      && u1 .....==...... u2+                                                                                      && t1 ......==..... t2+                                                                                      && s1 .......==.... s2+                                                                                      && r1 ........==... r2+                                                                                      && q1 .........==.. q2+                                                                                      && p1 ..........==. p2+                                                                                      && o1 ...........== o2+  instance Name A instance Name B
src/Conjure/Conjurable/Derive.hs view
@@ -127,10 +127,6 @@                    conjureTiers     =  reifyTiers |]   -- withTheReturnTypeOfs |++| (cxt |=>| inst)   cxt |=>| inst `addFun` deriveSize t `mergeI` deriveSubTypes t `mergeI` deriveCases t--- TODO: derive conjureCases, e.g.:--- conjureCases mx  =  [ value "Nothing" (Nothing -: mx)---                     , value "Just" (Just ->: mx) :$ hole x---                     ]  deriveCases :: Name -> DecsQ deriveCases t  =  do
src/Conjure/Defn.hs view
@@ -19,8 +19,26 @@   , devl   , devalFast   , showDefn+  , printDefn   , defnApparentlyTerminates   , isRedundantDefn+  , isRedundantBySubsumption+  , isRedundantByRepetition+  , isRedundantByIntroduction+  , hasRedundantRecursion+  , isCompleteDefn+  , isCompleteBndn+  , simplifyDefn+  , canonicalizeBndn+  , canonicalizeBndnLast+  , hasUnbound+  , noUnbound+  , isUndefined+  , isDefined+  , introduceVariableAt+  , isBaseCase+  , isRecursiveCase+  , isRecursiveDefn   , module Conjure.Expr   ) where@@ -61,8 +79,22 @@ showDefn :: Defn -> String showDefn  =  unlines . map show1   where+  show1 (lhs,Value "if" _ :$ c :$ t :$ e)  =  lhseqs ++ "if " ++ showExpr c+                                   ++ "\n" ++ spaces ++ "then " ++ showExpr t+                                   ++ "\n" ++ spaces ++ "else " ++ showExpr e+                                              where+                                              lhseqs  =  showExpr lhs ++ "  =  "+                                              spaces  =  map (const ' ') lhseqs   show1 (lhs,rhs)  =  showExpr lhs ++ "  =  " ++ showExpr rhs +-- | Pretty-prints a 'Defn' to the screen.+--+-- > > printDefn sumDefn+-- > sum []  =  0+-- > sum (x:xs)  =  x + sum xs+printDefn :: Defn -> IO ()+printDefn  =  putStr . showDefn+ type Memo  =  [(Expr, Maybe Dynamic)]  -- | Evaluates an 'Expr' to a 'Dynamic' value@@ -198,38 +230,250 @@ defnApparentlyTerminates _  =  True  -- | Returns whether the given 'Defn' is redundant---   with regards to its patterns.+--   with regards to repetitions on RHSs. -- -- Here is an example of a redundant 'Defn': ----- > 0 ? 0  =  0--- > 0 ? x  =  0+-- > 0 ? 0  =  1+-- > 0 ? x  =  1 -- > x ? 0  =  x -- > x ? y  =  x -- -- It is redundant because it is equivalent to: ----- > 0 ? _  =  0+-- > 0 ? _  =  1 -- > x ? _  =  x ----- If the given expression is incomplete ('hasHole')--- this function returns 'True' as nothing can be said.+-- This function safely handles holes on the RHSs+-- by being conservative in cases these are found:+-- nothing can be said before their fillings. isRedundantDefn :: Defn -> Bool-isRedundantDefn d  =  all isComplete (map snd d)-                   && any isRedundant1 (unfoldDefnArgs d)+isRedundantDefn d  =  isRedundantBySubsumption d+                   || isRedundantByRepetition d+--                 || isRedundantByIntroduction d+-- we do not use isRedundantByIntroduction above+-- as it does not pay off in terms of runtime vs number of pruned candidates+--+-- The number of candidates is reduced usually by less than 1%+-- and the runtime increases by 50% or sometimes 100%.++-- | Returns whether the given 'Defn' is redundant+--   with regards to repetitions on RHSs.+--+-- Here is an example of a redundant 'Defn':+--+-- > 0 ? 0  =  1+-- > 0 ? x  =  1+-- > x ? 0  =  x+-- > x ? y  =  x+--+-- It is redundant because it is equivalent to:+--+-- > 0 ? _  =  1+-- > x ? _  =  x+--+-- @1@ and @x@ are repeated in the results for when+-- the first arguments are @0@ and @x@.+isRedundantByRepetition :: Defn -> Bool+isRedundantByRepetition d  =  any anyAllEqual shovels   where-  isRedundant1 :: [(Expr,Expr)] -> Bool-  isRedundant1  =  all allEqual-                .  map (map snd)-                .  classifyOn fst-                .  map (unfoldPair . canonicalize . foldPair)+  nArgs  =  length . tail . unfoldApp . fst $ head d+  shovels :: [Expr -> Expr]+  shovels  =  [digApp n | n <- [1..nArgs]]+  anyAllEqual :: (Expr -> Expr) -> Bool+  anyAllEqual shovel  =  any (\bs -> allEqual2 bs && isDefined bs)+                      .  classifyOn fst+                      .  map (canonicalizeBndn . first shovel)+                      $  d -  -- Returns a list of degenerate 'Defn'-  -- whose patterns have been "lensed" on each argument.-  unfoldDefnArgs :: Defn -> [[(Expr,Expr)]]-  unfoldDefnArgs  =  transpose . map unfoldBndnArgs-    where-    unfoldBndnArgs :: Bndn -> [(Expr,Expr)]-    unfoldBndnArgs (p,r)  =  map (\a -> (a,r)) as-      where-      (_:as)  =  unfoldApp p+-- | Returns whether the given 'Defn' is redundant+--   with regards to case elimination+--+-- The following is redundant according to this criterium:+--+-- > foo []  =  []+-- > foo (x:xs)  =  x:xs+--+-- It is equivalent to:+--+-- > foo xs = xs+--+-- The following is also redundant:+--+-- > [] ?? xs  =  []+-- > (x:xs) ?? ys  =  x:xs+--+-- as it is equivalent to:+--+-- > xs ?? ys == xs+--+-- This function is not used as one of the criteria in 'isRedundantDefn'+-- because it does not pay-off+-- in terms of runtime vs number of pruned candidates.+isRedundantByIntroduction :: Defn -> Bool+isRedundantByIntroduction d  =  any anyAllEqual [1..nArgs]+  where+  nArgs  =  length . tail . unfoldApp . fst $ head d+  anyAllEqual :: Int -> Bool+  anyAllEqual i  =  any (\bs -> length bs >= 2 && isDefined bs && noConflicts i bs)+                 .  classifyOn (digApp i . fst)+                 .  map (canonicalizeBndnLast i)+                 $  d+  noConflicts :: Int -> [Bndn] -> Bool+  noConflicts i bs  =  case listConflicts (map snd bs) of+                       [] -> True+                       [es] -> es == [efxs $!! i | (efxs,_) <- bs]+                       _ -> False++-- | Returns whether the given 'Defn' is redundant+--   with regards to recursions+--+-- The following is redundant:+--+-- > xs ?? []  =  []+-- > xs ?? (x:ys)  =  xs ?? []+--+-- The LHS of a base-case pattern, matches the RHS of a recursive pattern.+-- The second RHS may be replaced by simply @[]@ which makes it redundant.+hasRedundantRecursion :: Defn -> Bool+hasRedundantRecursion d  =  not (null rs) && any matchesRHS bs+  where+  (bs,rs)  =  partition isBaseCase d+  matchesRHS (lhs,_)  =  any ((`hasAppInstanceOf` lhs) . snd) rs++-- | Introduces a hole at a given position in the binding:+--+-- > > introduceVariableAt 1 (xxs -?- (yy -:- yys), (yy -:- yys) -++- (yy -:- yys))+-- > (xs ? (y:ys) :: [Int],(y:ys) ++ (y:ys) :: [Int])+--+-- > > introduceVariableAt 2 (xxs -?- (yy -:- yys), (yy -:- yys) -++- (yy -:- yys))+-- > (xs ? x :: [Int],x ++ x :: [Int])+--+-- Relevant occurrences are replaced.+introduceVariableAt :: Int -> Bndn -> Bndn+introduceVariableAt i b@(l,r)+  | isVar p    =  b -- already a variable+-- | isGround p  =  (newVar, r)  -- enabling catches a different set of candidates+  | otherwise  =  unfoldPair+               $  foldPair b // [(p,newVar)]+  where+  p  =  l $!! i+  newVar  =  newName `varAsTypeOf` p+  newName  =  head $ variableNamesFromTemplate "x" \\ varnames l+  varnames :: Expr -> [String]+  varnames e  =  [n | Value ('_':n) _ <- vars e]++-- | Returns whether the given 'Defn' is redundant+--   with regards to subsumption by latter patterns+--+-- Here is an example of a redundant 'Defn' by this criterium:+--+-- > foo 0  =  0+-- > foo x  =  x+isRedundantBySubsumption :: Defn -> Bool+isRedundantBySubsumption  =  is . map foldPair . filter isCompleteBndn+  -- above, we could have used noUnbound instead of isCompleteBndn+  -- we use isCompleteBndn as it is faster+  where+  is []  =  False+  is (b:bs)  =  any (b `isInstanceOf`) bs || is bs++-- | Returns whether the definition is complete,+--   i.e., whether it does not have any holes in the RHS.+isCompleteDefn :: Defn -> Bool+isCompleteDefn  =  all isCompleteBndn++-- | Returns whether the binding is complete,+--   i.e., whether it does not have any holes in the RHS.+isCompleteBndn :: Bndn -> Bool+isCompleteBndn (_,rhs)  =  isComplete rhs++-- | Simplifies a definition by removing redundant patterns+--+-- This may be useful in the following case:+--+-- > 0 ^^^ 0  =  0+-- > 0 ^^^ x  =  x+-- > x ^^^ 0  =  x+-- > _ ^^^ _  =  0+--+-- The first pattern is subsumed by the last pattern.+simplifyDefn :: Defn -> Defn+simplifyDefn []  =  []+simplifyDefn (b:bs)  =  [b | none (foldPair b `isInstanceOf`) $ map foldPair bs]+                     ++ simplifyDefn bs++canonicalizeBndn :: Bndn -> Bndn+canonicalizeBndn  =  unfoldPair . canonicalize . foldPair++canonicalizeBndnLast :: Int -> Bndn -> Bndn+canonicalizeBndnLast i (lhs,rhs)  =  (updateAppAt i (const ex') lhs', rhs')+  where+  (lhs_, ex)  =  extractApp i lhs+  (lhs', ex', rhs')  =  unfoldTrio . canonicalize . foldTrio $ (lhs_, ex, rhs)++-- | Returns whether a binding has undefined variables,+--   i.e.,+--   there are variables in the RHS that are not declared in the LHS.+--+-- > > hasUnbound (xx -:- xxs, xxs)+-- > False+--+-- > > hasUnbound (xx -:- xxs, yys)+-- > True+--+-- For 'Defn's, use 'isUndefined'.+hasUnbound :: Bndn -> Bool+hasUnbound  =  not . noUnbound++noUnbound :: Bndn -> Bool+noUnbound (lhs,rhs)  =  all (`elem` nubVars lhs) (vars rhs)++-- | Returns whether a 'Defn' has undefined variables,+--   i.e.,+--   there are variables in the RHSs that are not declared in the LHSs.+--+-- > > isUndefined [(nil, nil), (xx -:- xxs, xxs)]+-- > False+--+-- > > isUndefined [(nil, xxs), (xx -:- xxs, yys)]+-- > True+--+-- For single 'Bndn's, use 'hasUnbound'.+isUndefined :: Defn -> Bool+isUndefined  =  any hasUnbound++isDefined :: Defn -> Bool+isDefined  =  not . isUndefined++-- | Returns whether a binding is a base case.+--+-- > > isBaseCase (ff (xx -:- nil), xx)+-- > True+--+-- > > isBaseCase (ff (xx -:- xxs), ff xxs)+-- > False+--+-- (cf. 'isRecursiveCase')+isBaseCase :: Bndn -> Bool+isBaseCase (lhs,rhs)  =  f `notElem` values rhs+  where+  (f:_)  =  unfoldApp lhs++-- | Returns whether a binding is a base case.+--+-- > > isRecursiveCase (ff (xx -:- nil), xx)+-- > False+--+-- > > isRecursiveCase (ff (xx -:- xxs), ff xxs)+-- > True+--+-- (cf. 'isBaseCase')+isRecursiveCase :: Bndn -> Bool+isRecursiveCase (lhs,rhs)  =  f `elem` values rhs+  where+  (f:_)  =  unfoldApp lhs++-- | Returns whether a definition is recursive+isRecursiveDefn :: Defn -> Bool+isRecursiveDefn  =  any isRecursiveCase
src/Conjure/Engine.hs view
@@ -166,6 +166,7 @@   , requireDescent        :: Bool -- ^ require recursive calls to deconstruct arguments   , usePatterns           :: Bool -- ^ use pattern matching to create (recursive) candidates   , copyBindings          :: Bool -- ^ copy partial definition bindings in candidates+  , atomicNumbers         :: Bool -- ^ restrict constant/ground numeric expressions to atoms   , showTheory            :: Bool -- ^ show theory discovered by Speculate used in pruning   , uniqueCandidates      :: Bool -- ^ unique-modulo-testing candidates   }@@ -193,6 +194,7 @@   , requireDescent         =  True   , usePatterns            =  True   , copyBindings           =  True+  , atomicNumbers          =  True   , showTheory             =  False   , uniqueCandidates       =  False   }@@ -358,9 +360,8 @@ -- | Return apparently unique candidate definitions --   where there is a single body. candidateDefns1 :: Conjurable f => Args -> String -> f -> [Prim] -> ([[Defn]], Thy)-candidateDefns1 args nm f ps  =  mapFst (mapT toDefn) $ candidateExprs args nm f ps+candidateDefns1 args nm f ps  =  first (mapT toDefn) $ candidateExprs args nm f ps   where-  mapFst f (x,y)  =  (f x, y)   efxs  =  conjureVarApplication nm f   toDefn e  =  [(efxs, e)] @@ -385,8 +386,7 @@   eh  =  holeAsTypeOf efxs   efxs  =  conjureVarApplication nm f   (ef:exs)  =  unfoldApp efxs-  keep  =  isRootNormalE thy . fastMostGeneralVariation-  ds  =  filter (conjureIsDeconstructor f maxTests) es+  keep  =  isRootNormalC thy . fastMostGeneralVariation   keepR | requireDescent  =  descends isDecOf efxs         | otherwise       =  const True     where@@ -414,7 +414,7 @@ -- | Return apparently unique candidate definitions --   using pattern matching. candidateDefnsC :: Conjurable f => Args -> String -> f -> [Prim] -> ([[Defn]], Thy)-candidateDefnsC Args{..} nm f ps  =  (concatMapT fillingsFor fss,thy)+candidateDefnsC Args{..} nm f ps  =  (discardT hasRedundantRecursion $ concatMapT fillingsFor fss,thy)   where   pats  =  conjurePats es nm f   fss  =  concatMapT ps2fss pats@@ -424,14 +424,19 @@   efxs  =  conjureVarApplication nm f   (ef:exs)  =  unfoldApp efxs -  keep  =  isRootNormal thy . fastMostGeneralVariation+  keep  =  isRootNormalC thy . fastMostGeneralVariation    appsWith :: Expr -> [Expr] -> [[Expr]]-  appsWith eh vs  =  enumerateAppsFor eh keep $ vs ++ es+  appsWith eh vs  =  enumerateAppsFor eh k $ vs ++ es+    where+    k | atomicNumbers && conjureIsNumeric f eh  =  \e -> keepNumeric e && keep e+      | otherwise                               =  keep+    -- discards non-atomic numeric ground expressions such as 1 + 1+    keepNumeric e  =  isFun e || isConst e || not (isGround e)    ps2fss :: [Expr] -> [[Defn]]   ps2fss pats  =  discardT isRedundantDefn-               .  discardT (allEqual . map snd)+               .  discardT (allEqual2 . map snd)                .  products                $  map p2eess pats     where@@ -638,6 +643,16 @@   where   trie  =  T.fromList (rules thy) +-- the logic of this function is a bit twisted for performance+-- but nevertheless correct+isRootNormalC :: Thy -> Expr -> Bool+isRootNormalC thy e | not (isRootNormal thy e)  =  False+isRootNormalC thy (ef :$ ex :$ ey)+  | ex <= ey  =  True+  | not (isCommutative thy ef)  =  True+  | isRootNormal thy (ef :$ ey :$ ex)  =  False+isRootNormalC _ _  =  True+ isRootNormalE :: Thy -> Expr -> Bool isRootNormalE thy e  =  isRootNormal thy e                     &&  null (filter (e ->-) [e2 //- bs | (_,bs,e2) <- T.lookup e trie])@@ -645,16 +660,27 @@   trie  =  T.fromList $ equations thy ++ map swap (equations thy)   (->-)  =  canReduceTo thy +isCommutative :: Thy -> Expr -> Bool+isCommutative thy eo  =  eo `elem` commutativeOperators thy +commutativeOperators :: Thy -> [Expr]+commutativeOperators thy  =  [ ef+                             | (ef :$ ex :$ ey, ef' :$ ey' :$ ex') <- equations thy+                             , ef == ef'+                             , ex == ex'+                             , ey == ey'+                             ]++ --- tiers utils ---  productsWith :: ([a] -> a) -> [ [[a]] ] -> [[a]] productsWith f  =  mapT f . products--- TODO: move to LeanCheck?+-- TODO: move productsWith to LeanCheck?  delayedProductsWith :: ([a] -> a) -> [ [[a]] ] -> [[a]] delayedProductsWith f xsss  =  productsWith f xsss `addWeight` length xsss--- TODO: move to LeanCheck?+-- TODO: move delayedProductsWith to LeanCheck?  foldAppProducts :: Expr -> [ [[Expr]] ] -> [[Expr]] foldAppProducts ef  =  delayedProductsWith (foldApp . (ef:))
src/Conjure/Expr.hs view
@@ -12,7 +12,6 @@   , module Data.Express.Fixtures    , rehole-  , (>$$<)   , funToVar   , recursexpr   , apparentlyTerminates@@ -30,10 +29,20 @@   , reval   , useMatches   , deholings+  , varToConst+  , hasAppInstanceOf    , enumerateAppsFor   , enumerateFillings +  , digApp+  , extractApp+  , updateAppAt+  , ($!!)++  , conflicts+  , listConflicts+   , module Conjure.Utils   ) where@@ -94,6 +103,19 @@ funToVar (ef :$ ex)  =  funToVar ef :$ ex funToVar ef@(Value nm _)  =  nm `varAsTypeOf` ef +-- | Given a variable, returns a constant with the same name+varToConst :: Expr -> Expr+varToConst (Value ('_':nm) dyn)  =  Value nm dyn+varToConst _  =  error "varToConst: can only be applied to variables"++-- | Returns whether the first 'Expr'+--   has an application instance of the second 'Expr'.+hasAppInstanceOf :: Expr -> Expr -> Bool+e `hasAppInstanceOf` efxs  =  constApp e `hasInstanceOf` constApp efxs+  where+  constApp e  =  e //- [(ef,varToConst ef)]+  (ef:_)  =  unfoldApp efxs+ -- | Expands recursive calls on an expression --   until the given size limit is reached. --@@ -187,18 +209,13 @@ -- | Creates a case 'Expr' of the type of the given proxy. -- -- > > caseForOrd (undefined :: Int)--- > case :: Bool -> Int -> Int -> Int -> Int+-- > case :: Ordering -> Int -> Int -> Int -> Int -- -- > > caseForOrd (undefined :: String)--- > case :: Bool -> [Char] -> [Char] -> [Char] -> [Char]+-- > case :: Ordering -> [Char] -> [Char] -> [Char] -> [Char] caseForOrd :: Typeable a => a -> Expr caseForOrd a  =  value "case" (\o x y z -> case o of LT -> x; EQ -> y; GT -> z `asTypeOf` a) --- | Application cross-product between lists of Exprs-(>$$<) :: [Expr] -> [Expr] -> [Expr]-exs >$$< eys  =  catMaybes [ex $$ ey | ex <- exs, ey <- eys]--- TODO: move >$$< into Data.Express?- -- | Lists terminal values in BFS order. -- -- (cf. 'values', 'holesBFS', 'fillBFS')@@ -452,6 +469,67 @@   deh e  =  if typ e == typ e' && isHole e             then [e']             else []++-- | Dig a hole in a function application at the given position+--+-- > > digApp 1 (one -+- two)+-- > _ + 2 :: Int+--+-- > > digApp 2 (one -+- two)+-- > 1 + _ :: Int+digApp :: Int -> Expr -> Expr+digApp i  =  updateAppAt i holeAsTypeOf++updateAppAt :: Int -> (Expr -> Expr) -> Expr -> Expr+updateAppAt i f  =  foldApp . updateAt i f . unfoldApp++-- | Extracts the argument of a function application at the given position.+--+-- > (one -+- two) $!! 1+-- 1 :: Int+--+-- > (one -+- two) $!! 2+-- 2 :: Int+($!!) :: Expr -> Int -> Expr+e $!! i  =  unfoldApp e !! i++-- | Extracts a value in a function application at the given position+--+-- > > extractApp 1 (one -+- two)+-- > (_ + 2 :: Int, 1 :: Int)+--+-- > > extractApp 2 (one -+- two)+-- > (1 + _ :: Int, 2 :: Int)+extractApp :: Int -> Expr -> (Expr,Expr)+extractApp i efxs  =  (foldApp $ updateAt i holeAsTypeOf es, es !! i)+  where+  es  =  unfoldApp efxs+++-- | Lists conflicts between two expressions+--+-- > > conflicts (one -+- two) (three -+- four)+-- > [(1 :: Int,3 :: Int), (2 :: Int,4 :: Int)]+--+-- > > conflicts (xx -:- nil) (xx -:- yy -:- yys)+-- > [(nil, yy -:- yys)]+--+-- > > conflicts  (one -:- one -:- nil) (zero -:- zero -:- xx -:- xxs)+-- > [(1 :: Int,0 :: Int),([] :: [Int],x:xs :: [Int])]+conflicts :: Expr -> Expr -> [(Expr,Expr)]+conflicts e1 e2 | typ e1 /= typ e2  =  [(e1,e2)]+conflicts (ef :$ ex) (eg :$ ey)     =  conflicts ef eg +++ conflicts ex ey+conflicts e1 e2                     =  [(e1,e2) | e1 /= e2]++listConflicts :: [Expr] -> [[Expr]]+listConflicts es+  | not (allEqualOn typ es)  =  [es]+  | all isApp es             =  listConflicts [ef | ef :$ _ <- es]+                            +++ listConflicts [ex | _ :$ ex <- es]+  | otherwise                =  [es | not (allEqual es)]+  where+  fun (ef :$ _)  =  ef+  arg (_ :$ ex)  =  ex  instance Express A where  expr  =  val instance Express B where  expr  =  val
src/Conjure/Utils.hs view
@@ -29,6 +29,8 @@   , sets   , headOr   , allEqual+  , allEqualOn+  , allEqual2   , choices   , choicesThat   , foldr0@@ -37,6 +39,12 @@   , classify   -- from LeanCheck.Stats   , classifyBy -- from LeanCheck.Stats   , classifyOn -- from LeanCheck.Stats+  , none+  , updateAt+  , first+  , second+  , both+  , (+++)   ) where @@ -51,14 +59,27 @@  import Test.LeanCheck.Stats (classify, classifyBy, classifyOn) + -- | Checks if all elements of a list are equal.+allEqual :: Eq a => [a] -> Bool+allEqual (x:y:etc)  =  x == y && allEqual (y:etc)+allEqual _          =  True+++allEqualOn :: Eq b => (a -> b) -> [a] -> Bool+allEqualOn f  =  allEqual . map f+++-- | Checks if all elements of a list are equal. -- -- Exceptionally this function returns false for an empty or unit list.-allEqual :: Eq a => [a] -> Bool-allEqual []  =  False-allEqual [x]  =  False-allEqual [x,y]  =  x == y-allEqual (x:y:xs)  =  x == y && allEqual (y:xs)+--+-- This returns true when all elements are equal and the list+-- has a length greater than or equal to two.+allEqual2 :: Eq a => [a] -> Bool+allEqual2 []  =  False+allEqual2 [_]  =  False+allEqual2 xs  =  allEqual xs  -- | Counts the number of occurrences on a list. count :: (a -> Bool) -> [a] -> Int@@ -129,9 +150,9 @@ -- | Lists choices of values. choices :: [a] -> [(a,[a])] choices []  =  []-choices (x:xs)  =  (x,xs) : map (mapSnd (x:)) (choices xs)+choices (x:xs)  =  (x,xs) : map (second (x:)) (choices xs)   where-  mapSnd f (x,y)  =  (x,f y)+  second f (x,y)  =  (x,f y)  -- | Lists choices of values that follow a property. choicesThat :: (a -> [a] -> Bool) -> [a] -> [(a,[a])]@@ -149,3 +170,51 @@ -- | Indents a block of text with the provided amount of spaces indentBy :: Int -> String -> String indentBy n  =  unlines . map (replicate n ' ' ++) . lines++none :: (a -> Bool) -> [a] -> Bool+none p  =  not . any p++-- | Updates the value in a list at a given position.+--+-- > > updateAt 2 (*10) [1,2,3,4]+-- > [1,2,30,4]+updateAt :: Int -> (a -> a) -> [a] -> [a]+updateAt _ _ []  =  []+updateAt 0 f (x:xs)  =  f x : xs+updateAt n f (x:xs)  =  x : updateAt (n-1) f xs++-- | Applies a function to the first element of a pair.+--   Often known on the wild as @mapFst@.+--+-- > > first (*10) (1,2)+-- > (10,2)+first :: (a -> a') -> (a,b) -> (a',b)+first f (x,y)  =  (f x, y)++-- | Applies a function to the second element of a pair.+--   Often known on the wild as @mapSnd@.+--+-- > > second (*100) (1,2)+-- > (1,200)+second :: (b -> b') -> (a,b) -> (a,b')+second f (x,y)  =  (x, f y)++both :: (a -> b) -> (a,a) -> (b,b)+both f (x,y)  =  (f x, f y)++nubMergeBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a]+nubMergeBy cmp (x:xs) (y:ys) = case x `cmp` y of+                                 LT -> x:nubMergeBy cmp xs (y:ys)+                                 GT -> y:nubMergeBy cmp (x:xs) ys+                                 EQ -> x:nubMergeBy cmp xs ys+nubMergeBy _ xs ys = xs ++ ys++nubMergeOn :: Ord b => (a -> b) -> [a] -> [a] -> [a]+nubMergeOn f = nubMergeBy (compare `on` f)++nubMerge :: Ord a => [a] -> [a] -> [a]+nubMerge = nubMergeBy compare++(+++) :: Ord a => [a] -> [a] -> [a]+(+++) = nubMerge+infixr 5 +++
stack.yaml view
@@ -9,6 +9,6 @@ - .  extra-deps:-- leancheck-1.0.0+- leancheck-1.0.2 - speculate-0.4.14-- express-1.0.10+- express-1.0.14
test/conjurable.hs view
@@ -114,6 +114,8 @@   , isNothing $ conjureEquality (undefined :: (Bool,Bool,Bool,Bool,Bool,Unit,Bool))   , isNothing $ conjureEquality (undefined :: (Bool,Bool,Bool,Bool,Bool,Bool,Unit)) +  , conjureArgumentHoles (undefined :: Bool -> Int -> Bool -> ()) == [b_, i_, b_]+   , length (conjureCases (undefined :: ()))      == 1   , length (conjureCases (undefined :: Bool))    == 2   , length (conjureCases (undefined :: Int))     == 0@@ -121,6 +123,15 @@   , length (conjureCases (undefined :: [Int]))   == 2   , length (conjureCases (undefined :: [Bool]))  == 2 +  , conjureCases (undefined :: Bool) == [false, true]+  , conjureCases (undefined :: Int) == []+  , conjureCases (undefined :: [Int]) == [nil, i_ -:- is_]+  , conjureCases (undefined :: [Bool]) == [nilBool, b_ -:- bs_]+  , conjureCases (undefined :: Maybe Int) == [nothing, just i_]++  , map length (conjureArgumentCases (undefined :: () -> Bool -> Int -> [Int] -> [Bool] -> ()))+    == [1, 2, 0, 2, 2]+   , conjurePats [zero, one] "f" (undefined :: Int -> Int)     == [ [ [ ff xx            ]@@ -150,7 +161,7 @@          ]        ] -  , take 4 (conjurePats [zero, one] "?" (undefined :: Int -> Int -> Int))+  , take 3 (conjurePats [zero, one] "?" (undefined :: Int -> Int -> Int))     == [ [ [ xx -?- yy            ]          ]@@ -164,106 +175,27 @@        , [ [ xx -?- one            , xx -?- yy            ]-         , [ zero -?- zero-           , zero -?- xx+         , [ zero -?- xx            , xx -?- zero            , xx -?- yy            ]-         , [ one -?- xx-           , xx -?- yy-           ]-         ]-       , [ [ xx -?- zero-           , xx -?- one-           , xx -?- yy-           ]-         , [ zero -?- one+         , [ zero -?- zero            , zero -?- xx-           , xx -?- one            , xx -?- yy            ]-         , [ one -?- zero-           , one -?- xx-           , xx -?- zero-           , xx -?- yy-           ]-         , [ zero -?- xx-           , one -?- xx+         , [ one -?- xx            , xx -?- yy            ]          ]        ] -  , concat (conjurePats [zero, one] "foo" (undefined :: [Int] -> Int -> Int))-    == [ [ ffoo xxs xx-         ]-       , [ ffoo xxs zero-         , ffoo xxs xx-         ]-       , [ ffoo nil xx-         , ffoo (xx -:- xxs) yy-         ]-       , [ ffoo xxs one-         , ffoo xxs xx-         ]-       , [ ffoo nil zero-         , ffoo nil xx-         , ffoo (xx -:- xxs) zero-         , ffoo (xx -:- xxs) yy-         ]-       , [ ffoo xxs zero-         , ffoo xxs one-         , ffoo xxs xx-         ]-       , [ ffoo nil one-         , ffoo nil xx-         , ffoo (xx -:- xxs) one-         , ffoo (xx -:- xxs) yy-         ]-       , [ ffoo nil zero-         , ffoo nil one-         , ffoo nil xx-         , ffoo (xx -:- xxs) zero-         , ffoo (xx -:- xxs) one-         , ffoo (xx -:- xxs) yy-         ]-       ]+  , mapT length (conjurePats [zero, one] "foo" (undefined :: [Int] -> Int -> Int))+    == [[1],[2,2],[2,3,3],[3,3,4,3],[4,4,4,4],[5,4,5],[5,5],[6]] -  , concat (conjurePats [zero, one] "foo" (undefined :: Int -> [Int] -> Int))-    == [ [ ffoo xx xxs-         ]-       , [ ffoo xx nil-         , ffoo xx (yy -:- xxs)-         ]-       , [ ffoo zero xxs-         , ffoo xx xxs-         ]-       , [ ffoo zero nil-         , ffoo zero (xx -:- xxs)-         , ffoo xx nil-         , ffoo xx (yy -:- xxs)-         ]-       , [ ffoo one xxs-         , ffoo xx xxs-         ]-       , [ ffoo one nil-         , ffoo one (xx -:- xxs)-         , ffoo xx nil-         , ffoo xx (yy -:- xxs)-         ]-       , [ ffoo zero xxs-         , ffoo one xxs-         , ffoo xx xxs-         ]-       , [ ffoo zero nil-         , ffoo zero (xx -:- xxs)-         , ffoo one nil-         , ffoo one (xx -:- xxs)-         , ffoo xx nil-         , ffoo xx (yy -:- xxs)-         ]-       ] +  , mapT length (conjurePats [zero, one] "foo" (undefined :: Int -> [Int] -> Int))+    == [[1],[2,2],[3,3,2],[4,3,3,3],[4,4,4,4],[5,5,5],[6]]+   , conjurePats [] "foo" (undefined :: [Int] -> [Char] -> Int)     == [ [ [ ffoo xxs ccs            ]@@ -275,6 +207,15 @@            , ffoo (xx -:- xxs) ccs            ]          ]+       , [ [ ffoo nilInt ccs+           , ffoo (xx -:- xxs) emptyString+           , ffoo (xx -:- xxs) (cc -:- ccs)+           ]+         , [ ffoo nilInt emptyString+           , ffoo nilInt (cc -:- ccs)+           , ffoo (xx -:- xxs) ccs+           ]+         ]        , [ [ ffoo nilInt emptyString            , ffoo nilInt (cc -:- ccs)            , ffoo (xx -:- xxs) emptyString@@ -283,32 +224,18 @@          ]        ] -  , 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 +  -- counter-intuitive but true: x `mod` y is a deconstruction of y:+  -- x `mod` y < y  for  y > 0+  , isDecon (mod' xx i_)         == True++  , isDecon (mod' i_ two)        == False -- does not deconstruct 1+  , isDecon (mod' i_ xx)         == False -- may not deconstruct 1   , 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@@ -337,10 +264,19 @@     == Just False   , fromDynamic (conjureDynamicEq ((+) :: Int -> Int -> Int) `dynApp` toDyn (1::Int) `dynApp` toDyn (1::Int))     == Just True++  , isNumeric one+  , isNumeric (val (1 :: Integer))+  , isNumeric bee == False+  , isNumeric (expr [0::Int]) == False+  , isNumeric true == False   ]  isDecon :: Expr -> Bool isDecon =  conjureIsDeconstruction (undefined :: [Int] -> [Char] -> [Bool]) 60++isNumeric :: Expr -> Bool+isNumeric  =  conjureIsNumeric (undefined :: [Int] -> [Char] -> [Bool] -> [Integer])  ffs :: Expr -> Expr ffs e  =  ffE :$ e
test/defn.hs view
@@ -4,6 +4,7 @@ import Test import Conjure.Defn import Test.LeanCheck.Error (errorToLeft)+import Test.LeanCheck.Function () import Data.Express.Fixtures  main :: IO ()@@ -73,10 +74,85 @@   , holds n $ cevl 60 nullDefn   === (null :: [Int] -> Bool)   , holds n $ cevl 60 appendDefn ==== ((++) :: [Int] -> [Int] -> [Int]) +  , holds n $ cevl 60 idDefn      === (id :: Int -> Int)+  , holds n $ cevl 60 constDefn   ==== (const :: Int -> Int -> Int)+  , holds n $ cevl 60 appDefn     ==== (($) :: (Int->Int) -> Int -> Int)+  , holds n $ \f g x -> cevl 60 composeDefn f g x == ((.) :: (Int->Int) -> (Int->Int) -> Int->Int) f g x+   -- evaluating at the incorrect types should return Nothing   , isNothing (cevaluate 60 sumDefn :: Maybe ([Bool] -> Bool))   , isNothing (cevaluate 60 andDefn :: Maybe ([Int] -> Int))   , isNothing (cevaluate 60 nullDefn :: Maybe ([Int] -> Int))++  , noUnbound (xx -:- xxs, xxs)+  , hasUnbound (xx -:- xxs, yys)+  , isDefined sumDefn+  , isDefined andDefn+  , isDefined nullDefn+  , isDefined [(nil, nil), (xx -:- xxs, xxs)]+  , isUndefined [(nil, xxs), (xx -:- xxs, yys)]++  , isRedundantDefn sumDefn    == False+  , isRedundantDefn factDefn   == False+  , isRedundantDefn fact1Defn  == False+  , isRedundantDefn nullDefn   == False+  , isRedundantDefn isZeroDefn == False+  , isRedundantDefn isOneDefn  == False+  , isRedundantDefn andDefn    == False+  , isRedundantDefn orDefn     == False+  , isRedundantDefn and1Defn   == False+  , isRedundantDefn or1Defn    == False+  , isRedundantDefn appendDefn == False++  , isRedundantDefn const0Defn == False+  , isRedundantDefn const0RedundantDefn++  , isRedundantDefn constDefn == False+  , isRedundantDefn constRedundantDefn+  , isRedundantDefn constRedundantRedundantDefn++  , isRedundantDefn redundantDefn1+  , isRedundantDefn canonicalDefn1 == False+  , isRedundantDefn redundantDefn2++  , isRedundantDefn constBoolRedundantDefn+  , isRedundantDefn idListRedundantDefn == False+    -- NOTE: ^ ByIntroduction is not an active check+    --         as it does not pay-off in terms of performance++  , isRedundantBySubsumption  constRedundantDefn+  , isRedundantByRepetition   constRedundantDefn == False+  , isRedundantByIntroduction constRedundantDefn++  , isRedundantBySubsumption  constBoolRedundantDefn == False+  , isRedundantByRepetition   constBoolRedundantDefn+  , isRedundantByIntroduction constBoolRedundantDefn++  , isRedundantBySubsumption  idListRedundantDefn == False+  , isRedundantByRepetition   idListRedundantDefn == False+  , isRedundantByIntroduction idListRedundantDefn++  , isRedundantBySubsumption  constNilRedundantDefn == False+  , isRedundantByRepetition   constNilRedundantDefn+  , isRedundantByIntroduction constNilRedundantDefn++  , isRedundantBySubsumption  constFalseRedundantDefn == False+  , isRedundantByRepetition   constFalseRedundantDefn+  , isRedundantByIntroduction constFalseRedundantDefn == True++  , canonicalizeBndn (introduceVariableAt 2 (const' xxs (yy -:- yys), (yy -:- yys) -++- (yy -:- yys)))+    == (const' xxs yys, yys -++- yys)++  , canonicalizeBndnLast 1 (introduceVariableAt 2 (const' xxs (yy -:- yys), (yy -:- yys) -++- (yy -:- yys)))+    == (const' zzs yys, yys -++- yys)++  , canonicalizeBndnLast 2 (introduceVariableAt 2 (const' xxs (yy -:- yys), (yy -:- yys) -++- (yy -:- yys)))+    == (const' xxs zzs, zzs -++- zzs)++  ,       isBaseCase      (ff (xx -:- nil), xx)+  , not $ isBaseCase      (ff (xx -:- xxs), ff xxs)+  ,       isRecursiveCase (ff (xx -:- xxs), ff xxs)+  , not $ isRecursiveCase (ff (xx -:- nil), xx)   ]  dvl :: Typeable a => Defn -> Expr -> a@@ -147,6 +223,91 @@ appendDefn  =  [ nil -++- xxs  =-  xxs                , (xx -:- xxs) -++- yys  =-  xx -:- (xxs -++- yys)                ]  where  exs -++- eys  =  appendV :$ exs :$ eys++const0Defn :: Defn+const0Defn  =  [ xx  =-  zero ]++const0RedundantDefn :: Defn+const0RedundantDefn  =  [ zero  =-  zero+                        , xx    =-  zero+                        ]++idDefn :: Defn+idDefn  =  [ id' xx  =-  xx ]++constDefn :: Defn+constDefn  =  [ const' xx yy  =-  xx ]++appDefn :: Defn+appDefn  =  [ ffE -$- xx  =-  ff xx ]++composeDefn :: Defn+composeDefn  =  [ (ffE -.- ggE) :$ xx  =-  ff (gg xx) ]++constRedundantDefn :: Defn+constRedundantDefn  =  [ const' zero xx  =-  zero+                       , const' xx   yy  =-  xx+                       ]++constRedundantRedundantDefn :: Defn+constRedundantRedundantDefn  =  [ const' zero zero  =-  zero+                                , const' zero xx    =-  zero+                                , const' xx   zero  =-  xx+                                , const' xx   yy    =-  xx+                                ]++constBoolRedundantDefn :: Defn+constBoolRedundantDefn  =  [ const' false false  =-  false+                           , const' false true   =-  false+                           , const' true false   =-  true+                           , const' true true    =-  true+                           ]++idListRedundantDefn :: Defn+idListRedundantDefn  =  [ id' nil           =-  nil+                        , id' (xx -:- xxs)  =-  xx -:- xxs+                        ]++constNilRedundantDefn :: Defn+constNilRedundantDefn  =  [ id' nil           =-  nil+                          , id' (xx -:- xxs)  =-  nil+                          ]++constFalseRedundantDefn :: Defn+constFalseRedundantDefn  =  [ id' nil           =-  false+                            , id' (xx -:- xxs)  =-  false+                            ]++-- Here is an example of a redundant 'Defn':+--+-- > 0 ? 0  =  1+-- > 0 ? x  =  1+-- > x ? 0  =  x+-- > x ? y  =  x+redundantDefn1 :: Defn+redundantDefn1  =  [ zero -?- zero  =-  one+                   , zero -?- xx    =-  one+                   , xx   -?- zero  =-  xx+                   , xx   -?- yy    =-  xx+                   ]++-- The above is redundant because it is equivalent to:+--+-- > 0 ? _  =  1+-- > x ? _  =  x+canonicalDefn1 :: Defn+canonicalDefn1  =  [ zero -?- xx  =-  one+                   , xx   -?- yy  =-  xx+                   ]++-- same as redundantDefn1 but with arguments swapped+-- (mind the alpha-renaming)+redundantDefn2 :: Defn+redundantDefn2  =  [ zero -?- zero  =-  one+                   , zero -?- xx    =-  xx+                   , xx   -?- zero  =-  one+                   , xx   -?- yy    =-  yy+                   ]  (=-) = (,) infixr 0 =-
test/expr.hs view
@@ -35,38 +35,6 @@   , apparentlyTerminates ffE (if' pp (ff xx) zero) == False   , apparentlyTerminates ffE (if' (odd' (ff xx)) zero zero) == False -  , [false, true, zero, one] >$$< [notE, andE, orE, plus, times] == []-  , [notE, andE, orE, plus, times] >$$< [false, true, zero, one]-    == [ not' false-       , not' true-       , andE :$ false-       , andE :$ true-       , orE :$ false-       , orE :$ true-       , plus :$ zero-       , plus :$ one-       , times :$ zero-       , times :$ one-       ]-  , [notE, andE, orE, plus, times] >$$< [false, true, zero, one] >$$< [false, true, zero, one]-    == [ false -&&- false-       , false -&&- true-       , true -&&- false-       , true -&&- true-       , false -||- false-       , false -||- true-       , true -||- false-       , true -||- true-       , zero -+- zero-       , zero -+- one-       , one -+- zero-       , one -+- one-       , zero -*- zero-       , zero -*- one-       , one -*- zero-       , one -*- one-       ]-   , holds n $ \e -> sort (valuesBFS e) == sort (values e)   , holds n $ \e -> holesBFS e == filter isHole (valuesBFS e)   , valuesBFS false == [false]@@ -174,4 +142,16 @@   , zero $$   zero  ==  Nothing   , zero $$|< zero  ==  Nothing   , zero $$** zero  ==  Just (zero :$ zero)++  , conflicts (one -+- two) (three -+- four) == [(one,three), (two,four)]+  , conflicts (xx -:- nil) (xx -:- yy -:- yys) == [(nil, yy -:- yys)]+  , conflicts (one -:- one -:- nil) (zero -:- zero -:- xx -:- xxs)+    == [(one,zero), (nil,xx -:- xxs)]+  , listConflicts [(one -+- one), (two -+- two), (three -+- three)] == [[one,two,three]]+  , listConflicts [(one -+- zz), (two -+- yy), (three -+- xx)] == [[zz,yy,xx],[one,two,three]]++  , holds n $ \e1 e2 -> map listPair (conflicts e1 e2) == listConflicts [e1,e2]   ]++listPair :: (a,a) -> [a]+listPair (x,y)  =  [x,y]