sig
  type term =
      Term of string * Term.term array * Term.term array
    | SVar of string * int * Term.term * Term.term array
    | TVar of string * Term.term option
  val fun_type_name : string
  val assign_name : string
  val symbol_of_term : Term.term -> string
  val term_str : Term.term -> string
  val short_term : (Term.term -> string) Pervasives.ref
  val suffix : int -> Term.term -> Term.term
  val equal_mod_tvars : Term.term -> Term.term -> bool
  val size_up_to : int -> Term.term -> int
  val s_vars_in_term : string list -> Term.term -> string list
  val t_vars_in_term : string list -> Term.term -> string list
  val has_s_var : Term.term -> bool
  val has_t_var : Term.term -> bool
  val fn_apply : int -> ('-> 'a) -> '-> 'a
  val add_logic_name : string -> unit
  type t_subst
  type s_subst
  type substs = Term.s_subst * Term.t_subst
  exception UNIFY
  val empty_s_sb : Term.s_subst
  val empty_t_sb : Term.t_subst
  val empty_sbs : Term.substs
  val assoc_t_sb : string -> Term.t_subst -> Term.term
  val assoc_s_sb : string -> Term.s_subst -> Term.term
  val apply_sbs : Term.substs -> Term.term -> Term.term
  val head_grounding : Term.term -> Term.term
  val types_of : Term.term -> Term.term array
  type position
  val position_str : Term.position -> string
  val subst_t_pos : Term.position -> subt:Term.term -> Term.term -> Term.term
  val get_t_pos : Term.position -> Term.term -> Term.term
  type iter_s_subst
  type iter_t_subst
  type isubsts = Term.iter_s_subst * Term.iter_t_subst
  val empty_t_isb : Term.iter_t_subst
  val empty_s_isb : Term.iter_s_subst
  val empty_isbs : Term.isubsts
  type add_to_decls =
      Decls_OK
    | Decls_multi_glb of string * string * string
    | Decls_multi_lub of string * string * string
    | Decls_redundant_s of string * string
    | Decls_polyconflict
    | Decls_var
    | Decls_repeating of string
  type decls_set
  val create_decls : unit -> Term.decls_set
  val get_superclasses : Term.decls_set -> string -> Aux.Strings.t
  val get_subclasses : Term.decls_set -> string -> string list
  val get_decl : Term.decls_set -> string -> Term.term
  exception EXC_Decls_multi_lub of string * string * string
  val add_to_decls : Term.decls_set -> Term.term -> Term.add_to_decls
  val glb :
    Term.decls_set -> Term.term -> Term.term -> Term.isubsts * Term.term
  val aux_glb :
    Term.decls_set ->
    Term.isubsts -> Term.term -> Term.term -> Term.isubsts * Term.term
  val lub :
    Term.decls_set -> Term.term -> Term.term -> Term.isubsts * Term.term
  val aux_lub :
    Term.decls_set ->
    Term.isubsts -> Term.term -> Term.term -> Term.isubsts * Term.term
  val aux_glb_lub_cont :
    Term.decls_set -> Term.isubsts -> Term.isubsts -> Term.isubsts
  val isa_match :
    Term.decls_set ->
    ?for_rewrite:bool ->
    pattern:Term.term -> Term.term -> Term.substs * Term.position
  val equal_for_rewriting : Term.decls_set -> Term.term -> Term.term -> bool
  val isa_unify :
    Term.decls_set -> pattern:Term.term -> Term.term -> Term.isubsts
  val aux_isa_unify :
    Term.decls_set ->
    Term.isubsts -> pattern:Term.term -> Term.term -> Term.isubsts
  val is_superclass_of :
    Term.decls_set -> pattern:Term.term -> Term.term -> bool
  val mgu_iter : Term.decls_set -> Term.term -> Term.term -> Term.isubsts
  val aux_mgu_i :
    Term.decls_set -> Term.isubsts -> Term.term -> Term.term -> Term.isubsts
  val aux_mgu_i_cont :
    Term.decls_set -> Term.isubsts -> Term.isubsts -> Term.isubsts
  val apply_isbs : Term.isubsts -> Term.term -> Term.term
  val split_to_list : string -> Aux.split_result list
  val s_subst_str : Term.s_subst -> string
  val t_subst_str : Term.t_subst -> string
  val t_isubst_str : Term.iter_t_subst -> string
  val substs_str : Term.substs -> string
  val substs_fstr : (Term.term -> string) -> Term.substs -> string
  val isubsts_str : Term.isubsts -> string
  val isubsts_fstr : (Term.term -> string) -> Term.isubsts -> string
  val t_isubst_map :
    (Term.term -> Term.term) -> Term.iter_t_subst -> Term.iter_t_subst
  val s_isubst_map_some :
    (string * (int * Term.term) -> (string * (int * Term.term)) option) ->
    Term.iter_s_subst -> Term.iter_s_subst
  val isubsts_map : (Term.term -> Term.term) -> Term.isubsts -> Term.isubsts
  module HashableTerm :
    sig
      type t = Term.term
      val equal : Term.HashableTerm.t -> Term.HashableTerm.t -> bool
      val hash : Term.HashableTerm.t -> int
    end
  module TermHashtbl :
    sig
      type key = Term.HashableTerm.t
      type 'a t = 'Hashtbl.Make(HashableTerm).t
      val create : int -> 'Term.TermHashtbl.t
      val clear : 'Term.TermHashtbl.t -> unit
      val copy : 'Term.TermHashtbl.t -> 'Term.TermHashtbl.t
      val add : 'Term.TermHashtbl.t -> Term.TermHashtbl.key -> '-> unit
      val remove : 'Term.TermHashtbl.t -> Term.TermHashtbl.key -> unit
      val find : 'Term.TermHashtbl.t -> Term.TermHashtbl.key -> 'a
      val find_all : 'Term.TermHashtbl.t -> Term.TermHashtbl.key -> 'a list
      val replace :
        'Term.TermHashtbl.t -> Term.TermHashtbl.key -> '-> unit
      val mem : 'Term.TermHashtbl.t -> Term.TermHashtbl.key -> bool
      val iter :
        (Term.TermHashtbl.key -> '-> unit) -> 'Term.TermHashtbl.t -> unit
      val fold :
        (Term.TermHashtbl.key -> '-> '-> 'b) ->
        'Term.TermHashtbl.t -> '-> 'b
      val length : 'Term.TermHashtbl.t -> int
    end
end