Candidates for: foo :: Int -> Int pruning with 27/65 rules [3,0,8,0,30,0,194,0,1406] direct candidates, 0 duplicates [3,3,9,10,32,39,197,247,1325] pattern candidates, 0 duplicates rules: x - x == 0 x * 0 == 0 x * 1 == x 0 * x == 0 1 * x == x x + 0 == x 0 + x == x x - 0 == x (x * y) * z == x * (y * z) (x * y) * z == y * (x * z) (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 + x) * y == x * (y + y) x + (y - x) == y (x - y) + y == x x * y - x == x * (y - 1) x * y - y == y * (x - 1) x * (y + 1) == x + x * y x * (y + 1) == x * y + x (x + 1) * y == y + x * y 0 - x * y == x * (0 - y) 0 - x * y == y * (0 - x) equations: y * x == x * y 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) z + (x + y) == x + (y + z) z + (y + x) == x + (y + z) (z + y) * x == x * (y + z) y + (x - z) == x + (y - z) z * y + x == x + y * z (x - z) + y == x + (y - z) (z - y) + x == (x - y) + z y * (x + x) == x * (y + y) 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 * (1 - y) == x - x * y x * (1 - y) == x - y * x y * (0 - x) == x * (0 - y) (0 - x) * y == x * (0 - y) (0 - y) * x == (0 - x) * y (1 - y) * x == x - x * y (1 - y) * x == 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) x * (0 - 1) == 0 - x (0 - 1) * x == 0 - x (0 - 1) * y == x - (x + y) (0 - 1) * y == x - (y + 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 * x foo x = x - 1 foo x = 0 - x foo x = 0 - 1 foo x = 1 - x foo x = x * x - 1 foo x = x + (x + x) foo x = x + (x + 1) foo x = x + (1 + 1) foo x = x + x * x 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 + x * x foo x = 1 + (0 - x) foo x = 1 + (1 - x) foo x = x * (x + x) foo x = x * (x * x) foo x = x * (x - 1) foo x = x * (0 - x) foo x = x * (0 - 1) foo x = x * (1 - x) foo x = x - (x + x) foo x = x - (x + 1) foo x = x - (1 + 1) foo x = x - x * x 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) foo x = 1 - x * x 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 * x 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 + 1 foo 0 = 0 foo x = x - 1 foo 0 = 0 foo x = 1 - x foo 0 = 1 foo x = x + x foo 0 = 1 foo x = x * x foo 0 = 1 foo x = x - 1 foo 0 = 1 foo x = 0 - 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 x = x * x - 1 foo x = x + (x + x) foo x = x + (x + 1) foo x = x + x * x foo x = x + (x - 1) foo x = 1 + (x + x) foo x = 1 + (x + 1) foo x = 1 + x * x foo x = 1 + (0 - x) foo x = 1 + (1 - x) foo x = x * (x + x) foo x = x * (x * x) foo x = x * (x - 1) foo x = x * (0 - x) foo x = x * (1 - x) foo x = x - (x + x) foo x = x - (x + 1) foo x = x - x * x foo x = 0 - (x + x) foo x = 0 - (x + 1) foo x = 1 - (x + x) foo x = 1 - (x + 1) foo x = 1 - x * x foo 1 = 0 foo x = x + x foo 1 = 0 foo x = x + 1 foo 1 = 0 foo x = x * x foo 1 = 0 foo x = 0 - 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 0 = 0 foo x = x * x - 1 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 + x * x foo 0 = 0 foo x = 1 + (0 - x) foo 0 = 0 foo x = 1 + (1 - x) foo 0 = 0 foo x = x - (x + 1) foo 0 = 0 foo x = 0 - (x + 1) foo 0 = 0 foo x = 1 - (x + x) foo 0 = 0 foo x = 1 - x * x foo 0 = 1 foo x = x * x - 1 foo 0 = 1 foo x = x + (x + x) foo 0 = 1 foo x = x + x * x foo 0 = 1 foo x = x + (x - 1) foo 0 = 1 foo x = 1 + (x + 1) foo 0 = 1 foo x = 1 + (1 - x) foo 0 = 1 foo x = x * (x + x) foo 0 = 1 foo x = x * (x * x) foo 0 = 1 foo x = x * (x - 1) foo 0 = 1 foo x = x * (0 - x) foo 0 = 1 foo x = x * (1 - x) foo 0 = 1 foo x = x - (x + x) foo 0 = 1 foo x = x - (x + 1) foo 0 = 1 foo x = x - x * x foo 0 = 1 foo x = 0 - (x + x) foo 0 = 1 foo x = 0 - (x + 1) foo 0 = 1 foo x = 1 - (x + 1) foo 0 = 0 foo 1 = 0 foo x = x + 1 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 = 1 - x foo 0 = 1 foo 1 = 0 foo x = x + x foo 0 = 1 foo 1 = 0 foo x = x * x foo 0 = 1 foo 1 = 0 foo x = 0 - 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 = 0 - x Candidates for: ? :: Int -> Int -> Int pruning with 13/34 rules [3,3,9,18,60,162,516,1587,5148] direct candidates, 0 duplicates [3,8,25,71,205,632,1976,6067,19140] pattern candidates, 0 duplicates rules: x * 0 == 0 0 * x == 0 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) (x + y) + z == x + (y + z) (x + y) + z == y + (x + z) (x + x) * y == x * (y + y) equations: y * x == x * y 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 + (x + z) == x + (y + z) z + (x + y) == x + (y + z) z + (y + x) == x + (y + z) (z + y) * x == x * (y + z) z * y + x == x + y * z y * (x + x) == x * (y + y) y + dec (dec x) == x + dec (dec y) dec (dec x) + y == x + dec (dec y) dec (dec y) + x == dec (dec x) + 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 = 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 (x * x) x ? y = dec (x * y) x ? y = dec (y * 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 ? 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 (x * x)) x ? y = dec (dec (x * y)) x ? y = dec (dec (y * y)) x ? y = dec (dec (dec (dec x))) x ? y = dec (dec (dec (dec y))) x ? y = dec (dec (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 = x + (x + x) x ? y = x + (x + y) x ? y = x + (y + 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 = x + dec (dec 0) x ? y = y + (x + x) x ? y = y + (x + y) x ? y = y + (y + 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 = y + dec (dec 0) x ? y = x * (x + x) x ? y = x * (x + y) x ? y = x * (y + 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 = x * dec (dec 0) x ? y = y * (x + x) x ? y = y * (x + y) x ? y = y * (y + 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 = 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 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 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 = 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 = 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 (x * x) x ? y = dec (x * y) x ? y = dec (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 ? 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 = y + 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 = x * x 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 = 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 = y + y 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 + y 0 ? x = 0 x ? y = y + 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 = dec x x ? y = dec x 0 ? x = x + x x ? y = x 0 ? x = x + x x ? y = y 0 ? x = x + x x ? y = 0 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 x 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 y ? x 0 ? x = x x ? y = x ? dec y 0 ? x = x x ? y = y ? dec x 0 ? x = x x ? y = y ? dec y 0 ? x = x x ? y = dec x ? x 0 ? x = x x ? y = dec x ? y 0 ? x = x x ? y = dec x ? 0 0 ? x = x x ? y = dec y ? x x ? y = dec (dec (x * x)) x ? y = dec (dec (x * y)) x ? y = dec (dec (y * y)) x ? y = dec (dec (dec (dec x))) x ? y = dec (dec (dec (dec y))) x ? y = dec (x * dec x) x ? y = dec (x * dec y) x ? y = dec (y * dec x) x ? y = dec (y * dec y) x ? y = x + (x + x) x ? y = x + (x + y) x ? y = x + (y + 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 + 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 = x * (x + x) x ? y = x * (x + y) x ? y = x * (y + 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 * (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 ? y = dec x * dec x x ? y = dec x * dec y x ? y = dec y * dec y x ? 0 = x x ? y = dec (x * x) x ? 0 = x x ? y = dec (x * y) x ? 0 = x x ? y = dec (y * 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 = 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 (x * x) x ? 0 = 0 x ? y = dec (x * y) x ? 0 = 0 x ? y = dec (y * 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 = 0 x ? y = x * dec x x ? 0 = 0 x ? y = x * 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 = 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 = 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 (x * x) x ? y = x x ? 0 = dec (x * x) x ? y = y x ? 0 = dec (x * 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 = 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 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 (x * x) 0 ? x = x x ? y = dec (x * y) 0 ? x = x x ? y = dec (y * y) 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 = 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 (x * x) 0 ? x = 0 x ? y = dec (x * y) 0 ? x = 0 x ? y = dec (y * 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 = 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 = 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 = 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 (x * x) x ? y = x 0 ? x = dec (x * x) x ? y = y 0 ? x = dec (x * 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 = 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 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 = y + y 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 * x 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 = 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 = y + 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 + 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 = 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 = 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 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,1,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 xs = xs ++ xs goo [] = [] goo (x:xs) = x:xs goo [] = [] goo (x:xs) = [x] goo [] = [] goo (x:xs) = xs ++ xs goo [] = [] goo (x:xs) = x:goo xs goo [] = [] goo (x:xs) = xs ++ goo xs goo [] = [] goo (x:xs) = goo xs ++ xs goo xs = xs ++ (xs ++ xs) goo [] = [] goo (x:xs) = goo xs ++ goo xs goo [] = [] goo (x:xs) = x:x:xs goo [] = [] goo (x:xs) = [x,x] goo [] = [] goo (x:xs) = x:(xs ++ xs) goo [] = [] goo (x:xs) = xs ++ (x:xs) goo [] = [] goo (x:xs) = xs ++ [x] goo [] = [] goo (x:xs) = xs ++ (xs ++ xs) Candidates for: ?? :: [Int] -> [Int] -> [Int] pruning with 4/4 rules [3,0,4,0,8,0,16,0,32] direct candidates, 0 duplicates [3,8,15,45,127,268,845,1565,5692] 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 [] ?? 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 ?? 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: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 ?? [] 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 [] ?? [] = [] [] ?? (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 ?? [] [] ?? [] = [] [] ?? (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 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) ?? ys xs ?? [] = xs xs ?? (x:ys) = (x:ys) ?? ys xs ?? [] = xs xs ?? (x:ys) = [x] ?? ys 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 (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 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 ?? 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 ?? 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 ?? 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 ?? 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 ?? 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 ?? 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 ?? 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 ?? 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 ?? 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 ?? 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 ?? [] [] ?? 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 ?? [] [] ?? 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 ?? [] [] ?? 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 ?? [] ++ 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 [] ?? 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 ?? [] [] ?? 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 ?? [] [] ?? 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 ?? [] [] ?? 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 ?? [] ++ 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 [] ?? 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 ?? [] [] ?? [] = [] [] ?? (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 ++ xs [] ?? 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,0,0,0,0,0,0] direct candidates, 0 duplicates [3,3,0,0,0,0,0,0,0] pattern candidates, 0 duplicates rules: not False == True not True == False p && p == p p || p == p not (not p) == p p && False == False p && True == p False && p == False True && p == p p || False == p p || True == True False || p == p True || p == True not (p && q) == not p || not q not (p && q) == not q || not p not (p || q) == not p && not q not (p || q) == not q && not p p && not p == False not p && p == False p || not p == True not p || p == True (p && q) && r == p && (q && r) (p && q) && r == q && (p && r) (p || q) || r == p || (q || r) (p || q) || r == q || (p || r) p && (p && q) == p && q p && (q && p) == p && q p && (q && p) == q && p p || (p || q) == p || q p || (q || p) == p || q p || (q || p) == q || p p && (p || q) == p p && (q || p) == p (p || q) && p == p (p || q) && q == q p || p && q == p p || q && p == p p && q || p == p p && q || q == q equations: q && p == p && q q || p == p || q q && (p && r) == p && (q && r) r && (p && q) == p && (q && r) r && (q && p) == p && (q && r) q || (p || r) == p || (q || r) r || (p || q) == p || (q || r) r || (q || p) == p || (q || r) (r || q) && p == p && (q || r) r && q || p == p || q && r direct candidates: ton p = p ton p = False ton p = True ton p = not p pattern candidates: ton p = p ton p = False ton p = True ton p = not p ton False = False ton True = True ton False = True ton True = False Candidates for: &| :: Bool -> Bool -> Bool pruning with 39/49 rules [4,2,2,4,2,16,18,60,120] 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 && (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) 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,6,11,50,98,344,792,2956,6945] 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 = 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` x) 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` x) 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 (x `mod` y) x 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` y) x 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` y) x 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` x) 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` x) 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 (x `mod` y) x 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 (y `mod` y) x 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 = x gcd x y = gcd (0 `mod` y) x 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` x 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 = x `mod` 0 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 = 0 `mod` x gcd x y = 0 `mod` x 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