# HG changeset patch # User huffman # Date 1272521311 25200 # Node ID 5610eb0b03b26c11e435b5563a5bdd41daecae9f # Parent 8175a688c5e3bd2ba7eb28329934f5660fd62477 generalize LIMSEQ_vector to tendsto_vector diff -r 8175a688c5e3 -r 5610eb0b03b2 src/HOL/Multivariate_Analysis/Euclidean_Space.thy --- a/src/HOL/Multivariate_Analysis/Euclidean_Space.thy Wed Apr 28 22:36:45 2010 -0700 +++ b/src/HOL/Multivariate_Analysis/Euclidean_Space.thy Wed Apr 28 23:08:31 2010 -0700 @@ -351,6 +351,38 @@ by simp qed +lemma eventually_Ball_finite: (* TODO: move *) + assumes "finite A" and "\y\A. eventually (\x. P x y) net" + shows "eventually (\x. \y\A. P x y) net" +using assms by (induct set: finite, simp, simp add: eventually_conj) + +lemma eventually_all_finite: (* TODO: move *) + fixes P :: "'a \ 'b::finite \ bool" + assumes "\y. eventually (\x. P x y) net" + shows "eventually (\x. \y. P x y) net" +using eventually_Ball_finite [of UNIV P] assms by simp + +lemma tendsto_vector: + assumes "\i. ((\x. f x $ i) ---> a $ i) net" + shows "((\x. f x) ---> a) net" +proof (rule topological_tendstoI) + fix S assume "open S" and "a \ S" + then obtain A where A: "\i. open (A i)" "\i. a $ i \ A i" + and S: "\y. \i. y $ i \ A i \ y \ S" + unfolding open_vector_def by metis + have "\i. eventually (\x. f x $ i \ A i) net" + using assms A by (rule topological_tendstoD) + hence "eventually (\x. \i. f x $ i \ A i) net" + by (rule eventually_all_finite) + thus "eventually (\x. f x \ S) net" + by (rule eventually_elim1, simp add: S) +qed + +lemma tendsto_Cart_lambda [tendsto_intros]: + assumes "\i. ((\x. f x i) ---> a i) net" + shows "((\x. \ i. f x i) ---> (\ i. a i)) net" +using assms by (simp add: tendsto_vector) + subsection {* Metric *} (* TODO: move somewhere else *) @@ -438,37 +470,9 @@ unfolding Cauchy_def by (fast intro: le_less_trans [OF dist_nth_le]) lemma LIMSEQ_vector: - fixes X :: "nat \ 'a::metric_space ^ 'n" - assumes X: "\i. (\n. X n $ i) ----> (a $ i)" + assumes "\i. (\n. X n $ i) ----> (a $ i)" shows "X ----> a" -proof (rule metric_LIMSEQ_I) - fix r :: real assume "0 < r" - then have "0 < r / of_nat CARD('n)" (is "0 < ?s") - by (simp add: divide_pos_pos) - def N \ "\i. LEAST N. \n\N. dist (X n $ i) (a $ i) < ?s" - def M \ "Max (range N)" - have "\i. \N. \n\N. dist (X n $ i) (a $ i) < ?s" - using X `0 < ?s` by (rule metric_LIMSEQ_D) - hence "\i. \n\N i. dist (X n $ i) (a $ i) < ?s" - unfolding N_def by (rule LeastI_ex) - hence M: "\i. \n\M. dist (X n $ i) (a $ i) < ?s" - unfolding M_def by simp - { - fix n :: nat assume "M \ n" - have "dist (X n) a = setL2 (\i. dist (X n $ i) (a $ i)) UNIV" - unfolding dist_vector_def .. - also have "\ \ setsum (\i. dist (X n $ i) (a $ i)) UNIV" - by (rule setL2_le_setsum [OF zero_le_dist]) - also have "\ < setsum (\i::'n. ?s) UNIV" - by (rule setsum_strict_mono, simp_all add: M `M \ n`) - also have "\ = r" - by simp - finally have "dist (X n) a < r" . - } - hence "\n\M. dist (X n) a < r" - by simp - then show "\M. \n\M. dist (X n) a < r" .. -qed +using assms unfolding LIMSEQ_conv_tendsto by (rule tendsto_vector) lemma Cauchy_vector: fixes X :: "nat \ 'a::metric_space ^ 'n"