-val eval_form : (StateSet.t * StateSet.t) -> t -> bool
-(** [eval_form s_1,s_2 F] evaluates the formula [F] on [(s_1,s_2)] *)
+
+module HcEval : sig
+ include Sigs.HashedType
+end
+module HcInfer : sig
+ include Sigs.HashedType
+end
+module HashEval : Hashtbl.S
+module HashInfer : Hashtbl.S
+type hcEval = bool HashEval.t
+type hcInfer = bool HashInfer.t
+(** Optimization: hconsigned eval and infer *)
+
+val eval_form : (StateSet.t * StateSet.t * StateSet.t) -> t -> hcEval -> bool
+(** [eval_form (s,sf,sn) F] evaluates the formula [F] on [(s,sf,sn)] *)
+
+val infer_form : (StateSet.t * StateSet.t) -> (StateSet.t * StateSet.t) ->
+ (StateSet.t * StateSet.t) -> t -> hcInfer -> bool
+(** [eval_form S Sf Sn F] infers S; (S1,S2) |- F *)