shows"Ψ ⊳ M(λ*xvec N).P ∼ M(λ*xvec N).Q" proof - let ?X = "{(Ψ, M(λ*xvec N).P, M(λ*xvec N).Q) | Ψ M xvec N P Q. ∀Tvec. length xvec = length Tvec ⟶ Ψ ⊳ P[xvec::=Tvec] ∼ Q[xvec::=Tvec]}"
from assms have"(Ψ, M(λ*xvec N).P, M(λ*xvec N).Q) ∈ ?X"by blast thus ?thesis proof(coinduct rule: bisimCoinduct) case(cStatEq Ψ P Q) thus ?caseby auto next case(cSim Ψ P Q) thus ?caseby(blast intro: inputPres) next case(cExt Ψ P Q Ψ') thus ?caseby(blast dest: bisimE) next case(cSym Ψ P Q) thus ?caseby(blast dest: bisimE) qed qed
lemma bisimOutputPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Q :: "('a, 'b, 'c) psi" and M :: 'a and N :: 'a
assumes"Ψ ⊳ P ∼ Q"
shows"Ψ ⊳ M⟨N⟩.P ∼ M⟨N⟩.Q" proof - let ?X = "{(Ψ, M⟨N⟩.P, M⟨N⟩.Q) | Ψ M N P Q. Ψ ⊳ P ∼ Q}" from‹Ψ ⊳ P ∼ Q›have"(Ψ, M⟨N⟩.P, M⟨N⟩.Q) ∈ ?X"by auto thus ?thesis by(coinduct rule: bisimCoinduct, auto) (blast intro: outputPres dest: bisimE)+ qed
assumes"∧φ P. (φ, P) mem CsP ==>∃Q. (φ, Q) mem CsQ ∧ guarded Q ∧ Ψ ⊳ P ∼ Q" and"∧φ Q. (φ, Q) mem CsQ ==>∃P. (φ, P) mem CsP ∧ guarded P ∧ Ψ ⊳ P ∼ Q"
shows"Ψ ⊳ Cases CsP ∼ Cases CsQ" proof - let ?X = "{(Ψ, Cases CsP, Cases CsQ) | Ψ CsP CsQ. (∀φ P. (φ, P) mem CsP ⟶ (∃Q. (φ, Q) mem CsQ ∧ guarded Q ∧ Ψ ⊳ P ∼ Q)) ∧ (∀φ Q. (φ, Q) mem CsQ ⟶ (∃P. (φ, P) mem CsP ∧ guarded P ∧ Ψ ⊳ P ∼ Q))}" from assms have"(Ψ, Cases CsP, Cases CsQ) ∈ ?X"by auto thus ?thesis proof(coinduct rule: bisimCoinduct) case(cStatEq Ψ P Q) thus ?caseby auto next case(cSim Ψ CasesP CasesQ) thenobtain CsP CsQ where C1: "∧φ Q. (φ, Q) mem CsQ ==>∃P. (φ, P) mem CsP ∧ guarded P ∧ Ψ⊳ P ∼ Q" and A: "CasesP = Cases CsP"and B: "CasesQ = Cases CsQ" by auto note C1 moreoverhave"∧Ψ P Q. Ψ ⊳ P ∼ Q ==> Ψ ⊳ P ↝[bisim] Q"by(rule bisimE) moreoverhave"bisim ⊆ ?X ∪ bisim"by blast ultimatelyhave"Ψ ⊳ Cases CsP ↝[(?X ∪ bisim)] Cases CsQ" by(rule casePres) thus ?caseusing A B by blast next case(cExt Ψ P Q) thus ?caseby(blast dest: bisimE) next case(cSym Ψ P Q) thus ?caseby(blast dest: bisimE) qed qed
lemma bisimResPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Q :: "('a, 'b, 'c) psi" and x :: name
assumes"Ψ ⊳ P ∼ Q" and"x ♯ Ψ"
shows"Ψ ⊳(νx)P ∼(νx)Q" proof - let ?X = "{(Ψ, (νx)P, (νx)Q) | Ψ x P Q. Ψ ⊳ P ∼ Q ∧ x ♯ Ψ}"
from assms have"(Ψ, (νx)P, (νx)Q) ∈ ?X"by auto thus ?thesis proof(coinduct rule: bisimCoinduct) case(cStatEq Ψ xP xQ) from‹(Ψ, xP, xQ) ∈ ?X›obtain x P Q where"Ψ ⊳ P ∼ Q"and"x ♯ Ψ"and"xP = (νx)P"and"xQ = (νx)Q" by auto moreoverfrom‹Ψ ⊳ P ∼ Q›have PeqQ: "insertAssertion(extractFrame P) Ψ ≃F insertAssertion(extractFrame Q) Ψ" by(rule bisimE) ultimatelyshow ?caseby(auto intro: frameResPres) next case(cSim Ψ xP xQ) from‹(Ψ, xP, xQ) ∈ ?X›obtain x P Q where"Ψ ⊳ P ∼ Q"and"x ♯ Ψ"and"xP = (νx)P"and"xQ = (νx)Q" by auto from‹Ψ ⊳ P ∼ Q›have"Ψ ⊳ P ↝[bisim] Q"by(rule bisimE) moreoverhave"eqvt ?X" by(force simp add: eqvt_def bisimClosed pt_fresh_bij[OF pt_name_inst, OF at_name_inst]) hence"eqvt(?X ∪ bisim)"by auto moreovernote‹x ♯ Ψ› moreoverhave"bisim ⊆ ?X ∪ bisim"by auto moreoverhave"∧Ψ P Q x. [(Ψ, P, Q) ∈ bisim; x ♯ Ψ]==> (Ψ, (νx)P, (νx)Q) ∈ ?X ∪ bisim" by auto ultimatelyhave"Ψ ⊳(νx)P ↝[(?X ∪ bisim)] (νx)Q" by(rule resPres) with‹xP = (νx)P›‹xQ = (νx)Q›show ?case by simp next case(cExt Ψ xP xQ Ψ') from‹(Ψ, xP, xQ) ∈ ?X›obtain x P Q where"Ψ ⊳ P ∼ Q"and"x ♯ Ψ"and"xP = (νx)P"and"xQ = (νx)Q" by auto obtain y::name where"y ♯ P"and"y ♯ Q"and"y ♯ Ψ"and"y ♯ Ψ'" by(generate_fresh "name", auto simp add: fresh_prod) from‹Ψ ⊳ P ∼ Q›have"Ψ ⊗ ([(x, y)] ∙ Ψ') ⊳ P ∼ Q" by(rule bisimE) hence"([(x, y)] ∙ (Ψ ⊗ ([(x, y)] ∙ Ψ'))) ⊳ ([(x, y)] ∙ P) ∼ ([(x, y)] ∙ Q)" by(rule bisimClosed) with‹x ♯ Ψ›‹y ♯ Ψ›have"Ψ ⊗ Ψ' ⊳ ([(x, y)] ∙ P) ∼ ([(x, y)] ∙ Q)" by(simp add: eqvts) with‹y ♯ Ψ›‹y ♯ Ψ'›have"(Ψ ⊗ Ψ', (νy)([(x, y)] ∙ P), (νy)([(x, y)] ∙ Q)) ∈ ?X" by auto moreoverfrom‹y ♯ P›‹y ♯ Q›have"(νx)P = (νy)([(x, y)] ∙ P)"and"(νx)Q = (νy)([(x, y)] ∙ Q)" by(simp add: alphaRes)+ ultimatelyshow ?caseusing‹xP = (νx)P›‹xQ = (νx)Q›by simp next case(cSym Ψ P Q) thus ?case by(blast dest: bisimE) qed qed
lemma bisimResChainPres: fixes Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Q :: "('a, 'b, 'c) psi" and xvec :: "name list"
assumes"Ψ ⊳ P ∼ Q" and"xvec ♯* Ψ"
shows"Ψ ⊳(ν*xvec)P ∼(ν*xvec)Q" using assms by(induct xvec) (auto intro: bisimResPres)
lemma bisimParPresAux: fixes Ψ :: 'b and ΨR :: 'b and P :: "('a, 'b, 'c) psi" and Q :: "('a, 'b, 'c) psi" and R :: "('a, 'b, 'c) psi" and AR :: "name list"
assumes"Ψ ⊗ ΨR⊳ P ∼ Q" and FrR: "extractFrame R = ⟨AR, ΨR⟩" and"AR♯* Ψ" and"AR♯* P" and"AR♯* Q"
shows"Ψ ⊳ P ∥ R ∼ Q ∥ R" proof - let ?X = "{(Ψ, (ν*xvec)(P ∥ R), (ν*xvec)(Q ∥ R)) | xvec Ψ P Q R. xvec ♯* Ψ ∧ (∀AR ΨR. (extractFrame R = ⟨AR, ΨR⟩∧ AR♯* Ψ ∧ AR♯* P ∧ AR♯* Q) ⟶ Ψ ⊗ ΨR⊳ P ∼ Q)}"
{ fix xvec :: "name list" and Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Q :: "('a, 'b, 'c) psi" and R :: "('a, 'b, 'c) psi"
hence"(Ψ, (ν*xvec)(P ∥ R), (ν*xvec)(Q ∥ R)) ∈ ?X" apply auto by blast
}
note XI = this
{ fix xvec :: "name list" and Ψ :: 'b and P :: "('a, 'b, 'c) psi" and Q :: "('a, 'b, 'c) psi" and R :: "('a, 'b, 'c) psi" and C :: "'d::fs_name"
assume"xvec ♯* Ψ" and A: "∧AR ΨR. [extractFrame R = ⟨AR, ΨR⟩; AR♯* Ψ; AR♯* P; AR♯* Q; AR♯* C]==> Ψ ⊗ ΨR⊳ P ∼ Q"
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.