Entailment-shaped goal decomposition for pre ⊑ rhs targets: unfolding Triple,
introducing excess state arguments and pure preconditions, reducing
exception-postcondition projections, and decomposing lattice connectives.
Unfold ⦃P⦄ x ⦃Q; E⦄ into the underlying entailment P ⊑ wp x Q E.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply precondition-intro rule rule to goal, then introduce the freed hypothesis,
leaving ⊤ as the residual precondition. Returns the new goal and the introduced hypothesis.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Reduce an EPost.Cons.head projection on the RHS of pre ⊑ rhs to the underlying component:
concrete epost⟨…⟩ values project to the selected component, and ⊥.head x₁ … xₙ rewrites to
⊥ via replaceEPostHeadBot?. Returns none if the RHS is not such a projection.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Decompose a supported lattice connective (⊓, ⇨, ⌜p⌝, ⊤) or a registered frame operator on the
RHS of pre ⊑ rhs by saturating it with the built-in and @[frameproc] rewrites, closing it with a
terminal, and point-framing any excess state arguments. Returns none if the head is neither a
built-in connective nor a frame operator, or its rule does not apply.
An embedded proposition ⌜p⌝ is decomposed only when the precondition is ⊤: its ⊤-fixed terminal
top_le_ofProp fails to apply otherwise, since turning pre ⊑ ⌜p⌝ into the subgoal p drops pre.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Reduce a precondition that is the bare top applied to the state arguments introduced by
le_of_forall_le, (⊤ : σ₁ → … → σₙ → Prop) s₁ … sₙ, to the bare (⊤ : Prop), rewriting goal's
target pre ⊑ rhs to ⊤ ⊑ rhs. The equation pre = ⊤ is built on demand by folding
Lean.Order.top_apply over the excess arguments (mirroring replaceEPostHeadBot?'s bot_apply
fold) and applied with replaceTargetEq.
The proof term is built directly with mkApp/mkConst and instances extracted from pre, avoiding
mkAppM/instance synthesis (both expensive and unable to unify max-of-universe-variable instance
levels in the abstract-monad setting). Returns none if pre is not the bare top applied to ≥ 1
argument, or its lattice instances are not in the expected instCompleteLatticePi shape (the caller
then falls through).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Reduce a Prop-lattice goal (⊤ : Prop) ⊑ φ to the bare proposition φ via top_le_prop,
returning any other goal unchanged. The match on Sort 0 keeps it to the Prop base lattice,
where the reduction is sound; entailments at an abstract lattice carrier pass through.
Equations
- One or more equations did not get rendered due to their size.