Quelle Weakening.thy
Sprache: Isabelle
(*
Title : Psi - calculi
Author / Maintainer : Jesper Bengtson ( jebe @ itu . dk ) , 2012
*)
theory Weakening
imports Weak_Bisimulation
begin
locale weak = env +
assumes weaken: "Ψ ↪ Ψ ⊗ Ψ'"
begin
lemma entWeaken:
fixes Ψ :: 'b
and φ :: 'c
assumes "Ψ ⊨ φ"
shows "Ψ ⊗ Ψ' ⊨ φ"
using assms weaken
by (auto simp add: AssertionStatImp_def)
lemma assertWeaken:
fixes Ψ :: 'b
and Ψ' :: 'b
shows "Ψ ↪ Ψ ⊗ Ψ'"
by (auto simp add: AssertionStatImp_def entWeaken)
lemma frameWeaken:
fixes F :: "'b frame"
and G :: "'b frame"
shows "F ↪ F F ⊗ F G"
proof -
obtain AF ΨF where FrF: "F = ⟨ AF , ΨF ⟩ " and "AF ♯ * F" and "AF ♯ * G"
by (rule_tac F=F and C="(F, G)" in freshFrame) auto
obtain AG ΨG where FrG: "G = ⟨ AG , ΨG ⟩ " and "AG ♯ * F" and "AG ♯ * G" and "AG ♯ * AF " and "AG ♯ * ΨF "
by (rule_tac F=G and C="(F, G, AF , ΨF )" in freshFrame) auto
from FrG ‹ AF ♯ * G› ‹ AG ♯ * AF › have "AF ♯ * ΨG " by auto
have "ΨF ↪ ΨF ⊗ ΨG " by (rule weaken)
hence "⟨ AG , ΨF ⟩ ↪ F ⟨ AG , ΨF ⊗ ΨG ⟩ " by (rule_tac frameImpResChainPres) auto
with ‹ AG ♯ * ΨF › have "⟨ ε, ΨF ⟩ ↪ F ⟨ AG , ΨF ⊗ ΨG ⟩ " using frameResFreshChain
by (rule_tac FrameStatImpTrans) (auto simp add: FrameStatEq_def)
with FrF FrG ‹ AG ♯ * AF › ‹ AG ♯ * ΨF › ‹ AF ♯ * ΨG › show ?thesis
by (force simp add: frameChainAppend intro: frameImpResChainPres)
qed
lemma unitAssertWeaken:
fixes Ψ :: 'b
shows "1 ↪ Ψ"
proof -
have "1 ↪ 1 ⊗ Ψ" by (rule assertWeaken)
moreover have "1 ⊗ Ψ ↪ Ψ" by (metis Identity AssertionStatEq_def Commutativity AssertionStatEqTrans)
ultimately show ?thesis by (rule AssertionStatImpTrans)
qed
lemma unitFrameWeaken:
fixes F :: "'b frame"
shows "⟨ ε, 1 ⟩ ↪ F F"
proof -
have "⟨ ε, 1 ⟩ ↪ F ((⟨ ε, 1 ⟩ ) ⊗ F F)" by (rule frameWeaken)
moreover obtain AF ΨF where FrF: "F = ⟨ AF , ΨF ⟩ "
by (rule_tac F=F and C="()" in freshFrame) auto
hence "(⟨ ε, 1 ⟩ ) ⊗ F F ≃ F F"
by simp (metis frameIntIdentity frameIntCommutativity FrameStatEqTrans FrameStatEqSym)
ultimately show ?thesis by (metis FrameStatImpTrans FrameStatEq_def)
qed
lemma insertAssertionWeaken:
fixes F :: "'b frame"
and Ψ :: 'b
shows "⟨ ε, Ψ⟩ ↪ F insertAssertion F Ψ"
proof -
have "⟨ ε, Ψ⟩ ↪ F (⟨ ε, Ψ⟩ ) ⊗ F F" by (rule frameWeaken)
thus ?thesis by simp
qed
lemma frameImpStatEq:
fixes AF :: "name list"
and Ψ :: 'b
and Ψ' :: 'b
and φ :: 'c
assumes "(⟨ AF , Ψ⟩ ) ⊨ F φ"
and "Ψ ≃ Ψ'"
shows "(⟨ AF , Ψ'⟩ ) ⊨ F φ"
proof -
obtain p::"name prm" where "(p ∙ AF ) ♯ * φ" and "(p ∙ AF ) ♯ * Ψ" and "(p ∙ AF ) ♯ * Ψ'"
and "distinctPerm p" and S: "set p ⊆ set AF × set(p ∙ AF )"
by (rule_tac c="(φ, Ψ, Ψ')" in name_list_avoiding) auto
from ‹ (⟨ AF , Ψ⟩ ) ⊨ F φ› ‹ (p ∙ AF ) ♯ * Ψ› S have "(⟨ (p ∙ AF ), p ∙ Ψ⟩ ) ⊨ F φ" by (simp add: frameChainAlpha)
hence "(p ∙ Ψ) ⊨ φ" using ‹ (p ∙ AF ) ♯ * φ› by (rule frameImpE)
moreover from ‹ Ψ ≃ Ψ'› have "(p ∙ Ψ) ≃ (p ∙ Ψ')" by (rule AssertionStatEqClosed)
ultimately have "(p ∙ Ψ') ⊨ φ" by (simp add: AssertionStatEq_def AssertionStatImp_def)
hence "(⟨ (p ∙ AF ), p ∙ Ψ'⟩ ) ⊨ F φ" using ‹ (p ∙ AF ) ♯ * φ›
by (rule_tac frameImpI) auto
with ‹ (p ∙ AF ) ♯ * Ψ'› S show ?thesis by (simp add: frameChainAlpha)
qed
lemma statImpTauDerivative:
fixes Ψ :: 'b
and P :: "('a, 'b, 'c) psi"
and P' :: "('a, 'b, 'c) psi"
assumes "Ψ ⊳ P ⟼ τ ≺ P'"
shows "insertAssertion (extractFrame P) Ψ ↪ F insertAssertion (extractFrame P') Ψ"
proof (auto simp add: FrameStatImp_def)
fix φ :: 'c
obtain AP ΨP where FrP: "extractFrame P = ⟨ AP , ΨP ⟩ " and "AP ♯ * P" and "AP ♯ * φ" and "AP ♯ * Ψ" and "distinct AP "
by (rule_tac C="(P, φ, Ψ)" in freshFrame) auto
with ‹ Ψ ⊳ P ⟼ τ ≺ P'› obtain Ψ' AP ' ΨP ' where FrP': "extractFrame P' = ⟨ AP ', ΨP '⟩ " and "ΨP ⊗ Ψ' ≃ ΨP '"
and "AP ' ♯ * P'" and "AP ' ♯ * φ" and "AP ' ♯ * Ψ"
by (rule_tac C="(Ψ, φ)" in expandTauFrame) auto
assume "insertAssertion (extractFrame P) Ψ ⊨ F φ"
with FrP ‹ AP ♯ * φ› ‹ AP ♯ * Ψ› have "Ψ ⊗ ΨP ⊨ φ" by (auto dest: frameImpE)
hence "(Ψ ⊗ ΨP ) ⊗ Ψ' ⊨ φ" by (rule entWeaken)
hence "Ψ ⊗ ΨP ' ⊨ φ" using ‹ ΨP ⊗ Ψ' ≃ ΨP '›
by (rule_tac statEqEnt, auto) (metis Associativity compositionSym AssertionStatEqTrans AssertionStatEqSym Commutativity)
with ‹ AP ' ♯ * φ› ‹ AP ' ♯ * Ψ› FrP' show "insertAssertion (extractFrame P') Ψ ⊨ F φ"
by (force intro: frameImpI)
qed
lemma weakenTransition:
fixes Ψ :: 'b
and P :: "('a, 'b, 'c) psi"
and Rs :: "('a, 'b, 'c) residual"
and Ψ' :: 'b
assumes "Ψ ⊳ P ⟼ Rs"
shows "Ψ ⊗ Ψ' ⊳ P ⟼ Rs"
using assms
proof (nominal_induct avoiding: Ψ' rule: semantics.strong_induct)
case (cInput Ψ M K xvec N Tvec P Ψ')
from ‹ Ψ ⊨ M ↔ K› have "Ψ ⊗ Ψ' ⊨ M ↔ K" by (rule entWeaken)
thus ?case using ‹ distinct xvec› ‹ set xvec ⊆ (supp N)› ‹ length xvec = length Tvec›
by (rule Input)
next
case (Output Ψ M K N P Ψ')
from ‹ Ψ ⊨ M ↔ K› have "Ψ ⊗ Ψ' ⊨ M ↔ K" by (rule entWeaken)
thus ?case by (rule semantics.Output )
next
case (Case Ψ P Rs φ Cs Ψ')
have "Ψ ⊗ Ψ' ⊳ P ⟼ Rs" by (rule Case )
moreover note ‹ (φ, P) mem Cs›
moreover from ‹ Ψ ⊨ φ› have "Ψ ⊗ Ψ' ⊨ φ" by (rule entWeaken)
ultimately show ?case using ‹ guarded P›
by (rule semantics.Case )
next
case (cPar1 Ψ ΨQ P α P' Q AQ Ψ')
have "(Ψ ⊗ ΨQ ) ⊗ Ψ' ⊳ P ⟼ α ≺ P'" by (rule cPar1)
hence "(Ψ ⊗ Ψ') ⊗ ΨQ ⊳ P ⟼ α ≺ P'"
by (metis statEqTransition Composition Associativity Commutativity AssertionStatEqTrans)
thus ?case using ‹ extractFrame Q = ⟨ AQ , ΨQ ⟩ › ‹ bn α ♯ * Q› ‹ AQ ♯ * Ψ› ‹ AQ ♯ * Ψ'› ‹ AQ ♯ * P› ‹ AQ ♯ * α ›
by (rule_tac Par1) auto
next
case (cPar2 Ψ ΨP Q α Q' P AP Ψ')
have "(Ψ ⊗ ΨP ) ⊗ Ψ' ⊳ Q ⟼ α ≺ Q'" by (rule cPar2)
hence "(Ψ ⊗ Ψ') ⊗ ΨP ⊳ Q ⟼ α ≺ Q'"
by (metis statEqTransition Composition Associativity Commutativity AssertionStatEqTrans)
thus ?case using ‹ extractFrame P = ⟨ AP , ΨP ⟩ › ‹ bn α ♯ * P› ‹ AP ♯ * Ψ› ‹ AP ♯ * Ψ'› ‹ AP ♯ * Q› ‹ AP ♯ * α ›
by (rule_tac Par2) auto
next
case (cComm1 Ψ ΨQ P M N P' AP ΨP Q K xvec Q' AQ Ψ')
have "(Ψ ⊗ ΨQ ) ⊗ Ψ' ⊳ P ⟼ M( N) ≺ P'" by (rule cComm1)
hence "(Ψ ⊗ Ψ') ⊗ ΨQ ⊳ P ⟼ M( N) ≺ P'"
by (metis statEqTransition Composition Associativity Commutativity AssertionStatEqTrans)
moreover note ‹ extractFrame P = ⟨ AP , ΨP ⟩ ›
moreover have "(Ψ ⊗ ΨP ) ⊗ Ψ' ⊳ Q ⟼ K( ν*xvec) ⟨ N⟩ ≺ Q'" by (rule cComm1)
hence "(Ψ ⊗ Ψ') ⊗ ΨP ⊳ Q ⟼ K( ν*xvec) ⟨ N⟩ ≺ Q'"
by (metis statEqTransition Composition Associativity Commutativity AssertionStatEqTrans)
moreover note ‹ extractFrame Q = ⟨ AQ , ΨQ ⟩ ›
moreover from ‹ Ψ ⊗ ΨP ⊗ ΨQ ⊨ M ↔ K› have "(Ψ ⊗ ΨP ⊗ ΨQ ) ⊗ Ψ' ⊨ M ↔ K" by (rule entWeaken)
hence "(Ψ ⊗ Ψ') ⊗ ΨP ⊗ ΨQ ⊨ M ↔ K" by (metis statEqEnt Composition Associativity Commutativity AssertionStatEqTrans)
ultimately show ?case using ‹ AP ♯ * Ψ› ‹ AP ♯ * Ψ'› ‹ AP ♯ * P› ‹ AP ♯ * Q› ‹ AP ♯ * M› ‹ AP ♯ * AQ ›
‹ AQ ♯ * Ψ› ‹ AQ ♯ * Ψ'› ‹ AQ ♯ * P› ‹ AQ ♯ * Q› ‹ AQ ♯ * K› ‹ xvec ♯ * P›
by (rule_tac Comm1) (assumption | auto)+
next
case (cComm2 Ψ ΨQ P M xvec N P' AP ΨP Q K Q' AQ Ψ')
have "(Ψ ⊗ ΨQ ) ⊗ Ψ' ⊳ P ⟼ M( ν*xvec) ⟨ N⟩ ≺ P'" by (rule cComm2)
hence "(Ψ ⊗ Ψ') ⊗ ΨQ ⊳ P ⟼ M( ν*xvec) ⟨ N⟩ ≺ P'"
by (metis statEqTransition Composition Associativity Commutativity AssertionStatEqTrans)
moreover note ‹ extractFrame P = ⟨ AP , ΨP ⟩ ›
moreover have "(Ψ ⊗ ΨP ) ⊗ Ψ' ⊳ Q ⟼ K( N) ≺ Q'" by (rule cComm2)
hence "(Ψ ⊗ Ψ') ⊗ ΨP ⊳ Q ⟼ K( N) ≺ Q'"
by (metis statEqTransition Composition Associativity Commutativity AssertionStatEqTrans)
moreover note ‹ extractFrame Q = ⟨ AQ , ΨQ ⟩ ›
moreover from ‹ Ψ ⊗ ΨP ⊗ ΨQ ⊨ M ↔ K› have "(Ψ ⊗ ΨP ⊗ ΨQ ) ⊗ Ψ' ⊨ M ↔ K" by (rule entWeaken)
hence "(Ψ ⊗ Ψ') ⊗ ΨP ⊗ ΨQ ⊨ M ↔ K" by (metis statEqEnt Composition Associativity Commutativity AssertionStatEqTrans)
ultimately show ?case using ‹ AP ♯ * Ψ› ‹ AP ♯ * Ψ'› ‹ AP ♯ * P› ‹ AP ♯ * Q› ‹ AP ♯ * M› ‹ AP ♯ * AQ ›
‹ AQ ♯ * Ψ› ‹ AQ ♯ * Ψ'› ‹ AQ ♯ * P› ‹ AQ ♯ * Q› ‹ AQ ♯ * K› ‹ xvec ♯ * Q›
by (rule_tac Comm2) (assumption | auto)+
next
case (cOpen Ψ P M xvec yvec N P' x Ψ')
have "Ψ ⊗ Ψ' ⊳ P ⟼ M( ν*(xvec@yvec)) ⟨ N⟩ ≺ P'" by (rule cOpen)
thus ?case using ‹ x ∈ supp N› ‹ x ♯ Ψ› ‹ x ♯ Ψ'› ‹ x ♯ M› ‹ x ♯ xvec› ‹ x ♯ yvec›
by (rule_tac Open ) auto
next
case (cScope Ψ P α P' x Ψ')
have "Ψ ⊗ Ψ' ⊳ P ⟼ α ≺ P'" by (rule cScope)
thus ?case using ‹ x ♯ Ψ› ‹ x ♯ Ψ'› ‹ x ♯ α› by (rule_tac Scope) auto
next
case (Bang Ψ P Rs Ψ')
have "Ψ ⊗ Ψ' ⊳ P ∥ !P⟼ Rs" by (rule Bang)
thus ?case using ‹ guarded P› by (rule semantics.Bang)
qed
end
end
Messung V0.5 in Prozent C=64 H=95 G=80
¤ Dauer der Verarbeitung: 0.14 Sekunden
¤
*© Formatika GbR, Deutschland
Wurzel
Suchen
NIST Cobol Testsuite
Haftungshinweis
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.
2026-06-12