43 end |
43 end |
44 |
44 |
45 lemma compactE': |
45 lemma compactE': |
46 fixes S :: "'a :: metric_space set" |
46 fixes S :: "'a :: metric_space set" |
47 assumes "compact S" "\<forall>n\<ge>m. f n \<in> S" |
47 assumes "compact S" "\<forall>n\<ge>m. f n \<in> S" |
48 obtains l r where "l \<in> S" "subseq r" "((f \<circ> r) \<longlongrightarrow> l) sequentially" |
48 obtains l r where "l \<in> S" "strict_mono (r::nat\<Rightarrow>nat)" "((f \<circ> r) \<longlongrightarrow> l) sequentially" |
49 proof atomize_elim |
49 proof atomize_elim |
50 have "subseq (op + m)" by (simp add: subseq_def) |
50 have "strict_mono (op + m)" by (simp add: strict_mono_def) |
51 have "\<forall>n. (f o (\<lambda>i. m + i)) n \<in> S" using assms by auto |
51 have "\<forall>n. (f o (\<lambda>i. m + i)) n \<in> S" using assms by auto |
52 from seq_compactE[OF \<open>compact S\<close>[unfolded compact_eq_seq_compact_metric] this] guess l r . |
52 from seq_compactE[OF \<open>compact S\<close>[unfolded compact_eq_seq_compact_metric] this] guess l r . |
53 hence "l \<in> S" "subseq ((\<lambda>i. m + i) o r) \<and> (f \<circ> ((\<lambda>i. m + i) o r)) \<longlonglongrightarrow> l" |
53 hence "l \<in> S" "strict_mono ((\<lambda>i. m + i) o r) \<and> (f \<circ> ((\<lambda>i. m + i) o r)) \<longlonglongrightarrow> l" |
54 using subseq_o[OF \<open>subseq (op + m)\<close> \<open>subseq r\<close>] by (auto simp: o_def) |
54 using strict_mono_o[OF \<open>strict_mono (op + m)\<close> \<open>strict_mono r\<close>] by (auto simp: o_def) |
55 thus "\<exists>l r. l \<in> S \<and> subseq r \<and> (f \<circ> r) \<longlonglongrightarrow> l" by blast |
55 thus "\<exists>l r. l \<in> S \<and> strict_mono r \<and> (f \<circ> r) \<longlonglongrightarrow> l" by blast |
56 qed |
56 qed |
57 |
57 |
58 sublocale finmap_seqs_into_compact \<subseteq> subseqs "\<lambda>n s. (\<exists>l. (\<lambda>i. ((f o s) i)\<^sub>F n) \<longlonglongrightarrow> l)" |
58 sublocale finmap_seqs_into_compact \<subseteq> subseqs "\<lambda>n s. (\<exists>l. (\<lambda>i. ((f o s) i)\<^sub>F n) \<longlonglongrightarrow> l)" |
59 proof |
59 proof |
60 fix n s |
60 fix n and s :: "nat \<Rightarrow> nat" |
61 assume "subseq s" |
61 assume "strict_mono s" |
62 from proj_in_KE[of n] guess n0 . note n0 = this |
62 from proj_in_KE[of n] guess n0 . note n0 = this |
63 have "\<forall>i \<ge> n0. ((f \<circ> s) i)\<^sub>F n \<in> (\<lambda>k. (k)\<^sub>F n) ` K n0" |
63 have "\<forall>i \<ge> n0. ((f \<circ> s) i)\<^sub>F n \<in> (\<lambda>k. (k)\<^sub>F n) ` K n0" |
64 proof safe |
64 proof safe |
65 fix i assume "n0 \<le> i" |
65 fix i assume "n0 \<le> i" |
66 also have "\<dots> \<le> s i" by (rule seq_suble) fact |
66 also have "\<dots> \<le> s i" by (rule seq_suble) fact |
67 finally have "n0 \<le> s i" . |
67 finally have "n0 \<le> s i" . |
68 with n0 show "((f \<circ> s) i)\<^sub>F n \<in> (\<lambda>k. (k)\<^sub>F n) ` K n0 " |
68 with n0 show "((f \<circ> s) i)\<^sub>F n \<in> (\<lambda>k. (k)\<^sub>F n) ` K n0 " |
69 by auto |
69 by auto |
70 qed |
70 qed |
71 from compactE'[OF compact_projset this] guess ls rs . |
71 from compactE'[OF compact_projset this] guess ls rs . |
72 thus "\<exists>r'. subseq r' \<and> (\<exists>l. (\<lambda>i. ((f \<circ> (s \<circ> r')) i)\<^sub>F n) \<longlonglongrightarrow> l)" by (auto simp: o_def) |
72 thus "\<exists>r'. strict_mono r' \<and> (\<exists>l. (\<lambda>i. ((f \<circ> (s \<circ> r')) i)\<^sub>F n) \<longlonglongrightarrow> l)" by (auto simp: o_def) |
73 qed |
73 qed |
74 |
74 |
75 lemma (in finmap_seqs_into_compact) diagonal_tendsto: "\<exists>l. (\<lambda>i. (f (diagseq i))\<^sub>F n) \<longlonglongrightarrow> l" |
75 lemma (in finmap_seqs_into_compact) diagonal_tendsto: "\<exists>l. (\<lambda>i. (f (diagseq i))\<^sub>F n) \<longlonglongrightarrow> l" |
76 proof - |
76 proof - |
77 obtain l where "(\<lambda>i. ((f o (diagseq o op + (Suc n))) i)\<^sub>F n) \<longlonglongrightarrow> l" |
77 obtain l where "(\<lambda>i. ((f o (diagseq o op + (Suc n))) i)\<^sub>F n) \<longlonglongrightarrow> l" |
78 proof (atomize_elim, rule diagseq_holds) |
78 proof (atomize_elim, rule diagseq_holds) |
79 fix r s n |
79 fix r s n |
80 assume "subseq r" |
80 assume "strict_mono (r :: nat \<Rightarrow> nat)" |
81 assume "\<exists>l. (\<lambda>i. ((f \<circ> s) i)\<^sub>F n) \<longlonglongrightarrow> l" |
81 assume "\<exists>l. (\<lambda>i. ((f \<circ> s) i)\<^sub>F n) \<longlonglongrightarrow> l" |
82 then obtain l where "((\<lambda>i. (f i)\<^sub>F n) o s) \<longlonglongrightarrow> l" |
82 then obtain l where "((\<lambda>i. (f i)\<^sub>F n) o s) \<longlonglongrightarrow> l" |
83 by (auto simp: o_def) |
83 by (auto simp: o_def) |
84 hence "((\<lambda>i. (f i)\<^sub>F n) o s o r) \<longlonglongrightarrow> l" using \<open>subseq r\<close> |
84 hence "((\<lambda>i. (f i)\<^sub>F n) o s o r) \<longlonglongrightarrow> l" using \<open>strict_mono r\<close> |
85 by (rule LIMSEQ_subseq_LIMSEQ) |
85 by (rule LIMSEQ_subseq_LIMSEQ) |
86 thus "\<exists>l. (\<lambda>i. ((f \<circ> (s \<circ> r)) i)\<^sub>F n) \<longlonglongrightarrow> l" by (auto simp add: o_def) |
86 thus "\<exists>l. (\<lambda>i. ((f \<circ> (s \<circ> r)) i)\<^sub>F n) \<longlonglongrightarrow> l" by (auto simp add: o_def) |
87 qed |
87 qed |
88 hence "(\<lambda>i. ((f (diagseq (i + Suc n))))\<^sub>F n) \<longlonglongrightarrow> l" by (simp add: ac_simps) |
88 hence "(\<lambda>i. ((f (diagseq (i + Suc n))))\<^sub>F n) \<longlonglongrightarrow> l" by (simp add: ac_simps) |
89 hence "(\<lambda>i. (f (diagseq i))\<^sub>F n) \<longlonglongrightarrow> l" by (rule LIMSEQ_offset) |
89 hence "(\<lambda>i. (f (diagseq i))\<^sub>F n) \<longlonglongrightarrow> l" by (rule LIMSEQ_offset) |
404 by (simp add: tendsto_intros) |
404 by (simp add: tendsto_intros) |
405 } ultimately |
405 } ultimately |
406 have "(\<lambda>i. fm n (y (Suc (diagseq i)))) \<longlonglongrightarrow> finmap_of (Utn ` J n) z" |
406 have "(\<lambda>i. fm n (y (Suc (diagseq i)))) \<longlonglongrightarrow> finmap_of (Utn ` J n) z" |
407 by (rule tendsto_finmap) |
407 by (rule tendsto_finmap) |
408 hence "((\<lambda>i. fm n (y (Suc (diagseq i)))) o (\<lambda>i. i + n)) \<longlonglongrightarrow> finmap_of (Utn ` J n) z" |
408 hence "((\<lambda>i. fm n (y (Suc (diagseq i)))) o (\<lambda>i. i + n)) \<longlonglongrightarrow> finmap_of (Utn ` J n) z" |
409 by (rule LIMSEQ_subseq_LIMSEQ) (simp add: subseq_def) |
409 by (rule LIMSEQ_subseq_LIMSEQ) (simp add: strict_mono_def) |
410 moreover |
410 moreover |
411 have "(\<forall>i. ((\<lambda>i. fm n (y (Suc (diagseq i)))) o (\<lambda>i. i + n)) i \<in> K' n)" |
411 have "(\<forall>i. ((\<lambda>i. fm n (y (Suc (diagseq i)))) o (\<lambda>i. i + n)) i \<in> K' n)" |
412 apply (auto simp add: o_def intro!: fm_in_K' \<open>1 \<le> n\<close> le_SucI) |
412 apply (auto simp add: o_def intro!: fm_in_K' \<open>1 \<le> n\<close> le_SucI) |
413 apply (rule le_trans) |
413 apply (rule le_trans) |
414 apply (rule le_add2) |
414 apply (rule le_add2) |