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