LTL over ProductKripke (Unified via ToKripke) #
B-4 以降、積 Kripke 構造上の LTL は ToKripke 型クラス経由で統一された
Always / Eventually / Leads で書ける。本ファイルは以下を提供する:
後方互換エイリアス (§1):
Always_prod/Eventually_prod/Leads_prodをabbrevで新 API の別名として残す。既存コードは変更なしで動く。持ち上げ補題 (§2-§4): 各要素 Kripke 構造の LTL 保証を積に持ち上げる補題 (
.of_and,.of_left,.of_right)。
B-8c での一般化 #
B-7 までは型引数が {sm₁ : StateMachine S₁ D₁ inv₁} / {sm₂ : StateMachine S₂ D₂ inv₂}
の StateMachine 特化で、持ち上げに sm_i.WellFormed を要求していた。
B-8c では型引数を {α β : Type} {S₁ D₁ S₂ D₂ : Type} [ToKripke α S₁ D₁] [ToKripke β S₂ D₂]
に一般化し、持ち上げ引数は (ToKripke.toKripke y).NonEmpty / (ToKripke.toKripke x).NonEmpty
に弱化した。これにより:
ProductKripke sm₁ sm₂(=ProductStateMachine sm₁ sm₂)での使用はhwf₂.nonEmptyを渡せばそのまま動作ProductKripke (pk : ProductKripke ...) sm₃(3 機ネスト合成)でも、pk.toKripke.NonEmptyを渡すだけで同じ補題を再利用できる
StateMachine 特化の Always_prod psm P / Eventually_prod psm P / Leads_prod psm P Q
は後方互換のため abbrev のシグネチャは維持され、呼び出し側は変更不要。
積 Kripke 構造上の Always (後方互換エイリアス)。Always pk P と defeq。
Equations
Instances For
積 Kripke 構造上の Eventually (後方互換エイリアス)。Eventually pk P と defeq。
Equations
Instances For
積 Kripke 構造上の Leads (後方互換エイリアス)。Leads pk P Q と defeq。
Equations
- VerifiedMBSE.Behavior.Leads_prod pk P Q = VerifiedMBSE.Behavior.Leads pk P Q
Instances For
Always の積への持ち上げ: 各成分の Always から積の連言 Always を構築。
hr.fst_reachable / hr.snd_reachable は ProductKripkeReachable の補題。
要素側の reachable が induction hypothesis 経由で供給される。
Always の片側持ち上げ (左): x 側の Always から積の左成分 Always を得る。
Always の片側持ち上げ (右): y 側の Always から積の右成分 Always を得る。
Eventually の片側持ち上げ (左): x 側の Eventually から積の左成分 Eventually を得る。
相手側 (y) の NonEmpty で初期データを供給する必要がある。
ProductKripkeReachable.fromLeft が init コンストラクタ一発で
積到達可能状態を構成する。
Eventually の片側持ち上げ (右): y 側の Eventually から積の右成分 Eventually を得る。
Leads の片側持ち上げ (左): x 側の Leads P₁ Q₁ から、積上で
P₁ ∘ fst ⇒ ◇ (Q₁ ∘ fst) を得る。
Leads の片側持ち上げ (右): y 側の Leads P₂ Q₂ から、積上で
P₂ ∘ snd ⇒ ◇ (Q₂ ∘ snd) を得る。