sig
  type 'a term = 'M.D.F.term
  type pred = M.D.F.pred
  val e_int : int -> Formula.integer term
  val e_call : string -> Formula.abstract term list -> Formula.abstract term
  val p_call : string -> Formula.abstract term list -> pred
  val wrap : 'a term -> Formula.abstract term
  val unwrap : Formula.abstract term -> 'a term
  val e_true : Formula.boolean term
  val e_false : Formula.boolean term
  val e_int : int -> Formula.integer term
  val e_float : float -> Formula.real term
  val e_icst : string -> Formula.integer term
  val e_rcst : string -> Formula.real term
  val e_int64 : int64 -> Formula.integer term
  val e_ineg : Formula.integer term -> Formula.integer term
  val e_rneg : Formula.real term -> Formula.real term
  val e_iop :
    Formula.integer_op ->
    Formula.integer term -> Formula.integer term -> Formula.integer term
  val e_rop :
    Formula.real_op ->
    Formula.real term -> Formula.real term -> Formula.real term
  val e_icmp :
    Formula.cmp_op ->
    Formula.integer term -> Formula.integer term -> Formula.boolean term
  val e_rcmp :
    Formula.cmp_op ->
    Formula.real term -> Formula.real term -> Formula.boolean term
  val p_icmp :
    Formula.cmp_op -> Formula.integer term -> Formula.integer term -> pred
  val p_rcmp :
    Formula.cmp_op -> Formula.real term -> Formula.real term -> pred
  val e_bnot : Formula.integer term -> Formula.integer term
  val e_band :
    Formula.integer term -> Formula.integer term -> Formula.integer term
  val e_bor :
    Formula.integer term -> Formula.integer term -> Formula.integer term
  val e_bxor :
    Formula.integer term -> Formula.integer term -> Formula.integer term
  val e_lshift :
    Formula.integer term -> Formula.integer term -> Formula.integer term
  val e_rshift :
    Formula.integer term -> Formula.integer term -> Formula.integer term
  val integer_of_real : Formula.real term -> Formula.integer term
  val real_of_integer : Formula.integer term -> Formula.real term
  val e_bool : Formula.boolean term -> Formula.integer term
  val e_not : Formula.boolean term -> Formula.boolean term
  val e_and :
    Formula.boolean term -> Formula.boolean term -> Formula.boolean term
  val e_or :
    Formula.boolean term -> Formula.boolean term -> Formula.boolean term
  val e_cond : Formula.boolean term -> 'a term -> 'a term -> 'a term
  val p_cond : Formula.boolean term -> pred -> pred -> pred
  val p_true : pred
  val p_false : pred
  val p_bool : Formula.boolean term -> pred
  val p_and : pred -> pred -> pred
  val p_or : pred -> pred -> pred
  val p_xor : pred -> pred -> pred
  val p_not : pred -> pred
  val p_implies : pred -> pred -> pred
  val p_iff : pred -> pred -> pred
  val p_eq : 'a term -> 'a term -> pred
  val p_neq : 'a term -> 'a term -> pred
  val p_conj : pred list -> pred
  val p_disj : pred list -> pred
  val p_named : string -> pred -> pred
  val is_true : pred -> bool
  val is_false : pred -> bool
  val huge_term : int -> 'a term -> bool
  val huge_pred : int -> pred -> bool
  type var = M.D.F.var
  type pool = M.D.F.pool
  val pool : unit -> pool
  val fresh : pool -> string -> Formula.kind -> var
  val freshen : pool -> var -> var
  val var : var -> 'a term
  val eq_var : var -> var -> bool
  val name_of_var : var -> string
  val tau_of_var : var -> Formula.tau
  val kind_of_var : var -> Formula.kind
  val term_has_var : var list -> 'a term -> bool
  val pred_has_var : var list -> pred -> bool
  val term_closed : 'a term -> bool
  val pred_closed : pred -> bool
  val p_forall : var list -> pred -> pred
  val p_exists : var list -> pred -> pred
  val p_subst : (var -> var option) -> var -> 'a term -> pred -> pred
  val e_subst : (var -> var option) -> var -> 'a term -> 'b term -> 'b term
  val e_rename : (var * var) list -> 'a term -> 'a term
  val equal_terms : 'a term -> 'a term -> bool
  type alpha = M.D.F.alpha
  val empty_alpha : alpha
  val fold_alpha : (var -> var -> '-> 'a) -> alpha -> '-> 'a
  val p_more_alpha_cv : alpha -> pred -> alpha * pred
  val p_alpha_cv : pred -> var list * pred
  val pp_var : Format.formatter -> var -> unit
  val pp_term : Format.formatter -> 'a term -> unit
  val pp_pred : Format.formatter -> pred -> unit
  val pp_decl : Format.formatter -> pred Formula.declaration -> unit
  val pp_goal : Format.formatter -> string -> pred -> unit
end