Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory Domain_T_cms = Domain_T + RS:(*-------------------------------------------* | CSP-Prover | | December 2004 | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory Domain_T_cms = Domain_T + RS: (***************************************************************** 1. 2. 3. 4. *****************************************************************) (* The following simplification rules are deleted in this theory file *) (* because they unexpectly rewrite UnionT and InterT. *) (* Union (B ` A) = (UN x:A. B x) *) (* Inter (B ` A) = (INT x:A. B x) *) declare Union_image_eq [simp del] declare Inter_image_eq [simp del] (* The following simplification is sometimes unexpected. *) (* *) (* not_None_eq: (x ~= None) = (EX y. x = Some y) *) declare not_None_eq [simp del] (********************************************************** Definitions (Restriction in domT) **********************************************************) instance domT :: (type) ms0 by (intro_classes) consts restTset :: "'a domT => nat => 'a trace set" ("_ restTset _" [55,56] 55) LimitTset:: "'a domT infinite_seq => 'a trace set" LimitT :: "'a domT infinite_seq => 'a domT" defs restTset_def : "T restTset n == {s. s :t T & (lengtht s) <= n}" LimitTset_def : "LimitTset Ts == {s. s :t Ts (lengtht s)}" LimitT_def : "LimitT Ts == Abs_domT (LimitTset Ts)" defs (overloaded) restT_def : "T rest n == Abs_domT (T restTset n)" (********************************************************** Lemmas (Restriction in Dom_T) **********************************************************) (*** restTset_def in domT ***) lemma restTset_in[simp] : "T restTset n : domT" apply (simp add: restTset_def) apply (simp add: domT_def HC_T1_def) apply (rule conjI) apply (rule_tac x="[]t" in exI, simp) apply (simp add: prefix_closed_def) apply (intro allI impI) apply (elim conjE exE) apply (rule conjI) apply (rule memT_prefix_closed, simp_all) apply (subgoal_tac "lengtht s <= lengtht t", simp) apply (rule length_of_prefix) apply (simp_all add: memT_not_None) done (*** restTset in domT ***) lemmas restTset_def_in = restTset_in[simplified memT_def restTset_def] (********************************************************* rest on dom_T *********************************************************) lemma restT_iff: "T rest n = {s. s :t T & lengtht s <= n}t" apply (simp add: restT_def) apply (simp add: restTset_in[simplified restTset_def] Abs_domT_inject) apply (simp add: restTset_def) done lemma in_restT: "s :t T rest n = (s :t T & lengtht s <= n)" apply (simp add: memT_def restT_def) apply (simp add: Abs_domT_inverse) apply (simp add: memT_def restTset_def) done lemma restT_eq_iff: "(T rest n = S rest m) = (ALL s. (s :t T & lengtht s <= n) = (s :t S & lengtht s <= m))" apply (simp add: restT_def Abs_domT_inject) apply (simp add: restTset_def) by (auto) (********************************************************* Dom_T --> RS *********************************************************) (******************************* zero_eq_rs_domT *******************************) (*** restTset 0 ***) lemma zero_domT: "T restTset 0 = {[]t}" apply (simp add: restTset_def) apply (rule order_antisym) apply (rule subsetI) apply (simp) apply (erule conjE) apply (simp add: lengtht_zero memT_not_None) by (simp) (*** zero_eq_rs_domT ***) lemma zero_eq_rs_domT: "(T::'a domT) rest 0 = S rest 0" apply (simp add: restT_def) apply (simp add: Abs_domT_inject) apply (simp add: zero_domT) done (******************************* min_rs_domT *******************************) lemma min_rs_domT: "((T::'a domT) rest m) rest n = T rest (min m n)" apply (simp add: restT_def) apply (simp add: Abs_domT_inject) apply (simp add: restTset_def memT_def) apply (simp add: restTset_in[simplified memT_def restTset_def] Abs_domT_inverse) done (******************************* diff_rs_domT *******************************) (*** contra = ***) lemma contra_diff_rs_domT: "(ALL n. (T::'a domT) rest n = S rest n) ==> T = S" apply (simp add: restT_eq_iff) apply (simp add: eq_iff) by (auto) (*** diff_rs_domT ***) lemma diff_rs_domT: "(T::'a domT) ~= S ==> (EX n. T rest n ~= S rest n)" apply (erule contrapos_pp) apply (simp) apply (rule contra_diff_rs_domT, simp) done (*************************************************************** domT ==> RS ***************************************************************) instance domT :: (type) rs apply (intro_classes) apply (simp add: zero_eq_rs_domT) apply (simp add: min_rs_domT) apply (simp add: diff_rs_domT) done (************************************************************ domT ==> MS ************************************************************) instance domT :: (type) ms apply (intro_classes) apply (simp) apply (simp add: diagonal_rs) apply (simp add: symmetry_rs) apply (simp add: triangle_inequality_rs) done (************************************************************ i.e. domT ==> MS & RS ************************************************************) instance domT :: (type) ms_rs by (intro_classes) (*********************************************************** lemmas (Limit) ***********************************************************) (*** normal_seq lemma ***) lemma normal_seq_domT: "[| normal Ts ; lengtht s <= n |] ==> (s :t Ts (lengtht s)) = (s :t Ts n)" apply (simp add: normal_def) apply (drule_tac x="lengtht s" in spec) apply (drule_tac x="n" in spec) apply (simp add: min_is) apply (simp add: distance_rs_less_1[THEN sym]) apply (simp add: restT_eq_iff) apply (drule_tac x="s" in spec) by (simp) lemma normal_seq_domT_only_if: "[| normal Ts ; lengtht s <= n ; s :t Ts (lengtht s) |] ==> s :t Ts n" by (simp add: normal_seq_domT) lemma normal_seq_domT_if: "[| normal Ts ; lengtht s <= n ; s :t Ts n |] ==> s :t Ts (lengtht s)" by (simp add: normal_seq_domT) (*** LimitTset_def in domT ***) lemma LimitTset_in[simp]: "normal (Ts::'a domT infinite_seq) ==> LimitTset Ts : domT" apply (simp add: domT_def HC_T1_def) apply (rule conjI) apply (simp add: LimitTset_def) apply (rule_tac x="[]t" in exI) apply (simp) apply (simp add: prefix_closed_def LimitTset_def) apply (intro allI impI) apply (elim conjE exE) apply (subgoal_tac "lengtht s <= lengtht t") apply (rule normal_seq_domT_if) apply (simp_all) apply (rule memT_prefix_closed, simp_all) apply (rule length_of_prefix) apply (simp_all add: not_None_T) done (*** :t LimitT ***) lemma LimitT_memT: "normal (Ts::'a domT infinite_seq) ==> (s :t LimitT Ts) = (s :t Ts (lengtht s))" apply (simp add: memT_def) apply (simp add: LimitT_def) apply (simp add: Abs_domT_inverse) apply (simp add: LimitTset_def memT_def) done (*** LimitT lemma ***) lemma LimitT_Limit_lm: "normal (Ts::'a domT infinite_seq) ==> (ALL n. (LimitT Ts) rest n = (Ts n) rest n)" apply (intro allI) apply (simp add: restT_eq_iff) apply (simp add: LimitT_memT) by (auto simp add: normal_seq_domT) (*** (normal) Ts converges to (LimitT Ts) ***) lemma LimitT_Limit: "normal (Ts::'a domT infinite_seq) ==> Ts convergeTo (LimitT Ts)" by (simp add: LimitT_Limit_lm rest_Limit) (*** (cauchy) Ts converges to (LimitT NF Ts) ***) lemma cauchy_LimitT_Limit: "cauchy (Ts::'a domT infinite_seq) ==> Ts convergeTo (LimitT (NF Ts))" apply (simp add: normal_form_seq_same_Limit) apply (simp add: LimitT_Limit normal_form_seq_normal) done (*************************************** Dom_T --> Complete Metric Space ***************************************) lemma domT_cms: "cauchy (Ts::'a domT infinite_seq) ==> (EX T. Ts convergeTo T)" apply (rule_tac x="LimitT (NF Ts)" in exI) by (simp add: cauchy_LimitT_Limit) (************************************************************ domT ==> CMS and RS ************************************************************) instance domT :: (type) cms apply (intro_classes) by (simp add: domT_cms) instance domT :: (type) cms_rs by (intro_classes) (*** (normal) Limit Ts = LimitT Ts ***) lemma LimitT_Limit_eq: "normal (Ts::'a domT infinite_seq) ==> Limit Ts = LimitT Ts" apply (insert unique_convergence[of Ts "Limit Ts" "LimitT Ts"]) by (simp add: LimitT_Limit Limit_is normal_cauchy) (*----------------------------------------------------------* | | | Fixed point induction for refinement | | | *----------------------------------------------------------*) consts RefT :: "'a domT => 'a domT => bool" RevT :: "'a domT => 'a domT => bool" defs RefT_def : "RefT S == (%T. (S <= T))" RevT_def : "RevT S == (%T. (T <= S))" (************************************************************ continuity lemma for refinement ************************************************************) lemma continuous_rs_RefT: "continuous_rs (RefT S)" apply (simp add: continuous_rs_def) apply (intro allI impI) apply (simp add: RefT_def) apply (simp add: subsetT_iff) apply (elim conjE exE) apply (rename_tac T t) apply (rule_tac x="lengtht t" in exI) apply (intro allI impI) apply (rule_tac x="t" in exI) apply (simp add: restT_eq_iff) apply (drule_tac x="t" in spec) by (simp) (************************************************************ continuity lemma for (Reverse) refinement ************************************************************) lemma continuous_rs_RevT: "continuous_rs (RevT S)" apply (simp add: continuous_rs_def) apply (intro allI impI) apply (simp add: RevT_def) apply (simp add: subsetT_iff) apply (elim conjE exE) apply (rename_tac T t) apply (rule_tac x="lengtht t" in exI) apply (intro allI impI) apply (rule_tac x="t" in exI) apply (simp add: restT_eq_iff) apply (drule_tac x="t" in spec) by (simp) (****************** to add them again ******************) declare Union_image_eq [simp] declare Inter_image_eq [simp] declare not_None_eq [simp] end
lemma restTset_in:
T restTset n ∈ domT
lemmas restTset_def_in:
{s. s ∈ Rep_domT T ∧ lengtht s ≤ n} ∈ domT
lemma restT_iff:
T rest n = {s. s :t T ∧ lengtht s ≤ n}t
lemma in_restT:
(s :t T rest n) = (s :t T ∧ lengtht s ≤ n)
lemma restT_eq_iff:
(T rest n = S rest m) = (∀s. (s :t T ∧ lengtht s ≤ n) = (s :t S ∧ lengtht s ≤ m))
lemma zero_domT:
T restTset 0 = {[]t}
lemma zero_eq_rs_domT:
T rest 0 = S rest 0
lemma min_rs_domT:
T rest m rest n = T rest min m n
lemma contra_diff_rs_domT:
∀n. T rest n = S rest n ==> T = S
lemma diff_rs_domT:
T ≠ S ==> ∃n. T rest n ≠ S rest n
lemma normal_seq_domT:
[| normal Ts; lengtht s ≤ n |] ==> (s :t Ts (lengtht s)) = (s :t Ts n)
lemma normal_seq_domT_only_if:
[| normal Ts; lengtht s ≤ n; s :t Ts (lengtht s) |] ==> s :t Ts n
lemma normal_seq_domT_if:
[| normal Ts; lengtht s ≤ n; s :t Ts n |] ==> s :t Ts (lengtht s)
lemma LimitTset_in:
normal Ts ==> LimitTset Ts ∈ domT
lemma LimitT_memT:
normal Ts ==> (s :t LimitT Ts) = (s :t Ts (lengtht s))
lemma LimitT_Limit_lm:
normal Ts ==> ∀n. LimitT Ts rest n = Ts n rest n
lemma LimitT_Limit:
normal Ts ==> Ts convergeTo LimitT Ts
lemma cauchy_LimitT_Limit:
cauchy Ts ==> Ts convergeTo LimitT (NF Ts)
lemma domT_cms:
cauchy Ts ==> ∃T. Ts convergeTo T
lemma LimitT_Limit_eq:
normal Ts ==> Limit Ts = LimitT Ts
lemma continuous_rs_RefT:
continuous_rs (RefT S)
lemma continuous_rs_RevT:
continuous_rs (RevT S)