text‹This file is a (heavily modified) variant of the theory {\it Psi\_Calculi.Sim\_Pres}
~\cite{DBLP:journals/afp/Bengtson12}.›
context env begin
lemma inputPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Rel :: "('b × ('a, 'b, 'c) psi × ('a, 'b, 'c) psi) set" and Q :: "('a, 'b, 'c) psi" and M :: 'a and xvec :: "name list" and N :: 'a
lemma outputPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Rel :: "('b × ('a, 'b, 'c) psi × ('a, 'b, 'c) psi) set" and Q :: "('a, 'b, 'c) psi" and M :: 'a and N :: 'a
from P'RelQ' have"(Ψ, (ν*(x#xvec))P', (ν*(x#xvec))Q') ∈ Rel'" using‹(x#xvec) ♯* Ψ› by(rule C1) thenhave"(Ψ, (νx)((ν*xvec)P'), (νx)((ν*xvec)Q')) ∈ Rel'" by simp
moreoverfrom‹Ψ ⊳ P ⟼🍋M(ν*xvec)⟨N⟩≺ P'›‹x ∈ supp M›‹x ♯ Ψ› have"Ψ ⊳(νx)P ⟼ τ ≺(νx)((ν*xvec)P')" by(rule BrClose) ultimatelyshow ?case by blast qed qed qed
lemma resChainPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Rel :: "('b × ('a, 'b, 'c) psi × ('a, 'b, 'c) psi) set" and Q :: "('a, 'b, 'c) psi" and xvec :: "name list"
assumes PSimQ: "Ψ ⊳ P ↝[Rel] Q" and"eqvt Rel" and"xvec ♯* Ψ" and C1: "∧Ψ' R S yvec. [(Ψ', R, S) ∈ Rel; yvec ♯* Ψ']==> (Ψ', (ν*yvec)R, (ν*yvec)S) ∈ Rel"
shows"Ψ ⊳(ν*xvec)P ↝[Rel] (ν*xvec)Q" using‹xvec ♯* Ψ› proof(induct xvec) case Nil from PSimQ show ?caseby simp next case(Cons x xvec) from‹(x#xvec) ♯* Ψ›have"x ♯ Ψ"and"xvec ♯* Ψ"by simp+ from‹xvec ♯* Ψ›have"Ψ ⊳(ν*xvec)P ↝[Rel] (ν*xvec)Q"by(rule Cons) moreovernote‹eqvt Rel›‹x ♯ Ψ› moreoverhave"Rel ⊆ Rel"by simp ultimatelyhave"Ψ ⊳(νx)((ν*xvec)P) ↝[Rel] (νx)((ν*xvec)Q)"using C1 by(rule resPres) thenshow ?caseby simp qed
lemma parPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Rel :: "('b × ('a, 'b, 'c) psi × ('a, 'b, 'c) psi) set" and Q :: "('a, 'b, 'c) psi" and R :: "('a, 'b, 'c) psi" and Rel' :: "('b × ('a, 'b, 'c) psi × ('a, 'b, 'c) psi) set"
assumes PRelQ: "∧AR ΨR. [extractFrame R = ⟨AR, ΨR⟩; AR♯* Ψ; AR♯* P; AR♯* Q]==> (Ψ ⊗ ΨR, P, Q) ∈ Rel" and Eqvt: "eqvt Rel" and Eqvt': "eqvt Rel'"
and StatImp: "∧Ψ' S T. (Ψ', S, T) ∈ Rel ==> insertAssertion (extractFrame T) Ψ' ↪F insertAssertion (extractFrame S) Ψ'" and Sim: "∧Ψ' S T. (Ψ', S, T) ∈ Rel ==> Ψ' ⊳ S ↝[Rel] T" and Ext: "∧Ψ' S T Ψ''. [(Ψ', S, T) ∈ Rel]==> (Ψ' ⊗ Ψ'', S, T) ∈ Rel"
and C1: "∧Ψ' S T AU ΨU U. [(Ψ' ⊗ ΨU, S, T) ∈ Rel; extractFrame U = ⟨AU, ΨU⟩; AU♯* Ψ'; AU♯* S; AU♯* T]==> (Ψ', S ∥ U, T ∥ U) ∈ Rel'" and C2: "∧Ψ' S T xvec. [(Ψ', S, T) ∈ Rel'; xvec ♯* Ψ']==> (Ψ', (ν*xvec)S, (ν*xvec)T) ∈ Rel'" and C3: "∧Ψ' S T Ψ''. [(Ψ', S, T) ∈ Rel; Ψ' ≃ Ψ'']==> (Ψ'', S, T) ∈ Rel"
shows"Ψ ⊳ P ∥ R ↝[Rel'] Q ∥ R" using Eqvt' proof(induct rule: simI[of _ _ _ _ "()"]) case(cSim α QR) from‹bn α ♯* (P ∥ R)›‹bn α ♯* (Q ∥ R)› have"bn α ♯* P"and"bn α ♯* Q"and"bn α ♯* R" by simp+ from‹Ψ ⊳ Q ∥ R ⟼α ≺ QR›‹bn α ♯* Ψ›‹bn α ♯* Q›‹bn α ♯* R›‹bn α ♯* subject α› show ?case proof(induct rule: parCases[where C = "(P, R)"]) case(cPar1 Q' AR ΨR) from‹AR♯* (P, R)›have"AR♯* P"by simp have FrR: "extractFrame R = ⟨AR, ΨR⟩"by fact from‹AR♯* α›‹bn α ♯* R› FrR have"bn α ♯* ΨR" by(auto dest: extractFrameFreshChain) from FrR ‹AR♯* Ψ›‹AR♯* P›‹AR♯* Q›have"Ψ ⊗ ΨR⊳ P ↝[Rel] Q" by(blast intro: Sim PRelQ) moreoverhave QTrans: "Ψ ⊗ ΨR⊳ Q ⟼α ≺ Q'"by fact ultimatelyobtain P' where PTrans: "Ψ ⊗ ΨR⊳ P ⟼α ≺ P'" and P'RelQ': "(Ψ ⊗ ΨR, P', Q') ∈ Rel" using‹bn α ♯* Ψ›‹bn α ♯* ΨR›‹bn α ♯* P› by(force dest: simE) from PTrans QTrans ‹AR♯* P›‹AR♯* Q›‹AR♯* α›‹bn α ♯* subject α›‹distinct(bn α)›have"AR♯* P'"and"AR♯* Q'" by(blast dest: freeFreshChainDerivative)+ from PTrans ‹bn α ♯* R› FrR ‹AR♯* Ψ›‹AR♯* P›‹AR♯* α›have"Ψ ⊳ P ∥ R ⟼α ≺ (P' ∥ R)" by(metis Par1) moreoverfrom P'RelQ' FrR ‹AR♯* Ψ›‹AR♯* P'›‹AR♯* Q'›have"(Ψ, P' ∥ R, Q' ∥ R) ∈ Rel'"by(rule C1) ultimatelyshow ?caseby blast next case(cPar2 R' AQ ΨQ) from‹AQ♯* (P, R)›have"AQ♯* P"and"AQ♯* R"by simp+ obtain AP ΨPwhere FrP: "extractFrame P = ⟨AP, ΨP⟩"and"AP♯* (Ψ, AQ, ΨQ, α, R)" by(rule freshFrame) thenhave"AP♯* Ψ"and"AP♯* AQ"and"AP♯* ΨQ"and"AP♯* α"and"AP♯* R" by simp+
show ?caseusing Transition Relation by blast next case(cBrComm2 ΨR M xvec N Q' AQ ΨQ R' AR) have FrQ: "extractFrame Q = ⟨AQ, ΨQ⟩"by fact from‹AQ♯* (P, R)›have"AQ♯* P"and"AQ♯* R"by simp+
from P'RelQ' have"((Ψ ⊗ ΨR) ⊗ Ψ', P', Q') ∈ Rel"by(rule Ext) with ReqR' have"(Ψ ⊗ ΨR', P', Q') ∈ Rel"by(metis C3 Associativity compositionSym) with FrR' ‹AR' ♯* P'›‹AR' ♯* Q'›‹AR' ♯* Ψ›have Relation: "(Ψ, P' ∥ R', Q' ∥ R') ∈ Rel'" by(metis C1) show ?caseusing Transition Relation by blast qed qed
unbundle no relcomp_syntax
lemma bangPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Q :: "('a, 'b, 'c) psi" and R :: "('a, 'b, 'c) psi" and Rel :: "('b × ('a, 'b, 'c) psi × ('a, 'b, 'c) psi) set" and Rel' :: "('b × ('a, 'b, 'c) psi × ('a, 'b, 'c) psi) set"
assumes"(Ψ, P, Q) ∈ Rel" and"eqvt Rel'" and"guarded P" and"guarded Q" and cSim: "∧Ψ' S T. (Ψ', S, T) ∈ Rel ==> Ψ' ⊳ S ↝[Rel] T" and cExt: "∧Ψ' S T Ψ''. (Ψ', S, T) ∈ Rel ==> (Ψ' ⊗ Ψ'', S, T) ∈ Rel" and cSym: "∧Ψ' S T. (Ψ', S, T) ∈ Rel ==> (Ψ', T, S) ∈ Rel" and StatEq: "∧Ψ' S T Ψ''. [(Ψ', S, T) ∈ Rel; Ψ' ≃ Ψ'']==> (Ψ'', S, T) ∈ Rel" and Closed: "∧Ψ' S T p. (Ψ', S, T) ∈ Rel ==> ((p::name prm) ∙ Ψ', p ∙ S, p ∙ T) ∈ Rel" and Assoc: "∧Ψ' S T U. (Ψ', S ∥ (T ∥ U), (S ∥ T) ∥ U) ∈ Rel" and ParPres: "∧Ψ' S T U. (Ψ', S, T) ∈ Rel ==> (Ψ', S ∥ U, T ∥ U) ∈ Rel" and FrameParPres: "∧Ψ' ΨU S T U AU. [(Ψ' ⊗ ΨU, S, T) ∈ Rel; extractFrame U = ⟨AU, ΨU⟩; AU♯* Ψ'; AU♯* S; AU♯* T]==> (Ψ', U ∥ S, U ∥ T) ∈ Rel" and ResPres: "∧Ψ' S T xvec. [(Ψ', S, T) ∈ Rel; xvec ♯* Ψ']==> (Ψ', (ν*xvec)S, (ν*xvec)T) ∈Rel" and ScopeExt: "∧xvec Ψ' S T. [xvec ♯* Ψ'; xvec ♯* T]==> (Ψ', (ν*xvec)(S ∥ T), ((ν*xvec)S) ∥ T) ∈ Rel" and Trans: "∧Ψ' S T U. [(Ψ', S, T) ∈ Rel; (Ψ', T, U) ∈ Rel]==> (Ψ', S, U) ∈ Rel" andCompose: "∧Ψ' S T U O. [(Ψ', S, T) ∈ Rel; (Ψ', T, U) ∈ Rel'; (Ψ', U, O) ∈ Rel]==> (Ψ', S, O) ∈ Rel'" and C1: "∧Ψ S T U. [(Ψ, S, T) ∈ Rel; guarded S; guarded T]==> (Ψ, U ∥ !S, U ∥ !T) ∈Rel'" and Der: "∧Ψ' S α S' T. [Ψ' ⊳ !S ⟼α ≺ S'; (Ψ', S, T) ∈ Rel; bn α ♯* Ψ'; bn α ♯* S; bn α ♯* T; guarded T; bn α ♯* subject α]==> ∃T' U O. Ψ' ⊳ !T ⟼α ≺ T' ∧ (Ψ', S', U ∥ !S) ∈ Rel ∧ (Ψ', T', O ∥ !T) ∈ Rel ∧ (Ψ', U, O) ∈ Rel ∧ ((supp U)::name set) ⊆ supp S' ∧ ((supp O)::name set) ⊆ supp T'"
shows"Ψ ⊳ R ∥ !P ↝[Rel'] R ∥ !Q" using‹eqvt Rel'› proof(induct rule: simI[of _ _ _ _ "()"]) case(cSim α RQ') from‹bn α ♯* (R ∥ !P)›‹bn α ♯* (R ∥ !Q)›have"bn α ♯* P"and"bn α ♯* (!Q)"and"bn α ♯* Q"and"bn α ♯* R"by simp+ from‹Ψ ⊳ R ∥ !Q ⟼α ≺ RQ'›‹bn α ♯* Ψ›‹bn α ♯* R›‹bn α ♯* !Q›‹bn α ♯* subject α›show ?case proof(induct rule: parCases[where C=P]) case(cPar1 R' AQ ΨQ) from‹extractFrame (!Q) = ⟨AQ, ΨQ⟩›have"AQ = []"and"ΨQ = SBottom'"by simp+ with‹Ψ ⊗ Ψ(* Titl
by(intro Par1) (assumption | simp)+
moreover from \open(Ψ, P, Q) ∈ Rel›‹guarded Q›have"(Ψ !P, R' ∥ Rel'" byule ultimatelyshow ?caseby blast next casesubR Ψ‹
Trans:s: "\<Psi Ψ!Q ⟼ <prec "ractFrame R = ⟨R, Ψfact+
java.lang.NullPointerException
with QTrans ‹ cname ⇀
obtainis P C ≡"
"(\<Psi ΨR, Q', S ∥ Ψ\^R, S, T) \in> Rel"
ndpT: "((su T)::name set) \\s> supp P'" and suppS: "((supp S)::n set) ⊆
by(drule_tac cSym) (auto d| Class C\RightarrowasPC)
from PTrans FrR \< is_type
by(intro Par2) auto
moreover
{
from ‹AR♯* P›‹AR♯* (!Q)›‹AR♯* α› PTrans QTrans ‹bn α ♯* subject α›‹distinct(bn α)› have "AR♯* P'" and "AR♯* Q'"
by(force dest: freeFreshChainDerivative)+
from ‹(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel› FrR ‹AR♯* Ψ›‹AR♯* P'›‹AR♯* P› suppT have "(Ψ, R ∥ P', R ∥ (T ∥ !P)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have "(Ψ, R ∥ P', (R ∥ T) ∥ !P) ∈ Rel" by(blast intro: Assoc Trans)
moreover from ‹(Ψ, P, Q) ∈ Rel›‹guarded P›‹guarded Q› have "(Ψ, (R ∥ T) ∥ !P, (R∥ T) ∥ !Q) ∈ Rel'"
by(rule C1)
moreover from ‹(Ψ ⊗ ΨR, Q', S ∥ !Q) ∈ Rel›‹(Ψ ⊗ ΨR, S, T) ∈ Rel› have "(Ψ ⊗ ΨR, Q', T∥ !Q) ∈ Rel"
by(blast intro: ParPres Trans)
with FrR ‹AR♯* Ψ›‹AR♯* P'›‹AR♯* Q'›‹AR♯* (!Q)› suppT suppS have "(Ψ, R ∥ Q', R ∥ (T ∥ !Q)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have "(Ψ, R ∥ Q', (R ∥ T) ∥ !Q) ∈ Rel" by(blast intro: Assoc Trans)
ultimately have "(Ψ, R ∥ P', R ∥ Q') ∈ Rel'" by(blast intro: cSym Compose)
}
ultimately show ?case by blast
next
case(cComm1 ΨQ M N R' AR ΨR K xvec Q' AQ)
from ‹extractFrame (!Q) = ⟨AQ, ΨQ⟩› have "AQ = []" and "ΨQ = SBottom'" by simp+
have RTrans: "Ψ ⊗ ΨQ⊳ R ⟼M(N)≺ R'" and FrR: "extractFrame R = ⟨AR, ΨR⟩" by fact+
moreover have QTrans: "Ψ ⊗ ΨR⊳ !Q ⟼K(ν*xvec)⟨N⟩≺ Q'" by fact
from FrR ‹xvec ♯* R›‹AR♯* xvec› have "xvec ♯* ΨR" by(force dest: extractFrameFreshChain)
with QTrans ‹(Ψ, P, Q) ∈ Rel›‹xvec ♯* Ψ›‹xvec ♯* P›‹xvec ♯* (!Q)›‹guarded P›‹xvec ♯* K›
obtain P' S T where PTrans: "Ψ ⊗ ΨR⊳ !P ⟼K(ν*xvec)⟨N⟩≺ P'" and "(Ψ ⊗ ΨR, P', T ∥ !P) ∈Rel"
and "(Ψ ⊗ ΨR, Q', S ∥ !Q) ∈ Rel" and "(Ψ ⊗ ΨR, S, T) ∈ Rel"
and suppT: "((supp T)::name set) ⊆ supp P'" and suppS: "((supp S)::name set) ⊆ supp Q'"
apply(drule_tac cSym)
by (metis Der bn.simps(3) cExt freshCompChain(1) optionFreshChain(1) psiFreshVec(7) subject.simps(3))
note ‹Ψ ⊗ ΨR⊗ ΨQ⊨ M ↔ K›
ultimately have "Ψ ⊳ R ∥ !P ⟼τ ≺(ν*xvec)(R' ∥ P')"
using PTrans ‹ΨQ = SBottom'›‹xvec ♯* R›‹AR♯* Ψ›‹AR♯* R›‹AR♯* M›‹AR♯* P›
by(intro Comm1) (assumption | simp)+
moreover from ‹AR♯* P›‹AR♯* (!Q)›‹AR♯* xvec› PTrans QTrans ‹xvec ♯* K›‹distinct xvec›
have "AR♯* P'" and "AR♯* Q'" by(force dest: outputFreshChainDerivative)+
moreover with RTrans FrR ‹distinct AR›‹AR♯* R›‹AR♯* N›‹AR♯* Ψ›‹AR♯* P›‹AR♯* (!Q)›‹AR♯* M›
obtain Ψ' AR' ΨR' where FrR': "extractFrame R' = ⟨AR', ΨR'⟩" and "ΨR⊗ Ψ' ≃ ΨR'" and "AR' ♯* Ψ"
and "AR' ♯* P'" and "AR' ♯* Q'" and "AR' ♯* P" and "AR' ♯* Q"
by(auto intro: expandFrame[where C="(Ψ, P, P', Q, Q')" and C'=Ψ])
moreover
{
from ‹(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel› have "((Ψ ⊗ ΨR) ⊗ Ψ', P', T ∥ !P) ∈ Rel" by(rule cExt)
with ‹ΨR⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', P', T ∥ !P) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* P› suppT have "(Ψ, R' ∥ P', R' ∥ (T ∥ !P)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have "(Ψ, R' ∥ P', (R' ∥ T) ∥ !P) ∈ Rel" by(blast intro: Assoc Trans)
with ‹xvec ♯* Ψ›‹xvec ♯* P› have "(Ψ, (ν*xvec)(R' ∥ P'), ((ν*xvec)(R' ∥ T)) ∥ !P) ∈ Rel"
by(metis ResPres psiFreshVec ScopeExt Trans)
moreover from ‹(Ψ, P, Q) ∈ Rel›‹guarded P›‹guarded Q› have "(Ψ, ((ν*xvec)(R' ∥ T)) ∥ !P, ((ν*xvec)(R' ∥ T)) ∥ !Q) ∈ Rel'"
by(rule C1)
moreover from ‹(Ψ ⊗ ΨR, Q', S ∥ !Q) ∈ Rel›‹(Ψ ⊗ ΨR, S, T) ∈ Rel› have "(Ψ ⊗ ΨR, Q', T∥ !Q) ∈ Rel"
by(blast intro: ParPres Trans)
then have "((Ψ ⊗ ΨR) ⊗ Ψ', Q', T ∥ !Q) ∈ Rel" by(rule cExt)
with ‹ΨR⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', Q', T ∥ !Q) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* Q'›‹AR' ♯* Q› suppT suppS have "(Ψ, R' ∥ Q', R' ∥ (T ∥ !Q)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have "(Ψ, R' ∥ Q', (R' ∥ T) ∥ !Q) ∈ Rel" by(blast intro: Assoc Trans)
with ‹xvec ♯* Ψ›‹xvec ♯* (!Q)› have "(Ψ, (ν*xvec)(R' ∥ Q'), ((ν*xvec)(R' ∥ T)) ∥ !Q) ∈Rel"
by(metis ResPres psiFreshVec ScopeExt Trans)
ultimately have "(Ψ, (ν*xvec)(R' ∥ P'), (ν*xvec)(R' ∥ Q')) ∈ Rel'" by(blast intro: cSym Compose)
}
ultimately show ?case by blast
next
case(cComm2 ΨQ M xvec N R' AR ΨR K Q' AQ)
from ‹extractFrame (!Q) = ⟨AQ, ΨQ⟩› have "AQ = []" and "ΨQ = SBottom'" by simp+
have RTrans: "Ψ ⊗ ΨQ⊳ R ⟼M(ν*xvec)⟨N⟩≺ R'" and FrR: "extractFrame R = ⟨AR, ΨR⟩" by fact+
then obtain p Ψ' AR' ΨR' where S: "set p ⊆ set xvec × set(p ∙ xvec)"
and FrR': "extractFrame R' = ⟨AR', ΨR'⟩" and "(p ∙ ΨR) ⊗ Ψ' ≃ ΨR'" and "AR' ♯* Ψ"
and "AR' ♯* N" and "AR' ♯* R'" and "AR' ♯* P" and "AR' ♯* Q" and "(p ∙ xvec) ♯* Ψ"
and "(p ∙ xvec) ♯* P" and "(p ∙ xvec) ♯* Q" and "xvec ♯* AR'" and "(p ∙ xvec) ♯* AR'"
and "distinctPerm p" and "(p ∙ xvec) ♯* R'" and "(p ∙ xvec) ♯* N"
using ‹distinct AR›‹AR♯* R›‹AR♯* M›‹AR♯* xvec›‹AR♯* N›‹AR♯* Ψ›‹AR♯* P›‹AR♯* (!Q)› ‹xvec ♯* Ψ›‹xvec ♯* P›‹xvec ♯* (!Q)›‹xvec ♯* R›‹xvec ♯* M›‹distinct xvec›
by(auto intro: expandFrame[where C="(Ψ, P, Q)" and C'="(Ψ, P, Q)"])
from RTrans S ‹(p ∙ xvec) ♯* N›‹(p ∙ xvec) ♯* R'› have "Ψ ⊗ ΨQ⊳ R ⟼M(ν*(p ∙ xvec))⟨(p ∙ N)⟩≺ (p ∙ R')"
apply(simp add: residualInject)
by(subst boundOutputChainAlpha''[symmetric]) auto
moreover have QTrans: "Ψ ⊗ ΨR⊳ !Q ⟼K(N)≺ Q'" by fact
with QTrans S ‹(p ∙ xvec) ♯* N› have "Ψ ⊗ ΨR⊳ !Q ⟼K((p ∙ N))≺ (p ∙ Q')" using ‹distinctPerm p›‹xvec ♯* (!Q)›‹(p ∙ xvec) ♯* Q›
by(intro inputAlpha) auto
with ‹(Ψ, P, Q) ∈ Rel›‹guarded P›
obtain P' S T where PTrans: "Ψ ⊗ ΨR⊳ !P ⟼K((p ∙ N))≺ P'" and "(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel"
and "(Ψ ⊗ ΨR, (p ∙ Q'), S ∥ !Q) ∈ Rel" and "(Ψ ⊗ ΨR, S, T) ∈ Rel"
and suppT: "((supp T)::name set) ⊆ supp P'" and suppS: "((supp S)::name set) ⊆ supp(p ∙ Q')"
by(drule_tac cSym) (auto dest: Der cExt)
note ‹Ψ ⊗ ΨR⊗ ΨQ⊨ M ↔ K›
ultimately have "Ψ ⊳ R ∥ !P ⟼τ ≺(ν*(p ∙ xvec))((p ∙ R') ∥ P')"
using PTrans FrR ‹ΨQ = SBottom'›‹(p ∙ xvec) ♯* P›‹AR♯* Ψ›‹AR♯* R›‹AR♯* M›‹AR♯* P›
by(intro Comm2) (assumption | simp)+
moreover from ‹AR' ♯* P›‹AR' ♯* Q›‹AR' ♯* N› S ‹xvec ♯* AR'›‹(p ∙ xvec) ♯* AR'› PTrans QTrans ‹distinctPerm p› have "AR' ♯* P'" and "AR' ♯* Q'"
apply(drule_tac inputFreshChainDerivative)
apply simp
apply(subst pt_fresh_star_bij[OF pt_name_inst, OF at_name_inst, symmetric, of _ _ p], simp)
apply fastforce
using QTrans ‹AR' ♯* N›‹AR' ♯* Q› inputFreshChainDerivative by force
from ‹xvec ♯* P›‹(p ∙ xvec) ♯* N› PTrans ‹distinctPerm p› have "(p ∙ xvec) ♯* (p ∙ P')"
apply(drule_tac inputFreshChainDerivative)
apply simp
by(subst pt_fresh_star_bij[OF pt_name_inst, OF at_name_inst, symmetric, of _ _ p], simp)+
{
from ‹(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel› have "(p ∙ (Ψ ⊗ ΨR), (p ∙ P'), p ∙ (T ∥ !P)) ∈ Rel"
by(rule Closed)
with ‹xvec ♯* Ψ›‹(p ∙ xvec) ♯* Ψ›‹xvec ♯* P›‹(p ∙ xvec) ♯* P› S have "(Ψ ⊗ (p ∙ ΨR), p ∙ P', (p ∙ T) ∥ !P) ∈ Rel"
by(simp add: eqvts)
then have "((Ψ ⊗ (p ∙ ΨR)) ⊗ Ψ', p ∙ P', (p ∙ T) ∥ !P) ∈ Rel" by(rule cExt)
with ‹(p ∙ ΨR) ⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', (p ∙ P'), (p ∙ T) ∥ !P) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* P›‹xvec ♯* AR'›‹(p ∙ xvec) ♯* AR'› S ‹distinctPerm p› suppT
have "(Ψ, R' ∥ (p ∙ P'), R' ∥ ((p ∙ T) ∥ !P)) ∈ Rel"
apply(intro FrameParPres)
apply(assumption | simp add: freshChainSimps)+
by(auto simp add: fresh_star_def fresh_def)
then have "(Ψ, R' ∥ (p ∙ P'), (R' ∥ (p ∙ T)) ∥ !P) ∈ Rel" by(blast intro: Assoc Trans)
with ‹xvec ♯* Ψ›‹xvec ♯* P› have "(Ψ, (ν*xvec)(R' ∥ (p ∙ P')), ((ν*xvec)(R' ∥ (p ∙ T)))∥ !P) ∈ Rel"
by(metis ResPres psiFreshVec ScopeExt Trans)
then have "(Ψ, (ν*(p ∙ xvec))((p ∙ R') ∥ P'), ((ν*xvec)(R' ∥ (p ∙ T))) ∥ !P) ∈ Rel"
using ‹(p ∙ xvec) ♯* R'›‹(p ∙ xvec) ♯* (p ∙ P')› S ‹distinctPerm p›
apply(erule_tac rev_mp)
by(subst resChainAlpha[of p]) auto
moreover from ‹(Ψ, P, Q) ∈ Rel›‹guarded P›‹guarded Q› have "(Ψ, ((ν*xvec)(R' ∥ (p ∙ T))) ∥ !P, ((ν*xvec)(R' ∥ (p ∙ T))) ∥ !Q) ∈ Rel'"
by(rule C1)
moreover from ‹(Ψ ⊗ ΨR, (p ∙ Q'), S ∥ !Q) ∈ Rel›‹(Ψ ⊗ ΨR, S, T) ∈ Rel› have "(Ψ ⊗ ΨR, (p ∙ Q'), T ∥ !Q) ∈ Rel"
by(blast intro: ParPres Trans)
then have "(p ∙ (Ψ ⊗ ΨR), p ∙ p ∙ Q', p ∙ (T ∥ !Q)) ∈ Rel" by(rule Closed)
with S ‹xvec ♯* Ψ›‹(p ∙ xvec) ♯* Ψ›‹xvec ♯* (!Q)›‹(p ∙ xvec) ♯* Q›‹distinctPerm p›
have "(Ψ ⊗ (p ∙ ΨR), Q', (p ∙ T) ∥ !Q) ∈ Rel" by(simp add: eqvts)
then have "((Ψ ⊗ (p ∙ ΨR)) ⊗ Ψ', Q', (p ∙ T) ∥ !Q) ∈ Rel" by(rule cExt)
with ‹(p ∙ ΨR) ⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', Q', (p ∙ T) ∥ !Q) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* Q'›‹AR' ♯* Q› suppT suppS ‹xvec ♯* AR'›‹(p ∙ xvec) ♯* AR'› S ‹distinctPerm p›
have "(Ψ, R' ∥ Q', R' ∥ ((p ∙ T) ∥ !Q)) ∈ Rel"
apply(intro FrameParPres)
apply(assumption | simp)+
apply(simp add: freshChainSimps)
by(auto simp add: fresh_star_def fresh_def)
then have "(Ψ, R' ∥ Q', (R' ∥ (p ∙ T)) ∥ !Q) ∈ Rel" by(blast intro: Assoc Trans)
with ‹xvec ♯* Ψ›‹xvec ♯* (!Q)› have "(Ψ, (ν*xvec)(R' ∥ Q'), ((ν*xvec)(R' ∥ (p ∙ T))) ∥!Q) ∈ Rel"
by(metis ResPres psiFreshVec ScopeExt Trans)
ultimately have "(Ψ, (ν*(p ∙ xvec))((p ∙ R') ∥ P'), (ν*xvec)(R' ∥ Q')) ∈ Rel'" by(blast intro: cSym Compose)
}
ultimately show ?case by blast
next
case(cBrMerge ΨQ M N R' AR ΨR Q' AQ)
from ‹extractFrame (!Q) = ⟨AQ, ΨQ⟩› have "AQ = []" and "ΨQ = SBottom'" by simp+
have RTrans: "Ψ ⊗ ΨQ⊳ R ⟼🍋M(N)≺ R'" and FrR: "extractFrame R = ⟨AR, ΨR⟩" by fact+
have QTrans: "Ψ ⊗ ΨR⊳ !Q ⟼🍋M(N)≺ Q'" by fact
with ‹(Ψ, P, Q) ∈ Rel›‹guarded P›
obtain P' S T where PTrans: "Ψ ⊗ ΨR⊳ !P ⟼🍋M(N)≺ P'" and "(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel"
and "(Ψ ⊗ ΨR, Q', S ∥ !Q) ∈ Rel" and "(Ψ ⊗ ΨR, S, T) ∈ Rel"
and suppT: "((supp T)::name set) ⊆ supp P'" and suppS: "((supp S)::name set) ⊆ supp Q'"
by(drule_tac cSym) (auto dest: Der intro: cExt)
with RTrans QTrans FrR have "Ψ ⊳ R ∥ !P ⟼🍋M(N)≺ (R' ∥ P')"
using PTrans ‹ΨQ = SBottom'›‹AR♯* Ψ›‹AR♯* R›‹AR♯* M›‹AR♯* P›
by(intro BrMerge) (assumption | simp)+
moreover from ‹AR♯* P›‹AR♯* (!Q)›‹AR♯* N› PTrans QTrans
have "AR♯* P'" and "AR♯* Q'" by(force dest: brinputFreshChainDerivative)+
moreover with RTrans FrR ‹distinct AR›‹AR♯* R›‹AR♯* N›‹AR♯* Ψ›‹AR♯* P›‹AR♯* (!Q)›‹AR♯* M›
obtain Ψ' AR' ΨR' where FrR': "extractFrame R' = ⟨AR', ΨR'⟩" and "ΨR⊗ Ψ' ≃ ΨR'" and "AR' ♯* Ψ"
and "AR' ♯* P'" and "AR' ♯* Q'" and "AR' ♯* P" and "AR' ♯* Q"
by(auto intro: expandFrame[where C="(Ψ, P, P', Q, Q')" and C'=Ψ])
moreover
{
from ‹(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel› have "((Ψ ⊗ ΨR) ⊗ Ψ', P', T ∥ !P) ∈ Rel" by(rule cExt)
with ‹ΨR⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', P', T ∥ !P) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* P› suppT have "(Ψ, R' ∥ P', R' ∥ (T ∥ !P)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have one: "(Ψ, R' ∥ P', (R' ∥ T) ∥ !P) ∈ Rel" by(blast intro: Assoc Trans)
from ‹(Ψ, P, Q) ∈ Rel›‹guarded P›‹guarded Q› have two: "(Ψ, (R' ∥ T) ∥ !P, (R' ∥ T) ∥ !Q) ∈ Rel'"
by(rule C1)
from ‹(Ψ ⊗ ΨR, Q', S ∥ !Q) ∈ Rel›‹(Ψ ⊗ ΨR, S, T) ∈ Rel› have "(Ψ ⊗ ΨR, Q', T ∥ !Q) ∈Rel"
by(blast intro: ParPres Trans)
then have "((Ψ ⊗ ΨR) ⊗ Ψ', Q', T ∥ !Q) ∈ Rel" by(rule cExt)
with ‹ΨR⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', Q', T ∥ !Q) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* Q'›‹AR' ♯* Q› suppT suppS have "(Ψ, R' ∥ Q', R' ∥ (T ∥ !Q)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have three: "(Ψ, R' ∥ Q', (R' ∥ T) ∥ !Q) ∈ Rel" by(blast intro: Assoc Trans)
from one two three have "(Ψ, (R' ∥ P'), (R' ∥ Q')) ∈ Rel'" by(blast intro: cSym Compose)
}
ultimately show ?case by blast
next
case(cBrComm1 ΨQ M N R' AR ΨR xvec Q' AQ)
from ‹🍋M(ν*xvec)⟨N⟩ = α› have "xvec=bn α"
by(auto simp add: action.inject)
from ‹xvec = bn α›‹bn α ♯* P›‹bn α ♯* R›
have "xvec ♯* P" and "xvec ♯* R" by simp+
from ‹extractFrame (!Q) = ⟨AQ, ΨQ⟩› have "AQ = []" and "ΨQ = SBottom'" by simp+
have RTrans: "Ψ ⊗ ΨQ⊳ R ⟼🍋M(N)≺ R'" and FrR: "extractFrame R = ⟨AR, ΨR⟩" by fact+
moreover have QTrans: "Ψ ⊗ ΨR⊳ !Q ⟼🍋M(ν*xvec)⟨N⟩≺ Q'" by fact
from FrR ‹xvec ♯* R›‹AR♯* xvec› have "xvec ♯* ΨR" by(force dest: extractFrameFreshChain)
with QTrans ‹(Ψ, P, Q) ∈ Rel›‹xvec ♯* Ψ›‹xvec ♯* P›‹xvec ♯* (!Q)›‹guarded P›‹xvec ♯* M›
obtain P' S T where PTrans: "Ψ ⊗ ΨR⊳ !P ⟼🍋M(ν*xvec)⟨N⟩≺ P'" and "(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel"
and "(Ψ ⊗ ΨR, Q', S ∥ !Q) ∈ Rel" and "(Ψ ⊗ ΨR, S, T) ∈ Rel"
and suppT: "((supp T)::name set) ⊆ supp P'" and suppS: "((supp S)::name set) ⊆ supp Q'"
apply(drule_tac cSym)
by(metis Der ‹bn α ♯* Q›‹xvec = bn α› cBrComm1.hyps(30) cExt cSim.hyps(6) freshCompChain(1))
ultimately have "Ψ ⊳ R ∥ !P ⟼🍋M(ν*xvec)⟨N⟩≺ (R' ∥ P')"
using PTrans ‹ΨQ = SBottom'›‹xvec ♯* R›‹AR♯* Ψ›‹AR♯* R›‹AR♯* M›‹AR♯* P›
by(intro BrComm1) (assumption | simp)+
moreover from ‹AR♯* P›‹AR♯* (!Q)›‹AR♯* xvec› PTrans QTrans ‹xvec ♯* M›‹distinct xvec›
have "AR♯* P'" and "AR♯* Q'" by(force dest: broutputFreshChainDerivative)+
moreover with RTrans FrR ‹distinct AR›‹AR♯* R›‹AR♯* N›‹AR♯* Ψ›‹AR♯* P›‹AR♯* (!Q)›‹AR♯* M›
obtain Ψ' AR' ΨR' where FrR': "extractFrame R' = ⟨AR', ΨR'⟩" and "ΨR⊗ Ψ' ≃ ΨR'" and "AR' ♯* Ψ"
and "AR' ♯* P'" and "AR' ♯* Q'" and "AR' ♯* P" and "AR' ♯* Q"
by(auto intro: expandFrame[where C="(Ψ, P, P', Q, Q')" and C'=Ψ])
moreover
{
from ‹(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel› have "((Ψ ⊗ ΨR) ⊗ Ψ', P', T ∥ !P) ∈ Rel" by(rule cExt)
with ‹ΨR⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', P', T ∥ !P) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* P› suppT have "(Ψ, R' ∥ P', R' ∥ (T ∥ !P)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have one: "(Ψ, R' ∥ P', (R' ∥ T) ∥ !P) ∈ Rel" by(blast intro: Assoc Trans)
from ‹(Ψ, P, Q) ∈ Rel›‹guarded P›‹guarded Q› have two: "(Ψ, (R' ∥ T) ∥ !P, (R' ∥ T) ∥ !Q) ∈ Rel'"
by(rule C1)
from ‹(Ψ ⊗ ΨR, Q', S ∥ !Q) ∈ Rel›‹(Ψ ⊗ ΨR, S, T) ∈ Rel› have "(Ψ ⊗ ΨR, Q', T ∥ !Q) ∈Rel"
by(blast intro: ParPres Trans)
then have "((Ψ ⊗ ΨR) ⊗ Ψ', Q', T ∥ !Q) ∈ Rel" by(rule cExt)
with ‹ΨR⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', Q', T ∥ !Q) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* Q'›‹AR' ♯* Q› suppT suppS have "(Ψ, R' ∥ Q', R' ∥ (T ∥ !Q)) ∈ Rel"
by(intro FrameParPres) (auto simp add: fresh_star_def fresh_def psi.supp)
then have three: "(Ψ, R' ∥ Q', (R' ∥ T) ∥ !Q) ∈ Rel" by(blast intro: Assoc Trans)
from one two three have "(Ψ, (R' ∥ P'), (R' ∥ Q')) ∈ Rel'" by(blast intro: cSym Compose)
}
ultimately show ?case by blast
next
case(cBrComm2 ΨQ M xvec N R' AR ΨR Q' AQ)
from ‹🍋M(ν*xvec)⟨N⟩ = α› have "xvec = bn α"
by(auto simp add: action.inject)
from ‹xvec = bn α›‹bn α ♯* P›‹bn α ♯* R›
have "xvec ♯* P" and "xvec ♯* R" by simp+
from ‹extractFrame (!Q) = ⟨AQ, ΨQ⟩› have "AQ = []" and "ΨQ = SBottom'" by simp+
have RTrans: "Ψ ⊗ ΨQ⊳ R ⟼🍋M(ν*xvec)⟨N⟩≺ R'" and FrR: "extractFrame R = ⟨AR, ΨR⟩" by fact+
then obtain p Ψ' AR' ΨR' where S: "set p ⊆ set xvec × set(p ∙ xvec)"
and FrR': "extractFrame R' = ⟨AR', ΨR'⟩" and "(p ∙ ΨR) ⊗ Ψ' ≃ ΨR'" and "AR' ♯* Ψ"
and "AR' ♯* N" and "AR' ♯* M" and "AR' ♯* R" and "AR' ♯* R'" and "AR' ♯* P" and "AR' ♯* Q" and "(p ∙ xvec) ♯* Ψ"
and "(p ∙ xvec) ♯* P" and "(p ∙ xvec) ♯* Q" and "xvec ♯* AR'" and "(p ∙ xvec) ♯* AR'"
and "distinctPerm p" and "(p ∙ xvec) ♯* R" and "(p ∙ xvec) ♯* R'" and "(p ∙ xvec) ♯* N" and "(p ∙ xvec) ♯* M"
using ‹distinct AR›‹AR♯* R›‹AR♯* M›‹AR♯* xvec›‹AR♯* N›‹AR♯* Ψ›‹AR♯* P›‹AR♯* (!Q)› ‹xvec ♯* Ψ›‹xvec ♯* P›‹xvec ♯* (!Q)›‹xvec ♯* R›‹xvec ♯* M›‹distinct xvec›
by(auto intro: expandFrame[where C="(Ψ, P, R, Q, M)" and C'="(Ψ, P, R, Q, M)"])
from RTrans S ‹(p ∙ xvec) ♯* N›‹(p ∙ xvec) ♯* R'› have "Ψ ⊗ ΨQ⊳ R ⟼🍋M(ν*(p ∙ xvec))⟨(p ∙ N)⟩≺ (p ∙ R')"
apply(simp add: residualInject)
by(subst boundOutputChainAlpha''[symmetric]) auto
moreover have QTrans: "Ψ ⊗ ΨR⊳ !Q ⟼🍋M(N)≺ Q'" by fact
with QTrans S ‹(p ∙ xvec) ♯* N› have "Ψ ⊗ ΨR⊳ !Q ⟼🍋M((p ∙ N))≺ (p ∙ Q')" using ‹distinctPerm p›‹xvec ♯* (!Q)›‹(p ∙ xvec) ♯* Q›
by(intro brinputAlpha) auto
with ‹(Ψ, P, Q) ∈ Rel›‹guarded P›
obtain P' S T where PTrans: "Ψ ⊗ ΨR⊳ !P ⟼🍋M((p ∙ N))≺ P'" and "(Ψ ⊗ ΨR, P', T ∥ !P)∈ Rel"
and "(Ψ ⊗ ΨR, (p ∙ Q'), S ∥ !Q) ∈ Rel" and "(Ψ ⊗ ΨR, S, T) ∈ Rel"
and suppT: "((supp T)::name set) ⊆ supp P'" and suppS: "((supp S)::name set) ⊆ supp(p ∙ Q')"
by(drule_tac cSym) (auto dest: Der cExt)
ultimately have "Ψ ⊳ R ∥ !P ⟼🍋M(ν*(p ∙ xvec))⟨(p ∙ N)⟩≺ ((p ∙ R') ∥ P')"
using PTrans FrR ‹ΨQ = SBottom'›‹(p ∙ xvec) ♯* P›‹AR♯* Ψ›‹AR♯* R›‹AR♯* M›‹AR♯* P›
by(intro BrComm2) (assumption | simp)+
then have "p ∙ (Ψ ⊳ R ∥ !P ⟼🍋M(ν*(p ∙ xvec))⟨(p ∙ N)⟩≺ ((p ∙ R') ∥ P'))" by simp
with ‹distinctPerm p› have "(p ∙ Ψ) ⊳ (p ∙ R) ∥ !(p ∙ P) ⟼🍋(p ∙ M)(ν*xvec)⟨N⟩≺ (R' ∥ (p ∙ P'))"
by(simp add: eqvts)
with S ‹xvec ♯* Ψ›‹(p ∙ xvec) ♯* Ψ›‹xvec ♯* R›‹(p ∙ xvec) ♯* R› ‹xvec ♯* P›‹(p ∙ xvec) ♯* P›‹xvec ♯* M›‹(p ∙ xvec) ♯* M›
have "Ψ ⊳ R ∥ !P ⟼🍋M(ν*xvec)⟨N⟩≺ (R' ∥ (p ∙ P'))"
by simp
moreover from ‹AR' ♯* P›‹AR' ♯* Q›‹AR' ♯* N› S ‹xvec ♯* AR'›‹(p ∙ xvec) ♯* AR'› PTrans QTrans ‹distinctPerm p› have "AR' ♯* P'" and "AR' ♯* Q'"
apply(drule_tac brinputFreshChainDerivative, simp)
apply(subst pt_fresh_star_bij[OF pt_name_inst, OF at_name_inst, symmetric, of _ _ p], simp)
apply force
using QTrans ‹AR' ♯* N›‹AR' ♯* Q› brinputFreshChainDerivative by force
from ‹xvec ♯* P›‹(p ∙ xvec) ♯* N› PTrans ‹distinctPerm p› have "(p ∙ xvec) ♯* (p ∙ P')"
apply(drule_tac brinputFreshChainDerivative, simp)
apply(subst pt_fresh_star_bij[OF pt_name_inst, OF at_name_inst, symmetric, of _ _ p], simp)
by(subst pt_fresh_star_bij[OF pt_name_inst, OF at_name_inst, symmetric, of _ _ p], simp)
{
from ‹(Ψ ⊗ ΨR, P', T ∥ !P) ∈ Rel› have "(p ∙ (Ψ ⊗ ΨR), (p ∙ P'), p ∙ (T ∥ !P)) ∈ Rel"
by(rule Closed)
with ‹xvec ♯* Ψ›‹(p ∙ xvec) ♯* Ψ›‹xvec ♯* P›‹(p ∙ xvec) ♯* P› S have "(Ψ ⊗ (p ∙ ΨR), p ∙ P', (p ∙ T) ∥ !P) ∈ Rel"
by(simp add: eqvts)
then have "((Ψ ⊗ (p ∙ ΨR)) ⊗ Ψ', p ∙ P', (p ∙ T) ∥ !P) ∈ Rel"
by(rule cExt)
with ‹(p ∙ ΨR) ⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', (p ∙ P'), (p ∙ T) ∥ !P) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* P›‹xvec ♯* AR'›‹(p ∙ xvec) ♯* AR'› S ‹distinctPerm p› suppT
have "(Ψ, R' ∥ (p ∙ P'), R' ∥ ((p ∙ T) ∥ !P)) ∈ Rel"
apply(intro FrameParPres)
apply(assumption | simp add: freshChainSimps)+
by(auto simp add: fresh_star_def fresh_def)
then have one: "(Ψ, R' ∥ (p ∙ P'), (R' ∥ (p ∙ T)) ∥ !P) ∈ Rel" by(blast intro: Assoc Trans)
from ‹(Ψ, P, Q) ∈ Rel›‹guarded P›‹guarded Q› have two: "(Ψ, (R' ∥ (p ∙ T)) ∥ !P, (R' ∥ (p ∙ T)) ∥ !Q) ∈ Rel'"
by(rule C1)
from ‹(Ψ ⊗ ΨR, (p ∙ Q'), S ∥ !Q) ∈ Rel›‹(Ψ ⊗ ΨR, S, T) ∈ Rel› have "(Ψ ⊗ ΨR, (p ∙ Q'), T ∥ !Q) ∈ Rel"
by(blast intro: ParPres Trans)
then have "(p ∙ (Ψ ⊗ ΨR), p ∙ p ∙ Q', p ∙ (T ∥ !Q)) ∈ Rel" by(rule Closed)
with S ‹xvec ♯* Ψ›‹(p ∙ xvec) ♯* Ψ›‹xvec ♯* (!Q)›‹(p ∙ xvec) ♯* Q›‹distinctPerm p›
have "(Ψ ⊗ (p ∙ ΨR), Q', (p ∙ T) ∥ !Q) ∈ Rel" by(simp add: eqvts)
then have "((Ψ ⊗ (p ∙ ΨR)) ⊗ Ψ', Q', (p ∙ T) ∥ !Q) ∈ Rel" by(rule cExt)
with ‹(p ∙ ΨR) ⊗ Ψ' ≃ ΨR'› have "(Ψ ⊗ ΨR', Q', (p ∙ T) ∥ !Q) ∈ Rel"
by(metis Associativity StatEq compositionSym)
with FrR' ‹AR' ♯* Ψ›‹AR' ♯* P'›‹AR' ♯* Q'›‹AR' ♯* Q› suppT suppS ‹xvec ♯* AR'›‹(p ∙ xvec) ♯* AR'› S ‹distinctPerm p›
have "(Ψ, R' ∥ Q', R' ∥ ((p ∙ T) ∥ !Q)) ∈ Rel"
apply(intro FrameParPres)
apply(assumption | simp)+
apply(simp add: freshChainSimps)
by(auto simp add: fresh_star_def fresh_def)
then have three: "(Ψ, R' ∥ Q', (R' ∥ (p ∙ T)) ∥ !Q) ∈ Rel" by(blast intro: Assoc Trans)
from one two three have "(Ψ, (R' ∥ (p ∙ P')), (R' ∥ Q')) ∈ Rel'" by(blast intro: cSym Compose)
}
ultimately show ?case by blast
qed
relcomp_syntax
Messung V0.5 in Prozent
¤ 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.0.143Bemerkung:
¤
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.