| author | wenzelm | 
| Fri, 23 Aug 2024 22:47:51 +0200 | |
| changeset 80753 | 66893c47500d | 
| parent 73016 | 8644c1efbda2 | 
| permissions | -rw-r--r-- | 
| 63627 | 1 | (* Title: HOL/Analysis/Harmonic_Numbers.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 | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3 | *) | 
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 4 | |
| 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 5 | section \<open>Harmonic Numbers\<close> | 
| 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 6 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 7 | theory Harmonic_Numbers | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 8 | imports | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 9 | Complex_Transcendental | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 10 | Summation_Tests | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 11 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 12 | |
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 13 | text \<open> | 
| 62174 | 14 | The definition of the Harmonic Numbers and the Euler-Mascheroni constant. | 
| 69597 | 15 | Also provides a reasonably accurate approximation of \<^term>\<open>ln 2 :: real\<close> | 
| 62174 | 16 | and the Euler-Mascheroni constant. | 
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 17 | \<close> | 
| 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 18 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 19 | subsection \<open>The Harmonic numbers\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 20 | |
| 70136 | 21 | definition\<^marker>\<open>tag important\<close> harm :: "nat \<Rightarrow> 'a :: real_normed_field" where | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 22 | "harm n = (\<Sum>k=1..n. inverse (of_nat k))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 23 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 24 | lemma harm_altdef: "harm n = (\<Sum>k<n. inverse (of_nat (Suc k)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 25 | unfolding harm_def by (induction n) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 26 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 27 | lemma harm_Suc: "harm (Suc n) = harm n + inverse (of_nat (Suc n))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 28 | by (simp add: harm_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 29 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 30 | lemma harm_nonneg: "harm n \<ge> (0 :: 'a :: {real_normed_field,linordered_field})"
 | 
| 64267 | 31 | unfolding harm_def by (intro sum_nonneg) simp_all | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 32 | |
| 62065 | 33 | lemma harm_pos: "n > 0 \<Longrightarrow> harm n > (0 :: 'a :: {real_normed_field,linordered_field})"
 | 
| 64267 | 34 | unfolding harm_def by (intro sum_pos) simp_all | 
| 62065 | 35 | |
| 73016 | 36 | lemma harm_mono: "m \<le> n \<Longrightarrow> harm m \<le> (harm n :: 'a :: {real_normed_field,linordered_field})"
 | 
| 37 | by(simp add: harm_def sum_mono2) | |
| 38 | ||
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 39 | lemma of_real_harm: "of_real (harm n) = harm n" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 40 | unfolding harm_def by simp | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 41 | |
| 65395 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 42 | lemma abs_harm [simp]: "(abs (harm n) :: real) = harm n" | 
| 66495 
0b46bd081228
More tidying up of monotone_convergence_interval
 paulson <lp15@cam.ac.uk> parents: 
66447diff
changeset | 43 | using harm_nonneg[of n] by (rule abs_of_nonneg) | 
| 65395 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 44 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 45 | lemma norm_harm: "norm (harm n) = harm n" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 46 | by (subst of_real_harm [symmetric]) (simp add: harm_nonneg) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 47 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 48 | lemma harm_expand: | 
| 62065 | 49 | "harm 0 = 0" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 50 | "harm (Suc 0) = 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 51 | "harm (numeral n) = harm (pred_numeral n) + inverse (numeral n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 52 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 53 | have "numeral n = Suc (pred_numeral n)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 54 | also have "harm \<dots> = harm (pred_numeral n) + inverse (numeral n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 55 | by (subst harm_Suc, subst numeral_eq_Suc[symmetric]) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 56 | finally show "harm (numeral n) = harm (pred_numeral n) + inverse (numeral n)" . | 
| 62065 | 57 | qed (simp_all add: harm_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 58 | |
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
67399diff
changeset | 59 | theorem not_convergent_harm: "\<not>convergent (harm :: nat \<Rightarrow> 'a :: real_normed_field)" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 60 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 61 | have "convergent (\<lambda>n. norm (harm n :: 'a)) \<longleftrightarrow> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 62 | convergent (harm :: nat \<Rightarrow> real)" by (simp add: norm_harm) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 63 | also have "\<dots> \<longleftrightarrow> convergent (\<lambda>n. \<Sum>k=Suc 0..Suc n. inverse (of_nat k) :: real)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 64 | unfolding harm_def[abs_def] by (subst convergent_Suc_iff) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 65 | also have "... \<longleftrightarrow> convergent (\<lambda>n. \<Sum>k\<le>n. inverse (of_nat (Suc k)) :: real)" | 
| 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: 
69597diff
changeset | 66 | by (subst sum.shift_bounds_cl_Suc_ivl) (simp add: atLeast0AtMost) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 67 | also have "... \<longleftrightarrow> summable (\<lambda>n. inverse (of_nat n) :: real)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 68 | by (subst summable_Suc_iff [symmetric]) (simp add: summable_iff_convergent') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 69 | also have "\<not>..." by (rule not_summable_harmonic) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 70 | finally show ?thesis by (blast dest: convergent_norm) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 71 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 72 | |
| 62065 | 73 | lemma harm_pos_iff [simp]: "harm n > (0 :: 'a :: {real_normed_field,linordered_field}) \<longleftrightarrow> n > 0"
 | 
| 74 | by (rule iffI, cases n, simp add: harm_expand, simp, rule harm_pos) | |
| 75 | ||
| 76 | lemma ln_diff_le_inverse: | |
| 77 | assumes "x \<ge> (1::real)" | |
| 78 | shows "ln (x + 1) - ln x < 1 / x" | |
| 79 | proof - | |
| 80 | from assms have "\<exists>z>x. z < x + 1 \<and> ln (x + 1) - ln x = (x + 1 - x) * inverse z" | |
| 81 | by (intro MVT2) (auto intro!: derivative_eq_intros simp: field_simps) | |
| 82 | then obtain z where z: "z > x" "z < x + 1" "ln (x + 1) - ln x = inverse z" by auto | |
| 83 | have "ln (x + 1) - ln x = inverse z" by fact | |
| 84 | also from z(1,2) assms have "\<dots> < 1 / x" by (simp add: field_simps) | |
| 85 | finally show ?thesis . | |
| 86 | qed | |
| 87 | ||
| 88 | lemma ln_le_harm: "ln (real n + 1) \<le> (harm n :: real)" | |
| 89 | proof (induction n) | |
| 90 | fix n assume IH: "ln (real n + 1) \<le> harm n" | |
| 91 | have "ln (real (Suc n) + 1) = ln (real n + 1) + (ln (real n + 2) - ln (real n + 1))" by simp | |
| 92 | also have "(ln (real n + 2) - ln (real n + 1)) \<le> 1 / real (Suc n)" | |
| 93 | using ln_diff_le_inverse[of "real n + 1"] by (simp add: add_ac) | |
| 94 | also note IH | |
| 95 | also have "harm n + 1 / real (Suc n) = harm (Suc n)" by (simp add: harm_Suc field_simps) | |
| 96 | finally show "ln (real (Suc n) + 1) \<le> harm (Suc n)" by - simp | |
| 97 | qed (simp_all add: harm_def) | |
| 98 | ||
| 65395 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 99 | lemma harm_at_top: "filterlim (harm :: nat \<Rightarrow> real) at_top sequentially" | 
| 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 100 | proof (rule filterlim_at_top_mono) | 
| 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 101 | show "eventually (\<lambda>n. harm n \<ge> ln (real (Suc n))) at_top" | 
| 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 102 | using ln_le_harm by (intro always_eventually allI) (simp_all add: add_ac) | 
| 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 103 | show "filterlim (\<lambda>n. ln (real (Suc n))) at_top sequentially" | 
| 66495 
0b46bd081228
More tidying up of monotone_convergence_interval
 paulson <lp15@cam.ac.uk> parents: 
66447diff
changeset | 104 | by (intro filterlim_compose[OF ln_at_top] filterlim_compose[OF filterlim_real_sequentially] | 
| 65395 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 105 | filterlim_Suc) | 
| 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 106 | qed | 
| 
7504569a73c7
moved material from AFP to distribution
 eberlm <eberlm@in.tum.de> parents: 
65273diff
changeset | 107 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 108 | |
| 66495 
0b46bd081228
More tidying up of monotone_convergence_interval
 paulson <lp15@cam.ac.uk> parents: 
66447diff
changeset | 109 | subsection \<open>The Euler-Mascheroni constant\<close> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 110 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 111 | text \<open> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 112 | The limit of the difference between the partial harmonic sum and the natural logarithm | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 113 | (approximately 0.577216). This value occurs e.g. in the definition of the Gamma function. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 114 | \<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 115 | definition euler_mascheroni :: "'a :: real_normed_algebra_1" where | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 116 | "euler_mascheroni = of_real (lim (\<lambda>n. harm n - ln (of_nat n)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 117 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 118 | lemma of_real_euler_mascheroni [simp]: "of_real euler_mascheroni = euler_mascheroni" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 119 | by (simp add: euler_mascheroni_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 120 | |
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 121 | lemma harm_ge_ln: "harm n \<ge> ln (real n + 1)" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 122 | proof - | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 123 | have "ln (n + 1) = (\<Sum>j<n. ln (real (Suc j + 1)) - ln (real (j + 1)))" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 124 | by (subst sum_lessThan_telescope) auto | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 125 | also have "\<dots> \<le> (\<Sum>j<n. 1 / (Suc j))" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 126 | proof (intro sum_mono, clarify) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 127 | fix j assume j: "j < n" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 128 | have "\<exists>\<xi>. \<xi> > real j + 1 \<and> \<xi> < real j + 2 \<and> | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 129 | ln (real j + 2) - ln (real j + 1) = (real j + 2 - (real j + 1)) * (1 / \<xi>)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 130 | by (intro MVT2) (auto intro!: derivative_eq_intros) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 131 | then obtain \<xi> :: real | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 132 |       where \<xi>: "\<xi> \<in> {real j + 1..real j + 2}" "ln (real j + 2) - ln (real j + 1) = 1 / \<xi>"
 | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 133 | by auto | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 134 | note \<xi>(2) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 135 | also have "1 / \<xi> \<le> 1 / (Suc j)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 136 | using \<xi>(1) by (auto simp: field_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 137 | finally show "ln (real (Suc j + 1)) - ln (real (j + 1)) \<le> 1 / (Suc j)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 138 | by (simp add: add_ac) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 139 | qed | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 140 | also have "\<dots> = harm n" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 141 | by (simp add: harm_altdef field_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 142 | finally show ?thesis by (simp add: add_ac) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 143 | qed | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 144 | |
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 145 | lemma decseq_harm_diff_ln: "decseq (\<lambda>n. harm (Suc n) - ln (Suc n))" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 146 | proof (rule decseq_SucI) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 147 | fix m :: nat | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 148 | define n where "n = Suc m" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 149 | have "n > 0" by (simp add: n_def) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 150 |   have "convex_on {0<..} (\<lambda>x :: real. -ln x)"
 | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 151 | by (rule convex_on_realI[where f' = "\<lambda>x. -1/x"]) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 152 | (auto intro!: derivative_eq_intros simp: field_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 153 | hence "(-1 / (n + 1)) * (real n - real (n + 1)) \<le> (- ln (real n)) - (-ln (real (n + 1)))" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 154 |     using \<open>n > 0\<close> by (intro convex_on_imp_above_tangent[where A = "{0<..}"])
 | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 155 | (auto intro!: derivative_eq_intros simp: interior_open) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 156 | thus "harm (Suc n) - ln (Suc n) \<le> harm n - ln n" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 157 | by (auto simp: harm_Suc field_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 158 | qed | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 159 | |
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 160 | lemma euler_mascheroni_sequence_nonneg: | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 161 | assumes "n > 0" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 162 | shows "harm n - ln (real n) \<ge> (0 :: real)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 163 | proof - | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 164 | have "ln (real n) \<le> ln (real n + 1)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 165 | using assms by simp | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 166 | also have "\<dots> \<le> harm n" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 167 | by (rule harm_ge_ln) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 168 | finally show ?thesis by simp | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 169 | qed | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 170 | |
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 171 | lemma euler_mascheroni_convergent: "convergent (\<lambda>n. harm n - ln n)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 172 | proof - | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 173 | have "harm (Suc n) - ln (real (Suc n)) \<ge> 0" for n :: nat | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 174 | using euler_mascheroni_sequence_nonneg[of "Suc n"] by simp | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 175 | hence "convergent (\<lambda>n. harm (Suc n) - ln (Suc n))" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 176 | by (intro Bseq_monoseq_convergent decseq_bounded[of _ 0] decseq_harm_diff_ln decseq_imp_monoseq) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 177 | auto | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 178 | thus ?thesis | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 179 | by (subst (asm) convergent_Suc_iff) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 180 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 181 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 182 | lemma euler_mascheroni_sequence_decreasing: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 183 | "m > 0 \<Longrightarrow> m \<le> n \<Longrightarrow> harm n - ln (of_nat n) \<le> harm m - ln (of_nat m :: real)" | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 184 | using decseqD[OF decseq_harm_diff_ln, of "m - 1" "n - 1"] by simp | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 185 | |
| 70136 | 186 | lemma\<^marker>\<open>tag important\<close> euler_mascheroni_LIMSEQ: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 187 | "(\<lambda>n. harm n - ln (of_nat n) :: real) \<longlonglongrightarrow> euler_mascheroni" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 188 | unfolding euler_mascheroni_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 189 | by (simp add: convergent_LIMSEQ_iff [symmetric] euler_mascheroni_convergent) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 190 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 191 | lemma euler_mascheroni_LIMSEQ_of_real: | 
| 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 192 | "(\<lambda>n. of_real (harm n - ln (of_nat n))) \<longlonglongrightarrow> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 193 |       (euler_mascheroni :: 'a :: {real_normed_algebra_1, topological_space})"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 194 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 195 | have "(\<lambda>n. of_real (harm n - ln (of_nat n))) \<longlonglongrightarrow> (of_real (euler_mascheroni) :: 'a)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 196 | by (intro tendsto_of_real euler_mascheroni_LIMSEQ) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 197 | thus ?thesis by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 198 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 199 | |
| 63721 | 200 | lemma euler_mascheroni_sum_real: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 201 | "(\<lambda>n. inverse (of_nat (n+1)) + ln (of_nat (n+1)) - ln (of_nat (n+2)) :: real) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 202 | sums euler_mascheroni" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 203 | using sums_add[OF telescope_sums[OF LIMSEQ_Suc[OF euler_mascheroni_LIMSEQ]] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 204 | telescope_sums'[OF LIMSEQ_inverse_real_of_nat]] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 205 | by (simp_all add: harm_def algebra_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 206 | |
| 63721 | 207 | lemma euler_mascheroni_sum: | 
| 208 | "(\<lambda>n. inverse (of_nat (n+1)) + of_real (ln (of_nat (n+1))) - of_real (ln (of_nat (n+2)))) | |
| 209 |        sums (euler_mascheroni :: 'a :: {banach, real_normed_field})"
 | |
| 210 | proof - | |
| 211 | have "(\<lambda>n. of_real (inverse (of_nat (n+1)) + ln (of_nat (n+1)) - ln (of_nat (n+2)))) | |
| 212 |        sums (of_real euler_mascheroni :: 'a :: {banach, real_normed_field})"
 | |
| 213 | by (subst sums_of_real_iff) (rule euler_mascheroni_sum_real) | |
| 214 | thus ?thesis by simp | |
| 215 | qed | |
| 216 | ||
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
67399diff
changeset | 217 | theorem alternating_harmonic_series_sums: "(\<lambda>k. (-1)^k / real_of_nat (Suc k)) sums ln 2" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 218 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 219 | let ?f = "\<lambda>n. harm n - ln (real_of_nat n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 220 | let ?g = "\<lambda>n. if even n then 0 else (2::real)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 221 | let ?em = "\<lambda>n. harm n - ln (real_of_nat n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 222 | have "eventually (\<lambda>n. ?em (2*n) - ?em n + ln 2 = (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))) at_top" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 223 | using 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 | 224 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 225 | fix n :: nat assume n: "n > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 226 | have "(\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k)) = | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 227 | (\<Sum>k<2*n. ((-1)^k + ?g k) / of_nat (Suc k)) - (\<Sum>k<2*n. ?g k / of_nat (Suc k))" | 
| 64267 | 228 | by (simp add: sum.distrib algebra_simps divide_inverse) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 229 | also have "(\<Sum>k<2*n. ((-1)^k + ?g k) / real_of_nat (Suc k)) = harm (2*n)" | 
| 64267 | 230 | unfolding harm_altdef by (intro sum.cong) (auto simp: field_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 231 | also have "(\<Sum>k<2*n. ?g k / real_of_nat (Suc k)) = (\<Sum>k|k<2*n \<and> odd k. ?g k / of_nat (Suc k))" | 
| 64267 | 232 | by (intro sum.mono_neutral_right) auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 233 | also have "\<dots> = (\<Sum>k|k<2*n \<and> odd k. 2 / (real_of_nat (Suc k)))" | 
| 64267 | 234 | by (intro sum.cong) auto | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 235 | also have "(\<Sum>k|k<2*n \<and> odd k. 2 / (real_of_nat (Suc k))) = harm n" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 236 | unfolding harm_altdef | 
| 64267 | 237 | by (intro sum.reindex_cong[of "\<lambda>n. 2*n+1"]) (auto simp: inj_on_def field_simps elim!: oddE) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 238 | also have "harm (2*n) - harm n = ?em (2*n) - ?em n + ln 2" using n | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 239 | by (simp_all add: algebra_simps ln_mult) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 240 | finally show "?em (2*n) - ?em n + ln 2 = (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))" .. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 241 | qed | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 242 | moreover have "(\<lambda>n. ?em (2*n) - ?em n + ln (2::real)) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 243 | \<longlonglongrightarrow> euler_mascheroni - euler_mascheroni + ln 2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 244 | by (intro tendsto_intros euler_mascheroni_LIMSEQ filterlim_compose[OF euler_mascheroni_LIMSEQ] | 
| 66447 
a1f5c5c26fa6
Replaced subseq with strict_mono
 eberlm <eberlm@in.tum.de> parents: 
65395diff
changeset | 245 | filterlim_subseq) (auto simp: strict_mono_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 246 | hence "(\<lambda>n. ?em (2*n) - ?em n + ln (2::real)) \<longlonglongrightarrow> ln 2" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 247 | ultimately have "(\<lambda>n. (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))) \<longlonglongrightarrow> ln 2" | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70136diff
changeset | 248 | by (blast intro: Lim_transform_eventually) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 249 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 250 | moreover have "summable (\<lambda>k. (-1)^k * inverse (real_of_nat (Suc k)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 251 | using LIMSEQ_inverse_real_of_nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 252 | by (intro summable_Leibniz(1) decseq_imp_monoseq decseq_SucI) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 253 | hence A: "(\<lambda>n. \<Sum>k<n. (-1)^k / real_of_nat (Suc k)) \<longlonglongrightarrow> (\<Sum>k. (-1)^k / real_of_nat (Suc k))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 254 | by (simp add: summable_sums_iff divide_inverse sums_def) | 
| 69064 
5840724b1d71
Prefix form of infix with * on either side no longer needs special treatment
 nipkow parents: 
68643diff
changeset | 255 | from filterlim_compose[OF this filterlim_subseq[of "(*) (2::nat)"]] | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 256 | have "(\<lambda>n. \<Sum>k<2*n. (-1)^k / real_of_nat (Suc k)) \<longlonglongrightarrow> (\<Sum>k. (-1)^k / real_of_nat (Suc k))" | 
| 66447 
a1f5c5c26fa6
Replaced subseq with strict_mono
 eberlm <eberlm@in.tum.de> parents: 
65395diff
changeset | 257 | by (simp add: strict_mono_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 258 | ultimately have "(\<Sum>k. (- 1) ^ k / real_of_nat (Suc k)) = ln 2" by (intro LIMSEQ_unique) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 259 | with A show ?thesis by (simp add: sums_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 260 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 261 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 262 | lemma alternating_harmonic_series_sums': | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 263 | "(\<lambda>k. inverse (real_of_nat (2*k+1)) - inverse (real_of_nat (2*k+2))) sums ln 2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 264 | unfolding sums_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 265 | proof (rule Lim_transform_eventually) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 266 | show "(\<lambda>n. \<Sum>k<2*n. (-1)^k / (real_of_nat (Suc k))) \<longlonglongrightarrow> ln 2" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 267 | using alternating_harmonic_series_sums unfolding sums_def | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 268 | by (rule filterlim_compose) (rule mult_nat_left_at_top, simp) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 269 | show "eventually (\<lambda>n. (\<Sum>k<2*n. (-1)^k / (real_of_nat (Suc k))) = | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 270 | (\<Sum>k<n. inverse (real_of_nat (2*k+1)) - inverse (real_of_nat (2*k+2)))) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 271 | proof (intro always_eventually allI) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 272 | fix n :: nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 273 | show "(\<Sum>k<2*n. (-1)^k / (real_of_nat (Suc k))) = | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 274 | (\<Sum>k<n. inverse (real_of_nat (2*k+1)) - inverse (real_of_nat (2*k+2)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 275 | by (induction n) (simp_all add: inverse_eq_divide) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 276 | qed | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 277 | qed | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 278 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 279 | |
| 70136 | 280 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Bounds on the Euler-Mascheroni constant\<close> | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 281 | (* TODO: perhaps move this section away to remove unnecessary dependency on integration *) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 282 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 283 | (* TODO: Move? *) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 284 | lemma ln_inverse_approx_le: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 285 | assumes "(x::real) > 0" "a > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 286 | shows "ln (x + a) - ln x \<le> a * (inverse x + inverse (x + a))/2" (is "_ \<le> ?A") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 287 | proof - | 
| 63040 | 288 | define f' where "f' = (inverse (x + a) - inverse x)/a" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 289 | let ?f = "\<lambda>t. (t - x) * f' + inverse x" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 290 | let ?F = "\<lambda>t. (t - x)^2 * f' / 2 + t * inverse x" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 291 | |
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 292 | have deriv: "\<exists>D. ((\<lambda>x. ?F x - ln x) has_field_derivative D) (at \<xi>) \<and> D \<ge> 0" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 293 | if "\<xi> \<ge> x" "\<xi> \<le> x + a" for \<xi> | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 294 | proof - | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 295 | from that assms have t: "0 \<le> (\<xi> - x) / a" "(\<xi> - x) / a \<le> 1" by simp_all | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 296 | have "inverse \<xi> = inverse ((1 - (\<xi> - x) / a) *\<^sub>R x + ((\<xi> - x) / a) *\<^sub>R (x + a))" (is "_ = ?A") | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 297 | using assms by (simp add: field_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 298 |     also from assms have "convex_on {x..x+a} inverse" by (intro convex_on_inverse) auto
 | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 299 | from convex_onD_Icc[OF this _ t] assms | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 300 | have "?A \<le> (1 - (\<xi> - x) / a) * inverse x + (\<xi> - x) / a * inverse (x + a)" by simp | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 301 | also have "\<dots> = (\<xi> - x) * f' + inverse x" using assms | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70532diff
changeset | 302 | by (simp add: f'_def divide_simps) (simp add: field_simps) | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 303 | finally have "?f \<xi> - 1 / \<xi> \<ge> 0" by (simp add: field_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 304 | moreover have "((\<lambda>x. ?F x - ln x) has_field_derivative ?f \<xi> - 1 / \<xi>) (at \<xi>)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 305 | using that assms by (auto intro!: derivative_eq_intros simp: field_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 306 | ultimately show ?thesis by blast | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 307 | qed | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 308 | have "?F x - ln x \<le> ?F (x + a) - ln (x + a)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 309 | by (rule DERIV_nonneg_imp_nondecreasing[of x "x + a", OF _ deriv]) (use assms in auto) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 310 | thus ?thesis | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 311 | using assms by (simp add: f'_def divide_simps) (simp add: algebra_simps power2_eq_square)? | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 312 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 313 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 314 | lemma ln_inverse_approx_ge: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 315 | assumes "(x::real) > 0" "x < y" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 316 | shows "ln y - ln x \<ge> 2 * (y - x) / (x + y)" (is "_ \<ge> ?A") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 317 | proof - | 
| 63040 | 318 | define m where "m = (x+y)/2" | 
| 319 | define f' where "f' = -inverse (m^2)" | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 320 | from assms have m: "m > 0" by (simp add: m_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 321 | let ?F = "\<lambda>t. (t - m)^2 * f' / 2 + t / m" | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 322 | let ?f = "\<lambda>t. (t - m) * f' + inverse m" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 323 | |
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 324 | have deriv: "\<exists>D. ((\<lambda>x. ln x - ?F x) has_field_derivative D) (at \<xi>) \<and> D \<ge> 0" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 325 | if "\<xi> \<ge> x" "\<xi> \<le> y" for \<xi> | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 326 | proof - | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 327 | from that assms have "inverse \<xi> - inverse m \<ge> f' * (\<xi> - m)" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 328 |       by (intro convex_on_imp_above_tangent[of "{0<..}"] convex_on_inverse)
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 329 | (auto simp: m_def interior_open f'_def power2_eq_square intro!: derivative_eq_intros) | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 330 | hence "1 / \<xi> - ?f \<xi> \<ge> 0" by (simp add: field_simps f'_def) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 331 | moreover have "((\<lambda>x. ln x - ?F x) has_field_derivative 1 / \<xi> - ?f \<xi>) (at \<xi>)" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 332 | using that assms m by (auto intro!: derivative_eq_intros simp: field_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 333 | ultimately show ?thesis by blast | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 334 | qed | 
| 71190 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 335 | have "ln x - ?F x \<le> ln y - ?F y" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 336 | by (rule DERIV_nonneg_imp_nondecreasing[of x y, OF _ deriv]) (use assms in auto) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 337 | hence "ln y - ln x \<ge> ?F y - ?F x" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 338 | by (simp add: algebra_simps) | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 339 | also have "?F y - ?F x = ?A" | 
| 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 340 | using assms by (simp add: f'_def m_def divide_simps) (simp add: algebra_simps power2_eq_square) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 341 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 342 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 343 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 344 | lemma euler_mascheroni_lower: | 
| 68643 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
67399diff
changeset | 345 | "euler_mascheroni \<ge> harm (Suc n) - ln (real_of_nat (n + 2)) + 1/real_of_nat (2 * (n + 2))" | 
| 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
67399diff
changeset | 346 | and euler_mascheroni_upper: | 
| 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
67399diff
changeset | 347 | "euler_mascheroni \<le> harm (Suc n) - ln (real_of_nat (n + 2)) + 1/real_of_nat (2 * (n + 1))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 348 | proof - | 
| 63040 | 349 | define D :: "_ \<Rightarrow> real" | 
| 350 | where "D n = inverse (of_nat (n+1)) + ln (of_nat (n+1)) - ln (of_nat (n+2))" for n | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 351 | let ?g = "\<lambda>n. ln (of_nat (n+2)) - ln (of_nat (n+1)) - inverse (of_nat (n+1)) :: real" | 
| 63040 | 352 | define inv where [abs_def]: "inv n = inverse (real_of_nat n)" for n | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 353 | fix n :: nat | 
| 63721 | 354 | note summable = sums_summable[OF euler_mascheroni_sum_real, folded D_def] | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 355 | have sums: "(\<lambda>k. (inv (Suc (k + (n+1))) - inv (Suc (Suc k + (n+1))))/2) sums ((inv (Suc (0 + (n+1))) - 0)/2)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 356 | unfolding inv_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 357 | by (intro sums_divide telescope_sums' LIMSEQ_ignore_initial_segment LIMSEQ_inverse_real_of_nat) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 358 | have sums': "(\<lambda>k. (inv (Suc (k + n)) - inv (Suc (Suc k + n)))/2) sums ((inv (Suc (0 + n)) - 0)/2)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 359 | unfolding inv_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 360 | by (intro sums_divide telescope_sums' LIMSEQ_ignore_initial_segment LIMSEQ_inverse_real_of_nat) | 
| 63721 | 361 | from euler_mascheroni_sum_real have "euler_mascheroni = (\<Sum>k. D k)" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 362 | by (simp add: sums_iff D_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 363 | also have "\<dots> = (\<Sum>k. D (k + Suc n)) + (\<Sum>k\<le>n. D k)" | 
| 66495 
0b46bd081228
More tidying up of monotone_convergence_interval
 paulson <lp15@cam.ac.uk> parents: 
66447diff
changeset | 364 | by (subst suminf_split_initial_segment[OF summable, of "Suc n"], | 
| 63721 | 365 | subst lessThan_Suc_atMost) simp | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 366 | finally have sum: "(\<Sum>k\<le>n. D k) - euler_mascheroni = -(\<Sum>k. D (k + Suc n))" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 367 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 368 | note sum | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 369 | also have "\<dots> \<le> -(\<Sum>k. (inv (k + Suc n + 1) - inv (k + Suc n + 2)) / 2)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 370 | proof (intro le_imp_neg_le suminf_le allI summable_ignore_initial_segment[OF summable]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 371 | fix k' :: nat | 
| 63040 | 372 | define k where "k = k' + Suc n" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 373 | hence k: "k > 0" by (simp add: k_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 374 | have "real_of_nat (k+1) > 0" by (simp add: k_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 375 | with ln_inverse_approx_le[OF this zero_less_one] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 376 | have "ln (of_nat k + 2) - ln (of_nat k + 1) \<le> (inv (k+1) + inv (k+2))/2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 377 | by (simp add: inv_def add_ac) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 378 | hence "(inv (k+1) - inv (k+2))/2 \<le> inv (k+1) + ln (of_nat (k+1)) - ln (of_nat (k+2))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 379 | by (simp add: field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 380 | also have "\<dots> = D k" unfolding D_def inv_def .. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 381 | finally show "D (k' + Suc n) \<ge> (inv (k' + Suc n + 1) - inv (k' + Suc n + 2)) / 2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 382 | by (simp add: k_def) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 383 | from sums_summable[OF sums] | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 384 | show "summable (\<lambda>k. (inv (k + Suc n + 1) - inv (k + Suc n + 2))/2)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 385 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 386 | also from sums have "\<dots> = -inv (n+2) / 2" by (simp add: sums_iff) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 387 | finally have "euler_mascheroni \<ge> (\<Sum>k\<le>n. D k) + 1 / (of_nat (2 * (n+2)))" | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 388 | by (simp add: inv_def field_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 389 | also have "(\<Sum>k\<le>n. D k) = harm (Suc n) - (\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1)))" | 
| 64267 | 390 | unfolding harm_altdef D_def by (subst lessThan_Suc_atMost) (simp add: sum.distrib sum_subtractf) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 391 | also have "(\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1))) = ln (of_nat (n+2))" | 
| 64267 | 392 | by (subst atLeast0AtMost [symmetric], 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 | 393 | finally show "euler_mascheroni \<ge> harm (Suc n) - ln (real_of_nat (n + 2)) + 1/real_of_nat (2 * (n + 2))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 394 | by simp | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 395 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 396 | note sum | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 397 | also have "-(\<Sum>k. D (k + Suc n)) \<ge> -(\<Sum>k. (inv (Suc (k + n)) - inv (Suc (Suc k + n)))/2)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 398 | proof (intro le_imp_neg_le suminf_le allI summable_ignore_initial_segment[OF summable]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 399 | fix k' :: nat | 
| 63040 | 400 | define k where "k = k' + Suc n" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 401 | hence k: "k > 0" by (simp add: k_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 402 | have "real_of_nat (k+1) > 0" by (simp add: k_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 403 | from ln_inverse_approx_ge[of "of_nat k + 1" "of_nat k + 2"] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 404 | have "2 / (2 * real_of_nat k + 3) \<le> ln (of_nat (k+2)) - ln (real_of_nat (k+1))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 405 | by (simp add: add_ac) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 406 | hence "D k \<le> 1 / real_of_nat (k+1) - 2 / (2 * real_of_nat k + 3)" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 407 | by (simp add: D_def inverse_eq_divide inv_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 408 | also have "\<dots> = inv ((k+1)*(2*k+3))" unfolding inv_def by (simp add: field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 409 | also have "\<dots> \<le> inv (2*k*(k+1))" unfolding inv_def using k | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 410 | by (intro le_imp_inverse_le) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 411 | (simp add: algebra_simps, simp del: of_nat_add) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 412 | also have "\<dots> = (inv k - inv (k+1))/2" unfolding inv_def using k | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 413 | by (simp add: divide_simps del: of_nat_mult) (simp add: algebra_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 414 | finally show "D k \<le> (inv (Suc (k' + n)) - inv (Suc (Suc k' + n)))/2" unfolding k_def by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 415 | next | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 416 | from sums_summable[OF sums'] | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 417 | show "summable (\<lambda>k. (inv (Suc (k + n)) - inv (Suc (Suc k + n)))/2)" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 418 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 419 | also from sums' have "(\<Sum>k. (inv (Suc (k + n)) - inv (Suc (Suc k + n)))/2) = inv (n+1)/2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 420 | by (simp add: sums_iff) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 421 | finally have "euler_mascheroni \<le> (\<Sum>k\<le>n. D k) + 1 / of_nat (2 * (n+1))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 422 | by (simp add: inv_def field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 423 | also have "(\<Sum>k\<le>n. D k) = harm (Suc n) - (\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1)))" | 
| 64267 | 424 | unfolding harm_altdef D_def by (subst lessThan_Suc_atMost) (simp add: sum.distrib sum_subtractf) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 425 | also have "(\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1))) = ln (of_nat (n+2))" | 
| 64267 | 426 | by (subst atLeast0AtMost [symmetric], 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 | 427 | finally show "euler_mascheroni \<le> harm (Suc n) - ln (real_of_nat (n + 2)) + 1/real_of_nat (2 * (n + 1))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 428 | by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 429 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 430 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 431 | lemma euler_mascheroni_pos: "euler_mascheroni > (0::real)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 432 | using euler_mascheroni_lower[of 0] ln_2_less_1 by (simp add: harm_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 433 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 434 | context | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 435 | begin | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 436 | |
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 437 | private lemma ln_approx_aux: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 438 | fixes n :: nat and x :: real | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 439 | defines "y \<equiv> (x-1)/(x+1)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 440 | assumes x: "x > 0" "x \<noteq> 1" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 441 | shows "inverse (2*y^(2*n+1)) * (ln x - (\<Sum>k<n. 2*y^(2*k+1) / of_nat (2*k+1))) \<in> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 442 |             {0..(1 / (1 - y^2) / of_nat (2*n+1))}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 443 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 444 | from x have norm_y: "norm y < 1" unfolding y_def by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 445 | from power_strict_mono[OF this, of 2] have norm_y': "norm y^2 < 1" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 446 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 447 | let ?f = "\<lambda>k. 2 * y ^ (2*k+1) / of_nat (2*k+1)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 448 | note sums = ln_series_quadratic[OF x(1)] | 
| 63040 | 449 | define c where "c = inverse (2*y^(2*n+1))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 450 | let ?d = "c * (ln x - (\<Sum>k<n. ?f k))" | 
| 72221 | 451 | have "\<And>k. y\<^sup>2^k / of_nat (2*(k+n)+1) \<le> y\<^sup>2 ^ k / of_nat (2*n+1)" | 
| 452 | by (intro divide_left_mono mult_right_mono mult_pos_pos zero_le_power[of "y^2"]) simp_all | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 453 |   moreover {
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 454 | have "(\<lambda>k. ?f (k + n)) sums (ln x - (\<Sum>k<n. ?f k))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 455 | using sums_split_initial_segment[OF sums] by (simp add: y_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 456 | hence "(\<lambda>k. c * ?f (k + n)) sums ?d" by (rule sums_mult) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 457 | also have "(\<lambda>k. c * (2*y^(2*(k+n)+1) / of_nat (2*(k+n)+1))) = | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 458 | (\<lambda>k. (c * (2*y^(2*n+1))) * ((y^2)^k / of_nat (2*(k+n)+1)))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 459 | by (simp only: ring_distribs power_add power_mult) (simp add: mult_ac) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 460 | also from x have "c * (2*y^(2*n+1)) = 1" by (simp add: c_def y_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 461 | finally have "(\<lambda>k. (y^2)^k / of_nat (2*(k+n)+1)) sums ?d" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 462 | } note sums' = this | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 463 | moreover from norm_y' have "(\<lambda>k. (y^2)^k / of_nat (2*n+1)) sums (1 / (1 - y^2) / of_nat (2*n+1))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 464 | by (intro sums_divide geometric_sums) (simp_all add: norm_power) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 465 | ultimately have "?d \<le> (1 / (1 - y^2) / of_nat (2*n+1))" by (rule sums_le) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 466 | moreover have "c * (ln x - (\<Sum>k<n. 2 * y ^ (2 * k + 1) / real_of_nat (2 * k + 1))) \<ge> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 467 | by (intro sums_le[OF _ sums_zero sums']) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 468 | ultimately show ?thesis unfolding c_def by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 469 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 470 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 471 | lemma | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 472 | fixes n :: nat and x :: real | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 473 | defines "y \<equiv> (x-1)/(x+1)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 474 | defines "approx \<equiv> (\<Sum>k<n. 2*y^(2*k+1) / of_nat (2*k+1))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 475 | defines "d \<equiv> y^(2*n+1) / (1 - y^2) / of_nat (2*n+1)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 476 | assumes x: "x > 1" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 477 |   shows   ln_approx_bounds: "ln x \<in> {approx..approx + 2*d}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 478 | and ln_approx_abs: "abs (ln x - (approx + d)) \<le> d" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 479 | proof - | 
| 63040 | 480 | define c where "c = 2*y^(2*n+1)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 481 | from x have c_pos: "c > 0" unfolding c_def y_def | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 482 | by (intro mult_pos_pos zero_less_power) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 483 | have A: "inverse c * (ln x - (\<Sum>k<n. 2*y^(2*k+1) / of_nat (2*k+1))) \<in> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 484 |               {0.. (1 / (1 - y^2) / of_nat (2*n+1))}" using assms unfolding y_def c_def
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 485 | by (intro ln_approx_aux) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 486 | hence "inverse c * (ln x - (\<Sum>k<n. 2*y^(2*k+1)/of_nat (2*k+1))) \<le> (1 / (1-y^2) / of_nat (2*n+1))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 487 | by simp | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 488 | hence "(ln x - (\<Sum>k<n. 2*y^(2*k+1) / of_nat (2*k+1))) / c \<le> (1 / (1 - y^2) / of_nat (2*n+1))" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70532diff
changeset | 489 | by (auto simp add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 490 | with c_pos have "ln x \<le> c / (1 - y^2) / of_nat (2*n+1) + approx" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 491 | by (subst (asm) pos_divide_le_eq) (simp_all add: mult_ac approx_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 492 |   moreover {
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 493 | from A c_pos have "0 \<le> c * (inverse c * (ln x - (\<Sum>k<n. 2*y^(2*k+1) / of_nat (2*k+1))))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 494 | by (intro mult_nonneg_nonneg[of c]) simp_all | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 495 | also have "\<dots> = (c * inverse c) * (ln x - (\<Sum>k<n. 2*y^(2*k+1) / of_nat (2*k+1)))" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 496 | by (simp add: mult_ac) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 497 | also from c_pos have "c * inverse c = 1" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 498 | finally have "ln x \<ge> approx" by (simp add: approx_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 499 | } | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 500 |   ultimately show "ln x \<in> {approx..approx + 2*d}" by (simp add: c_def d_def)
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 501 | thus "abs (ln x - (approx + d)) \<le> d" by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 502 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 503 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 504 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 505 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 506 | lemma euler_mascheroni_bounds: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 507 | fixes n :: nat assumes "n \<ge> 1" defines "t \<equiv> harm n - ln (of_nat (Suc n)) :: real" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 508 |   shows "euler_mascheroni \<in> {t + inverse (of_nat (2*(n+1)))..t + inverse (of_nat (2*n))}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 509 | using assms euler_mascheroni_upper[of "n-1"] euler_mascheroni_lower[of "n-1"] | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 510 | unfolding t_def by (cases n) (simp_all add: harm_Suc t_def inverse_eq_divide) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 511 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 512 | lemma euler_mascheroni_bounds': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 513 |   fixes n :: nat assumes "n \<ge> 1" "ln (real_of_nat (Suc n)) \<in> {l<..<u}"
 | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 514 | shows "euler_mascheroni \<in> | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 515 |            {harm n - u + inverse (of_nat (2*(n+1)))<..<harm n - l + inverse (of_nat (2*n))}"
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 516 | using euler_mascheroni_bounds[OF assms(1)] assms(2) by auto | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 517 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 518 | |
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 519 | text \<open> | 
| 69597 | 520 | Approximation of \<^term>\<open>ln 2\<close>. The lower bound is accurate to about 0.03; the upper | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 521 | bound is accurate to about 0.0015. | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 522 | \<close> | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63040diff
changeset | 523 | lemma ln2_ge_two_thirds: "2/3 \<le> ln (2::real)" | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 524 | and ln2_le_25_over_36: "ln (2::real) \<le> 25/36" | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 525 | using ln_approx_bounds[of 2 1, simplified, simplified eval_nat_numeral, simplified] by simp_all | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 526 | |
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 527 | |
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 528 | text \<open> | 
| 66495 
0b46bd081228
More tidying up of monotone_convergence_interval
 paulson <lp15@cam.ac.uk> parents: 
66447diff
changeset | 529 | Approximation of the Euler-Mascheroni constant. The lower bound is accurate to about 0.0015; | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 530 | the upper bound is accurate to about 0.015. | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 531 | \<close> | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 532 | lemma euler_mascheroni_gt_19_over_33: "(euler_mascheroni :: real) > 19/33" (is ?th1) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 533 | and euler_mascheroni_less_13_over_22: "(euler_mascheroni :: real) < 13/22" (is ?th2) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 534 | proof - | 
| 65109 | 535 | have "ln (real (Suc 7)) = 3 * ln 2" by (simp add: ln_powr [symmetric]) | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 536 |   also from ln_approx_bounds[of 2 3] have "\<dots> \<in> {3*307/443<..<3*4615/6658}"
 | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 537 | by (simp add: eval_nat_numeral) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 538 | finally have "ln (real (Suc 7)) \<in> \<dots>" . | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 539 | from euler_mascheroni_bounds'[OF _ this] have "?th1 \<and> ?th2" by (simp_all add: harm_expand) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 540 | thus ?th1 ?th2 by blast+ | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 541 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 542 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62065diff
changeset | 543 | end |