One step of a cvc5 proof: its rule as a constructor, its premises and arguments as fields.
The parameters say what the fields are, so that each layer picks its own, and so that a traversal
can hand over a step whose premises are something else entirely:
The conclusion is not a field: it is the step's own result. Neither is an argument that only
restates it, such as REORDERING's target clause or THEORY_REWRITE's equality.
A rule is decoded only when its step has the layout cvc5 documents; anything else is other,
holding the step's premises and arguments as cvc5 gives them. So no step is lost, and a layout cvc5
changes degrades to other rather than to a wrong reading. Which rules are decoded can grow, and a
rule moving out of other is the change to expect from one version to the next.
Constructors
Cvc.Proof.View.scope {P F T : Type} (body : P)
(discharged : Array F) : Cvc.Proof.View P F T
SCOPE: discharges discharged from body : F, concluding F₁ ∧ … ∧ Fₙ ⇒ F.
When F is false, the conclusion is ¬(F₁ ∧ … ∧ Fₙ) instead.
Cvc.Proof.View.dslRewrite {P F T : Type}
(rule : cvc5.ProofRewriteRule) (premises : Array P)
(instantiation : Array T) : Cvc.Proof.View P F T
DSL_REWRITE: an instance of the RARE rule rule, its variables instantiated in order.
The premises are the rule's conditions, instantiated likewise. A variable with list semantics is
instantiated with the list of terms it stands for.
Cvc.Proof.View.trust {P F T : Type} (id : Nat)
(premises : Array P) (extra : Array T) :
Cvc.Proof.View P F T
TRUST: a step cvc5 does not justify, id saying what kind of step it is.
The premises, possibly none, entail the conclusion; extra is whatever further arguments cvc5
recorded. id is cvc5's internal trust identifier, which its API does not name.
Cvc.Proof.View.trustTheoryRewrite {P F T : Type}
(theory method : Nat) : Cvc.Proof.View P F T
TRUST_THEORY_REWRITE: an unchecked theory rewrite, the equality being the conclusion.
theory identifies the theory whose rewriter applied and method the kind of rewriting; both are
cvc5's internal identifiers, which its API does not name.
Cvc.Proof.View.resolution {P F T : Type} (left right : P)
(polarity : Bool) (pivot : F) : Cvc.Proof.View P F T
RESOLUTION of left and right on pivot.
The pivot occurs in left as is and in right negated when polarity is true, the other way
round when it is false.
Cvc.Proof.View.cong {P F T : Type} (premises : Array P)
(app : T) : Cvc.Proof.View P F T
CONG: f(t₁, …, tₙ) = f(s₁, …, sₙ) from tᵢ = sᵢ, app being f(t₁, …, tₙ).
Used for operators of fixed arity, indexed ones and uninterpreted functions included.
Cvc.Proof.View.other {P F T : Type} (rule : cvc5.ProofRule)
(premises : Array P) (args : Array T) :
Cvc.Proof.View P F T
Any other step, as cvc5 gives it: a rule not decoded, or a step whose layout was not expected.
Which rules are decoded grows over time, so a pattern .other .SOME_RULE … stops matching
once that rule is decoded: match on the step's rule instead for a rule not decoded.