sig
  module St : Solver_types.S
  exception Insuficient_hyps
  type atom = St.atom
  type clause = St.clause
  type lemma = St.proof
  type proof
  and proof_node = {
    conclusion : Res_intf.S.clause;
    step : Res_intf.S.step;
  }
  and step =
      Hypothesis
    | Assumption
    | Lemma of Res_intf.S.lemma
    | Resolution of Res_intf.S.proof * Res_intf.S.proof * Res_intf.S.atom
  val to_list : Res_intf.S.clause -> Res_intf.S.atom list
  val merge :
    Res_intf.S.atom list -> Res_intf.S.atom list -> Res_intf.S.atom list
  val resolve :
    Res_intf.S.atom list -> Res_intf.S.atom list * Res_intf.S.atom list
  val prove : Res_intf.S.clause -> Res_intf.S.proof
  val prove_unsat : Res_intf.S.clause -> Res_intf.S.proof
  val prove_atom : Res_intf.S.atom -> Res_intf.S.proof option
  val expand : Res_intf.S.proof -> Res_intf.S.proof_node
  val fold :
    ('-> Res_intf.S.proof_node -> 'a) -> '-> Res_intf.S.proof -> 'a
  val unsat_core : Res_intf.S.proof -> Res_intf.S.clause list
  val check : Res_intf.S.proof -> unit
  val print_clause : Format.formatter -> Res_intf.S.clause -> unit
end