LTL over ProductKripke (Unified via ToKripke) #
LTL over a product Kripke structure is expressed uniformly via the
ToKripke type class with Always / Eventually / Leads. This
module provides:
Compatibility aliases (§1):
Always_prod/Eventually_prod/Leads_prodasabbrevs over the uniform operators. Existing code continues to compile unchanged.Lifting lemmas (§2–§4): transport component-level LTL guarantees to the product (
.of_and,.of_left,.of_right).
Type-class-based generality #
The operators and lemmas are parameterized over arbitrary
{α β : Type} {S₁ D₁ S₂ D₂ : Type} [ToKripke α S₁ D₁] [ToKripke β S₂ D₂].
Lifting takes an opposite-side NonEmpty witness rather than a
StateMachine-specific WellFormed:
- For
ProductKripke sm₁ sm₂(equivalently,ProductStateMachine sm₁ sm₂), passhwf₂.nonEmptyon the right and the original lemmas apply directly. - For nested compositions such as
ProductKripke (pk : ProductKripke ...) sm₃, passpk.toKripke.NonEmptyand the same lemmas are reused without specialization.
The Always_prod / Eventually_prod / Leads_prod aliases retain
their original signatures, so call sites need no changes.
Always over a product Kripke structure (compatibility alias).
defeq to Always pk P.
Equations
Instances For
Eventually over a product Kripke structure (compatibility alias).
defeq to Eventually pk P.
Equations
Instances For
Leads over a product Kripke structure (compatibility alias).
defeq to Leads pk P Q.
Equations
- VerifiedMBSE.Behavior.Leads_prod pk P Q = VerifiedMBSE.Behavior.Leads pk P Q
Instances For
Lift Always to the product: component-level Always properties
combine into a conjunction Always on the product.
Component reachability is supplied by hr.fst_reachable /
hr.snd_reachable, the projection lemmas on
ProductKripkeReachable.
One-sided Always lifting (left): lift x's Always to the
left component on the product.
One-sided Always lifting (right): lift y's Always to the
right component on the product.
One-sided Eventually lifting (left): lift x's Eventually to
the left component on the product.
Requires a NonEmpty witness on the opposite side (y) to supply
the initial data on the right. ProductKripkeReachable.fromLeft
builds the product-reachable state with a single init
constructor.
One-sided Eventually lifting (right): lift y's Eventually to
the right component on the product.
One-sided Leads lifting (left): from x's Leads P₁ Q₁, derive
P₁ ∘ fst ⇒ ◇ (Q₁ ∘ fst) on the product.
One-sided Leads lifting (right): from y's Leads P₂ Q₂, derive
P₂ ∘ snd ⇒ ◇ (Q₂ ∘ snd) on the product.