Theory Strong_Early_Bisim_SC
theory Strong_Early_Bisim_SC
imports Strong_Early_Bisim Strong_Late_Bisim_SC Strong_Early_Late_Comp
begin
lemma resComm:
fixes P :: pi
shows "<νa><νb>P ∼⇩e <νb><νa>P"
proof -
have "<νa><νb>P ∼⇩l <νb><νa>P" by(rule Strong_Late_Bisim_SC.resComm)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma matchId:
fixes a :: name
and P :: pi
shows "[a⌢a]P ∼⇩e P"
proof -
have "[a⌢a]P ∼⇩l P" by(rule Strong_Late_Bisim_SC.matchId)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma mismatchId:
fixes a :: name
and b :: name
and P :: pi
assumes "a ≠ b"
shows "[a≠b]P ∼⇩e P"
proof -
from assms have "[a≠b]P ∼⇩l P" by(rule Strong_Late_Bisim_SC.mismatchId)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma mismatchNil:
fixes a :: name
and P :: pi
shows "[a≠a]P ∼⇩e 𝟬"
proof -
have "[a≠a]P ∼⇩l 𝟬" by(rule Strong_Late_Bisim_SC.mismatchNil)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma sumSym:
fixes P :: pi
and Q :: pi
shows "P ⊕ Q ∼⇩e Q ⊕ P"
proof -
have "P ⊕ Q ∼⇩l Q ⊕ P" by(rule Strong_Late_Bisim_SC.sumSym)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma sumAssoc:
fixes P :: pi
and Q :: pi
and R :: pi
shows "(P ⊕ Q) ⊕ R ∼⇩e P ⊕ (Q ⊕ R)"
proof -
have "(P ⊕ Q) ⊕ R ∼⇩l P ⊕ (Q ⊕ R)" by(rule Strong_Late_Bisim_SC.sumAssoc)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma sumZero:
fixes P :: pi
shows "P ⊕ 𝟬 ∼⇩e P"
proof -
have "P ⊕ 𝟬 ∼⇩l P" by(rule Strong_Late_Bisim_SC.sumZero)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma parZero:
fixes P :: pi
shows "P ∥ 𝟬 ∼⇩e P"
proof -
have "P ∥ 𝟬 ∼⇩l P" by(rule Strong_Late_Bisim_SC.parZero)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma parSym:
fixes P :: pi
and Q :: pi
shows "P ∥ Q ∼⇩e Q ∥ P"
proof -
have "P ∥ Q ∼⇩l Q ∥ P" by(rule Strong_Late_Bisim_SC.parSym)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma scopeExtPar:
fixes P :: pi
and Q :: pi
and x :: name
assumes "x ♯ P"
shows "<νx>(P ∥ Q) ∼⇩e P ∥ <νx>Q"
proof -
from assms have "<νx>(P ∥ Q) ∼⇩l P ∥ <νx>Q" by(rule Strong_Late_Bisim_SC.scopeExtPar)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma scopeExtPar':
fixes P :: pi
and Q :: pi
and x :: name
assumes xFreshQ: "x ♯ Q"
shows "<νx>(P ∥ Q) ∼⇩e (<νx>P) ∥ Q"
proof -
from assms have "<νx>(P ∥ Q) ∼⇩l (<νx>P) ∥ Q" by(rule Strong_Late_Bisim_SC.scopeExtPar')
thus ?thesis by(rule lateEarlyBisim)
qed
lemma parAssoc:
fixes P :: pi
and Q :: pi
and R :: pi
shows "(P ∥ Q) ∥ R ∼⇩e P ∥ (Q ∥ R)"
proof -
have "(P ∥ Q) ∥ R ∼⇩l P ∥ (Q ∥ R)" by(rule Strong_Late_Bisim_SC.parAssoc)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma freshRes:
fixes P :: pi
and a :: name
assumes aFreshP: "a ♯ P"
shows "<νa>P ∼⇩e P"
proof -
from aFreshP have "<νa>P ∼⇩l P" by(rule Strong_Late_Bisim_SC.scopeFresh)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma scopeExtSum:
fixes P :: pi
and Q :: pi
and x :: name
assumes "x ♯ P"
shows "<νx>(P ⊕ Q) ∼⇩e P ⊕ <νx>Q"
proof -
from ‹x ♯ P› have "<νx>(P ⊕ Q) ∼⇩l P ⊕ <νx>Q" by(rule Strong_Late_Bisim_SC.scopeExtSum)
thus ?thesis by(rule lateEarlyBisim)
qed
lemma bangSC:
fixes P
shows "!P ∼⇩e P ∥ !P"
proof -
have "!P ∼⇩l P ∥ !P" by(rule Strong_Late_Bisim_SC.bangSC)
thus ?thesis by(rule lateEarlyBisim)
qed
end