(*-------------------------------------------*
| CSP-Prover |
| December 2004 |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory Renaming = CSP_semantics:
(* The following simplification rules are deleted in this theory file *)
(* because they unexpectly rewrite (notick | t = []t) *)
(* *)
(* disj_not1: (~ P | Q) = (P --> Q) *)
declare disj_not1 [simp del]
(* The following simplification is sometimes unexpected. *)
(* *)
(* not_None_eq: (x ~= None) = (EX y. x = Some y) *)
declare not_None_eq [simp del]
(*********************************************************
DomT
*********************************************************)
(*** Renaming_domT ***)
lemma Renaming_domT : "{t. EX s. s [[r]]tr t & s :t [[P]]T ev } : domT"
apply (simp add: domT_def HC_T1_def)
apply (rule conjI)
apply (rule_tac x="[]t" in exI, simp)
(* prefix closed *)
apply (simp add: prefix_closed_def)
apply (intro allI impI)
apply (elim conjE exE)
apply (erule ren_tr_prefixE, simp)
apply (rule_tac x="ta" in exI)
apply (simp)
apply (rule memT_prefix_closed)
by (simp_all)
(*** Renaming_memT ***)
lemma Renaming_memT:
"(t :t [[P [[r]]]]T ev) =
(EX s. s [[r]]tr t & s :t [[P]]T ev)"
apply (simp add: evalT_def)
by (simp add: memT_def Abs_domT_inverse Renaming_domT[simplified memT_def])
(*********************************************************
DomF
*********************************************************)
(*** Renaming_domF ***)
lemma Renaming_domF :
"{f. EX s t X. f = (t,X) & s [[r]]tr t &
(s, [[r]]inv X) :f [[P]]F ev } : domF"
apply (simp add: domF_def HC_F2_def)
apply (intro allI impI)
apply (elim conjE exE)
apply (rule_tac x="sa" in exI)
apply (simp)
apply (rule memF_F2, simp)
apply (rule ren_inv_sub, simp)
done
lemma Renaming_memF:
"(f :f [[P [[r]]]]F ev) =
(EX s t X. f = (t,X) & s [[r]]tr t & (s, [[r]]inv X) :f [[P]]F ev)"
apply (simp add: evalF_def)
by (simp add: memF_def Abs_domF_inverse Renaming_domF[simplified memF_def])
lemmas Renaming_mem = Renaming_memT Renaming_memF
(*********************************************************
domSF
*********************************************************)
(*** T2 ***)
lemma Renaming_T2 :
"([[P]]T ev, [[P]]F ev) : domSF
==> HC_T2 ([[P [[r]]]]T ev, [[P [[r]]]]F ev)"
apply (simp add: HC_T2_def Renaming_mem)
apply (intro allI impI)
apply (elim conjE exE)
apply (rule_tac x="sa" in exI)
apply (simp add: domSF_def HC_T2_def)
apply (elim conjE)
apply (drule_tac x="sa" in spec)
by (force)
(*** F3 ***)
lemma Renaming_F3 :
"([[P]]T ev, [[P]]F ev) : domSF
==> HC_F3 ([[P [[r]]]]T ev, [[P [[r]]]]F ev)"
apply (simp add: HC_F3_def Renaming_mem)
apply (intro allI impI)
apply (elim conjE exE)
apply (rule_tac x="sa" in exI, simp)
apply (simp add: domSF_def HC_F3_def)
apply (elim conjE)
apply (drule_tac x="sa" in spec)
apply (drule_tac x="[[r]]inv X" in spec)
apply (drule_tac x="[[r]]inv Y" in spec)
apply (drule mp)
apply (simp add: ren_tr_notick_right)
apply (intro allI impI)
apply (simp add: ren_inv_def)
apply (erule bexE)
apply (fold ren_inv_def)
apply (drule_tac x="eb" in spec, simp)
(* Tick *)
apply (erule disjE)
apply (drule_tac x=" sa @t [a]t" in spec)
apply (simp)
(* Ev *)
apply (elim conjE exE)
apply (drule_tac x=" sa @t [Ev aa]t" in spec)
apply (simp)
by (simp)
(* T3_F4 *)
lemma Renaming_T3_F4 :
"([[P]]T ev, [[P]]F ev) : domSF
==> HC_T3_F4 ([[P [[r]]]]T ev, [[P [[r]]]]F ev)"
apply (simp add: HC_T3_F4_def Renaming_mem)
apply (intro allI impI)
apply (elim conjE exE)
apply (case_tac "sa = None", simp)
apply (simp add: ren_tr_appt_decompo)
apply (elim conjE exE)
apply (case_tac "~ notick s1", simp)
apply (simp)
(* F4 *)
apply (rule conjI)
apply (rule_tac x="s1" in exI, simp)
apply (simp add: domSF_def HC_F4_def)
apply (elim conjE)
apply (drule_tac x="s1" in spec, simp)
apply (rule memF_F2, simp, simp)
(* T3 *)
apply (rule allI)
apply (rule_tac x="s1 @t [Tick]t" in exI, simp)
apply (simp add: domSF_def HC_T3_def)
done
(*** Renaming_domSF ***)
lemma Renaming_domSF :
"([[P]]T ev, [[P]]F ev) : domSF
==> ([[P [[r]]]]T ev, [[P [[r]]]]F ev) : domSF"
apply (simp (no_asm) add: domSF_iff)
apply (simp add: Renaming_T2)
apply (simp add: Renaming_F3)
apply (simp add: Renaming_T3_F4)
done
(*********************************************************
mono
*********************************************************)
(*** T ***)
lemma Renaming_evalT_mono:
"[[P1]]T ev1 <= [[P2]]T ev2 ==> [[P1 [[r]]]]T ev1 <= [[P2 [[r]]]]T ev2"
apply (simp add: subsetT_iff)
apply (intro allI impI)
apply (simp add: Renaming_memT)
apply (elim conjE exE)
apply (rule_tac x="s" in exI)
by (simp_all)
(*** F ***)
lemma Renaming_evalF_mono:
"[[P1]]F ev1 <= [[P2]]F ev2 ==> [[P1 [[r]]]]F ev1 <= [[P2 [[r]]]]F ev2"
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: Renaming_memF)
apply (elim conjE exE)
apply (rule_tac x="sa" in exI)
by (simp_all)
(****************** to add it again ******************)
declare disj_not1 [simp]
declare not_None_eq [simp]
end
lemma Renaming_domT:
{t. ∃s. s [[r]]tr t ∧ s :t [[P]]T ev} ∈ domT
lemma Renaming_memT:
(t :t [[P [[r]]]]T ev) = (∃s. s [[r]]tr t ∧ s :t [[P]]T ev)
lemma Renaming_domF:
{f. ∃s t X. f = (t, X) ∧ s [[r]]tr t ∧ (s, [[r]]inv X) :f [[P]]F ev} ∈ domF
lemma Renaming_memF:
(f :f [[P [[r]]]]F ev) = (∃s t X. f = (t, X) ∧ s [[r]]tr t ∧ (s, [[r]]inv X) :f [[P]]F ev)
lemmas Renaming_mem:
(t :t [[P [[r]]]]T ev) = (∃s. s [[r]]tr t ∧ s :t [[P]]T ev)
(f :f [[P [[r]]]]F ev) = (∃s t X. f = (t, X) ∧ s [[r]]tr t ∧ (s, [[r]]inv X) :f [[P]]F ev)
lemma Renaming_T2:
([[P]]T ev, [[P]]F ev) ∈ domSF ==> HC_T2 ([[P [[r]]]]T ev, [[P [[r]]]]F ev)
lemma Renaming_F3:
([[P]]T ev, [[P]]F ev) ∈ domSF ==> HC_F3 ([[P [[r]]]]T ev, [[P [[r]]]]F ev)
lemma Renaming_T3_F4:
([[P]]T ev, [[P]]F ev) ∈ domSF ==> HC_T3_F4 ([[P [[r]]]]T ev, [[P [[r]]]]F ev)
lemma Renaming_domSF:
([[P]]T ev, [[P]]F ev) ∈ domSF ==> ([[P [[r]]]]T ev, [[P [[r]]]]F ev) ∈ domSF
lemma Renaming_evalT_mono:
[[P1]]T ev1 ≤ [[P2]]T ev2 ==> [[P1 [[r]]]]T ev1 ≤ [[P2 [[r]]]]T ev2
lemma Renaming_evalF_mono:
[[P1]]F ev1 ≤ [[P2]]F ev2 ==> [[P1 [[r]]]]F ev1 ≤ [[P2 [[r]]]]F ev2