+type 'a bag = int
+ * (('a unit_clause * bool * int) 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,0) 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
+ type t
+ val eq : t -> t -> bool
+ val compare : t -> t -> int
+ val eqP : t
+ val is_eq: t foterm -> (t foterm* t foterm *t foterm) option
+ val pp : t -> string
+ type input
+ val embed : input -> t foterm
+ val saturate : input -> input -> t foterm * t foterm
+ end
+