| author | wenzelm | 
| Mon, 20 Nov 2023 14:11:34 +0100 | |
| changeset 79010 | aceca8baf804 | 
| 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: 
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  | 
|
| 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: 
63040 
diff
changeset
 | 
41  | 
|
| 
65395
 
7504569a73c7
moved material from AFP to distribution
 
eberlm <eberlm@in.tum.de> 
parents: 
65273 
diff
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: 
66447 
diff
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: 
65273 
diff
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: 
63040 
diff
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: 
67399 
diff
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: 
69597 
diff
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: 
65273 
diff
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: 
65273 
diff
changeset
 | 
100  | 
proof (rule filterlim_at_top_mono)  | 
| 
 
7504569a73c7
moved material from AFP to distribution
 
eberlm <eberlm@in.tum.de> 
parents: 
65273 
diff
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: 
65273 
diff
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: 
65273 
diff
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: 
66447 
diff
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: 
65273 
diff
changeset
 | 
105  | 
filterlim_Suc)  | 
| 
 
7504569a73c7
moved material from AFP to distribution
 
eberlm <eberlm@in.tum.de> 
parents: 
65273 
diff
changeset
 | 
106  | 
qed  | 
| 
 
7504569a73c7
moved material from AFP to distribution
 
eberlm <eberlm@in.tum.de> 
parents: 
65273 
diff
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: 
66447 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
changeset
 | 
124  | 
by (subst sum_lessThan_telescope) auto  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
125  | 
also have "\<dots> \<le> (\<Sum>j<n. 1 / (Suc j))"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
126  | 
proof (intro sum_mono, clarify)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
127  | 
fix j assume j: "j < n"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
changeset
 | 
130  | 
by (intro MVT2) (auto intro!: derivative_eq_intros)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
131  | 
then obtain \<xi> :: real  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
133  | 
by auto  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
134  | 
note \<xi>(2)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
135  | 
also have "1 / \<xi> \<le> 1 / (Suc j)"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
136  | 
using \<xi>(1) by (auto simp: field_simps)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
138  | 
by (simp add: add_ac)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
139  | 
qed  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
140  | 
also have "\<dots> = harm n"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
141  | 
by (simp add: harm_altdef field_simps)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
142  | 
finally show ?thesis by (simp add: add_ac)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
143  | 
qed  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
144  | 
|
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
146  | 
proof (rule decseq_SucI)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
147  | 
fix m :: nat  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
148  | 
define n where "n = Suc m"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
149  | 
have "n > 0" by (simp add: n_def)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
150  | 
  have "convex_on {0<..} (\<lambda>x :: real. -ln x)"
 | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
151  | 
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
 | 
152  | 
(auto intro!: derivative_eq_intros simp: field_simps)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
changeset
 | 
155  | 
(auto intro!: derivative_eq_intros simp: interior_open)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
157  | 
by (auto simp: harm_Suc field_simps)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
158  | 
qed  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
159  | 
|
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
160  | 
lemma euler_mascheroni_sequence_nonneg:  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
161  | 
assumes "n > 0"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
162  | 
shows "harm n - ln (real n) \<ge> (0 :: real)"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
163  | 
proof -  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
164  | 
have "ln (real n) \<le> ln (real n + 1)"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
165  | 
using assms by simp  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
166  | 
also have "\<dots> \<le> harm n"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
167  | 
by (rule harm_ge_ln)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
168  | 
finally show ?thesis by simp  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
169  | 
qed  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
170  | 
|
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
171  | 
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
 | 
172  | 
proof -  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
174  | 
using euler_mascheroni_sequence_nonneg[of "Suc n"] by simp  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
175  | 
hence "convergent (\<lambda>n. harm (Suc n) - ln (Suc n))"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
177  | 
auto  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
178  | 
thus ?thesis  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
63040 
diff
changeset
 | 
191  | 
lemma euler_mascheroni_LIMSEQ_of_real:  | 
| 
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
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: 
63040 
diff
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: 
67399 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
65395 
diff
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: 
70136 
diff
changeset
 | 
248  | 
by (blast intro: Lim_transform_eventually)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
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: 
68643 
diff
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: 
65395 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
70817 
diff
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: 
62065 
diff
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: 
70817 
diff
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: 
70817 
diff
changeset
 | 
293  | 
if "\<xi> \<ge> x" "\<xi> \<le> x + a" for \<xi>  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
294  | 
proof -  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
63040 
diff
changeset
 | 
299  | 
from convex_onD_Icc[OF this _ t] assms  | 
| 
71190
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
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: 
70532 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
changeset
 | 
310  | 
thus ?thesis  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
322  | 
let ?f = "\<lambda>t. (t - m) * f' + inverse m"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
323  | 
|
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
325  | 
if "\<xi> \<ge> x" "\<xi> \<le> y" for \<xi>  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
326  | 
proof -  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
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: 
70817 
diff
changeset
 | 
335  | 
have "ln x - ?F x \<le> ln y - ?F y"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
70817 
diff
changeset
 | 
337  | 
hence "ln y - ln x \<ge> ?F y - ?F x"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
338  | 
by (simp add: algebra_simps)  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
changeset
 | 
339  | 
also have "?F y - ?F x = ?A"  | 
| 
 
8b8f9d3b3fac
Simplified Harmonic_Numbers
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
70817 
diff
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: 
63040 
diff
changeset
 | 
344  | 
lemma euler_mascheroni_lower:  | 
| 
68643
 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
67399 
diff
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: 
67399 
diff
changeset
 | 
346  | 
and euler_mascheroni_upper:  | 
| 
 
3db6c9338ec1
Tagged some more files in HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
67399 
diff
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: 
66447 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
62065 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
62065 
diff
changeset
 | 
434  | 
context  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
435  | 
begin  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
436  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
63040 
diff
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: 
70532 
diff
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: 
63040 
diff
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: 
62065 
diff
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: 
63040 
diff
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: 
62065 
diff
changeset
 | 
518  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
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: 
62065 
diff
changeset
 | 
521  | 
bound is accurate to about 0.0015.  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
522  | 
\<close>  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
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: 
62065 
diff
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: 
62065 
diff
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: 
62065 
diff
changeset
 | 
526  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
527  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
528  | 
text \<open>  | 
| 
66495
 
0b46bd081228
More tidying up of monotone_convergence_interval
 
paulson <lp15@cam.ac.uk> 
parents: 
66447 
diff
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: 
62065 
diff
changeset
 | 
530  | 
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
 | 
531  | 
\<close>  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
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: 
62065 
diff
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: 
62065 
diff
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: 
62065 
diff
changeset
 | 
537  | 
by (simp add: eval_nat_numeral)  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
538  | 
finally have "ln (real (Suc 7)) \<in> \<dots>" .  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
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: 
62065 
diff
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: 
62065 
diff
changeset
 | 
543  | 
end  |