]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/cic/discrimination_tree.mli
ng_disambiguation ng_kernel ng_refiner disambiguation: svn:ignore fixed
[helm.git] / helm / software / components / cic / discrimination_tree.mli
index 61631f47869059e0fc0830498d399d83b3b9afab..a311293068247737d0c0232e7c5dae0722e6ce8b 100644 (file)
  * http://cs.unibo.it/helm/.
  *)
 
-module DiscriminationTreeIndexing :
-  functor (A : Set.S) ->
+
+type 'a path_string_elem = 
+  | Constant of 'a * int (* name, arity *)
+  | Bound of int * int (* rel, arity *)
+  | Variable (* arity is 0 *)
+  | Proposition (* arity is 0 *) 
+  | Datatype (* arity is 0 *) 
+  | Dead (* arity is 0 *) 
+;;  
+
+type 'a path = ('a path_string_elem) list;;
+
+module type Indexable = sig
+  type input
+  type constant_name
+  val compare: 
+    constant_name path_string_elem -> 
+    constant_name path_string_elem -> int
+  val string_of_path : constant_name path -> string
+  val path_string_of : input -> constant_name path
+end
+
+module CicIndexable : Indexable 
+with type input = Cic.term and type constant_name = UriManager.uri
+
+module type DiscriminationTree  =
     sig
 
-      val arities : (Cic.term, int) Hashtbl.t 
+      type input 
+      type data
+      type dataset
+      type constant_name
+      type t
 
-      type key = Cic.term
-      type t 
+      val iter : t -> (constant_name path -> dataset -> unit) -> unit
 
       val empty : t
-      val index : t -> key -> A.elt -> t
-      val remove_index : t -> key -> A.elt -> t
-      val in_index : t -> key -> (A.elt -> bool) -> bool
-      val retrieve_generalizations : t -> key -> A.t
-      val retrieve_unifiables : t -> key -> A.t
+      val index : t -> input -> data -> t
+      val remove_index : t -> input -> data -> t
+      val in_index : t -> input -> (data -> bool) -> bool
+      val retrieve_generalizations : t -> input -> dataset
+      val retrieve_unifiables : t -> input -> dataset
     end
 
 
+module Make (I : Indexable) (A : Set.S) : DiscriminationTree 
+with type constant_name = I.constant_name and type input = I.input
+and type data = A.elt and type dataset = A.t
+