(* To compare two “'a list”s *) let eq a b = let bel b x y = let rec g c = c<>[] & (let (a, b)::q = c in (a==x & b==y) or g q) in g b in let rec e a b h = ((bel h a b) or (match a, b with [], [] -> 1<2 | x::p, y::q -> (x=y & e p q ((a, b)::h)) | _ -> 2<1)) in e a b [] in let rec a = 2::(4::b) and b = 5::a in let rec x = 2::(4::(5::x)) in eq a x;; (* [eq [] []; eq [3] []; eq [] [6]; eq [4] [4]; eq [3; 6] [3; 6]];; *)