Module Sidekick_base.Proof
Proofs of unsatisfiability
Proofs are used in sidekick when the problem is found unsatisfiable. A proof collects inferences made by the solver into a list of steps, each with its own kind of justification (e.g. "by congruence"), and outputs it in some kind of format.
Currently we target Quip as an experimental proof backend.
include Sidekick_core.PROOF with type term = Base_types.Term.t and type ty = Base_types.Ty.t
type tThe abstract representation of a proof. A proof always proves a clause to be valid (true in every possible interpretation of the problem's assertions, and the theories)
type term= Base_types.Term.ttype ty= Base_types.Ty.ttype hres_stephyper-resolution steps: resolution, unit resolution; bool paramodulation, unit bool paramodulation
val p : t -> lhs:term -> rhs:term -> hres_stepParamodulation using proof whose conclusion has a literal
lhs=rhs
val pp_lit : lit Sidekick_core.Fmt.printerval lit_a : term -> litval lit_na : term -> litval lit_mk : bool -> term -> litval lit_eq : term -> term -> litval lit_neq : term -> term -> litval lit_not : lit -> litval lit_sign : lit -> bool
val stepc : name:string -> lit list -> t -> composite_stepval deft : term -> term -> composite_stepdefine a (new) atomic term
val is_trivial_refl : t -> boolis this a proof of
|- t=t? This can be used to remove some trivial steps that would build on the proof (e.g. rewriting usingrefl tis useless).
val assertion : term -> tval assertion_c : lit Iter.t -> tval ref_by_name : string -> tval assertion_c_l : lit list -> tval hres_iter : t -> hres_step Iter.t -> tval hres_l : t -> hres_step list -> tval res : pivot:term -> t -> t -> tval res1 : t -> t -> tval refl : term -> tval true_is_true : tval true_neq_false : tval nn : t -> tval cc_lemma : lit list -> tval cc_imply2 : t -> t -> term -> term -> tval cc_imply_l : t list -> term -> term -> tval composite_iter : ?assms:(string * lit) list -> composite_step Iter.t -> tval composite_l : ?assms:(string * lit) list -> composite_step list -> tval sorry : tval sorry_c : lit Iter.t -> tval sorry_c_l : lit list -> tval default : tval pp_debug : sharing:bool -> t Sidekick_core.Fmt.printerPretty print a proof.
- parameter sharing
if true, try to compact the proof by introducing definitions for common terms, clauses, and steps as needed. Safe to ignore.
module Quip : sig ... endval isa_split : ty -> term Iter.t -> tval isa_disj : ty -> term -> term -> tval cstor_inj : Base_types.Cstor.t -> int -> term list -> term list -> tval bool_eq : term -> term -> tval bool_c : string -> term list -> tval ite_true : term -> tval ite_false : term -> tval lra : lit Iter.t -> tval lra_l : lit list -> t