(*
Title : The Calculus of Communicating Systems
Author / Maintainer : Jesper Bengtson ( jebe @ itu . dk ) , 2012
*)
theory Weak_Sim
imports Weak_Semantics Strong_Sim
begin
definition weakSimulation :: "ccs ==> (ccs × ccs) set ==> ccs ==> bool" (‹ _ ↝ ^ 🪙 _› [80 , 80 , 80 ] 80 )
where
"P ↝ ^ <Rel> Q ≡ ∀ a Q'. Q ⟼ a ≺ Q' ⟶ (∃ P'. P ==> ^ a ≺ P' ∧ (P', Q') ∈ Rel)"
lemma weakSimI[case_names Sim]:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
assumes "∧ α Q'. Q ⟼ α ≺ Q' ==> ∃ P'. P ==> ^ α ≺ P' ∧ (P', Q') ∈ Rel"
shows "P ↝ ^ <Rel> Q"
using assms
by (auto simp add: weakSimulation_def)
lemma weakSimE:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
and α :: act
and Q' :: ccs
assumes "P ↝ ^ <Rel> Q"
and "Q ⟼ α ≺ Q'"
obtains P' where "P ==> ^ α ≺ P'" and "(P', Q') ∈ Rel"
using assms
by (auto simp add: weakSimulation_def)
lemma simTauChain:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
and Q' :: ccs
assumes "Q ==> \ <tau> Q'"
and "(P, Q) ∈ Rel"
and Sim: "∧ R S. (R, S) ∈ Rel ==> R ↝ ^ <Rel> S"
obtains P' where "P ==> \ <tau> P'" and "(P', Q') ∈ Rel"
using ‹ Q ==> \ τ Q'› ‹ (P, Q) ∈ Rel›
proof (induct arbitrary: thesis rule: tauChainInduct)
case Base
from ‹ (P, Q) ∈ Rel› show ?case
by (force intro: Base)
next
case (Step Q'' Q')
from ‹ (P, Q) ∈ Rel› obtain P'' where "P ==> \ <tau> P''" and "(P'', Q'') ∈ Rel"
by (blast intro: Step)
from ‹ (P'', Q'') ∈ Rel› have "P'' ↝ ^ <Rel> Q''" by (rule Sim)
then obtain P' where "P'' ==> ^ τ ≺ P'" and "(P', Q') ∈ Rel" using ‹ Q'' ⟼ τ ≺ Q'› by (rule weakSimE)
with ‹ P ==> \ τ P''› show thesis
by (force simp add: weakTrans_def weakCongTrans_def intro: Step)
qed
lemma simE2:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
and α :: act
and Q' :: ccs
assumes "(P, Q) ∈ Rel"
and "Q ==> ^ α ≺ Q'"
and Sim: "∧ R S. (R, S) ∈ Rel ==> R ↝ ^ <Rel> S"
obtains P' where "P ==> ^ α ≺ P'" and "(P', Q') ∈ Rel"
proof -
assume Goal: "∧ P'. [ P ==> ^ α ≺ P'; (P', Q') ∈ Rel] ==> thesis"
moreover from ‹ Q ==> ^ α ≺ Q'› have "∃ P'. P ==> ^ α ≺ P' ∧ (P', Q') ∈ Rel"
proof (induct rule: weakTransCases)
case Base
from ‹ (P, Q) ∈ Rel› show ?case by force
next
case Step
from ‹ Q ==> α ≺ Q'› obtain Q''' Q''
where QChain: "Q ==> \ <tau> Q'''" and Q'''Trans: "Q''' ⟼ α ≺ Q''" and Q''Chain: "Q'' ==> \ <tau> Q'"
by (rule weakCongTransE)
from QChain ‹ (P, Q) ∈ Rel› Sim obtain P''' where PChain: "P ==> \ <tau> P'''" and "(P''', Q''') ∈ Rel"
by (rule simTauChain)
from ‹ (P''', Q''') ∈ Rel› have "P''' ↝ ^ <Rel> Q'''" by (rule Sim)
then obtain P'' where P'''Trans: "P''' ==> ^ α ≺ P''" and "(P'', Q'') ∈ Rel" using Q'''Trans by (rule weakSimE)
from Q''Chain ‹ (P'', Q'') ∈ Rel› Sim obtain P' where P''Chain: "P'' ==> \ <tau> P'" and "(P', Q') ∈ Rel"
by (rule simTauChain)
from P'''Trans P''Chain Step show ?thesis
proof (induct rule: weakTransCases)
case Base
from PChain ‹ P''' ==> \ τ P'› have "P ==> ^ τ ≺ P'"
proof (induct rule: tauChainInduct)
case Base
from ‹ P ==> \ τ P'› show ?case
proof (induct rule: tauChainInduct)
case Base
show ?case by simp
next
case (Step P' P'')
thus ?case by (fastforce simp add: weakTrans_def weakCongTrans_def)
qed
next
case (Step P''' P'')
thus ?case by (fastforce simp add: weakTrans_def weakCongTrans_def)
qed
with ‹ (P', Q') ∈ Rel› show ?case by blast
next
case Step
thus ?case using ‹ (P', Q') ∈ Rel› PChain
by (rule_tac x=P' in exI) (force simp add: weakTrans_def weakCongTrans_def)
qed
qed
ultimately show ?thesis
by blast
qed
lemma reflexive:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
assumes "Id ⊆ Rel"
shows "P ↝ ^ <Rel> P"
using assms
by (auto simp add: weakSimulation_def intro: transitionWeakCongTransition weakCongTransitionWeakTransition)
lemma transitive:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
and Rel' :: "(ccs × ccs) set"
and R :: ccs
and Rel'' :: "(ccs × ccs) set"
assumes "(P, Q) ∈ Rel"
and "Q ↝ ^ <Rel'> R"
and "Rel O Rel' ⊆ Rel''"
and "∧ S T. (S, T) ∈ Rel ==> S ↝ ^ <Rel> T"
shows "P ↝ ^ <Rel''> R"
proof (induct rule: weakSimI)
case (Sim α R')
thus ?case using assms
apply (drule_tac Q=R in weakSimE, auto)
by (drule_tac Q=Q in simE2, auto)
qed
lemma weakMonotonic:
fixes P :: ccs
and A :: "(ccs × ccs) set"
and Q :: ccs
and B :: "(ccs × ccs) set"
assumes "P ↝ ^ <A> Q"
and "A ⊆ B"
shows "P ↝ ^ <B> Q"
using assms
by (fastforce simp add: weakSimulation_def)
lemma simWeakSim:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
assumes "P ↝ [Rel] Q"
shows "P ↝ ^ <Rel> Q"
using assms
by (rule_tac weakSimI, auto)
(blast dest: simE transitionWeakTransition)
end
Messung V0.5 in Prozent C=73 H=97 G=85
¤ Dauer der Verarbeitung: 0.8 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland