functor (C : Exp_context->
  sig
    val exp_subst :
      Types.t Types.TNfmap.t * Typed_ast.exp_subst Typed_ast.Nfmap.t ->
      Typed_ast.exp -> Typed_ast.exp
    val push_subst :
      Types.t Types.TNfmap.t * Typed_ast.exp_subst Typed_ast.Nfmap.t ->
      Typed_ast.pat list ->
      Typed_ast.exp -> Typed_ast.pat list * Typed_ast.exp
    val exp_to_term : Typed_ast.exp -> Typed_ast.exp_aux
    val exp_to_free : Typed_ast.exp -> Types.t Typed_ast.Nfmap.t
    val type_eq : Ast.l -> string -> Types.t -> Types.t -> unit
    val mk_lnumeral :
      Ast.l -> Typed_ast.lskips -> int -> Types.t option -> Typed_ast.lit
    val mk_lnum :
      Ast.l -> Typed_ast.lskips -> int -> Types.t -> Typed_ast.lit
    val mk_lbool :
      Ast.l -> Typed_ast.lskips -> bool -> Types.t option -> Typed_ast.lit
    val mk_lbit :
      Ast.l -> Typed_ast.lskips -> int -> Types.t option -> Typed_ast.lit
    val mk_lundef :
      Ast.l -> Typed_ast.lskips -> string -> Types.t -> Typed_ast.lit
    val mk_lstring :
      Ast.l -> Typed_ast.lskips -> string -> Types.t option -> Typed_ast.lit
    val mk_twild : Ast.l -> Typed_ast.lskips -> Types.t -> Types.src_t
    val mk_tvar :
      Ast.l -> Typed_ast.lskips -> Tyvar.t -> Types.t -> Types.src_t
    val mk_tfn :
      Ast.l ->
      Types.src_t ->
      Typed_ast.lskips -> Types.src_t -> Types.t option -> Types.src_t
    val mk_ttup :
      Ast.l ->
      Types.src_t Typed_ast.lskips_seplist -> Types.t option -> Types.src_t
    val mk_tapp :
      Ast.l ->
      Path.t Types.id -> Types.src_t list -> Types.t option -> Types.src_t
    val mk_tparen :
      Ast.l ->
      Typed_ast.lskips ->
      Types.src_t -> Typed_ast.lskips -> Types.t option -> Types.src_t
    val mk_pwild : Ast.l -> Typed_ast.lskips -> Types.t -> Typed_ast.pat
    val mk_pas :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat ->
      Typed_ast.lskips ->
      Typed_ast.name_l -> Typed_ast.lskips -> Types.t option -> Typed_ast.pat
    val mk_ptyp :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat ->
      Typed_ast.lskips ->
      Types.src_t -> Typed_ast.lskips -> Types.t option -> Typed_ast.pat
    val mk_pvar : Ast.l -> Name.lskips_t -> Types.t -> Typed_ast.pat
    val mk_pconst :
      Ast.l ->
      Typed_ast.const_descr_ref Types.id ->
      Typed_ast.pat list -> Types.t option -> Typed_ast.pat
    val mk_pbackend :
      Ast.l ->
      Typed_ast.lskips ->
      Ident.t ->
      Types.t -> Typed_ast.pat list -> Types.t option -> Typed_ast.pat
    val mk_precord :
      Ast.l ->
      Typed_ast.lskips ->
      (Typed_ast.const_descr_ref Types.id * Typed_ast.lskips * Typed_ast.pat)
      Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t option -> Typed_ast.pat
    val mk_ptup :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t option -> Typed_ast.pat
    val mk_plist :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t -> Typed_ast.pat
    val mk_pvector :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t -> Typed_ast.pat
    val mk_pvectorc :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat list -> Typed_ast.lskips -> Types.t -> Typed_ast.pat
    val mk_pparen :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat -> Typed_ast.lskips -> Types.t option -> Typed_ast.pat
    val mk_pcons :
      Ast.l ->
      Typed_ast.pat ->
      Typed_ast.lskips -> Typed_ast.pat -> Types.t option -> Typed_ast.pat
    val mk_pnum_add :
      Ast.l ->
      Typed_ast.name_l ->
      Typed_ast.lskips ->
      Typed_ast.lskips -> int -> Types.t option -> Typed_ast.pat
    val mk_plit : Ast.l -> Typed_ast.lit -> Types.t option -> Typed_ast.pat
    val mk_pvar_annot :
      Ast.l ->
      Name.lskips_t -> Types.src_t -> Types.t option -> Typed_ast.pat
    val mk_var : Ast.l -> Name.lskips_t -> Types.t -> Typed_ast.exp
    val mk_nvar_e :
      Ast.l -> Typed_ast.lskips -> Nvar.t -> Types.t -> Typed_ast.exp
    val mk_backend :
      Ast.l -> Typed_ast.lskips -> Ident.t -> Types.t -> Typed_ast.exp
    val mk_const :
      Ast.l ->
      Typed_ast.const_descr_ref Types.id -> Types.t option -> Typed_ast.exp
    val mk_fun :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.pat list ->
      Typed_ast.lskips -> Typed_ast.exp -> Types.t option -> Typed_ast.exp
    val mk_function :
      Ast.l ->
      Typed_ast.lskips ->
      (Typed_ast.pat * Typed_ast.lskips * Typed_ast.exp * Ast.l)
      Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_app :
      Ast.l ->
      Typed_ast.exp -> Typed_ast.exp -> Types.t option -> Typed_ast.exp
    val mk_infix :
      Ast.l ->
      Typed_ast.exp ->
      Typed_ast.exp -> Typed_ast.exp -> Types.t option -> Typed_ast.exp
    val mk_record :
      Ast.l ->
      Typed_ast.lskips ->
      (Typed_ast.const_descr_ref Types.id * Typed_ast.lskips *
       Typed_ast.exp * Ast.l)
      Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_recup :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      (Typed_ast.const_descr_ref Types.id * Typed_ast.lskips *
       Typed_ast.exp * Ast.l)
      Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_field :
      Ast.l ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Typed_ast.const_descr_ref Types.id -> Types.t option -> Typed_ast.exp
    val mk_case :
      bool ->
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      (Typed_ast.pat * Typed_ast.lskips * Typed_ast.exp * Ast.l)
      Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_typed :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Types.src_t -> Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_let_val :
      Ast.l ->
      Typed_ast.pat ->
      (Typed_ast.lskips * Types.src_t) option ->
      Typed_ast.lskips -> Typed_ast.exp -> Typed_ast.letbind
    val mk_let_fun :
      Ast.l ->
      Typed_ast.name_lskips_annot ->
      Typed_ast.pat list ->
      (Typed_ast.lskips * Types.src_t) option ->
      Typed_ast.lskips -> Typed_ast.exp -> Typed_ast.letbind
    val mk_let :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.letbind ->
      Typed_ast.lskips -> Typed_ast.exp -> Types.t option -> Typed_ast.exp
    val mk_tup :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_list :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t -> Typed_ast.exp
    val mk_vector :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t -> Typed_ast.exp
    val mk_vaccess :
      Ast.l ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Types.src_nexp -> Typed_ast.lskips -> Types.t -> Typed_ast.exp
    val mk_vaccessr :
      Ast.l ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Types.src_nexp ->
      Typed_ast.lskips ->
      Types.src_nexp -> Typed_ast.lskips -> Types.t -> Typed_ast.exp
    val mk_paren :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp -> Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_begin :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp -> Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_if :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips -> Typed_ast.exp -> Types.t option -> Typed_ast.exp
    val mk_lit : Ast.l -> Typed_ast.lit -> Types.t option -> Typed_ast.exp
    val mk_set :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp Typed_ast.lskips_seplist ->
      Typed_ast.lskips -> Types.t -> Typed_ast.exp
    val mk_setcomp :
      Ast.l ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Typed_ast.NameSet.t -> Types.t option -> Typed_ast.exp
    val mk_comp_binding :
      Ast.l ->
      bool ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Typed_ast.lskips ->
      Typed_ast.quant_binding list ->
      Typed_ast.lskips ->
      Typed_ast.exp -> Typed_ast.lskips -> Types.t option -> Typed_ast.exp
    val mk_quant :
      Ast.l ->
      Ast.q ->
      Typed_ast.quant_binding list ->
      Typed_ast.lskips -> Typed_ast.exp -> Types.t option -> Typed_ast.exp
    val mk_do :
      Ast.l ->
      Typed_ast.lskips ->
      Path.t Types.id ->
      Typed_ast.do_line list ->
      Typed_ast.lskips ->
      Typed_ast.exp ->
      Typed_ast.lskips ->
      Types.t * Typed_ast.bind_tyargs_order ->
      Types.t option -> Typed_ast.exp
    val t_to_src_t : Types.t -> Types.src_t
    val pat_subst :
      Types.t Types.TNfmap.t * Name.t Typed_ast.Nfmap.t ->
      Typed_ast.pat -> Typed_ast.pat
  end