X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Ftactics%2Fparamodulation%2Fequality_indexing.ml;h=19aae0d297b75b88d7a0b68495829e2e92e90c4b;hb=HEAD;hp=4c07731d51f3bb4e46b2c58aa1dce78e181800d4;hpb=fd65a0a393bfb43d88ff936f40f045511e900e26;p=helm.git diff --git a/helm/software/components/tactics/paramodulation/equality_indexing.ml b/helm/software/components/tactics/paramodulation/equality_indexing.ml index 4c07731d5..19aae0d29 100644 --- a/helm/software/components/tactics/paramodulation/equality_indexing.ml +++ b/helm/software/components/tactics/paramodulation/equality_indexing.ml @@ -27,38 +27,37 @@ module type EqualityIndex = sig - module PosEqSet : Set.S with type elt = Utils.pos * Inference.equality - val arities : (Cic.term, int) Hashtbl.t - type key = Cic.term - type t = Discrimination_tree.DiscriminationTreeIndexing(PosEqSet).t + module PosEqSet : Set.S with type elt = Utils.pos * Equality.equality + type t = Discrimination_tree.Make(Cic_indexable.CicIndexable)(PosEqSet).t val empty : t - val retrieve_generalizations : t -> key -> PosEqSet.t - val retrieve_unifiables : t -> key -> PosEqSet.t + val retrieve_generalizations : t -> Cic.term -> PosEqSet.t + val retrieve_unifiables : t -> Cic.term -> PosEqSet.t val init_index : unit -> unit - val remove_index : t -> Inference.equality -> t - val index : t -> Inference.equality -> t - val in_index : t -> Inference.equality -> bool + val remove_index : t -> Equality.equality -> t + val index : t -> Equality.equality -> t + val in_index : t -> Equality.equality -> bool + val iter : t -> (Cic_indexable.CicIndexable.constant_name Discrimination_tree.path -> PosEqSet.t -> unit) -> unit end module DT = struct module OrderedPosEquality = struct - type t = Utils.pos * Inference.equality - let compare = Pervasives.compare + type t = Utils.pos * Equality.equality + let compare (p1,e1) (p2,e2) = + let rc = Pervasives.compare p1 p2 in + if rc = 0 then Equality.compare e1 e2 else rc end module PosEqSet = Set.Make(OrderedPosEquality);; - include Discrimination_tree.DiscriminationTreeIndexing(PosEqSet) + include Discrimination_tree.Make(Cic_indexable.CicIndexable)(PosEqSet) (* DISCRIMINATION TREES *) - let init_index () = - Hashtbl.clear arities; - ;; + let init_index () = () ;; let remove_index tree equality = - let _, _, (_, l, r, ordering), _ = equality in + let _, _, (_, l, r, ordering), _,_ = Equality.open_equality equality in match ordering with | Utils.Gt -> remove_index tree l (Utils.Left, equality) | Utils.Lt -> remove_index tree r (Utils.Right, equality) @@ -67,7 +66,7 @@ struct remove_index tree l (Utils.Left, equality) let index tree equality = - let _, _, (_, l, r, ordering), _ = equality in + let _, _, (_, l, r, ordering), _,_ = Equality.open_equality equality in match ordering with | Utils.Gt -> index tree l (Utils.Left, equality) | Utils.Lt -> index tree r (Utils.Right, equality) @@ -77,9 +76,9 @@ struct let in_index tree equality = - let _, _, (_, l, r, ordering), _ = equality in + let _, _, (_, l, r, ordering), _,_ = Equality.open_equality equality in let meta_convertibility (pos,equality') = - Inference.meta_convertibility_eq equality equality' + Equality.meta_convertibility_eq equality equality' in in_index tree l meta_convertibility || in_index tree r meta_convertibility @@ -88,22 +87,22 @@ struct module PT = struct module OrderedPosEquality = struct - type t = Utils.pos * Inference.equality - let compare = Pervasives.compare + type t = Utils.pos * Equality.equality + let compare (p1,e1) (p2,e2) = + let rc = Pervasives.compare p1 p2 in + if rc = 0 then Equality.compare e1 e2 else rc end module PosEqSet = Set.Make(OrderedPosEquality);; - include Discrimination_tree.DiscriminationTreeIndexing(PosEqSet) + include Discrimination_tree.Make(Cic_indexable.CicIndexable)(PosEqSet) (* DISCRIMINATION TREES *) - let init_index () = - Hashtbl.clear arities; - ;; + let init_index () = () ;; let remove_index tree equality = - let _, _, (_, l, r, ordering), _ = equality in + let _, _, (_, l, r, ordering), _,_ = Equality.open_equality equality in match ordering with | Utils.Gt -> remove_index tree l (Utils.Left, equality) | Utils.Lt -> remove_index tree r (Utils.Right, equality) @@ -112,7 +111,7 @@ module PT = remove_index tree l (Utils.Left, equality) let index tree equality = - let _, _, (_, l, r, ordering), _ = equality in + let _, _, (_, l, r, ordering), _,_ = Equality.open_equality equality in match ordering with | Utils.Gt -> index tree l (Utils.Left, equality) | Utils.Lt -> index tree r (Utils.Right, equality) @@ -122,9 +121,9 @@ module PT = let in_index tree equality = - let _, _, (_, l, r, ordering), _ = equality in + let _, _, (_, l, r, ordering), _,_ = Equality.open_equality equality in let meta_convertibility (pos,equality') = - Inference.meta_convertibility_eq equality equality' + Equality.meta_convertibility_eq equality equality' in in_index tree l meta_convertibility || in_index tree r meta_convertibility end