| author | hoelzl | 
| Thu, 18 Aug 2016 18:11:45 +0200 | |
| changeset 63717 | 3b0500bd2240 | 
| parent 63627 | 6ddb43c6b711 | 
| child 63721 | 492bb53c3420 | 
| 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  | 
Integral_Test  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
12  | 
begin  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
13  | 
|
| 
62055
 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 
hoelzl 
parents: 
62049 
diff
changeset
 | 
14  | 
text \<open>  | 
| 62174 | 15  | 
The definition of the Harmonic Numbers and the Euler-Mascheroni constant.  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
16  | 
  Also provides a reasonably accurate approximation of @{term "ln 2 :: real"}
 | 
| 62174 | 17  | 
and the Euler-Mascheroni constant.  | 
| 
62055
 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 
hoelzl 
parents: 
62049 
diff
changeset
 | 
18  | 
\<close>  | 
| 
 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 
hoelzl 
parents: 
62049 
diff
changeset
 | 
19  | 
|
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
20  | 
lemma ln_2_less_1: "ln 2 < (1::real)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
21  | 
proof -  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
22  | 
have "2 < 5/(2::real)" by simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
23  | 
also have "5/2 \<le> exp (1::real)" using exp_lower_taylor_quadratic[of 1, simplified] by simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
24  | 
finally have "exp (ln 2) < exp (1::real)" by simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
25  | 
thus "ln 2 < (1::real)" by (subst (asm) exp_less_cancel_iff) simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
26  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
27  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
28  | 
lemma setsum_Suc_diff':  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
29  | 
fixes f :: "nat \<Rightarrow> 'a::ab_group_add"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
30  | 
assumes "m \<le> n"  | 
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
31  | 
shows "(\<Sum>i = m..<n. f (Suc i) - f i) = f n - f m"  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
32  | 
using assms by (induct n) (auto simp: le_Suc_eq)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
33  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
34  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
35  | 
subsection \<open>The Harmonic numbers\<close>  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
36  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
37  | 
definition harm :: "nat \<Rightarrow> 'a :: real_normed_field" where  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
38  | 
"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
 | 
39  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
40  | 
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
 | 
41  | 
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
 | 
42  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
43  | 
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
 | 
44  | 
by (simp add: harm_def)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
45  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
46  | 
lemma harm_nonneg: "harm n \<ge> (0 :: 'a :: {real_normed_field,linordered_field})"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
47  | 
unfolding harm_def by (intro setsum_nonneg) simp_all  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
48  | 
|
| 62065 | 49  | 
lemma harm_pos: "n > 0 \<Longrightarrow> harm n > (0 :: 'a :: {real_normed_field,linordered_field})"
 | 
50  | 
unfolding harm_def by (intro setsum_pos) simp_all  | 
|
51  | 
||
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
52  | 
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
 | 
53  | 
unfolding harm_def by simp  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
54  | 
|
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
55  | 
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
 | 
56  | 
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
 | 
57  | 
|
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
58  | 
lemma harm_expand:  | 
| 62065 | 59  | 
"harm 0 = 0"  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
60  | 
"harm (Suc 0) = 1"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
61  | 
"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
 | 
62  | 
proof -  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
63  | 
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
 | 
64  | 
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
 | 
65  | 
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
 | 
66  | 
finally show "harm (numeral n) = harm (pred_numeral n) + inverse (numeral n)" .  | 
| 62065 | 67  | 
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
 | 
68  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
69  | 
lemma not_convergent_harm: "\<not>convergent (harm :: nat \<Rightarrow> 'a :: real_normed_field)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
70  | 
proof -  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
71  | 
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
 | 
72  | 
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
 | 
73  | 
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
 | 
74  | 
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
 | 
75  | 
also have "... \<longleftrightarrow> convergent (\<lambda>n. \<Sum>k\<le>n. inverse (of_nat (Suc k)) :: real)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
76  | 
by (subst setsum_shift_bounds_cl_Suc_ivl) (simp add: atLeast0AtMost)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
77  | 
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
 | 
78  | 
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
 | 
79  | 
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
 | 
80  | 
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
 | 
81  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
82  | 
|
| 62065 | 83  | 
lemma harm_pos_iff [simp]: "harm n > (0 :: 'a :: {real_normed_field,linordered_field}) \<longleftrightarrow> n > 0"
 | 
84  | 
by (rule iffI, cases n, simp add: harm_expand, simp, rule harm_pos)  | 
|
85  | 
||
86  | 
lemma ln_diff_le_inverse:  | 
|
87  | 
assumes "x \<ge> (1::real)"  | 
|
88  | 
shows "ln (x + 1) - ln x < 1 / x"  | 
|
89  | 
proof -  | 
|
90  | 
from assms have "\<exists>z>x. z < x + 1 \<and> ln (x + 1) - ln x = (x + 1 - x) * inverse z"  | 
|
91  | 
by (intro MVT2) (auto intro!: derivative_eq_intros simp: field_simps)  | 
|
92  | 
then obtain z where z: "z > x" "z < x + 1" "ln (x + 1) - ln x = inverse z" by auto  | 
|
93  | 
have "ln (x + 1) - ln x = inverse z" by fact  | 
|
94  | 
also from z(1,2) assms have "\<dots> < 1 / x" by (simp add: field_simps)  | 
|
95  | 
finally show ?thesis .  | 
|
96  | 
qed  | 
|
97  | 
||
98  | 
lemma ln_le_harm: "ln (real n + 1) \<le> (harm n :: real)"  | 
|
99  | 
proof (induction n)  | 
|
100  | 
fix n assume IH: "ln (real n + 1) \<le> harm n"  | 
|
101  | 
have "ln (real (Suc n) + 1) = ln (real n + 1) + (ln (real n + 2) - ln (real n + 1))" by simp  | 
|
102  | 
also have "(ln (real n + 2) - ln (real n + 1)) \<le> 1 / real (Suc n)"  | 
|
103  | 
using ln_diff_le_inverse[of "real n + 1"] by (simp add: add_ac)  | 
|
104  | 
also note IH  | 
|
105  | 
also have "harm n + 1 / real (Suc n) = harm (Suc n)" by (simp add: harm_Suc field_simps)  | 
|
106  | 
finally show "ln (real (Suc n) + 1) \<le> harm (Suc n)" by - simp  | 
|
107  | 
qed (simp_all add: harm_def)  | 
|
108  | 
||
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
109  | 
|
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
110  | 
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
 | 
111  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
112  | 
text \<open>  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
113  | 
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
 | 
114  | 
(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
 | 
115  | 
\<close>  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
116  | 
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
 | 
117  | 
"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
 | 
118  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
119  | 
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
 | 
120  | 
by (simp add: euler_mascheroni_def)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
121  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
122  | 
interpretation euler_mascheroni: antimono_fun_sum_integral_diff "\<lambda>x. inverse (x + 1)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
123  | 
by unfold_locales (auto intro!: continuous_intros)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
124  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
125  | 
lemma euler_mascheroni_sum_integral_diff_series:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
126  | 
"euler_mascheroni.sum_integral_diff_series n = harm (Suc n) - ln (of_nat (Suc n))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
127  | 
proof -  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
128  | 
have "harm (Suc n) = (\<Sum>k=0..n. inverse (of_nat k + 1) :: real)" unfolding harm_def  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
129  | 
unfolding One_nat_def by (subst setsum_shift_bounds_cl_Suc_ivl) (simp add: add_ac)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
130  | 
moreover have "((\<lambda>x. inverse (x + 1) :: real) has_integral ln (of_nat n + 1) - ln (0 + 1))  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
131  | 
                   {0..of_nat n}"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
132  | 
by (intro fundamental_theorem_of_calculus)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
133  | 
(auto intro!: derivative_eq_intros simp: divide_inverse  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
134  | 
has_field_derivative_iff_has_vector_derivative[symmetric])  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
135  | 
  hence "integral {0..of_nat n} (\<lambda>x. inverse (x + 1) :: real) = ln (of_nat (Suc n))"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
136  | 
by (auto dest!: integral_unique)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
137  | 
ultimately show ?thesis  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
138  | 
by (simp add: euler_mascheroni.sum_integral_diff_series_def atLeast0AtMost)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
139  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
140  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
141  | 
lemma euler_mascheroni_sequence_decreasing:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
142  | 
"m > 0 \<Longrightarrow> m \<le> n \<Longrightarrow> harm n - ln (of_nat n) \<le> harm m - ln (of_nat m :: real)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
143  | 
by (cases m, simp, cases n, simp, hypsubst,  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
144  | 
subst (1 2) euler_mascheroni_sum_integral_diff_series [symmetric],  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
145  | 
rule euler_mascheroni.sum_integral_diff_series_antimono, simp)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
146  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
147  | 
lemma euler_mascheroni_sequence_nonneg:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
148  | 
"n > 0 \<Longrightarrow> harm n - ln (of_nat n) \<ge> (0::real)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
149  | 
by (cases n, simp, hypsubst, subst euler_mascheroni_sum_integral_diff_series [symmetric],  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
150  | 
rule euler_mascheroni.sum_integral_diff_series_nonneg)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
151  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
152  | 
lemma euler_mascheroni_convergent: "convergent (\<lambda>n. harm n - ln (of_nat n) :: real)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
153  | 
proof -  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
154  | 
have A: "(\<lambda>n. harm (Suc n) - ln (of_nat (Suc n))) =  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
155  | 
euler_mascheroni.sum_integral_diff_series"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
156  | 
by (subst euler_mascheroni_sum_integral_diff_series [symmetric]) (rule refl)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
157  | 
have "convergent (\<lambda>n. harm (Suc 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
 | 
158  | 
by (subst A) (fact euler_mascheroni.sum_integral_diff_series_convergent)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
159  | 
thus ?thesis by (subst (asm) convergent_Suc_iff)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
160  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
161  | 
|
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
162  | 
lemma euler_mascheroni_LIMSEQ:  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
163  | 
"(\<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
 | 
164  | 
unfolding euler_mascheroni_def  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
165  | 
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
 | 
166  | 
|
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
167  | 
lemma euler_mascheroni_LIMSEQ_of_real:  | 
| 
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
168  | 
"(\<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
 | 
169  | 
      (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
 | 
170  | 
proof -  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
171  | 
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
 | 
172  | 
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
 | 
173  | 
thus ?thesis by simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
174  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
175  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
176  | 
lemma euler_mascheroni_sum:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
177  | 
"(\<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
 | 
178  | 
sums euler_mascheroni"  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
179  | 
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
 | 
180  | 
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
 | 
181  | 
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
 | 
182  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
183  | 
lemma alternating_harmonic_series_sums: "(\<lambda>k. (-1)^k / real_of_nat (Suc k)) sums ln 2"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
184  | 
proof -  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
185  | 
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
 | 
186  | 
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
 | 
187  | 
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
 | 
188  | 
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
 | 
189  | 
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
 | 
190  | 
proof eventually_elim  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
191  | 
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
 | 
192  | 
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
 | 
193  | 
(\<Sum>k<2*n. ((-1)^k + ?g k) / of_nat (Suc k)) - (\<Sum>k<2*n. ?g k / of_nat (Suc k))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
194  | 
by (simp add: setsum.distrib algebra_simps divide_inverse)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
195  | 
also have "(\<Sum>k<2*n. ((-1)^k + ?g k) / real_of_nat (Suc k)) = harm (2*n)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
196  | 
unfolding harm_altdef by (intro setsum.cong) (auto simp: field_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
197  | 
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))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
198  | 
by (intro setsum.mono_neutral_right) auto  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
199  | 
also have "\<dots> = (\<Sum>k|k<2*n \<and> odd k. 2 / (real_of_nat (Suc k)))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
200  | 
by (intro setsum.cong) auto  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
201  | 
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
 | 
202  | 
unfolding harm_altdef  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
203  | 
by (intro setsum.reindex_cong[of "\<lambda>n. 2*n+1"]) (auto simp: inj_on_def field_simps elim!: oddE)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
204  | 
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
 | 
205  | 
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
 | 
206  | 
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
 | 
207  | 
qed  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
208  | 
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
 | 
209  | 
\<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
 | 
210  | 
by (intro tendsto_intros euler_mascheroni_LIMSEQ filterlim_compose[OF euler_mascheroni_LIMSEQ]  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
211  | 
filterlim_subseq) (auto simp: subseq_def)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
212  | 
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
 | 
213  | 
ultimately have "(\<lambda>n. (\<Sum>k<2*n. (-1)^k / real_of_nat (Suc k))) \<longlonglongrightarrow> ln 2"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
214  | 
by (rule Lim_transform_eventually)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
215  | 
|
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
216  | 
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
 | 
217  | 
using LIMSEQ_inverse_real_of_nat  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
218  | 
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
 | 
219  | 
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
 | 
220  | 
by (simp add: summable_sums_iff divide_inverse sums_def)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
221  | 
from filterlim_compose[OF this filterlim_subseq[of "op * (2::nat)"]]  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
222  | 
have "(\<lambda>n. \<Sum>k<2*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
 | 
223  | 
by (simp add: subseq_def)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
224  | 
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
 | 
225  | 
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
 | 
226  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
227  | 
|
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
228  | 
lemma alternating_harmonic_series_sums':  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
229  | 
"(\<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
 | 
230  | 
unfolding sums_def  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
231  | 
proof (rule Lim_transform_eventually)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
232  | 
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
 | 
233  | 
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
 | 
234  | 
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
 | 
235  | 
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
 | 
236  | 
(\<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
 | 
237  | 
proof (intro always_eventually allI)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
238  | 
fix n :: nat  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
239  | 
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
 | 
240  | 
(\<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
 | 
241  | 
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
 | 
242  | 
qed  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
243  | 
qed  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
244  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
245  | 
|
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
246  | 
subsection \<open>Bounds on the Euler--Mascheroni constant\<close>  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
247  | 
|
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
248  | 
(* TODO: Move? *)  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
249  | 
lemma ln_inverse_approx_le:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
250  | 
assumes "(x::real) > 0" "a > 0"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
251  | 
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
 | 
252  | 
proof -  | 
| 63040 | 253  | 
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
 | 
254  | 
have f'_nonpos: "f' \<le> 0" using assms by (simp add: f'_def divide_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
255  | 
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
 | 
256  | 
let ?F = "\<lambda>t. (t - x)^2 * f' / 2 + t * inverse x"  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
257  | 
  have diff: "\<forall>t\<in>{x..x+a}. (?F has_vector_derivative ?f t)
 | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
258  | 
                               (at t within {x..x+a})" using assms
 | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
259  | 
by (auto intro!: derivative_eq_intros  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
260  | 
simp: has_field_derivative_iff_has_vector_derivative[symmetric])  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
261  | 
  from assms have "(?f has_integral (?F (x+a) - ?F x)) {x..x+a}"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
262  | 
by (intro fundamental_theorem_of_calculus[OF _ diff])  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
263  | 
(auto simp: has_field_derivative_iff_has_vector_derivative[symmetric] field_simps  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
264  | 
intro!: derivative_eq_intros)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
265  | 
also have "?F (x+a) - ?F x = (a*2 + f'*a\<^sup>2*x) / (2*x)" using assms by (simp add: field_simps)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
266  | 
also have "f'*a^2 = - (a^2) / (x*(x + a))" using assms  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
267  | 
by (simp add: divide_simps f'_def power2_eq_square)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
268  | 
also have "(a*2 + - a\<^sup>2/(x*(x+a))*x) / (2*x) = ?A" using assms  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
269  | 
by (simp add: divide_simps power2_eq_square) (simp add: algebra_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
270  | 
  finally have int1: "((\<lambda>t. (t - x) * f' + inverse x) has_integral ?A) {x..x + a}" .
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
271  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
272  | 
  from assms have int2: "(inverse has_integral (ln (x + a) - ln x)) {x..x+a}"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
273  | 
by (intro fundamental_theorem_of_calculus)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
274  | 
(auto simp: has_field_derivative_iff_has_vector_derivative[symmetric] divide_simps  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
275  | 
intro!: derivative_eq_intros)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
276  | 
  hence "ln (x + a) - ln x = integral {x..x+a} inverse" by (simp add: integral_unique)
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
277  | 
  also have ineq: "\<forall>xa\<in>{x..x + a}. inverse xa \<le> (xa - x) * f' + inverse x"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
278  | 
proof  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
279  | 
    fix t assume t': "t \<in> {x..x+a}"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
280  | 
with assms have t: "0 \<le> (t - x) / a" "(t - x) / a \<le> 1" by simp_all  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
281  | 
have "inverse t = inverse ((1 - (t - x) / a) *\<^sub>R x + ((t - x) / a) *\<^sub>R (x + a))" (is "_ = ?A")  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
282  | 
using assms t' by (simp add: field_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
283  | 
    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
 | 
284  | 
from convex_onD_Icc[OF this _ t] assms  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
285  | 
have "?A \<le> (1 - (t - x) / a) * inverse x + (t - x) / a * inverse (x + a)" by simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
286  | 
also have "\<dots> = (t - x) * f' + inverse x" using assms  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
287  | 
by (simp add: f'_def divide_simps) (simp add: f'_def field_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
288  | 
finally show "inverse t \<le> (t - x) * f' + inverse x" .  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
289  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
290  | 
  hence "integral {x..x+a} inverse \<le> integral {x..x+a} ?f" using f'_nonpos assms
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
291  | 
by (intro integral_le has_integral_integrable[OF int1] has_integral_integrable[OF int2] ineq)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
292  | 
also have "\<dots> = ?A" using int1 by (rule integral_unique)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
293  | 
finally show ?thesis .  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
294  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
295  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
296  | 
lemma ln_inverse_approx_ge:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
297  | 
assumes "(x::real) > 0" "x < y"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
298  | 
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
 | 
299  | 
proof -  | 
| 63040 | 300  | 
define m where "m = (x+y)/2"  | 
301  | 
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
 | 
302  | 
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
 | 
303  | 
let ?F = "\<lambda>t. (t - m)^2 * f' / 2 + t / m"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
304  | 
  from assms have "((\<lambda>t. (t - m) * f' + inverse m) has_integral (?F y - ?F x)) {x..y}"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
305  | 
by (intro fundamental_theorem_of_calculus)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
306  | 
(auto simp: has_field_derivative_iff_has_vector_derivative[symmetric] divide_simps  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
307  | 
intro!: derivative_eq_intros)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
308  | 
also from m have "?F y - ?F x = ((y - m)^2 - (x - m)^2) * f' / 2 + (y - x) / m"  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
309  | 
by (simp add: field_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
310  | 
also have "((y - m)^2 - (x - m)^2) = 0" by (simp add: m_def power2_eq_square field_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
311  | 
also have "0 * f' / 2 + (y - x) / m = ?A" by (simp add: m_def)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
312  | 
  finally have int1: "((\<lambda>t. (t - m) * f' + inverse m) has_integral ?A) {x..y}" .
 | 
| 
 
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  | 
  from assms have int2: "(inverse has_integral (ln y - ln x)) {x..y}"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
315  | 
by (intro fundamental_theorem_of_calculus)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
316  | 
(auto simp: has_field_derivative_iff_has_vector_derivative[symmetric] divide_simps  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
317  | 
intro!: derivative_eq_intros)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
318  | 
  hence "ln y - ln x = integral {x..y} inverse" by (simp add: integral_unique)
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
319  | 
  also have ineq: "\<forall>xa\<in>{x..y}. inverse xa \<ge> (xa - m) * f' + inverse m"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
320  | 
proof  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
321  | 
    fix t assume t: "t \<in> {x..y}"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
322  | 
from t assms have "inverse t - inverse m \<ge> f' * (t - m)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
323  | 
      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
 | 
324  | 
(auto simp: m_def interior_open f'_def power2_eq_square intro!: derivative_eq_intros)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
325  | 
thus "(t - m) * f' + inverse m \<le> inverse t" by (simp add: algebra_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
326  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
327  | 
  hence "integral {x..y} inverse \<ge> integral {x..y} (\<lambda>t. (t - m) * f' + inverse m)"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
328  | 
using int1 int2 by (intro integral_le has_integral_integrable)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
329  | 
  also have "integral {x..y} (\<lambda>t. (t - m) * f' + inverse m) = ?A"
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
330  | 
using integral_unique[OF int1] by simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
331  | 
finally show ?thesis .  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
332  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
333  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
334  | 
|
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
335  | 
lemma euler_mascheroni_lower:  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
336  | 
"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
 | 
337  | 
and euler_mascheroni_upper:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
338  | 
"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
 | 
339  | 
proof -  | 
| 63040 | 340  | 
define D :: "_ \<Rightarrow> real"  | 
341  | 
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
 | 
342  | 
let ?g = "\<lambda>n. ln (of_nat (n+2)) - ln (of_nat (n+1)) - inverse (of_nat (n+1)) :: real"  | 
| 63040 | 343  | 
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
 | 
344  | 
fix n :: nat  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
345  | 
note summable = sums_summable[OF euler_mascheroni_sum, folded D_def]  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
346  | 
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
 | 
347  | 
unfolding inv_def  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
348  | 
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
 | 
349  | 
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
 | 
350  | 
unfolding inv_def  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
351  | 
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
 | 
352  | 
from euler_mascheroni_sum have "euler_mascheroni = (\<Sum>k. D k)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
353  | 
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
 | 
354  | 
also have "\<dots> = (\<Sum>k. D (k + Suc n)) + (\<Sum>k\<le>n. D k)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
355  | 
by (subst suminf_split_initial_segment[OF summable, of "Suc n"], subst lessThan_Suc_atMost) simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
356  | 
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
 | 
357  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
358  | 
note sum  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
359  | 
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
 | 
360  | 
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
 | 
361  | 
fix k' :: nat  | 
| 63040 | 362  | 
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
 | 
363  | 
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
 | 
364  | 
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
 | 
365  | 
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
 | 
366  | 
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
 | 
367  | 
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
 | 
368  | 
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
 | 
369  | 
by (simp add: field_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
370  | 
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
 | 
371  | 
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
 | 
372  | 
by (simp add: k_def)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
373  | 
from sums_summable[OF sums]  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
374  | 
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
 | 
375  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
376  | 
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
 | 
377  | 
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
 | 
378  | 
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
 | 
379  | 
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)))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
380  | 
unfolding harm_altdef D_def by (subst lessThan_Suc_atMost) (simp add: setsum.distrib setsum_subtractf)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
381  | 
also have "(\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1))) = ln (of_nat (n+2))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
382  | 
by (subst atLeast0AtMost [symmetric], subst setsum_Suc_diff) simp_all  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
383  | 
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
 | 
384  | 
by simp  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
385  | 
|
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
386  | 
note sum  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
387  | 
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
 | 
388  | 
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
 | 
389  | 
fix k' :: nat  | 
| 63040 | 390  | 
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
 | 
391  | 
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
 | 
392  | 
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
 | 
393  | 
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
 | 
394  | 
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
 | 
395  | 
by (simp add: add_ac)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
396  | 
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
 | 
397  | 
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
 | 
398  | 
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
 | 
399  | 
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
 | 
400  | 
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
 | 
401  | 
(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
 | 
402  | 
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
 | 
403  | 
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
 | 
404  | 
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
 | 
405  | 
next  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
406  | 
from sums_summable[OF sums']  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
407  | 
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
 | 
408  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
409  | 
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
 | 
410  | 
by (simp add: sums_iff)  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
411  | 
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
 | 
412  | 
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
 | 
413  | 
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)))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
414  | 
unfolding harm_altdef D_def by (subst lessThan_Suc_atMost) (simp add: setsum.distrib setsum_subtractf)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
415  | 
also have "(\<Sum>k\<le>n. ln (real_of_nat (Suc k+1)) - ln (of_nat (k+1))) = ln (of_nat (n+2))"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
416  | 
by (subst atLeast0AtMost [symmetric], subst setsum_Suc_diff) simp_all  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
417  | 
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
 | 
418  | 
by simp  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
419  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
420  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
421  | 
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
 | 
422  | 
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
 | 
423  | 
|
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
424  | 
context  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
425  | 
begin  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
426  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
427  | 
private lemma ln_approx_aux:  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
428  | 
fixes n :: nat and x :: real  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
429  | 
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
 | 
430  | 
assumes x: "x > 0" "x \<noteq> 1"  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
431  | 
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
 | 
432  | 
            {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
 | 
433  | 
proof -  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
434  | 
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
 | 
435  | 
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
 | 
436  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
437  | 
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
 | 
438  | 
note sums = ln_series_quadratic[OF x(1)]  | 
| 63040 | 439  | 
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
 | 
440  | 
let ?d = "c * (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
 | 
441  | 
have "\<forall>k. y\<^sup>2^k / of_nat (2*(k+n)+1) \<le> y\<^sup>2 ^ k / of_nat (2*n+1)"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
442  | 
by (intro allI divide_left_mono mult_right_mono mult_pos_pos zero_le_power[of "y^2"]) simp_all  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
443  | 
  moreover {
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
444  | 
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
 | 
445  | 
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
 | 
446  | 
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
 | 
447  | 
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
 | 
448  | 
(\<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
 | 
449  | 
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
 | 
450  | 
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
 | 
451  | 
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
 | 
452  | 
} note sums' = this  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
453  | 
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
 | 
454  | 
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
 | 
455  | 
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
 | 
456  | 
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
 | 
457  | 
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
 | 
458  | 
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
 | 
459  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
460  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
461  | 
lemma  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
462  | 
fixes n :: nat and x :: real  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
463  | 
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
 | 
464  | 
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
 | 
465  | 
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
 | 
466  | 
assumes x: "x > 1"  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
467  | 
  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
 | 
468  | 
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
 | 
469  | 
proof -  | 
| 63040 | 470  | 
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
 | 
471  | 
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
 | 
472  | 
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
 | 
473  | 
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
 | 
474  | 
              {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
 | 
475  | 
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
 | 
476  | 
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
 | 
477  | 
by simp  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
478  | 
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))"  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
479  | 
by (auto simp add: divide_simps)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
480  | 
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
 | 
481  | 
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
 | 
482  | 
  moreover {
 | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
483  | 
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
 | 
484  | 
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
 | 
485  | 
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
 | 
486  | 
by (simp add: mult_ac)  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
487  | 
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
 | 
488  | 
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
 | 
489  | 
}  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
490  | 
  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
 | 
491  | 
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
 | 
492  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
493  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
494  | 
end  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
495  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
496  | 
lemma euler_mascheroni_bounds:  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
497  | 
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
 | 
498  | 
  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
 | 
499  | 
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
 | 
500  | 
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
 | 
501  | 
|
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
502  | 
lemma euler_mascheroni_bounds':  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
503  | 
  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
 | 
504  | 
shows "euler_mascheroni \<in>  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
505  | 
           {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
 | 
506  | 
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
 | 
507  | 
|
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
508  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
509  | 
text \<open>  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
510  | 
  Approximation of @{term "ln 2"}. The lower bound is accurate to about 0.03; the upper
 | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
511  | 
bound is accurate to about 0.0015.  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
512  | 
\<close>  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
513  | 
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
 | 
514  | 
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
 | 
515  | 
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
 | 
516  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
517  | 
|
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
518  | 
text \<open>  | 
| 
63594
 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 
hoelzl 
parents: 
63040 
diff
changeset
 | 
519  | 
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
 | 
520  | 
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
 | 
521  | 
\<close>  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
522  | 
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
 | 
523  | 
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
 | 
524  | 
proof -  | 
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
525  | 
have "ln (real (Suc 7)) = 3 * ln 2" by (simp add: ln_powr [symmetric] powr_numeral)  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
526  | 
  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
 | 
527  | 
by (simp add: eval_nat_numeral)  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
528  | 
finally have "ln (real (Suc 7)) \<in> \<dots>" .  | 
| 
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
529  | 
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
 | 
530  | 
thus ?th1 ?th2 by blast+  | 
| 
62049
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
531  | 
qed  | 
| 
 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 
eberlm 
parents:  
diff
changeset
 | 
532  | 
|
| 
62085
 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
62065 
diff
changeset
 | 
533  | 
end  |