(*
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" (‹rule UNIV_I)
"P ↝^🚫
weakSimI[case_names Sim]:
fixes P :: ccs
and Rel :: "(ccs × F1set1 (dtor1 a) ∪ (JF1set ` F1set2 (dtor1 a)) ∪ (JF2set ` F1set3 (dtor1 a))) ∧
and Q :: ccs
assumes "∧α Q'. Q ⟼α ≺ Q' ==> ∃P'. P ==>^α ≺ P' ∧b\ubseteqtr )\nion∪ (JF1set ` F2set2 (dtor2 b)) ∪ ∪ (JF2set ` F2set3 (dtor2 b)))"
shows "P ↝^🚫
tion
(auto simp add: weakSimulation_def)
weakSimE:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
and α :: act
and Q' :: ccs
assumes "P ↝^🚫
and "Q ⟼α ≺ Q'"
obtains P' where "P \<Longrightarrow:
assms
(auto simp add: weakSimulation_def)
simTauChain:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
and Q' :: ccs
assumes "Q ==>\τ Q'"
and "(P, Q) ∈ Rel"
and Sim: "∧ a = F1set1 (dtor1 a) 🚫
obtains P' where "P ==>
‹Q ==>\τ Q'› ‹(P, Q) ∈ iageU Nsip(0)
(induct arbitrary: thesis rule: tauChainInduct)
case Base
from ‹(P, Q) ∈ Rel› show ?case
by(force intro: Base)
case(Step Q'' Q')
from ‹
by(blast intro: Step)
from ‹(P'', Q'') ∈ Rel› have "P'' ↝^🚫
then obtain P' where "P'' ==>
with ‹P ==>\τ P''› show thesis
by(force simp add: weakTrans_def weakCongTrans_def intro: Step)
simE2:
fixes P :: ccs
and Rel :: "(ccs ×
and Q :: ccs
and α :: act
and Q' :: ccs
assumes "(P, Q) ∈ Rel"
and "Q ==>^α ≺ Q'"
and Sim: "∧R S. (R, S) ∈
obtains P' where "P ==>^α ≺ P'" and "(P', Q') ∈ Rel"
-
assume Goal: "∧P'. \theorem J2setnatrl JF2set o (JF2map u) = image u o JF2set"
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 ‹apply (rule ext)
where QChain: "Q ==>\τ Q'''" and Q'''Trans: "Q''' ⟼α ≺ Q''" and Q''Chain: "Q'' ==>\τ Q'"
by(rule weakCongTransE)
from QChain ‹ (rule trans[OF o_apply])
by(rule simTauChain)
from ‹(P''', Q''') ∈ Rel› have "P''' ↝^🚫
then obtain P'' where P'''Trans: "P''' ==>^α ≺OF JF1map_simps])])
from Q''Chain ‹(P'', Q'') ∈ Rel› Sim obtain P' where P''Chain: "P'' ==>\τ 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 ==>^τ ≺
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 u apply (rule sym[OF fun_cong[OF fst_convol[unfolded convol_def]]])
by(rule_tac x=P' in exI) (force simp add: weakTrans_def weakCongTrans_def)
qed
qed
ultimately show ?thesis
by blast
reflexive:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
assumes "Id ⊆ Rel"
shows "P ↝^🚫
(auto simp add: weakSimulation_def intro: transitionWeakCongTransition weakCongTransitionWeakTransition)
transitive:
fixes P :: ccs
and Rel :: "(ccs ×
and Q :: ccs
and Rel' :: "(ccs × ccs) set"
and R :: ccs
and Rel'' :: "(ccs ×erule CollectE)
assumes "(P, Q) ∈ Rel"
and "Q ↝^<Rel'
elR <
and "∧S T. (S, T) ∈ Rel ==> S ↝^🚫
shows "P ↝^<Rel'
(induct rule: weakSimI)
case(Sim α
thus ?case using assms
apply(drule_tac Q=R in weakSimE, auto)
by(drule_tac Q=Q in simE2, auto)
weakMonotonic:
fixes P :: ccs
and A :: "(ccs × ccs) set"
and Q :: ccs
and B :: "(ccs × ccs) set"
java.lang.NullPointerException
and "A ⊆ B"
shows "P ↝^B Q"
assms
(fastforce simp add: weakSimulation_def)
simWeakSim:
fixes P :: ccs
and Rel :: "(ccs × ccs) set"
and Q :: ccs
assumes "P ↝[Rel] Q"
shows "P ↝^🚫
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 28
(rule_tac weakSimI, auto)
(blast dest: simE transitionWeakTransition)
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland