Documentation

Lean.Elab.Tactic.Do.Internal.VCGen.LatticeOp

Lattice split rules #

Backward rules that decompose a lattice operator on the RHS of an entailment pre ⊑ op … s⃗. The operator is saturated with distribution and unfolding rewrites, a terminal -introduction rule fires on the reduced form, and any state arguments the terminal leaves over-applied are point-framed onto the precondition.

A frame operator contributes its own rewrites and terminals through its @[frameproc]; the built-in seeds cover the lattice connectives //⌜·⌝/ and the magic-wand residual upperAdjoint.

The lattice meet : distributes via meet_apply, closes with le_meet.

Equations
Instances For

    Heyting implication : distributes via himp_apply, closes with le_himp.

    Equations
    Instances For

      The pure assertion ⌜·⌝: distributes via ofProp_apply, closes with the -fixed top_le_ofProp.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        The lattice top : distributes via top_apply, closes with le_top.

        Equations
        Instances For

          The magic-wand residual upperAdjoint f b: point-framed, closes with le_upperAdjoint.

          Equations
          Instances For

            The built-in connective splits, whose rewrites and terminals seed every saturation.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              The lattice-split table keyed by operator head, merging the built-in connectives with the registered frame operators' splits.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                Build a reusable backward rule decomposing pre ⊑ op … s⃗ for a lattice operator. The operator's value arguments are made schematic; rewrites saturate the operator through its distribution and unfolding equalities, the terminal keyed by the reduced head fires, and any state arguments left over-applied by the terminal are point-framed onto the precondition. When the reduced head has no registered terminal, the saturated pre ⊑ reduced is handed back as the sole subgoal. Throws when the operator neither reduces nor has a terminal, since its rule would be the identity.

                For , produces ∀ a b s⃗ pre, pre ⊑ a s⃗ → pre ⊑ b s⃗ → pre ⊑ (a ⊓ b) s⃗. For the opaque residual upperAdjoint f b, produces ∀ f b s⃗ pre, f (fun u⃗ => ⌜u⃗ = s⃗⌝ ⊓ pre) ⊑ b → pre ⊑ upperAdjoint f b s⃗.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For