functor (Seq : Sigs.SEQUENT->
  sig
    type seq_t = Seq.t
    type proof_t = Proof.Make(Seq).t
    type axiom_f = seq_t -> string option
    type infrule_app = (seq_t * Tagpairs.t * Tagpairs.t) list * string
    type infrule_f = seq_t -> infrule_app list
    type backrule_f = seq_t -> seq_t -> (Tagpairs.t * string) list
    type select_f = int -> proof_t -> int list
    type t = int -> proof_t -> (int list * proof_t) Blist.t
    val mk_axiom : axiom_f -> t
    val mk_infrule : infrule_f -> t
    val mk_backrule : bool -> select_f -> backrule_f -> t
    val all_nodes : select_f
    val closed_nodes : select_f
    val ancestor_nodes : select_f
    val syntactically_equal_nodes : select_f
    val fail : t
    val identity : t
    val attempt : t -> t
    val compose : t -> t -> t
    val compose_pairwise : t -> t list -> t
    val choice : t list -> t
    val first : t list -> t
    val sequence : t list -> t
    val conditional : (seq_t -> bool) -> t -> t
    val combine_axioms : t -> t -> t
  end