X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_paramodulation%2Fterms.ml;h=9a225fd27b2807f3a3ea37d57276eb93332e384a;hb=4244a4d70b9ab2fece0ff5b63506f6d323cbfbe2;hp=1d1465f9e6d7cfe5525792835ddafed373f44706;hpb=f7bfbdc706a75256c0e9b15ecc242175f562eb71;p=helm.git diff --git a/helm/software/components/ng_paramodulation/terms.ml b/helm/software/components/ng_paramodulation/terms.ml index 1d1465f9e..9a225fd27 100644 --- a/helm/software/components/ng_paramodulation/terms.ml +++ b/helm/software/components/ng_paramodulation/terms.ml @@ -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 @@ -56,7 +64,26 @@ module OT = module M : Map.S with type key = int = Map.Make(OT) -type 'a bag = ('a unit_clause * bool) M.t +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