lemmagammaOne_withTest{W:Type}(M:KripkeModelW)(w:W)(h1:∀φ∈gammaOne,evaluateMwφ):evaluateMwtestIP:=W:TypeM:KripkeModelWw:Wh1:∀φ∈gammaOne,evaluateMwφ⊢ evaluateMwtestIPW:TypeM:KripkeModelWw:Wh1:∀φ∈gammaOne,evaluateMwφhs:M.valw2hbody:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv0→M.valv2→(∃u,M.Rel0vu)∧∀(u:W),M.Rel0vu→M.valu2⊢ evaluateMwtestIPW:TypeM:KripkeModelWw:Wh1:∀φ∈gammaOne,evaluateMwφhs:M.valw2hbody:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv0→M.valv2→(∃u,M.Rel0vu)∧∀(u:W),M.Rel0vu→M.valu2⊢ ∀(v:W),Relation.ReflTransGen(funxx_1↦∃y,(x=y∧M.valx0)∧M.Rel0yx_1)wv→M.valv0→¬∀(v_1:W),M.Rel0vv_1→FalseW:TypeM:KripkeModelWw:Wh1:∀φ∈gammaOne,evaluateMwφhs:M.valw2hbody:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv0→M.valv2→(∃u,M.Rel0vu)∧∀(u:W),M.Rel0vu→M.valu2v:Whv:Relation.ReflTransGen(funxx_1↦∃y,(x=y∧M.valx0)∧M.Rel0yx_1)wv⊢ M.valv0→¬∀(v_1:W),M.Rel0vv_1→False-- every state reached along `(p?;a)*` from `w` is `a*`-reachable and satisfies `s`W:TypeM:KripkeModelWw:Wh1:∀φ∈gammaOne,evaluateMwφhs:M.valw2hbody:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv0→M.valv2→(∃u,M.Rel0vu)∧∀(u:W),M.Rel0vu→M.valu2v:Whv:Relation.ReflTransGen(funxx_1↦∃y,(x=y∧M.valx0)∧M.Rel0yx_1)wvkey:Relation.ReflTransGen(M.Rel0)wv∧M.valv2⊢ M.valv0→¬∀(v_1:W),M.Rel0vv_1→FalseintrohpvhdeadW:TypeM:KripkeModelWw:Wh1:∀φ∈gammaOne,evaluateMwφhs:M.valw2hbody:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv0→M.valv2→(∃u,M.Rel0vu)∧∀(u:W),M.Rel0vu→M.valu2v:Whv:Relation.ReflTransGen(funxx_1↦∃y,(x=y∧M.valx0)∧M.Rel0yx_1)wvkey:Relation.ReflTransGen(M.Rel0)wv∧M.valv2hpv:M.valv0hdead:∀(v_1:W),M.Rel0vv_1→False⊢ Falseobtain⟨u,hu⟩:=(hbodyvkey.1hpvkey.2).1W:TypeM:KripkeModelWw:Wh1:∀φ∈gammaOne,evaluateMwφhs:M.valw2hbody:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv0→M.valv2→(∃u,M.Rel0vu)∧∀(u:W),M.Rel0vu→M.valu2v:Whv:Relation.ReflTransGen(funxx_1↦∃y,(x=y∧M.valx0)∧M.Rel0yx_1)wvkey:Relation.ReflTransGen(M.Rel0)wv∧M.valv2hpv:M.valv0hdead:∀(v_1:W),M.Rel0vv_1→Falseu:Whu:M.Rel0vu⊢ FalseexacthdeaduhuAll goals completed! 🐙
Γ₂ implies the negation of testIP
Γ₂ ⊨ ¬[(p?;a)*](p → ⟨a⟩⊤).
lemmagammaTwo_not_withTest{W:Type}(M:KripkeModelW)(w:W)(h2:∀φ∈gammaTwo,evaluateMwφ):¬evaluateMwtestIP:=byW:TypeM:KripkeModelWw:Wh2:∀φ∈gammaTwo,evaluateMwφ⊢ ¬evaluateMwtestIPobtain⟨hqp,-,v,hv,hqv,hdead⟩:=(gammaTwo_iffMw).mph2W:TypeM:KripkeModelWw:Wh2:∀φ∈gammaTwo,evaluateMwφhqp:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv1→M.valv0v:Whv:Relation.ReflTransGen(M.Rel0)wvhqv:M.valv1hdead:∀(u:W),¬M.Rel0vu⊢ ¬evaluateMwtestIPsimponly[testIP,evaluate,relate,not_forall,not_and,not_not,not_exists,exists_prop,not_false_eq_true,and_true]W:TypeM:KripkeModelWw:Wh2:∀φ∈gammaTwo,evaluateMwφhqp:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv1→M.valv0v:Whv:Relation.ReflTransGen(M.Rel0)wvhqv:M.valv1hdead:∀(u:W),¬M.Rel0vu⊢ ∃x,Relation.ReflTransGen(funxx_1↦∃y,(x=y∧M.valx0)∧M.Rel0yx_1)wx∧M.valx0∧∀(x_1:W),¬M.Rel0xx_1refine⟨v,?_,hqpvhvhqv,hdead⟩W:TypeM:KripkeModelWw:Wh2:∀φ∈gammaTwo,evaluateMwφhqp:∀(v:W),Relation.ReflTransGen(M.Rel0)wv→M.valv1→M.valv0v:Whv:Relation.ReflTransGen(M.Rel0)wvhqv:M.valv1hdead:∀(u:W),¬M.Rel0vu⊢ Relation.ReflTransGen(funxx_1↦∃y,(x=y∧M.valx0)∧M.Rel0yx_1)wv-- the path to `v` consists of `p`-states, hence is a `(p?;a)*`-pathexactRelation.ReflTransGen.mono(funxy⟨hxy,hpx,_⟩=>⟨x,⟨rfl,hpx⟩,hxy⟩)__(gammaTwo_pathh2hvhqv)All goals completed! 🐙
testIP is an interpolant for Γ₁;Γ₂
[(p?;a)*](p → ⟨a⟩⊤) is an Interpolant for ⋀Γ₁ → ¬⋀Γ₂ (with a test).