Theory Weak_Cong_Semantics

Up to index of Isabelle/HOL/HOL-Nominal/CCS

theory Weak_Cong_Semantics
imports Tau_Chain
(* 
Title: The Calculus of Communicating Systems
Author/Maintainer: Jesper Bengtson (jebe@itu.dk), 2012
*)

theory Weak_Cong_Semantics
imports Tau_Chain
begin

definition weakCongTrans :: "ccs => act => ccs => bool" ("_ ==>_ \<prec> _" [80, 80, 80] 80)
where "P ==>α \<prec> P' ≡ ∃P'' P'''. P ==>τ P'' ∧ P'' \<longmapsto>α \<prec> P''' ∧ P''' ==>τ P'"

lemma weakCongTransE:
fixes P :: ccs
and α :: act
and P' :: ccs

assumes "P ==>α \<prec> P'"

obtains P'' P''' where "P ==>τ P''" and "P'' \<longmapsto>α \<prec> P'''" and "P''' ==>τ P'"
using assms
by(auto simp add: weakCongTrans_def)

lemma weakCongTransI:
fixes P :: ccs
and P'' :: ccs
and α :: act
and P''' :: ccs
and P' :: ccs

assumes "P ==>τ P''"
and "P'' \<longmapsto>α \<prec> P'''"
and "P''' ==>τ P'"

shows "P ==>α \<prec> P'"
using assms
by(auto simp add: weakCongTrans_def)

lemma transitionWeakCongTransition:
fixes P :: ccs
and α :: act
and P' :: ccs

assumes "P \<longmapsto>α \<prec> P'"

shows "P ==>α \<prec> P'"
using assms
by(force simp add: weakCongTrans_def)

lemma weakCongAction:
fixes a :: name
and P :: ccs

shows "α.(P) ==>α \<prec> P"
by(auto simp add: weakCongTrans_def)
(blast intro: Action tauChainRefl)

lemma weakCongSum1:
fixes P :: ccs
and α :: act
and P' :: ccs
and Q :: ccs

assumes "P ==>α \<prec> P'"

shows "P ⊕ Q ==>α \<prec> P'"
using assms
apply(auto simp add: weakCongTrans_def)
apply(case_tac "P=P''")
apply(force simp add: tauChain_def dest: Sum1)
by(force intro: tauChainSum1)

lemma weakCongSum2:
fixes Q :: ccs
and α :: act
and Q' :: ccs
and P :: ccs

assumes "Q ==>α \<prec> Q'"

shows "P ⊕ Q ==>α \<prec> Q'"
using assms
apply(auto simp add: weakCongTrans_def)
apply(case_tac "Q=P''")
apply(force simp add: tauChain_def dest: Sum2)
by(force intro: tauChainSum2)

lemma weakCongPar1:
fixes P :: ccs
and α :: act
and P' :: ccs
and Q :: ccs

assumes "P ==>α \<prec> P'"

shows "P \<parallel> Q ==>α \<prec> P' \<parallel> Q"
using assms
by(auto simp add: weakCongTrans_def)
(blast dest: tauChainPar1 Par1)

lemma weakCongPar2:
fixes Q :: ccs
and α :: act
and Q' :: ccs
and P :: ccs

assumes "Q ==>α \<prec> Q'"

shows "P \<parallel> Q ==>α \<prec> P \<parallel> Q'"
using assms
by(auto simp add: weakCongTrans_def)
(blast dest: tauChainPar2 Par2)

lemma weakCongSync:
fixes P :: ccs
and α :: act
and P' :: ccs
and Q :: ccs

assumes "P ==>α \<prec> P'"
and "Q ==>(coAction α) \<prec> Q'"
and "α ≠ τ"

shows "P \<parallel> Q ==>τ \<prec> P' \<parallel> Q'"
using assms
apply(auto simp add: weakCongTrans_def)
apply(rule_tac x= "P'' \<parallel> P''a" in exI)
apply auto
apply(blast dest: tauChainPar1 tauChainPar2)
apply(rule_tac x="P''' \<parallel> P'''a" in exI)
apply auto
apply(rule Comm)
apply auto
apply(rule_tac P'="P' \<parallel> P'''a" in tauChainAppend)
by(blast dest: tauChainPar1 tauChainPar2)+

lemma weakCongRes:
fixes P :: ccs
and α :: act
and P' :: ccs
and x :: name

assumes "P ==>α \<prec> P'"
and "x \<sharp> α"

shows "(|νx|)),P ==>α \<prec> (|νx|)),P'"
using assms
by(auto simp add: weakCongTrans_def)
(blast dest: tauChainRes Res)

lemma weakCongRepl:
fixes P :: ccs
and α :: act
and P' :: ccs

assumes "P \<parallel> !P ==>α \<prec> P'"

shows "!P ==>α \<prec> P'"
using assms
apply(auto simp add: weakCongTrans_def)
apply(case_tac "P'' = P \<parallel> !P")
apply auto
apply(force intro: Bang simp add: tauChain_def)
by(force intro: tauChainRepl)

end