let mytheory2 = ref [
`(ZIP [] [] = []) /\ (ZIP (CONS h1 t1) (CONS h2 t2) = CONS (h1,h2) (ZIP t1 t2))`;
`~(CONS h t = [])`;
`(LAST [h:A] = h) /\ (LAST (CONS h (CONS k t)) = LAST (CONS k t))`;
`APPEND (l:A list) [] = l`;
`APPEND (l:A list) (APPEND m n) = APPEND (APPEND l m) n`;
`REVERSE (APPEND (l:A list) m) = APPEND (REVERSE m) (REVERSE l)`;
`REVERSE(REVERSE (l:A list)) = l`;
`(CONS h1 t1 = CONS h2 t2) <=> (h1 = h2) /\ (t1 = t2)`;
`LENGTH(APPEND (l:A list) (m:A list)) = LENGTH l + LENGTH m`;
`MAP (f:A->B) (APPEND l1 l2) = APPEND (MAP f l1) (MAP f l2)`;
`LENGTH (MAP (f:A->B) l) = LENGTH l`;
`(LENGTH (l:A list) = 0) <=> (l = [])`;
`(LENGTH l = SUC n) /\ (l = CONS h t) ==> (LENGTH t = n)`;
`ALL (\x. f x = g x) l ==> (MAP f l = MAP g l)`;
`(MEM x l /\ P x ==> Q x) /\ ALL P l ==> ALL Q l`;
`~(EX P l) <=> ALL (\x. ~(P x)) l`;
`~(ALL P l) <=> EX (\x. ~(P x)) l`;
`ALL P (MAP f l) <=> ALL (P o f) l`;
`ALL (\x. T) l`;
`ALL2 (\x y. f x = f y) l m ==> (MAP f l = MAP f m)`;
`ALL2 P (MAP f l) l <=> ALL (\a. P (f a) a) l`;
`ALL (\x. f(x) = x) l ==> (MAP f l = l)`;
`ALL2 (\x y. P x /\ Q x y) l m <=> ALL P l /\ ALL2 Q l m`;
`ITLIST f (APPEND l1 l2) a = ITLIST f l1 (ITLIST f l2 a)`;
`ITLIST f (APPEND l [a]) b = ITLIST f l (f a b)`;
`ALL (\x. P x ==> Q x) l /\ ALL P l ==> ALL Q l`;
`ALL P l /\ ALL Q l <=> ALL (\x. P x /\ Q x) l`;
`(MEM x l /\ P x ==> Q x) /\ EX P l ==> EX Q l`;
`(MEM x l ==> P x) <=> ALL P l`;
`LENGTH(REPLICATE n x) = n`;
`EX P (MAP f l) <=> EX (P o f) l`;
`(ALL (P x) l) <=> ALL (\s. P x s) l`;
`MEM x (APPEND l1 l2) <=> MEM x l1 \/ MEM x l2`;
`FILTER P (APPEND l1 l2) = APPEND (FILTER P l1) (FILTER P l2)`;
`FILTER P (MAP f l) = MAP f (FILTER (P o f) l)`;
`MEM x (FILTER P l) <=> P x /\ MEM x l`;
`(LENGTH l1 = LENGTH l2) ==> (MAP FST (ZIP l1 l2) = l1)`;
`(LENGTH l1 = LENGTH l2) ==> (MAP SND (ZIP l1 l2) = l2)`;
`MEM (x,ASSOC x l) l <=> MEM x (MAP FST l)`;
`ALL P (APPEND l1 l2) <=> ALL P l1 /\ ALL P l2`;
`n < LENGTH l ==> MEM (EL n l) l`;
`ALL2 P (MAP f l) (MAP g m) = ALL2 (\x y. P (f x) (g y)) l m`;
`ALL2 P l m /\ ALL2 Q l m <=> ALL2 (\x y. P x y /\ Q x y) l m`;
`ALL2 P l l <=> ALL (\x. P x x) l`;
`(APPEND l m = []) <=> (l = []) /\ (m = [])`;
`(LENGTH l = LENGTH m) ==> (LENGTH(MAP2 f l m) = LENGTH m)`;
`(P x ==> Q x) ==> ALL P l ==> ALL Q l`;
`((P:A->B->bool) x y ==> Q x y) ==> ALL2 P l l' ==> ALL2 Q l l'`
]
