functor (Data : Hashtbl.HashedType->
  sig
    type t
    val empty : unit -> TopDown.S.Index.t
    val copy : TopDown.S.Index.t -> TopDown.S.Index.t
    val clear : TopDown.S.Index.t -> unit
    val add :
      TopDown.S.Index.t -> TopDown.S.T.t -> Data.t -> TopDown.S.Index.t
    val remove :
      TopDown.S.Index.t -> TopDown.S.T.t -> Data.t -> TopDown.S.Index.t
    val generalizations :
      ?oc:bool ->
      TopDown.S.Index.t ->
      TopDown.S.scope ->
      TopDown.S.T.t ->
      TopDown.S.scope -> (Data.t -> TopDown.S.Subst.t -> unit) -> unit
    val unify :
      ?oc:bool ->
      TopDown.S.Index.t ->
      TopDown.S.scope ->
      TopDown.S.T.t ->
      TopDown.S.scope -> (Data.t -> TopDown.S.Subst.t -> unit) -> unit
    val iter : TopDown.S.Index.t -> (TopDown.S.T.t -> Data.t -> unit) -> unit
    val size : TopDown.S.Index.t -> int
  end