Theory Weak_Early_Cong_Pres
theory Weak_Early_Cong_Pres
imports Weak_Early_Cong Weak_Early_Step_Sim_Pres Weak_Early_Bisim_Pres
begin
lemma tauPres:
fixes P :: pi
and Q :: pi
assumes "P ≃ Q"
shows "τ.(P) ≃ τ.(Q)"
proof -
from assms have "P ≈ Q" by(rule congruenceWeakBisim)
thus ?thesis by(force intro: Weak_Early_Step_Sim_Pres.tauPres simp add: weakCongruence_def dest: weakBisimE(2))
qed
lemma outputPres:
fixes P :: pi
and Q :: pi
assumes "P ≃ Q"
shows "a{b}.P ≃ a{b}.Q"
proof -
from assms have "P ≈ Q" by(rule congruenceWeakBisim)
thus ?thesis by(force intro: Weak_Early_Step_Sim_Pres.outputPres simp add: weakCongruence_def dest: weakBisimE(2))
qed
lemma matchPres:
fixes P :: pi
and Q :: pi
and a :: name
and b :: name
assumes "P ≃ Q"
shows "[a⌢b]P ≃ [a⌢b]Q"
using assms
by(auto simp add: weakCongruence_def intro: Weak_Early_Step_Sim_Pres.matchPres)
lemma mismatchPres:
fixes P :: pi
and Q :: pi
and a :: name
and b :: name
assumes "P ≃ Q"
shows "[a≠b]P ≃ [a≠b]Q"
using assms
by(auto simp add: weakCongruence_def intro: Weak_Early_Step_Sim_Pres.mismatchPres)
lemma sumPres:
fixes P :: pi
and Q :: pi
and R :: pi
assumes "P ≃ Q"
shows "P ⊕ R ≃ Q ⊕ R"
using assms
by(auto simp add: weakCongruence_def intro: Weak_Early_Step_Sim_Pres.sumPres Weak_Early_Bisim.reflexive)
lemma parPres:
fixes P :: pi
and Q :: pi
and R :: pi
assumes "P ≃ Q"
shows "P ∥ R ≃ Q ∥ R"
proof -
have "⋀P Q R. ⟦P ↝«weakBisim» Q; P ≈ Q⟧ ⟹ P ∥ R ↝«weakBisim» Q ∥ R"
proof -
fix P Q R
assume "P ↝«weakBisim» Q" and "P ≈ Q"
thus "P ∥ R ↝«weakBisim» Q ∥ R"
using Weak_Early_Bisim_Pres.parPres Weak_Early_Bisim_Pres.resPres Weak_Early_Bisim.reflexive Weak_Early_Bisim.eqvt
by(blast intro: Weak_Early_Step_Sim_Pres.parPres)
qed
moreover from assms have "P ≈ Q" by(rule congruenceWeakBisim)
ultimately show ?thesis using assms
by(auto simp add: weakCongruence_def dest: weakBisimE)
qed
lemma resPres:
fixes P :: pi
and Q :: pi
and x :: name
assumes PeqQ: "P ≃ Q"
shows "<νx>P ≃ <νx>Q"
proof -
have "⋀P Q x. P ↝«weakBisim» Q ⟹ <νx>P ↝«weakBisim» <νx>Q"
proof -
fix P Q x
assume "P ↝«weakBisim» Q"
with Weak_Early_Bisim.eqvt Weak_Early_Bisim_Pres.resPres show "<νx>P ↝«weakBisim» <νx>Q"
by(blast intro: Weak_Early_Step_Sim_Pres.resPres)
qed
with assms show ?thesis by(simp add: weakCongruence_def)
qed
lemma bangPres:
fixes P :: pi
and Q :: pi
assumes "P ≃ Q"
shows "!P ≃ !Q"
using assms
proof(induct rule: weakCongISym2)
case(cSim P Q)
let ?X = "{(P, Q) | P Q. P ≃ Q}"
from ‹P ≃ Q› have "(P, Q) ∈ ?X" by auto
moreover have "⋀P Q. (P, Q) ∈ ?X ⟹ P ↝«weakBisim» Q" by(auto simp add: weakCongruence_def)
moreover from congruenceWeakBisim have "?X ⊆ weakBisim" by auto
ultimately have "!P ↝«bangRel weakBisim» !Q" using Weak_Early_Bisim.eqvt
by(rule Weak_Early_Step_Sim_Pres.bangPres)
moreover have "bangRel weakBisim ⊆ weakBisim" by(rule bangRelSubWeakBisim)
ultimately show "!P ↝«weakBisim» !Q"
by(rule Weak_Early_Step_Sim.monotonic)
qed
end