let neg = function | True -> False | False -> True | Comp (c, Eq, (Elem (x, Constr))) when Hstring.equal x Term.hfalse -> Comp (c, Eq, (Elem (Term.htrue, Constr))) | Comp (c, Eq, (Elem (x, Constr))) when Hstring.equal x Term.htrue -> Comp (c, Eq, (Elem (Term.hfalse, Constr))) | Comp (x, Eq, y) -> Comp (x, Neq, y) | Comp (x, Lt, y) -> Comp (y, Le, x) | Comp (x, Le, y) -> Comp (y, Lt, x) | Comp (x, Neq, y) -> Comp (x, Eq, y) | _ -> assert false