sig
  type fingerprint_fun
  val fp3d : LogtkFingerprint.fingerprint_fun
  val fp3w : LogtkFingerprint.fingerprint_fun
  val fp4d : LogtkFingerprint.fingerprint_fun
  val fp4m : LogtkFingerprint.fingerprint_fun
  val fp4w : LogtkFingerprint.fingerprint_fun
  val fp5m : LogtkFingerprint.fingerprint_fun
  val fp6m : LogtkFingerprint.fingerprint_fun
  val fp7 : LogtkFingerprint.fingerprint_fun
  val fp7m : LogtkFingerprint.fingerprint_fun
  val fp16 : LogtkFingerprint.fingerprint_fun
  module Make :
    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 -> LogtkIndex.term -> elt -> t
            val remove : t -> LogtkIndex.term -> elt -> t
            val is_empty : t -> bool
            val iter : t -> (LogtkIndex.term -> elt -> unit) -> unit
            val fold : t -> '-> ('-> LogtkIndex.term -> elt -> 'a) -> 'a
            val size : t -> int
            val fold_unify :
              ?subst:LogtkIndex.subst ->
              t ->
              LogtkIndex.scope ->
              LogtkIndex.term ->
              LogtkIndex.scope ->
              '->
              ('-> LogtkIndex.term -> elt -> LogtkIndex.subst -> 'a) -> 'a
            val fold_match :
              ?allow_open:bool ->
              ?subst:LogtkIndex.subst ->
              t ->
              LogtkIndex.scope ->
              LogtkIndex.term ->
              LogtkIndex.scope ->
              '->
              ('-> LogtkIndex.term -> elt -> LogtkIndex.subst -> 'a) -> 'a
            val fold_matched :
              ?allow_open:bool ->
              ?subst:LogtkIndex.subst ->
              t ->
              LogtkIndex.scope ->
              LogtkIndex.term ->
              LogtkIndex.scope ->
              '->
              ('-> LogtkIndex.term -> elt -> LogtkIndex.subst -> 'a) -> 'a
          end
        val name : string
        val empty : unit -> t
        val is_empty : t -> bool
        val size : t -> int
        val add : t -> LogtkIndex.term -> elt -> t
        val remove : t -> LogtkIndex.term -> elt -> t
        val iter : t -> (LogtkIndex.term -> elt -> unit) -> unit
        val fold : t -> ('-> LogtkIndex.term -> elt -> 'a) -> '-> 'a
        val retrieve_unifiables :
          ?subst:LogtkIndex.subst ->
          t ->
          LogtkIndex.scope ->
          LogtkIndex.term ->
          LogtkIndex.scope ->
          '->
          ('-> LogtkIndex.term -> elt -> LogtkIndex.subst -> 'a) -> 'a
        val retrieve_generalizations :
          ?allow_open:bool ->
          ?subst:LogtkIndex.subst ->
          t ->
          LogtkIndex.scope ->
          LogtkIndex.term ->
          LogtkIndex.scope ->
          '->
          ('-> LogtkIndex.term -> elt -> LogtkIndex.subst -> 'a) -> 'a
        val retrieve_specializations :
          ?allow_open:bool ->
          ?subst:LogtkIndex.subst ->
          t ->
          LogtkIndex.scope ->
          LogtkIndex.term ->
          LogtkIndex.scope ->
          '->
          ('-> LogtkIndex.term -> elt -> LogtkIndex.subst -> 'a) -> 'a
        val to_dot : (Buffer.t -> elt -> unit) -> Buffer.t -> t -> unit
        val default_fp : LogtkFingerprint.fingerprint_fun
        val empty_with : LogtkFingerprint.fingerprint_fun -> t
        val get_fingerprint : t -> LogtkFingerprint.fingerprint_fun
      end
end