functor (T : S->
  sig
    type t = T.t
    val ty_exn : TermTyped.??.-> TermTyped.??.t
    val const :
      ?loc:TermTyped.loc ->
      ty:TermTyped.??.-> TermTyped.id -> TermTyped.??.t
    val builtin :
      ?loc:TermTyped.loc ->
      ty:TermTyped.??.-> TermTyped.??.TI.Builtin.t -> TermTyped.??.t
    val var :
      ?loc:TermTyped.loc -> TermTyped.??.TermTyped.var -> TermTyped.??.t
    val app :
      ?loc:TermTyped.loc ->
      ty:TermTyped.??.->
      TermTyped.??.-> TermTyped.??.t list -> TermTyped.??.t
    val fun_ :
      ?loc:TermTyped.loc ->
      ty:TermTyped.??.->
      TermTyped.??.TermTyped.var -> TermTyped.??.-> TermTyped.??.t
    val mu :
      ?loc:TermTyped.loc ->
      TermTyped.??.TermTyped.var -> TermTyped.??.-> TermTyped.??.t
    val let_ :
      ?loc:TermTyped.loc ->
      TermTyped.??.TermTyped.var ->
      TermTyped.??.-> TermTyped.??.-> TermTyped.??.t
    val match_with :
      ?loc:TermTyped.loc ->
      ty:TermTyped.??.->
      TermTyped.??.-> TermTyped.??.TI.cases -> TermTyped.??.t
    val ite :
      ?loc:TermTyped.loc ->
      TermTyped.??.-> TermTyped.??.-> TermTyped.??.-> TermTyped.??.t
    val forall :
      ?loc:TermTyped.loc ->
      TermTyped.??.TermTyped.var -> TermTyped.??.-> TermTyped.??.t
    val exists :
      ?loc:TermTyped.loc ->
      TermTyped.??.TermTyped.var -> TermTyped.??.-> TermTyped.??.t
    val eq :
      ?loc:TermTyped.loc ->
      TermTyped.??.-> TermTyped.??.-> TermTyped.??.t
    val asserting :
      ?loc:TermTyped.loc ->
      TermTyped.??.-> TermTyped.??.t list -> TermTyped.??.t
    val true_ : TermTyped.??.t
    val mk_bind :
      ?loc:TermTyped.loc ->
      ty:TermTyped.??.->
      TI.Binder.t ->
      TermTyped.??.TermTyped.var -> TermTyped.??.-> TermTyped.??.t
    val ty_type : TermTyped.??.t
    val ty_prop : TermTyped.??.t
    val ty_unitype : TermTyped.??.t
    val ty_builtin : ?loc:TermTyped.loc -> TI.TyBuiltin.t -> TermTyped.??.t
    val ty_const : ?loc:TermTyped.loc -> TermTyped.id -> TermTyped.??.t
    val ty_app :
      ?loc:TermTyped.loc ->
      TermTyped.??.-> TermTyped.??.t list -> TermTyped.??.t
    val ty_arrow :
      ?loc:TermTyped.loc ->
      TermTyped.??.-> TermTyped.??.-> TermTyped.??.t
    val ty_arrow_l :
      ?loc:TermTyped.loc ->
      TermTyped.??.t list -> TermTyped.??.-> TermTyped.??.t
    val ty_var :
      ?loc:TermTyped.loc -> TermTyped.??.TermTyped.var -> TermTyped.??.t
    val ty_forall :
      ?loc:TermTyped.loc ->
      TermTyped.??.TermTyped.var -> TermTyped.??.-> TermTyped.??.t
    val ty_meta_var :
      ?loc:TermTyped.loc -> TermTyped.??.MetaVar.t -> TermTyped.??.t
    val head_sym : t -> TI.id
    val to_seq : t -> t Sequence.t
    val to_seq_vars : t -> t Var.t Sequence.t
    val to_seq_consts : t -> ID.t Sequence.t
    module VarSet :
      sig
        type elt = t Var.t
        type t
        val empty : t
        val is_empty : t -> bool
        val mem : elt -> t -> bool
        val add : elt -> t -> t
        val singleton : elt -> t
        val remove : elt -> t -> t
        val union : t -> t -> t
        val inter : t -> t -> t
        val diff : t -> t -> t
        val compare : t -> t -> int
        val equal : t -> t -> bool
        val subset : t -> t -> bool
        val iter : (elt -> unit) -> t -> unit
        val fold : (elt -> '-> 'a) -> t -> '-> 'a
        val for_all : (elt -> bool) -> t -> bool
        val exists : (elt -> bool) -> t -> bool
        val filter : (elt -> bool) -> t -> t
        val partition : (elt -> bool) -> t -> t * t
        val cardinal : t -> int
        val elements : t -> elt list
        val min_elt : t -> elt
        val max_elt : t -> elt
        val choose : t -> elt
        val split : elt -> t -> t * bool * t
        val find : elt -> t -> elt
        val of_seq : elt CCSet.sequence -> t
        val add_seq : t -> elt CCSet.sequence -> t
        val to_seq : t -> elt CCSet.sequence
        val of_list : elt list -> t
        val add_list : t -> elt list -> t
        val to_list : t -> elt list
        val pp :
          ?start:string ->
          ?stop:string -> ?sep:string -> elt CCSet.printer -> t CCSet.printer
        val print :
          ?start:string ->
          ?stop:string ->
          ?sep:string -> elt CCSet.formatter -> t CCSet.formatter
      end
    val to_seq_free_vars : ?bound:VarSet.t -> t -> t Var.t Sequence.t
    val free_vars : ?bound:VarSet.t -> t -> VarSet.t
    val is_var : t -> bool
    val is_const : t -> bool
    val is_closed : t -> bool
    val is_undefined : t -> bool
    val free_meta_vars :
      ?init:t MetaVar.t ID.Map.t -> t -> t MetaVar.t ID.Map.t
    val bind_unfold : TI.Binder.t -> t -> t Var.t list * t
    val fun_unfold : t -> t Var.t list * t
    val get_ty_arg : t -> int -> t option
    val ty_unfold : t -> t Var.t list * t list * t
    val ty_is_Type : t -> bool
    val ty_returns_Type : t -> bool
    val ty_returns_Prop : t -> bool
    val ty_returns : t -> t
    val ty_is_Kind : t -> bool
    val ty_is_Prop : t -> bool
    val ty_is_unitype : t -> bool
    val ty_num_param : t -> int
    val is_ty : TermTyped.??.-> bool
  end