sig
  module type S = Backend_intf.S
  module type Arg =
    sig
      type atom
      type hyp
      type lemma
      type assumption
      val print_atom : Format.formatter -> Dot.Arg.atom -> unit
      val hyp_info :
        Dot.Arg.hyp ->
        string * string option * (Format.formatter -> unit -> unit) list
      val lemma_info :
        Dot.Arg.lemma ->
        string * string option * (Format.formatter -> unit -> unit) list
      val assumption_info :
        Dot.Arg.assumption ->
        string * string option * (Format.formatter -> unit -> unit) list
    end
  module Default :
    functor (S : Res.S->
      sig
        val print_atom : Format.formatter -> S.atom -> unit
        val hyp_info :
          S.clause ->
          string * string option * (Format.formatter -> unit -> unit) list
        val lemma_info :
          S.clause ->
          string * string option * (Format.formatter -> unit -> unit) list
        val assumption_info :
          S.clause ->
          string * string option * (Format.formatter -> unit -> unit) list
      end
  module Make :
    functor
      (S : Res.S) (A : sig
                         val print_atom : Format.formatter -> S.atom -> unit
                         val hyp_info :
                           S.clause ->
                           string * string option *
                           (Format.formatter -> unit -> unit) list
                         val lemma_info :
                           S.clause ->
                           string * string option *
                           (Format.formatter -> unit -> unit) list
                         val assumption_info :
                           S.clause ->
                           string * string option *
                           (Format.formatter -> unit -> unit) list
                       end->
      sig val print : Format.formatter -> S.proof -> unit end
  module Simple :
    functor
      (S : Res.S) (A : sig
                         type hyp = S.St.formula list
                         type assumption = S.St.formula
                         val print_atom :
                           Format.formatter -> S.St.formula -> unit
                         val hyp_info :
                           hyp ->
                           string * string option *
                           (Format.formatter -> unit -> unit) list
                         val lemma_info :
                           S.lemma ->
                           string * string option *
                           (Format.formatter -> unit -> unit) list
                         val assumption_info :
                           assumption ->
                           string * string option *
                           (Format.formatter -> unit -> unit) list
                       end->
      sig val print : Format.formatter -> S.proof -> unit end
end