| author | wenzelm | 
| Sun, 27 Oct 2024 12:32:40 +0100 | |
| changeset 81275 | 5ed639c16ce7 | 
| parent 74362 | 0135a0c77b64 | 
| child 81467 | 3fab5b28027d | 
| permissions | -rw-r--r-- | 
| 63992 | 1 | (* Title: HOL/Analysis/Summation_Tests.thy | 
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 2 | Author: Manuel Eberl, TU München | 
| 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 3 | *) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 4 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 5 | section \<open>Radius of Convergence and Summation Tests\<close> | 
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 6 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 7 | theory Summation_Tests | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 8 | imports | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 9 | Complex_Main | 
| 66453 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 wenzelm parents: 
66447diff
changeset | 10 | "HOL-Library.Discrete" | 
| 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 wenzelm parents: 
66447diff
changeset | 11 | "HOL-Library.Extended_Real" | 
| 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 wenzelm parents: 
66447diff
changeset | 12 | "HOL-Library.Liminf_Limsup" | 
| 66672 | 13 | Extended_Real_Limits | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 14 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 15 | |
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 16 | text \<open> | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 17 | The definition of the radius of convergence of a power series, | 
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 18 | various summability tests, lemmas to compute the radius of convergence etc. | 
| 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 19 | \<close> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 20 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 21 | subsection \<open>Convergence tests for infinite sums\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 22 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 23 | subsubsection \<open>Root test\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 24 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 25 | lemma limsup_root_powser: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 26 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 27 | shows "limsup (\<lambda>n. ereal (root n (norm (f n * z ^ n)))) = | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 28 | limsup (\<lambda>n. ereal (root n (norm (f n)))) * ereal (norm z)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 29 | proof - | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 30 | have A: "(\<lambda>n. ereal (root n (norm (f n * z ^ n)))) = | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 31 | (\<lambda>n. ereal (root n (norm (f n))) * ereal (norm z))" (is "?g = ?h") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 32 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 33 | fix n show "?g n = ?h n" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 34 | by (cases "n = 0") (simp_all add: norm_mult real_root_mult real_root_pos2 norm_power) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 35 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 36 | show ?thesis by (subst A, subst limsup_ereal_mult_right) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 37 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 38 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 39 | lemma limsup_root_limit: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 40 | assumes "(\<lambda>n. ereal (root n (norm (f n)))) \<longlonglongrightarrow> l" (is "?g \<longlonglongrightarrow> _") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 41 | shows "limsup (\<lambda>n. ereal (root n (norm (f n)))) = l" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 42 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 43 | from assms have "convergent ?g" "lim ?g = l" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 44 | unfolding convergent_def by (blast intro: limI)+ | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 45 | with convergent_limsup_cl show ?thesis by force | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 46 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 47 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 48 | lemma limsup_root_limit': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 49 | assumes "(\<lambda>n. root n (norm (f n))) \<longlonglongrightarrow> l" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 50 | shows "limsup (\<lambda>n. ereal (root n (norm (f n)))) = ereal l" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 51 | by (intro limsup_root_limit tendsto_ereal assms) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 52 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 53 | theorem root_test_convergence': | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 54 | fixes f :: "nat \<Rightarrow> 'a :: banach" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 55 | defines "l \<equiv> limsup (\<lambda>n. ereal (root n (norm (f n))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 56 | assumes l: "l < 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 57 | shows "summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 58 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 59 | have "0 = limsup (\<lambda>n. 0)" by (simp add: Limsup_const) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 60 | also have "... \<le> l" unfolding l_def by (intro Limsup_mono) (simp_all add: real_root_ge_zero) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 61 | finally have "l \<ge> 0" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 62 | with l obtain l' where l': "l = ereal l'" by (cases l) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 63 | |
| 63040 | 64 | define c where "c = (1 - l') / 2" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 65 | from l and \<open>l \<ge> 0\<close> have c: "l + c > l" "l' + c \<ge> 0" "l' + c < 1" unfolding c_def | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 66 | by (simp_all add: field_simps l') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 67 | have "\<forall>C>l. eventually (\<lambda>n. ereal (root n (norm (f n))) < C) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 68 | by (subst Limsup_le_iff[symmetric]) (simp add: l_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 69 | with c have "eventually (\<lambda>n. ereal (root n (norm (f n))) < l + ereal c) sequentially" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 70 | with eventually_gt_at_top[of "0::nat"] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 71 | have "eventually (\<lambda>n. norm (f n) \<le> (l' + c) ^ n) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 72 | proof eventually_elim | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 73 | fix n :: nat assume n: "n > 0" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 74 | assume "ereal (root n (norm (f n))) < l + ereal c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 75 | hence "root n (norm (f n)) \<le> l' + c" by (simp add: l') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 76 | with c n have "root n (norm (f n)) ^ n \<le> (l' + c) ^ n" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 77 | by (intro power_mono) (simp_all add: real_root_ge_zero) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 78 | also from n have "root n (norm (f n)) ^ n = norm (f n)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 79 | finally show "norm (f n) \<le> (l' + c) ^ n" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 80 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 81 | thus ?thesis | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 82 | by (rule summable_comparison_test_ev[OF _ summable_geometric]) (simp add: c) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 83 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 84 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 85 | theorem root_test_divergence: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 86 | fixes f :: "nat \<Rightarrow> 'a :: banach" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 87 | defines "l \<equiv> limsup (\<lambda>n. ereal (root n (norm (f n))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 88 | assumes l: "l > 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 89 | shows "\<not>summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 90 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 91 | assume "summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 92 | hence bounded: "Bseq f" by (simp add: summable_imp_Bseq) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 93 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 94 | have "0 = limsup (\<lambda>n. 0)" by (simp add: Limsup_const) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 95 | also have "... \<le> l" unfolding l_def by (intro Limsup_mono) (simp_all add: real_root_ge_zero) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 96 | finally have l_nonneg: "l \<ge> 0" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 97 | |
| 63040 | 98 | define c where "c = (if l = \<infinity> then 2 else 1 + (real_of_ereal l - 1) / 2)" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 99 | from l l_nonneg consider "l = \<infinity>" | "\<exists>l'. l = ereal l'" by (cases l) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 100 | hence c: "c > 1 \<and> ereal c < l" by cases (insert l, auto simp: c_def field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 101 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 102 |   have unbounded: "\<not>bdd_above {n. root n (norm (f n)) > c}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 103 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 104 |     assume "bdd_above {n. root n (norm (f n)) > c}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 105 | then obtain N where "\<forall>n. root n (norm (f n)) > c \<longrightarrow> n \<le> N" unfolding bdd_above_def by blast | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 106 | hence "\<exists>N. \<forall>n\<ge>N. root n (norm (f n)) \<le> c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 107 | by (intro exI[of _ "N + 1"]) (force simp: not_less_eq_eq[symmetric]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 108 | hence "eventually (\<lambda>n. root n (norm (f n)) \<le> c) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 109 | by (auto simp: eventually_at_top_linorder) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 110 | hence "l \<le> c" unfolding l_def by (intro Limsup_bounded) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 111 | with c show False by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 112 | qed | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 113 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 114 | from bounded obtain K where K: "K > 0" "\<And>n. norm (f n) \<le> K" using BseqE by blast | 
| 63040 | 115 | define n where "n = nat \<lceil>log c K\<rceil>" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 116 | from unbounded have "\<exists>m>n. c < root m (norm (f m))" unfolding bdd_above_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 117 | by (auto simp: not_le) | 
| 74362 | 118 | then obtain m where m: "n < m" "c < root m (norm (f m))" by auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 119 | from c K have "K = c powr log c K" by (simp add: powr_def log_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 120 | also from c have "c powr log c K \<le> c powr real n" unfolding n_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 121 | by (intro powr_mono, linarith, simp) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 122 | finally have "K \<le> c ^ n" using c by (simp add: powr_realpow) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 123 | also from c m have "c ^ n < c ^ m" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 124 | also from c m have "c ^ m < root m (norm (f m)) ^ m" by (intro power_strict_mono) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 125 | also from m have "... = norm (f m)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 126 | finally show False using K(2)[of m] by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 127 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 128 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 129 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 130 | subsubsection \<open>Cauchy's condensation test\<close> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 131 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 132 | context | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 133 | fixes f :: "nat \<Rightarrow> real" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 134 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 135 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 136 | private lemma condensation_inequality: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 137 | assumes mono: "\<And>m n. 0 < m \<Longrightarrow> m \<le> n \<Longrightarrow> f n \<le> f m" | 
| 64449 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 138 | shows "(\<Sum>k=1..<n. f k) \<ge> (\<Sum>k=1..<n. f (2 * 2 ^ Discrete.log k))" (is "?thesis1") | 
| 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 139 | "(\<Sum>k=1..<n. f k) \<le> (\<Sum>k=1..<n. f (2 ^ Discrete.log k))" (is "?thesis2") | 
| 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 140 | by (intro sum_mono mono Discrete.log_exp2_ge Discrete.log_exp2_le, simp, simp)+ | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 141 | |
| 64449 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 142 | private lemma condensation_condense1: "(\<Sum>k=1..<2^n. f (2 ^ Discrete.log k)) = (\<Sum>k<n. 2^k * f (2 ^ k))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 143 | proof (induction n) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 144 | case (Suc n) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 145 |   have "{1..<2^Suc n} = {1..<2^n} \<union> {2^n..<(2^Suc n :: nat)}" by auto
 | 
| 64449 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 146 | also have "(\<Sum>k\<in>\<dots>. f (2 ^ Discrete.log k)) = | 
| 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 147 | (\<Sum>k<n. 2^k * f (2^k)) + (\<Sum>k = 2^n..<2^Suc n. f (2^Discrete.log k))" | 
| 64267 | 148 | by (subst sum.union_disjoint) (insert Suc, auto) | 
| 64449 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 149 |   also have "Discrete.log k = n" if "k \<in> {2^n..<2^Suc n}" for k using that by (intro Discrete.log_eqI) simp_all
 | 
| 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 150 | hence "(\<Sum>k = 2^n..<2^Suc n. f (2^Discrete.log k)) = (\<Sum>(_::nat) = 2^n..<2^Suc n. f (2^n))" | 
| 64267 | 151 | by (intro sum.cong) simp_all | 
| 71633 | 152 | also have "\<dots> = 2^n * f (2^n)" by (simp) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 153 | finally show ?case by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 154 | qed simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 155 | |
| 64449 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 156 | private lemma condensation_condense2: "(\<Sum>k=1..<2^n. f (2 * 2 ^ Discrete.log k)) = (\<Sum>k<n. 2^k * f (2 ^ Suc k))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 157 | proof (induction n) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 158 | case (Suc n) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 159 |   have "{1..<2^Suc n} = {1..<2^n} \<union> {2^n..<(2^Suc n :: nat)}" by auto
 | 
| 64449 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 160 | also have "(\<Sum>k\<in>\<dots>. f (2 * 2 ^ Discrete.log k)) = | 
| 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 161 | (\<Sum>k<n. 2^k * f (2^Suc k)) + (\<Sum>k = 2^n..<2^Suc n. f (2 * 2^Discrete.log k))" | 
| 64267 | 162 | by (subst sum.union_disjoint) (insert Suc, auto) | 
| 64449 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 163 |   also have "Discrete.log k = n" if "k \<in> {2^n..<2^Suc n}" for k using that by (intro Discrete.log_eqI) simp_all
 | 
| 
8c44dfb4ca8a
Merged natlog2 into Discrete.log
 eberlm <eberlm@in.tum.de> parents: 
64267diff
changeset | 164 | hence "(\<Sum>k = 2^n..<2^Suc n. f (2*2^Discrete.log k)) = (\<Sum>(_::nat) = 2^n..<2^Suc n. f (2^Suc n))" | 
| 64267 | 165 | by (intro sum.cong) simp_all | 
| 71633 | 166 | also have "\<dots> = 2^n * f (2^Suc n)" by (simp) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 167 | finally show ?case by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 168 | qed simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 169 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 170 | theorem condensation_test: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 171 | assumes mono: "\<And>m. 0 < m \<Longrightarrow> f (Suc m) \<le> f m" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 172 | assumes nonneg: "\<And>n. f n \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 173 | shows "summable f \<longleftrightarrow> summable (\<lambda>n. 2^n * f (2^n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 174 | proof - | 
| 63040 | 175 | define f' where "f' n = (if n = 0 then 0 else f n)" for n | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 176 | from mono have mono': "decseq (\<lambda>n. f (Suc n))" by (intro decseq_SucI) simp | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 177 | hence mono': "f n \<le> f m" if "m \<le> n" "m > 0" for m n | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 178 | using that decseqD[OF mono', of "m - 1" "n - 1"] by simp | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 179 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 180 | have "(\<lambda>n. f (Suc n)) = (\<lambda>n. f' (Suc n))" by (intro ext) (simp add: f'_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 181 | hence "summable f \<longleftrightarrow> summable f'" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 182 | by (subst (1 2) summable_Suc_iff [symmetric]) (simp only:) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 183 | also have "\<dots> \<longleftrightarrow> convergent (\<lambda>n. \<Sum>k<n. f' k)" unfolding summable_iff_convergent .. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 184 | also have "monoseq (\<lambda>n. \<Sum>k<n. f' k)" unfolding f'_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 185 | by (intro mono_SucI1) (auto intro!: mult_nonneg_nonneg nonneg) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 186 | hence "convergent (\<lambda>n. \<Sum>k<n. f' k) \<longleftrightarrow> Bseq (\<lambda>n. \<Sum>k<n. f' k)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 187 | by (rule monoseq_imp_convergent_iff_Bseq) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 188 | also have "\<dots> \<longleftrightarrow> Bseq (\<lambda>n. \<Sum>k=1..<n. f' k)" unfolding One_nat_def | 
| 64267 | 189 | by (subst sum_shift_lb_Suc0_0_upt) (simp_all add: f'_def atLeast0LessThan) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 190 | also have "\<dots> \<longleftrightarrow> Bseq (\<lambda>n. \<Sum>k=1..<n. f k)" unfolding f'_def by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 191 | also have "\<dots> \<longleftrightarrow> Bseq (\<lambda>n. \<Sum>k=1..<2^n. f k)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 192 | by (rule nonneg_incseq_Bseq_subseq_iff[symmetric]) | 
| 66447 
a1f5c5c26fa6
Replaced subseq with strict_mono
 eberlm <eberlm@in.tum.de> parents: 
65578diff
changeset | 193 | (auto intro!: sum_nonneg incseq_SucI nonneg simp: strict_mono_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 194 | also have "\<dots> \<longleftrightarrow> Bseq (\<lambda>n. \<Sum>k<n. 2^k * f (2^k))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 195 | proof (intro iffI) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 196 | assume A: "Bseq (\<lambda>n. \<Sum>k=1..<2^n. f k)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 197 | have "eventually (\<lambda>n. norm (\<Sum>k<n. 2^k * f (2^Suc k)) \<le> norm (\<Sum>k=1..<2^n. f k)) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 198 | proof (intro always_eventually allI) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 199 | fix n :: nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 200 | have "norm (\<Sum>k<n. 2^k * f (2^Suc k)) = (\<Sum>k<n. 2^k * f (2^Suc k))" unfolding real_norm_def | 
| 64267 | 201 | by (intro abs_of_nonneg sum_nonneg ballI mult_nonneg_nonneg nonneg) simp_all | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 202 | also have "\<dots> \<le> (\<Sum>k=1..<2^n. f k)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 203 | by (subst condensation_condense2 [symmetric]) (intro condensation_inequality mono') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 204 | also have "\<dots> = norm \<dots>" unfolding real_norm_def | 
| 64267 | 205 | by (intro abs_of_nonneg[symmetric] sum_nonneg ballI mult_nonneg_nonneg nonneg) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 206 | finally show "norm (\<Sum>k<n. 2 ^ k * f (2 ^ Suc k)) \<le> norm (\<Sum>k=1..<2^n. f k)" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 207 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 208 | from this and A have "Bseq (\<lambda>n. \<Sum>k<n. 2^k * f (2^Suc k))" by (rule Bseq_eventually_mono) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 209 | from Bseq_mult[OF Bfun_const[of 2] this] have "Bseq (\<lambda>n. \<Sum>k<n. 2^Suc k * f (2^Suc k))" | 
| 64267 | 210 | by (simp add: sum_distrib_left sum_distrib_right mult_ac) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 211 | hence "Bseq (\<lambda>n. (\<Sum>k=Suc 0..<Suc n. 2^k * f (2^k)) + f 1)" | 
| 70113 
c8deb8ba6d05
Fixing the main Homology theory; also moving a lot of sum/prod lemmas into their generic context
 paulson <lp15@cam.ac.uk> parents: 
70097diff
changeset | 212 | by (intro Bseq_add, subst sum.shift_bounds_Suc_ivl) (simp add: atLeast0LessThan) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 213 | hence "Bseq (\<lambda>n. (\<Sum>k=0..<Suc n. 2^k * f (2^k)))" | 
| 70097 
4005298550a6
The last big tranche of Homology material: invariance of domain; renamings to use generic sum/prod lemmas from their locale
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 214 | by (subst sum.atLeast_Suc_lessThan) (simp_all add: add_ac) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 215 | thus "Bseq (\<lambda>n. (\<Sum>k<n. 2^k * f (2^k)))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 216 | by (subst (asm) Bseq_Suc_iff) (simp add: atLeast0LessThan) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 217 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 218 | assume A: "Bseq (\<lambda>n. (\<Sum>k<n. 2^k * f (2^k)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 219 | have "eventually (\<lambda>n. norm (\<Sum>k=1..<2^n. f k) \<le> norm (\<Sum>k<n. 2^k * f (2^k))) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 220 | proof (intro always_eventually allI) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 221 | fix n :: nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 222 | have "norm (\<Sum>k=1..<2^n. f k) = (\<Sum>k=1..<2^n. f k)" unfolding real_norm_def | 
| 64267 | 223 | by (intro abs_of_nonneg sum_nonneg ballI mult_nonneg_nonneg nonneg) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 224 | also have "\<dots> \<le> (\<Sum>k<n. 2^k * f (2^k))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 225 | by (subst condensation_condense1 [symmetric]) (intro condensation_inequality mono') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 226 | also have "\<dots> = norm \<dots>" unfolding real_norm_def | 
| 64267 | 227 | by (intro abs_of_nonneg [symmetric] sum_nonneg ballI mult_nonneg_nonneg nonneg) simp_all | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 228 | finally show "norm (\<Sum>k=1..<2^n. f k) \<le> norm (\<Sum>k<n. 2^k * f (2^k))" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 229 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 230 | from this and A show "Bseq (\<lambda>n. \<Sum>k=1..<2^n. f k)" by (rule Bseq_eventually_mono) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 231 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 232 | also have "monoseq (\<lambda>n. (\<Sum>k<n. 2^k * f (2^k)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 233 | by (intro mono_SucI1) (auto intro!: mult_nonneg_nonneg nonneg) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 234 | hence "Bseq (\<lambda>n. (\<Sum>k<n. 2^k * f (2^k))) \<longleftrightarrow> convergent (\<lambda>n. (\<Sum>k<n. 2^k * f (2^k)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 235 | by (rule monoseq_imp_convergent_iff_Bseq [symmetric]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 236 | also have "\<dots> \<longleftrightarrow> summable (\<lambda>k. 2^k * f (2^k))" by (simp only: summable_iff_convergent) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 237 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 238 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 239 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 240 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 241 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 242 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 243 | subsubsection \<open>Summability of powers\<close> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 244 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 245 | lemma abs_summable_complex_powr_iff: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 246 | "summable (\<lambda>n. norm (exp (of_real (ln (of_nat n)) * s))) \<longleftrightarrow> Re s < -1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 247 | proof (cases "Re s \<le> 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 248 | let ?l = "\<lambda>n. complex_of_real (ln (of_nat n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 249 | case False | 
| 65578 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 250 | have "eventually (\<lambda>n. norm (1 :: real) \<le> norm (exp (?l n * s))) sequentially" | 
| 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 251 | apply (rule eventually_mono [OF eventually_gt_at_top[of "0::nat"]]) | 
| 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 252 | using False ge_one_powr_ge_zero by auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 253 | from summable_comparison_test_ev[OF this] False show ?thesis by (auto simp: summable_const_iff) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 254 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 255 | let ?l = "\<lambda>n. complex_of_real (ln (of_nat n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 256 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 257 | hence "summable (\<lambda>n. norm (exp (?l n * s))) \<longleftrightarrow> summable (\<lambda>n. 2^n * norm (exp (?l (2^n) * s)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 258 | by (intro condensation_test) (auto intro!: mult_right_mono_neg) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 259 | also have "(\<lambda>n. 2^n * norm (exp (?l (2^n) * s))) = (\<lambda>n. (2 powr (Re s + 1)) ^ n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 260 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 261 | fix n :: nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 262 | have "2^n * norm (exp (?l (2^n) * s)) = exp (real n * ln 2) * exp (real n * ln 2 * Re s)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 263 | using True by (subst exp_of_nat_mult) (simp add: ln_realpow algebra_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 264 | also have "\<dots> = exp (real n * (ln 2 * (Re s + 1)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 265 | by (simp add: algebra_simps exp_add) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 266 | also have "\<dots> = exp (ln 2 * (Re s + 1)) ^ n" by (subst exp_of_nat_mult) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 267 | also have "exp (ln 2 * (Re s + 1)) = 2 powr (Re s + 1)" by (simp add: powr_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 268 | finally show "2^n * norm (exp (?l (2^n) * s)) = (2 powr (Re s + 1)) ^ n" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 269 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 270 | also have "summable \<dots> \<longleftrightarrow> 2 powr (Re s + 1) < 2 powr 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 271 | by (subst summable_geometric_iff) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 272 | also have "\<dots> \<longleftrightarrow> Re s < -1" by (subst powr_less_cancel_iff) (simp, linarith) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 273 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 274 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 275 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 276 | theorem summable_complex_powr_iff: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 277 | assumes "Re s < -1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 278 | shows "summable (\<lambda>n. exp (of_real (ln (of_nat n)) * s))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 279 | by (rule summable_norm_cancel, subst abs_summable_complex_powr_iff) fact | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 280 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 281 | lemma summable_real_powr_iff: "summable (\<lambda>n. of_nat n powr s :: real) \<longleftrightarrow> s < -1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 282 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 283 | from eventually_gt_at_top[of "0::nat"] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 284 | have "summable (\<lambda>n. of_nat n powr s) \<longleftrightarrow> summable (\<lambda>n. exp (ln (of_nat n) * s))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 285 | by (intro summable_cong) (auto elim!: eventually_mono simp: powr_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 286 | also have "\<dots> \<longleftrightarrow> s < -1" using abs_summable_complex_powr_iff[of "of_real s"] by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 287 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 288 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 289 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 290 | lemma inverse_power_summable: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 291 | assumes s: "s \<ge> 2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 292 |   shows "summable (\<lambda>n. inverse (of_nat n ^ s :: 'a :: {real_normed_div_algebra,banach}))"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 293 | proof (rule summable_norm_cancel, subst summable_cong) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 294 | from eventually_gt_at_top[of "0::nat"] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 295 | show "eventually (\<lambda>n. norm (inverse (of_nat n ^ s:: 'a)) = real_of_nat n powr (-real s)) at_top" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 296 | by eventually_elim (simp add: norm_inverse norm_power powr_minus powr_realpow) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 297 | qed (insert s summable_real_powr_iff[of "-s"], simp_all) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 298 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 299 | lemma not_summable_harmonic: "\<not>summable (\<lambda>n. inverse (of_nat n) :: 'a :: real_normed_field)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 300 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 301 | assume "summable (\<lambda>n. inverse (of_nat n) :: 'a)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 302 | hence "convergent (\<lambda>n. norm (of_real (\<Sum>k<n. inverse (of_nat k)) :: 'a))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 303 | by (simp add: summable_iff_convergent convergent_norm) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 304 | hence "convergent (\<lambda>n. abs (\<Sum>k<n. inverse (of_nat k)) :: real)" by (simp only: norm_of_real) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 305 | also have "(\<lambda>n. abs (\<Sum>k<n. inverse (of_nat k)) :: real) = (\<lambda>n. \<Sum>k<n. inverse (of_nat k))" | 
| 64267 | 306 | by (intro ext abs_of_nonneg sum_nonneg) auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 307 | also have "convergent \<dots> \<longleftrightarrow> summable (\<lambda>k. inverse (of_nat k) :: real)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 308 | by (simp add: summable_iff_convergent) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 309 | finally show False using summable_real_powr_iff[of "-1"] by (simp add: powr_minus) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 310 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 311 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 312 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 313 | subsubsection \<open>Kummer's test\<close> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 314 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 315 | theorem kummers_test_convergence: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 316 | fixes f p :: "nat \<Rightarrow> real" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 317 | assumes pos_f: "eventually (\<lambda>n. f n > 0) sequentially" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 318 | assumes nonneg_p: "eventually (\<lambda>n. p n \<ge> 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 319 | defines "l \<equiv> liminf (\<lambda>n. ereal (p n * f n / f (Suc n) - p (Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 320 | assumes l: "l > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 321 | shows "summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 322 | unfolding summable_iff_convergent' | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 323 | proof - | 
| 63040 | 324 | define r where "r = (if l = \<infinity> then 1 else real_of_ereal l / 2)" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 325 | from l have "r > 0 \<and> of_real r < l" by (cases l) (simp_all add: r_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 326 | hence r: "r > 0" "of_real r < l" by simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 327 | hence "eventually (\<lambda>n. p n * f n / f (Suc n) - p (Suc n) > r) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 328 | unfolding l_def by (force dest: less_LiminfD) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 329 | moreover from pos_f have "eventually (\<lambda>n. f (Suc n) > 0) sequentially" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 330 | by (subst eventually_sequentially_Suc) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 331 | ultimately have "eventually (\<lambda>n. p n * f n - p (Suc n) * f (Suc n) > r * f (Suc n)) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 332 | by eventually_elim (simp add: field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 333 | from eventually_conj[OF pos_f eventually_conj[OF nonneg_p this]] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 334 | obtain m where m: "\<And>n. n \<ge> m \<Longrightarrow> f n > 0" "\<And>n. n \<ge> m \<Longrightarrow> p n \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 335 | "\<And>n. n \<ge> m \<Longrightarrow> p n * f n - p (Suc n) * f (Suc n) > r * f (Suc n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 336 | unfolding eventually_at_top_linorder by blast | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 337 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 338 | let ?c = "(norm (\<Sum>k\<le>m. r * f k) + p m * f m) / r" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 339 | have "Bseq (\<lambda>n. (\<Sum>k\<le>n + Suc m. f k))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 340 | proof (rule BseqI') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 341 | fix k :: nat | 
| 63040 | 342 | define n where "n = k + Suc m" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 343 | have n: "n > m" by (simp add: n_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 344 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 345 | from r have "r * norm (\<Sum>k\<le>n. f k) = norm (\<Sum>k\<le>n. r * f k)" | 
| 64267 | 346 | by (simp add: sum_distrib_left[symmetric] abs_mult) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 347 |     also from n have "{..n} = {..m} \<union> {Suc m..n}" by auto
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 348 |     hence "(\<Sum>k\<le>n. r * f k) = (\<Sum>k\<in>{..m} \<union> {Suc m..n}. r * f k)" by (simp only:)
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 349 | also have "\<dots> = (\<Sum>k\<le>m. r * f k) + (\<Sum>k=Suc m..n. r * f k)" | 
| 64267 | 350 | by (subst sum.union_disjoint) auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 351 | also have "norm \<dots> \<le> norm (\<Sum>k\<le>m. r * f k) + norm (\<Sum>k=Suc m..n. r * f k)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 352 | by (rule norm_triangle_ineq) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 353 | also from r less_imp_le[OF m(1)] have "(\<Sum>k=Suc m..n. r * f k) \<ge> 0" | 
| 64267 | 354 | by (intro sum_nonneg) auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 355 | hence "norm (\<Sum>k=Suc m..n. r * f k) = (\<Sum>k=Suc m..n. r * f k)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 356 | also have "(\<Sum>k=Suc m..n. r * f k) = (\<Sum>k=m..<n. r * f (Suc k))" | 
| 70113 
c8deb8ba6d05
Fixing the main Homology theory; also moving a lot of sum/prod lemmas into their generic context
 paulson <lp15@cam.ac.uk> parents: 
70097diff
changeset | 357 | by (subst sum.shift_bounds_Suc_ivl [symmetric]) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 358 | (simp only: atLeastLessThanSuc_atLeastAtMost) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 359 | also from m have "\<dots> \<le> (\<Sum>k=m..<n. p k * f k - p (Suc k) * f (Suc k))" | 
| 64267 | 360 | by (intro sum_mono[OF less_imp_le]) simp_all | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 361 | also have "\<dots> = -(\<Sum>k=m..<n. p (Suc k) * f (Suc k) - p k * f k)" | 
| 64267 | 362 | by (simp add: sum_negf [symmetric] algebra_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 363 | also from n have "\<dots> = p m * f m - p n * f n" | 
| 64267 | 364 | by (cases n, simp, simp only: atLeastLessThanSuc_atLeastAtMost, subst sum_Suc_diff) simp_all | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 365 | also from less_imp_le[OF m(1)] m(2) n have "\<dots> \<le> p m * f m" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 366 | finally show "norm (\<Sum>k\<le>n. f k) \<le> (norm (\<Sum>k\<le>m. r * f k) + p m * f m) / r" using r | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 367 | by (subst pos_le_divide_eq[OF r(1)]) (simp only: mult_ac) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 368 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 369 | moreover have "(\<Sum>k\<le>n. f k) \<le> (\<Sum>k\<le>n'. f k)" if "Suc m \<le> n" "n \<le> n'" for n n' | 
| 64267 | 370 | using less_imp_le[OF m(1)] that by (intro sum_mono2) auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 371 | ultimately show "convergent (\<lambda>n. \<Sum>k\<le>n. f k)" by (rule Bseq_monoseq_convergent'_inc) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 372 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 373 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 374 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 375 | theorem kummers_test_divergence: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 376 | fixes f p :: "nat \<Rightarrow> real" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 377 | assumes pos_f: "eventually (\<lambda>n. f n > 0) sequentially" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 378 | assumes pos_p: "eventually (\<lambda>n. p n > 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 379 | assumes divergent_p: "\<not>summable (\<lambda>n. inverse (p n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 380 | defines "l \<equiv> limsup (\<lambda>n. ereal (p n * f n / f (Suc n) - p (Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 381 | assumes l: "l < 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 382 | shows "\<not>summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 383 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 384 | assume "summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 385 | from eventually_conj[OF pos_f eventually_conj[OF pos_p Limsup_lessD[OF l[unfolded l_def]]]] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 386 | obtain N where N: "\<And>n. n \<ge> N \<Longrightarrow> p n > 0" "\<And>n. n \<ge> N \<Longrightarrow> f n > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 387 | "\<And>n. n \<ge> N \<Longrightarrow> p n * f n / f (Suc n) - p (Suc n) < 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 388 | by (auto simp: eventually_at_top_linorder) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 389 | hence A: "p n * f n < p (Suc n) * f (Suc n)" if "n \<ge> N" for n using that N[of n] N[of "Suc n"] | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 390 | by (simp add: field_simps) | 
| 65578 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 391 | have B: "p n * f n \<ge> p N * f N" if "n \<ge> N" for n using that and A | 
| 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 392 | by (induction n rule: dec_induct) (auto intro!: less_imp_le elim!: order.trans) | 
| 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 393 | have "eventually (\<lambda>n. norm (p N * f N * inverse (p n)) \<le> f n) sequentially" | 
| 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 394 | apply (rule eventually_mono [OF eventually_ge_at_top[of N]]) | 
| 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 395 | using B N by (auto simp: field_simps abs_of_pos) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 396 | from this and \<open>summable f\<close> have "summable (\<lambda>n. p N * f N * inverse (p n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 397 | by (rule summable_comparison_test_ev) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 398 | from summable_mult[OF this, of "inverse (p N * f N)"] N[OF le_refl] | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 399 | have "summable (\<lambda>n. inverse (p n))" by (simp add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 400 | with divergent_p show False by contradiction | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 401 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 402 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 403 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 404 | subsubsection \<open>Ratio test\<close> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 405 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 406 | theorem ratio_test_convergence: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 407 | fixes f :: "nat \<Rightarrow> real" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 408 | assumes pos_f: "eventually (\<lambda>n. f n > 0) sequentially" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 409 | defines "l \<equiv> liminf (\<lambda>n. ereal (f n / f (Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 410 | assumes l: "l > 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 411 | shows "summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 412 | proof (rule kummers_test_convergence[OF pos_f]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 413 | note l | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 414 | also have "l = liminf (\<lambda>n. ereal (f n / f (Suc n) - 1)) + 1" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 415 | by (subst Liminf_add_ereal_right[symmetric]) (simp_all add: minus_ereal_def l_def one_ereal_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 416 | finally show "liminf (\<lambda>n. ereal (1 * f n / f (Suc n) - 1)) > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 417 | by (cases "liminf (\<lambda>n. ereal (1 * f n / f (Suc n) - 1))") simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 418 | qed simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 419 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 420 | theorem ratio_test_divergence: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 421 | fixes f :: "nat \<Rightarrow> real" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 422 | assumes pos_f: "eventually (\<lambda>n. f n > 0) sequentially" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 423 | defines "l \<equiv> limsup (\<lambda>n. ereal (f n / f (Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 424 | assumes l: "l < 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 425 | shows "\<not>summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 426 | proof (rule kummers_test_divergence[OF pos_f]) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 427 | have "limsup (\<lambda>n. ereal (f n / f (Suc n) - 1)) + 1 = l" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 428 | by (subst Limsup_add_ereal_right[symmetric]) (simp_all add: minus_ereal_def l_def one_ereal_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 429 | also note l | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 430 | finally show "limsup (\<lambda>n. ereal (1 * f n / f (Suc n) - 1)) < 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 431 | by (cases "limsup (\<lambda>n. ereal (1 * f n / f (Suc n) - 1))") simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 432 | qed (simp_all add: summable_const_iff) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 433 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 434 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 435 | subsubsection \<open>Raabe's test\<close> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 436 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 437 | theorem raabes_test_convergence: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 438 | fixes f :: "nat \<Rightarrow> real" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 439 | assumes pos: "eventually (\<lambda>n. f n > 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 440 | defines "l \<equiv> liminf (\<lambda>n. ereal (of_nat n * (f n / f (Suc n) - 1)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 441 | assumes l: "l > 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 442 | shows "summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 443 | proof (rule kummers_test_convergence) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 444 | let ?l' = "liminf (\<lambda>n. ereal (of_nat n * f n / f (Suc n) - of_nat (Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 445 | have "1 < l" by fact | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 446 | also have "l = liminf (\<lambda>n. ereal (of_nat n * f n / f (Suc n) - of_nat (Suc n)) + 1)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 447 | by (simp add: l_def algebra_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 448 | also have "\<dots> = ?l' + 1" by (subst Liminf_add_ereal_right) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 449 | finally show "?l' > 0" by (cases ?l') (simp_all add: algebra_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 450 | qed (simp_all add: pos) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 451 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 452 | theorem raabes_test_divergence: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 453 | fixes f :: "nat \<Rightarrow> real" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 454 | assumes pos: "eventually (\<lambda>n. f n > 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 455 | defines "l \<equiv> limsup (\<lambda>n. ereal (of_nat n * (f n / f (Suc n) - 1)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 456 | assumes l: "l < 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 457 | shows "\<not>summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 458 | proof (rule kummers_test_divergence) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 459 | let ?l' = "limsup (\<lambda>n. ereal (of_nat n * f n / f (Suc n) - of_nat (Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 460 | note l | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 461 | also have "l = limsup (\<lambda>n. ereal (of_nat n * f n / f (Suc n) - of_nat (Suc n)) + 1)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 462 | by (simp add: l_def algebra_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 463 | also have "\<dots> = ?l' + 1" by (subst Limsup_add_ereal_right) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 464 | finally show "?l' < 0" by (cases ?l') (simp_all add: algebra_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 465 | qed (insert pos eventually_gt_at_top[of "0::nat"] not_summable_harmonic, simp_all) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 466 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 467 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 468 | subsection \<open>Radius of convergence\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 469 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 470 | text \<open> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 471 | The radius of convergence of a power series. This value always exists, ranges from | 
| 69597 | 472 | \<^term>\<open>0::ereal\<close> to \<^term>\<open>\<infinity>::ereal\<close>, and the power series is guaranteed to converge for | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 473 | all inputs with a norm that is smaller than that radius and to diverge for all inputs with a | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 474 | norm that is greater. | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 475 | \<close> | 
| 70136 | 476 | definition\<^marker>\<open>tag important\<close> conv_radius :: "(nat \<Rightarrow> 'a :: banach) \<Rightarrow> ereal" where | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 477 | "conv_radius f = inverse (limsup (\<lambda>n. ereal (root n (norm (f n)))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 478 | |
| 66466 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 479 | lemma conv_radius_cong_weak [cong]: "(\<And>n. f n = g n) \<Longrightarrow> conv_radius f = conv_radius g" | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 480 | by (drule ext) simp_all | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 481 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 482 | lemma conv_radius_nonneg: "conv_radius f \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 483 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 484 | have "0 = limsup (\<lambda>n. 0)" by (subst Limsup_const) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 485 | also have "\<dots> \<le> limsup (\<lambda>n. ereal (root n (norm (f n))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 486 | by (intro Limsup_mono) (simp_all add: real_root_ge_zero) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 487 | finally show ?thesis | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 488 | unfolding conv_radius_def by (auto simp: ereal_inverse_nonneg_iff) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 489 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 490 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 491 | lemma conv_radius_zero [simp]: "conv_radius (\<lambda>_. 0) = \<infinity>" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 492 | by (auto simp: conv_radius_def zero_ereal_def [symmetric] Limsup_const) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 493 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 494 | lemma conv_radius_altdef: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 495 | "conv_radius f = liminf (\<lambda>n. inverse (ereal (root n (norm (f n)))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 496 | by (subst Liminf_inverse_ereal) (simp_all add: real_root_ge_zero conv_radius_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 497 | |
| 66466 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 498 | lemma conv_radius_cong': | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 499 | assumes "eventually (\<lambda>x. f x = g x) sequentially" | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 500 | shows "conv_radius f = conv_radius g" | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 501 | unfolding conv_radius_altdef by (intro Liminf_eq eventually_mono [OF assms]) auto | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 502 | |
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 503 | lemma conv_radius_cong: | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 504 | assumes "eventually (\<lambda>x. norm (f x) = norm (g x)) sequentially" | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 505 | shows "conv_radius f = conv_radius g" | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 506 | unfolding conv_radius_altdef by (intro Liminf_eq eventually_mono [OF assms]) auto | 
| 
aec5d9c88d69
More lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66456diff
changeset | 507 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 508 | theorem abs_summable_in_conv_radius: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 509 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 510 | assumes "ereal (norm z) < conv_radius f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 511 | shows "summable (\<lambda>n. norm (f n * z ^ n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 512 | proof (rule root_test_convergence') | 
| 63040 | 513 | define l where "l = limsup (\<lambda>n. ereal (root n (norm (f n))))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 514 | have "0 = limsup (\<lambda>n. 0)" by (simp add: Limsup_const) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 515 | also have "... \<le> l" unfolding l_def by (intro Limsup_mono) (simp_all add: real_root_ge_zero) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 516 | finally have l_nonneg: "l \<ge> 0" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 517 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 518 | have "limsup (\<lambda>n. root n (norm (f n * z^n))) = l * ereal (norm z)" unfolding l_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 519 | by (rule limsup_root_powser) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 520 | also from l_nonneg consider "l = 0" | "l = \<infinity>" | "\<exists>l'. l = ereal l' \<and> l' > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 521 | by (cases "l") (auto simp: less_le) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 522 | hence "l * ereal (norm z) < 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 523 | proof cases | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 524 | assume "l = \<infinity>" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 525 | hence "conv_radius f = 0" unfolding conv_radius_def l_def by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 526 | with assms show ?thesis by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 527 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 528 | assume "\<exists>l'. l = ereal l' \<and> l' > 0" | 
| 74362 | 529 | then obtain l' where l': "l = ereal l'" "0 < l'" by auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 530 | hence "l \<noteq> \<infinity>" by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 531 | have "l * ereal (norm z) < l * conv_radius f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 532 | by (intro ereal_mult_strict_left_mono) (simp_all add: l' assms) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 533 | also have "conv_radius f = inverse l" by (simp add: conv_radius_def l_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 534 | also from l' have "l * inverse l = 1" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 535 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 536 | qed simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 537 | finally show "limsup (\<lambda>n. ereal (root n (norm (norm (f n * z ^ n))))) < 1" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 538 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 539 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 540 | lemma summable_in_conv_radius: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 541 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 542 | assumes "ereal (norm z) < conv_radius f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 543 | shows "summable (\<lambda>n. f n * z ^ n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 544 | by (rule summable_norm_cancel, rule abs_summable_in_conv_radius) fact+ | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 545 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68532diff
changeset | 546 | theorem not_summable_outside_conv_radius: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 547 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 548 | assumes "ereal (norm z) > conv_radius f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 549 | shows "\<not>summable (\<lambda>n. f n * z ^ n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 550 | proof (rule root_test_divergence) | 
| 63040 | 551 | define l where "l = limsup (\<lambda>n. ereal (root n (norm (f n))))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 552 | have "0 = limsup (\<lambda>n. 0)" by (simp add: Limsup_const) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 553 | also have "... \<le> l" unfolding l_def by (intro Limsup_mono) (simp_all add: real_root_ge_zero) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 554 | finally have l_nonneg: "l \<ge> 0" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 555 | from assms have l_nz: "l \<noteq> 0" unfolding conv_radius_def l_def by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 556 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 557 | have "limsup (\<lambda>n. ereal (root n (norm (f n * z^n)))) = l * ereal (norm z)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 558 | unfolding l_def by (rule limsup_root_powser) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 559 | also have "... > 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 560 | proof (cases l) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 561 | assume "l = \<infinity>" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 562 | with assms conv_radius_nonneg[of f] show ?thesis | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 563 | by (auto simp: zero_ereal_def[symmetric]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 564 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 565 | fix l' assume l': "l = ereal l'" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 566 | from l_nonneg l_nz have "1 = l * inverse l" by (auto simp: l' field_simps) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 567 | also from l_nz have "inverse l = conv_radius f" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 568 | unfolding l_def conv_radius_def by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 569 | also from l' l_nz l_nonneg assms have "l * \<dots> < l * ereal (norm z)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 570 | by (intro ereal_mult_strict_left_mono) (auto simp: l') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 571 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 572 | qed (insert l_nonneg, simp_all) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 573 | finally show "limsup (\<lambda>n. ereal (root n (norm (f n * z^n)))) > 1" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 574 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 575 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 576 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 577 | lemma conv_radius_geI: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 578 |   assumes "summable (\<lambda>n. f n * z ^ n :: 'a :: {banach, real_normed_div_algebra})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 579 | shows "conv_radius f \<ge> norm z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 580 | using not_summable_outside_conv_radius[of f z] assms by (force simp: not_le[symmetric]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 581 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 582 | lemma conv_radius_leI: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 583 |   assumes "\<not>summable (\<lambda>n. norm (f n * z ^ n :: 'a :: {banach, real_normed_div_algebra}))"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 584 | shows "conv_radius f \<le> norm z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 585 | using abs_summable_in_conv_radius[of z f] assms by (force simp: not_le[symmetric]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 586 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 587 | lemma conv_radius_leI': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 588 |   assumes "\<not>summable (\<lambda>n. f n * z ^ n :: 'a :: {banach, real_normed_div_algebra})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 589 | shows "conv_radius f \<le> norm z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 590 | using summable_in_conv_radius[of z f] assms by (force simp: not_le[symmetric]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 591 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 592 | lemma conv_radius_geI_ex: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 593 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 594 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r < R \<Longrightarrow> \<exists>z. norm z = r \<and> summable (\<lambda>n. f n * z^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 595 | shows "conv_radius f \<ge> R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 596 | proof (rule linorder_cases[of "conv_radius f" R]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 597 | assume R: "conv_radius f < R" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 598 | with conv_radius_nonneg[of f] obtain conv_radius' | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 599 | where [simp]: "conv_radius f = ereal conv_radius'" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 600 | by (cases "conv_radius f") simp_all | 
| 63040 | 601 | define r where "r = (if R = \<infinity> then conv_radius' + 1 else (real_of_ereal R + conv_radius') / 2)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 602 | from R conv_radius_nonneg[of f] have "0 < r \<and> ereal r < R \<and> ereal r > conv_radius f" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 603 | unfolding r_def by (cases R) (auto simp: r_def field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 604 | with assms(1)[of r] obtain z where "norm z > conv_radius f" "summable (\<lambda>n. f n * z^n)" by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 605 | with not_summable_outside_conv_radius[of f z] show ?thesis by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 606 | qed simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 607 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 608 | lemma conv_radius_geI_ex': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 609 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 610 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r < R \<Longrightarrow> summable (\<lambda>n. f n * of_real r^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 611 | shows "conv_radius f \<ge> R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 612 | proof (rule conv_radius_geI_ex) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 613 | fix r assume "0 < r" "ereal r < R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 614 | with assms[of r] show "\<exists>z. norm z = r \<and> summable (\<lambda>n. f n * z ^ n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 615 | by (intro exI[of _ "of_real r :: 'a"]) auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 616 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 617 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 618 | lemma conv_radius_leI_ex: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 619 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 620 | assumes "R \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 621 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r > R \<Longrightarrow> \<exists>z. norm z = r \<and> \<not>summable (\<lambda>n. norm (f n * z^n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 622 | shows "conv_radius f \<le> R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 623 | proof (rule linorder_cases[of "conv_radius f" R]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 624 | assume R: "conv_radius f > R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 625 | from R assms(1) obtain R' where R': "R = ereal R'" by (cases R) simp_all | 
| 63040 | 626 | define r where | 
| 627 | "r = (if conv_radius f = \<infinity> then R' + 1 else (R' + real_of_ereal (conv_radius f)) / 2)" | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 628 | from R conv_radius_nonneg[of f] have "r > R \<and> r < conv_radius f" unfolding r_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 629 | by (cases "conv_radius f") (auto simp: r_def field_simps R') | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 630 | with assms(1) assms(2)[of r] R' | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 631 | obtain z where "norm z < conv_radius f" "\<not>summable (\<lambda>n. norm (f n * z^n))" by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 632 | with abs_summable_in_conv_radius[of z f] show ?thesis by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 633 | qed simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 634 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 635 | lemma conv_radius_leI_ex': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 636 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 637 | assumes "R \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 638 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r > R \<Longrightarrow> \<not>summable (\<lambda>n. f n * of_real r^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 639 | shows "conv_radius f \<le> R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 640 | proof (rule conv_radius_leI_ex) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 641 | fix r assume "0 < r" "ereal r > R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 642 | with assms(2)[of r] show "\<exists>z. norm z = r \<and> \<not>summable (\<lambda>n. norm (f n * z ^ n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 643 | by (intro exI[of _ "of_real r :: 'a"]) (auto dest: summable_norm_cancel) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 644 | qed fact+ | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 645 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 646 | lemma conv_radius_eqI: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 647 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 648 | assumes "R \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 649 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r < R \<Longrightarrow> \<exists>z. norm z = r \<and> summable (\<lambda>n. f n * z^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 650 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r > R \<Longrightarrow> \<exists>z. norm z = r \<and> \<not>summable (\<lambda>n. norm (f n * z^n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 651 | shows "conv_radius f = R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 652 | by (intro antisym conv_radius_geI_ex conv_radius_leI_ex assms) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 653 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 654 | lemma conv_radius_eqI': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 655 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 656 | assumes "R \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 657 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r < R \<Longrightarrow> summable (\<lambda>n. f n * (of_real r)^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 658 | assumes "\<And>r. 0 < r \<Longrightarrow> ereal r > R \<Longrightarrow> \<not>summable (\<lambda>n. norm (f n * (of_real r)^n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 659 | shows "conv_radius f = R" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 660 | proof (intro conv_radius_eqI[OF assms(1)]) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 661 | fix r assume "0 < r" "ereal r < R" with assms(2)[OF this] | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 662 | show "\<exists>z. norm z = r \<and> summable (\<lambda>n. f n * z ^ n)" by force | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 663 | next | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 664 | fix r assume "0 < r" "ereal r > R" with assms(3)[OF this] | 
| 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 665 | show "\<exists>z. norm z = r \<and> \<not>summable (\<lambda>n. norm (f n * z ^ n))" by force | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 666 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 667 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 668 | lemma conv_radius_zeroI: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 669 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 670 | assumes "\<And>z. z \<noteq> 0 \<Longrightarrow> \<not>summable (\<lambda>n. f n * z^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 671 | shows "conv_radius f = 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 672 | proof (rule ccontr) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 673 | assume "conv_radius f \<noteq> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 674 | with conv_radius_nonneg[of f] have pos: "conv_radius f > 0" by simp | 
| 63040 | 675 | define r where "r = (if conv_radius f = \<infinity> then 1 else real_of_ereal (conv_radius f) / 2)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 676 | from pos have r: "ereal r > 0 \<and> ereal r < conv_radius f" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 677 | by (cases "conv_radius f") (simp_all add: r_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 678 | hence "summable (\<lambda>n. f n * of_real r ^ n)" by (intro summable_in_conv_radius) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 679 | moreover from r and assms[of "of_real r"] have "\<not>summable (\<lambda>n. f n * of_real r ^ n)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 680 | ultimately show False by contradiction | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 681 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 682 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 683 | lemma conv_radius_inftyI': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 684 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 685 | assumes "\<And>r. r > c \<Longrightarrow> \<exists>z. norm z = r \<and> summable (\<lambda>n. f n * z^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 686 | shows "conv_radius f = \<infinity>" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 687 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 688 |   {
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 689 | fix r :: real | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 690 | have "max r (c + 1) > c" by (auto simp: max_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 691 | from assms[OF this] obtain z where "norm z = max r (c + 1)" "summable (\<lambda>n. f n * z^n)" by blast | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 692 | from conv_radius_geI[OF this(2)] this(1) have "conv_radius f \<ge> r" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 693 | } | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 694 | from this[of "real_of_ereal (conv_radius f + 1)"] show "conv_radius f = \<infinity>" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 695 | by (cases "conv_radius f") simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 696 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 697 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 698 | lemma conv_radius_inftyI: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 699 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 700 | assumes "\<And>r. \<exists>z. norm z = r \<and> summable (\<lambda>n. f n * z^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 701 | shows "conv_radius f = \<infinity>" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 702 | using assms by (rule conv_radius_inftyI') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 703 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 704 | lemma conv_radius_inftyI'': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 705 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 706 | assumes "\<And>z. summable (\<lambda>n. f n * z^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 707 | shows "conv_radius f = \<infinity>" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 708 | proof (rule conv_radius_inftyI') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 709 | fix r :: real assume "r > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 710 | with assms show "\<exists>z. norm z = r \<and> summable (\<lambda>n. f n * z^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 711 | by (intro exI[of _ "of_real r"]) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 712 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 713 | |
| 66456 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 714 | lemma conv_radius_conv_Sup: | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 715 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 716 |   shows "conv_radius f = Sup {r. \<forall>z. ereal (norm z) < r \<longrightarrow> summable (\<lambda>n. f n * z ^ n)}"
 | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 717 | proof (rule Sup_eqI [symmetric], goal_cases) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 718 | case (1 r) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 719 | thus ?case | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 720 | by (intro conv_radius_geI_ex') auto | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 721 | next | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 722 | case (2 r) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 723 | from 2[of 0] have r: "r \<ge> 0" by auto | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 724 | show ?case | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 725 | proof (intro conv_radius_leI_ex' r) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 726 | fix R assume R: "R > 0" "ereal R > r" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 727 | with r obtain r' where [simp]: "r = ereal r'" by (cases r) auto | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 728 | show "\<not>summable (\<lambda>n. f n * of_real R ^ n)" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 729 | proof | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 730 | assume *: "summable (\<lambda>n. f n * of_real R ^ n)" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 731 | define R' where "R' = (R + r') / 2" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 732 | from R have R': "R' > r'" "R' < R" by (simp_all add: R'_def) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 733 | hence "\<forall>z. norm z < R' \<longrightarrow> summable (\<lambda>n. f n * z ^ n)" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 734 | using powser_inside[OF *] by auto | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 735 | from 2[of R'] and this have "R' \<le> r'" by auto | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 736 | with \<open>R' > r'\<close> show False by simp | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 737 | qed | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 738 | qed | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 739 | qed | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 740 | |
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 741 | lemma conv_radius_shift: | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 742 |   fixes f :: "nat \<Rightarrow> 'a :: {banach, real_normed_div_algebra}"
 | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 743 | shows "conv_radius (\<lambda>n. f (n + m)) = conv_radius f" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 744 | unfolding conv_radius_conv_Sup summable_powser_ignore_initial_segment .. | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 745 | |
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 746 | lemma conv_radius_norm [simp]: "conv_radius (\<lambda>x. norm (f x)) = conv_radius f" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 747 | by (simp add: conv_radius_def) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 748 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 749 | lemma conv_radius_ratio_limit_ereal: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 750 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 751 | assumes nz: "eventually (\<lambda>n. f n \<noteq> 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 752 | assumes lim: "(\<lambda>n. ereal (norm (f n) / norm (f (Suc n)))) \<longlonglongrightarrow> c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 753 | shows "conv_radius f = c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 754 | proof (rule conv_radius_eqI') | 
| 68532 
f8b98d31ad45
Incorporating new/strengthened proofs from Library and AFP entries
 paulson <lp15@cam.ac.uk> parents: 
66672diff
changeset | 755 | show "c \<ge> 0" by (intro Lim_bounded2[OF lim]) simp_all | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 756 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 757 | fix r assume r: "0 < r" "ereal r < c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 758 | let ?l = "liminf (\<lambda>n. ereal (norm (f n * of_real r ^ n) / norm (f (Suc n) * of_real r ^ Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 759 | have "?l = liminf (\<lambda>n. ereal (norm (f n) / (norm (f (Suc n)))) * ereal (inverse r))" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 760 | using r by (simp add: norm_mult norm_power field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 761 | also from r have "\<dots> = liminf (\<lambda>n. ereal (norm (f n) / (norm (f (Suc n))))) * ereal (inverse r)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 762 | by (intro Liminf_ereal_mult_right) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 763 | also have "liminf (\<lambda>n. ereal (norm (f n) / (norm (f (Suc n))))) = c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 764 | by (intro lim_imp_Liminf lim) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 765 | finally have l: "?l = c * ereal (inverse r)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 766 | from r have l': "c * ereal (inverse r) > 1" by (cases c) (simp_all add: field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 767 | show "summable (\<lambda>n. f n * of_real r^n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 768 | by (rule summable_norm_cancel, rule ratio_test_convergence) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 769 | (insert r nz l l', auto elim!: eventually_mono) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 770 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 771 | fix r assume r: "0 < r" "ereal r > c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 772 | let ?l = "limsup (\<lambda>n. ereal (norm (f n * of_real r ^ n) / norm (f (Suc n) * of_real r ^ Suc n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 773 | have "?l = limsup (\<lambda>n. ereal (norm (f n) / (norm (f (Suc n)))) * ereal (inverse r))" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70136diff
changeset | 774 | using r by (simp add: norm_mult norm_power field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 775 | also from r have "\<dots> = limsup (\<lambda>n. ereal (norm (f n) / (norm (f (Suc n))))) * ereal (inverse r)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 776 | by (intro Limsup_ereal_mult_right) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 777 | also have "limsup (\<lambda>n. ereal (norm (f n) / (norm (f (Suc n))))) = c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 778 | by (intro lim_imp_Limsup lim) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 779 | finally have l: "?l = c * ereal (inverse r)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 780 | from r have l': "c * ereal (inverse r) < 1" by (cases c) (simp_all add: field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 781 | show "\<not>summable (\<lambda>n. norm (f n * of_real r^n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 782 | by (rule ratio_test_divergence) (insert r nz l l', auto elim!: eventually_mono) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 783 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 784 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 785 | lemma conv_radius_ratio_limit_ereal_nonzero: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 786 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 787 | assumes nz: "c \<noteq> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 788 | assumes lim: "(\<lambda>n. ereal (norm (f n) / norm (f (Suc n)))) \<longlonglongrightarrow> c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 789 | shows "conv_radius f = c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 790 | proof (rule conv_radius_ratio_limit_ereal[OF _ lim], rule ccontr) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 791 | assume "\<not>eventually (\<lambda>n. f n \<noteq> 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 792 | hence "frequently (\<lambda>n. f n = 0) sequentially" by (simp add: frequently_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 793 | hence "frequently (\<lambda>n. ereal (norm (f n) / norm (f (Suc n))) = 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 794 | by (force elim!: frequently_elim1) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 795 | hence "c = 0" by (intro limit_frequently_eq[OF _ _ lim]) auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 796 | with nz show False by contradiction | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 797 | qed | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 798 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 799 | lemma conv_radius_ratio_limit: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 800 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 801 | assumes "c' = ereal c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 802 | assumes nz: "eventually (\<lambda>n. f n \<noteq> 0) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 803 | assumes lim: "(\<lambda>n. norm (f n) / norm (f (Suc n))) \<longlonglongrightarrow> c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 804 | shows "conv_radius f = c'" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 805 | using assms by (intro conv_radius_ratio_limit_ereal) simp_all | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 806 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 807 | lemma conv_radius_ratio_limit_nonzero: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 808 |   fixes f :: "nat \<Rightarrow> 'a :: {banach,real_normed_div_algebra}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 809 | assumes "c' = ereal c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 810 | assumes nz: "c \<noteq> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 811 | assumes lim: "(\<lambda>n. norm (f n) / norm (f (Suc n))) \<longlonglongrightarrow> c" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 812 | shows "conv_radius f = c'" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 813 | using assms by (intro conv_radius_ratio_limit_ereal_nonzero) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 814 | |
| 66456 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 815 | lemma conv_radius_cmult_left: | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 816 |   assumes "c \<noteq> (0 :: 'a :: {banach, real_normed_div_algebra})"
 | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 817 | shows "conv_radius (\<lambda>n. c * f n) = conv_radius f" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 818 | proof - | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 819 | have "conv_radius (\<lambda>n. c * f n) = | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 820 | inverse (limsup (\<lambda>n. ereal (root n (norm (c * f n)))))" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 821 | unfolding conv_radius_def .. | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 822 | also have "(\<lambda>n. ereal (root n (norm (c * f n)))) = | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 823 | (\<lambda>n. ereal (root n (norm c)) * ereal (root n (norm (f n))))" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 824 | by (rule ext) (auto simp: norm_mult real_root_mult) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 825 | also have "limsup \<dots> = ereal 1 * limsup (\<lambda>n. ereal (root n (norm (f n))))" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 826 | using assms by (intro ereal_limsup_lim_mult tendsto_ereal LIMSEQ_root_const) auto | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 827 | also have "inverse \<dots> = conv_radius f" by (simp add: conv_radius_def) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 828 | finally show ?thesis . | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 829 | qed | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 830 | |
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 831 | lemma conv_radius_cmult_right: | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 832 |   assumes "c \<noteq> (0 :: 'a :: {banach, real_normed_div_algebra})"
 | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 833 | shows "conv_radius (\<lambda>n. f n * c) = conv_radius f" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 834 | proof - | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 835 | have "conv_radius (\<lambda>n. f n * c) = conv_radius (\<lambda>n. c * f n)" | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 836 | by (simp add: conv_radius_def norm_mult mult.commute) | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 837 | with conv_radius_cmult_left[OF assms, of f] show ?thesis by simp | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 838 | qed | 
| 
621897f47fab
Various lemmas for HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
66453diff
changeset | 839 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 840 | lemma conv_radius_mult_power: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 841 |   assumes "c \<noteq> (0 :: 'a :: {real_normed_div_algebra,banach})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 842 | shows "conv_radius (\<lambda>n. c ^ n * f n) = conv_radius f / ereal (norm c)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 843 | proof - | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 844 | have "limsup (\<lambda>n. ereal (root n (norm (c ^ n * f n)))) = | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 845 | limsup (\<lambda>n. ereal (norm c) * ereal (root n (norm (f n))))" | 
| 65578 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 846 | by (intro Limsup_eq eventually_mono [OF eventually_gt_at_top[of "0::nat"]]) | 
| 
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
 paulson <lp15@cam.ac.uk> parents: 
64449diff
changeset | 847 | (auto simp: norm_mult norm_power real_root_mult real_root_power) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 848 | also have "\<dots> = ereal (norm c) * limsup (\<lambda>n. ereal (root n (norm (f n))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 849 | using assms by (subst Limsup_ereal_mult_left[symmetric]) simp_all | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 850 | finally have A: "limsup (\<lambda>n. ereal (root n (norm (c ^ n * f n)))) = | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 851 | ereal (norm c) * limsup (\<lambda>n. ereal (root n (norm (f n))))" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 852 | show ?thesis using assms | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 853 | apply (cases "limsup (\<lambda>n. ereal (root n (norm (f n)))) = 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 854 | apply (simp add: A conv_radius_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 855 | apply (unfold conv_radius_def A divide_ereal_def, simp add: mult.commute ereal_inverse_mult) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 856 | done | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 857 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 858 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 859 | lemma conv_radius_mult_power_right: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 860 |   assumes "c \<noteq> (0 :: 'a :: {real_normed_div_algebra,banach})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 861 | shows "conv_radius (\<lambda>n. f n * c ^ n) = conv_radius f / ereal (norm c)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 862 | using conv_radius_mult_power[OF assms, of f] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 863 | unfolding conv_radius_def by (simp add: mult.commute norm_mult) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 864 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 865 | lemma conv_radius_divide_power: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 866 |   assumes "c \<noteq> (0 :: 'a :: {real_normed_div_algebra,banach})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 867 | shows "conv_radius (\<lambda>n. f n / c^n) = conv_radius f * ereal (norm c)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 868 | proof - | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 869 | from assms have "inverse c \<noteq> 0" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 870 | from conv_radius_mult_power_right[OF this, of f] show ?thesis | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 871 | by (simp add: divide_inverse divide_ereal_def assms norm_inverse power_inverse) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 872 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 873 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 874 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 875 | lemma conv_radius_add_ge: | 
| 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 876 | "min (conv_radius f) (conv_radius g) \<le> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 877 |        conv_radius (\<lambda>x. f x + g x :: 'a :: {banach,real_normed_div_algebra})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 878 | by (rule conv_radius_geI_ex') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 879 | (auto simp: algebra_simps intro!: summable_add summable_in_conv_radius) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 880 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 881 | lemma conv_radius_mult_ge: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 882 |   fixes f g :: "nat \<Rightarrow> ('a :: {banach,real_normed_div_algebra})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 883 | shows "conv_radius (\<lambda>x. \<Sum>i\<le>x. f i * g (x - i)) \<ge> min (conv_radius f) (conv_radius g)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 884 | proof (rule conv_radius_geI_ex') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 885 | fix r assume r: "r > 0" "ereal r < min (conv_radius f) (conv_radius g)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 886 | from r have "summable (\<lambda>n. (\<Sum>i\<le>n. (f i * of_real r^i) * (g (n - i) * of_real r^(n - i))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 887 | by (intro summable_Cauchy_product abs_summable_in_conv_radius) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 888 | thus "summable (\<lambda>n. (\<Sum>i\<le>n. f i * g (n - i)) * of_real r ^ n)" | 
| 64267 | 889 | by (simp add: algebra_simps of_real_def power_add [symmetric] scaleR_sum_right) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 890 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 891 | |
| 62381 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 892 | lemma le_conv_radius_iff: | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 893 |   fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
 | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 894 | shows "r \<le> conv_radius a \<longleftrightarrow> (\<forall>x. norm (x-\<xi>) < r \<longrightarrow> summable (\<lambda>i. a i * (x - \<xi>) ^ i))" | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 895 | apply (intro iffI allI impI summable_in_conv_radius conv_radius_geI_ex) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 896 | apply (meson less_ereal.simps(1) not_le order_trans) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 897 | apply (rule_tac x="of_real ra" in exI, simp) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 898 | apply (metis abs_of_nonneg add_diff_cancel_left' less_eq_real_def norm_of_real) | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 899 | done | 
| 
a6479cb85944
New and revised material for (multivariate) analysis
 paulson <lp15@cam.ac.uk> parents: 
62085diff
changeset | 900 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 901 | end |