X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_paramodulation%2Fterms.ml;h=3947107eab8bfeea1ba1866f49b60fd9e3328e68;hb=08257fe2901ec7ce3b584f73e52a383216ec1fb8;hp=aefbc01a864ea3a870746f11d7273f27d5eef8ff;hpb=a872dba2b03e27967d5b9b51e950e85967340e52;p=helm.git diff --git a/helm/software/components/ng_paramodulation/terms.ml b/helm/software/components/ng_paramodulation/terms.ml index aefbc01a8..3947107ea 100644 --- a/helm/software/components/ng_paramodulation/terms.ml +++ b/helm/software/components/ng_paramodulation/terms.ml @@ -18,7 +18,7 @@ type 'a foterm = type 'a substitution = (int * 'a foterm) list -type comparison = Lt | Eq | Gt | Incomparable +type comparison = Lt | Eq | Gt | Incomparable | Invertible type rule = Superposition | Demodulation type direction = Left2Right | Right2Left | Nodir @@ -47,6 +47,14 @@ type 'a unit_clause = type 'a passive_clause = int * 'a unit_clause (* weight * equation *) +let vars_of_term t = + let rec aux acc = function + | Leaf _ -> acc + | Var i -> if (List.mem i acc) then acc else i::acc + | Node l -> List.fold_left aux acc l + in aux [] t +;; + module OT = struct type t = int @@ -57,16 +65,16 @@ module M : Map.S with type key = int = Map.Make(OT) type 'a bag = int - * (('a unit_clause * bool) M.t) + * (('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) bag 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 replace_in_bag ((id,_,_,_),_,_ as cl) (max_id,bag) = let bag = M.add id cl bag in (max_id,bag) ;;