module Make(Th: Theory_intf)() : sig type 'f sat_state = { eval : 'f -> bool; ... } type ('c,'p) unsat_state = { conflict: unit -> 'c; proof : unit -> 'p } type res = Sat of formula sat_state | Unsat of (clause, proof) unsat_state val assume : ?tag:int -> atom list list -> unit val solve : ?assumptions:atom list -> unit -> res end