]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/components/ng_paramodulation/orderings.ml
update in basic_2
[helm.git] / matita / components / ng_paramodulation / orderings.ml
index b457832453dd5582b5d44c95c9c292fb68578ac0..d24a5742eeed196035d3c97c9f181e6ab0d35054 100644 (file)
@@ -363,10 +363,16 @@ module LPO (B : Terms.Blob) = struct
   let compute_unit_clause_weight = compute_unit_clause_weight;;
   let compute_goal_weight = compute_goal_weight;;
 
+  (*CSC: beware! Imperative cache! *)
+  let cache = Hashtbl.create 101
+
   let rec lpo_le s t = 
     eq_foterm s t || lpo_lt s t 
   
   and lpo_lt s t =
+    try Hashtbl.find cache (s,t)
+    with
+    Not_found -> let res =
     match s,t with
       | _, Terms.Var _ -> false
       | Terms.Var i,_ ->
@@ -399,13 +405,18 @@ module LPO (B : Terms.Blob) = struct
                 compare_args tl1 tl2
             | _ -> assert false
            end
+   in
+    Hashtbl.add cache (s,t) res; res
   ;;
 
   let lpo s t =
+    let res =
     if eq_foterm s t then XEQ
     else if lpo_lt s t then XLT
     else if lpo_lt t s then XGT
     else XINCOMPARABLE
+    in
+     Hashtbl.clear cache; res
   ;;