| author | wenzelm | 
| Sun, 12 Jan 2025 13:27:47 +0100 | |
| changeset 81776 | c6d8db03dfdc | 
| parent 78698 | 1b9388e6eb75 | 
| child 82349 | a854ca7ca7d9 | 
| permissions | -rw-r--r-- | 
| 63627 | 1 | (* Title: HOL/Analysis/Uniform_Limit.thy | 
| 60812 | 2 | Author: Christoph Traut, TU München | 
| 3 | Author: Fabian Immler, TU München | |
| 4 | *) | |
| 5 | ||
| 6 | section \<open>Uniform Limit and Uniform Convergence\<close> | |
| 7 | ||
| 8 | theory Uniform_Limit | |
| 77434 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 9 | imports Connected Summation_Tests Infinite_Sum | 
| 60812 | 10 | begin | 
| 11 | ||
| 68838 | 12 | |
| 13 | subsection \<open>Definition\<close> | |
| 14 | ||
| 70136 | 15 | definition\<^marker>\<open>tag important\<close> uniformly_on :: "'a set \<Rightarrow> ('a \<Rightarrow> 'b::metric_space) \<Rightarrow> ('a \<Rightarrow> 'b) filter"
 | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
68838diff
changeset | 16 |   where "uniformly_on S l = (INF e\<in>{0 <..}. principal {f. \<forall>x\<in>S. dist (f x) (l x) < e})"
 | 
| 60812 | 17 | |
| 70136 | 18 | abbreviation\<^marker>\<open>tag important\<close> | 
| 60812 | 19 | "uniform_limit S f l \<equiv> filterlim f (uniformly_on S l)" | 
| 20 | ||
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 21 | definition uniformly_convergent_on where | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 22 | "uniformly_convergent_on X f \<longleftrightarrow> (\<exists>l. uniform_limit X f l sequentially)" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 23 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 24 | definition uniformly_Cauchy_on where | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 25 | "uniformly_Cauchy_on X f \<longleftrightarrow> (\<forall>e>0. \<exists>M. \<forall>x\<in>X. \<forall>(m::nat)\<ge>M. \<forall>n\<ge>M. dist (f m x) (f n x) < e)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 26 | |
| 68838 | 27 | proposition uniform_limit_iff: | 
| 60812 | 28 | "uniform_limit S f l F \<longleftrightarrow> (\<forall>e>0. \<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < e)" | 
| 29 | unfolding filterlim_iff uniformly_on_def | |
| 30 | by (subst eventually_INF_base) | |
| 31 | (fastforce | |
| 32 | simp: eventually_principal uniformly_on_def | |
| 33 | intro: bexI[where x="min a b" for a b] | |
| 61810 | 34 | elim: eventually_mono)+ | 
| 60812 | 35 | |
| 36 | lemma uniform_limitD: | |
| 37 | "uniform_limit S f l F \<Longrightarrow> e > 0 \<Longrightarrow> \<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < e" | |
| 38 | by (simp add: uniform_limit_iff) | |
| 39 | ||
| 40 | lemma uniform_limitI: | |
| 41 | "(\<And>e. e > 0 \<Longrightarrow> \<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < e) \<Longrightarrow> uniform_limit S f l F" | |
| 42 | by (simp add: uniform_limit_iff) | |
| 43 | ||
| 44 | lemma uniform_limit_sequentially_iff: | |
| 45 | "uniform_limit S f l sequentially \<longleftrightarrow> (\<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> S. dist (f n x) (l x) < e)" | |
| 46 | unfolding uniform_limit_iff eventually_sequentially .. | |
| 47 | ||
| 48 | lemma uniform_limit_at_iff: | |
| 49 | "uniform_limit S f l (at x) \<longleftrightarrow> | |
| 50 | (\<forall>e>0. \<exists>d>0. \<forall>z. 0 < dist z x \<and> dist z x < d \<longrightarrow> (\<forall>x\<in>S. dist (f z x) (l x) < e))" | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 51 | unfolding uniform_limit_iff eventually_at by simp | 
| 60812 | 52 | |
| 53 | lemma uniform_limit_at_le_iff: | |
| 54 | "uniform_limit S f l (at x) \<longleftrightarrow> | |
| 55 | (\<forall>e>0. \<exists>d>0. \<forall>z. 0 < dist z x \<and> dist z x < d \<longrightarrow> (\<forall>x\<in>S. dist (f z x) (l x) \<le> e))" | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 56 | unfolding uniform_limit_iff eventually_at | 
| 60812 | 57 | by (fastforce dest: spec[where x = "e / 2" for e]) | 
| 58 | ||
| 78698 | 59 | lemma uniform_limit_compose: | 
| 60 | assumes ul: "uniform_limit X g l F" | |
| 61 | and cont: "uniformly_continuous_on U f" | |
| 62 | and g: "\<forall>\<^sub>F n in F. g n ` X \<subseteq> U" and l: "l ` X \<subseteq> U" | |
| 63 | shows "uniform_limit X (\<lambda>a b. f (g a b)) (f \<circ> l) F" | |
| 64 | proof (rule uniform_limitI) | |
| 65 | fix \<epsilon>::real | |
| 66 | assume "0 < \<epsilon>" | |
| 67 | then obtain \<delta> where "\<delta> > 0" and \<delta>: "\<And>u v. \<lbrakk>u\<in>U; v\<in>U; dist u v < \<delta>\<rbrakk> \<Longrightarrow> dist (f u) (f v) < \<epsilon>" | |
| 68 | by (metis cont uniformly_continuous_on_def) | |
| 69 | show "\<forall>\<^sub>F n in F. \<forall>x\<in>X. dist (f (g n x)) ((f \<circ> l) x) < \<epsilon>" | |
| 70 | using uniform_limitD [OF ul \<open>\<delta>>0\<close>] g unfolding o_def | |
| 71 | by eventually_elim (use \<delta> l in blast) | |
| 72 | qed | |
| 73 | ||
| 62949 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 74 | lemma metric_uniform_limit_imp_uniform_limit: | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 75 | assumes f: "uniform_limit S f a F" | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 76 | assumes le: "eventually (\<lambda>x. \<forall>y\<in>S. dist (g x y) (b y) \<le> dist (f x y) (a y)) F" | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 77 | shows "uniform_limit S g b F" | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 78 | proof (rule uniform_limitI) | 
| 78698 | 79 | fix e :: real | 
| 80 | assume "0 < e" | |
| 62949 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 81 | from uniform_limitD[OF f this] le | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 82 | show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (g x y) (b y) < e" | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 83 | by eventually_elim force | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 84 | qed | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 85 | |
| 68838 | 86 | |
| 87 | subsection \<open>Exchange limits\<close> | |
| 88 | ||
| 89 | proposition swap_uniform_limit: | |
| 61973 | 90 | assumes f: "\<forall>\<^sub>F n in F. (f n \<longlongrightarrow> g n) (at x within S)" | 
| 91 | assumes g: "(g \<longlongrightarrow> l) F" | |
| 60812 | 92 | assumes uc: "uniform_limit S f h F" | 
| 93 | assumes "\<not>trivial_limit F" | |
| 61973 | 94 | shows "(h \<longlongrightarrow> l) (at x within S)" | 
| 60812 | 95 | proof (rule tendstoI) | 
| 96 | fix e :: real | |
| 63040 | 97 | define e' where "e' = e/3" | 
| 60812 | 98 | assume "0 < e" | 
| 99 | then have "0 < e'" by (simp add: e'_def) | |
| 61222 | 100 | from uniform_limitD[OF uc \<open>0 < e'\<close>] | 
| 60812 | 101 | have "\<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (h x) (f n x) < e'" | 
| 102 | by (simp add: dist_commute) | |
| 103 | moreover | |
| 104 | from f | |
| 105 | have "\<forall>\<^sub>F n in F. \<forall>\<^sub>F x in at x within S. dist (g n) (f n x) < e'" | |
| 61222 | 106 | by eventually_elim (auto dest!: tendstoD[OF _ \<open>0 < e'\<close>] simp: dist_commute) | 
| 60812 | 107 | moreover | 
| 61222 | 108 | from tendstoD[OF g \<open>0 < e'\<close>] have "\<forall>\<^sub>F x in F. dist l (g x) < e'" | 
| 60812 | 109 | by (simp add: dist_commute) | 
| 110 | ultimately | |
| 111 | have "\<forall>\<^sub>F _ in F. \<forall>\<^sub>F x in at x within S. dist (h x) l < e" | |
| 112 | proof eventually_elim | |
| 113 | case (elim n) | |
| 114 | note fh = elim(1) | |
| 115 | note gl = elim(3) | |
| 116 | have "\<forall>\<^sub>F x in at x within S. x \<in> S" | |
| 117 | by (auto simp: eventually_at_filter) | |
| 118 | with elim(2) | |
| 119 | show ?case | |
| 120 | proof eventually_elim | |
| 121 | case (elim x) | |
| 61222 | 122 | from fh[rule_format, OF \<open>x \<in> S\<close>] elim(1) | 
| 60812 | 123 | have "dist (h x) (g n) < e' + e'" | 
| 124 | by (rule dist_triangle_lt[OF add_strict_mono]) | |
| 125 | from dist_triangle_lt[OF add_strict_mono, OF this gl] | |
| 126 | show ?case by (simp add: e'_def) | |
| 127 | qed | |
| 128 | qed | |
| 129 | thus "\<forall>\<^sub>F x in at x within S. dist (h x) l < e" | |
| 61222 | 130 | using eventually_happens by (metis \<open>\<not>trivial_limit F\<close>) | 
| 60812 | 131 | qed | 
| 132 | ||
| 68838 | 133 | |
| 134 | subsection \<open>Uniform limit theorem\<close> | |
| 135 | ||
| 67371 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 136 | lemma tendsto_uniform_limitI: | 
| 60812 | 137 | assumes "uniform_limit S f l F" | 
| 138 | assumes "x \<in> S" | |
| 61973 | 139 | shows "((\<lambda>y. f y x) \<longlongrightarrow> l x) F" | 
| 60812 | 140 | using assms | 
| 61810 | 141 | by (auto intro!: tendstoI simp: eventually_mono dest!: uniform_limitD) | 
| 60812 | 142 | |
| 68838 | 143 | theorem uniform_limit_theorem: | 
| 60812 | 144 | assumes c: "\<forall>\<^sub>F n in F. continuous_on A (f n)" | 
| 145 | assumes ul: "uniform_limit A f l F" | |
| 146 | assumes "\<not> trivial_limit F" | |
| 147 | shows "continuous_on A l" | |
| 148 | unfolding continuous_on_def | |
| 149 | proof safe | |
| 150 | fix x assume "x \<in> A" | |
| 61973 | 151 | then have "\<forall>\<^sub>F n in F. (f n \<longlongrightarrow> f n x) (at x within A)" "((\<lambda>n. f n x) \<longlongrightarrow> l x) F" | 
| 60812 | 152 | using c ul | 
| 61810 | 153 | by (auto simp: continuous_on_def eventually_mono tendsto_uniform_limitI) | 
| 61973 | 154 | then show "(l \<longlongrightarrow> l x) (at x within A)" | 
| 60812 | 155 | by (rule swap_uniform_limit) fact+ | 
| 156 | qed | |
| 157 | ||
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 158 | lemma uniformly_Cauchy_onI: | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 159 | assumes "\<And>e. e > 0 \<Longrightarrow> \<exists>M. \<forall>x\<in>X. \<forall>m\<ge>M. \<forall>n\<ge>M. dist (f m x) (f n x) < e" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 160 | shows "uniformly_Cauchy_on X f" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 161 | using assms unfolding uniformly_Cauchy_on_def by blast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 162 | |
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 163 | lemma uniformly_Cauchy_onI': | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 164 | assumes "\<And>e. e > 0 \<Longrightarrow> \<exists>M. \<forall>x\<in>X. \<forall>m\<ge>M. \<forall>n>m. dist (f m x) (f n x) < e" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 165 | shows "uniformly_Cauchy_on X f" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 166 | proof (rule uniformly_Cauchy_onI) | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 167 | fix e :: real assume e: "e > 0" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 168 | from assms[OF this] obtain M | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 169 | where M: "\<And>x m n. x \<in> X \<Longrightarrow> m \<ge> M \<Longrightarrow> n > m \<Longrightarrow> dist (f m x) (f n x) < e" by fast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 170 |   {
 | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 171 | fix x m n assume x: "x \<in> X" and m: "m \<ge> M" and n: "n \<ge> M" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 172 | with M[OF this(1,2), of n] M[OF this(1,3), of m] e have "dist (f m x) (f n x) < e" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 173 | by (cases m n rule: linorder_cases) (simp_all add: dist_commute) | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 174 | } | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 175 | thus "\<exists>M. \<forall>x\<in>X. \<forall>m\<ge>M. \<forall>n\<ge>M. dist (f m x) (f n x) < e" by fast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 176 | qed | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 177 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 178 | lemma uniformly_Cauchy_imp_Cauchy: | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 179 | "uniformly_Cauchy_on X f \<Longrightarrow> x \<in> X \<Longrightarrow> Cauchy (\<lambda>n. f n x)" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 180 | unfolding Cauchy_def uniformly_Cauchy_on_def by fast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 181 | |
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 182 | lemma uniform_limit_cong: | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 183 |   fixes f g :: "'a \<Rightarrow> 'b \<Rightarrow> ('c :: metric_space)" and h i :: "'b \<Rightarrow> 'c"
 | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 184 | assumes "eventually (\<lambda>y. \<forall>x\<in>X. f y x = g y x) F" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 185 | assumes "\<And>x. x \<in> X \<Longrightarrow> h x = i x" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 186 | shows "uniform_limit X f h F \<longleftrightarrow> uniform_limit X g i F" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 187 | proof - | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 188 |   {
 | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 189 | fix f g :: "'a \<Rightarrow> 'b \<Rightarrow> 'c" and h i :: "'b \<Rightarrow> 'c" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 190 | assume C: "uniform_limit X f h F" and A: "eventually (\<lambda>y. \<forall>x\<in>X. f y x = g y x) F" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 191 | and B: "\<And>x. x \<in> X \<Longrightarrow> h x = i x" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 192 |     {
 | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 193 | fix e ::real assume "e > 0" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 194 | with C have "eventually (\<lambda>y. \<forall>x\<in>X. dist (f y x) (h x) < e) F" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 195 | unfolding uniform_limit_iff by blast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 196 | with A have "eventually (\<lambda>y. \<forall>x\<in>X. dist (g y x) (i x) < e) F" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 197 | by eventually_elim (insert B, simp_all) | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 198 | } | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 199 | hence "uniform_limit X g i F" unfolding uniform_limit_iff by blast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 200 | } note A = this | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 201 | show ?thesis by (rule iffI) (erule A; insert assms; simp add: eq_commute)+ | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 202 | qed | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 203 | |
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 204 | lemma uniform_limit_cong': | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 205 |   fixes f g :: "'a \<Rightarrow> 'b \<Rightarrow> ('c :: metric_space)" and h i :: "'b \<Rightarrow> 'c"
 | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 206 | assumes "\<And>y x. x \<in> X \<Longrightarrow> f y x = g y x" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 207 | assumes "\<And>x. x \<in> X \<Longrightarrow> h x = i x" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 208 | shows "uniform_limit X f h F \<longleftrightarrow> uniform_limit X g i F" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 209 | using assms by (intro uniform_limit_cong always_eventually) blast+ | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 210 | |
| 67371 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 211 | lemma uniformly_convergent_cong: | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 212 | assumes "eventually (\<lambda>x. \<forall>y\<in>A. f x y = g x y) sequentially" "A = B" | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 213 | shows "uniformly_convergent_on A f \<longleftrightarrow> uniformly_convergent_on B g" | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 214 | unfolding uniformly_convergent_on_def assms(2) [symmetric] | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 215 | by (intro iff_exI uniform_limit_cong eventually_mono [OF assms(1)]) auto | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 216 | |
| 76722 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 217 | lemma uniformly_convergent_on_compose: | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 218 | assumes "uniformly_convergent_on A f" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 219 | assumes "filterlim g sequentially sequentially" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 220 | shows "uniformly_convergent_on A (\<lambda>n. f (g n))" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 221 | proof - | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 222 | from assms(1) obtain f' where "uniform_limit A f f' sequentially" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 223 | by (auto simp: uniformly_convergent_on_def) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 224 | hence "uniform_limit A (\<lambda>n. f (g n)) f' sequentially" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 225 | by (rule filterlim_compose) fact | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 226 | thus ?thesis | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 227 | by (auto simp: uniformly_convergent_on_def) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 228 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 229 | |
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 230 | lemma uniformly_convergent_uniform_limit_iff: | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 231 | "uniformly_convergent_on X f \<longleftrightarrow> uniform_limit X f (\<lambda>x. lim (\<lambda>n. f n x)) sequentially" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 232 | proof | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 233 | assume "uniformly_convergent_on X f" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 234 | then obtain l where l: "uniform_limit X f l sequentially" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 235 | unfolding uniformly_convergent_on_def by blast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 236 | from l have "uniform_limit X f (\<lambda>x. lim (\<lambda>n. f n x)) sequentially \<longleftrightarrow> | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 237 | uniform_limit X f l sequentially" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 238 | by (intro uniform_limit_cong' limI tendsto_uniform_limitI[of f X l]) simp_all | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 239 | also note l | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 240 | finally show "uniform_limit X f (\<lambda>x. lim (\<lambda>n. f n x)) sequentially" . | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 241 | qed (auto simp: uniformly_convergent_on_def) | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 242 | |
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 243 | lemma uniformly_convergentI: "uniform_limit X f l sequentially \<Longrightarrow> uniformly_convergent_on X f" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 244 | unfolding uniformly_convergent_on_def by blast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 245 | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 246 | lemma uniformly_convergent_on_empty [iff]: "uniformly_convergent_on {} f"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 247 | by (simp add: uniformly_convergent_on_def uniform_limit_sequentially_iff) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 248 | |
| 67371 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 249 | lemma uniformly_convergent_on_const [simp,intro]: | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 250 | "uniformly_convergent_on A (\<lambda>_. c)" | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 251 | by (auto simp: uniformly_convergent_on_def uniform_limit_iff intro!: exI[of _ c]) | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 252 | |
| 65204 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 253 | text\<open>Cauchy-type criteria for uniform convergence.\<close> | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 254 | |
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 255 | lemma Cauchy_uniformly_convergent: | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 256 | fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b :: complete_space" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 257 | assumes "uniformly_Cauchy_on X f" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 258 | shows "uniformly_convergent_on X f" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 259 | unfolding uniformly_convergent_uniform_limit_iff uniform_limit_iff | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 260 | proof safe | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 261 | let ?f = "\<lambda>x. lim (\<lambda>n. f n x)" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 262 | fix e :: real assume e: "e > 0" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 263 | hence "e/2 > 0" by simp | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 264 | with assms obtain N where N: "\<And>x m n. x \<in> X \<Longrightarrow> m \<ge> N \<Longrightarrow> n \<ge> N \<Longrightarrow> dist (f m x) (f n x) < e/2" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 265 | unfolding uniformly_Cauchy_on_def by fast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 266 | show "eventually (\<lambda>n. \<forall>x\<in>X. dist (f n x) (?f x) < e) sequentially" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 267 | using eventually_ge_at_top[of N] | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 268 | proof eventually_elim | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 269 | fix n assume n: "n \<ge> N" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 270 | show "\<forall>x\<in>X. dist (f n x) (?f x) < e" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 271 | proof | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 272 | fix x assume x: "x \<in> X" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 273 | with assms have "(\<lambda>n. f n x) \<longlonglongrightarrow> ?f x" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 274 | by (auto dest!: Cauchy_convergent uniformly_Cauchy_imp_Cauchy simp: convergent_LIMSEQ_iff) | 
| 61808 | 275 | with \<open>e/2 > 0\<close> have "eventually (\<lambda>m. m \<ge> N \<and> dist (f m x) (?f x) < e/2) sequentially" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 276 | by (intro tendstoD eventually_conj eventually_ge_at_top) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 277 | then obtain m where m: "m \<ge> N" "dist (f m x) (?f x) < e/2" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 278 | unfolding eventually_at_top_linorder by blast | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 279 | have "dist (f n x) (?f x) \<le> dist (f n x) (f m x) + dist (f m x) (?f x)" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 280 | by (rule dist_triangle) | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 281 | also from x n have "... < e/2 + e/2" by (intro add_strict_mono N m) | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 282 | finally show "dist (f n x) (?f x) < e" by simp | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 283 | qed | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 284 | qed | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 285 | qed | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 286 | |
| 65204 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 287 | lemma uniformly_convergent_Cauchy: | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 288 | assumes "uniformly_convergent_on X f" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 289 | shows "uniformly_Cauchy_on X f" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 290 | proof (rule uniformly_Cauchy_onI) | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 291 | fix e::real assume "e > 0" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 292 | then have "0 < e / 2" by simp | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 293 | with assms[unfolded uniformly_convergent_on_def uniform_limit_sequentially_iff] | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 294 | obtain l N where l:"x \<in> X \<Longrightarrow> n \<ge> N \<Longrightarrow> dist (f n x) (l x) < e / 2" for n x | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 295 | by metis | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 296 | from l l have "x \<in> X \<Longrightarrow> n \<ge> N \<Longrightarrow> m \<ge> N \<Longrightarrow> dist (f n x) (f m x) < e" for n m x | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 297 | by (rule dist_triangle_half_l) | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 298 | then show "\<exists>M. \<forall>x\<in>X. \<forall>m\<ge>M. \<forall>n\<ge>M. dist (f m x) (f n x) < e" by blast | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 299 | qed | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 300 | |
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 301 | lemma uniformly_convergent_eq_Cauchy: | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 302 | "uniformly_convergent_on X f = uniformly_Cauchy_on X f" for f::"nat \<Rightarrow> 'b \<Rightarrow> 'a::complete_space" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 303 | using Cauchy_uniformly_convergent uniformly_convergent_Cauchy by blast | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 304 | |
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 305 | lemma uniformly_convergent_eq_cauchy: | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 306 | fixes s::"nat \<Rightarrow> 'b \<Rightarrow> 'a::complete_space" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 307 | shows | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 308 | "(\<exists>l. \<forall>e>0. \<exists>N. \<forall>n x. N \<le> n \<and> P x \<longrightarrow> dist(s n x)(l x) < e) \<longleftrightarrow> | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 309 | (\<forall>e>0. \<exists>N. \<forall>m n x. N \<le> m \<and> N \<le> n \<and> P x \<longrightarrow> dist (s m x) (s n x) < e)" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 310 | proof - | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 311 | have *: "(\<forall>n\<ge>N. \<forall>x. Q x \<longrightarrow> R n x) \<longleftrightarrow> (\<forall>n x. N \<le> n \<and> Q x \<longrightarrow> R n x)" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 312 | "(\<forall>x. Q x \<longrightarrow> (\<forall>m\<ge>N. \<forall>n\<ge>N. S n m x)) \<longleftrightarrow> (\<forall>m n x. N \<le> m \<and> N \<le> n \<and> Q x \<longrightarrow> S n m x)" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 313 | for N::nat and Q::"'b \<Rightarrow> bool" and R S | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 314 | by blast+ | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 315 | show ?thesis | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 316 | using uniformly_convergent_eq_Cauchy[of "Collect P" s] | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 317 | unfolding uniformly_convergent_on_def uniformly_Cauchy_on_def uniform_limit_sequentially_iff | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 318 | by (simp add: *) | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 319 | qed | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 320 | |
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 321 | lemma uniformly_cauchy_imp_uniformly_convergent: | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 322 | fixes s :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::complete_space" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 323 | assumes "\<forall>e>0.\<exists>N. \<forall>m (n::nat) x. N \<le> m \<and> N \<le> n \<and> P x --> dist(s m x)(s n x) < e" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 324 | and "\<forall>x. P x --> (\<forall>e>0. \<exists>N. \<forall>n. N \<le> n \<longrightarrow> dist(s n x)(l x) < e)" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 325 | shows "\<forall>e>0. \<exists>N. \<forall>n x. N \<le> n \<and> P x \<longrightarrow> dist(s n x)(l x) < e" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 326 | proof - | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 327 | obtain l' where l:"\<forall>e>0. \<exists>N. \<forall>n x. N \<le> n \<and> P x \<longrightarrow> dist (s n x) (l' x) < e" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 328 | using assms(1) unfolding uniformly_convergent_eq_cauchy[symmetric] by auto | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 329 | moreover | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 330 |   {
 | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 331 | fix x | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 332 | assume "P x" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 333 | then have "l x = l' x" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 334 | using tendsto_unique[OF trivial_limit_sequentially, of "\<lambda>n. s n x" "l x" "l' x"] | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 335 | using l and assms(2) unfolding lim_sequentially by blast | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 336 | } | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 337 | ultimately show ?thesis by auto | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 338 | qed | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 339 | |
| 76722 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 340 | lemma uniformly_convergent_on_sum_E: | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 341 |   fixes \<epsilon>::real and f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_space,real_normed_vector}"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 342 | assumes uconv: "uniformly_convergent_on K (\<lambda>n z. \<Sum>k<n. f k z)" and "\<epsilon>>0" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 343 | obtains N where "\<And>m n z. \<lbrakk>N \<le> m; m \<le> n; z\<in>K\<rbrakk> \<Longrightarrow> norm(\<Sum>k=m..<n. f k z) < \<epsilon>" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 344 | proof - | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 345 | obtain N where N: "\<And>m n z. \<lbrakk>N \<le> m; N \<le> n; z\<in>K\<rbrakk> \<Longrightarrow> dist (\<Sum>k<m. f k z) (\<Sum>k<n. f k z) < \<epsilon>" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 346 | using uconv \<open>\<epsilon>>0\<close> unfolding uniformly_Cauchy_on_def uniformly_convergent_eq_Cauchy by meson | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 347 | show thesis | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 348 | proof | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 349 | fix m n z | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 350 | assume "N \<le> m" "m \<le> n" "z \<in> K" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 351 | moreover have "(\<Sum>k = m..<n. f k z) = (\<Sum>k<n. f k z) - (\<Sum>k<m. f k z)" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 352 | by (metis atLeast0LessThan le0 sum_diff_nat_ivl \<open>m \<le> n\<close>) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 353 | ultimately show "norm(\<Sum>k = m..<n. f k z) < \<epsilon>" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 354 | using N by (simp add: dist_norm) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 355 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 356 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 357 | |
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 358 | lemma uniformly_convergent_on_sum_iff: | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 359 |   fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_space,real_normed_vector}"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 360 | shows "uniformly_convergent_on K (\<lambda>n z. \<Sum>k<n. f k z) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 361 | \<longleftrightarrow> (\<forall>\<epsilon>>0. \<exists>N. \<forall>m n z. N\<le>m \<longrightarrow> m\<le>n \<longrightarrow> z\<in>K \<longrightarrow> norm (\<Sum>k=m..<n. f k z) < \<epsilon>)" (is "?lhs=?rhs") | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 362 | proof | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 363 | assume R: ?rhs | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 364 | show ?lhs | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 365 | unfolding uniformly_Cauchy_on_def uniformly_convergent_eq_Cauchy | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 366 | proof (intro strip) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 367 | fix \<epsilon>::real | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 368 | assume "\<epsilon>>0" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 369 | then obtain N where "\<And>m n z. \<lbrakk>N \<le> m; m \<le> n; z\<in>K\<rbrakk> \<Longrightarrow> norm(\<Sum>k = m..<n. f k z) < \<epsilon>" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 370 | using R by blast | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 371 | then have "\<forall>x\<in>K. \<forall>m\<ge>N. \<forall>n\<ge>m. norm ((\<Sum>k<m. f k x) - (\<Sum>k<n. f k x)) < \<epsilon>" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 372 | by (metis atLeast0LessThan le0 sum_diff_nat_ivl norm_minus_commute) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 373 | then have "\<forall>x\<in>K. \<forall>m\<ge>N. \<forall>n\<ge>N. norm ((\<Sum>k<m. f k x) - (\<Sum>k<n. f k x)) < \<epsilon>" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 374 | by (metis linorder_le_cases norm_minus_commute) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 375 | then show "\<exists>M. \<forall>x\<in>K. \<forall>m\<ge>M. \<forall>n\<ge>M. dist (\<Sum>k<m. f k x) (\<Sum>k<n. f k x) < \<epsilon>" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 376 | by (metis dist_norm) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 377 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 378 | qed (metis uniformly_convergent_on_sum_E) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 379 | |
| 76724 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 380 | lemma uniform_limit_suminf: | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 381 |   fixes f:: "nat \<Rightarrow> 'a::{metric_space, comm_monoid_add} \<Rightarrow> 'a"
 | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 382 | assumes "uniformly_convergent_on X (\<lambda>n x. \<Sum>k<n. f k x)" | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 383 | shows "uniform_limit X (\<lambda>n x. \<Sum>k<n. f k x) (\<lambda>x. \<Sum>k. f k x) sequentially" | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 384 | proof - | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 385 | obtain S where S: "uniform_limit X (\<lambda>n x. \<Sum>k<n. f k x) S sequentially" | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 386 | using assms uniformly_convergent_on_def by blast | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 387 | then have "(\<Sum>k. f k x) = S x" if "x \<in> X" for x | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 388 | using that sums_iff sums_def by (blast intro: tendsto_uniform_limitI [OF S]) | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 389 | with S show ?thesis | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 390 | by (simp cong: uniform_limit_cong') | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 391 | qed | 
| 
7ff71bdcf731
Additional new material about infinite products, etc.
 paulson <lp15@cam.ac.uk> parents: 
76722diff
changeset | 392 | |
| 65204 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 393 | text \<open>TODO: remove explicit formulations | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 394 |   @{thm uniformly_convergent_eq_cauchy uniformly_cauchy_imp_uniformly_convergent}?!\<close>
 | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 395 | |
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 396 | lemma uniformly_convergent_imp_convergent: | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 397 | "uniformly_convergent_on X f \<Longrightarrow> x \<in> X \<Longrightarrow> convergent (\<lambda>n. f n x)" | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 398 | unfolding uniformly_convergent_on_def convergent_def | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 399 | by (auto dest: tendsto_uniform_limitI) | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 400 | |
| 76722 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 401 | subsection \<open>Comparison Test\<close> | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 402 | |
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 403 | lemma uniformly_summable_comparison_test: | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 404 | fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b :: banach" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 405 | assumes "uniformly_convergent_on A (\<lambda>N x. \<Sum>n<N. g n x)" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 406 | assumes "\<And>n x. x \<in> A \<Longrightarrow> norm (f n x) \<le> g n x" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 407 | shows "uniformly_convergent_on A (\<lambda>N x. \<Sum>n<N. f n x)" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 408 | proof - | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 409 | have "uniformly_Cauchy_on A (\<lambda>N x. \<Sum>n<N. f n x)" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 410 | proof (rule uniformly_Cauchy_onI') | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 411 | fix e :: real assume e: "e > 0" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 412 | obtain M where M: "\<And>x m n. x \<in> A \<Longrightarrow> m \<ge> M \<Longrightarrow> n \<ge> M \<Longrightarrow> dist (\<Sum>k<m. g k x) (\<Sum>k<n. g k x) < e" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 413 | using assms(1) e unfolding uniformly_convergent_eq_Cauchy uniformly_Cauchy_on_def by metis | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 414 | show "\<exists>M. \<forall>x\<in>A. \<forall>m\<ge>M. \<forall>n>m. dist (\<Sum>k<m. f k x) (\<Sum>k<n. f k x) < e" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 415 | proof (rule exI[of _ M], safe) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 416 | fix x m n assume xmn: "x \<in> A" "m \<ge> M" "m < n" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 417 | have nonneg: "g k x \<ge> 0" for k | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 418 | by (rule order.trans[OF _ assms(2)]) (use xmn in auto) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 419 |       have "dist (\<Sum>k<m. f k x) (\<Sum>k<n. f k x) = norm (\<Sum>k\<in>{..<n}-{..<m}. f k x)"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 420 | using xmn by (subst sum_diff) (auto simp: dist_norm norm_minus_commute) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 421 |       also have "{..<n}-{..<m} = {m..<n}"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 422 | by auto | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 423 |       also have "norm (\<Sum>k\<in>{m..<n}. f k x) \<le> (\<Sum>k\<in>{m..<n}. norm (f k x))"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 424 | using norm_sum by blast | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 425 |       also have "\<dots> \<le> (\<Sum>k\<in>{m..<n}. g k x)"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 426 | by (intro sum_mono assms xmn) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 427 |       also have "\<dots> = \<bar>\<Sum>k\<in>{m..<n}. g k x\<bar>"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 428 | by (subst abs_of_nonneg) (auto simp: nonneg intro!: sum_nonneg) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 429 |       also have "{m..<n} = {..<n} - {..<m}"
 | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 430 | by auto | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 431 | also have "\<bar>\<Sum>k\<in>\<dots>. g k x\<bar> = dist (\<Sum>k<m. g k x) (\<Sum>k<n. g k x)" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 432 | using xmn by (subst sum_diff) (auto simp: abs_minus_commute dist_norm) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 433 | also have "\<dots> < e" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 434 | by (rule M) (use xmn in auto) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 435 | finally show "dist (\<Sum>k<m. f k x) (\<Sum>k<n. f k x) < e" . | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 436 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 437 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 438 | thus ?thesis | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 439 | unfolding uniformly_convergent_eq_Cauchy . | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 440 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 441 | |
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 442 | lemma uniform_limit_compose_uniformly_continuous_on: | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 443 | fixes f :: "'a :: metric_space \<Rightarrow> 'b :: metric_space" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 444 | assumes lim: "uniform_limit A g g' F" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 445 | assumes cont: "uniformly_continuous_on B f" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 446 | assumes ev: "eventually (\<lambda>x. \<forall>y\<in>A. g x y \<in> B) F" and "closed B" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 447 | shows "uniform_limit A (\<lambda>x y. f (g x y)) (\<lambda>y. f (g' y)) F" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 448 | proof (cases "F = bot") | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 449 | case [simp]: False | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 450 | show ?thesis | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 451 | unfolding uniform_limit_iff | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 452 | proof safe | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 453 | fix e :: real assume e: "e > 0" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 454 | |
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 455 | have g'_in_B: "g' y \<in> B" if "y \<in> A" for y | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 456 | proof (rule Lim_in_closed_set) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 457 | show "eventually (\<lambda>x. g x y \<in> B) F" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 458 | using ev by eventually_elim (use that in auto) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 459 | show "((\<lambda>x. g x y) \<longlongrightarrow> g' y) F" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 460 | using lim that by (metis tendsto_uniform_limitI) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 461 | qed (use \<open>closed B\<close> in auto) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 462 | |
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 463 | obtain d where d: "d > 0" "\<And>x y. x \<in> B \<Longrightarrow> y \<in> B \<Longrightarrow> dist x y < d \<Longrightarrow> dist (f x) (f y) < e" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 464 | using e cont unfolding uniformly_continuous_on_def by metis | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 465 | from lim have "eventually (\<lambda>x. \<forall>y\<in>A. dist (g x y) (g' y) < d) F" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 466 | unfolding uniform_limit_iff using \<open>d > 0\<close> by meson | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 467 | thus "eventually (\<lambda>x. \<forall>y\<in>A. dist (f (g x y)) (f (g' y)) < e) F" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 468 | using assms(3) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 469 | proof eventually_elim | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 470 | case (elim x) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 471 | show "\<forall>y\<in>A. dist (f (g x y)) (f (g' y)) < e" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 472 | proof safe | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 473 | fix y assume y: "y \<in> A" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 474 | show "dist (f (g x y)) (f (g' y)) < e" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 475 | proof (rule d) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 476 | show "dist (g x y) (g' y) < d" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 477 | using elim y by blast | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 478 | qed (use y elim g'_in_B in auto) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 479 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 480 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 481 | qed | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 482 | qed (auto simp: filterlim_def) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 483 | |
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 484 | lemma uniformly_convergent_on_compose_uniformly_continuous_on: | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 485 | fixes f :: "'a :: metric_space \<Rightarrow> 'b :: metric_space" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 486 | assumes lim: "uniformly_convergent_on A g" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 487 | assumes cont: "uniformly_continuous_on B f" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 488 | assumes ev: "eventually (\<lambda>x. \<forall>y\<in>A. g x y \<in> B) sequentially" and "closed B" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 489 | shows "uniformly_convergent_on A (\<lambda>x y. f (g x y))" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 490 | proof - | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 491 | from lim obtain g' where g': "uniform_limit A g g' sequentially" | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 492 | by (auto simp: uniformly_convergent_on_def) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 493 | thus ?thesis | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 494 | using uniform_limit_compose_uniformly_continuous_on[OF g' cont ev \<open>closed B\<close>] | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 495 | by (auto simp: uniformly_convergent_on_def) | 
| 
b1d57dd345e1
First round of moving material from the number theory development
 paulson <lp15@cam.ac.uk> parents: 
73932diff
changeset | 496 | qed | 
| 68838 | 497 | |
| 498 | subsection \<open>Weierstrass M-Test\<close> | |
| 499 | ||
| 69529 | 500 | proposition Weierstrass_m_test_ev: | 
| 60812 | 501 | fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 502 | assumes "eventually (\<lambda>n. \<forall>x\<in>A. norm (f n x) \<le> M n) sequentially" | 
| 60812 | 503 | assumes "summable M" | 
| 504 | shows "uniform_limit A (\<lambda>n x. \<Sum>i<n. f i x) (\<lambda>x. suminf (\<lambda>i. f i x)) sequentially" | |
| 505 | proof (rule uniform_limitI) | |
| 506 | fix e :: real | |
| 507 | assume "0 < e" | |
| 61222 | 508 | from suminf_exist_split[OF \<open>0 < e\<close> \<open>summable M\<close>] | 
| 60812 | 509 | have "\<forall>\<^sub>F k in sequentially. norm (\<Sum>i. M (i + k)) < e" | 
| 510 | by (auto simp: eventually_sequentially) | |
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 511 | with eventually_all_ge_at_top[OF assms(1)] | 
| 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 512 | show "\<forall>\<^sub>F n in sequentially. \<forall>x\<in>A. dist (\<Sum>i<n. f i x) (\<Sum>i. f i x) < e" | 
| 60812 | 513 | proof eventually_elim | 
| 514 | case (elim k) | |
| 515 | show ?case | |
| 516 | proof safe | |
| 517 | fix x assume "x \<in> A" | |
| 518 | have "\<exists>N. \<forall>n\<ge>N. norm (f n x) \<le> M n" | |
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 519 | using assms(1) \<open>x \<in> A\<close> by (force simp: eventually_at_top_linorder) | 
| 60812 | 520 | hence summable_norm_f: "summable (\<lambda>n. norm (f n x))" | 
| 61222 | 521 | by(rule summable_norm_comparison_test[OF _ \<open>summable M\<close>]) | 
| 60812 | 522 | have summable_f: "summable (\<lambda>n. f n x)" | 
| 523 | using summable_norm_cancel[OF summable_norm_f] . | |
| 524 | have summable_norm_f_plus_k: "summable (\<lambda>i. norm (f (i + k) x))" | |
| 525 | using summable_ignore_initial_segment[OF summable_norm_f] | |
| 526 | by auto | |
| 527 | have summable_M_plus_k: "summable (\<lambda>i. M (i + k))" | |
| 61222 | 528 | using summable_ignore_initial_segment[OF \<open>summable M\<close>] | 
| 60812 | 529 | by auto | 
| 530 | ||
| 531 | have "dist (\<Sum>i<k. f i x) (\<Sum>i. f i x) = norm ((\<Sum>i. f i x) - (\<Sum>i<k. f i x))" | |
| 532 | using dist_norm dist_commute by (subst dist_commute) | |
| 533 | also have "... = norm (\<Sum>i. f (i + k) x)" | |
| 534 | using suminf_minus_initial_segment[OF summable_f, where k=k] by simp | |
| 535 | also have "... \<le> (\<Sum>i. norm (f (i + k) x))" | |
| 536 | using summable_norm[OF summable_norm_f_plus_k] . | |
| 537 | also have "... \<le> (\<Sum>i. M (i + k))" | |
| 538 | by (rule suminf_le[OF _ summable_norm_f_plus_k summable_M_plus_k]) | |
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 539 | (insert elim(1) \<open>x \<in> A\<close>, simp) | 
| 60812 | 540 | finally show "dist (\<Sum>i<k. f i x) (\<Sum>i. f i x) < e" | 
| 541 | using elim by auto | |
| 542 | qed | |
| 543 | qed | |
| 544 | qed | |
| 545 | ||
| 62175 | 546 | text\<open>Alternative version, formulated as in HOL Light\<close> | 
| 70136 | 547 | corollary\<^marker>\<open>tag unimportant\<close> series_comparison_uniform: | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 548 | fixes f :: "_ \<Rightarrow> nat \<Rightarrow> _ :: banach" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 549 | assumes g: "summable g" and le: "\<And>n x. N \<le> n \<and> x \<in> A \<Longrightarrow> norm(f x n) \<le> g n" | 
| 64267 | 550 |     shows "\<exists>l. \<forall>e. 0 < e \<longrightarrow> (\<exists>N. \<forall>n x. N \<le> n \<and> x \<in> A \<longrightarrow> dist(sum (f x) {..<n}) (l x) < e)"
 | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 551 | proof - | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 552 | have 1: "\<forall>\<^sub>F n in sequentially. \<forall>x\<in>A. norm (f x n) \<le> g n" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 553 | using le eventually_sequentially by auto | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 554 | show ?thesis | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 555 | apply (rule_tac x="(\<lambda>x. \<Sum>i. f x i)" in exI) | 
| 69529 | 556 | apply (metis (no_types, lifting) eventually_sequentially uniform_limitD [OF Weierstrass_m_test_ev [OF 1 g]]) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 557 | done | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 558 | qed | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 559 | |
| 70136 | 560 | corollary\<^marker>\<open>tag unimportant\<close> Weierstrass_m_test: | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 561 | fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 562 | assumes "\<And>n x. x \<in> A \<Longrightarrow> norm (f n x) \<le> M n" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 563 | assumes "summable M" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
61973diff
changeset | 564 | shows "uniform_limit A (\<lambda>n x. \<Sum>i<n. f i x) (\<lambda>x. suminf (\<lambda>i. f i x)) sequentially" | 
| 69529 | 565 | using assms by (intro Weierstrass_m_test_ev always_eventually) auto | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 566 | |
| 70136 | 567 | corollary\<^marker>\<open>tag unimportant\<close> Weierstrass_m_test'_ev: | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 568 | fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 569 | assumes "eventually (\<lambda>n. \<forall>x\<in>A. norm (f n x) \<le> M n) sequentially" "summable M" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 570 | shows "uniformly_convergent_on A (\<lambda>n x. \<Sum>i<n. f i x)" | 
| 69529 | 571 | unfolding uniformly_convergent_on_def by (rule exI, rule Weierstrass_m_test_ev[OF assms]) | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 572 | |
| 70136 | 573 | corollary\<^marker>\<open>tag unimportant\<close> Weierstrass_m_test': | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 574 | fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 575 | assumes "\<And>n x. x \<in> A \<Longrightarrow> norm (f n x) \<le> M n" "summable M" | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 576 | shows "uniformly_convergent_on A (\<lambda>n x. \<Sum>i<n. f i x)" | 
| 69529 | 577 | unfolding uniformly_convergent_on_def by (rule exI, rule Weierstrass_m_test[OF assms]) | 
| 61531 
ab2e862263e7
Rounding function, uniform limits, cotangent, binomial identities
 eberlm parents: 
61222diff
changeset | 578 | |
| 77434 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 579 | |
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 580 | lemma Weierstrass_m_test_general: | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 581 | fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c :: banach" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 582 | fixes M :: "'a \<Rightarrow> real" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 583 | assumes norm_le: "\<And>x y. x \<in> X \<Longrightarrow> y \<in> Y \<Longrightarrow> norm (f x y) \<le> M x" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 584 | assumes summable: "M summable_on X" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 585 | shows "uniform_limit Y (\<lambda>X y. \<Sum>x\<in>X. f x y) (\<lambda>y. \<Sum>\<^sub>\<infinity>x\<in>X. f x y) (finite_subsets_at_top X)" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 586 | proof (rule uniform_limitI) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 587 | fix \<epsilon> :: real | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 588 | assume "\<epsilon> > 0" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 589 | define S where "S = (\<lambda>y. \<Sum>\<^sub>\<infinity>x\<in>X. f x y)" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 590 | have S: "((\<lambda>x. f x y) has_sum S y) X" if y: "y \<in> Y" for y | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 591 | unfolding S_def | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 592 | proof (rule has_sum_infsum) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 593 | have "(\<lambda>x. norm (f x y)) summable_on X" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 594 | by (rule abs_summable_on_comparison_test'[OF summable norm_le]) (use y in auto) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 595 | thus "(\<lambda>x. f x y) summable_on X" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 596 | by (metis abs_summable_summable) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 597 | qed | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 598 | |
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 599 | define T where "T = (\<Sum>\<^sub>\<infinity>x\<in>X. M x)" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 600 | have T: "(M has_sum T) X" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 601 | unfolding T_def by (simp add: local.summable) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 602 | have M_summable: "M summable_on X'" if "X' \<subseteq> X" for X' | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 603 | using local.summable summable_on_subset_banach that by blast | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 604 | |
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 605 | have f_summable: "(\<lambda>x. f x y) summable_on X'" if "X' \<subseteq> X" "y \<in> Y" for X' y | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 606 | using S summable_on_def summable_on_subset_banach that by blast | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 607 | have "eventually (\<lambda>X'. dist (\<Sum>x\<in>X'. M x) T < \<epsilon>) (finite_subsets_at_top X)" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 608 | using T \<open>\<epsilon> > 0\<close> unfolding T_def has_sum_def tendsto_iff by blast | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 609 | moreover have "eventually (\<lambda>X'. finite X' \<and> X' \<subseteq> X) (finite_subsets_at_top X)" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 610 | by (simp add: eventually_finite_subsets_at_top_weakI) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 611 | ultimately show "\<forall>\<^sub>F X' in finite_subsets_at_top X. \<forall>y\<in>Y. dist (\<Sum>x\<in>X'. f x y) (\<Sum>\<^sub>\<infinity>x\<in>X. f x y) < \<epsilon>" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 612 | proof eventually_elim | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 613 | case X': (elim X') | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 614 | show "\<forall>y\<in>Y. dist (\<Sum>x\<in>X'. f x y) (\<Sum>\<^sub>\<infinity>x\<in>X. f x y) < \<epsilon>" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 615 | proof | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 616 | fix y assume y: "y \<in> Y" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 617 | have 1: "((\<lambda>x. f x y) has_sum (S y - (\<Sum>x\<in>X'. f x y))) (X - X')" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 618 | using X' y by (intro has_sum_Diff S has_sum_finite[of X'] f_summable) auto | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 619 | have 2: "(M has_sum (T - (\<Sum>x\<in>X'. M x))) (X - X')" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 620 | using X' y by (intro has_sum_Diff T has_sum_finite[of X'] M_summable) auto | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 621 | have "dist (\<Sum>x\<in>X'. f x y) (\<Sum>\<^sub>\<infinity>x\<in>X. f x y) = norm (S y - (\<Sum>x\<in>X'. f x y))" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 622 | by (simp add: dist_norm norm_minus_commute S_def) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 623 | also have "norm (S y - (\<Sum>x\<in>X'. f x y)) \<le> (\<Sum>\<^sub>\<infinity>x\<in>X-X'. M x)" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 624 | using 2 y by (intro norm_infsum_le[OF 1 _ norm_le]) (auto simp: infsumI) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 625 | also have "\<dots> = T - (\<Sum>x\<in>X'. M x)" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 626 | using 2 by (auto simp: infsumI) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 627 | also have "\<dots> < \<epsilon>" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 628 | using X' by (simp add: dist_norm) | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 629 | finally show "dist (\<Sum>x\<in>X'. f x y) (\<Sum>\<^sub>\<infinity>x\<in>X. f x y) < \<epsilon>" . | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 630 | qed | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 631 | qed | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 632 | qed | 
| 60812 | 633 | |
| 68838 | 634 | |
| 70136 | 635 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Structural introduction rules\<close> | 
| 68838 | 636 | |
| 77434 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 637 | lemma uniform_limit_eq_rhs: "uniform_limit X f l F \<Longrightarrow> l = m \<Longrightarrow> uniform_limit X f m F" | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 638 | by simp | 
| 
da41823d09a7
Imported a theorem about Infinite_Sum. Importing this theory a bit earlier is causing syntactic ambiguities with Infinite_Set_Sum however; no_notation needed
 paulson <lp15@cam.ac.uk> parents: 
76724diff
changeset | 639 | |
| 60812 | 640 | named_theorems uniform_limit_intros "introduction rules for uniform_limit" | 
| 61222 | 641 | setup \<open> | 
| 69597 | 642 | Global_Theory.add_thms_dynamic (\<^binding>\<open>uniform_limit_eq_intros\<close>, | 
| 60812 | 643 | fn context => | 
| 69597 | 644 | Named_Theorems.get (Context.proof_of context) \<^named_theorems>\<open>uniform_limit_intros\<close> | 
| 60812 | 645 |       |> map_filter (try (fn thm => @{thm uniform_limit_eq_rhs} OF [thm])))
 | 
| 61222 | 646 | \<close> | 
| 60812 | 647 | |
| 648 | lemma (in bounded_linear) uniform_limit[uniform_limit_intros]: | |
| 649 | assumes "uniform_limit X g l F" | |
| 650 | shows "uniform_limit X (\<lambda>a b. f (g a b)) (\<lambda>a. f (l a)) F" | |
| 651 | proof (rule uniform_limitI) | |
| 652 | fix e::real | |
| 653 | from pos_bounded obtain K | |
| 654 | where K: "\<And>x y. dist (f x) (f y) \<le> K * dist x y" "K > 0" | |
| 655 | by (auto simp: ac_simps dist_norm diff[symmetric]) | |
| 61222 | 656 | assume "0 < e" with \<open>K > 0\<close> have "e / K > 0" by simp | 
| 60812 | 657 | from uniform_limitD[OF assms this] | 
| 658 | show "\<forall>\<^sub>F n in F. \<forall>x\<in>X. dist (f (g n x)) (f (l x)) < e" | |
| 659 | by eventually_elim (metis le_less_trans mult.commute pos_less_divide_eq K) | |
| 660 | qed | |
| 661 | ||
| 67371 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 662 | lemma (in bounded_linear) uniformly_convergent_on: | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 663 | assumes "uniformly_convergent_on A g" | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 664 | shows "uniformly_convergent_on A (\<lambda>x y. f (g x y))" | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 665 | proof - | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 666 | from assms obtain l where "uniform_limit A g l sequentially" | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 667 | unfolding uniformly_convergent_on_def by blast | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 668 | hence "uniform_limit A (\<lambda>x y. f (g x y)) (\<lambda>x. f (l x)) sequentially" | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 669 | by (rule uniform_limit) | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 670 | thus ?thesis unfolding uniformly_convergent_on_def by blast | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 671 | qed | 
| 
2d9cf74943e1
moved in some material from Euler-MacLaurin
 paulson <lp15@cam.ac.uk> parents: 
66827diff
changeset | 672 | |
| 60812 | 673 | lemmas bounded_linear_uniform_limit_intros[uniform_limit_intros] = | 
| 674 | bounded_linear.uniform_limit[OF bounded_linear_Im] | |
| 675 | bounded_linear.uniform_limit[OF bounded_linear_Re] | |
| 676 | bounded_linear.uniform_limit[OF bounded_linear_cnj] | |
| 677 | bounded_linear.uniform_limit[OF bounded_linear_fst] | |
| 678 | bounded_linear.uniform_limit[OF bounded_linear_snd] | |
| 679 | bounded_linear.uniform_limit[OF bounded_linear_zero] | |
| 680 | bounded_linear.uniform_limit[OF bounded_linear_of_real] | |
| 681 | bounded_linear.uniform_limit[OF bounded_linear_inner_left] | |
| 682 | bounded_linear.uniform_limit[OF bounded_linear_inner_right] | |
| 683 | bounded_linear.uniform_limit[OF bounded_linear_divide] | |
| 684 | bounded_linear.uniform_limit[OF bounded_linear_scaleR_right] | |
| 685 | bounded_linear.uniform_limit[OF bounded_linear_mult_left] | |
| 686 | bounded_linear.uniform_limit[OF bounded_linear_mult_right] | |
| 687 | bounded_linear.uniform_limit[OF bounded_linear_scaleR_left] | |
| 688 | ||
| 67685 
bdff8bf0a75b
moved theorems from AFP/Affine_Arithmetic and AFP/Ordinary_Differential_Equations
 immler parents: 
67371diff
changeset | 689 | |
| 60812 | 690 | lemmas uniform_limit_uminus[uniform_limit_intros] = | 
| 691 | bounded_linear.uniform_limit[OF bounded_linear_minus[OF bounded_linear_ident]] | |
| 692 | ||
| 65204 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 693 | lemma uniform_limit_const[uniform_limit_intros]: "uniform_limit S (\<lambda>x. c) c f" | 
| 62949 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 694 | by (auto intro!: uniform_limitI) | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 695 | |
| 60812 | 696 | lemma uniform_limit_add[uniform_limit_intros]: | 
| 697 | fixes f g::"'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_vector" | |
| 698 | assumes "uniform_limit X f l F" | |
| 699 | assumes "uniform_limit X g m F" | |
| 700 | shows "uniform_limit X (\<lambda>a b. f a b + g a b) (\<lambda>a. l a + m a) F" | |
| 701 | proof (rule uniform_limitI) | |
| 702 | fix e::real | |
| 703 | assume "0 < e" | |
| 704 | hence "0 < e / 2" by simp | |
| 705 | from | |
| 706 | uniform_limitD[OF assms(1) this] | |
| 707 | uniform_limitD[OF assms(2) this] | |
| 708 | show "\<forall>\<^sub>F n in F. \<forall>x\<in>X. dist (f n x + g n x) (l x + m x) < e" | |
| 709 | by eventually_elim (simp add: dist_triangle_add_half) | |
| 710 | qed | |
| 711 | ||
| 712 | lemma uniform_limit_minus[uniform_limit_intros]: | |
| 713 | fixes f g::"'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_vector" | |
| 714 | assumes "uniform_limit X f l F" | |
| 715 | assumes "uniform_limit X g m F" | |
| 716 | shows "uniform_limit X (\<lambda>a b. f a b - g a b) (\<lambda>a. l a - m a) F" | |
| 717 | unfolding diff_conv_add_uminus | |
| 718 | by (rule uniform_limit_intros assms)+ | |
| 719 | ||
| 62949 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 720 | lemma uniform_limit_norm[uniform_limit_intros]: | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 721 | assumes "uniform_limit S g l f" | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 722 | shows "uniform_limit S (\<lambda>x y. norm (g x y)) (\<lambda>x. norm (l x)) f" | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 723 | using assms | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 724 | apply (rule metric_uniform_limit_imp_uniform_limit) | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 725 | apply (rule eventuallyI) | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 726 | by (metis dist_norm norm_triangle_ineq3 real_norm_def) | 
| 
f36a54da47a4
added derivative of scaling in exponential function
 immler parents: 
62393diff
changeset | 727 | |
| 60812 | 728 | lemma (in bounded_bilinear) bounded_uniform_limit[uniform_limit_intros]: | 
| 729 | assumes "uniform_limit X f l F" | |
| 730 | assumes "uniform_limit X g m F" | |
| 731 | assumes "bounded (m ` X)" | |
| 732 | assumes "bounded (l ` X)" | |
| 733 | shows "uniform_limit X (\<lambda>a b. prod (f a b) (g a b)) (\<lambda>a. prod (l a) (m a)) F" | |
| 734 | proof (rule uniform_limitI) | |
| 735 | fix e::real | |
| 736 | from pos_bounded obtain K where K: | |
| 737 | "0 < K" "\<And>a b. norm (prod a b) \<le> norm a * norm b * K" | |
| 738 | by auto | |
| 739 | hence "sqrt (K*4) > 0" by simp | |
| 740 | ||
| 741 | from assms obtain Km Kl | |
| 742 | where Km: "Km > 0" "\<And>x. x \<in> X \<Longrightarrow> norm (m x) \<le> Km" | |
| 743 | and Kl: "Kl > 0" "\<And>x. x \<in> X \<Longrightarrow> norm (l x) \<le> Kl" | |
| 744 | by (auto simp: bounded_pos) | |
| 745 | hence "K * Km * 4 > 0" "K * Kl * 4 > 0" | |
| 61222 | 746 | using \<open>K > 0\<close> | 
| 60812 | 747 | by simp_all | 
| 748 | assume "0 < e" | |
| 749 | ||
| 750 | hence "sqrt e > 0" by simp | |
| 61222 | 751 | from uniform_limitD[OF assms(1) divide_pos_pos[OF this \<open>sqrt (K*4) > 0\<close>]] | 
| 752 | uniform_limitD[OF assms(2) divide_pos_pos[OF this \<open>sqrt (K*4) > 0\<close>]] | |
| 753 | uniform_limitD[OF assms(1) divide_pos_pos[OF \<open>e > 0\<close> \<open>K * Km * 4 > 0\<close>]] | |
| 754 | uniform_limitD[OF assms(2) divide_pos_pos[OF \<open>e > 0\<close> \<open>K * Kl * 4 > 0\<close>]] | |
| 60812 | 755 | show "\<forall>\<^sub>F n in F. \<forall>x\<in>X. dist (prod (f n x) (g n x)) (prod (l x) (m x)) < e" | 
| 756 | proof eventually_elim | |
| 757 | case (elim n) | |
| 758 | show ?case | |
| 759 | proof safe | |
| 760 | fix x assume "x \<in> X" | |
| 761 | have "dist (prod (f n x) (g n x)) (prod (l x) (m x)) \<le> | |
| 762 | norm (prod (f n x - l x) (g n x - m x)) + | |
| 763 | norm (prod (f n x - l x) (m x)) + | |
| 764 | norm (prod (l x) (g n x - m x))" | |
| 765 | by (auto simp: dist_norm prod_diff_prod intro: order_trans norm_triangle_ineq add_mono) | |
| 766 | also note K(2)[of "f n x - l x" "g n x - m x"] | |
| 61222 | 767 | also from elim(1)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm] | 
| 60812 | 768 | have "norm (f n x - l x) \<le> sqrt e / sqrt (K * 4)" | 
| 769 | by simp | |
| 61222 | 770 | also from elim(2)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm] | 
| 60812 | 771 | have "norm (g n x - m x) \<le> sqrt e / sqrt (K * 4)" | 
| 772 | by simp | |
| 773 | also have "sqrt e / sqrt (K * 4) * (sqrt e / sqrt (K * 4)) * K = e / 4" | |
| 61222 | 774 | using \<open>K > 0\<close> \<open>e > 0\<close> by auto | 
| 60812 | 775 | also note K(2)[of "f n x - l x" "m x"] | 
| 776 | also note K(2)[of "l x" "g n x - m x"] | |
| 61222 | 777 | also from elim(3)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm] | 
| 60812 | 778 | have "norm (f n x - l x) \<le> e / (K * Km * 4)" | 
| 779 | by simp | |
| 61222 | 780 | also from elim(4)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm] | 
| 60812 | 781 | have "norm (g n x - m x) \<le> e / (K * Kl * 4)" | 
| 782 | by simp | |
| 61222 | 783 | also note Kl(2)[OF \<open>_ \<in> X\<close>] | 
| 784 | also note Km(2)[OF \<open>_ \<in> X\<close>] | |
| 60812 | 785 | also have "e / (K * Km * 4) * Km * K = e / 4" | 
| 61222 | 786 | using \<open>K > 0\<close> \<open>Km > 0\<close> by simp | 
| 60812 | 787 | also have " Kl * (e / (K * Kl * 4)) * K = e / 4" | 
| 61222 | 788 | using \<open>K > 0\<close> \<open>Kl > 0\<close> by simp | 
| 789 | also have "e / 4 + e / 4 + e / 4 < e" using \<open>e > 0\<close> by simp | |
| 60812 | 790 | finally show "dist (prod (f n x) (g n x)) (prod (l x) (m x)) < e" | 
| 61222 | 791 | using \<open>K > 0\<close> \<open>Kl > 0\<close> \<open>Km > 0\<close> \<open>e > 0\<close> | 
| 60812 | 792 | by (simp add: algebra_simps mult_right_mono divide_right_mono) | 
| 793 | qed | |
| 794 | qed | |
| 795 | qed | |
| 796 | ||
| 797 | lemmas bounded_bilinear_bounded_uniform_limit_intros[uniform_limit_intros] = | |
| 798 | bounded_bilinear.bounded_uniform_limit[OF Inner_Product.bounded_bilinear_inner] | |
| 799 | bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_mult] | |
| 800 | bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_scaleR] | |
| 801 | ||
| 65036 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 802 | lemma uniform_lim_mult: | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 803 | fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_algebra" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 804 | assumes f: "uniform_limit S f l F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 805 | and g: "uniform_limit S g m F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 806 | and l: "bounded (l ` S)" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 807 | and m: "bounded (m ` S)" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 808 | shows "uniform_limit S (\<lambda>a b. f a b * g a b) (\<lambda>a. l a * m a) F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 809 | by (intro bounded_bilinear_bounded_uniform_limit_intros assms) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 810 | |
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 811 | lemma uniform_lim_inverse: | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 812 | fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_field" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 813 | assumes f: "uniform_limit S f l F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 814 | and b: "\<And>x. x \<in> S \<Longrightarrow> b \<le> norm(l x)" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 815 | and "b > 0" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 816 | shows "uniform_limit S (\<lambda>x y. inverse (f x y)) (inverse \<circ> l) F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 817 | proof (rule uniform_limitI) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 818 | fix e::real | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 819 | assume "e > 0" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 820 | have lte: "dist (inverse (f x y)) ((inverse \<circ> l) y) < e" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 821 | if "b/2 \<le> norm (f x y)" "norm (f x y - l y) < e * b\<^sup>2 / 2" "y \<in> S" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 822 | for x y | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 823 | proof - | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 824 | have [simp]: "l y \<noteq> 0" "f x y \<noteq> 0" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 825 | using \<open>b > 0\<close> that b [OF \<open>y \<in> S\<close>] by fastforce+ | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 826 | have "norm (l y - f x y) < e * b\<^sup>2 / 2" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 827 | by (metis norm_minus_commute that(2)) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 828 | also have "... \<le> e * (norm (f x y) * norm (l y))" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 829 | using \<open>e > 0\<close> that b [OF \<open>y \<in> S\<close>] apply (simp add: power2_eq_square) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 830 | by (metis \<open>b > 0\<close> less_eq_real_def mult.left_commute mult_mono') | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 831 | finally show ?thesis | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 832 | by (auto simp: dist_norm field_split_simps norm_mult norm_divide) | 
| 65036 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 833 | qed | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 834 | have "\<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < b/2" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 835 | using uniform_limitD [OF f, of "b/2"] by (simp add: \<open>b > 0\<close>) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 836 | then have "\<forall>\<^sub>F x in F. \<forall>y\<in>S. b/2 \<le> norm (f x y)" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 837 | apply (rule eventually_mono) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 838 | using b apply (simp only: dist_norm) | 
| 73932 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 desharna parents: 
70817diff
changeset | 839 | by (metis (no_types, opaque_lifting) diff_zero dist_commute dist_norm norm_triangle_half_l not_less) | 
| 65036 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 840 | then have "\<forall>\<^sub>F x in F. \<forall>y\<in>S. b/2 \<le> norm (f x y) \<and> norm (f x y - l y) < e * b\<^sup>2 / 2" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 841 | apply (simp only: ball_conj_distrib dist_norm [symmetric]) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 842 | apply (rule eventually_conj, assumption) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 843 | apply (rule uniform_limitD [OF f, of "e * b ^ 2 / 2"]) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 844 | using \<open>b > 0\<close> \<open>e > 0\<close> by auto | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 845 | then show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (inverse (f x y)) ((inverse \<circ> l) y) < e" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 846 | using lte by (force intro: eventually_mono) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 847 | qed | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 848 | |
| 65037 
2cf841ff23be
some new material, also recasting some theorems using “obtains”
 paulson <lp15@cam.ac.uk> parents: 
65036diff
changeset | 849 | lemma uniform_lim_divide: | 
| 65036 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 850 | fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_field" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 851 | assumes f: "uniform_limit S f l F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 852 | and g: "uniform_limit S g m F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 853 | and l: "bounded (l ` S)" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 854 | and b: "\<And>x. x \<in> S \<Longrightarrow> b \<le> norm(m x)" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 855 | and "b > 0" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 856 | shows "uniform_limit S (\<lambda>a b. f a b / g a b) (\<lambda>a. l a / m a) F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 857 | proof - | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 858 | have m: "bounded ((inverse \<circ> m) ` S)" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 859 | using b \<open>b > 0\<close> | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 860 | apply (simp add: bounded_iff) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 861 | by (metis le_imp_inverse_le norm_inverse) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 862 | have "uniform_limit S (\<lambda>a b. f a b * inverse (g a b)) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 863 | (\<lambda>a. l a * (inverse \<circ> m) a) F" | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 864 | by (rule uniform_lim_mult [OF f uniform_lim_inverse [OF g b \<open>b > 0\<close>] l m]) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 865 | then show ?thesis | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 866 | by (simp add: field_class.field_divide_inverse) | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 867 | qed | 
| 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 868 | |
| 60812 | 869 | lemma uniform_limit_null_comparison: | 
| 870 | assumes "\<forall>\<^sub>F x in F. \<forall>a\<in>S. norm (f x a) \<le> g x a" | |
| 871 | assumes "uniform_limit S g (\<lambda>_. 0) F" | |
| 872 | shows "uniform_limit S f (\<lambda>_. 0) F" | |
| 873 | using assms(2) | |
| 874 | proof (rule metric_uniform_limit_imp_uniform_limit) | |
| 875 | show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (f x y) 0 \<le> dist (g x y) 0" | |
| 61810 | 876 | using assms(1) by (rule eventually_mono) (force simp add: dist_norm) | 
| 60812 | 877 | qed | 
| 878 | ||
| 65036 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 879 | lemma uniform_limit_on_Un: | 
| 60812 | 880 | "uniform_limit I f g F \<Longrightarrow> uniform_limit J f g F \<Longrightarrow> uniform_limit (I \<union> J) f g F" | 
| 881 | by (auto intro!: uniform_limitI dest!: uniform_limitD elim: eventually_elim2) | |
| 882 | ||
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 883 | lemma uniform_limit_on_empty [iff]: | 
| 60812 | 884 |   "uniform_limit {} f g F"
 | 
| 885 | by (auto intro!: uniform_limitI) | |
| 886 | ||
| 887 | lemma uniform_limit_on_UNION: | |
| 888 | assumes "finite S" | |
| 889 | assumes "\<And>s. s \<in> S \<Longrightarrow> uniform_limit (h s) f g F" | |
| 69313 | 890 | shows "uniform_limit (\<Union>(h ` S)) f g F" | 
| 60812 | 891 | using assms | 
| 65036 
ab7e11730ad8
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
 paulson <lp15@cam.ac.uk> parents: 
64267diff
changeset | 892 | by induct (auto intro: uniform_limit_on_empty uniform_limit_on_Un) | 
| 60812 | 893 | |
| 894 | lemma uniform_limit_on_Union: | |
| 895 | assumes "finite I" | |
| 896 | assumes "\<And>J. J \<in> I \<Longrightarrow> uniform_limit J f g F" | |
| 897 | shows "uniform_limit (Union I) f g F" | |
| 898 | by (metis SUP_identity_eq assms uniform_limit_on_UNION) | |
| 899 | ||
| 900 | lemma uniform_limit_on_subset: | |
| 901 | "uniform_limit J f g F \<Longrightarrow> I \<subseteq> J \<Longrightarrow> uniform_limit I f g F" | |
| 61810 | 902 | by (auto intro!: uniform_limitI dest!: uniform_limitD intro: eventually_mono) | 
| 61552 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 903 | |
| 65204 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 904 | lemma uniform_limit_bounded: | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 905 | fixes f::"'i \<Rightarrow> 'a::topological_space \<Rightarrow> 'b::metric_space" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 906 | assumes l: "uniform_limit S f l F" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 907 | assumes bnd: "\<forall>\<^sub>F i in F. bounded (f i ` S)" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 908 | assumes "F \<noteq> bot" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 909 | shows "bounded (l ` S)" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 910 | proof - | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 911 | from l have "\<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (l x) (f n x) < 1" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 912 | by (auto simp: uniform_limit_iff dist_commute dest!: spec[where x=1]) | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 913 | with bnd | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 914 | have "\<forall>\<^sub>F n in F. \<exists>M. \<forall>x\<in>S. dist undefined (l x) \<le> M + 1" | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 915 | by eventually_elim | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 916 | (auto intro!: order_trans[OF dist_triangle2 add_mono] intro: less_imp_le | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 917 | simp: bounded_any_center[where a=undefined]) | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 918 | then show ?thesis using assms | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 919 | by (auto simp: bounded_any_center[where a=undefined] dest!: eventually_happens) | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 920 | qed | 
| 
d23eded35a33
modernized construction of type bcontfun; base explicit theorems on Uniform_Limit.thy; added some lemmas
 immler parents: 
65037diff
changeset | 921 | |
| 61552 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 922 | lemma uniformly_convergent_add: | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 923 | "uniformly_convergent_on A f \<Longrightarrow> uniformly_convergent_on A g\<Longrightarrow> | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 924 |       uniformly_convergent_on A (\<lambda>k x. f k x + g k x :: 'a :: {real_normed_algebra})"
 | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 925 | unfolding uniformly_convergent_on_def by (blast dest: uniform_limit_add) | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 926 | |
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 927 | lemma uniformly_convergent_minus: | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 928 | "uniformly_convergent_on A f \<Longrightarrow> uniformly_convergent_on A g\<Longrightarrow> | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 929 |       uniformly_convergent_on A (\<lambda>k x. f k x - g k x :: 'a :: {real_normed_algebra})"
 | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 930 | unfolding uniformly_convergent_on_def by (blast dest: uniform_limit_minus) | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 931 | |
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 932 | lemma uniformly_convergent_mult: | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 933 | "uniformly_convergent_on A f \<Longrightarrow> | 
| 61552 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 934 |       uniformly_convergent_on A (\<lambda>k x. c * f k x :: 'a :: {real_normed_algebra})"
 | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 935 | unfolding uniformly_convergent_on_def | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 936 | by (blast dest: bounded_linear_uniform_limit_intros(13)) | 
| 
980dd46a03fb
Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
 eberlm parents: 
61531diff
changeset | 937 | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 938 | subsection\<open>Power series and uniform convergence\<close> | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 939 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 940 | proposition powser_uniformly_convergent: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 941 |   fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 942 | assumes "r < conv_radius a" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 943 | shows "uniformly_convergent_on (cball \<xi> r) (\<lambda>n x. \<Sum>i<n. a i * (x - \<xi>) ^ i)" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 944 | proof (cases "0 \<le> r") | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 945 | case True | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 946 | then have *: "summable (\<lambda>n. norm (a n) * r ^ n)" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 947 | using abs_summable_in_conv_radius [of "of_real r" a] assms | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 948 | by (simp add: norm_mult norm_power) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 949 | show ?thesis | 
| 69529 | 950 | by (simp add: Weierstrass_m_test'_ev [OF _ *] norm_mult norm_power | 
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 951 | mult_left_mono power_mono dist_norm norm_minus_commute) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 952 | next | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 953 | case False then show ?thesis by (simp add: not_le) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 954 | qed | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 955 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 956 | lemma powser_uniform_limit: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 957 |   fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 958 | assumes "r < conv_radius a" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 959 | shows "uniform_limit (cball \<xi> r) (\<lambda>n x. \<Sum>i<n. a i * (x - \<xi>) ^ i) (\<lambda>x. suminf (\<lambda>i. a i * (x - \<xi>) ^ i)) sequentially" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 960 | using powser_uniformly_convergent [OF assms] | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 961 | by (simp add: Uniform_Limit.uniformly_convergent_uniform_limit_iff Series.suminf_eq_lim) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 962 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 963 | lemma powser_continuous_suminf: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 964 |   fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 965 | assumes "r < conv_radius a" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 966 | shows "continuous_on (cball \<xi> r) (\<lambda>x. suminf (\<lambda>i. a i * (x - \<xi>) ^ i))" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 967 | apply (rule uniform_limit_theorem [OF _ powser_uniform_limit]) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 968 | apply (rule eventuallyI continuous_intros assms)+ | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 969 | apply (simp add:) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 970 | done | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 971 | |
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 972 | lemma powser_continuous_sums: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 973 |   fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 974 | assumes r: "r < conv_radius a" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 975 | and sm: "\<And>x. x \<in> cball \<xi> r \<Longrightarrow> (\<lambda>n. a n * (x - \<xi>) ^ n) sums (f x)" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 976 | shows "continuous_on (cball \<xi> r) f" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 977 | apply (rule continuous_on_cong [THEN iffD1, OF refl _ powser_continuous_suminf [OF r]]) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 978 | using sm sums_unique by fastforce | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62175diff
changeset | 979 | |
| 67685 
bdff8bf0a75b
moved theorems from AFP/Affine_Arithmetic and AFP/Ordinary_Differential_Equations
 immler parents: 
67371diff
changeset | 980 | lemmas uniform_limit_subset_union = uniform_limit_on_subset[OF uniform_limit_on_Union] | 
| 
bdff8bf0a75b
moved theorems from AFP/Affine_Arithmetic and AFP/Ordinary_Differential_Equations
 immler parents: 
67371diff
changeset | 981 | |
| 62390 | 982 | end | 
| 62393 | 983 |