Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory Renaming_cms = Renaming + Domain_SF_prod_cms: (*-------------------------------------------*
| CSP-Prover |
| December 2004 |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory Renaming_cms = Renaming + Domain_SF_prod_cms:
(* The following simplification rules are deleted in this theory file *)
(* because they unexpectly rewrite UnionT and InterT. *)
(* 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]
(*****************************************************************
1. [[P [[r]]]]T : non expanding
2. [[P [[r]]]]F : non expanding
3.
4.
*****************************************************************)
(*********************************************************
map Renaming T
*********************************************************)
(*** restT (subset) ***)
lemma Renaming_restT_sub:
"[[P]]T ev1 rest n <= [[P]]T ev2 rest n
==> [[P [[r]]]]T ev1 rest n <= [[P [[r]]]]T ev2 rest n"
apply (simp add: subsetT_iff)
apply (intro allI impI)
apply (simp add: in_restT)
apply (simp add: Renaming_memT)
apply (elim conjE exE)
apply (rule_tac x="s" in exI)
apply (drule_tac x="s" in spec)
by (simp add: ren_tr_lengtht)
(*** restT (equal) ***)
lemma Renaming_restT:
"[[P]]T ev1 rest n = [[P]]T ev2 rest n
==> [[P [[r]]]]T ev1 rest n = [[P [[r]]]]T ev2 rest n"
apply (rule order_antisym)
by (simp_all add: Renaming_restT_sub)
(*** distT lemma ***)
lemma Renaming_distT:
"distance([[P [[r]]]]T ev1, [[P [[r]]]]T ev2)
<= distance([[P]]T ev1, [[P]]T ev2)"
apply (rule rest_distance_subset)
by (auto intro: Renaming_restT)
(*** map_alphaT lemma ***)
lemma Renaming_evalT_map_alpha_lm:
"distance ([[P]]T ev1, [[P]]T ev2) <= alpha * distance (ev1, ev2)
==> distance ([[P [[r]]]]T ev1, [[P [[r]]]]T ev2)
<= alpha * distance (ev1, ev2)"
apply (insert Renaming_distT[of P r ev1 ev2])
by (simp)
(*** Renaming_evalT_map_alpha ***)
lemma Renaming_evalT_map_alpha:
"map_alpha [[P]]T alpha ==> map_alpha [[P [[r]]]]T alpha"
apply (simp add: map_alpha_def)
apply (intro allI)
apply (erule conjE)
apply (drule_tac x="x" in spec)
apply (drule_tac x="y" in spec)
by (simp add: Renaming_evalT_map_alpha_lm)
(*** Renaming_evalT_non_expanding ***)
lemma Renaming_evalT_non_expanding:
"non_expanding [[P]]T ==> non_expanding [[P [[r]]]]T"
by (simp add: non_expanding_def Renaming_evalT_map_alpha)
(*** Renaming_evalT_contraction_alpha ***)
lemma Renaming_evalT_contraction_alpha:
"contraction_alpha [[P]]T alpha ==> contraction_alpha [[P [[r]]]]T alpha"
by (simp add: contraction_alpha_def Renaming_evalT_map_alpha)
(*********************************************************
map Renaming F
*********************************************************)
(*** restF (subset) ***)
lemma Renaming_restF_sub:
"[[P]]F ev1 rest n <= [[P]]F ev2 rest n
==> [[P [[r]]]]F ev1 rest n <= [[P [[r]]]]F ev2 rest n"
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_restF)
apply (simp add: Renaming_memF)
apply (elim conjE exE)
apply (rule_tac x="sa" in exI)
apply (drule_tac x="sa" in spec)
apply (drule_tac x="[[r]]inv X" in spec)
apply (simp)
apply (erule disjE)
apply (simp add: ren_tr_lengtht)
apply (elim conjE exE)
apply (simp add: ren_tr_lengtht)
apply (simp add: not_None_F ren_tr_appt_decompo_right)
apply (elim conjE exE, simp)
by (fast)
(*** restF (equal) ***)
lemma Renaming_restF:
"[[P]]F ev1 rest n = [[P]]F ev2 rest n
==> [[P [[r]]]]F ev1 rest n = [[P [[r]]]]F ev2 rest n"
apply (rule order_antisym)
by (simp_all add: Renaming_restF_sub)
(*** distF lemma ***)
lemma Renaming_distF:
"distance([[P [[r]]]]F ev1, [[P [[r]]]]F ev2)
<= distance([[P]]F ev1, [[P]]F ev2)"
apply (rule rest_distance_subset)
by (auto intro: Renaming_restF)
(*** map_alphaF lemma ***)
lemma Renaming_evalF_map_alpha_lm:
"distance ([[P]]F ev1, [[P]]F ev2) <= alpha * distance (ev1, ev2)
==> distance ([[P [[r]]]]F ev1, [[P [[r]]]]F ev2)
<= alpha * distance (ev1, ev2)"
apply (insert Renaming_distF[of P r ev1 ev2])
by (simp)
(*** Renaming_evalF_map_alpha ***)
lemma Renaming_evalF_map_alpha:
"map_alpha [[P]]F alpha ==> map_alpha [[P [[r]]]]F alpha"
apply (simp add: map_alpha_def)
apply (intro allI)
apply (erule conjE)
apply (drule_tac x="x" in spec)
apply (drule_tac x="y" in spec)
by (simp add: Renaming_evalF_map_alpha_lm)
(*** Renaming_evalF_non_expanding ***)
lemma Renaming_evalF_non_expanding:
"non_expanding [[P]]F ==> non_expanding [[P [[r]]]]F"
by (simp add: non_expanding_def Renaming_evalF_map_alpha)
(*** Renaming_evalF_contraction_alpha ***)
lemma Renaming_evalF_contraction_alpha:
"contraction_alpha [[P]]F alpha ==> contraction_alpha [[P [[r]]]]F alpha"
by (simp add: contraction_alpha_def Renaming_evalF_map_alpha)
(****************** to add them again ******************)
declare disj_not1 [simp]
declare not_None_eq [simp]
end
lemma Renaming_restT_sub:
[[P]]T ev1 rest n ≤ [[P]]T ev2 rest n ==> [[P [[r]]]]T ev1 rest n ≤ [[P [[r]]]]T ev2 rest n
lemma Renaming_restT:
[[P]]T ev1 rest n = [[P]]T ev2 rest n ==> [[P [[r]]]]T ev1 rest n = [[P [[r]]]]T ev2 rest n
lemma Renaming_distT:
distance ([[P [[r]]]]T ev1, [[P [[r]]]]T ev2) ≤ distance ([[P]]T ev1, [[P]]T ev2)
lemma Renaming_evalT_map_alpha_lm:
distance ([[P]]T ev1, [[P]]T ev2) ≤ alpha * distance (ev1, ev2) ==> distance ([[P [[r]]]]T ev1, [[P [[r]]]]T ev2) ≤ alpha * distance (ev1, ev2)
lemma Renaming_evalT_map_alpha:
map_alpha [[P]]T alpha ==> map_alpha [[P [[r]]]]T alpha
lemma Renaming_evalT_non_expanding:
non_expanding [[P]]T ==> non_expanding [[P [[r]]]]T
lemma Renaming_evalT_contraction_alpha:
contraction_alpha [[P]]T alpha ==> contraction_alpha [[P [[r]]]]T alpha
lemma Renaming_restF_sub:
[[P]]F ev1 rest n ≤ [[P]]F ev2 rest n ==> [[P [[r]]]]F ev1 rest n ≤ [[P [[r]]]]F ev2 rest n
lemma Renaming_restF:
[[P]]F ev1 rest n = [[P]]F ev2 rest n ==> [[P [[r]]]]F ev1 rest n = [[P [[r]]]]F ev2 rest n
lemma Renaming_distF:
distance ([[P [[r]]]]F ev1, [[P [[r]]]]F ev2) ≤ distance ([[P]]F ev1, [[P]]F ev2)
lemma Renaming_evalF_map_alpha_lm:
distance ([[P]]F ev1, [[P]]F ev2) ≤ alpha * distance (ev1, ev2) ==> distance ([[P [[r]]]]F ev1, [[P [[r]]]]F ev2) ≤ alpha * distance (ev1, ev2)
lemma Renaming_evalF_map_alpha:
map_alpha [[P]]F alpha ==> map_alpha [[P [[r]]]]F alpha
lemma Renaming_evalF_non_expanding:
non_expanding [[P]]F ==> non_expanding [[P [[r]]]]F
lemma Renaming_evalF_contraction_alpha:
contraction_alpha [[P]]F alpha ==> contraction_alpha [[P [[r]]]]F alpha