Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory Act_prefix_cms = Act_prefix + Domain_SF_prod_cms:(*-------------------------------------------* | CSP-Prover | | December 2004 | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory Act_prefix_cms = Act_prefix + 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. [[a -> P]]T : contraction map 2. [[a -> P]]F : contraction map 3. 4. *****************************************************************) (********************************************************* map prefix T *********************************************************) lemma Act_prefix_evalT_contraction_half_lm: "distance ([[a -> P]]T ev1, [[a -> P]]T ev2) * 2 = distance ([[P]]T ev1, [[P]]T ev2)" apply (rule sym) apply (rule rest_Suc_dist_half[simplified]) apply (rule allI) apply (simp add: restT_eq_iff) apply (rule iffI) (* => *) apply (rule allI) apply (simp add: Act_prefix_memT) apply (rule iffI) (* => *) apply (elim conjE exE disjE, simp) apply (drule_tac x="sa" in spec) apply (simp add: not_None) (* <= *) apply (elim conjE exE disjE, simp) apply (drule_tac x="sa" in spec) apply (simp add: not_None) (* <= *) apply (rule allI) apply (drule_tac x="[Ev a]t @t s" in spec) apply (case_tac "s = None", simp) apply (simp add: Act_prefix_memT) done (*** Act_prefix_evalT_contraction ***) lemma Act_prefix_evalT_contraction_half: "non_expanding [[P]]T ==> contraction_alpha [[a -> P]]T (1 / 2)" apply (simp add: contraction_alpha_def non_expanding_def map_alpha_def) apply (intro allI) apply (drule_tac x="x" in spec) apply (drule_tac x="y" in spec) apply (simp add: Act_prefix_evalT_contraction_half_lm) done (*** Act_prefix_evalT_contraction ***) lemma Act_prefix_evalT_contraction: "non_expanding [[P]]T ==> contraction [[a -> P]]T" apply (simp add: contraction_def) apply (rule_tac x="1/2" in exI) by (simp add: Act_prefix_evalT_contraction_half) (*** Act_prefix_evalT_non_expanding ***) lemma Act_prefix_evalT_non_expanding: "non_expanding [[P]]T ==> non_expanding [[a -> P]]T" apply (rule contraction_non_expanding) by (simp add: Act_prefix_evalT_contraction) (********************************************************* map prefix F *********************************************************) lemma Act_prefix_evalF_contraction_half_lm: "distance ([[a -> P]]F ev1, [[a -> P]]F ev2) * 2 = distance ([[P]]F ev1, [[P]]F ev2)" apply (rule sym) apply (rule rest_Suc_dist_half[simplified]) apply (rule allI) apply (simp add: restF_eq_iff) apply (rule iffI) (* => *) apply (intro allI) apply (simp add: Act_prefix_memF) apply (rule iffI) (* => *) apply (elim conjE exE disjE) apply (simp_all) apply (simp add: not_None) apply (drule_tac x="sa" in spec) apply (drule_tac x="X" in spec) apply (simp) apply (simp add: not_None) apply (drule_tac x="sa" in spec) apply (drule_tac x="X" in spec) apply (simp) apply (erule iffE, simp) apply (insert trace_last_nil_or_unnil) apply (drule_tac x="sa" in spec) apply (simp add: not_None) apply (erule disjE, simp) apply (elim conjE exE) apply (simp add: appt_ass_rev del: appt_ass) (* <= *) apply (elim conjE exE disjE) apply (simp_all) apply (simp add: not_None) apply (drule_tac x="sa" in spec) apply (drule_tac x="X" in spec) apply (simp) apply (simp add: not_None) apply (drule_tac x="sa" in spec) apply (drule_tac x="X" in spec) apply (simp) apply (erule iffE, simp) apply (drule_tac x="sa" in spec) apply (simp add: not_None) apply (erule disjE, simp) apply (elim conjE exE) apply (simp add: appt_ass_rev del: appt_ass) (* <= *) apply (intro allI) apply (drule_tac x="[Ev a]t @t s" in spec) apply (drule_tac x="X" in spec) apply (case_tac "s = None", simp) apply (simp add: Act_prefix_memF) apply (rule iffI) (* => *) apply (elim conjE exE disjE) apply (simp) apply (subgoal_tac "notick([Ev a]t @t s')") apply (simp add: appt_ass_rev del: appt_ass) apply (case_tac "~ notick s'", simp, simp) (* <= *) apply (elim conjE exE disjE) apply (simp) apply (subgoal_tac "notick([Ev a]t @t s')") apply (simp add: appt_ass_rev del: appt_ass) apply (case_tac "~ notick s'", simp, simp) done (*** Act_prefix_evalF_contraction ***) lemma Act_prefix_evalF_contraction_half: "non_expanding [[P]]F ==> contraction_alpha [[a -> P]]F (1 / 2)" apply (simp add: contraction_alpha_def non_expanding_def map_alpha_def) apply (intro allI) apply (drule_tac x="x" in spec) apply (drule_tac x="y" in spec) apply (simp add: Act_prefix_evalF_contraction_half_lm) done (*** Act_prefix_evalF_contraction ***) lemma Act_prefix_evalF_contraction: "non_expanding [[P]]F ==> contraction [[a -> P]]F" apply (simp add: contraction_def) apply (rule_tac x="1/2" in exI) by (simp add: Act_prefix_evalF_contraction_half) (*** Act_prefix_evalF_non_expanding ***) lemma Act_prefix_evalF_non_expanding: "non_expanding [[P]]F ==> non_expanding [[a -> P]]F" apply (rule contraction_non_expanding) by (simp add: Act_prefix_evalF_contraction) (****************** to add them again ******************) declare disj_not1 [simp] declare not_None_eq [simp] end
lemma Act_prefix_evalT_contraction_half_lm:
distance ([[a -> P]]T ev1, [[a -> P]]T ev2) * 2 = distance ([[P]]T ev1, [[P]]T ev2)
lemma Act_prefix_evalT_contraction_half:
non_expanding [[P]]T ==> contraction_alpha [[a -> P]]T (1 / 2)
lemma Act_prefix_evalT_contraction:
non_expanding [[P]]T ==> contraction [[a -> P]]T
lemma Act_prefix_evalT_non_expanding:
non_expanding [[P]]T ==> non_expanding [[a -> P]]T
lemma Act_prefix_evalF_contraction_half_lm:
distance ([[a -> P]]F ev1, [[a -> P]]F ev2) * 2 = distance ([[P]]F ev1, [[P]]F ev2)
lemma Act_prefix_evalF_contraction_half:
non_expanding [[P]]F ==> contraction_alpha [[a -> P]]F (1 / 2)
lemma Act_prefix_evalF_contraction:
non_expanding [[P]]F ==> contraction [[a -> P]]F
lemma Act_prefix_evalF_non_expanding:
non_expanding [[P]]F ==> non_expanding [[a -> P]]F