sig
  module Loc = Logtk.ParseLocation
  type form = Logtk.TypedSTerm.t
  type bool_lit = BBox.Lit.t
  type 'a sequence = ('-> unit) -> unit
  val section : Logtk.Util.Section.t
  type statement_src = Logtk.Statement.source
  type rule
  type check = [ `Check | `Check_with of Proof.form list | `No_check ]
  type kind =
      Inference of Proof.rule * Proof.check
    | Simplification of Proof.rule * Proof.check
    | Esa of Proof.rule * Proof.check
    | Assert of Proof.statement_src
    | Goal of Proof.statement_src
    | Lemma
    | Data of Proof.statement_src * Logtk.Type.t Logtk.Statement.data
    | Trivial
    | By_def of Logtk.ID.t
  type result =
      Form of Proof.form
    | Clause of SClause.t
    | BoolClause of Proof.bool_lit list
    | Stmt of Logtk.Statement.input_t
    | C_stmt of Logtk.Statement.clause_t
  type step
  type proof
  type t = Proof.proof
  type parent
  type info = Logtk.UntypedAST.attr
  type infos = Proof.info list
  module Rule :
    sig
      type t = Proof.rule
      val pp : Proof.Rule.t CCFormat.printer
      val name : Proof.Rule.t -> string
      val mk : string -> Proof.Rule.t
      val mkf :
        ('a, Format.formatter, unit, Proof.Rule.t) Pervasives.format4 -> 'a
    end
  module Kind :
    sig type t = Proof.kind val pp : Proof.Kind.t CCFormat.printer end
  module Result :
    sig
      type t = Proof.result
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val pp : Proof.Result.t CCFormat.printer
    end
  module Step :
    sig
      type t = Proof.step
      val kind : Proof.Step.t -> Proof.kind
      val parents : Proof.Step.t -> Proof.parent list
      val infos : Proof.Step.t -> Proof.infos
      val compare : Proof.Step.t -> Proof.Step.t -> int
      val hash : Proof.Step.t -> int
      val equal : Proof.Step.t -> Proof.Step.t -> bool
      val trivial : Proof.Step.t
      val by_def : Logtk.ID.t -> Proof.Step.t
      val data :
        Proof.statement_src ->
        Logtk.Type.t Logtk.Statement.data -> Proof.Step.t
      val assert_ : Proof.statement_src -> Proof.Step.t
      val goal : Proof.statement_src -> Proof.Step.t
      val lemma : Proof.Step.t
      val assert' :
        ?loc:Loc.t -> file:string -> name:string -> unit -> Proof.Step.t
      val goal' :
        ?loc:Loc.t -> file:string -> name:string -> unit -> Proof.Step.t
      val inference :
        ?infos:Proof.infos ->
        ?check:Proof.check ->
        rule:Proof.rule -> Proof.parent list -> Proof.Step.t
      val simp :
        ?infos:Proof.infos ->
        ?check:Proof.check ->
        rule:Proof.rule -> Proof.parent list -> Proof.Step.t
      val esa :
        ?infos:Proof.infos ->
        ?check:Proof.check ->
        rule:Proof.rule -> Proof.parent list -> Proof.Step.t
      val is_trivial : Proof.Step.t -> bool
      val is_by_def : Proof.Step.t -> bool
      val is_assert : Proof.Step.t -> bool
      val is_goal : Proof.Step.t -> bool
      val rule : Proof.Step.t -> Proof.rule option
      val distance_to_goal : Proof.Step.t -> int option
      val pp : Proof.Step.t CCFormat.printer
    end
  module Parent :
    sig
      type t = Proof.parent
      val from : Proof.proof -> Proof.Parent.t
      val from_subst :
        Proof.proof Logtk.Scoped.t -> Logtk.Subst.t -> Proof.Parent.t
      val add_subst :
        Proof.Parent.t Logtk.Scoped.t -> Logtk.Subst.t -> Proof.Parent.t
      val proof : Proof.Parent.t -> Proof.proof
      val subst : Proof.Parent.t -> Logtk.Subst.t list
    end
  module S :
    sig
      type t = Proof.proof
      val result : Proof.S.t -> Proof.result
      val step : Proof.S.t -> Proof.step
      val compare : Proof.S.t -> Proof.S.t -> int
      val equal : Proof.S.t -> Proof.S.t -> bool
      val hash : Proof.S.t -> int
      val compare_by_result : Proof.S.t -> Proof.S.t -> int
      module Tbl :
        sig
          type key = t
          type 'a t
          val create : int -> 'a t
          val clear : 'a t -> unit
          val reset : 'a t -> unit
          val copy : 'a t -> 'a t
          val add : 'a t -> key -> '-> unit
          val remove : 'a t -> key -> unit
          val find : 'a t -> key -> 'a
          val find_all : 'a t -> key -> 'a list
          val replace : 'a t -> key -> '-> unit
          val mem : 'a t -> key -> bool
          val iter : (key -> '-> unit) -> 'a t -> unit
          val filter_map_inplace : (key -> '-> 'a option) -> 'a t -> unit
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
          val length : 'a t -> int
          val stats : 'a t -> Hashtbl.statistics
          val get : 'a t -> key -> 'a option
          val get_or : 'a t -> key -> default:'-> 'a
          val add_list : 'a list t -> key -> '-> unit
          val incr : ?by:int -> int t -> key -> unit
          val decr : ?by:int -> int t -> key -> unit
          val keys : 'a t -> key CCHashtbl.sequence
          val values : 'a t -> 'CCHashtbl.sequence
          val keys_list : 'a t -> key list
          val values_list : 'a t -> 'a list
          val map_list : (key -> '-> 'b) -> 'a t -> 'b list
          val to_seq : 'a t -> (key * 'a) CCHashtbl.sequence
          val of_seq : (key * 'a) CCHashtbl.sequence -> 'a t
          val add_seq : 'a t -> (key * 'a) CCHashtbl.sequence -> unit
          val add_seq_count : int t -> key CCHashtbl.sequence -> unit
          val of_seq_count : key CCHashtbl.sequence -> int t
          val to_list : 'a t -> (key * 'a) list
          val of_list : (key * 'a) list -> 'a t
          val update :
            'a t -> f:(key -> 'a option -> 'a option) -> k:key -> unit
          val get_or_add : 'a t -> f:(key -> 'a) -> k:key -> 'a
          val print :
            key CCHashtbl.printer ->
            'CCHashtbl.printer -> 'a t CCHashtbl.printer
        end
      val mk_f : Proof.step -> Proof.form -> Proof.S.t
      val mk_f_trivial : Proof.form -> Proof.S.t
      val mk_f_by_def : Logtk.ID.t -> Proof.form -> Proof.S.t
      val mk_f_inference :
        ?check:Proof.check ->
        rule:Proof.rule -> Proof.form -> Proof.parent list -> Proof.S.t
      val mk_f_simp :
        ?check:Proof.check ->
        rule:Proof.rule -> Proof.form -> Proof.parent list -> Proof.S.t
      val mk_f_esa :
        ?check:Proof.check ->
        rule:Proof.rule -> Proof.form -> Proof.parent list -> Proof.S.t
      val mk_c : Proof.step -> SClause.t -> Proof.S.t
      val mk_bc : Proof.step -> Proof.bool_lit list -> Proof.S.t
      val mk_stmt : Proof.step -> Logtk.Statement.input_t -> Proof.S.t
      val adapt_f : Proof.S.t -> Proof.form -> Proof.S.t
      val adapt_c : Proof.S.t -> SClause.t -> Proof.S.t
      val to_llproof : Proof.S.t -> Logtk.LLProof.t
      val is_proof_of_false : Proof.S.t -> bool
      val as_graph :
        (Proof.S.t, Proof.rule * Logtk.Subst.t list * Proof.infos) CCGraph.t
      val traverse :
        ?traversed:unit Proof.S.Tbl.t ->
        order:[ `BFS | `DFS ] -> Proof.S.t -> Proof.S.t Sequence.t
      val pp_result_of : Proof.S.t CCFormat.printer
      val pp_notrec : Proof.S.t CCFormat.printer
      val pp_tstp : Proof.S.t CCFormat.printer
      val pp_normal : Proof.S.t CCFormat.printer
      val pp_zf : Proof.S.t CCFormat.printer
      val pp : Logtk.Options.print_format -> Proof.S.t CCFormat.printer
      val pp_dot : name:string -> Proof.S.t CCFormat.printer
      val pp_dot_file : ?name:string -> string -> Proof.S.t -> unit
      val pp_dot_seq : name:string -> Proof.S.t Sequence.t CCFormat.printer
      val pp_dot_seq_file :
        ?name:string -> string -> Proof.S.t Sequence.t -> unit
      val step_of_src : Logtk.Statement.Src.t -> Proof.Step.t
      val parent_of_sourced : Logtk.Statement.sourced_t -> Proof.Parent.t
    end
end