sig
  type 'a solver
  val mk_solver :
    ?context:SrkZ3.z3_context -> 'Syntax.context -> 'SrkZ3.CHC.solver
  val register_relation : 'SrkZ3.CHC.solver -> Syntax.symbol -> unit
  val add_rule :
    'SrkZ3.CHC.solver -> 'Syntax.formula -> 'Syntax.formula -> unit
  val add : 'SrkZ3.CHC.solver -> 'Syntax.formula list -> unit
  val check :
    'SrkZ3.CHC.solver ->
    'Syntax.formula list -> [ `Sat | `Unknown | `Unsat ]
  val get_solution :
    'SrkZ3.CHC.solver -> Syntax.symbol -> 'Syntax.formula
  val to_string : 'SrkZ3.CHC.solver -> string
  val push : 'SrkZ3.CHC.solver -> unit
  val pop : 'SrkZ3.CHC.solver -> unit
end