functor (X : Set.OrderedType->
  sig
    type t
    type elt = X.t
    module Leaf :
      sig
        type t
        type elt = elt
        val empty : t
        val add : t -> Index_intf.term -> elt -> t
        val remove : t -> Index_intf.term -> elt -> t
        val is_empty : t -> bool
        val iter : t -> (Index_intf.term -> elt -> unit) -> unit
        val fold : t -> '-> ('-> Index_intf.term -> elt -> 'a) -> 'a
        val size : t -> int
        val fold_unify :
          ?subst:Index_intf.subst ->
          t Scoped.t ->
          Index_intf.term Scoped.t ->
          (Index_intf.term * elt * Index_intf.subst) Sequence.t
        val fold_match :
          ?subst:Index_intf.subst ->
          t Scoped.t ->
          Index_intf.term Scoped.t ->
          (Index_intf.term * elt * Index_intf.subst) Sequence.t
        val fold_matched :
          ?subst:Index_intf.subst ->
          t Scoped.t ->
          Index_intf.term Scoped.t ->
          (Index_intf.term * elt * Index_intf.subst) Sequence.t
      end
    val name : string
    val empty : unit -> t
    val is_empty : t -> bool
    val size : t -> int
    val add : t -> Index_intf.term -> elt -> t
    val add_seq : t -> (Index_intf.term * elt) Sequence.t -> t
    val add_list : t -> (Index_intf.term * elt) list -> t
    val remove : t -> Index_intf.term -> elt -> t
    val iter : t -> (Index_intf.term -> elt -> unit) -> unit
    val fold : t -> ('-> Index_intf.term -> elt -> 'a) -> '-> 'a
    val retrieve_unifiables :
      ?subst:Index_intf.subst ->
      t Scoped.t ->
      Index_intf.term Scoped.t ->
      (Index_intf.term * elt * Index_intf.subst) Sequence.t
    val retrieve_generalizations :
      ?subst:Index_intf.subst ->
      t Scoped.t ->
      Index_intf.term Scoped.t ->
      (Index_intf.term * elt * Index_intf.subst) Sequence.t
    val retrieve_specializations :
      ?subst:Index_intf.subst ->
      t Scoped.t ->
      Index_intf.term Scoped.t ->
      (Index_intf.term * elt * Index_intf.subst) Sequence.t
    val to_dot : elt CCFormat.printer -> t CCFormat.printer
    val default_fp : Fingerprint.fingerprint_fun
    val empty_with : Fingerprint.fingerprint_fun -> t
    val get_fingerprint : t -> Fingerprint.fingerprint_fun
  end