leftmost :: Tree -> Int
-- testing 360 combinations of argument values
-- pruning with 3/3 rules
-- looking through 1 candidates of size 1
-- looking through 1 candidates of size 2
-- looking through 2 candidates of size 3
-- looking through 0 candidates of size 4
-- looking through 0 candidates of size 5
-- looking through 4 candidates of size 6
-- 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
rightmost :: Tree -> Int
-- testing 360 combinations of argument values
-- pruning with 3/3 rules
-- looking through 1 candidates of size 1
-- looking through 1 candidates of size 2
-- looking through 2 candidates of size 3
-- looking through 0 candidates of size 4
-- looking through 0 candidates of size 5
-- looking through 4 candidates of size 6
-- 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
size :: Tree -> Int
-- testing 360 combinations of argument values
-- pruning with 4/8 rules
-- looking through 2 candidates of size 1
-- looking through 4 candidates of size 2
-- looking through 5 candidates of size 3
-- looking through 19 candidates of size 4
-- looking through 35 candidates of size 5
-- looking through 66 candidates of size 6
-- looking through 163 candidates of size 7
-- looking through 311 candidates of size 8
-- tested 428 candidates
size Leaf = 0
size (Node t1 x t2) = size t1 + (size t2 + 1)
height :: Tree -> Int
-- testing 360 combinations of argument values
-- pruning with 49/65 rules
-- looking through 3 candidates of size 1
-- looking through 9 candidates of size 2
-- looking through 8 candidates of size 3
-- looking through 59 candidates of size 4
-- looking through 114 candidates of size 5
-- looking through 472 candidates of size 6
-- looking through 1440 candidates of size 7
-- looking through 5781 candidates of size 8
-- tested 4171 candidates
height Leaf = -1
height (Node t1 x t2) = max (height t1) (height t2) + 1
mem :: Int -> Tree -> Bool
-- testing 360 combinations of argument values
-- pruning with 11/17 rules
-- 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 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 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
mem x Leaf = False
mem x (Node t1 y t2) = mem x t1 || (x == y || mem x t2)
insert :: Int -> Tree -> Tree
-- testing 360 combinations of argument values
-- pruning with 6/7 rules
-- looking through 2 candidates of size 1
-- looking through 2 candidates of size 2
-- looking through 0 candidates of size 3
-- looking through 10 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 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
cannot conjure