module M : Map.S with type key = int
= Map.Make(OT)
-type 'a bag = 'a unit_clause M.t
+type 'a bag = int
+ * (('a unit_clause * bool) M.t)
+
+ let add_to_bag (_,lit,vl,proof) (id,bag) =
+ let id = id+1 in
+ let clause = (id, lit, vl, proof) in
+ let bag = M.add id (clause,false) bag in
+ (id,bag), clause
+ ;;
+
+ let replace_in_bag ((id,_,_,_),_ as cl) (max_id,bag) =
+ let bag = M.add id cl bag in
+ (max_id,bag)
+ ;;
+
+ let get_from_bag id (_,bag) =
+ M.find id bag
+ ;;
+
+ let empty_bag = (0,M.empty);;
module type Blob =
sig
val compare : t -> t -> int
val eqP : t
val pp : t -> string
- val embed : t -> t foterm
- val saturate : t -> t -> t foterm * t foterm
- val mk_proof : t bag -> int -> int list -> t
+ type input
+ val embed : input -> t foterm
+ val saturate : input -> input -> t foterm * t foterm
end