module type S = Avatar_intf.Smodule E:Env.S
module Solver:Sat_solver.S
module BLit: BBox.Lit
val split : E.multi_simpl_ruleval check_empty : E.unary_inf_ruleval before_check_sat : unit Logtk.Signal.t
val after_check_sat : unit Logtk.Signal.t
val filter_absurd_trails : (Trail.t -> bool) -> unitfilter_trails f calls f on every trail associated with the empty
clause. If f returns false, the trail is ignored, otherwise
it's negated and sent to the SAT solverval check_satisfiability : E.generate_ruletype cut_res = private {
|
cut_form : |
(* |
the lemma itself
| *) |
|
cut_pos : |
(* |
clauses true if lemma is true
| *) |
|
cut_lit : |
(* |
lit that is true if lemma is true
| *) |
|
cut_depth : |
(* |
if the lemma is used to prove another lemma
| *) |
|
cut_proof : |
(* |
where does the lemma come from?
| *) |
|
cut_proof_parent : |
(* |
how to justify sth from the lemma
| *) |
|
cut_reason : |
(* |
Informal reason why the lemma was added
| *) |
cut_pos representing the formula itself with the
trail lemma, and a boolean literal cut_lit that is true iff
the trail is true.
Other modules, when a cut is introduced, will try to disprove
the lemma (e.g. by induction or theory reasoning).
val cut_form : cut_res -> Cut_form.t
val cut_pos : cut_res -> E.C.t list
val cut_lit : cut_res -> BLit.t
val cut_depth : cut_res -> int
val cut_proof : cut_res -> Logtk.Proof.Step.t
val cut_proof_parent : cut_res -> Logtk.Proof.Parent.t
val pp_cut_res : cut_res CCFormat.printer
val cut_res_clauses : cut_res -> E.C.t Sequence.t
val print_lemmas : unit CCFormat.printerval introduce_cut : ?reason:unit CCFormat.printer ->
?penalty:int ->
?depth:int -> Cut_form.t -> Logtk.Proof.Step.t -> cut_resreason : some comment on why the lemma was addedval add_prove_lemma : (cut_res -> E.C.t list E.conversion_result) -> unitval add_lemma : cut_res -> unitAvatar_intf.S.add_prove_lemma to try and
prove this one.val add_imply : cut_res list ->
cut_res -> Logtk.Proof.Step.t -> unitadd_imply l res means that the conjunction of lemmas in l
implies that the lemma res is provenval on_input_lemma : cut_res Logtk.Signal.tval on_lemma : cut_res Logtk.Signal.tAvatar_intf.S.on_input_lemmaval convert_lemma : E.clause_conversion_ruleAvatar_intf.S.on_input_lemma with the resulting cutval register : split:bool -> unit -> unitsplit : if true, the clause splitting rule is added. Otherwise
Avatar is only used for other things such as induction.