author | paulson |
Wed, 18 Nov 2020 16:35:20 +0000 | |
changeset 72644 | 0e422e806ef3 |
parent 72221 | 98ef41a82b73 |
child 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:
62049
diff
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:
62049
diff
changeset
|
4 |
|
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
changeset
|
5 |
section \<open>Harmonic Numbers\<close> |
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
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:
63040
diff
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:
63040
diff
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:
62049
diff
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:
62049
diff
changeset
|
17 |
\<close> |
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
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 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
36 |
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
|
37 |
unfolding harm_def by simp |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
38 |
|
65395
7504569a73c7
moved material from AFP to distribution
eberlm <eberlm@in.tum.de>
parents:
65273
diff
changeset
|
39 |
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:
66447
diff
changeset
|
40 |
using harm_nonneg[of n] by (rule abs_of_nonneg) |
65395
7504569a73c7
moved material from AFP to distribution
eberlm <eberlm@in.tum.de>
parents:
65273
diff
changeset
|
41 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
42 |
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
|
43 |
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
|
44 |
|
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
45 |
lemma harm_expand: |
62065 | 46 |
"harm 0 = 0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
47 |
"harm (Suc 0) = 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
48 |
"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
|
49 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
50 |
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
|
51 |
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
|
52 |
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
|
53 |
finally show "harm (numeral n) = harm (pred_numeral n) + inverse (numeral n)" . |
62065 | 54 |
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
|
55 |
|
68643
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
67399
diff
changeset
|
56 |
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
|
57 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
58 |
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
|
59 |
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
|
60 |
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
|
61 |
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
|
62 |
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:
69597
diff
changeset
|
63 |
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
|
64 |
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
|
65 |
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
|
66 |
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
|
67 |
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
|
68 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
69 |
|
62065 | 70 |
lemma harm_pos_iff [simp]: "harm n > (0 :: 'a :: {real_normed_field,linordered_field}) \<longleftrightarrow> n > 0" |
71 |
by (rule iffI, cases n, simp add: harm_expand, simp, rule harm_pos) |
|
72 |
||
73 |
lemma ln_diff_le_inverse: |
|
74 |
assumes "x \<ge> (1::real)" |
|
75 |
shows "ln (x + 1) - ln x < 1 / x" |
|
76 |
proof - |
|
77 |
from assms have "\<exists>z>x. z < x + 1 \<and> ln (x + 1) - ln x = (x + 1 - x) * inverse z" |
|
78 |
by (intro MVT2) (auto intro!: derivative_eq_intros simp: field_simps) |
|
79 |
then obtain z where z: "z > x" "z < x + 1" "ln (x + 1) - ln x = inverse z" by auto |
|
80 |
have "ln (x + 1) - ln x = inverse z" by fact |
|
81 |
also from z(1,2) assms have "\<dots> < 1 / x" by (simp add: field_simps) |
|
82 |
finally show ?thesis . |
|
83 |
qed |
|
84 |
||
85 |
lemma ln_le_harm: "ln (real n + 1) \<le> (harm n :: real)" |
|
86 |
proof (induction n) |
|
87 |
fix n assume IH: "ln (real n + 1) \<le> harm n" |
|
88 |
have "ln (real (Suc n) + 1) = ln (real n + 1) + (ln (real n + 2) - ln (real n + 1))" by simp |
|
89 |
also have "(ln (real n + 2) - ln (real n + 1)) \<le> 1 / real (Suc n)" |
|
90 |
using ln_diff_le_inverse[of "real n + 1"] by (simp add: add_ac) |
|
91 |
also note IH |
|
92 |
also have "harm n + 1 / real (Suc n) = harm (Suc n)" by (simp add: harm_Suc field_simps) |
|
93 |
finally show "ln (real (Suc n) + 1) \<le> harm (Suc n)" by - simp |
|
94 |
qed (simp_all add: harm_def) |
|
95 |
||
65395
7504569a73c7
moved material from AFP to distribution
eberlm <eberlm@in.tum.de>
parents:
65273
diff
changeset
|
96 |
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:
65273
diff
changeset
|
97 |
proof (rule filterlim_at_top_mono) |
7504569a73c7
moved material from AFP to distribution
eberlm <eberlm@in.tum.de>
parents:
65273
diff
changeset
|
98 |
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:
65273
diff
changeset
|
99 |
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:
65273
diff
changeset
|
100 |
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:
66447
diff
changeset
|
101 |
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:
65273
diff
changeset
|
102 |
filterlim_Suc) |
7504569a73c7
moved material from AFP to distribution
eberlm <eberlm@in.tum.de>
parents:
65273
diff
changeset
|
103 |
qed |
7504569a73c7
moved material from AFP to distribution
eberlm <eberlm@in.tum.de>
parents:
65273
diff
changeset
|
104 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
105 |
|
66495
0b46bd081228
More tidying up of monotone_convergence_interval
paulson <lp15@cam.ac.uk>
parents:
66447
diff
changeset
|
106 |
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
|
107 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
108 |
text \<open> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
109 |
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
|
110 |
(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
|
111 |
\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
112 |
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
|
113 |
"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
|
114 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
115 |
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
|
116 |
by (simp add: euler_mascheroni_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
117 |
|
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
118 |
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
|
119 |
proof - |
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
120 |
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:
70817
diff
changeset
|
121 |
by (subst sum_lessThan_telescope) auto |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
122 |
also have "\<dots> \<le> (\<Sum>j<n. 1 / (Suc j))" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
123 |
proof (intro sum_mono, clarify) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
124 |
fix j assume j: "j < n" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
125 |
have "\<exists>\<xi>. \<xi> > real j + 1 \<and> \<xi> < real j + 2 \<and> |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
126 |
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:
70817
diff
changeset
|
127 |
by (intro MVT2) (auto intro!: derivative_eq_intros) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
128 |
then obtain \<xi> :: real |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
129 |
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:
70817
diff
changeset
|
130 |
by auto |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
131 |
note \<xi>(2) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
132 |
also have "1 / \<xi> \<le> 1 / (Suc j)" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
133 |
using \<xi>(1) by (auto simp: field_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
134 |
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:
70817
diff
changeset
|
135 |
by (simp add: add_ac) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
136 |
qed |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
137 |
also have "\<dots> = harm n" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
138 |
by (simp add: harm_altdef field_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
139 |
finally show ?thesis by (simp add: add_ac) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
140 |
qed |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
141 |
|
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
142 |
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:
70817
diff
changeset
|
143 |
proof (rule decseq_SucI) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
144 |
fix m :: nat |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
145 |
define n where "n = Suc m" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
146 |
have "n > 0" by (simp add: n_def) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
147 |
have "convex_on {0<..} (\<lambda>x :: real. -ln x)" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
148 |
by (rule convex_on_realI[where f' = "\<lambda>x. -1/x"]) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
149 |
(auto intro!: derivative_eq_intros simp: field_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
150 |
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:
70817
diff
changeset
|
151 |
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:
70817
diff
changeset
|
152 |
(auto intro!: derivative_eq_intros simp: interior_open) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
153 |
thus "harm (Suc n) - ln (Suc n) \<le> harm n - ln n" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
154 |
by (auto simp: harm_Suc field_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
155 |
qed |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
156 |
|
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
157 |
lemma euler_mascheroni_sequence_nonneg: |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
158 |
assumes "n > 0" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
159 |
shows "harm n - ln (real n) \<ge> (0 :: real)" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
160 |
proof - |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
161 |
have "ln (real n) \<le> ln (real n + 1)" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
162 |
using assms by simp |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
163 |
also have "\<dots> \<le> harm n" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
164 |
by (rule harm_ge_ln) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
165 |
finally show ?thesis by simp |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
166 |
qed |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
167 |
|
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
168 |
lemma euler_mascheroni_convergent: "convergent (\<lambda>n. harm n - ln n)" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
169 |
proof - |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
170 |
have "harm (Suc n) - ln (real (Suc n)) \<ge> 0" for n :: nat |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
171 |
using euler_mascheroni_sequence_nonneg[of "Suc n"] by simp |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
172 |
hence "convergent (\<lambda>n. harm (Suc n) - ln (Suc n))" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
173 |
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:
70817
diff
changeset
|
174 |
auto |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
175 |
thus ?thesis |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
176 |
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
|
177 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
178 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
179 |
lemma euler_mascheroni_sequence_decreasing: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
180 |
"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:
70817
diff
changeset
|
181 |
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:
70817
diff
changeset
|
182 |
|
70136 | 183 |
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
|
184 |
"(\<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
|
185 |
unfolding euler_mascheroni_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
186 |
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
|
187 |
|
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
188 |
lemma euler_mascheroni_LIMSEQ_of_real: |
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
189 |
"(\<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
|
190 |
(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
|
191 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
192 |
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
|
193 |
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
|
194 |
thus ?thesis by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
195 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
196 |
|
63721 | 197 |
lemma euler_mascheroni_sum_real: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
198 |
"(\<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:
63040
diff
changeset
|
199 |
sums euler_mascheroni" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
200 |
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
|
201 |
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
|
202 |
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
|
203 |
|
63721 | 204 |
lemma euler_mascheroni_sum: |
205 |
"(\<lambda>n. inverse (of_nat (n+1)) + of_real (ln (of_nat (n+1))) - of_real (ln (of_nat (n+2)))) |
|
206 |
sums (euler_mascheroni :: 'a :: {banach, real_normed_field})" |
|
207 |
proof - |
|
208 |
have "(\<lambda>n. of_real (inverse (of_nat (n+1)) + ln (of_nat (n+1)) - ln (of_nat (n+2)))) |
|
209 |
sums (of_real euler_mascheroni :: 'a :: {banach, real_normed_field})" |
|
210 |
by (subst sums_of_real_iff) (rule euler_mascheroni_sum_real) |
|
211 |
thus ?thesis by simp |
|
212 |
qed |
|
213 |
||
68643
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
67399
diff
changeset
|
214 |
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
|
215 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
216 |
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
|
217 |
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
|
218 |
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
|
219 |
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
|
220 |
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
|
221 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
222 |
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
|
223 |
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
|
224 |
(\<Sum>k<2*n. ((-1)^k + ?g k) / of_nat (Suc k)) - (\<Sum>k<2*n. ?g k / of_nat (Suc k))" |
64267 | 225 |
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
|
226 |
also have "(\<Sum>k<2*n. ((-1)^k + ?g k) / real_of_nat (Suc k)) = harm (2*n)" |
64267 | 227 |
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
|
228 |
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 | 229 |
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
|
230 |
also have "\<dots> = (\<Sum>k|k<2*n \<and> odd k. 2 / (real_of_nat (Suc k)))" |
64267 | 231 |
by (intro sum.cong) auto |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
232 |
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
|
233 |
unfolding harm_altdef |
64267 | 234 |
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
|
235 |
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
|
236 |
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
|
237 |
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
|
238 |
qed |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
239 |
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
|
240 |
\<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
|
241 |
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:
65395
diff
changeset
|
242 |
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
|
243 |
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
|
244 |
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:
70136
diff
changeset
|
245 |
by (blast intro: Lim_transform_eventually) |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
246 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
247 |
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
|
248 |
using LIMSEQ_inverse_real_of_nat |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
249 |
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
|
250 |
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
|
251 |
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:
68643
diff
changeset
|
252 |
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
|
253 |
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:
65395
diff
changeset
|
254 |
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
|
255 |
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
|
256 |
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
|
257 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
258 |
|
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
259 |
lemma alternating_harmonic_series_sums': |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
260 |
"(\<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
|
261 |
unfolding sums_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
262 |
proof (rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
263 |
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:
63040
diff
changeset
|
264 |
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
|
265 |
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
|
266 |
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
|
267 |
(\<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
|
268 |
proof (intro always_eventually allI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
269 |
fix n :: nat |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
270 |
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
|
271 |
(\<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
|
272 |
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
|
273 |
qed |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
274 |
qed |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
275 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
276 |
|
70136 | 277 |
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:
70817
diff
changeset
|
278 |
(* 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
|
279 |
|
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
280 |
(* TODO: Move? *) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
281 |
lemma ln_inverse_approx_le: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
282 |
assumes "(x::real) > 0" "a > 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
283 |
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
|
284 |
proof - |
63040 | 285 |
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
|
286 |
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
|
287 |
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
|
288 |
|
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
289 |
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:
70817
diff
changeset
|
290 |
if "\<xi> \<ge> x" "\<xi> \<le> x + a" for \<xi> |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
291 |
proof - |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
292 |
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:
70817
diff
changeset
|
293 |
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:
70817
diff
changeset
|
294 |
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
|
295 |
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:
63040
diff
changeset
|
296 |
from convex_onD_Icc[OF this _ t] assms |
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
297 |
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:
70817
diff
changeset
|
298 |
also have "\<dots> = (\<xi> - x) * f' + inverse x" using assms |
70817
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
haftmann
parents:
70532
diff
changeset
|
299 |
by (simp add: f'_def divide_simps) (simp add: field_simps) |
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
300 |
finally have "?f \<xi> - 1 / \<xi> \<ge> 0" by (simp add: field_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
301 |
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:
70817
diff
changeset
|
302 |
using that assms by (auto intro!: derivative_eq_intros simp: field_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
303 |
ultimately show ?thesis by blast |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
304 |
qed |
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
305 |
have "?F x - ln x \<le> ?F (x + a) - ln (x + a)" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
306 |
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:
70817
diff
changeset
|
307 |
thus ?thesis |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
308 |
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
|
309 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
310 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
311 |
lemma ln_inverse_approx_ge: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
312 |
assumes "(x::real) > 0" "x < y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
313 |
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
|
314 |
proof - |
63040 | 315 |
define m where "m = (x+y)/2" |
316 |
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
|
317 |
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
|
318 |
let ?F = "\<lambda>t. (t - m)^2 * f' / 2 + t / m" |
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
319 |
let ?f = "\<lambda>t. (t - m) * f' + inverse m" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
320 |
|
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
321 |
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:
70817
diff
changeset
|
322 |
if "\<xi> \<ge> x" "\<xi> \<le> y" for \<xi> |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
323 |
proof - |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
324 |
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
|
325 |
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
|
326 |
(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:
70817
diff
changeset
|
327 |
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:
70817
diff
changeset
|
328 |
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:
70817
diff
changeset
|
329 |
using that assms m by (auto intro!: derivative_eq_intros simp: field_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
330 |
ultimately show ?thesis by blast |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
331 |
qed |
71190
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
332 |
have "ln x - ?F x \<le> ln y - ?F y" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
333 |
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:
70817
diff
changeset
|
334 |
hence "ln y - ln x \<ge> ?F y - ?F x" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
335 |
by (simp add: algebra_simps) |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
336 |
also have "?F y - ?F x = ?A" |
8b8f9d3b3fac
Simplified Harmonic_Numbers
Manuel Eberl <eberlm@in.tum.de>
parents:
70817
diff
changeset
|
337 |
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
|
338 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
339 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
340 |
|
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
341 |
lemma euler_mascheroni_lower: |
68643
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
67399
diff
changeset
|
342 |
"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:
67399
diff
changeset
|
343 |
and euler_mascheroni_upper: |
3db6c9338ec1
Tagged some more files in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
67399
diff
changeset
|
344 |
"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
|
345 |
proof - |
63040 | 346 |
define D :: "_ \<Rightarrow> real" |
347 |
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
|
348 |
let ?g = "\<lambda>n. ln (of_nat (n+2)) - ln (of_nat (n+1)) - inverse (of_nat (n+1)) :: real" |
63040 | 349 |
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
|
350 |
fix n :: nat |
63721 | 351 |
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
|
352 |
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
|
353 |
unfolding inv_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
354 |
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
|
355 |
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
|
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) |
63721 | 358 |
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
|
359 |
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
|
360 |
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:
66447
diff
changeset
|
361 |
by (subst suminf_split_initial_segment[OF summable, of "Suc n"], |
63721 | 362 |
subst lessThan_Suc_atMost) simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
363 |
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
|
364 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
365 |
note sum |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
366 |
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
|
367 |
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
|
368 |
fix k' :: nat |
63040 | 369 |
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
|
370 |
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
|
371 |
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
|
372 |
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
|
373 |
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
|
374 |
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
|
375 |
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
|
376 |
by (simp add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
377 |
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
|
378 |
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
|
379 |
by (simp add: k_def) |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
380 |
from sums_summable[OF sums] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
381 |
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
|
382 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
383 |
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:
63040
diff
changeset
|
384 |
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:
62065
diff
changeset
|
385 |
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
|
386 |
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 | 387 |
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
|
388 |
also have "(\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1))) = ln (of_nat (n+2))" |
64267 | 389 |
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
|
390 |
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
|
391 |
by simp |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
392 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
393 |
note sum |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
394 |
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
|
395 |
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
|
396 |
fix k' :: nat |
63040 | 397 |
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
|
398 |
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
|
399 |
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
|
400 |
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
|
401 |
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
|
402 |
by (simp add: add_ac) |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
403 |
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
|
404 |
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
|
405 |
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
|
406 |
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:
63040
diff
changeset
|
407 |
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
|
408 |
(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
|
409 |
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
|
410 |
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
|
411 |
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
|
412 |
next |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
413 |
from sums_summable[OF sums'] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
414 |
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
|
415 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
416 |
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
|
417 |
by (simp add: sums_iff) |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
418 |
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
|
419 |
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
|
420 |
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 | 421 |
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
|
422 |
also have "(\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1))) = ln (of_nat (n+2))" |
64267 | 423 |
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
|
424 |
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
|
425 |
by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
426 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
427 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
428 |
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
|
429 |
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
|
430 |
|
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
431 |
context |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
432 |
begin |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
433 |
|
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
434 |
private lemma ln_approx_aux: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
435 |
fixes n :: nat and x :: real |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
436 |
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
|
437 |
assumes x: "x > 0" "x \<noteq> 1" |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
438 |
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
|
439 |
{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
|
440 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
441 |
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
|
442 |
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
|
443 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
444 |
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
|
445 |
note sums = ln_series_quadratic[OF x(1)] |
63040 | 446 |
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
|
447 |
let ?d = "c * (ln x - (\<Sum>k<n. ?f k))" |
72221 | 448 |
have "\<And>k. y\<^sup>2^k / of_nat (2*(k+n)+1) \<le> y\<^sup>2 ^ k / of_nat (2*n+1)" |
449 |
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
|
450 |
moreover { |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
451 |
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
|
452 |
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
|
453 |
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
|
454 |
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
|
455 |
(\<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
|
456 |
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
|
457 |
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
|
458 |
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
|
459 |
} note sums' = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
460 |
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
|
461 |
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
|
462 |
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
|
463 |
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
|
464 |
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
|
465 |
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
|
466 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
467 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
468 |
lemma |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
469 |
fixes n :: nat and x :: real |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
470 |
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
|
471 |
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
|
472 |
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
|
473 |
assumes x: "x > 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
474 |
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
|
475 |
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
|
476 |
proof - |
63040 | 477 |
define c where "c = 2*y^(2*n+1)" |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
478 |
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
|
479 |
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
|
480 |
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
|
481 |
{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
|
482 |
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
|
483 |
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
|
484 |
by simp |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
485 |
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:
70532
diff
changeset
|
486 |
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
|
487 |
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
|
488 |
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
|
489 |
moreover { |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
490 |
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
|
491 |
by (intro mult_nonneg_nonneg[of c]) simp_all |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
492 |
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
|
493 |
by (simp add: mult_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
494 |
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
|
495 |
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
|
496 |
} |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
497 |
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
|
498 |
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
|
499 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
500 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
501 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
502 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
503 |
lemma euler_mascheroni_bounds: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
504 |
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
|
505 |
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
|
506 |
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:
62065
diff
changeset
|
507 |
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
|
508 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
509 |
lemma euler_mascheroni_bounds': |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
510 |
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:
63040
diff
changeset
|
511 |
shows "euler_mascheroni \<in> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
512 |
{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
|
513 |
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
|
514 |
|
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
515 |
|
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
516 |
text \<open> |
69597 | 517 |
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:
62065
diff
changeset
|
518 |
bound is accurate to about 0.0015. |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
519 |
\<close> |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63040
diff
changeset
|
520 |
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:
62065
diff
changeset
|
521 |
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:
62065
diff
changeset
|
522 |
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:
62065
diff
changeset
|
523 |
|
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
524 |
|
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
525 |
text \<open> |
66495
0b46bd081228
More tidying up of monotone_convergence_interval
paulson <lp15@cam.ac.uk>
parents:
66447
diff
changeset
|
526 |
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:
62065
diff
changeset
|
527 |
the upper bound is accurate to about 0.015. |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
528 |
\<close> |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
529 |
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:
62065
diff
changeset
|
530 |
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
|
531 |
proof - |
65109 | 532 |
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:
62065
diff
changeset
|
533 |
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:
62065
diff
changeset
|
534 |
by (simp add: eval_nat_numeral) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
535 |
finally have "ln (real (Suc 7)) \<in> \<dots>" . |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
536 |
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:
62065
diff
changeset
|
537 |
thus ?th1 ?th2 by blast+ |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
538 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
539 |
|
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62065
diff
changeset
|
540 |
end |