Up to index of Isabelle/HOL/HOL-Nominal/CCS
theory Weak_Semantics(*
Title: The Calculus of Communicating Systems
Author/Maintainer: Jesper Bengtson (jebe@itu.dk), 2012
*)
theory Weak_Semantics
imports Weak_Cong_Semantics
begin
definition weakTrans :: "ccs => act => ccs => bool" ("_ ==>⇧^_ \<prec> _" [80, 80, 80] 80)
where "P ==>⇧^α \<prec> P' ≡ P ==>α \<prec> P' ∨ (α = τ ∧ P = P')"
lemma weakEmptyTrans[simp]:
fixes P :: ccs
shows "P ==>⇧^τ \<prec> P"
by(auto simp add: weakTrans_def)
lemma weakTransCases[consumes 1, case_names Base Step]:
fixes P :: ccs
and α :: act
and P' :: ccs
assumes "P ==>⇧^α \<prec> P'"
and "[|α = τ; P = P'|] ==> Prop (τ) P"
and "P ==>α \<prec> P' ==> Prop α P'"
shows "Prop α P'"
using assms
by(auto simp add: weakTrans_def)
lemma weakCongTransitionWeakTransition:
fixes P :: ccs
and α :: act
and P' :: ccs
assumes "P ==>α \<prec> P'"
shows "P ==>⇧^α \<prec> P'"
using assms
by(auto simp add: weakTrans_def)
lemma transitionWeakTransition:
fixes P :: ccs
and α :: act
and P' :: ccs
assumes "P \<longmapsto>α \<prec> P'"
shows "P ==>⇧^α \<prec> P'"
using assms
by(auto dest: transitionWeakCongTransition weakCongTransitionWeakTransition)
lemma weakAction:
fixes a :: name
and P :: ccs
shows "α.(P) ==>⇧^α \<prec> P"
by(auto simp add: weakTrans_def intro: weakCongAction)
lemma weakSum1:
fixes P :: ccs
and α :: act
and P' :: ccs
and Q :: ccs
assumes "P ==>⇧^α \<prec> P'"
and "P ≠ P'"
shows "P ⊕ Q ==>⇧^α \<prec> P'"
using assms
by(auto simp add: weakTrans_def intro: weakCongSum1)
lemma weakSum2:
fixes Q :: ccs
and α :: act
and Q' :: ccs
and P :: ccs
assumes "Q ==>⇧^α \<prec> Q'"
and "Q ≠ Q'"
shows "P ⊕ Q ==>⇧^α \<prec> Q'"
using assms
by(auto simp add: weakTrans_def intro: weakCongSum2)
lemma weakPar1:
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: weakTrans_def intro: weakCongPar1)
lemma weakPar2:
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: weakTrans_def intro: weakCongPar2)
lemma weakSync:
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
by(auto simp add: weakTrans_def intro: weakCongSync)
lemma weakRes:
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: weakTrans_def intro: weakCongRes)
lemma weakRepl:
fixes P :: ccs
and α :: act
and P' :: ccs
assumes "P \<parallel> !P ==>⇧^α \<prec> P'"
and "P' ≠ P \<parallel> !P"
shows "!P ==>α \<prec> P'"
using assms
by(auto simp add: weakTrans_def intro: weakCongRepl)
end