module Make:
Parameters: |
|
module E:Env.S
module Solver:Sat_solver.S
module BLit: BBox.Lit
val split : E.multi_simpl_rule
val check_empty : E.unary_inf_rule
val before_check_sat : unit Logtk.Signal.t
val after_check_sat : unit Logtk.Signal.t
val filter_absurd_trails : (Trail.t -> bool) -> unit
filter_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_rule
type
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.printer
val introduce_cut : ?reason:unit CCFormat.printer ->
?penalty:int ->
?depth:int -> Cut_form.t -> Logtk.Proof.Step.t -> cut_res
reason
: some comment on why the lemma was addedval add_prove_lemma : (cut_res -> E.C.t list E.conversion_result) -> unit
val add_lemma : cut_res -> unit
Avatar_intf.S.add_prove_lemma
to try and
prove this one.val add_imply : cut_res list ->
cut_res -> Logtk.Proof.Step.t -> unit
add_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.t
val on_lemma : cut_res Logtk.Signal.t
Avatar_intf.S.on_input_lemma
val convert_lemma : E.clause_conversion_rule
Avatar_intf.S.on_input_lemma
with the resulting cutval register : split:bool -> unit -> unit
split
: if true, the clause splitting rule is added. Otherwise
Avatar is only used for other things such as induction.