sig
  val checkProofs : bool Pervasives.ref
  val printMagicProofWarning : bool Pervasives.ref
  type parg =
      I of int
    | S of string
    | E of Logic.exp
    | P of Proof.proof
    | F of Logic.pred
  and proof =
      Hyp of Util.symbol
    | Truei
    | Falsee of Proof.proof
    | Andi of Proof.proof list
    | Ande of int * Proof.proof
    | Alli of Logic.var * Proof.proof
    | Alle of Logic.exp * Proof.proof
    | Existe of Logic.var * Proof.proof
    | Impi of Util.symbol * Logic.pred * Proof.proof
    | Impe of Proof.proof * Proof.proof
    | Contra of Util.symbol * Logic.pred * Proof.proof
    | G of string * Proof.parg list
    | Refl of Logic.exp
    | Symm of Proof.proof
    | Trans of Logic.exp * Proof.proof * Proof.proof
    | Cong of Logic.exp * Logic.exp * Proof.proof list
    | WithLemma of Util.symbol * Logic.exp list * Proof.proof list
    | UnrollPDef of Logic.pred * Proof.proof
    | UnrollEDef of Logic.pred * string * Proof.proof
    | RollEDef of Logic.pred * string * Proof.proof
    | Arith of Logic.exp * Logic.exp
    | ArithNeq of int * Logic.exp * Logic.exp
    | ArithApart of int * Logic.exp * Logic.exp
    | ArithGeq of int * Logic.exp * Logic.exp
    | ArithGt of int * Logic.exp * Logic.exp
    | SelUpd0 of Logic.exp * Logic.exp * Logic.exp
    | SelUpd1 of Logic.exp * Logic.exp * Proof.proof
    | Magic of string * Logic.pred
    | MagicLemma of Proof.lemma
    | Unimplemented of string
  and lemma = {
    lname : Util.symbol;
    lvars : string list;
    lhyps : Logic.pred list;
    lconc : Logic.pred;
  }
  val infer :
    Logic.var list ->
    (Util.symbol * Logic.pred) list -> Proof.proof -> Logic.pred
  val check :
    Logic.var list ->
    (Util.symbol * Logic.pred) list -> Proof.proof -> Logic.pred -> unit
  val registerLemma : Proof.lemma -> Proof.proof -> unit
  val registeredLemmas : unit -> lemma list
  val findRegisteredLemma : Util.symbol -> Proof.lemma
  type edef = string * string list * Logic.exp
  type pdef = string * string list * Logic.pred
  val registerEDef : Proof.edef -> unit
  val registerPDef : Proof.pdef -> unit
  val mkContraProof : Util.symbol -> Logic.pred -> Proof.proof -> Proof.proof
  val d_prf : unit -> Proof.proof -> Pretty.doc
  val dpa : Proof.parg -> Pretty.doc
  val printer : Logic.logicPrinter Pervasives.ref
  val allEDefs : (string, Proof.edef) Hashtbl.t
  val allPDefs : (string, Proof.pdef) Hashtbl.t
  val allLemmas : Proof.lemma Inthash.t
  val init : unit -> unit
  val snapshot : unit -> unit -> unit
  val findLemma : Proof.lemma -> unit
  val registeredLemmas : unit -> Proof.lemma list
  val makeExistVar : string -> Logic.exp
end