Evaluation anf inference of formulas are now hconsed (in Formula).
[tatoo.git] / src / formula.mli
index bea2ff5..14e0f80 100644 (file)
@@ -52,10 +52,24 @@ val compare : t -> t -> int
 val size : t -> int
 (** Syntactic size of the formula *)
 
-val eval_form : (StateSet.t * StateSet.t * StateSet.t) -> t -> bool
+
+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 -> bool
+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 *)
 
 val print : Format.formatter -> t -> unit