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.1 Sekunden
(vorverarbeitet am 2026-07-02)
¤
*© Formatika GbR, Deutschland
2026-07-27