author | paulson <lp15@cam.ac.uk> |
Mon, 16 Sep 2019 17:03:13 +0100 | |
changeset 70707 | 125705f5965f |
parent 70532 | fcf3b891ccb1 |
child 70817 | dd675800469d |
permissions | -rw-r--r-- |
63992 | 1 |
(* Title: HOL/Analysis/Gamma_Function.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>The Gamma Function\<close> |
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
changeset
|
6 |
|
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
7 |
theory Gamma_Function |
70196
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
paulson <lp15@cam.ac.uk>
parents:
70136
diff
changeset
|
8 |
imports |
66286
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
9 |
Conformal_Mappings |
70196
b7ef9090feed
Added embedding_map_into_euclideanreal; reduced dependence on Equivalence_Lebesgue_Henstock_Integration in Analysis theories by moving a few lemmas
paulson <lp15@cam.ac.uk>
parents:
70136
diff
changeset
|
10 |
Equivalence_Lebesgue_Henstock_Integration |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
11 |
Summation_Tests |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
12 |
Harmonic_Numbers |
66453
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
wenzelm
parents:
66447
diff
changeset
|
13 |
"HOL-Library.Nonpos_Ints" |
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
wenzelm
parents:
66447
diff
changeset
|
14 |
"HOL-Library.Periodic_Fun" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
15 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
16 |
|
62055
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
changeset
|
17 |
text \<open> |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
18 |
Several equivalent definitions of the Gamma function and its |
62055
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
changeset
|
19 |
most important properties. Also contains the definition and some properties |
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
changeset
|
20 |
of the log-Gamma function and the Digamma function and the other Polygamma functions. |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
21 |
|
62055
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
changeset
|
22 |
Based on the Gamma function, we also prove the Weierstraß product form of the |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
23 |
sin function and, based on this, the solution of the Basel problem (the |
69597 | 24 |
sum over all \<^term>\<open>1 / (n::nat)^2\<close>. |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
25 |
\<close> |
62055
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
hoelzl
parents:
62049
diff
changeset
|
26 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
27 |
lemma pochhammer_eq_0_imp_nonpos_Int: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
28 |
"pochhammer (x::'a::field_char_0) n = 0 \<Longrightarrow> x \<in> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
29 |
by (auto simp: pochhammer_eq_0_iff) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
30 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
31 |
lemma closed_nonpos_Ints [simp]: "closed (\<int>\<^sub>\<le>\<^sub>0 :: 'a :: real_normed_algebra_1 set)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
32 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
33 |
have "\<int>\<^sub>\<le>\<^sub>0 = (of_int ` {n. n \<le> 0} :: 'a set)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
34 |
by (auto elim!: nonpos_Ints_cases intro!: nonpos_Ints_of_int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
35 |
also have "closed \<dots>" by (rule closed_of_int_image) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
36 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
37 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
38 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
39 |
lemma plus_one_in_nonpos_Ints_imp: "z + 1 \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> z \<in> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
40 |
using nonpos_Ints_diff_Nats[of "z+1" "1"] by simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
41 |
|
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
42 |
lemma of_int_in_nonpos_Ints_iff: |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
43 |
"(of_int n :: 'a :: ring_char_0) \<in> \<int>\<^sub>\<le>\<^sub>0 \<longleftrightarrow> n \<le> 0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
44 |
by (auto simp: nonpos_Ints_def) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
45 |
|
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
46 |
lemma one_plus_of_int_in_nonpos_Ints_iff: |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
47 |
"(1 + of_int n :: 'a :: ring_char_0) \<in> \<int>\<^sub>\<le>\<^sub>0 \<longleftrightarrow> n \<le> -1" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
48 |
proof - |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
49 |
have "1 + of_int n = (of_int (n + 1) :: 'a)" by simp |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
50 |
also have "\<dots> \<in> \<int>\<^sub>\<le>\<^sub>0 \<longleftrightarrow> n + 1 \<le> 0" by (subst of_int_in_nonpos_Ints_iff) simp_all |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
51 |
also have "\<dots> \<longleftrightarrow> n \<le> -1" by presburger |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
52 |
finally show ?thesis . |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
53 |
qed |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
54 |
|
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
55 |
lemma one_minus_of_nat_in_nonpos_Ints_iff: |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
56 |
"(1 - of_nat n :: 'a :: ring_char_0) \<in> \<int>\<^sub>\<le>\<^sub>0 \<longleftrightarrow> n > 0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
57 |
proof - |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
58 |
have "(1 - of_nat n :: 'a) = of_int (1 - int n)" by simp |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
59 |
also have "\<dots> \<in> \<int>\<^sub>\<le>\<^sub>0 \<longleftrightarrow> n > 0" by (subst of_int_in_nonpos_Ints_iff) presburger |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
60 |
finally show ?thesis . |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
61 |
qed |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
62 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
63 |
lemma fraction_not_in_ints: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
64 |
assumes "\<not>(n dvd m)" "n \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
65 |
shows "of_int m / of_int n \<notin> (\<int> :: 'a :: {division_ring,ring_char_0} set)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
66 |
proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
67 |
assume "of_int m / (of_int n :: 'a) \<in> \<int>" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
68 |
then obtain k where "of_int m / of_int n = (of_int k :: 'a)" by (elim Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
69 |
with assms have "of_int m = (of_int (k * n) :: 'a)" by (auto simp add: divide_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
70 |
hence "m = k * n" by (subst (asm) of_int_eq_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
71 |
hence "n dvd m" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
72 |
with assms(1) show False by contradiction |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
73 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
74 |
|
63317
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
75 |
lemma fraction_not_in_nats: |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
76 |
assumes "\<not>n dvd m" "n \<noteq> 0" |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
77 |
shows "of_int m / of_int n \<notin> (\<nat> :: 'a :: {division_ring,ring_char_0} set)" |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
78 |
proof |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
79 |
assume "of_int m / of_int n \<in> (\<nat> :: 'a set)" |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
80 |
also note Nats_subset_Ints |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
81 |
finally have "of_int m / of_int n \<in> (\<int> :: 'a set)" . |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
82 |
moreover have "of_int m / of_int n \<notin> (\<int> :: 'a set)" |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
83 |
using assms by (intro fraction_not_in_ints) |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
84 |
ultimately show False by contradiction |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
85 |
qed |
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
eberlm
parents:
63296
diff
changeset
|
86 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
87 |
lemma not_in_Ints_imp_not_in_nonpos_Ints: "z \<notin> \<int> \<Longrightarrow> z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
88 |
by (auto simp: Ints_def nonpos_Ints_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
89 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
90 |
lemma double_in_nonpos_Ints_imp: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
91 |
assumes "2 * (z :: 'a :: field_char_0) \<in> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
92 |
shows "z \<in> \<int>\<^sub>\<le>\<^sub>0 \<or> z + 1/2 \<in> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
93 |
proof- |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
94 |
from assms obtain k where k: "2 * z = - of_nat k" by (elim nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
95 |
thus ?thesis by (cases "even k") (auto elim!: evenE oddE simp: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
96 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
97 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
98 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
99 |
lemma sin_series: "(\<lambda>n. ((-1)^n / fact (2*n+1)) *\<^sub>R z^(2*n+1)) sums sin z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
100 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
101 |
from sin_converges[of z] have "(\<lambda>n. sin_coeff n *\<^sub>R z^n) sums sin z" . |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
102 |
also have "(\<lambda>n. sin_coeff n *\<^sub>R z^n) sums sin z \<longleftrightarrow> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
103 |
(\<lambda>n. ((-1)^n / fact (2*n+1)) *\<^sub>R z^(2*n+1)) sums sin z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
104 |
by (subst sums_mono_reindex[of "\<lambda>n. 2*n+1", symmetric]) |
66447
a1f5c5c26fa6
Replaced subseq with strict_mono
eberlm <eberlm@in.tum.de>
parents:
66286
diff
changeset
|
105 |
(auto simp: sin_coeff_def strict_mono_def ac_simps elim!: oddE) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
106 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
107 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
108 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
109 |
lemma cos_series: "(\<lambda>n. ((-1)^n / fact (2*n)) *\<^sub>R z^(2*n)) sums cos z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
110 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
111 |
from cos_converges[of z] have "(\<lambda>n. cos_coeff n *\<^sub>R z^n) sums cos z" . |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
112 |
also have "(\<lambda>n. cos_coeff n *\<^sub>R z^n) sums cos z \<longleftrightarrow> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
113 |
(\<lambda>n. ((-1)^n / fact (2*n)) *\<^sub>R z^(2*n)) sums cos z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
114 |
by (subst sums_mono_reindex[of "\<lambda>n. 2*n", symmetric]) |
66447
a1f5c5c26fa6
Replaced subseq with strict_mono
eberlm <eberlm@in.tum.de>
parents:
66286
diff
changeset
|
115 |
(auto simp: cos_coeff_def strict_mono_def ac_simps elim!: evenE) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
116 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
117 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
118 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
119 |
lemma sin_z_over_z_series: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
120 |
fixes z :: "'a :: {real_normed_field,banach}" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
121 |
assumes "z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
122 |
shows "(\<lambda>n. (-1)^n / fact (2*n+1) * z^(2*n)) sums (sin z / z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
123 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
124 |
from sin_series[of z] have "(\<lambda>n. z * ((-1)^n / fact (2*n+1)) * z^(2*n)) sums sin z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
125 |
by (simp add: field_simps scaleR_conv_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
126 |
from sums_mult[OF this, of "inverse z"] and assms show ?thesis |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
127 |
by (simp add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
128 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
129 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
130 |
lemma sin_z_over_z_series': |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
131 |
fixes z :: "'a :: {real_normed_field,banach}" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
132 |
assumes "z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
133 |
shows "(\<lambda>n. sin_coeff (n+1) *\<^sub>R z^n) sums (sin z / z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
134 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
135 |
from sums_split_initial_segment[OF sin_converges[of z], of 1] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
136 |
have "(\<lambda>n. z * (sin_coeff (n+1) *\<^sub>R z ^ n)) sums sin z" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
137 |
from sums_mult[OF this, of "inverse z"] assms show ?thesis by (simp add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
138 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
139 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
140 |
lemma has_field_derivative_sin_z_over_z: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
141 |
fixes A :: "'a :: {real_normed_field,banach} set" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
142 |
shows "((\<lambda>z. if z = 0 then 1 else sin z / z) has_field_derivative 0) (at 0 within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
143 |
(is "(?f has_field_derivative ?f') _") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
144 |
proof (rule has_field_derivative_at_within) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
145 |
have "((\<lambda>z::'a. \<Sum>n. of_real (sin_coeff (n+1)) * z^n) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
146 |
has_field_derivative (\<Sum>n. diffs (\<lambda>n. of_real (sin_coeff (n+1))) n * 0^n)) (at 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
147 |
proof (rule termdiffs_strong) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
148 |
from summable_ignore_initial_segment[OF sums_summable[OF sin_converges[of "1::'a"]], of 1] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
149 |
show "summable (\<lambda>n. of_real (sin_coeff (n+1)) * (1::'a)^n)" by (simp add: of_real_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
150 |
qed simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
151 |
also have "(\<lambda>z::'a. \<Sum>n. of_real (sin_coeff (n+1)) * z^n) = ?f" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
152 |
proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
153 |
fix z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
154 |
show "(\<Sum>n. of_real (sin_coeff (n+1)) * z^n) = ?f z" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
155 |
by (cases "z = 0") (insert sin_z_over_z_series'[of z], |
66936 | 156 |
simp_all add: scaleR_conv_of_real sums_iff sin_coeff_def) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
157 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
158 |
also have "(\<Sum>n. diffs (\<lambda>n. of_real (sin_coeff (n + 1))) n * (0::'a) ^ n) = |
66936 | 159 |
diffs (\<lambda>n. of_real (sin_coeff (Suc n))) 0" by simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
160 |
also have "\<dots> = 0" by (simp add: sin_coeff_def diffs_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
161 |
finally show "((\<lambda>z::'a. if z = 0 then 1 else sin z / z) has_field_derivative 0) (at 0)" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
162 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
163 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
164 |
lemma round_Re_minimises_norm: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
165 |
"norm ((z::complex) - of_int m) \<ge> norm (z - of_int (round (Re z)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
166 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
167 |
let ?n = "round (Re z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
168 |
have "norm (z - of_int ?n) = sqrt ((Re z - of_int ?n)\<^sup>2 + (Im z)\<^sup>2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
169 |
by (simp add: cmod_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
170 |
also have "\<bar>Re z - of_int ?n\<bar> \<le> \<bar>Re z - of_int m\<bar>" by (rule round_diff_minimal) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
171 |
hence "sqrt ((Re z - of_int ?n)\<^sup>2 + (Im z)\<^sup>2) \<le> sqrt ((Re z - of_int m)\<^sup>2 + (Im z)\<^sup>2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
172 |
by (intro real_sqrt_le_mono add_mono) (simp_all add: abs_le_square_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
173 |
also have "\<dots> = norm (z - of_int m)" by (simp add: cmod_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
174 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
175 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
176 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
177 |
lemma Re_pos_in_ball: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
178 |
assumes "Re z > 0" "t \<in> ball z (Re z/2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
179 |
shows "Re t > 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
180 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
181 |
have "Re (z - t) \<le> norm (z - t)" by (rule complex_Re_le_cmod) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
182 |
also from assms have "\<dots> < Re z / 2" by (simp add: dist_complex_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
183 |
finally show "Re t > 0" using assms by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
184 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
185 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
186 |
lemma no_nonpos_Int_in_ball_complex: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
187 |
assumes "Re z > 0" "t \<in> ball z (Re z/2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
188 |
shows "t \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
189 |
using Re_pos_in_ball[OF assms] by (force elim!: nonpos_Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
190 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
191 |
lemma no_nonpos_Int_in_ball: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
192 |
assumes "t \<in> ball z (dist z (round (Re z)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
193 |
shows "t \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
194 |
proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
195 |
assume "t \<in> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
196 |
then obtain n where "t = of_int n" by (auto elim!: nonpos_Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
197 |
have "dist z (of_int n) \<le> dist z t + dist t (of_int n)" by (rule dist_triangle) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
198 |
also from assms have "dist z t < dist z (round (Re z))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
199 |
also have "\<dots> \<le> dist z (of_int n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
200 |
using round_Re_minimises_norm[of z] by (simp add: dist_complex_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
201 |
finally have "dist t (of_int n) > 0" by simp |
62072 | 202 |
with \<open>t = of_int n\<close> show False by simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
203 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
204 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
205 |
lemma no_nonpos_Int_in_ball': |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
206 |
assumes "(z :: 'a :: {euclidean_space,real_normed_algebra_1}) \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
207 |
obtains d where "d > 0" "\<And>t. t \<in> ball z d \<Longrightarrow> t \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
208 |
proof (rule that) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
209 |
from assms show "setdist {z} \<int>\<^sub>\<le>\<^sub>0 > 0" by (subst setdist_gt_0_compact_closed) auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
210 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
211 |
fix t assume "t \<in> ball z (setdist {z} \<int>\<^sub>\<le>\<^sub>0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
212 |
thus "t \<notin> \<int>\<^sub>\<le>\<^sub>0" using setdist_le_dist[of z "{z}" t "\<int>\<^sub>\<le>\<^sub>0"] by force |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
213 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
214 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
215 |
lemma no_nonpos_Real_in_ball: |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
216 |
assumes z: "z \<notin> \<real>\<^sub>\<le>\<^sub>0" and t: "t \<in> ball z (if Im z = 0 then Re z / 2 else abs (Im z) / 2)" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
217 |
shows "t \<notin> \<real>\<^sub>\<le>\<^sub>0" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
218 |
using z |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
219 |
proof (cases "Im z = 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
220 |
assume A: "Im z = 0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
221 |
with z have "Re z > 0" by (force simp add: complex_nonpos_Reals_iff) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
222 |
with t A Re_pos_in_ball[of z t] show ?thesis by (force simp add: complex_nonpos_Reals_iff) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
223 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
224 |
assume A: "Im z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
225 |
have "abs (Im z) - abs (Im t) \<le> abs (Im z - Im t)" by linarith |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
226 |
also have "\<dots> = abs (Im (z - t))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
227 |
also have "\<dots> \<le> norm (z - t)" by (rule abs_Im_le_cmod) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
228 |
also from A t have "\<dots> \<le> abs (Im z) / 2" by (simp add: dist_complex_def) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
229 |
finally have "abs (Im t) > 0" using A by simp |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
230 |
thus ?thesis by (force simp add: complex_nonpos_Reals_iff) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
231 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
232 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
233 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
234 |
subsection \<open>The Euler form and the logarithmic Gamma function\<close> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
235 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
236 |
text \<open> |
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
237 |
We define the Gamma function by first defining its multiplicative inverse \<open>rGamma\<close>. |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
238 |
This is more convenient because \<open>rGamma\<close> is entire, which makes proofs of its |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
239 |
properties more convenient because one does not have to watch out for discontinuities. |
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
240 |
(e.g. \<open>rGamma\<close> fulfils \<open>rGamma z = z * rGamma (z + 1)\<close> everywhere, whereas the \<open>\<Gamma>\<close> function |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
241 |
does not fulfil the analogous equation on the non-positive integers) |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
242 |
|
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
243 |
We define the \<open>\<Gamma>\<close> function (resp.\ its reciprocale) in the Euler form. This form has the advantage |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
244 |
that it is a relatively simple limit that converges everywhere. The limit at the poles is 0 |
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
245 |
(due to division by 0). The functional equation \<open>Gamma (z + 1) = z * Gamma z\<close> follows |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
246 |
immediately from the definition. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
247 |
\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
248 |
|
70136 | 249 |
definition\<^marker>\<open>tag important\<close> Gamma_series :: "('a :: {banach,real_normed_field}) \<Rightarrow> nat \<Rightarrow> 'a" where |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
250 |
"Gamma_series z n = fact n * exp (z * of_real (ln (of_nat n))) / pochhammer z (n+1)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
251 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
252 |
definition Gamma_series' :: "('a :: {banach,real_normed_field}) \<Rightarrow> nat \<Rightarrow> 'a" where |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
253 |
"Gamma_series' z n = fact (n - 1) * exp (z * of_real (ln (of_nat n))) / pochhammer z n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
254 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
255 |
definition rGamma_series :: "('a :: {banach,real_normed_field}) \<Rightarrow> nat \<Rightarrow> 'a" where |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
256 |
"rGamma_series z n = pochhammer z (n+1) / (fact n * exp (z * of_real (ln (of_nat n))))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
257 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
258 |
lemma Gamma_series_altdef: "Gamma_series z n = inverse (rGamma_series z n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
259 |
and rGamma_series_altdef: "rGamma_series z n = inverse (Gamma_series z n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
260 |
unfolding Gamma_series_def rGamma_series_def by simp_all |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
261 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
262 |
lemma rGamma_series_minus_of_nat: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
263 |
"eventually (\<lambda>n. rGamma_series (- of_nat k) n = 0) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
264 |
using eventually_ge_at_top[of k] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
265 |
by eventually_elim (auto simp: rGamma_series_def pochhammer_of_nat_eq_0_iff) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
266 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
267 |
lemma Gamma_series_minus_of_nat: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
268 |
"eventually (\<lambda>n. Gamma_series (- of_nat k) n = 0) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
269 |
using eventually_ge_at_top[of k] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
270 |
by eventually_elim (auto simp: Gamma_series_def pochhammer_of_nat_eq_0_iff) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
271 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
272 |
lemma Gamma_series'_minus_of_nat: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
273 |
"eventually (\<lambda>n. Gamma_series' (- of_nat k) n = 0) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
274 |
using eventually_gt_at_top[of k] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
275 |
by eventually_elim (auto simp: Gamma_series'_def pochhammer_of_nat_eq_0_iff) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
276 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
277 |
lemma rGamma_series_nonpos_Ints_LIMSEQ: "z \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> rGamma_series z \<longlonglongrightarrow> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
278 |
by (elim nonpos_Ints_cases', hypsubst, subst tendsto_cong, rule rGamma_series_minus_of_nat, simp) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
279 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
280 |
lemma Gamma_series_nonpos_Ints_LIMSEQ: "z \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Gamma_series z \<longlonglongrightarrow> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
281 |
by (elim nonpos_Ints_cases', hypsubst, subst tendsto_cong, rule Gamma_series_minus_of_nat, simp) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
282 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
283 |
lemma Gamma_series'_nonpos_Ints_LIMSEQ: "z \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Gamma_series' z \<longlonglongrightarrow> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
284 |
by (elim nonpos_Ints_cases', hypsubst, subst tendsto_cong, rule Gamma_series'_minus_of_nat, simp) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
285 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
286 |
lemma Gamma_series_Gamma_series': |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
287 |
assumes z: "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
288 |
shows "(\<lambda>n. Gamma_series' z n / Gamma_series z n) \<longlonglongrightarrow> 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
289 |
proof (rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
290 |
from 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
|
291 |
show "eventually (\<lambda>n. z / of_nat n + 1 = Gamma_series' z n / Gamma_series z n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
292 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
293 |
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
|
294 |
from n z have "Gamma_series' z n / Gamma_series z n = (z + of_nat n) / of_nat n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
295 |
by (cases n, simp) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
296 |
(auto simp add: Gamma_series_def Gamma_series'_def pochhammer_rec' |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
297 |
dest: pochhammer_eq_0_imp_nonpos_Int plus_of_nat_eq_0_imp) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
298 |
also from n have "\<dots> = z / of_nat n + 1" by (simp add: divide_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
299 |
finally show "z / of_nat n + 1 = Gamma_series' z n / Gamma_series z n" .. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
300 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
301 |
have "(\<lambda>x. z / of_nat x) \<longlonglongrightarrow> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
302 |
by (rule tendsto_norm_zero_cancel) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
303 |
(insert tendsto_mult[OF tendsto_const[of "norm z"] lim_inverse_n], |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
304 |
simp add: norm_divide inverse_eq_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
305 |
from tendsto_add[OF this tendsto_const[of 1]] show "(\<lambda>n. z / of_nat n + 1) \<longlonglongrightarrow> 1" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
306 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
307 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
308 |
text \<open> |
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
309 |
We now show that the series that defines the \<open>\<Gamma>\<close> function in the Euler form converges |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
310 |
and that the function defined by it is continuous on the complex halfspace with positive |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
311 |
real part. |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
312 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
313 |
We do this by showing that the logarithm of the Euler series is continuous and converges |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
314 |
locally uniformly, which means that the log-Gamma function defined by its limit is also |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
315 |
continuous. |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
316 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
317 |
This will later allow us to lift holomorphicity and continuity from the log-Gamma |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
318 |
function to the inverse of the Gamma function, and from that to the Gamma function itself. |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
319 |
\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
320 |
|
70136 | 321 |
definition\<^marker>\<open>tag important\<close> ln_Gamma_series :: "('a :: {banach,real_normed_field,ln}) \<Rightarrow> nat \<Rightarrow> 'a" where |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
322 |
"ln_Gamma_series z n = z * ln (of_nat n) - ln z - (\<Sum>k=1..n. ln (z / of_nat k + 1))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
323 |
|
70136 | 324 |
definition\<^marker>\<open>tag unimportant\<close> ln_Gamma_series' :: "('a :: {banach,real_normed_field,ln}) \<Rightarrow> nat \<Rightarrow> 'a" where |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
325 |
"ln_Gamma_series' z n = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
326 |
- euler_mascheroni*z - ln z + (\<Sum>k=1..n. z / of_nat n - ln (z / of_nat k + 1))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
327 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
328 |
definition ln_Gamma :: "('a :: {banach,real_normed_field,ln}) \<Rightarrow> 'a" where |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
329 |
"ln_Gamma z = lim (ln_Gamma_series z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
330 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
331 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
332 |
text \<open> |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
333 |
We now show that the log-Gamma series converges locally uniformly for all complex numbers except |
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
334 |
the non-positive integers. We do this by proving that the series is locally Cauchy. |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
335 |
\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
336 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
337 |
context |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
338 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
339 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
340 |
private lemma ln_Gamma_series_complex_converges_aux: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
341 |
fixes z :: complex and k :: nat |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
342 |
assumes z: "z \<noteq> 0" and k: "of_nat k \<ge> 2*norm z" "k \<ge> 2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
343 |
shows "norm (z * ln (1 - 1/of_nat k) + ln (z/of_nat k + 1)) \<le> 2*(norm z + norm z^2) / of_nat k^2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
344 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
345 |
let ?k = "of_nat k :: complex" and ?z = "norm z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
346 |
have "z *ln (1 - 1/?k) + ln (z/?k+1) = z*(ln (1 - 1/?k :: complex) + 1/?k) + (ln (1+z/?k) - z/?k)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
347 |
by (simp add: algebra_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
348 |
also have "norm ... \<le> ?z * norm (ln (1-1/?k) + 1/?k :: complex) + norm (ln (1+z/?k) - z/?k)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
349 |
by (subst norm_mult [symmetric], rule norm_triangle_ineq) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
350 |
also have "norm (Ln (1 + -1/?k) - (-1/?k)) \<le> (norm (-1/?k))\<^sup>2 / (1 - norm(-1/?k))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
351 |
using k by (intro Ln_approx_linear) (simp add: norm_divide) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
352 |
hence "?z * norm (ln (1-1/?k) + 1/?k) \<le> ?z * ((norm (1/?k))^2 / (1 - norm (1/?k)))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
353 |
by (intro mult_left_mono) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
354 |
also have "... \<le> (?z * (of_nat k / (of_nat k - 1))) / of_nat k^2" using k |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
355 |
by (simp add: field_simps power2_eq_square norm_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
356 |
also have "... \<le> (?z * 2) / of_nat k^2" using k |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
357 |
by (intro divide_right_mono mult_left_mono) (simp_all add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
358 |
also have "norm (ln (1+z/?k) - z/?k) \<le> norm (z/?k)^2 / (1 - norm (z/?k))" using k |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
359 |
by (intro Ln_approx_linear) (simp add: norm_divide) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
360 |
hence "norm (ln (1+z/?k) - z/?k) \<le> ?z^2 / of_nat k^2 / (1 - ?z / of_nat k)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
361 |
by (simp add: field_simps norm_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
362 |
also have "... \<le> (?z^2 * (of_nat k / (of_nat k - ?z))) / of_nat k^2" using k |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
363 |
by (simp add: field_simps power2_eq_square) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
364 |
also have "... \<le> (?z^2 * 2) / of_nat k^2" using k |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
365 |
by (intro divide_right_mono mult_left_mono) (simp_all add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
366 |
also note add_divide_distrib [symmetric] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
367 |
finally show ?thesis by (simp only: distrib_left mult.commute) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
368 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
369 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
370 |
lemma ln_Gamma_series_complex_converges: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
371 |
assumes z: "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
372 |
assumes d: "d > 0" "\<And>n. n \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> norm (z - of_int n) > d" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
373 |
shows "uniformly_convergent_on (ball z d) (\<lambda>n z. ln_Gamma_series z n :: complex)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
374 |
proof (intro Cauchy_uniformly_convergent uniformly_Cauchy_onI') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
375 |
fix e :: real assume e: "e > 0" |
69260
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
haftmann
parents:
69064
diff
changeset
|
376 |
define e'' where "e'' = (SUP t\<in>ball z d. norm t + norm t^2)" |
63040 | 377 |
define e' where "e' = e / (2*e'')" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
378 |
have "bounded ((\<lambda>t. norm t + norm t^2) ` cball z d)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
379 |
by (intro compact_imp_bounded compact_continuous_image) (auto intro!: continuous_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
380 |
hence "bounded ((\<lambda>t. norm t + norm t^2) ` ball z d)" by (rule bounded_subset) auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
381 |
hence bdd: "bdd_above ((\<lambda>t. norm t + norm t^2) ` ball z d)" by (rule bounded_imp_bdd_above) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
382 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
383 |
with z d(1) d(2)[of "-1"] have e''_pos: "e'' > 0" unfolding e''_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
384 |
by (subst less_cSUP_iff) (auto intro!: add_pos_nonneg bexI[of _ z]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
385 |
have e'': "norm t + norm t^2 \<le> e''" if "t \<in> ball z d" for t unfolding e''_def using that |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
386 |
by (rule cSUP_upper[OF _ bdd]) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
387 |
from e z e''_pos have e': "e' > 0" unfolding e'_def |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
388 |
by (intro divide_pos_pos mult_pos_pos add_pos_pos) (simp_all add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
389 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
390 |
have "summable (\<lambda>k. inverse ((real_of_nat k)^2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
391 |
by (rule inverse_power_summable) simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
392 |
from summable_partial_sum_bound[OF this e'] guess M . note M = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
393 |
|
63040 | 394 |
define N where "N = max 2 (max (nat \<lceil>2 * (norm z + d)\<rceil>) M)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
395 |
{ |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
396 |
from d have "\<lceil>2 * (cmod z + d)\<rceil> \<ge> \<lceil>0::real\<rceil>" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
397 |
by (intro ceiling_mono mult_nonneg_nonneg add_nonneg_nonneg) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
398 |
hence "2 * (norm z + d) \<le> of_nat (nat \<lceil>2 * (norm z + d)\<rceil>)" unfolding N_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
399 |
by (simp_all add: le_of_int_ceiling) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
400 |
also have "... \<le> of_nat N" unfolding N_def |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
401 |
by (subst of_nat_le_iff) (rule max.coboundedI2, rule max.cobounded1) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
402 |
finally have "of_nat N \<ge> 2 * (norm z + d)" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
403 |
moreover have "N \<ge> 2" "N \<ge> M" unfolding N_def by simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
404 |
moreover have "(\<Sum>k=m..n. 1/(of_nat k)\<^sup>2) < e'" if "m \<ge> N" for m n |
62072 | 405 |
using M[OF order.trans[OF \<open>N \<ge> M\<close> that]] unfolding real_norm_def |
64267 | 406 |
by (subst (asm) abs_of_nonneg) (auto intro: sum_nonneg simp: divide_simps) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
407 |
moreover note calculation |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
408 |
} note N = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
409 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
410 |
show "\<exists>M. \<forall>t\<in>ball z d. \<forall>m\<ge>M. \<forall>n>m. dist (ln_Gamma_series t m) (ln_Gamma_series t n) < e" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
411 |
unfolding dist_complex_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
412 |
proof (intro exI[of _ N] ballI allI impI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
413 |
fix t m n assume t: "t \<in> ball z d" and mn: "m \<ge> N" "n > m" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
414 |
from d(2)[of 0] t have "0 < dist z 0 - dist z t" by (simp add: field_simps dist_complex_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
415 |
also have "dist z 0 - dist z t \<le> dist 0 t" using dist_triangle[of 0 z t] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
416 |
by (simp add: dist_commute) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
417 |
finally have t_nz: "t \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
418 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
419 |
have "norm t \<le> norm z + norm (t - z)" by (rule norm_triangle_sub) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
420 |
also from t have "norm (t - z) < d" by (simp add: dist_complex_def norm_minus_commute) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
421 |
also have "2 * (norm z + d) \<le> of_nat N" by (rule N) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
422 |
also have "N \<le> m" by (rule mn) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
423 |
finally have norm_t: "2 * norm t < of_nat m" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
424 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
425 |
have "ln_Gamma_series t m - ln_Gamma_series t n = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
426 |
(-(t * Ln (of_nat n)) - (-(t * Ln (of_nat m)))) + |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
427 |
((\<Sum>k=1..n. Ln (t / of_nat k + 1)) - (\<Sum>k=1..m. Ln (t / of_nat k + 1)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
428 |
by (simp add: ln_Gamma_series_def algebra_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
429 |
also have "(\<Sum>k=1..n. Ln (t / of_nat k + 1)) - (\<Sum>k=1..m. Ln (t / of_nat k + 1)) = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
430 |
(\<Sum>k\<in>{1..n}-{1..m}. Ln (t / of_nat k + 1))" using mn |
64267 | 431 |
by (simp add: sum_diff) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
432 |
also from mn have "{1..n}-{1..m} = {Suc m..n}" by fastforce |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
433 |
also have "-(t * Ln (of_nat n)) - (-(t * Ln (of_nat m))) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
434 |
(\<Sum>k = Suc m..n. t * Ln (of_nat (k - 1)) - t * Ln (of_nat k))" using mn |
64267 | 435 |
by (subst sum_telescope'' [symmetric]) simp_all |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
436 |
also have "... = (\<Sum>k = Suc m..n. t * Ln (of_nat (k - 1) / of_nat k))" using mn N |
64267 | 437 |
by (intro sum_cong_Suc) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
438 |
(simp_all del: of_nat_Suc add: field_simps Ln_of_nat Ln_of_nat_over_of_nat) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
439 |
also have "of_nat (k - 1) / of_nat k = 1 - 1 / (of_nat k :: complex)" if "k \<in> {Suc m..n}" for k |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
440 |
using that of_nat_eq_0_iff[of "Suc i" for i] by (cases k) (simp_all add: divide_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
441 |
hence "(\<Sum>k = Suc m..n. t * Ln (of_nat (k - 1) / of_nat k)) = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
442 |
(\<Sum>k = Suc m..n. t * Ln (1 - 1 / of_nat k))" using mn N |
64267 | 443 |
by (intro sum.cong) simp_all |
444 |
also note sum.distrib [symmetric] |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
445 |
also have "norm (\<Sum>k=Suc m..n. t * Ln (1 - 1/of_nat k) + Ln (t/of_nat k + 1)) \<le> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
446 |
(\<Sum>k=Suc m..n. 2 * (norm t + (norm t)\<^sup>2) / (real_of_nat k)\<^sup>2)" using t_nz N(2) mn norm_t |
64267 | 447 |
by (intro order.trans[OF norm_sum sum_mono[OF ln_Gamma_series_complex_converges_aux]]) simp_all |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
448 |
also have "... \<le> 2 * (norm t + norm t^2) * (\<Sum>k=Suc m..n. 1 / (of_nat k)\<^sup>2)" |
64267 | 449 |
by (simp add: sum_distrib_left) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
450 |
also have "... < 2 * (norm t + norm t^2) * e'" using mn z t_nz |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
451 |
by (intro mult_strict_left_mono N mult_pos_pos add_pos_pos) simp_all |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
452 |
also from e''_pos have "... = e * ((cmod t + (cmod t)\<^sup>2) / e'')" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
453 |
by (simp add: e'_def field_simps power2_eq_square) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
454 |
also from e''[OF t] e''_pos e |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
455 |
have "\<dots> \<le> e * 1" by (intro mult_left_mono) (simp_all add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
456 |
finally show "norm (ln_Gamma_series t m - ln_Gamma_series t n) < e" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
457 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
458 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
459 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
460 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
461 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
462 |
lemma ln_Gamma_series_complex_converges': |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
463 |
assumes z: "(z :: complex) \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
464 |
shows "\<exists>d>0. uniformly_convergent_on (ball z d) (\<lambda>n z. ln_Gamma_series z n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
465 |
proof - |
63040 | 466 |
define d' where "d' = Re z" |
467 |
define d where "d = (if d' > 0 then d' / 2 else norm (z - of_int (round d')) / 2)" |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
468 |
have "of_int (round d') \<in> \<int>\<^sub>\<le>\<^sub>0" if "d' \<le> 0" using that |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
469 |
by (intro nonpos_Ints_of_int) (simp_all add: round_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
470 |
with assms have d_pos: "d > 0" unfolding d_def by (force simp: not_less) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
471 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
472 |
have "d < cmod (z - of_int n)" if "n \<in> \<int>\<^sub>\<le>\<^sub>0" for n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
473 |
proof (cases "Re z > 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
474 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
475 |
from nonpos_Ints_nonpos[OF that] have n: "n \<le> 0" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
476 |
from True have "d = Re z/2" by (simp add: d_def d'_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
477 |
also from n True have "\<dots> < Re (z - of_int n)" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
478 |
also have "\<dots> \<le> norm (z - of_int n)" by (rule complex_Re_le_cmod) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
479 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
480 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
481 |
case False |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
482 |
with assms nonpos_Ints_of_int[of "round (Re z)"] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
483 |
have "z \<noteq> of_int (round d')" by (auto simp: not_less) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
484 |
with False have "d < norm (z - of_int (round d'))" by (simp add: d_def d'_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
485 |
also have "\<dots> \<le> norm (z - of_int n)" unfolding d'_def by (rule round_Re_minimises_norm) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
486 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
487 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
488 |
hence conv: "uniformly_convergent_on (ball z d) (\<lambda>n z. ln_Gamma_series z n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
489 |
by (intro ln_Gamma_series_complex_converges d_pos z) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
490 |
from d_pos conv show ?thesis by blast |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
491 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
492 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
493 |
lemma ln_Gamma_series_complex_converges'': "(z :: complex) \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> convergent (ln_Gamma_series z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
494 |
by (drule ln_Gamma_series_complex_converges') (auto intro: uniformly_convergent_imp_convergent) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
495 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
496 |
theorem ln_Gamma_complex_LIMSEQ: "(z :: complex) \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> ln_Gamma_series z \<longlonglongrightarrow> ln_Gamma z" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
497 |
using ln_Gamma_series_complex_converges'' by (simp add: convergent_LIMSEQ_iff ln_Gamma_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
498 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
499 |
lemma exp_ln_Gamma_series_complex: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
500 |
assumes "n > 0" "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
501 |
shows "exp (ln_Gamma_series z n :: complex) = Gamma_series z n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
502 |
proof - |
63417
c184ec919c70
more lemmas to emphasize {0::nat..(<)n} as canonical representation of intervals on nat
haftmann
parents:
63367
diff
changeset
|
503 |
from assms obtain m where m: "n = Suc m" by (cases n) blast |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
504 |
from assms have "z \<noteq> 0" by (intro notI) auto |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
505 |
with assms have "exp (ln_Gamma_series z n) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
506 |
(of_nat n) powr z / (z * (\<Prod>k=1..n. exp (Ln (z / of_nat k + 1))))" |
64267 | 507 |
unfolding ln_Gamma_series_def powr_def by (simp add: exp_diff exp_sum) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
508 |
also from assms have "(\<Prod>k=1..n. exp (Ln (z / of_nat k + 1))) = (\<Prod>k=1..n. z / of_nat k + 1)" |
64272 | 509 |
by (intro prod.cong[OF refl], subst exp_Ln) (auto simp: field_simps plus_of_nat_eq_0_imp) |
63417
c184ec919c70
more lemmas to emphasize {0::nat..(<)n} as canonical representation of intervals on nat
haftmann
parents:
63367
diff
changeset
|
510 |
also have "... = (\<Prod>k=1..n. z + k) / fact n" |
64272 | 511 |
by (simp add: fact_prod) |
512 |
(subst prod_dividef [symmetric], simp_all add: field_simps) |
|
63417
c184ec919c70
more lemmas to emphasize {0::nat..(<)n} as canonical representation of intervals on nat
haftmann
parents:
63367
diff
changeset
|
513 |
also from m have "z * ... = (\<Prod>k=0..n. z + k) / fact n" |
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
|
514 |
by (simp add: prod.atLeast0_atMost_Suc_shift prod.atLeast_Suc_atMost_Suc_shift del: prod.cl_ivl_Suc) |
63417
c184ec919c70
more lemmas to emphasize {0::nat..(<)n} as canonical representation of intervals on nat
haftmann
parents:
63367
diff
changeset
|
515 |
also have "(\<Prod>k=0..n. z + k) = pochhammer z (Suc n)" |
64272 | 516 |
unfolding pochhammer_prod |
517 |
by (simp add: prod.atLeast0_atMost_Suc atLeastLessThanSuc_atLeastAtMost) |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
518 |
also have "of_nat n powr z / (pochhammer z (Suc n) / fact n) = Gamma_series z n" |
66936 | 519 |
unfolding Gamma_series_def using assms by (simp add: divide_simps powr_def) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
520 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
521 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
522 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
523 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
524 |
lemma ln_Gamma_series'_aux: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
525 |
assumes "(z::complex) \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
526 |
shows "(\<lambda>k. z / of_nat (Suc k) - ln (1 + z / of_nat (Suc k))) sums |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
527 |
(ln_Gamma z + euler_mascheroni * z + ln z)" (is "?f sums ?s") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
528 |
unfolding sums_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
529 |
proof (rule Lim_transform) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
530 |
show "(\<lambda>n. ln_Gamma_series z n + of_real (harm n - ln (of_nat n)) * z + ln z) \<longlonglongrightarrow> ?s" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
531 |
(is "?g \<longlonglongrightarrow> _") |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
532 |
by (intro tendsto_intros ln_Gamma_complex_LIMSEQ euler_mascheroni_LIMSEQ_of_real assms) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
533 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
534 |
have A: "eventually (\<lambda>n. (\<Sum>k<n. ?f k) - ?g n = 0) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
535 |
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
|
536 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
537 |
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
|
538 |
have "(\<Sum>k<n. ?f k) = (\<Sum>k=1..n. z / of_nat k - ln (1 + z / of_nat k))" |
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
|
539 |
by (subst atLeast0LessThan [symmetric], subst sum.shift_bounds_Suc_ivl [symmetric], |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
540 |
subst atLeastLessThanSuc_atLeastAtMost) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
541 |
also have "\<dots> = z * of_real (harm n) - (\<Sum>k=1..n. ln (1 + z / of_nat k))" |
64267 | 542 |
by (simp add: harm_def sum_subtractf sum_distrib_left divide_inverse) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
543 |
also from n have "\<dots> - ?g n = 0" |
64267 | 544 |
by (simp add: ln_Gamma_series_def sum_subtractf algebra_simps Ln_of_nat) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
545 |
finally show "(\<Sum>k<n. ?f k) - ?g n = 0" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
546 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
547 |
show "(\<lambda>n. (\<Sum>k<n. ?f k) - ?g n) \<longlonglongrightarrow> 0" by (subst tendsto_cong[OF A]) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
548 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
549 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
550 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
551 |
lemma uniformly_summable_deriv_ln_Gamma: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
552 |
assumes z: "(z :: 'a :: {real_normed_field,banach}) \<noteq> 0" and d: "d > 0" "d \<le> norm z/2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
553 |
shows "uniformly_convergent_on (ball z d) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
554 |
(\<lambda>k z. \<Sum>i<k. inverse (of_nat (Suc i)) - inverse (z + of_nat (Suc i)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
555 |
(is "uniformly_convergent_on _ (\<lambda>k z. \<Sum>i<k. ?f i z)") |
69529 | 556 |
proof (rule Weierstrass_m_test'_ev) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
557 |
{ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
558 |
fix t assume t: "t \<in> ball z d" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
559 |
have "norm z = norm (t + (z - t))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
560 |
have "norm (t + (z - t)) \<le> norm t + norm (z - t)" by (rule norm_triangle_ineq) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
561 |
also from t d have "norm (z - t) < norm z / 2" by (simp add: dist_norm) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
562 |
finally have A: "norm t > norm z / 2" using z by (simp add: field_simps) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
563 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
564 |
have "norm t = norm (z + (t - z))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
565 |
also have "\<dots> \<le> norm z + norm (t - z)" by (rule norm_triangle_ineq) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
566 |
also from t d have "norm (t - z) \<le> norm z / 2" by (simp add: dist_norm norm_minus_commute) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
567 |
also from z have "\<dots> < norm z" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
568 |
finally have B: "norm t < 2 * norm z" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
569 |
note A B |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
570 |
} note ball = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
571 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
572 |
show "eventually (\<lambda>n. \<forall>t\<in>ball z d. norm (?f n t) \<le> 4 * norm z * inverse (of_nat (Suc n)^2)) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
573 |
using eventually_gt_at_top apply eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
574 |
proof safe |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
575 |
fix t :: 'a assume t: "t \<in> ball z d" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
576 |
from z ball[OF t] have t_nz: "t \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
577 |
fix n :: nat assume n: "n > nat \<lceil>4 * norm z\<rceil>" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
578 |
from ball[OF t] t_nz have "4 * norm z > 2 * norm t" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
579 |
also from n have "\<dots> < of_nat n" by linarith |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
580 |
finally have n: "of_nat n > 2 * norm t" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
581 |
hence "of_nat n > norm t" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
582 |
hence t': "t \<noteq> -of_nat (Suc n)" by (intro notI) (simp del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
583 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
584 |
with t_nz have "?f n t = 1 / (of_nat (Suc n) * (1 + of_nat (Suc n)/t))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
585 |
by (simp add: divide_simps eq_neg_iff_add_eq_0 del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
586 |
also have "norm \<dots> = inverse (of_nat (Suc n)) * inverse (norm (of_nat (Suc n)/t + 1))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
587 |
by (simp add: norm_divide norm_mult divide_simps add_ac del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
588 |
also { |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
589 |
from z t_nz ball[OF t] have "of_nat (Suc n) / (4 * norm z) \<le> of_nat (Suc n) / (2 * norm t)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
590 |
by (intro divide_left_mono mult_pos_pos) simp_all |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
591 |
also have "\<dots> < norm (of_nat (Suc n) / t) - norm (1 :: 'a)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
592 |
using t_nz n by (simp add: field_simps norm_divide del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
593 |
also have "\<dots> \<le> norm (of_nat (Suc n)/t + 1)" by (rule norm_diff_ineq) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
594 |
finally have "inverse (norm (of_nat (Suc n)/t + 1)) \<le> 4 * norm z / of_nat (Suc n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
595 |
using z by (simp add: divide_simps norm_divide mult_ac del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
596 |
} |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
597 |
also have "inverse (real_of_nat (Suc n)) * (4 * norm z / real_of_nat (Suc n)) = |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
598 |
4 * norm z * inverse (of_nat (Suc n)^2)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
599 |
by (simp add: divide_simps power2_eq_square del: of_nat_Suc) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
600 |
finally show "norm (?f n t) \<le> 4 * norm z * inverse (of_nat (Suc n)^2)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
601 |
by (simp del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
602 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
603 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
604 |
show "summable (\<lambda>n. 4 * norm z * inverse ((of_nat (Suc n))^2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
605 |
by (subst summable_Suc_iff) (simp add: summable_mult inverse_power_summable) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
606 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
607 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
608 |
|
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
609 |
subsection \<open>The Polygamma functions\<close> |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
610 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
611 |
lemma summable_deriv_ln_Gamma: |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
612 |
"z \<noteq> (0 :: 'a :: {real_normed_field,banach}) \<Longrightarrow> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
613 |
summable (\<lambda>n. inverse (of_nat (Suc n)) - inverse (z + of_nat (Suc n)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
614 |
unfolding summable_iff_convergent |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
615 |
by (rule uniformly_convergent_imp_convergent, |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
616 |
rule uniformly_summable_deriv_ln_Gamma[of z "norm z/2"]) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
617 |
|
70136 | 618 |
definition\<^marker>\<open>tag important\<close> Polygamma :: "nat \<Rightarrow> ('a :: {real_normed_field,banach}) \<Rightarrow> 'a" where |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
619 |
"Polygamma n z = (if n = 0 then |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
620 |
(\<Sum>k. inverse (of_nat (Suc k)) - inverse (z + of_nat k)) - euler_mascheroni else |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
621 |
(-1)^Suc n * fact n * (\<Sum>k. inverse ((z + of_nat k)^Suc n)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
622 |
|
70136 | 623 |
abbreviation\<^marker>\<open>tag important\<close> Digamma :: "('a :: {real_normed_field,banach}) \<Rightarrow> 'a" where |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
624 |
"Digamma \<equiv> Polygamma 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
625 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
626 |
lemma Digamma_def: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
627 |
"Digamma z = (\<Sum>k. inverse (of_nat (Suc k)) - inverse (z + of_nat k)) - euler_mascheroni" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
628 |
by (simp add: Polygamma_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
629 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
630 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
631 |
lemma summable_Digamma: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
632 |
assumes "(z :: 'a :: {real_normed_field,banach}) \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
633 |
shows "summable (\<lambda>n. inverse (of_nat (Suc n)) - inverse (z + of_nat n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
634 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
635 |
have sums: "(\<lambda>n. inverse (z + of_nat (Suc n)) - inverse (z + of_nat n)) sums |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
636 |
(0 - inverse (z + of_nat 0))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
637 |
by (intro telescope_sums filterlim_compose[OF tendsto_inverse_0] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
638 |
tendsto_add_filterlim_at_infinity[OF tendsto_const] tendsto_of_nat) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
639 |
from summable_add[OF summable_deriv_ln_Gamma[OF assms] sums_summable[OF sums]] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
640 |
show "summable (\<lambda>n. inverse (of_nat (Suc n)) - inverse (z + of_nat n))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
641 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
642 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
643 |
lemma summable_offset: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
644 |
assumes "summable (\<lambda>n. f (n + k) :: 'a :: real_normed_vector)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
645 |
shows "summable f" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
646 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
647 |
from assms have "convergent (\<lambda>m. \<Sum>n<m. f (n + k))" by (simp add: summable_iff_convergent) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
648 |
hence "convergent (\<lambda>m. (\<Sum>n<k. f n) + (\<Sum>n<m. f (n + k)))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
649 |
by (intro convergent_add convergent_const) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
650 |
also have "(\<lambda>m. (\<Sum>n<k. f n) + (\<Sum>n<m. f (n + k))) = (\<lambda>m. \<Sum>n<m+k. f n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
651 |
proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
652 |
fix m :: nat |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
653 |
have "{..<m+k} = {..<k} \<union> {k..<m+k}" by auto |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
654 |
also have "(\<Sum>n\<in>\<dots>. f n) = (\<Sum>n<k. f n) + (\<Sum>n=k..<m+k. f n)" |
64267 | 655 |
by (rule sum.union_disjoint) auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
656 |
also have "(\<Sum>n=k..<m+k. f n) = (\<Sum>n=0..<m+k-k. f (n + k))" |
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
|
657 |
using sum.shift_bounds_nat_ivl [of f 0 k m] by simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
658 |
finally show "(\<Sum>n<k. f n) + (\<Sum>n<m. f (n + k)) = (\<Sum>n<m+k. f n)" by (simp add: atLeast0LessThan) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
659 |
qed |
64267 | 660 |
finally have "(\<lambda>a. sum f {..<a}) \<longlonglongrightarrow> lim (\<lambda>m. sum f {..<m + k})" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
661 |
by (auto simp: convergent_LIMSEQ_iff dest: LIMSEQ_offset) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
662 |
thus ?thesis by (auto simp: summable_iff_convergent convergent_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
663 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
664 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
665 |
lemma Polygamma_converges: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
666 |
fixes z :: "'a :: {real_normed_field,banach}" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
667 |
assumes z: "z \<noteq> 0" and n: "n \<ge> 2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
668 |
shows "uniformly_convergent_on (ball z d) (\<lambda>k z. \<Sum>i<k. inverse ((z + of_nat i)^n))" |
69529 | 669 |
proof (rule Weierstrass_m_test'_ev) |
63040 | 670 |
define e where "e = (1 + d / norm z)" |
671 |
define m where "m = nat \<lceil>norm z * e\<rceil>" |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
672 |
{ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
673 |
fix t assume t: "t \<in> ball z d" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
674 |
have "norm t = norm (z + (t - z))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
675 |
also have "\<dots> \<le> norm z + norm (t - z)" by (rule norm_triangle_ineq) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
676 |
also from t have "norm (t - z) < d" by (simp add: dist_norm norm_minus_commute) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
677 |
finally have "norm t < norm z * e" using z by (simp add: divide_simps e_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
678 |
} note ball = this |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
679 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
680 |
show "eventually (\<lambda>k. \<forall>t\<in>ball z d. norm (inverse ((t + of_nat k)^n)) \<le> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
681 |
inverse (of_nat (k - m)^n)) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
682 |
using eventually_gt_at_top[of m] apply eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
683 |
proof (intro ballI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
684 |
fix k :: nat and t :: 'a assume k: "k > m" and t: "t \<in> ball z d" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
685 |
from k have "real_of_nat (k - m) = of_nat k - of_nat m" by (simp add: of_nat_diff) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
686 |
also have "\<dots> \<le> norm (of_nat k :: 'a) - norm z * e" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
687 |
unfolding m_def by (subst norm_of_nat) linarith |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
688 |
also from ball[OF t] have "\<dots> \<le> norm (of_nat k :: 'a) - norm t" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
689 |
also have "\<dots> \<le> norm (of_nat k + t)" by (rule norm_diff_ineq) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
690 |
finally have "inverse ((norm (t + of_nat k))^n) \<le> inverse (real_of_nat (k - m)^n)" using k n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
691 |
by (intro le_imp_inverse_le power_mono) (simp_all add: add_ac del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
692 |
thus "norm (inverse ((t + of_nat k)^n)) \<le> inverse (of_nat (k - m)^n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
693 |
by (simp add: norm_inverse norm_power power_inverse) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
694 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
695 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
696 |
have "summable (\<lambda>k. inverse ((real_of_nat k)^n))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
697 |
using inverse_power_summable[of n] n by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
698 |
hence "summable (\<lambda>k. inverse ((real_of_nat (k + m - m))^n))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
699 |
thus "summable (\<lambda>k. inverse ((real_of_nat (k - m))^n))" by (rule summable_offset) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
700 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
701 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
702 |
lemma Polygamma_converges': |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
703 |
fixes z :: "'a :: {real_normed_field,banach}" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
704 |
assumes z: "z \<noteq> 0" and n: "n \<ge> 2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
705 |
shows "summable (\<lambda>k. inverse ((z + of_nat k)^n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
706 |
using uniformly_convergent_imp_convergent[OF Polygamma_converges[OF assms, of 1], of z] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
707 |
by (simp add: summable_iff_convergent) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
708 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
709 |
theorem Digamma_LIMSEQ: |
63721 | 710 |
fixes z :: "'a :: {banach,real_normed_field}" |
711 |
assumes z: "z \<noteq> 0" |
|
712 |
shows "(\<lambda>m. of_real (ln (real m)) - (\<Sum>n<m. inverse (z + of_nat n))) \<longlonglongrightarrow> Digamma z" |
|
713 |
proof - |
|
714 |
have "(\<lambda>n. of_real (ln (real n / (real (Suc n))))) \<longlonglongrightarrow> (of_real (ln 1) :: 'a)" |
|
715 |
by (intro tendsto_intros LIMSEQ_n_over_Suc_n) simp_all |
|
716 |
hence "(\<lambda>n. of_real (ln (real n / (real n + 1)))) \<longlonglongrightarrow> (0 :: 'a)" by (simp add: add_ac) |
|
717 |
hence lim: "(\<lambda>n. of_real (ln (real n)) - of_real (ln (real n + 1))) \<longlonglongrightarrow> (0::'a)" |
|
70532
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
paulson <lp15@cam.ac.uk>
parents:
70196
diff
changeset
|
718 |
proof (rule Lim_transform_eventually) |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
719 |
show "eventually (\<lambda>n. of_real (ln (real n / (real n + 1))) = |
63721 | 720 |
of_real (ln (real n)) - (of_real (ln (real n + 1)) :: 'a)) at_top" |
721 |
using eventually_gt_at_top[of "0::nat"] by eventually_elim (simp add: ln_div) |
|
722 |
qed |
|
723 |
||
724 |
from summable_Digamma[OF z] |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
725 |
have "(\<lambda>n. inverse (of_nat (n+1)) - inverse (z + of_nat n)) |
63721 | 726 |
sums (Digamma z + euler_mascheroni)" |
727 |
by (simp add: Digamma_def summable_sums) |
|
728 |
from sums_diff[OF this euler_mascheroni_sum] |
|
729 |
have "(\<lambda>n. of_real (ln (real (Suc n) + 1)) - of_real (ln (real n + 1)) - inverse (z + of_nat n)) |
|
730 |
sums Digamma z" by (simp add: add_ac) |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
731 |
hence "(\<lambda>m. (\<Sum>n<m. of_real (ln (real (Suc n) + 1)) - of_real (ln (real n + 1))) - |
63721 | 732 |
(\<Sum>n<m. inverse (z + of_nat n))) \<longlonglongrightarrow> Digamma z" |
64267 | 733 |
by (simp add: sums_def sum_subtractf) |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
734 |
also have "(\<lambda>m. (\<Sum>n<m. of_real (ln (real (Suc n) + 1)) - of_real (ln (real n + 1)))) = |
63721 | 735 |
(\<lambda>m. of_real (ln (m + 1)) :: 'a)" |
64267 | 736 |
by (subst sum_lessThan_telescope) simp_all |
63721 | 737 |
finally show ?thesis by (rule Lim_transform) (insert lim, simp) |
738 |
qed |
|
739 |
||
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
740 |
theorem Polygamma_LIMSEQ: |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
741 |
fixes z :: "'a :: {banach,real_normed_field}" |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
742 |
assumes "z \<noteq> 0" and "n > 0" |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
743 |
shows "(\<lambda>k. inverse ((z + of_nat k)^Suc n)) sums ((-1) ^ Suc n * Polygamma n z / fact n)" |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
744 |
using Polygamma_converges'[OF assms(1), of "Suc n"] assms(2) |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
745 |
by (simp add: sums_iff Polygamma_def) |
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
746 |
|
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
747 |
theorem has_field_derivative_ln_Gamma_complex [derivative_intros]: |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
748 |
fixes z :: complex |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
749 |
assumes z: "z \<notin> \<real>\<^sub>\<le>\<^sub>0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
750 |
shows "(ln_Gamma has_field_derivative Digamma z) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
751 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
752 |
have not_nonpos_Int [simp]: "t \<notin> \<int>\<^sub>\<le>\<^sub>0" if "Re t > 0" for t |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
753 |
using that by (auto elim!: nonpos_Ints_cases') |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
754 |
from z have z': "z \<notin> \<int>\<^sub>\<le>\<^sub>0" and z'': "z \<noteq> 0" using nonpos_Ints_subset_nonpos_Reals nonpos_Reals_zero_I |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
755 |
by blast+ |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
756 |
let ?f' = "\<lambda>z k. inverse (of_nat (Suc k)) - inverse (z + of_nat (Suc k))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
757 |
let ?f = "\<lambda>z k. z / of_nat (Suc k) - ln (1 + z / of_nat (Suc k))" and ?F' = "\<lambda>z. \<Sum>n. ?f' z n" |
63040 | 758 |
define d where "d = min (norm z/2) (if Im z = 0 then Re z / 2 else abs (Im z) / 2)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
759 |
from z have d: "d > 0" "norm z/2 \<ge> d" by (auto simp add: complex_nonpos_Reals_iff d_def) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
760 |
have ball: "Im t = 0 \<longrightarrow> Re t > 0" if "dist z t < d" for t |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
761 |
using no_nonpos_Real_in_ball[OF z, of t] that unfolding d_def by (force simp add: complex_nonpos_Reals_iff) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
762 |
have sums: "(\<lambda>n. inverse (z + of_nat (Suc n)) - inverse (z + of_nat n)) sums |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
763 |
(0 - inverse (z + of_nat 0))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
764 |
by (intro telescope_sums filterlim_compose[OF tendsto_inverse_0] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
765 |
tendsto_add_filterlim_at_infinity[OF tendsto_const] tendsto_of_nat) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
766 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
767 |
have "((\<lambda>z. \<Sum>n. ?f z n) has_field_derivative ?F' z) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
768 |
using d z ln_Gamma_series'_aux[OF z'] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
769 |
apply (intro has_field_derivative_series'(2)[of "ball z d" _ _ z] uniformly_summable_deriv_ln_Gamma) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
770 |
apply (auto intro!: derivative_eq_intros add_pos_pos mult_pos_pos dest!: ball |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
771 |
simp: field_simps sums_iff nonpos_Reals_divide_of_nat_iff |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
772 |
simp del: of_nat_Suc) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
773 |
apply (auto simp add: complex_nonpos_Reals_iff) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
774 |
done |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
775 |
with z have "((\<lambda>z. (\<Sum>k. ?f z k) - euler_mascheroni * z - Ln z) has_field_derivative |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
776 |
?F' z - euler_mascheroni - inverse z) (at z)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
777 |
by (force intro!: derivative_eq_intros simp: Digamma_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
778 |
also have "?F' z - euler_mascheroni - inverse z = (?F' z + -inverse z) - euler_mascheroni" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
779 |
also from sums have "-inverse z = (\<Sum>n. inverse (z + of_nat (Suc n)) - inverse (z + of_nat n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
780 |
by (simp add: sums_iff) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
781 |
also from sums summable_deriv_ln_Gamma[OF z''] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
782 |
have "?F' z + \<dots> = (\<Sum>n. inverse (of_nat (Suc n)) - inverse (z + of_nat n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
783 |
by (subst suminf_add) (simp_all add: add_ac sums_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
784 |
also have "\<dots> - euler_mascheroni = Digamma z" by (simp add: Digamma_def) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
785 |
finally have "((\<lambda>z. (\<Sum>k. ?f z k) - euler_mascheroni * z - Ln z) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
786 |
has_field_derivative Digamma z) (at z)" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
787 |
moreover from eventually_nhds_ball[OF d(1), of z] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
788 |
have "eventually (\<lambda>z. ln_Gamma z = (\<Sum>k. ?f z k) - euler_mascheroni * z - Ln z) (nhds z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
789 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
790 |
fix t assume "t \<in> ball z d" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
791 |
hence "t \<notin> \<int>\<^sub>\<le>\<^sub>0" by (auto dest!: ball elim!: nonpos_Ints_cases) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
792 |
from ln_Gamma_series'_aux[OF this] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
793 |
show "ln_Gamma t = (\<Sum>k. ?f t k) - euler_mascheroni * t - Ln t" by (simp add: sums_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
794 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
795 |
ultimately show ?thesis by (subst DERIV_cong_ev[OF refl _ refl]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
796 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
797 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
798 |
declare has_field_derivative_ln_Gamma_complex[THEN DERIV_chain2, derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
799 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
800 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
801 |
lemma Digamma_1 [simp]: "Digamma (1 :: 'a :: {real_normed_field,banach}) = - euler_mascheroni" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
802 |
by (simp add: Digamma_def) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
803 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
804 |
lemma Digamma_plus1: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
805 |
assumes "z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
806 |
shows "Digamma (z+1) = Digamma z + 1/z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
807 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
808 |
have sums: "(\<lambda>k. inverse (z + of_nat k) - inverse (z + of_nat (Suc k))) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
809 |
sums (inverse (z + of_nat 0) - 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
810 |
by (intro telescope_sums'[OF filterlim_compose[OF tendsto_inverse_0]] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
811 |
tendsto_add_filterlim_at_infinity[OF tendsto_const] tendsto_of_nat) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
812 |
have "Digamma (z+1) = (\<Sum>k. inverse (of_nat (Suc k)) - inverse (z + of_nat (Suc k))) - |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
813 |
euler_mascheroni" (is "_ = suminf ?f - _") by (simp add: Digamma_def add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
814 |
also have "suminf ?f = (\<Sum>k. inverse (of_nat (Suc k)) - inverse (z + of_nat k)) + |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
815 |
(\<Sum>k. inverse (z + of_nat k) - inverse (z + of_nat (Suc k)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
816 |
using summable_Digamma[OF assms] sums by (subst suminf_add) (simp_all add: add_ac sums_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
817 |
also have "(\<Sum>k. inverse (z + of_nat k) - inverse (z + of_nat (Suc k))) = 1/z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
818 |
using sums by (simp add: sums_iff inverse_eq_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
819 |
finally show ?thesis by (simp add: Digamma_def[of z]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
820 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
821 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
822 |
theorem Polygamma_plus1: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
823 |
assumes "z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
824 |
shows "Polygamma n (z + 1) = Polygamma n z + (-1)^n * fact n / (z ^ Suc n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
825 |
proof (cases "n = 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
826 |
assume n: "n \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
827 |
let ?f = "\<lambda>k. inverse ((z + of_nat k) ^ Suc n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
828 |
have "Polygamma n (z + 1) = (-1) ^ Suc n * fact n * (\<Sum>k. ?f (k+1))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
829 |
using n by (simp add: Polygamma_def add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
830 |
also have "(\<Sum>k. ?f (k+1)) + (\<Sum>k<1. ?f k) = (\<Sum>k. ?f k)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
831 |
using Polygamma_converges'[OF assms, of "Suc n"] n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
832 |
by (subst suminf_split_initial_segment [symmetric]) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
833 |
hence "(\<Sum>k. ?f (k+1)) = (\<Sum>k. ?f k) - inverse (z ^ Suc n)" by (simp add: algebra_simps) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
834 |
also have "(-1) ^ Suc n * fact n * ((\<Sum>k. ?f k) - inverse (z ^ Suc n)) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
835 |
Polygamma n z + (-1)^n * fact n / (z ^ Suc n)" using n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
836 |
by (simp add: inverse_eq_divide algebra_simps Polygamma_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
837 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
838 |
qed (insert assms, simp add: Digamma_plus1 inverse_eq_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
839 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
840 |
theorem Digamma_of_nat: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
841 |
"Digamma (of_nat (Suc n) :: 'a :: {real_normed_field,banach}) = harm n - euler_mascheroni" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
842 |
proof (induction n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
843 |
case (Suc n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
844 |
have "Digamma (of_nat (Suc (Suc n)) :: 'a) = Digamma (of_nat (Suc n) + 1)" by simp |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
845 |
also have "\<dots> = Digamma (of_nat (Suc n)) + inverse (of_nat (Suc n))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
846 |
by (subst Digamma_plus1) (simp_all add: inverse_eq_divide del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
847 |
also have "Digamma (of_nat (Suc n) :: 'a) = harm n - euler_mascheroni " by (rule Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
848 |
also have "\<dots> + inverse (of_nat (Suc n)) = harm (Suc n) - euler_mascheroni" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
849 |
by (simp add: harm_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
850 |
finally show ?case . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
851 |
qed (simp add: harm_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
852 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
853 |
lemma Digamma_numeral: "Digamma (numeral n) = harm (pred_numeral n) - euler_mascheroni" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
854 |
by (subst of_nat_numeral[symmetric], subst numeral_eq_Suc, subst Digamma_of_nat) (rule refl) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
855 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
856 |
lemma Polygamma_of_real: "x \<noteq> 0 \<Longrightarrow> Polygamma n (of_real x) = of_real (Polygamma n x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
857 |
unfolding Polygamma_def using summable_Digamma[of x] Polygamma_converges'[of x "Suc n"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
858 |
by (simp_all add: suminf_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
859 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
860 |
lemma Polygamma_Real: "z \<in> \<real> \<Longrightarrow> z \<noteq> 0 \<Longrightarrow> Polygamma n z \<in> \<real>" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
861 |
by (elim Reals_cases, hypsubst, subst Polygamma_of_real) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
862 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
863 |
lemma Digamma_half_integer: |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
864 |
"Digamma (of_nat n + 1/2 :: 'a :: {real_normed_field,banach}) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
865 |
(\<Sum>k<n. 2 / (of_nat (2*k+1))) - euler_mascheroni - of_real (2 * ln 2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
866 |
proof (induction n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
867 |
case 0 |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
868 |
have "Digamma (1/2 :: 'a) = of_real (Digamma (1/2))" by (simp add: Polygamma_of_real [symmetric]) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
869 |
also have "Digamma (1/2::real) = |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
870 |
(\<Sum>k. inverse (of_nat (Suc k)) - inverse (of_nat k + 1/2)) - euler_mascheroni" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
871 |
by (simp add: Digamma_def add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
872 |
also have "(\<Sum>k. inverse (of_nat (Suc k) :: real) - inverse (of_nat k + 1/2)) = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
873 |
(\<Sum>k. inverse (1/2) * (inverse (2 * of_nat (Suc k)) - inverse (2 * of_nat k + 1)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
874 |
by (simp_all add: add_ac inverse_mult_distrib[symmetric] ring_distribs del: inverse_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
875 |
also have "\<dots> = - 2 * ln 2" using sums_minus[OF alternating_harmonic_series_sums'] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
876 |
by (subst suminf_mult) (simp_all add: algebra_simps sums_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
877 |
finally show ?case by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
878 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
879 |
case (Suc n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
880 |
have nz: "2 * of_nat n + (1:: 'a) \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
881 |
using of_nat_neq_0[of "2*n"] by (simp only: of_nat_Suc) (simp add: add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
882 |
hence nz': "of_nat n + (1/2::'a) \<noteq> 0" by (simp add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
883 |
have "Digamma (of_nat (Suc n) + 1/2 :: 'a) = Digamma (of_nat n + 1/2 + 1)" by simp |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
884 |
also from nz' have "\<dots> = Digamma (of_nat n + 1/2) + 1 / (of_nat n + 1/2)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
885 |
by (rule Digamma_plus1) |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
886 |
also from nz nz' have "1 / (of_nat n + 1/2 :: 'a) = 2 / (2 * of_nat n + 1)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
887 |
by (subst divide_eq_eq) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
888 |
also note Suc |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
889 |
finally show ?case by (simp add: add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
890 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
891 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
892 |
lemma Digamma_one_half: "Digamma (1/2) = - euler_mascheroni - of_real (2 * ln 2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
893 |
using Digamma_half_integer[of 0] by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
894 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
895 |
lemma Digamma_real_three_halves_pos: "Digamma (3/2 :: real) > 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
896 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
897 |
have "-Digamma (3/2 :: real) = -Digamma (of_nat 1 + 1/2)" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
898 |
also have "\<dots> = 2 * ln 2 + euler_mascheroni - 2" by (subst Digamma_half_integer) simp |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
899 |
also note euler_mascheroni_less_13_over_22 |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
900 |
also note ln2_le_25_over_36 |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
901 |
finally show ?thesis by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
902 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
903 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
904 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
905 |
theorem has_field_derivative_Polygamma [derivative_intros]: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
906 |
fixes z :: "'a :: {real_normed_field,euclidean_space}" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
907 |
assumes z: "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
908 |
shows "(Polygamma n has_field_derivative Polygamma (Suc n) z) (at z within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
909 |
proof (rule has_field_derivative_at_within, cases "n = 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
910 |
assume n: "n = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
911 |
let ?f = "\<lambda>k z. inverse (of_nat (Suc k)) - inverse (z + of_nat k)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
912 |
let ?F = "\<lambda>z. \<Sum>k. ?f k z" and ?f' = "\<lambda>k z. inverse ((z + of_nat k)\<^sup>2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
913 |
from no_nonpos_Int_in_ball'[OF z] guess d . note d = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
914 |
from z have summable: "summable (\<lambda>k. inverse (of_nat (Suc k)) - inverse (z + of_nat k))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
915 |
by (intro summable_Digamma) force |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
916 |
from z have conv: "uniformly_convergent_on (ball z d) (\<lambda>k z. \<Sum>i<k. inverse ((z + of_nat i)\<^sup>2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
917 |
by (intro Polygamma_converges) auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
918 |
with d have "summable (\<lambda>k. inverse ((z + of_nat k)\<^sup>2))" unfolding summable_iff_convergent |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
919 |
by (auto dest!: uniformly_convergent_imp_convergent simp: summable_iff_convergent ) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
920 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
921 |
have "(?F has_field_derivative (\<Sum>k. ?f' k z)) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
922 |
proof (rule has_field_derivative_series'[of "ball z d" _ _ z]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
923 |
fix k :: nat and t :: 'a assume t: "t \<in> ball z d" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
924 |
from t d(2)[of t] show "((\<lambda>z. ?f k z) has_field_derivative ?f' k t) (at t within ball z d)" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
925 |
by (auto intro!: derivative_eq_intros simp: power2_eq_square simp del: of_nat_Suc |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
926 |
dest!: plus_of_nat_eq_0_imp elim!: nonpos_Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
927 |
qed (insert d(1) summable conv, (assumption|simp)+) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
928 |
with z show "(Polygamma n has_field_derivative Polygamma (Suc n) z) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
929 |
unfolding Digamma_def [abs_def] Polygamma_def [abs_def] using n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
930 |
by (force simp: power2_eq_square intro!: derivative_eq_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
931 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
932 |
assume n: "n \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
933 |
from z have z': "z \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
934 |
from no_nonpos_Int_in_ball'[OF z] guess d . note d = this |
63040 | 935 |
define n' where "n' = Suc n" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
936 |
from n have n': "n' \<ge> 2" by (simp add: n'_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
937 |
have "((\<lambda>z. \<Sum>k. inverse ((z + of_nat k) ^ n')) has_field_derivative |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
938 |
(\<Sum>k. - of_nat n' * inverse ((z + of_nat k) ^ (n'+1)))) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
939 |
proof (rule has_field_derivative_series'[of "ball z d" _ _ z]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
940 |
fix k :: nat and t :: 'a assume t: "t \<in> ball z d" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
941 |
with d have t': "t \<notin> \<int>\<^sub>\<le>\<^sub>0" "t \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
942 |
show "((\<lambda>a. inverse ((a + of_nat k) ^ n')) has_field_derivative |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
943 |
- of_nat n' * inverse ((t + of_nat k) ^ (n'+1))) (at t within ball z d)" using t' |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
944 |
by (fastforce intro!: derivative_eq_intros simp: divide_simps power_diff dest: plus_of_nat_eq_0_imp) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
945 |
next |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
946 |
have "uniformly_convergent_on (ball z d) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
947 |
(\<lambda>k z. (- of_nat n' :: 'a) * (\<Sum>i<k. inverse ((z + of_nat i) ^ (n'+1))))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
948 |
using z' n by (intro uniformly_convergent_mult Polygamma_converges) (simp_all add: n'_def) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
949 |
thus "uniformly_convergent_on (ball z d) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
950 |
(\<lambda>k z. \<Sum>i<k. - of_nat n' * inverse ((z + of_nat i :: 'a) ^ (n'+1)))" |
64267 | 951 |
by (subst (asm) sum_distrib_left) simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
952 |
qed (insert Polygamma_converges'[OF z' n'] d, simp_all) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
953 |
also have "(\<Sum>k. - of_nat n' * inverse ((z + of_nat k) ^ (n' + 1))) = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
954 |
(- of_nat n') * (\<Sum>k. inverse ((z + of_nat k) ^ (n' + 1)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
955 |
using Polygamma_converges'[OF z', of "n'+1"] n' by (subst suminf_mult) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
956 |
finally have "((\<lambda>z. \<Sum>k. inverse ((z + of_nat k) ^ n')) has_field_derivative |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
957 |
- of_nat n' * (\<Sum>k. inverse ((z + of_nat k) ^ (n' + 1)))) (at z)" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
958 |
from DERIV_cmult[OF this, of "(-1)^Suc n * fact n :: 'a"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
959 |
show "(Polygamma n has_field_derivative Polygamma (Suc n) z) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
960 |
unfolding n'_def Polygamma_def[abs_def] using n by (simp add: algebra_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
961 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
962 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
963 |
declare has_field_derivative_Polygamma[THEN DERIV_chain2, derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
964 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
965 |
lemma isCont_Polygamma [continuous_intros]: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
966 |
fixes f :: "_ \<Rightarrow> 'a :: {real_normed_field,euclidean_space}" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
967 |
shows "isCont f z \<Longrightarrow> f z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> isCont (\<lambda>x. Polygamma n (f x)) z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
968 |
by (rule isCont_o2[OF _ DERIV_isCont[OF has_field_derivative_Polygamma]]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
969 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
970 |
lemma continuous_on_Polygamma: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
971 |
"A \<inter> \<int>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> continuous_on A (Polygamma n :: _ \<Rightarrow> 'a :: {real_normed_field,euclidean_space})" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
972 |
by (intro continuous_at_imp_continuous_on isCont_Polygamma[OF continuous_ident] ballI) blast |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
973 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
974 |
lemma isCont_ln_Gamma_complex [continuous_intros]: |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
975 |
fixes f :: "'a::t2_space \<Rightarrow> complex" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
976 |
shows "isCont f z \<Longrightarrow> f z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> isCont (\<lambda>z. ln_Gamma (f z)) z" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
977 |
by (rule isCont_o2[OF _ DERIV_isCont[OF has_field_derivative_ln_Gamma_complex]]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
978 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
979 |
lemma continuous_on_ln_Gamma_complex [continuous_intros]: |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
980 |
fixes A :: "complex set" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
981 |
shows "A \<inter> \<real>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> continuous_on A ln_Gamma" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
982 |
by (intro continuous_at_imp_continuous_on ballI isCont_ln_Gamma_complex[OF continuous_ident]) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
983 |
fastforce |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
984 |
|
64969 | 985 |
lemma deriv_Polygamma: |
986 |
assumes "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
987 |
shows "deriv (Polygamma m) z = |
64969 | 988 |
Polygamma (Suc m) (z :: 'a :: {real_normed_field,euclidean_space})" |
989 |
by (intro DERIV_imp_deriv has_field_derivative_Polygamma assms) |
|
990 |
thm has_field_derivative_Polygamma |
|
991 |
||
992 |
lemma higher_deriv_Polygamma: |
|
993 |
assumes "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
994 |
shows "(deriv ^^ n) (Polygamma m) z = |
64969 | 995 |
Polygamma (m + n) (z :: 'a :: {real_normed_field,euclidean_space})" |
996 |
proof - |
|
997 |
have "eventually (\<lambda>u. (deriv ^^ n) (Polygamma m) u = Polygamma (m + n) u) (nhds z)" |
|
998 |
proof (induction n) |
|
999 |
case (Suc n) |
|
1000 |
from Suc.IH have "eventually (\<lambda>z. eventually (\<lambda>u. (deriv ^^ n) (Polygamma m) u = Polygamma (m + n) u) (nhds z)) (nhds z)" |
|
1001 |
by (simp add: eventually_eventually) |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1002 |
hence "eventually (\<lambda>z. deriv ((deriv ^^ n) (Polygamma m)) z = |
64969 | 1003 |
deriv (Polygamma (m + n)) z) (nhds z)" |
1004 |
by eventually_elim (intro deriv_cong_ev refl) |
|
1005 |
moreover have "eventually (\<lambda>z. z \<in> UNIV - \<int>\<^sub>\<le>\<^sub>0) (nhds z)" using assms |
|
1006 |
by (intro eventually_nhds_in_open open_Diff open_UNIV) auto |
|
1007 |
ultimately show ?case by eventually_elim (simp_all add: deriv_Polygamma) |
|
1008 |
qed simp_all |
|
1009 |
thus ?thesis by (rule eventually_nhds_x_imp_x) |
|
1010 |
qed |
|
1011 |
||
1012 |
lemma deriv_ln_Gamma_complex: |
|
1013 |
assumes "z \<notin> \<real>\<^sub>\<le>\<^sub>0" |
|
1014 |
shows "deriv ln_Gamma z = Digamma (z :: complex)" |
|
1015 |
by (intro DERIV_imp_deriv has_field_derivative_ln_Gamma_complex assms) |
|
1016 |
||
1017 |
||
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1018 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1019 |
text \<open> |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1020 |
We define a type class that captures all the fundamental properties of the inverse of the Gamma function |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1021 |
and defines the Gamma function upon that. This allows us to instantiate the type class both for |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1022 |
the reals and for the complex numbers with a minimal amount of proof duplication. |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1023 |
\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1024 |
|
70136 | 1025 |
class\<^marker>\<open>tag unimportant\<close> Gamma = real_normed_field + complete_space + |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1026 |
fixes rGamma :: "'a \<Rightarrow> 'a" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1027 |
assumes rGamma_eq_zero_iff_aux: "rGamma z = 0 \<longleftrightarrow> (\<exists>n. z = - of_nat n)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1028 |
assumes differentiable_rGamma_aux1: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1029 |
"(\<And>n. z \<noteq> - of_nat n) \<Longrightarrow> |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1030 |
let d = (THE d. (\<lambda>n. \<Sum>k<n. inverse (of_nat (Suc k)) - inverse (z + of_nat k)) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1031 |
\<longlonglongrightarrow> d) - scaleR euler_mascheroni 1 |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1032 |
in filterlim (\<lambda>y. (rGamma y - rGamma z + rGamma z * d * (y - z)) /\<^sub>R |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1033 |
norm (y - z)) (nhds 0) (at z)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1034 |
assumes differentiable_rGamma_aux2: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1035 |
"let z = - of_nat n |
64272 | 1036 |
in filterlim (\<lambda>y. (rGamma y - rGamma z - (-1)^n * (prod of_nat {1..n}) * (y - z)) /\<^sub>R |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1037 |
norm (y - z)) (nhds 0) (at z)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1038 |
assumes rGamma_series_aux: "(\<And>n. z \<noteq> - of_nat n) \<Longrightarrow> |
64272 | 1039 |
let fact' = (\<lambda>n. prod of_nat {1..n}); |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1040 |
exp = (\<lambda>x. THE e. (\<lambda>n. \<Sum>k<n. x^k /\<^sub>R fact k) \<longlonglongrightarrow> e); |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1041 |
pochhammer' = (\<lambda>a n. (\<Prod>n = 0..n. a + of_nat n)) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1042 |
in filterlim (\<lambda>n. pochhammer' z n / (fact' n * exp (z * (ln (of_nat n) *\<^sub>R 1)))) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1043 |
(nhds (rGamma z)) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1044 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1045 |
subclass banach .. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1046 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1047 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1048 |
definition "Gamma z = inverse (rGamma z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1049 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1050 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1051 |
subsection \<open>Basic properties\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1052 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1053 |
lemma Gamma_nonpos_Int: "z \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Gamma z = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1054 |
and rGamma_nonpos_Int: "z \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> rGamma z = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1055 |
using rGamma_eq_zero_iff_aux[of z] unfolding Gamma_def by (auto elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1056 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1057 |
lemma Gamma_nonzero: "z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Gamma z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1058 |
and rGamma_nonzero: "z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> rGamma z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1059 |
using rGamma_eq_zero_iff_aux[of z] unfolding Gamma_def by (auto elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1060 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1061 |
lemma Gamma_eq_zero_iff: "Gamma z = 0 \<longleftrightarrow> z \<in> \<int>\<^sub>\<le>\<^sub>0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1062 |
and rGamma_eq_zero_iff: "rGamma z = 0 \<longleftrightarrow> z \<in> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1063 |
using rGamma_eq_zero_iff_aux[of z] unfolding Gamma_def by (auto elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1064 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1065 |
lemma rGamma_inverse_Gamma: "rGamma z = inverse (Gamma z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1066 |
unfolding Gamma_def by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1067 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1068 |
lemma rGamma_series_LIMSEQ [tendsto_intros]: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1069 |
"rGamma_series z \<longlonglongrightarrow> rGamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1070 |
proof (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1071 |
case False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1072 |
hence "z \<noteq> - of_nat n" for n by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1073 |
from rGamma_series_aux[OF this] show ?thesis |
64272 | 1074 |
by (simp add: rGamma_series_def[abs_def] fact_prod pochhammer_Suc_prod |
63367
6c731c8b7f03
simplified definitions of combinatorial functions
haftmann
parents:
63317
diff
changeset
|
1075 |
exp_def of_real_def[symmetric] suminf_def sums_def[abs_def] atLeast0AtMost) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1076 |
qed (insert rGamma_eq_zero_iff[of z], simp_all add: rGamma_series_nonpos_Ints_LIMSEQ) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1077 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1078 |
theorem Gamma_series_LIMSEQ [tendsto_intros]: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1079 |
"Gamma_series z \<longlonglongrightarrow> Gamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1080 |
proof (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1081 |
case False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1082 |
hence "(\<lambda>n. inverse (rGamma_series z n)) \<longlonglongrightarrow> inverse (rGamma z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1083 |
by (intro tendsto_intros) (simp_all add: rGamma_eq_zero_iff) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1084 |
also have "(\<lambda>n. inverse (rGamma_series z n)) = Gamma_series z" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1085 |
by (simp add: rGamma_series_def Gamma_series_def[abs_def]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1086 |
finally show ?thesis by (simp add: Gamma_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1087 |
qed (insert Gamma_eq_zero_iff[of z], simp_all add: Gamma_series_nonpos_Ints_LIMSEQ) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1088 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1089 |
lemma Gamma_altdef: "Gamma z = lim (Gamma_series z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1090 |
using Gamma_series_LIMSEQ[of z] by (simp add: limI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1091 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1092 |
lemma rGamma_1 [simp]: "rGamma 1 = 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1093 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1094 |
have A: "eventually (\<lambda>n. rGamma_series 1 n = of_nat (Suc n) / of_nat n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1095 |
using eventually_gt_at_top[of "0::nat"] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1096 |
by (force elim!: eventually_mono simp: rGamma_series_def exp_of_real pochhammer_fact |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1097 |
divide_simps pochhammer_rec' dest!: pochhammer_eq_0_imp_nonpos_Int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1098 |
have "rGamma_series 1 \<longlonglongrightarrow> 1" by (subst tendsto_cong[OF A]) (rule LIMSEQ_Suc_n_over_n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1099 |
moreover have "rGamma_series 1 \<longlonglongrightarrow> rGamma 1" by (rule tendsto_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1100 |
ultimately show ?thesis by (intro LIMSEQ_unique) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1101 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1102 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1103 |
lemma rGamma_plus1: "z * rGamma (z + 1) = rGamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1104 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1105 |
let ?f = "\<lambda>n. (z + 1) * inverse (of_nat n) + 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1106 |
have "eventually (\<lambda>n. ?f n * rGamma_series z n = z * rGamma_series (z + 1) n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1107 |
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
|
1108 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1109 |
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
|
1110 |
hence "z * rGamma_series (z + 1) n = inverse (of_nat n) * |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1111 |
pochhammer z (Suc (Suc n)) / (fact n * exp (z * of_real (ln (of_nat n))))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1112 |
by (subst pochhammer_rec) (simp add: rGamma_series_def field_simps exp_add exp_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1113 |
also from n have "\<dots> = ?f n * rGamma_series z n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1114 |
by (subst pochhammer_rec') (simp_all add: divide_simps rGamma_series_def add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1115 |
finally show "?f n * rGamma_series z n = z * rGamma_series (z + 1) n" .. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1116 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1117 |
moreover have "(\<lambda>n. ?f n * rGamma_series z n) \<longlonglongrightarrow> ((z+1) * 0 + 1) * rGamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1118 |
by (intro tendsto_intros lim_inverse_n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1119 |
hence "(\<lambda>n. ?f n * rGamma_series z n) \<longlonglongrightarrow> rGamma z" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1120 |
ultimately have "(\<lambda>n. z * rGamma_series (z + 1) n) \<longlonglongrightarrow> rGamma z" |
70532
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
paulson <lp15@cam.ac.uk>
parents:
70196
diff
changeset
|
1121 |
by (blast intro: Lim_transform_eventually) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1122 |
moreover have "(\<lambda>n. z * rGamma_series (z + 1) n) \<longlonglongrightarrow> z * rGamma (z + 1)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1123 |
by (intro tendsto_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1124 |
ultimately show "z * rGamma (z + 1) = rGamma z" using LIMSEQ_unique by blast |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1125 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1126 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1127 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1128 |
lemma pochhammer_rGamma: "rGamma z = pochhammer z n * rGamma (z + of_nat n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1129 |
proof (induction n arbitrary: z) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1130 |
case (Suc n z) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1131 |
have "rGamma z = pochhammer z n * rGamma (z + of_nat n)" by (rule Suc.IH) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1132 |
also note rGamma_plus1 [symmetric] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1133 |
finally show ?case by (simp add: add_ac pochhammer_rec') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1134 |
qed simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1135 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1136 |
theorem Gamma_plus1: "z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Gamma (z + 1) = z * Gamma z" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1137 |
using rGamma_plus1[of z] by (simp add: rGamma_inverse_Gamma field_simps Gamma_eq_zero_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1138 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1139 |
theorem pochhammer_Gamma: "z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> pochhammer z n = Gamma (z + of_nat n) / Gamma z" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1140 |
using pochhammer_rGamma[of z] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1141 |
by (simp add: rGamma_inverse_Gamma Gamma_eq_zero_iff field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1142 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1143 |
lemma Gamma_0 [simp]: "Gamma 0 = 0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1144 |
and rGamma_0 [simp]: "rGamma 0 = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1145 |
and Gamma_neg_1 [simp]: "Gamma (- 1) = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1146 |
and rGamma_neg_1 [simp]: "rGamma (- 1) = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1147 |
and Gamma_neg_numeral [simp]: "Gamma (- numeral n) = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1148 |
and rGamma_neg_numeral [simp]: "rGamma (- numeral n) = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1149 |
and Gamma_neg_of_nat [simp]: "Gamma (- of_nat m) = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1150 |
and rGamma_neg_of_nat [simp]: "rGamma (- of_nat m) = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1151 |
by (simp_all add: rGamma_eq_zero_iff Gamma_eq_zero_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1152 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1153 |
lemma Gamma_1 [simp]: "Gamma 1 = 1" unfolding Gamma_def by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1154 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1155 |
theorem Gamma_fact: "Gamma (1 + of_nat n) = fact n" |
68403 | 1156 |
by (simp add: pochhammer_fact pochhammer_Gamma of_nat_in_nonpos_Ints_iff flip: of_nat_Suc) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1157 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1158 |
lemma Gamma_numeral: "Gamma (numeral n) = fact (pred_numeral n)" |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
1159 |
by (subst of_nat_numeral[symmetric], subst numeral_eq_Suc, |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1160 |
subst of_nat_Suc, subst Gamma_fact) (rule refl) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1161 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1162 |
lemma Gamma_of_int: "Gamma (of_int n) = (if n > 0 then fact (nat (n - 1)) else 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1163 |
proof (cases "n > 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1164 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1165 |
hence "Gamma (of_int n) = Gamma (of_nat (Suc (nat (n - 1))))" by (subst of_nat_Suc) simp_all |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1166 |
with True show ?thesis by (subst (asm) of_nat_Suc, subst (asm) Gamma_fact) simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1167 |
qed (simp_all add: Gamma_eq_zero_iff nonpos_Ints_of_int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1168 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1169 |
lemma rGamma_of_int: "rGamma (of_int n) = (if n > 0 then inverse (fact (nat (n - 1))) else 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1170 |
by (simp add: Gamma_of_int rGamma_inverse_Gamma) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1171 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1172 |
lemma Gamma_seriesI: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1173 |
assumes "(\<lambda>n. g n / Gamma_series z n) \<longlonglongrightarrow> 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1174 |
shows "g \<longlonglongrightarrow> Gamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1175 |
proof (rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1176 |
have "1/2 > (0::real)" by simp |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1177 |
from tendstoD[OF assms, OF this] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1178 |
show "eventually (\<lambda>n. g n / Gamma_series z n * Gamma_series z n = g n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1179 |
by (force elim!: eventually_mono simp: dist_real_def dist_0_norm) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1180 |
from assms have "(\<lambda>n. g n / Gamma_series z n * Gamma_series z n) \<longlonglongrightarrow> 1 * Gamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1181 |
by (intro tendsto_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1182 |
thus "(\<lambda>n. g n / Gamma_series z n * Gamma_series z n) \<longlonglongrightarrow> Gamma z" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1183 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1184 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1185 |
lemma Gamma_seriesI': |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1186 |
assumes "f \<longlonglongrightarrow> rGamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1187 |
assumes "(\<lambda>n. g n * f n) \<longlonglongrightarrow> 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1188 |
assumes "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1189 |
shows "g \<longlonglongrightarrow> Gamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1190 |
proof (rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1191 |
have "1/2 > (0::real)" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1192 |
from tendstoD[OF assms(2), OF this] show "eventually (\<lambda>n. g n * f n / f n = g n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1193 |
by (force elim!: eventually_mono simp: dist_real_def dist_0_norm) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1194 |
from assms have "(\<lambda>n. g n * f n / f n) \<longlonglongrightarrow> 1 / rGamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1195 |
by (intro tendsto_divide assms) (simp_all add: rGamma_eq_zero_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1196 |
thus "(\<lambda>n. g n * f n / f n) \<longlonglongrightarrow> Gamma z" by (simp add: Gamma_def divide_inverse) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1197 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1198 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1199 |
lemma Gamma_series'_LIMSEQ: "Gamma_series' z \<longlonglongrightarrow> Gamma z" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1200 |
by (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") (simp_all add: Gamma_nonpos_Int Gamma_seriesI[OF Gamma_series_Gamma_series'] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1201 |
Gamma_series'_nonpos_Ints_LIMSEQ[of z]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1202 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1203 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1204 |
subsection \<open>Differentiability\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1205 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1206 |
lemma has_field_derivative_rGamma_no_nonpos_int: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1207 |
assumes "z \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1208 |
shows "(rGamma has_field_derivative -rGamma z * Digamma z) (at z within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1209 |
proof (rule has_field_derivative_at_within) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1210 |
from assms have "z \<noteq> - of_nat n" for n by auto |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1211 |
from differentiable_rGamma_aux1[OF this] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1212 |
show "(rGamma has_field_derivative -rGamma z * Digamma z) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1213 |
unfolding Digamma_def suminf_def sums_def[abs_def] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1214 |
has_field_derivative_def has_derivative_def netlimit_at |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1215 |
by (simp add: Let_def bounded_linear_mult_right mult_ac of_real_def [symmetric]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1216 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1217 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1218 |
lemma has_field_derivative_rGamma_nonpos_int: |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1219 |
"(rGamma has_field_derivative (-1)^n * fact n) (at (- of_nat n) within A)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1220 |
apply (rule has_field_derivative_at_within) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1221 |
using differentiable_rGamma_aux2[of n] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1222 |
unfolding Let_def has_field_derivative_def has_derivative_def netlimit_at |
64272 | 1223 |
by (simp only: bounded_linear_mult_right mult_ac of_real_def [symmetric] fact_prod) simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1224 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1225 |
lemma has_field_derivative_rGamma [derivative_intros]: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1226 |
"(rGamma has_field_derivative (if z \<in> \<int>\<^sub>\<le>\<^sub>0 then (-1)^(nat \<lfloor>norm z\<rfloor>) * fact (nat \<lfloor>norm z\<rfloor>) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1227 |
else -rGamma z * Digamma z)) (at z within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1228 |
using has_field_derivative_rGamma_no_nonpos_int[of z A] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1229 |
has_field_derivative_rGamma_nonpos_int[of "nat \<lfloor>norm z\<rfloor>" A] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1230 |
by (auto elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1231 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1232 |
declare has_field_derivative_rGamma_no_nonpos_int [THEN DERIV_chain2, derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1233 |
declare has_field_derivative_rGamma [THEN DERIV_chain2, derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1234 |
declare has_field_derivative_rGamma_nonpos_int [derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1235 |
declare has_field_derivative_rGamma_no_nonpos_int [derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1236 |
declare has_field_derivative_rGamma [derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1237 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1238 |
theorem has_field_derivative_Gamma [derivative_intros]: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1239 |
"z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> (Gamma has_field_derivative Gamma z * Digamma z) (at z within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1240 |
unfolding Gamma_def [abs_def] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1241 |
by (fastforce intro!: derivative_eq_intros simp: rGamma_eq_zero_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1242 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1243 |
declare has_field_derivative_Gamma[THEN DERIV_chain2, derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1244 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1245 |
(* TODO: Hide ugly facts properly *) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1246 |
hide_fact rGamma_eq_zero_iff_aux differentiable_rGamma_aux1 differentiable_rGamma_aux2 |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1247 |
differentiable_rGamma_aux2 rGamma_series_aux Gamma_class.rGamma_eq_zero_iff_aux |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1248 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1249 |
lemma continuous_on_rGamma [continuous_intros]: "continuous_on A rGamma" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1250 |
by (rule DERIV_continuous_on has_field_derivative_rGamma)+ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1251 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1252 |
lemma continuous_on_Gamma [continuous_intros]: "A \<inter> \<int>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> continuous_on A Gamma" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1253 |
by (rule DERIV_continuous_on has_field_derivative_Gamma)+ blast |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1254 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1255 |
lemma isCont_rGamma [continuous_intros]: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1256 |
"isCont f z \<Longrightarrow> isCont (\<lambda>x. rGamma (f x)) z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1257 |
by (rule isCont_o2[OF _ DERIV_isCont[OF has_field_derivative_rGamma]]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1258 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1259 |
lemma isCont_Gamma [continuous_intros]: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1260 |
"isCont f z \<Longrightarrow> f z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> isCont (\<lambda>x. Gamma (f x)) z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1261 |
by (rule isCont_o2[OF _ DERIV_isCont[OF has_field_derivative_Gamma]]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1262 |
|
70136 | 1263 |
subsection\<^marker>\<open>tag unimportant\<close> \<open>The complex Gamma function\<close> |
1264 |
||
1265 |
instantiation\<^marker>\<open>tag unimportant\<close> complex :: Gamma |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1266 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1267 |
|
70136 | 1268 |
definition\<^marker>\<open>tag unimportant\<close> rGamma_complex :: "complex \<Rightarrow> complex" where |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1269 |
"rGamma_complex z = lim (rGamma_series z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1270 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1271 |
lemma rGamma_series_complex_converges: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1272 |
"convergent (rGamma_series (z :: complex))" (is "?thesis1") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1273 |
and rGamma_complex_altdef: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1274 |
"rGamma z = (if z \<in> \<int>\<^sub>\<le>\<^sub>0 then 0 else exp (-ln_Gamma z))" (is "?thesis2") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1275 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1276 |
have "?thesis1 \<and> ?thesis2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1277 |
proof (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1278 |
case False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1279 |
have "rGamma_series z \<longlonglongrightarrow> exp (- ln_Gamma z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1280 |
proof (rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1281 |
from ln_Gamma_series_complex_converges'[OF False] guess d by (elim exE conjE) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1282 |
from this(1) uniformly_convergent_imp_convergent[OF this(2), of z] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1283 |
have "ln_Gamma_series z \<longlonglongrightarrow> lim (ln_Gamma_series z)" by (simp add: convergent_LIMSEQ_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1284 |
thus "(\<lambda>n. exp (-ln_Gamma_series z n)) \<longlonglongrightarrow> exp (- ln_Gamma z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1285 |
unfolding convergent_def ln_Gamma_def by (intro tendsto_exp tendsto_minus) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1286 |
from eventually_gt_at_top[of "0::nat"] exp_ln_Gamma_series_complex False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1287 |
show "eventually (\<lambda>n. exp (-ln_Gamma_series z n) = rGamma_series z n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1288 |
by (force elim!: eventually_mono simp: exp_minus Gamma_series_def rGamma_series_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1289 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1290 |
with False show ?thesis |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1291 |
by (auto simp: convergent_def rGamma_complex_def intro!: limI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1292 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1293 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1294 |
then obtain k where "z = - of_nat k" by (erule nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1295 |
also have "rGamma_series \<dots> \<longlonglongrightarrow> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1296 |
by (subst tendsto_cong[OF rGamma_series_minus_of_nat]) (simp_all add: convergent_const) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1297 |
finally show ?thesis using True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1298 |
by (auto simp: rGamma_complex_def convergent_def intro!: limI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1299 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1300 |
thus "?thesis1" "?thesis2" by blast+ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1301 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1302 |
|
70136 | 1303 |
context\<^marker>\<open>tag unimportant\<close> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1304 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1305 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1306 |
(* TODO: duplication *) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1307 |
private lemma rGamma_complex_plus1: "z * rGamma (z + 1) = rGamma (z :: complex)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1308 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1309 |
let ?f = "\<lambda>n. (z + 1) * inverse (of_nat n) + 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1310 |
have "eventually (\<lambda>n. ?f n * rGamma_series z n = z * rGamma_series (z + 1) n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1311 |
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
|
1312 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1313 |
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
|
1314 |
hence "z * rGamma_series (z + 1) n = inverse (of_nat n) * |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1315 |
pochhammer z (Suc (Suc n)) / (fact n * exp (z * of_real (ln (of_nat n))))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1316 |
by (subst pochhammer_rec) (simp add: rGamma_series_def field_simps exp_add exp_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1317 |
also from n have "\<dots> = ?f n * rGamma_series z n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1318 |
by (subst pochhammer_rec') (simp_all add: divide_simps rGamma_series_def add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1319 |
finally show "?f n * rGamma_series z n = z * rGamma_series (z + 1) n" .. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1320 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1321 |
moreover have "(\<lambda>n. ?f n * rGamma_series z n) \<longlonglongrightarrow> ((z+1) * 0 + 1) * rGamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1322 |
using rGamma_series_complex_converges |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1323 |
by (intro tendsto_intros lim_inverse_n) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1324 |
(simp_all add: convergent_LIMSEQ_iff rGamma_complex_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1325 |
hence "(\<lambda>n. ?f n * rGamma_series z n) \<longlonglongrightarrow> rGamma z" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1326 |
ultimately have "(\<lambda>n. z * rGamma_series (z + 1) n) \<longlonglongrightarrow> rGamma z" |
70532
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
paulson <lp15@cam.ac.uk>
parents:
70196
diff
changeset
|
1327 |
by (blast intro: Lim_transform_eventually) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1328 |
moreover have "(\<lambda>n. z * rGamma_series (z + 1) n) \<longlonglongrightarrow> z * rGamma (z + 1)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1329 |
using rGamma_series_complex_converges |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1330 |
by (auto intro!: tendsto_mult simp: rGamma_complex_def convergent_LIMSEQ_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1331 |
ultimately show "z * rGamma (z + 1) = rGamma z" using LIMSEQ_unique by blast |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1332 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1333 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1334 |
private lemma has_field_derivative_rGamma_complex_no_nonpos_Int: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1335 |
assumes "(z :: complex) \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1336 |
shows "(rGamma has_field_derivative - rGamma z * Digamma z) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1337 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1338 |
have diff: "(rGamma has_field_derivative - rGamma z * Digamma z) (at z)" if "Re z > 0" for z |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1339 |
proof (subst DERIV_cong_ev[OF refl _ refl]) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1340 |
from that have "eventually (\<lambda>t. t \<in> ball z (Re z/2)) (nhds z)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1341 |
by (intro eventually_nhds_in_nhd) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1342 |
thus "eventually (\<lambda>t. rGamma t = exp (- ln_Gamma t)) (nhds z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1343 |
using no_nonpos_Int_in_ball_complex[OF that] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1344 |
by (auto elim!: eventually_mono simp: rGamma_complex_altdef) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1345 |
next |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1346 |
have "z \<notin> \<real>\<^sub>\<le>\<^sub>0" using that by (simp add: complex_nonpos_Reals_iff) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1347 |
with that show "((\<lambda>t. exp (- ln_Gamma t)) has_field_derivative (-rGamma z * Digamma z)) (at z)" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1348 |
by (force elim!: nonpos_Ints_cases intro!: derivative_eq_intros simp: rGamma_complex_altdef) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1349 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1350 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1351 |
from assms show "(rGamma has_field_derivative - rGamma z * Digamma z) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1352 |
proof (induction "nat \<lfloor>1 - Re z\<rfloor>" arbitrary: z) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1353 |
case (Suc n z) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1354 |
from Suc.prems have z: "z \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1355 |
from Suc.hyps have "n = nat \<lfloor>- Re z\<rfloor>" by linarith |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1356 |
hence A: "n = nat \<lfloor>1 - Re (z + 1)\<rfloor>" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1357 |
from Suc.prems have B: "z + 1 \<notin> \<int>\<^sub>\<le>\<^sub>0" by (force dest: plus_one_in_nonpos_Ints_imp) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1358 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1359 |
have "((\<lambda>z. z * (rGamma \<circ> (\<lambda>z. z + 1)) z) has_field_derivative |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1360 |
-rGamma (z + 1) * (Digamma (z + 1) * z - 1)) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1361 |
by (rule derivative_eq_intros DERIV_chain Suc refl A B)+ (simp add: algebra_simps) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1362 |
also have "(\<lambda>z. z * (rGamma \<circ> (\<lambda>z. z + 1 :: complex)) z) = rGamma" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1363 |
by (simp add: rGamma_complex_plus1) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1364 |
also from z have "Digamma (z + 1) * z - 1 = z * Digamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1365 |
by (subst Digamma_plus1) (simp_all add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1366 |
also have "-rGamma (z + 1) * (z * Digamma z) = -rGamma z * Digamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1367 |
by (simp add: rGamma_complex_plus1[of z, symmetric]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1368 |
finally show ?case . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1369 |
qed (intro diff, simp) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1370 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1371 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1372 |
private lemma rGamma_complex_1: "rGamma (1 :: complex) = 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1373 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1374 |
have A: "eventually (\<lambda>n. rGamma_series 1 n = of_nat (Suc n) / of_nat n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1375 |
using eventually_gt_at_top[of "0::nat"] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1376 |
by (force elim!: eventually_mono simp: rGamma_series_def exp_of_real pochhammer_fact |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1377 |
divide_simps pochhammer_rec' dest!: pochhammer_eq_0_imp_nonpos_Int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1378 |
have "rGamma_series 1 \<longlonglongrightarrow> 1" by (subst tendsto_cong[OF A]) (rule LIMSEQ_Suc_n_over_n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1379 |
thus "rGamma 1 = (1 :: complex)" unfolding rGamma_complex_def by (rule limI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1380 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1381 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1382 |
private lemma has_field_derivative_rGamma_complex_nonpos_Int: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1383 |
"(rGamma has_field_derivative (-1)^n * fact n) (at (- of_nat n :: complex))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1384 |
proof (induction n) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1385 |
case 0 |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1386 |
have A: "(0::complex) + 1 \<notin> \<int>\<^sub>\<le>\<^sub>0" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1387 |
have "((\<lambda>z. z * (rGamma \<circ> (\<lambda>z. z + 1 :: complex)) z) has_field_derivative 1) (at 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1388 |
by (rule derivative_eq_intros DERIV_chain refl |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1389 |
has_field_derivative_rGamma_complex_no_nonpos_Int A)+ (simp add: rGamma_complex_1) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1390 |
thus ?case by (simp add: rGamma_complex_plus1) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1391 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1392 |
case (Suc n) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1393 |
hence A: "(rGamma has_field_derivative (-1)^n * fact n) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1394 |
(at (- of_nat (Suc n) + 1 :: complex))" by simp |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1395 |
have "((\<lambda>z. z * (rGamma \<circ> (\<lambda>z. z + 1 :: complex)) z) has_field_derivative |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1396 |
(- 1) ^ Suc n * fact (Suc n)) (at (- of_nat (Suc n)))" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1397 |
by (rule derivative_eq_intros refl A DERIV_chain)+ |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1398 |
(simp add: algebra_simps rGamma_complex_altdef) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1399 |
thus ?case by (simp add: rGamma_complex_plus1) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1400 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1401 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1402 |
instance proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1403 |
fix z :: complex show "(rGamma z = 0) \<longleftrightarrow> (\<exists>n. z = - of_nat n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1404 |
by (auto simp: rGamma_complex_altdef elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1405 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1406 |
fix z :: complex assume "\<And>n. z \<noteq> - of_nat n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1407 |
hence "z \<notin> \<int>\<^sub>\<le>\<^sub>0" by (auto elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1408 |
from has_field_derivative_rGamma_complex_no_nonpos_Int[OF this] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1409 |
show "let d = (THE d. (\<lambda>n. \<Sum>k<n. inverse (of_nat (Suc k)) - inverse (z + of_nat k)) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1410 |
\<longlonglongrightarrow> d) - euler_mascheroni *\<^sub>R 1 in (\<lambda>y. (rGamma y - rGamma z + |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1411 |
rGamma z * d * (y - z)) /\<^sub>R cmod (y - z)) \<midarrow>z\<rightarrow> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1412 |
by (simp add: has_field_derivative_def has_derivative_def Digamma_def sums_def [abs_def] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1413 |
netlimit_at of_real_def[symmetric] suminf_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1414 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1415 |
fix n :: nat |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1416 |
from has_field_derivative_rGamma_complex_nonpos_Int[of n] |
64272 | 1417 |
show "let z = - of_nat n in (\<lambda>y. (rGamma y - rGamma z - (- 1) ^ n * prod of_nat {1..n} * |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1418 |
(y - z)) /\<^sub>R cmod (y - z)) \<midarrow>z\<rightarrow> 0" |
64272 | 1419 |
by (simp add: has_field_derivative_def has_derivative_def fact_prod netlimit_at Let_def) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1420 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1421 |
fix z :: complex |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1422 |
from rGamma_series_complex_converges[of z] have "rGamma_series z \<longlonglongrightarrow> rGamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1423 |
by (simp add: convergent_LIMSEQ_iff rGamma_complex_def) |
64272 | 1424 |
thus "let fact' = \<lambda>n. prod of_nat {1..n}; |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1425 |
exp = \<lambda>x. THE e. (\<lambda>n. \<Sum>k<n. x ^ k /\<^sub>R fact k) \<longlonglongrightarrow> e; |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1426 |
pochhammer' = \<lambda>a n. \<Prod>n = 0..n. a + of_nat n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1427 |
in (\<lambda>n. pochhammer' z n / (fact' n * exp (z * ln (real_of_nat n) *\<^sub>R 1))) \<longlonglongrightarrow> rGamma z" |
64272 | 1428 |
by (simp add: fact_prod pochhammer_Suc_prod rGamma_series_def [abs_def] exp_def |
63367
6c731c8b7f03
simplified definitions of combinatorial functions
haftmann
parents:
63317
diff
changeset
|
1429 |
of_real_def [symmetric] suminf_def sums_def [abs_def] atLeast0AtMost) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1430 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1431 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1432 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1433 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1434 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1435 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1436 |
lemma Gamma_complex_altdef: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1437 |
"Gamma z = (if z \<in> \<int>\<^sub>\<le>\<^sub>0 then 0 else exp (ln_Gamma (z :: complex)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1438 |
unfolding Gamma_def rGamma_complex_altdef by (simp add: exp_minus) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1439 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1440 |
lemma cnj_rGamma: "cnj (rGamma z) = rGamma (cnj z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1441 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1442 |
have "rGamma_series (cnj z) = (\<lambda>n. cnj (rGamma_series z n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1443 |
by (intro ext) (simp_all add: rGamma_series_def exp_cnj) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1444 |
also have "... \<longlonglongrightarrow> cnj (rGamma z)" by (intro tendsto_cnj tendsto_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1445 |
finally show ?thesis unfolding rGamma_complex_def by (intro sym[OF limI]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1446 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1447 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1448 |
lemma cnj_Gamma: "cnj (Gamma z) = Gamma (cnj z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1449 |
unfolding Gamma_def by (simp add: cnj_rGamma) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1450 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1451 |
lemma Gamma_complex_real: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1452 |
"z \<in> \<real> \<Longrightarrow> Gamma z \<in> (\<real> :: complex set)" and rGamma_complex_real: "z \<in> \<real> \<Longrightarrow> rGamma z \<in> \<real>" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1453 |
by (simp_all add: Reals_cnj_iff cnj_Gamma cnj_rGamma) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1454 |
|
62534
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1455 |
lemma field_differentiable_rGamma: "rGamma field_differentiable (at z within A)" |
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1456 |
using has_field_derivative_rGamma[of z] unfolding field_differentiable_def by blast |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1457 |
|
64969 | 1458 |
lemma holomorphic_rGamma [holomorphic_intros]: "rGamma holomorphic_on A" |
62534
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1459 |
unfolding holomorphic_on_def by (auto intro!: field_differentiable_rGamma) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1460 |
|
68721 | 1461 |
lemma holomorphic_rGamma' [holomorphic_intros]: |
1462 |
assumes "f holomorphic_on A" |
|
1463 |
shows "(\<lambda>x. rGamma (f x)) holomorphic_on A" |
|
1464 |
proof - |
|
1465 |
have "rGamma \<circ> f holomorphic_on A" using assms |
|
1466 |
by (intro holomorphic_on_compose assms holomorphic_rGamma) |
|
1467 |
thus ?thesis by (simp only: o_def) |
|
1468 |
qed |
|
1469 |
||
64969 | 1470 |
lemma analytic_rGamma: "rGamma analytic_on A" |
1471 |
unfolding analytic_on_def by (auto intro!: exI[of _ 1] holomorphic_rGamma) |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1472 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1473 |
|
62534
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1474 |
lemma field_differentiable_Gamma: "z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Gamma field_differentiable (at z within A)" |
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1475 |
using has_field_derivative_Gamma[of z] unfolding field_differentiable_def by auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1476 |
|
64969 | 1477 |
lemma holomorphic_Gamma [holomorphic_intros]: "A \<inter> \<int>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> Gamma holomorphic_on A" |
62534
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1478 |
unfolding holomorphic_on_def by (auto intro!: field_differentiable_Gamma) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1479 |
|
68721 | 1480 |
lemma holomorphic_Gamma' [holomorphic_intros]: |
1481 |
assumes "f holomorphic_on A" and "\<And>x. x \<in> A \<Longrightarrow> f x \<notin> \<int>\<^sub>\<le>\<^sub>0" |
|
1482 |
shows "(\<lambda>x. Gamma (f x)) holomorphic_on A" |
|
1483 |
proof - |
|
1484 |
have "Gamma \<circ> f holomorphic_on A" using assms |
|
1485 |
by (intro holomorphic_on_compose assms holomorphic_Gamma) auto |
|
1486 |
thus ?thesis by (simp only: o_def) |
|
1487 |
qed |
|
1488 |
||
64969 | 1489 |
lemma analytic_Gamma: "A \<inter> \<int>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> Gamma analytic_on A" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1490 |
by (rule analytic_on_subset[of _ "UNIV - \<int>\<^sub>\<le>\<^sub>0"], subst analytic_on_open) |
64969 | 1491 |
(auto intro!: holomorphic_Gamma) |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1492 |
|
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1493 |
|
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1494 |
lemma field_differentiable_ln_Gamma_complex: |
64969 | 1495 |
"z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> ln_Gamma field_differentiable (at (z::complex) within A)" |
1496 |
by (rule field_differentiable_within_subset[of _ _ UNIV]) |
|
1497 |
(force simp: field_differentiable_def intro!: derivative_intros)+ |
|
1498 |
||
1499 |
lemma holomorphic_ln_Gamma [holomorphic_intros]: "A \<inter> \<real>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> ln_Gamma holomorphic_on A" |
|
1500 |
unfolding holomorphic_on_def by (auto intro!: field_differentiable_ln_Gamma_complex) |
|
1501 |
||
1502 |
lemma analytic_ln_Gamma: "A \<inter> \<real>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> ln_Gamma analytic_on A" |
|
1503 |
by (rule analytic_on_subset[of _ "UNIV - \<real>\<^sub>\<le>\<^sub>0"], subst analytic_on_open) |
|
1504 |
(auto intro!: holomorphic_ln_Gamma) |
|
1505 |
||
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1506 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1507 |
lemma has_field_derivative_rGamma_complex' [derivative_intros]: |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1508 |
"(rGamma has_field_derivative (if z \<in> \<int>\<^sub>\<le>\<^sub>0 then (-1)^(nat \<lfloor>-Re z\<rfloor>) * fact (nat \<lfloor>-Re z\<rfloor>) else |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1509 |
-rGamma z * Digamma z)) (at z within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1510 |
using has_field_derivative_rGamma[of z] by (auto elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1511 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1512 |
declare has_field_derivative_rGamma_complex'[THEN DERIV_chain2, derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1513 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1514 |
|
62534
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1515 |
lemma field_differentiable_Polygamma: |
64969 | 1516 |
fixes z :: complex |
62533
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
paulson <lp15@cam.ac.uk>
parents:
62398
diff
changeset
|
1517 |
shows |
62534
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1518 |
"z \<notin> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Polygamma n field_differentiable (at z within A)" |
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1519 |
using has_field_derivative_Polygamma[of z n] unfolding field_differentiable_def by auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1520 |
|
64969 | 1521 |
lemma holomorphic_on_Polygamma [holomorphic_intros]: "A \<inter> \<int>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> Polygamma n holomorphic_on A" |
62534
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
paulson <lp15@cam.ac.uk>
parents:
62533
diff
changeset
|
1522 |
unfolding holomorphic_on_def by (auto intro!: field_differentiable_Polygamma) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1523 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1524 |
lemma analytic_on_Polygamma: "A \<inter> \<int>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> Polygamma n analytic_on A" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1525 |
by (rule analytic_on_subset[of _ "UNIV - \<int>\<^sub>\<le>\<^sub>0"], subst analytic_on_open) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1526 |
(auto intro!: holomorphic_on_Polygamma) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1527 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1528 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1529 |
|
70136 | 1530 |
subsection\<^marker>\<open>tag unimportant\<close> \<open>The real Gamma function\<close> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1531 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1532 |
lemma rGamma_series_real: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1533 |
"eventually (\<lambda>n. rGamma_series x n = Re (rGamma_series (of_real x) n)) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1534 |
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
|
1535 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1536 |
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
|
1537 |
have "Re (rGamma_series (of_real x) n) = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1538 |
Re (of_real (pochhammer x (Suc n)) / (fact n * exp (of_real (x * ln (real_of_nat n)))))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1539 |
using n by (simp add: rGamma_series_def powr_def Ln_of_nat pochhammer_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1540 |
also from n have "\<dots> = Re (of_real ((pochhammer x (Suc n)) / |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1541 |
(fact n * (exp (x * ln (real_of_nat n))))))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1542 |
by (subst exp_of_real) simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1543 |
also from n have "\<dots> = rGamma_series x n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1544 |
by (subst Re_complex_of_real) (simp add: rGamma_series_def powr_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1545 |
finally show "rGamma_series x n = Re (rGamma_series (of_real x) n)" .. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1546 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1547 |
|
70136 | 1548 |
instantiation\<^marker>\<open>tag unimportant\<close> real :: Gamma |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1549 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1550 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1551 |
definition "rGamma_real x = Re (rGamma (of_real x :: complex))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1552 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1553 |
instance proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1554 |
fix x :: real |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1555 |
have "rGamma x = Re (rGamma (of_real x))" by (simp add: rGamma_real_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1556 |
also have "of_real \<dots> = rGamma (of_real x :: complex)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1557 |
by (intro of_real_Re rGamma_complex_real) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1558 |
also have "\<dots> = 0 \<longleftrightarrow> x \<in> \<int>\<^sub>\<le>\<^sub>0" by (simp add: rGamma_eq_zero_iff of_real_in_nonpos_Ints_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1559 |
also have "\<dots> \<longleftrightarrow> (\<exists>n. x = - of_nat n)" by (auto elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1560 |
finally show "(rGamma x) = 0 \<longleftrightarrow> (\<exists>n. x = - real_of_nat n)" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1561 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1562 |
fix x :: real assume "\<And>n. x \<noteq> - of_nat n" |
63539 | 1563 |
hence x: "complex_of_real x \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1564 |
by (subst of_real_in_nonpos_Ints_iff) (auto elim!: nonpos_Ints_cases') |
63539 | 1565 |
then have "x \<noteq> 0" by auto |
1566 |
with x have "(rGamma has_field_derivative - rGamma x * Digamma x) (at x)" |
|
70707
125705f5965f
A little-known material, and some tidying up
paulson <lp15@cam.ac.uk>
parents:
70532
diff
changeset
|
1567 |
by (fastforce intro!: derivative_eq_intros has_vector_derivative_real_field |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1568 |
simp: Polygamma_of_real rGamma_real_def [abs_def]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1569 |
thus "let d = (THE d. (\<lambda>n. \<Sum>k<n. inverse (of_nat (Suc k)) - inverse (x + of_nat k)) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1570 |
\<longlonglongrightarrow> d) - euler_mascheroni *\<^sub>R 1 in (\<lambda>y. (rGamma y - rGamma x + |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1571 |
rGamma x * d * (y - x)) /\<^sub>R norm (y - x)) \<midarrow>x\<rightarrow> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1572 |
by (simp add: has_field_derivative_def has_derivative_def Digamma_def sums_def [abs_def] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1573 |
netlimit_at of_real_def[symmetric] suminf_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1574 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1575 |
fix n :: nat |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1576 |
have "(rGamma has_field_derivative (-1)^n * fact n) (at (- of_nat n :: real))" |
70707
125705f5965f
A little-known material, and some tidying up
paulson <lp15@cam.ac.uk>
parents:
70532
diff
changeset
|
1577 |
by (fastforce intro!: derivative_eq_intros has_vector_derivative_real_field |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1578 |
simp: Polygamma_of_real rGamma_real_def [abs_def]) |
64272 | 1579 |
thus "let x = - of_nat n in (\<lambda>y. (rGamma y - rGamma x - (- 1) ^ n * prod of_nat {1..n} * |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1580 |
(y - x)) /\<^sub>R norm (y - x)) \<midarrow>x::real\<rightarrow> 0" |
64272 | 1581 |
by (simp add: has_field_derivative_def has_derivative_def fact_prod netlimit_at Let_def) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1582 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1583 |
fix x :: real |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1584 |
have "rGamma_series x \<longlonglongrightarrow> rGamma x" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1585 |
proof (rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1586 |
show "(\<lambda>n. Re (rGamma_series (of_real x) n)) \<longlonglongrightarrow> rGamma x" unfolding rGamma_real_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1587 |
by (intro tendsto_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1588 |
qed (insert rGamma_series_real, simp add: eq_commute) |
64272 | 1589 |
thus "let fact' = \<lambda>n. prod of_nat {1..n}; |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1590 |
exp = \<lambda>x. THE e. (\<lambda>n. \<Sum>k<n. x ^ k /\<^sub>R fact k) \<longlonglongrightarrow> e; |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1591 |
pochhammer' = \<lambda>a n. \<Prod>n = 0..n. a + of_nat n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1592 |
in (\<lambda>n. pochhammer' x n / (fact' n * exp (x * ln (real_of_nat n) *\<^sub>R 1))) \<longlonglongrightarrow> rGamma x" |
64272 | 1593 |
by (simp add: fact_prod pochhammer_Suc_prod rGamma_series_def [abs_def] exp_def |
63367
6c731c8b7f03
simplified definitions of combinatorial functions
haftmann
parents:
63317
diff
changeset
|
1594 |
of_real_def [symmetric] suminf_def sums_def [abs_def] atLeast0AtMost) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1595 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1596 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1597 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1598 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1599 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1600 |
lemma rGamma_complex_of_real: "rGamma (complex_of_real x) = complex_of_real (rGamma x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1601 |
unfolding rGamma_real_def using rGamma_complex_real by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1602 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1603 |
lemma Gamma_complex_of_real: "Gamma (complex_of_real x) = complex_of_real (Gamma x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1604 |
unfolding Gamma_def by (simp add: rGamma_complex_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1605 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1606 |
lemma rGamma_real_altdef: "rGamma x = lim (rGamma_series (x :: real))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1607 |
by (rule sym, rule limI, rule tendsto_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1608 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1609 |
lemma Gamma_real_altdef1: "Gamma x = lim (Gamma_series (x :: real))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1610 |
by (rule sym, rule limI, rule tendsto_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1611 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1612 |
lemma Gamma_real_altdef2: "Gamma x = Re (Gamma (of_real x))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1613 |
using rGamma_complex_real[OF Reals_of_real[of x]] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1614 |
by (elim Reals_cases) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1615 |
(simp only: Gamma_def rGamma_real_def of_real_inverse[symmetric] Re_complex_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1616 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1617 |
lemma ln_Gamma_series_complex_of_real: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1618 |
"x > 0 \<Longrightarrow> n > 0 \<Longrightarrow> ln_Gamma_series (complex_of_real x) n = of_real (ln_Gamma_series x n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1619 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1620 |
assume xn: "x > 0" "n > 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1621 |
have "Ln (complex_of_real x / of_nat k + 1) = of_real (ln (x / of_nat k + 1))" if "k \<ge> 1" for k |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1622 |
using that xn by (subst Ln_of_real [symmetric]) (auto intro!: add_nonneg_pos simp: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1623 |
with xn show ?thesis by (simp add: ln_Gamma_series_def Ln_of_nat Ln_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1624 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1625 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1626 |
lemma ln_Gamma_real_converges: |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1627 |
assumes "(x::real) > 0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1628 |
shows "convergent (ln_Gamma_series x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1629 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1630 |
have "(\<lambda>n. ln_Gamma_series (complex_of_real x) n) \<longlonglongrightarrow> ln_Gamma (of_real x)" using assms |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1631 |
by (intro ln_Gamma_complex_LIMSEQ) (auto simp: of_real_in_nonpos_Ints_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1632 |
moreover from eventually_gt_at_top[of "0::nat"] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1633 |
have "eventually (\<lambda>n. complex_of_real (ln_Gamma_series x n) = |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1634 |
ln_Gamma_series (complex_of_real x) n) sequentially" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1635 |
by eventually_elim (simp add: ln_Gamma_series_complex_of_real assms) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1636 |
ultimately have "(\<lambda>n. complex_of_real (ln_Gamma_series x n)) \<longlonglongrightarrow> ln_Gamma (of_real x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1637 |
by (subst tendsto_cong) assumption+ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1638 |
from tendsto_Re[OF this] show ?thesis by (auto simp: convergent_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1639 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1640 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1641 |
lemma ln_Gamma_real_LIMSEQ: "(x::real) > 0 \<Longrightarrow> ln_Gamma_series x \<longlonglongrightarrow> ln_Gamma x" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1642 |
using ln_Gamma_real_converges[of x] unfolding ln_Gamma_def by (simp add: convergent_LIMSEQ_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1643 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1644 |
lemma ln_Gamma_complex_of_real: "x > 0 \<Longrightarrow> ln_Gamma (complex_of_real x) = of_real (ln_Gamma x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1645 |
proof (unfold ln_Gamma_def, rule limI, rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1646 |
assume x: "x > 0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1647 |
show "eventually (\<lambda>n. of_real (ln_Gamma_series x n) = |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1648 |
ln_Gamma_series (complex_of_real x) n) sequentially" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1649 |
using eventually_gt_at_top[of "0::nat"] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1650 |
by eventually_elim (simp add: ln_Gamma_series_complex_of_real x) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1651 |
qed (intro tendsto_of_real, insert ln_Gamma_real_LIMSEQ[of x], simp add: ln_Gamma_def) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1652 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1653 |
lemma Gamma_real_pos_exp: "x > (0 :: real) \<Longrightarrow> Gamma x = exp (ln_Gamma x)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1654 |
by (auto simp: Gamma_real_altdef2 Gamma_complex_altdef of_real_in_nonpos_Ints_iff |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1655 |
ln_Gamma_complex_of_real exp_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1656 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1657 |
lemma ln_Gamma_real_pos: "x > 0 \<Longrightarrow> ln_Gamma x = ln (Gamma x :: real)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1658 |
unfolding Gamma_real_pos_exp by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1659 |
|
64969 | 1660 |
lemma ln_Gamma_complex_conv_fact: "n > 0 \<Longrightarrow> ln_Gamma (of_nat n :: complex) = ln (fact (n - 1))" |
1661 |
using ln_Gamma_complex_of_real[of "real n"] Gamma_fact[of "n - 1", where 'a = real] |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1662 |
by (simp add: ln_Gamma_real_pos of_nat_diff Ln_of_real [symmetric]) |
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1663 |
|
64969 | 1664 |
lemma ln_Gamma_real_conv_fact: "n > 0 \<Longrightarrow> ln_Gamma (real n) = ln (fact (n - 1))" |
1665 |
using Gamma_fact[of "n - 1", where 'a = real] |
|
1666 |
by (simp add: ln_Gamma_real_pos of_nat_diff Ln_of_real [symmetric]) |
|
1667 |
||
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
1668 |
lemma Gamma_real_pos [simp, intro]: "x > (0::real) \<Longrightarrow> Gamma x > 0" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
1669 |
by (simp add: Gamma_real_pos_exp) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
1670 |
|
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
1671 |
lemma Gamma_real_nonneg [simp, intro]: "x > (0::real) \<Longrightarrow> Gamma x \<ge> 0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1672 |
by (simp add: Gamma_real_pos_exp) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1673 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1674 |
lemma has_field_derivative_ln_Gamma_real [derivative_intros]: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1675 |
assumes x: "x > (0::real)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1676 |
shows "(ln_Gamma has_field_derivative Digamma x) (at x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1677 |
proof (subst DERIV_cong_ev[OF refl _ refl]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1678 |
from assms show "((Re \<circ> ln_Gamma \<circ> complex_of_real) has_field_derivative Digamma x) (at x)" |
70707
125705f5965f
A little-known material, and some tidying up
paulson <lp15@cam.ac.uk>
parents:
70532
diff
changeset
|
1679 |
by (auto intro!: derivative_eq_intros has_vector_derivative_real_field |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1680 |
simp: Polygamma_of_real o_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1681 |
from eventually_nhds_in_nhd[of x "{0<..}"] assms |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1682 |
show "eventually (\<lambda>y. ln_Gamma y = (Re \<circ> ln_Gamma \<circ> of_real) y) (nhds x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1683 |
by (auto elim!: eventually_mono simp: ln_Gamma_complex_of_real interior_open) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1684 |
qed |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1685 |
|
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1686 |
lemma field_differentiable_ln_Gamma_real: |
64969 | 1687 |
"x > 0 \<Longrightarrow> ln_Gamma field_differentiable (at (x::real) within A)" |
1688 |
by (rule field_differentiable_within_subset[of _ _ UNIV]) |
|
1689 |
(auto simp: field_differentiable_def intro!: derivative_intros)+ |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1690 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1691 |
declare has_field_derivative_ln_Gamma_real[THEN DERIV_chain2, derivative_intros] |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1692 |
|
64969 | 1693 |
lemma deriv_ln_Gamma_real: |
1694 |
assumes "z > 0" |
|
1695 |
shows "deriv ln_Gamma z = Digamma (z :: real)" |
|
1696 |
by (intro DERIV_imp_deriv has_field_derivative_ln_Gamma_real assms) |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1697 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1698 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1699 |
lemma has_field_derivative_rGamma_real' [derivative_intros]: |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1700 |
"(rGamma has_field_derivative (if x \<in> \<int>\<^sub>\<le>\<^sub>0 then (-1)^(nat \<lfloor>-x\<rfloor>) * fact (nat \<lfloor>-x\<rfloor>) else |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1701 |
-rGamma x * Digamma x)) (at x within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1702 |
using has_field_derivative_rGamma[of x] by (force elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1703 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1704 |
declare has_field_derivative_rGamma_real'[THEN DERIV_chain2, derivative_intros] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1705 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1706 |
lemma Polygamma_real_odd_pos: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1707 |
assumes "(x::real) \<notin> \<int>\<^sub>\<le>\<^sub>0" "odd n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1708 |
shows "Polygamma n x > 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1709 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1710 |
from assms have "x \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1711 |
with assms show ?thesis |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1712 |
unfolding Polygamma_def using Polygamma_converges'[of x "Suc n"] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1713 |
by (auto simp: zero_less_power_eq simp del: power_Suc |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1714 |
dest: plus_of_nat_eq_0_imp intro!: mult_pos_pos suminf_pos) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1715 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1716 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1717 |
lemma Polygamma_real_even_neg: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1718 |
assumes "(x::real) > 0" "n > 0" "even n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1719 |
shows "Polygamma n x < 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1720 |
using assms unfolding Polygamma_def using Polygamma_converges'[of x "Suc n"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1721 |
by (auto intro!: mult_pos_pos suminf_pos) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1722 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1723 |
lemma Polygamma_real_strict_mono: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1724 |
assumes "x > 0" "x < (y::real)" "even n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1725 |
shows "Polygamma n x < Polygamma n y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1726 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1727 |
have "\<exists>\<xi>. x < \<xi> \<and> \<xi> < y \<and> Polygamma n y - Polygamma n x = (y - x) * Polygamma (Suc n) \<xi>" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1728 |
using assms by (intro MVT2 derivative_intros impI allI) (auto elim!: nonpos_Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1729 |
then guess \<xi> by (elim exE conjE) note \<xi> = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1730 |
note \<xi>(3) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1731 |
also from \<xi>(1,2) assms have "(y - x) * Polygamma (Suc n) \<xi> > 0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1732 |
by (intro mult_pos_pos Polygamma_real_odd_pos) (auto elim!: nonpos_Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1733 |
finally show ?thesis by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1734 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1735 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1736 |
lemma Polygamma_real_strict_antimono: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1737 |
assumes "x > 0" "x < (y::real)" "odd n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1738 |
shows "Polygamma n x > Polygamma n y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1739 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1740 |
have "\<exists>\<xi>. x < \<xi> \<and> \<xi> < y \<and> Polygamma n y - Polygamma n x = (y - x) * Polygamma (Suc n) \<xi>" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1741 |
using assms by (intro MVT2 derivative_intros impI allI) (auto elim!: nonpos_Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1742 |
then guess \<xi> by (elim exE conjE) note \<xi> = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1743 |
note \<xi>(3) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1744 |
also from \<xi>(1,2) assms have "(y - x) * Polygamma (Suc n) \<xi> < 0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1745 |
by (intro mult_pos_neg Polygamma_real_even_neg) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1746 |
finally show ?thesis by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1747 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1748 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1749 |
lemma Polygamma_real_mono: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1750 |
assumes "x > 0" "x \<le> (y::real)" "even n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1751 |
shows "Polygamma n x \<le> Polygamma n y" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1752 |
using Polygamma_real_strict_mono[OF assms(1) _ assms(3), of y] assms(2) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1753 |
by (cases "x = y") simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1754 |
|
63721 | 1755 |
lemma Digamma_real_strict_mono: "(0::real) < x \<Longrightarrow> x < y \<Longrightarrow> Digamma x < Digamma y" |
1756 |
by (rule Polygamma_real_strict_mono) simp_all |
|
1757 |
||
1758 |
lemma Digamma_real_mono: "(0::real) < x \<Longrightarrow> x \<le> y \<Longrightarrow> Digamma x \<le> Digamma y" |
|
1759 |
by (rule Polygamma_real_mono) simp_all |
|
1760 |
||
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1761 |
lemma Digamma_real_ge_three_halves_pos: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1762 |
assumes "x \<ge> 3/2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1763 |
shows "Digamma (x :: real) > 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1764 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1765 |
have "0 < Digamma (3/2 :: real)" by (fact Digamma_real_three_halves_pos) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1766 |
also from assms have "\<dots> \<le> Digamma x" by (intro Polygamma_real_mono) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1767 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1768 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1769 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1770 |
lemma ln_Gamma_real_strict_mono: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1771 |
assumes "x \<ge> 3/2" "x < y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1772 |
shows "ln_Gamma (x :: real) < ln_Gamma y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1773 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1774 |
have "\<exists>\<xi>. x < \<xi> \<and> \<xi> < y \<and> ln_Gamma y - ln_Gamma x = (y - x) * Digamma \<xi>" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1775 |
using assms by (intro MVT2 derivative_intros impI allI) (auto elim!: nonpos_Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1776 |
then guess \<xi> by (elim exE conjE) note \<xi> = this |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1777 |
note \<xi>(3) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1778 |
also from \<xi>(1,2) assms have "(y - x) * Digamma \<xi> > 0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1779 |
by (intro mult_pos_pos Digamma_real_ge_three_halves_pos) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1780 |
finally show ?thesis by simp |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1781 |
qed |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1782 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1783 |
lemma Gamma_real_strict_mono: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1784 |
assumes "x \<ge> 3/2" "x < y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1785 |
shows "Gamma (x :: real) < Gamma y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1786 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1787 |
from Gamma_real_pos_exp[of x] assms have "Gamma x = exp (ln_Gamma x)" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1788 |
also have "\<dots> < exp (ln_Gamma y)" by (intro exp_less_mono ln_Gamma_real_strict_mono assms) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1789 |
also from Gamma_real_pos_exp[of y] assms have "\<dots> = Gamma y" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1790 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1791 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1792 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1793 |
theorem log_convex_Gamma_real: "convex_on {0<..} (ln \<circ> Gamma :: real \<Rightarrow> real)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1794 |
by (rule convex_on_realI[of _ _ Digamma]) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1795 |
(auto intro!: derivative_eq_intros Polygamma_real_mono Gamma_real_pos |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1796 |
simp: o_def Gamma_eq_zero_iff elim!: nonpos_Ints_cases') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1797 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1798 |
|
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1799 |
subsection \<open>The uniqueness of the real Gamma function\<close> |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1800 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1801 |
text \<open> |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1802 |
The following is a proof of the Bohr--Mollerup theorem, which states that |
69566 | 1803 |
any log-convex function \<open>G\<close> on the positive reals that fulfils \<open>G(1) = 1\<close> and |
1804 |
satisfies the functional equation \<open>G(x + 1) = x G(x)\<close> must be equal to the |
|
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1805 |
Gamma function. |
69566 | 1806 |
In principle, if \<open>G\<close> is a holomorphic complex function, one could then extend |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1807 |
this from the positive reals to the entire complex plane (minus the non-positive |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1808 |
integers, where the Gamma function is not defined). |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1809 |
\<close> |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1810 |
|
70136 | 1811 |
context\<^marker>\<open>tag unimportant\<close> |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1812 |
fixes G :: "real \<Rightarrow> real" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1813 |
assumes G_1: "G 1 = 1" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1814 |
assumes G_plus1: "x > 0 \<Longrightarrow> G (x + 1) = x * G x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1815 |
assumes G_pos: "x > 0 \<Longrightarrow> G x > 0" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1816 |
assumes log_convex_G: "convex_on {0<..} (ln \<circ> G)" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1817 |
begin |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1818 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1819 |
private lemma G_fact: "G (of_nat n + 1) = fact n" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1820 |
using G_plus1[of "real n + 1" for n] |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1821 |
by (induction n) (simp_all add: G_1 G_plus1) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1822 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1823 |
private definition S :: "real \<Rightarrow> real \<Rightarrow> real" where |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1824 |
"S x y = (ln (G y) - ln (G x)) / (y - x)" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1825 |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1826 |
private lemma S_eq: |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1827 |
"n \<ge> 2 \<Longrightarrow> S (of_nat n) (of_nat n + x) = (ln (G (real n + x)) - ln (fact (n - 1))) / x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1828 |
by (subst G_fact [symmetric]) (simp add: S_def add_ac of_nat_diff) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1829 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1830 |
private lemma G_lower: |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1831 |
assumes x: "x > 0" and n: "n \<ge> 1" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1832 |
shows "Gamma_series x n \<le> G x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1833 |
proof - |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1834 |
have "(ln \<circ> G) (real (Suc n)) \<le> ((ln \<circ> G) (real (Suc n) + x) - |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1835 |
(ln \<circ> G) (real (Suc n) - 1)) / (real (Suc n) + x - (real (Suc n) - 1)) * |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1836 |
(real (Suc n) - (real (Suc n) - 1)) + (ln \<circ> G) (real (Suc n) - 1)" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1837 |
using x n by (intro convex_onD_Icc' convex_on_subset[OF log_convex_G]) auto |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1838 |
hence "S (of_nat n) (of_nat (Suc n)) \<le> S (of_nat (Suc n)) (of_nat (Suc n) + x)" |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1839 |
unfolding S_def using x by (simp add: field_simps) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1840 |
also have "S (of_nat n) (of_nat (Suc n)) = ln (fact n) - ln (fact (n-1))" |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1841 |
unfolding S_def using n |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1842 |
by (subst (1 2) G_fact [symmetric]) (simp_all add: add_ac of_nat_diff) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1843 |
also have "\<dots> = ln (fact n / fact (n-1))" by (subst ln_div) simp_all |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1844 |
also from n have "fact n / fact (n - 1) = n" by (cases n) simp_all |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1845 |
finally have "x * ln (real n) + ln (fact n) \<le> ln (G (real (Suc n) + x))" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1846 |
using x n by (subst (asm) S_eq) (simp_all add: field_simps) |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1847 |
also have "x * ln (real n) + ln (fact n) = ln (exp (x * ln (real n)) * fact n)" |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1848 |
using x by (simp add: ln_mult) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1849 |
finally have "exp (x * ln (real n)) * fact n \<le> G (real (Suc n) + x)" using x |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1850 |
by (subst (asm) ln_le_cancel_iff) (simp_all add: G_pos) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1851 |
also have "G (real (Suc n) + x) = pochhammer x (Suc n) * G x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1852 |
using G_plus1[of "real (Suc n) + x" for n] G_plus1[of x] x |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1853 |
by (induction n) (simp_all add: pochhammer_Suc add_ac) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1854 |
finally show "Gamma_series x n \<le> G x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1855 |
using x by (simp add: field_simps pochhammer_pos Gamma_series_def) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1856 |
qed |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1857 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1858 |
private lemma G_upper: |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1859 |
assumes x: "x > 0" "x \<le> 1" and n: "n \<ge> 2" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1860 |
shows "G x \<le> Gamma_series x n * (1 + x / real n)" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1861 |
proof - |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1862 |
have "(ln \<circ> G) (real n + x) \<le> ((ln \<circ> G) (real n + 1) - |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1863 |
(ln \<circ> G) (real n)) / (real n + 1 - (real n)) * |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1864 |
((real n + x) - real n) + (ln \<circ> G) (real n)" |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1865 |
using x n by (intro convex_onD_Icc' convex_on_subset[OF log_convex_G]) auto |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1866 |
hence "S (of_nat n) (of_nat n + x) \<le> S (of_nat n) (of_nat n + 1)" |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1867 |
unfolding S_def using x by (simp add: field_simps) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1868 |
also from n have "S (of_nat n) (of_nat n + 1) = ln (fact n) - ln (fact (n-1))" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1869 |
by (subst (1 2) G_fact [symmetric]) (simp add: S_def add_ac of_nat_diff) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1870 |
also have "\<dots> = ln (fact n / (fact (n-1)))" using n by (subst ln_div) simp_all |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1871 |
also from n have "fact n / fact (n - 1) = n" by (cases n) simp_all |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1872 |
finally have "ln (G (real n + x)) \<le> x * ln (real n) + ln (fact (n - 1))" |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1873 |
using x n by (subst (asm) S_eq) (simp_all add: field_simps) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1874 |
also have "\<dots> = ln (exp (x * ln (real n)) * fact (n - 1))" using x |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1875 |
by (simp add: ln_mult) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1876 |
finally have "G (real n + x) \<le> exp (x * ln (real n)) * fact (n - 1)" using x |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1877 |
by (subst (asm) ln_le_cancel_iff) (simp_all add: G_pos) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1878 |
also have "G (real n + x) = pochhammer x n * G x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1879 |
using G_plus1[of "real n + x" for n] x |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1880 |
by (induction n) (simp_all add: pochhammer_Suc add_ac) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1881 |
finally have "G x \<le> exp (x * ln (real n)) * fact (n- 1) / pochhammer x n" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1882 |
using x by (simp add: field_simps pochhammer_pos) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1883 |
also from n have "fact (n - 1) = fact n / n" by (cases n) simp_all |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1884 |
also have "exp (x * ln (real n)) * \<dots> / pochhammer x n = |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1885 |
Gamma_series x n * (1 + x / real n)" using n x |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1886 |
by (simp add: Gamma_series_def divide_simps pochhammer_Suc) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1887 |
finally show ?thesis . |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1888 |
qed |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1889 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1890 |
private lemma G_eq_Gamma_aux: |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1891 |
assumes x: "x > 0" "x \<le> 1" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1892 |
shows "G x = Gamma x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1893 |
proof (rule antisym) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1894 |
show "G x \<ge> Gamma x" |
63952
354808e9f44b
new material connected with HOL Light measure theory, plus more rationalisation
paulson <lp15@cam.ac.uk>
parents:
63918
diff
changeset
|
1895 |
proof (rule tendsto_upperbound) |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1896 |
from G_lower[of x] show "eventually (\<lambda>n. Gamma_series x n \<le> G x) sequentially" |
65578
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
paulson <lp15@cam.ac.uk>
parents:
64969
diff
changeset
|
1897 |
using x by (auto intro: eventually_mono[OF eventually_ge_at_top[of "1::nat"]]) |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1898 |
qed (simp_all add: Gamma_series_LIMSEQ) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1899 |
next |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1900 |
show "G x \<le> Gamma x" |
63952
354808e9f44b
new material connected with HOL Light measure theory, plus more rationalisation
paulson <lp15@cam.ac.uk>
parents:
63918
diff
changeset
|
1901 |
proof (rule tendsto_lowerbound) |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1902 |
have "(\<lambda>n. Gamma_series x n * (1 + x / real n)) \<longlonglongrightarrow> Gamma x * (1 + 0)" |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1903 |
by (rule tendsto_intros real_tendsto_divide_at_top |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1904 |
Gamma_series_LIMSEQ filterlim_real_sequentially)+ |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1905 |
thus "(\<lambda>n. Gamma_series x n * (1 + x / real n)) \<longlonglongrightarrow> Gamma x" by simp |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1906 |
next |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1907 |
from G_upper[of x] show "eventually (\<lambda>n. Gamma_series x n * (1 + x / real n) \<ge> G x) sequentially" |
65578
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
paulson <lp15@cam.ac.uk>
parents:
64969
diff
changeset
|
1908 |
using x by (auto intro: eventually_mono[OF eventually_ge_at_top[of "2::nat"]]) |
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1909 |
qed simp_all |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1910 |
qed |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1911 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1912 |
theorem Gamma_pos_real_unique: |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1913 |
assumes x: "x > 0" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1914 |
shows "G x = Gamma x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1915 |
proof - |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1916 |
have G_eq: "G (real n + x) = Gamma (real n + x)" if "x \<in> {0<..1}" for n x using that |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1917 |
proof (induction n) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1918 |
case (Suc n) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1919 |
from Suc have "x + real n > 0" by simp |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1920 |
hence "x + real n \<notin> \<int>\<^sub>\<le>\<^sub>0" by auto |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1921 |
with Suc show ?case using G_plus1[of "real n + x"] Gamma_plus1[of "real n + x"] |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1922 |
by (auto simp: add_ac) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1923 |
qed (simp_all add: G_eq_Gamma_aux) |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
1924 |
|
63725
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1925 |
show ?thesis |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1926 |
proof (cases "frac x = 0") |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1927 |
case True |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1928 |
hence "x = of_int (floor x)" by (simp add: frac_def) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1929 |
with x have x_eq: "x = of_nat (nat (floor x) - 1) + 1" by simp |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1930 |
show ?thesis by (subst (1 2) x_eq, rule G_eq) simp_all |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1931 |
next |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1932 |
case False |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1933 |
from assms have x_eq: "x = of_nat (nat (floor x)) + frac x" |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1934 |
by (simp add: frac_def) |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1935 |
have frac_le_1: "frac x \<le> 1" unfolding frac_def by linarith |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1936 |
show ?thesis |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1937 |
by (subst (1 2) x_eq, rule G_eq, insert False frac_le_1) simp_all |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1938 |
qed |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1939 |
qed |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1940 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1941 |
end |
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1942 |
|
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
Manuel Eberl <eberlm@in.tum.de>
parents:
63721
diff
changeset
|
1943 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1944 |
subsection \<open>The Beta function\<close> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1945 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1946 |
definition Beta where "Beta a b = Gamma a * Gamma b / Gamma (a + b)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1947 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1948 |
lemma Beta_altdef: "Beta a b = Gamma a * Gamma b * rGamma (a + b)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1949 |
by (simp add: inverse_eq_divide Beta_def Gamma_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1950 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1951 |
lemma Beta_commute: "Beta a b = Beta b a" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1952 |
unfolding Beta_def by (simp add: ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1953 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1954 |
lemma has_field_derivative_Beta1 [derivative_intros]: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1955 |
assumes "x \<notin> \<int>\<^sub>\<le>\<^sub>0" "x + y \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1956 |
shows "((\<lambda>x. Beta x y) has_field_derivative (Beta x y * (Digamma x - Digamma (x + y)))) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1957 |
(at x within A)" unfolding Beta_altdef |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1958 |
by (rule DERIV_cong, (rule derivative_intros assms)+) (simp add: algebra_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1959 |
|
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1960 |
lemma Beta_pole1: "x \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Beta x y = 0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1961 |
by (auto simp add: Beta_def elim!: nonpos_Ints_cases') |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1962 |
|
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1963 |
lemma Beta_pole2: "y \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Beta x y = 0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1964 |
by (auto simp add: Beta_def elim!: nonpos_Ints_cases') |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
1965 |
|
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1966 |
lemma Beta_zero: "x + y \<in> \<int>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Beta x y = 0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1967 |
by (auto simp add: Beta_def elim!: nonpos_Ints_cases') |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
1968 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1969 |
lemma has_field_derivative_Beta2 [derivative_intros]: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1970 |
assumes "y \<notin> \<int>\<^sub>\<le>\<^sub>0" "x + y \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1971 |
shows "((\<lambda>y. Beta x y) has_field_derivative (Beta x y * (Digamma y - Digamma (x + y)))) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1972 |
(at y within A)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1973 |
using has_field_derivative_Beta1[of y x A] assms by (simp add: Beta_commute add_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1974 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1975 |
theorem Beta_plus1_plus1: |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1976 |
assumes "x \<notin> \<int>\<^sub>\<le>\<^sub>0" "y \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1977 |
shows "Beta (x + 1) y + Beta x (y + 1) = Beta x y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1978 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
1979 |
have "Beta (x + 1) y + Beta x (y + 1) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1980 |
(Gamma (x + 1) * Gamma y + Gamma x * Gamma (y + 1)) * rGamma ((x + y) + 1)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1981 |
by (simp add: Beta_altdef add_divide_distrib algebra_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1982 |
also have "\<dots> = (Gamma x * Gamma y) * ((x + y) * rGamma ((x + y) + 1))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1983 |
by (subst assms[THEN Gamma_plus1])+ (simp add: algebra_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1984 |
also from assms have "\<dots> = Beta x y" unfolding Beta_altdef by (subst rGamma_plus1) simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1985 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1986 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1987 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1988 |
theorem Beta_plus1_left: |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
1989 |
assumes "x \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1990 |
shows "(x + y) * Beta (x + 1) y = x * Beta x y" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1991 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1992 |
have "(x + y) * Beta (x + 1) y = Gamma (x + 1) * Gamma y * ((x + y) * rGamma ((x + y) + 1))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1993 |
unfolding Beta_altdef by (simp only: ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1994 |
also have "\<dots> = x * Beta x y" unfolding Beta_altdef |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1995 |
by (subst assms[THEN Gamma_plus1] rGamma_plus1)+ (simp only: ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1996 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1997 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
1998 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
1999 |
theorem Beta_plus1_right: |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2000 |
assumes "y \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2001 |
shows "(x + y) * Beta x (y + 1) = y * Beta x y" |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2002 |
using Beta_plus1_left[of y x] assms by (simp_all add: Beta_commute add.commute) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2003 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2004 |
lemma Gamma_Gamma_Beta: |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2005 |
assumes "x + y \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2006 |
shows "Gamma x * Gamma y = Beta x y * Gamma (x + y)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2007 |
unfolding Beta_altdef using assms Gamma_eq_zero_iff[of "x+y"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2008 |
by (simp add: rGamma_inverse_Gamma) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2009 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2010 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2011 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2012 |
subsection \<open>Legendre duplication theorem\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2013 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2014 |
context |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2015 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2016 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2017 |
private lemma Gamma_legendre_duplication_aux: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2018 |
fixes z :: "'a :: Gamma" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2019 |
assumes "z \<notin> \<int>\<^sub>\<le>\<^sub>0" "z + 1/2 \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2020 |
shows "Gamma z * Gamma (z + 1/2) = exp ((1 - 2*z) * of_real (ln 2)) * Gamma (1/2) * Gamma (2*z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2021 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2022 |
let ?powr = "\<lambda>b a. exp (a * of_real (ln (of_nat b)))" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2023 |
let ?h = "\<lambda>n. (fact (n-1))\<^sup>2 / fact (2*n-1) * of_nat (2^(2*n)) * |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2024 |
exp (1/2 * of_real (ln (real_of_nat n)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2025 |
{ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2026 |
fix z :: 'a assume z: "z \<notin> \<int>\<^sub>\<le>\<^sub>0" "z + 1/2 \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2027 |
let ?g = "\<lambda>n. ?powr 2 (2*z) * Gamma_series' z n * Gamma_series' (z + 1/2) n / |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2028 |
Gamma_series' (2*z) (2*n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2029 |
have "eventually (\<lambda>n. ?g n = ?h n) sequentially" using eventually_gt_at_top |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2030 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2031 |
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
|
2032 |
let ?f = "fact (n - 1) :: 'a" and ?f' = "fact (2*n - 1) :: 'a" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2033 |
have A: "exp t * exp t = exp (2*t :: 'a)" for t by (subst exp_add [symmetric]) simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2034 |
have A: "Gamma_series' z n * Gamma_series' (z + 1/2) n = ?f^2 * ?powr n (2*z + 1/2) / |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2035 |
(pochhammer z n * pochhammer (z + 1/2) n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2036 |
by (simp add: Gamma_series'_def exp_add ring_distribs power2_eq_square A mult_ac) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2037 |
have B: "Gamma_series' (2*z) (2*n) = |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2038 |
?f' * ?powr 2 (2*z) * ?powr n (2*z) / |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2039 |
(of_nat (2^(2*n)) * pochhammer z n * pochhammer (z+1/2) n)" using n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2040 |
by (simp add: Gamma_series'_def ln_mult exp_add ring_distribs pochhammer_double) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2041 |
from z have "pochhammer z n \<noteq> 0" by (auto dest: pochhammer_eq_0_imp_nonpos_Int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2042 |
moreover from z have "pochhammer (z + 1/2) n \<noteq> 0" by (auto dest: pochhammer_eq_0_imp_nonpos_Int) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2043 |
ultimately have "?powr 2 (2*z) * (Gamma_series' z n * Gamma_series' (z + 1/2) n) / Gamma_series' (2*z) (2*n) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2044 |
?f^2 / ?f' * of_nat (2^(2*n)) * (?powr n ((4*z + 1)/2) * ?powr n (-2*z))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2045 |
using n unfolding A B by (simp add: divide_simps exp_minus) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2046 |
also have "?powr n ((4*z + 1)/2) * ?powr n (-2*z) = ?powr n (1/2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2047 |
by (simp add: algebra_simps exp_add[symmetric] add_divide_distrib) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2048 |
finally show "?g n = ?h n" by (simp only: mult_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2049 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2050 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2051 |
moreover from z double_in_nonpos_Ints_imp[of z] have "2 * z \<notin> \<int>\<^sub>\<le>\<^sub>0" by auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2052 |
hence "?g \<longlonglongrightarrow> ?powr 2 (2*z) * Gamma z * Gamma (z+1/2) / Gamma (2*z)" |
69064
5840724b1d71
Prefix form of infix with * on either side no longer needs special treatment
nipkow
parents:
68721
diff
changeset
|
2053 |
using LIMSEQ_subseq_LIMSEQ[OF Gamma_series'_LIMSEQ, of "(*)2" "2*z"] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2054 |
by (intro tendsto_intros Gamma_series'_LIMSEQ) |
66447
a1f5c5c26fa6
Replaced subseq with strict_mono
eberlm <eberlm@in.tum.de>
parents:
66286
diff
changeset
|
2055 |
(simp_all add: o_def strict_mono_def Gamma_eq_zero_iff) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2056 |
ultimately have "?h \<longlonglongrightarrow> ?powr 2 (2*z) * Gamma z * Gamma (z+1/2) / Gamma (2*z)" |
70532
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
paulson <lp15@cam.ac.uk>
parents:
70196
diff
changeset
|
2057 |
by (blast intro: Lim_transform_eventually) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2058 |
} note lim = this |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2059 |
|
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2060 |
from assms double_in_nonpos_Ints_imp[of z] have z': "2 * z \<notin> \<int>\<^sub>\<le>\<^sub>0" by auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2061 |
from fraction_not_in_ints[of 2 1] have "(1/2 :: 'a) \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2062 |
by (intro not_in_Ints_imp_not_in_nonpos_Ints) simp_all |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2063 |
with lim[of "1/2 :: 'a"] have "?h \<longlonglongrightarrow> 2 * Gamma (1/2 :: 'a)" by (simp add: exp_of_real) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2064 |
from LIMSEQ_unique[OF this lim[OF assms]] z' show ?thesis |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2065 |
by (simp add: divide_simps Gamma_eq_zero_iff ring_distribs exp_diff exp_of_real ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2066 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2067 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
2068 |
theorem Gamma_reflection_complex: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2069 |
fixes z :: complex |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2070 |
shows "Gamma z * Gamma (1 - z) = of_real pi / sin (of_real pi * z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2071 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2072 |
let ?g = "\<lambda>z::complex. Gamma z * Gamma (1 - z) * sin (of_real pi * z)" |
63040 | 2073 |
define g where [abs_def]: "g z = (if z \<in> \<int> then of_real pi else ?g z)" for z :: complex |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2074 |
let ?h = "\<lambda>z::complex. (of_real pi * cot (of_real pi*z) + Digamma z - Digamma (1 - z))" |
63040 | 2075 |
define h where [abs_def]: "h z = (if z \<in> \<int> then 0 else ?h z)" for z :: complex |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2076 |
|
69597 | 2077 |
\<comment> \<open>\<^term>\<open>g\<close> is periodic with period 1.\<close> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2078 |
interpret g: periodic_fun_simple' g |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2079 |
proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2080 |
fix z :: complex |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2081 |
show "g (z + 1) = g z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2082 |
proof (cases "z \<in> \<int>") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2083 |
case False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2084 |
hence "z * g z = z * Beta z (- z + 1) * sin (of_real pi * z)" by (simp add: g_def Beta_def) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2085 |
also have "z * Beta z (- z + 1) = (z + 1 + -z) * Beta (z + 1) (- z + 1)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2086 |
using False Ints_diff[of 1 "1 - z"] nonpos_Ints_subset_Ints |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2087 |
by (subst Beta_plus1_left [symmetric]) auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2088 |
also have "\<dots> * sin (of_real pi * z) = z * (Beta (z + 1) (-z) * sin (of_real pi * (z + 1)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2089 |
using False Ints_diff[of "z+1" 1] Ints_minus[of "-z"] nonpos_Ints_subset_Ints |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2090 |
by (subst Beta_plus1_right) (auto simp: ring_distribs sin_plus_pi) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2091 |
also from False have "Beta (z + 1) (-z) * sin (of_real pi * (z + 1)) = g (z + 1)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2092 |
using Ints_diff[of "z+1" 1] by (auto simp: g_def Beta_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2093 |
finally show "g (z + 1) = g z" using False by (subst (asm) mult_left_cancel) auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2094 |
qed (simp add: g_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2095 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2096 |
|
69597 | 2097 |
\<comment> \<open>\<^term>\<open>g\<close> is entire.\<close> |
64969 | 2098 |
have g_g' [derivative_intros]: "(g has_field_derivative (h z * g z)) (at z)" for z :: complex |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2099 |
proof (cases "z \<in> \<int>") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2100 |
let ?h' = "\<lambda>z. Beta z (1 - z) * ((Digamma z - Digamma (1 - z)) * sin (z * of_real pi) + |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2101 |
of_real pi * cos (z * of_real pi))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2102 |
case False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2103 |
from False have "eventually (\<lambda>t. t \<in> UNIV - \<int>) (nhds z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2104 |
by (intro eventually_nhds_in_open) (auto simp: open_Diff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2105 |
hence "eventually (\<lambda>t. g t = ?g t) (nhds z)" by eventually_elim (simp add: g_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2106 |
moreover { |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2107 |
from False Ints_diff[of 1 "1-z"] have "1 - z \<notin> \<int>" by auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2108 |
hence "(?g has_field_derivative ?h' z) (at z)" using nonpos_Ints_subset_Ints |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2109 |
by (auto intro!: derivative_eq_intros simp: algebra_simps Beta_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2110 |
also from False have "sin (of_real pi * z) \<noteq> 0" by (subst sin_eq_0) auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2111 |
hence "?h' z = h z * g z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2112 |
using False unfolding g_def h_def cot_def by (simp add: field_simps Beta_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2113 |
finally have "(?g has_field_derivative (h z * g z)) (at z)" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2114 |
} |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2115 |
ultimately show ?thesis by (subst DERIV_cong_ev[OF refl _ refl]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2116 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2117 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2118 |
then obtain n where z: "z = of_int n" by (auto elim!: Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2119 |
let ?t = "(\<lambda>z::complex. if z = 0 then 1 else sin z / z) \<circ> (\<lambda>z. of_real pi * z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2120 |
have deriv_0: "(g has_field_derivative 0) (at 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2121 |
proof (subst DERIV_cong_ev[OF refl _ refl]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2122 |
show "eventually (\<lambda>z. g z = of_real pi * Gamma (1 + z) * Gamma (1 - z) * ?t z) (nhds 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2123 |
using eventually_nhds_ball[OF zero_less_one, of "0::complex"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2124 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2125 |
fix z :: complex assume z: "z \<in> ball 0 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2126 |
show "g z = of_real pi * Gamma (1 + z) * Gamma (1 - z) * ?t z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2127 |
proof (cases "z = 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2128 |
assume z': "z \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2129 |
with z have z'': "z \<notin> \<int>\<^sub>\<le>\<^sub>0" "z \<notin> \<int>" by (auto elim!: Ints_cases simp: dist_0_norm) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2130 |
from Gamma_plus1[OF this(1)] have "Gamma z = Gamma (z + 1) / z" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2131 |
with z'' z' show ?thesis by (simp add: g_def ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2132 |
qed (simp add: g_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2133 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2134 |
have "(?t has_field_derivative (0 * of_real pi)) (at 0)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2135 |
using has_field_derivative_sin_z_over_z[of "UNIV :: complex set"] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2136 |
by (intro DERIV_chain) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2137 |
thus "((\<lambda>z. of_real pi * Gamma (1 + z) * Gamma (1 - z) * ?t z) has_field_derivative 0) (at 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2138 |
by (auto intro!: derivative_eq_intros simp: o_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2139 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2140 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2141 |
have "((g \<circ> (\<lambda>x. x - of_int n)) has_field_derivative 0 * 1) (at (of_int n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2142 |
using deriv_0 by (intro DERIV_chain) (auto intro!: derivative_eq_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2143 |
also have "g \<circ> (\<lambda>x. x - of_int n) = g" by (intro ext) (simp add: g.minus_of_int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2144 |
finally show "(g has_field_derivative (h z * g z)) (at z)" by (simp add: z h_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2145 |
qed |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
2146 |
|
64969 | 2147 |
have g_holo [holomorphic_intros]: "g holomorphic_on A" for A |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
2148 |
by (rule holomorphic_on_subset[of _ UNIV]) |
64969 | 2149 |
(force simp: holomorphic_on_open intro!: derivative_intros)+ |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2150 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2151 |
have g_eq: "g (z/2) * g ((z+1)/2) = Gamma (1/2)^2 * g z" if "Re z > -1" "Re z < 2" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2152 |
proof (cases "z \<in> \<int>") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2153 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2154 |
with that have "z = 0 \<or> z = 1" by (force elim!: Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2155 |
moreover have "g 0 * g (1/2) = Gamma (1/2)^2 * g 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2156 |
using fraction_not_in_ints[where 'a = complex, of 2 1] by (simp add: g_def power2_eq_square) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2157 |
moreover have "g (1/2) * g 1 = Gamma (1/2)^2 * g 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2158 |
using fraction_not_in_ints[where 'a = complex, of 2 1] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2159 |
by (simp add: g_def power2_eq_square Beta_def algebra_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2160 |
ultimately show ?thesis by force |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2161 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2162 |
case False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2163 |
hence z: "z/2 \<notin> \<int>" "(z+1)/2 \<notin> \<int>" using Ints_diff[of "z+1" 1] by (auto elim!: Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2164 |
hence z': "z/2 \<notin> \<int>\<^sub>\<le>\<^sub>0" "(z+1)/2 \<notin> \<int>\<^sub>\<le>\<^sub>0" by (auto elim!: nonpos_Ints_cases) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2165 |
from z have "1-z/2 \<notin> \<int>" "1-((z+1)/2) \<notin> \<int>" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2166 |
using Ints_diff[of 1 "1-z/2"] Ints_diff[of 1 "1-((z+1)/2)"] by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2167 |
hence z'': "1-z/2 \<notin> \<int>\<^sub>\<le>\<^sub>0" "1-((z+1)/2) \<notin> \<int>\<^sub>\<le>\<^sub>0" by (auto elim!: nonpos_Ints_cases) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2168 |
from z have "g (z/2) * g ((z+1)/2) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2169 |
(Gamma (z/2) * Gamma ((z+1)/2)) * (Gamma (1-z/2) * Gamma (1-((z+1)/2))) * |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2170 |
(sin (of_real pi * z/2) * sin (of_real pi * (z+1)/2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2171 |
by (simp add: g_def) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2172 |
also from z' Gamma_legendre_duplication_aux[of "z/2"] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2173 |
have "Gamma (z/2) * Gamma ((z+1)/2) = exp ((1-z) * of_real (ln 2)) * Gamma (1/2) * Gamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2174 |
by (simp add: add_divide_distrib) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2175 |
also from z'' Gamma_legendre_duplication_aux[of "1-(z+1)/2"] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2176 |
have "Gamma (1-z/2) * Gamma (1-(z+1)/2) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2177 |
Gamma (1-z) * Gamma (1/2) * exp (z * of_real (ln 2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2178 |
by (simp add: add_divide_distrib ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2179 |
finally have "g (z/2) * g ((z+1)/2) = Gamma (1/2)^2 * (Gamma z * Gamma (1-z) * |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2180 |
(2 * (sin (of_real pi*z/2) * sin (of_real pi*(z+1)/2))))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2181 |
by (simp add: add_ac power2_eq_square exp_add ring_distribs exp_diff exp_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2182 |
also have "sin (of_real pi*(z+1)/2) = cos (of_real pi*z/2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2183 |
using cos_sin_eq[of "- of_real pi * z/2", symmetric] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2184 |
by (simp add: ring_distribs add_divide_distrib ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2185 |
also have "2 * (sin (of_real pi*z/2) * cos (of_real pi*z/2)) = sin (of_real pi * z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2186 |
by (subst sin_times_cos) (simp add: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2187 |
also have "Gamma z * Gamma (1 - z) * sin (complex_of_real pi * z) = g z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2188 |
using \<open>z \<notin> \<int>\<close> by (simp add: g_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2189 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2190 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2191 |
have g_eq: "g (z/2) * g ((z+1)/2) = Gamma (1/2)^2 * g z" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2192 |
proof - |
63040 | 2193 |
define r where "r = \<lfloor>Re z / 2\<rfloor>" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2194 |
have "Gamma (1/2)^2 * g z = Gamma (1/2)^2 * g (z - of_int (2*r))" by (simp only: g.minus_of_int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2195 |
also have "of_int (2*r) = 2 * of_int r" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2196 |
also have "Re z - 2 * of_int r > -1" "Re z - 2 * of_int r < 2" unfolding r_def by linarith+ |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2197 |
hence "Gamma (1/2)^2 * g (z - 2 * of_int r) = |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2198 |
g ((z - 2 * of_int r)/2) * g ((z - 2 * of_int r + 1)/2)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2199 |
unfolding r_def by (intro g_eq[symmetric]) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2200 |
also have "(z - 2 * of_int r) / 2 = z/2 - of_int r" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2201 |
also have "g \<dots> = g (z/2)" by (rule g.minus_of_int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2202 |
also have "(z - 2 * of_int r + 1) / 2 = (z + 1)/2 - of_int r" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2203 |
also have "g \<dots> = g ((z+1)/2)" by (rule g.minus_of_int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2204 |
finally show ?thesis .. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2205 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2206 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2207 |
have g_nz [simp]: "g z \<noteq> 0" for z :: complex |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2208 |
unfolding g_def using Ints_diff[of 1 "1 - z"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2209 |
by (auto simp: Gamma_eq_zero_iff sin_eq_0 dest!: nonpos_Ints_Int) |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
2210 |
|
64969 | 2211 |
have h_altdef: "h z = deriv g z / g z" for z :: complex |
2212 |
using DERIV_imp_deriv[OF g_g', of z] by simp |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
2213 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2214 |
have h_eq: "h z = (h (z/2) + h ((z+1)/2)) / 2" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2215 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2216 |
have "((\<lambda>t. g (t/2) * g ((t+1)/2)) has_field_derivative |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2217 |
(g (z/2) * g ((z+1)/2)) * ((h (z/2) + h ((z+1)/2)) / 2)) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2218 |
by (auto intro!: derivative_eq_intros g_g'[THEN DERIV_chain2] simp: field_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2219 |
hence "((\<lambda>t. Gamma (1/2)^2 * g t) has_field_derivative |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2220 |
Gamma (1/2)^2 * g z * ((h (z/2) + h ((z+1)/2)) / 2)) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2221 |
by (subst (1 2) g_eq[symmetric]) simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2222 |
from DERIV_cmult[OF this, of "inverse ((Gamma (1/2))^2)"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2223 |
have "(g has_field_derivative (g z * ((h (z/2) + h ((z+1)/2))/2))) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2224 |
using fraction_not_in_ints[where 'a = complex, of 2 1] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2225 |
by (simp add: divide_simps Gamma_eq_zero_iff not_in_Ints_imp_not_in_nonpos_Ints) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2226 |
moreover have "(g has_field_derivative (g z * h z)) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2227 |
using g_g'[of z] by (simp add: ac_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2228 |
ultimately have "g z * h z = g z * ((h (z/2) + h ((z+1)/2))/2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2229 |
by (intro DERIV_unique) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2230 |
thus "h z = (h (z/2) + h ((z+1)/2)) / 2" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2231 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2232 |
|
64969 | 2233 |
have h_holo [holomorphic_intros]: "h holomorphic_on A" for A |
2234 |
unfolding h_altdef [abs_def] |
|
2235 |
by (rule holomorphic_on_subset[of _ UNIV]) (auto intro!: holomorphic_intros) |
|
2236 |
define h' where "h' = deriv h" |
|
2237 |
have h_h': "(h has_field_derivative h' z) (at z)" for z unfolding h'_def |
|
2238 |
by (auto intro!: holomorphic_derivI[of _ UNIV] holomorphic_intros) |
|
2239 |
have h'_holo [holomorphic_intros]: "h' holomorphic_on A" for A unfolding h'_def |
|
2240 |
by (rule holomorphic_on_subset[of _ UNIV]) (auto intro!: holomorphic_intros) |
|
2241 |
have h'_cont: "continuous_on UNIV h'" |
|
2242 |
by (intro holomorphic_on_imp_continuous_on holomorphic_intros) |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2243 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2244 |
have h'_eq: "h' z = (h' (z/2) + h' ((z+1)/2)) / 4" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2245 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2246 |
have "((\<lambda>t. (h (t/2) + h ((t+1)/2)) / 2) has_field_derivative |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2247 |
((h' (z/2) + h' ((z+1)/2)) / 4)) (at z)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2248 |
by (fastforce intro!: derivative_eq_intros h_h'[THEN DERIV_chain2]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2249 |
hence "(h has_field_derivative ((h' (z/2) + h' ((z+1)/2))/4)) (at z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2250 |
by (subst (asm) h_eq[symmetric]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2251 |
from h_h' and this show "h' z = (h' (z/2) + h' ((z+1)/2)) / 4" by (rule DERIV_unique) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2252 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2253 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2254 |
have h'_zero: "h' z = 0" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2255 |
proof - |
63040 | 2256 |
define m where "m = max 1 \<bar>Re z\<bar>" |
2257 |
define B where "B = {t. abs (Re t) \<le> m \<and> abs (Im t) \<le> abs (Im z)}" |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2258 |
have "closed ({t. Re t \<ge> -m} \<inter> {t. Re t \<le> m} \<inter> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2259 |
{t. Im t \<ge> -\<bar>Im z\<bar>} \<inter> {t. Im t \<le> \<bar>Im z\<bar>})" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2260 |
(is "closed ?B") by (intro closed_Int closed_halfspace_Re_ge closed_halfspace_Re_le |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2261 |
closed_halfspace_Im_ge closed_halfspace_Im_le) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2262 |
also have "?B = B" unfolding B_def by fastforce |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2263 |
finally have "closed B" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2264 |
moreover have "bounded B" unfolding bounded_iff |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2265 |
proof (intro ballI exI) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2266 |
fix t assume t: "t \<in> B" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2267 |
have "norm t \<le> \<bar>Re t\<bar> + \<bar>Im t\<bar>" by (rule cmod_le) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2268 |
also from t have "\<bar>Re t\<bar> \<le> m" unfolding B_def by blast |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2269 |
also from t have "\<bar>Im t\<bar> \<le> \<bar>Im z\<bar>" unfolding B_def by blast |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2270 |
finally show "norm t \<le> m + \<bar>Im z\<bar>" by - simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2271 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2272 |
ultimately have compact: "compact B" by (subst compact_eq_bounded_closed) blast |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2273 |
|
69260
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
haftmann
parents:
69064
diff
changeset
|
2274 |
define M where "M = (SUP z\<in>B. norm (h' z))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2275 |
have "compact (h' ` B)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2276 |
by (intro compact_continuous_image continuous_on_subset[OF h'_cont] compact) blast+ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2277 |
hence bdd: "bdd_above ((\<lambda>z. norm (h' z)) ` B)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2278 |
using bdd_above_norm[of "h' ` B"] by (simp add: image_comp o_def compact_imp_bounded) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2279 |
have "norm (h' z) \<le> M" unfolding M_def by (intro cSUP_upper bdd) (simp_all add: B_def m_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2280 |
also have "M \<le> M/2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2281 |
proof (subst M_def, subst cSUP_le_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2282 |
have "z \<in> B" unfolding B_def m_def by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2283 |
thus "B \<noteq> {}" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2284 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2285 |
show "\<forall>z\<in>B. norm (h' z) \<le> M/2" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2286 |
proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2287 |
fix t :: complex assume t: "t \<in> B" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2288 |
from h'_eq[of t] t have "h' t = (h' (t/2) + h' ((t+1)/2)) / 4" by (simp add: dist_0_norm) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2289 |
also have "norm \<dots> = norm (h' (t/2) + h' ((t+1)/2)) / 4" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2290 |
also have "norm (h' (t/2) + h' ((t+1)/2)) \<le> norm (h' (t/2)) + norm (h' ((t+1)/2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2291 |
by (rule norm_triangle_ineq) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2292 |
also from t have "abs (Re ((t + 1)/2)) \<le> m" unfolding m_def B_def by auto |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2293 |
with t have "t/2 \<in> B" "(t+1)/2 \<in> B" unfolding B_def by auto |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2294 |
hence "norm (h' (t/2)) + norm (h' ((t+1)/2)) \<le> M + M" unfolding M_def |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2295 |
by (intro add_mono cSUP_upper bdd) (auto simp: B_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2296 |
also have "(M + M) / 4 = M / 2" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2297 |
finally show "norm (h' t) \<le> M/2" by - simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2298 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2299 |
qed (insert bdd, auto simp: cball_eq_empty) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2300 |
hence "M \<le> 0" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2301 |
finally show "h' z = 0" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2302 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2303 |
have h_h'_2: "(h has_field_derivative 0) (at z)" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2304 |
using h_h'[of z] h'_zero[of z] by simp |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2305 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2306 |
have g_real: "g z \<in> \<real>" if "z \<in> \<real>" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2307 |
unfolding g_def using that by (auto intro!: Reals_mult Gamma_complex_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2308 |
have h_real: "h z \<in> \<real>" if "z \<in> \<real>" for z |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2309 |
unfolding h_def using that by (auto intro!: Reals_mult Reals_add Reals_diff Polygamma_Real) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2310 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2311 |
from h'_zero h_h'_2 have "\<exists>c. \<forall>z\<in>UNIV. h z = c" |
66936 | 2312 |
by (intro has_field_derivative_zero_constant) simp_all |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2313 |
then obtain c where c: "\<And>z. h z = c" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2314 |
have "\<exists>u. u \<in> closed_segment 0 1 \<and> Re (g 1) - Re (g 0) = Re (h u * g u * (1 - 0))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2315 |
by (intro complex_mvt_line g_g') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2316 |
then guess u by (elim exE conjE) note u = this |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2317 |
from u(1) have u': "u \<in> \<real>" unfolding closed_segment_def |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2318 |
by (auto simp: scaleR_conv_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2319 |
from u' g_real[of u] g_nz[of u] have "Re (g u) \<noteq> 0" by (auto elim!: Reals_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2320 |
with u(2) c[of u] g_real[of u] g_nz[of u] u' |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2321 |
have "Re c = 0" by (simp add: complex_is_Real_iff g.of_1) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2322 |
with h_real[of 0] c[of 0] have "c = 0" by (auto elim!: Reals_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2323 |
with c have A: "h z * g z = 0" for z by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2324 |
hence "(g has_field_derivative 0) (at z)" for z using g_g'[of z] by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2325 |
hence "\<exists>c'. \<forall>z\<in>UNIV. g z = c'" by (intro has_field_derivative_zero_constant) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2326 |
then obtain c' where c: "\<And>z. g z = c'" by (force simp: dist_0_norm) |
63539 | 2327 |
from this[of 0] have "c' = pi" unfolding g_def by simp |
2328 |
with c have "g z = pi" by simp |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2329 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2330 |
show ?thesis |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2331 |
proof (cases "z \<in> \<int>") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2332 |
case False |
62072 | 2333 |
with \<open>g z = pi\<close> show ?thesis by (auto simp: g_def divide_simps) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2334 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2335 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2336 |
then obtain n where n: "z = of_int n" by (elim Ints_cases) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2337 |
with sin_eq_0[of "of_real pi * z"] have "sin (of_real pi * z) = 0" by force |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2338 |
moreover have "of_int (1 - n) \<in> \<int>\<^sub>\<le>\<^sub>0" if "n > 0" using that by (intro nonpos_Ints_of_int) simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2339 |
ultimately show ?thesis using n |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2340 |
by (cases "n \<le> 0") (auto simp: Gamma_eq_zero_iff nonpos_Ints_of_int) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2341 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2342 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2343 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2344 |
lemma rGamma_reflection_complex: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2345 |
"rGamma z * rGamma (1 - z :: complex) = sin (of_real pi * z) / of_real pi" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2346 |
using Gamma_reflection_complex[of z] |
62390 | 2347 |
by (simp add: Gamma_def divide_simps split: if_split_asm) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2348 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2349 |
lemma rGamma_reflection_complex': |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2350 |
"rGamma z * rGamma (- z :: complex) = -z * sin (of_real pi * z) / of_real pi" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2351 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2352 |
have "rGamma z * rGamma (-z) = -z * (rGamma z * rGamma (1 - z))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2353 |
using rGamma_plus1[of "-z", symmetric] by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2354 |
also have "rGamma z * rGamma (1 - z) = sin (of_real pi * z) / of_real pi" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2355 |
by (rule rGamma_reflection_complex) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2356 |
finally show ?thesis by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2357 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2358 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2359 |
lemma Gamma_reflection_complex': |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2360 |
"Gamma z * Gamma (- z :: complex) = - of_real pi / (z * sin (of_real pi * z))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2361 |
using rGamma_reflection_complex'[of z] by (force simp add: Gamma_def divide_simps mult_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2362 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2363 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2364 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2365 |
lemma Gamma_one_half_real: "Gamma (1/2 :: real) = sqrt pi" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2366 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2367 |
from Gamma_reflection_complex[of "1/2"] fraction_not_in_ints[where 'a = complex, of 2 1] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2368 |
have "Gamma (1/2 :: complex)^2 = of_real pi" by (simp add: power2_eq_square) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2369 |
hence "of_real pi = Gamma (complex_of_real (1/2))^2" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2370 |
also have "\<dots> = of_real ((Gamma (1/2))^2)" by (subst Gamma_complex_of_real) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2371 |
finally have "Gamma (1/2)^2 = pi" by (subst (asm) of_real_eq_iff) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2372 |
moreover have "Gamma (1/2 :: real) \<ge> 0" using Gamma_real_pos[of "1/2"] by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2373 |
ultimately show ?thesis by (rule real_sqrt_unique [symmetric]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2374 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2375 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2376 |
lemma Gamma_one_half_complex: "Gamma (1/2 :: complex) = of_real (sqrt pi)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2377 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2378 |
have "Gamma (1/2 :: complex) = Gamma (of_real (1/2))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2379 |
also have "\<dots> = of_real (sqrt pi)" by (simp only: Gamma_complex_of_real Gamma_one_half_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2380 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2381 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2382 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
2383 |
theorem Gamma_legendre_duplication: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2384 |
fixes z :: complex |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2385 |
assumes "z \<notin> \<int>\<^sub>\<le>\<^sub>0" "z + 1/2 \<notin> \<int>\<^sub>\<le>\<^sub>0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2386 |
shows "Gamma z * Gamma (z + 1/2) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2387 |
exp ((1 - 2*z) * of_real (ln 2)) * of_real (sqrt pi) * Gamma (2*z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2388 |
using Gamma_legendre_duplication_aux[OF assms] by (simp add: Gamma_one_half_complex) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2389 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2390 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2391 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2392 |
|
70136 | 2393 |
subsection\<^marker>\<open>tag unimportant\<close> \<open>Limits and residues\<close> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2394 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2395 |
text \<open> |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2396 |
The inverse of the Gamma function has simple zeros: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2397 |
\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2398 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2399 |
lemma rGamma_zeros: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2400 |
"(\<lambda>z. rGamma z / (z + of_nat n)) \<midarrow> (- of_nat n) \<rightarrow> ((-1)^n * fact n :: 'a :: Gamma)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2401 |
proof (subst tendsto_cong) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2402 |
let ?f = "\<lambda>z. pochhammer z n * rGamma (z + of_nat (Suc n)) :: 'a" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2403 |
from eventually_at_ball'[OF zero_less_one, of "- of_nat n :: 'a" UNIV] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2404 |
show "eventually (\<lambda>z. rGamma z / (z + of_nat n) = ?f z) (at (- of_nat n))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2405 |
by (subst pochhammer_rGamma[of _ "Suc n"]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2406 |
(auto elim!: eventually_mono simp: divide_simps pochhammer_rec' eq_neg_iff_add_eq_0) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2407 |
have "isCont ?f (- of_nat n)" by (intro continuous_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2408 |
thus "?f \<midarrow> (- of_nat n) \<rightarrow> (- 1) ^ n * fact n" unfolding isCont_def |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2409 |
by (simp add: pochhammer_same) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2410 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2411 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2412 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2413 |
text \<open> |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2414 |
The simple zeros of the inverse of the Gamma function correspond to simple poles of the Gamma function, |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2415 |
and their residues can easily be computed from the limit we have just proven: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2416 |
\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2417 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2418 |
lemma Gamma_poles: "filterlim Gamma at_infinity (at (- of_nat n :: 'a :: Gamma))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2419 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2420 |
from eventually_at_ball'[OF zero_less_one, of "- of_nat n :: 'a" UNIV] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2421 |
have "eventually (\<lambda>z. rGamma z \<noteq> (0 :: 'a)) (at (- of_nat n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2422 |
by (auto elim!: eventually_mono nonpos_Ints_cases' |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2423 |
simp: rGamma_eq_zero_iff dist_of_nat dist_minus) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2424 |
with isCont_rGamma[of "- of_nat n :: 'a", OF continuous_ident] |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2425 |
have "filterlim (\<lambda>z. inverse (rGamma z) :: 'a) at_infinity (at (- of_nat n))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2426 |
unfolding isCont_def by (intro filterlim_compose[OF filterlim_inverse_at_infinity]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2427 |
(simp_all add: filterlim_at) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2428 |
moreover have "(\<lambda>z. inverse (rGamma z) :: 'a) = Gamma" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2429 |
by (intro ext) (simp add: rGamma_inverse_Gamma) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2430 |
ultimately show ?thesis by (simp only: ) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2431 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2432 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2433 |
lemma Gamma_residues: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2434 |
"(\<lambda>z. Gamma z * (z + of_nat n)) \<midarrow> (- of_nat n) \<rightarrow> ((-1)^n / fact n :: 'a :: Gamma)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2435 |
proof (subst tendsto_cong) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2436 |
let ?c = "(- 1) ^ n / fact n :: 'a" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2437 |
from eventually_at_ball'[OF zero_less_one, of "- of_nat n :: 'a" UNIV] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2438 |
show "eventually (\<lambda>z. Gamma z * (z + of_nat n) = inverse (rGamma z / (z + of_nat n))) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2439 |
(at (- of_nat n))" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2440 |
by (auto elim!: eventually_mono simp: divide_simps rGamma_inverse_Gamma) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2441 |
have "(\<lambda>z. inverse (rGamma z / (z + of_nat n))) \<midarrow> (- of_nat n) \<rightarrow> |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2442 |
inverse ((- 1) ^ n * fact n :: 'a)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2443 |
by (intro tendsto_intros rGamma_zeros) simp_all |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2444 |
also have "inverse ((- 1) ^ n * fact n) = ?c" |
68403 | 2445 |
by (simp_all add: field_simps flip: power_mult_distrib) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2446 |
finally show "(\<lambda>z. inverse (rGamma z / (z + of_nat n))) \<midarrow> (- of_nat n) \<rightarrow> ?c" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2447 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2448 |
|
66286
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2449 |
lemma is_pole_Gamma: "is_pole Gamma (- of_nat n)" |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2450 |
unfolding is_pole_def using Gamma_poles . |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2451 |
|
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2452 |
lemma Gamme_residue: |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2453 |
"residue Gamma (- of_nat n) = (-1) ^ n / fact n" |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2454 |
proof (rule residue_simple') |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2455 |
show "open (- (\<int>\<^sub>\<le>\<^sub>0 - {-of_nat n}) :: complex set)" |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2456 |
by (intro open_Compl closed_subset_Ints) auto |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2457 |
show "Gamma holomorphic_on (- (\<int>\<^sub>\<le>\<^sub>0 - {-of_nat n}) - {- of_nat n})" |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2458 |
by (rule holomorphic_Gamma) auto |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2459 |
show "(\<lambda>w. Gamma w * (w - - of_nat n)) \<midarrow>- of_nat n \<rightarrow> (- 1) ^ n / fact n" |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2460 |
using Gamma_residues[of n] by simp |
1c977b13414f
poles and residues of the Gamma function
eberlm <eberlm@in.tum.de>
parents:
65587
diff
changeset
|
2461 |
qed auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2462 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2463 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2464 |
subsection \<open>Alternative definitions\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2465 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2466 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2467 |
subsubsection \<open>Variant of the Euler form\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2468 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2469 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2470 |
definition Gamma_series_euler' where |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2471 |
"Gamma_series_euler' z n = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2472 |
inverse z * (\<Prod>k=1..n. exp (z * of_real (ln (1 + inverse (of_nat k)))) / (1 + z / of_nat k))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2473 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2474 |
context |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2475 |
begin |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2476 |
private lemma Gamma_euler'_aux1: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2477 |
fixes z :: "'a :: {real_normed_field,banach}" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2478 |
assumes n: "n > 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2479 |
shows "exp (z * of_real (ln (of_nat n + 1))) = (\<Prod>k=1..n. exp (z * of_real (ln (1 + 1 / of_nat k))))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2480 |
proof - |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2481 |
have "(\<Prod>k=1..n. exp (z * of_real (ln (1 + 1 / of_nat k)))) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2482 |
exp (z * of_real (\<Sum>k = 1..n. ln (1 + 1 / real_of_nat k)))" |
64267 | 2483 |
by (subst exp_sum [symmetric]) (simp_all add: sum_distrib_left) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2484 |
also have "(\<Sum>k=1..n. ln (1 + 1 / of_nat k) :: real) = ln (\<Prod>k=1..n. 1 + 1 / real_of_nat k)" |
64272 | 2485 |
by (subst ln_prod [symmetric]) (auto intro!: add_pos_nonneg) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2486 |
also have "(\<Prod>k=1..n. 1 + 1 / of_nat k :: real) = (\<Prod>k=1..n. (of_nat k + 1) / of_nat k)" |
64272 | 2487 |
by (intro prod.cong) (simp_all add: divide_simps) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2488 |
also have "(\<Prod>k=1..n. (of_nat k + 1) / of_nat k :: real) = of_nat n + 1" |
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
|
2489 |
by (induction n) (simp_all add: prod.nat_ivl_Suc' divide_simps) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2490 |
finally show ?thesis .. |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2491 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2492 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
2493 |
theorem Gamma_series_euler': |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2494 |
assumes z: "(z :: 'a :: Gamma) \<notin> \<int>\<^sub>\<le>\<^sub>0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2495 |
shows "(\<lambda>n. Gamma_series_euler' z n) \<longlonglongrightarrow> Gamma z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2496 |
proof (rule Gamma_seriesI, rule Lim_transform_eventually) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2497 |
let ?f = "\<lambda>n. fact n * exp (z * of_real (ln (of_nat n + 1))) / pochhammer z (n + 1)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2498 |
let ?r = "\<lambda>n. ?f n / Gamma_series z n" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2499 |
let ?r' = "\<lambda>n. exp (z * of_real (ln (of_nat (Suc n) / of_nat n)))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2500 |
from z have z': "z \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2501 |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
2502 |
have "eventually (\<lambda>n. ?r' n = ?r n) sequentially" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2503 |
using z by (auto simp: divide_simps Gamma_series_def ring_distribs exp_diff ln_div add_ac |
65578
e4997c181cce
New material from PNT proof, as well as more default [simp] declarations. Also removed duplicate theorems about geometric series
paulson <lp15@cam.ac.uk>
parents:
64969
diff
changeset
|
2504 |
intro: eventually_mono eventually_gt_at_top[of "0::nat"] dest: pochhammer_eq_0_imp_nonpos_Int) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2505 |
moreover have "?r' \<longlonglongrightarrow> exp (z * of_real (ln 1))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2506 |
by (intro tendsto_intros LIMSEQ_Suc_n_over_n) simp_all |
70532
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
paulson <lp15@cam.ac.uk>
parents:
70196
diff
changeset
|
2507 |
ultimately show "?r \<longlonglongrightarrow> 1" by (force intro: Lim_transform_eventually) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2508 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2509 |
from 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
|
2510 |
show "eventually (\<lambda>n. ?r n = Gamma_series_euler' z n / Gamma_series z n) sequentially" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2511 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2512 |
fix n :: nat assume n: "n > 0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2513 |
from n z' have "Gamma_series_euler' z n = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2514 |
exp (z * of_real (ln (of_nat n + 1))) / (z * (\<Prod>k=1..n. (1 + z / of_nat k)))" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2515 |
by (subst Gamma_euler'_aux1) |
64272 | 2516 |
(simp_all add: Gamma_series_euler'_def prod.distrib |
2517 |
prod_inversef[symmetric] divide_inverse) |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2518 |
also have "(\<Prod>k=1..n. (1 + z / of_nat k)) = pochhammer (z + 1) n / fact n" |
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
|
2519 |
proof (cases n) |
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
|
2520 |
case (Suc n') |
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
|
2521 |
then show ?thesis |
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
|
2522 |
unfolding pochhammer_prod fact_prod |
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
|
2523 |
by (simp add: atLeastLessThanSuc_atLeastAtMost field_simps prod_dividef |
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
|
2524 |
prod.atLeast_Suc_atMost_Suc_shift del: prod.cl_ivl_Suc) |
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
|
2525 |
qed auto |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2526 |
also have "z * \<dots> = pochhammer z (Suc n) / fact n" by (simp add: pochhammer_rec) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2527 |
finally show "?r n = Gamma_series_euler' z n / Gamma_series z n" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2528 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2529 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2530 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2531 |
end |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2532 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2533 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2534 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2535 |
subsubsection \<open>Weierstrass form\<close> |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2536 |
|
69529 | 2537 |
definition Gamma_series_Weierstrass :: "'a :: {banach,real_normed_field} \<Rightarrow> nat \<Rightarrow> 'a" where |
2538 |
"Gamma_series_Weierstrass z n = |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2539 |
exp (-euler_mascheroni * z) / z * (\<Prod>k=1..n. exp (z / of_nat k) / (1 + z / of_nat k))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2540 |
|
70136 | 2541 |
definition\<^marker>\<open>tag unimportant\<close> |
69529 | 2542 |
rGamma_series_Weierstrass :: "'a :: {banach,real_normed_field} \<Rightarrow> nat \<Rightarrow> 'a" where |
2543 |
"rGamma_series_Weierstrass z n = |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2544 |
exp (euler_mascheroni * z) * z * (\<Prod>k=1..n. (1 + z / of_nat k) * exp (-z / of_nat k))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2545 |
|
69529 | 2546 |
lemma Gamma_series_Weierstrass_nonpos_Ints: |
2547 |
"eventually (\<lambda>k. Gamma_series_Weierstrass (- of_nat n) k = 0) sequentially" |
|
2548 |
using eventually_ge_at_top[of n] by eventually_elim (auto simp: Gamma_series_Weierstrass_def) |
|
2549 |
||
2550 |
lemma rGamma_series_Weierstrass_nonpos_Ints: |
|
2551 |
"eventually (\<lambda>k. rGamma_series_Weierstrass (- of_nat n) k = 0) sequentially" |
|
2552 |
using eventually_ge_at_top[of n] by eventually_elim (auto simp: rGamma_series_Weierstrass_def) |
|
2553 |
||
2554 |
theorem Gamma_Weierstrass_complex: "Gamma_series_Weierstrass z \<longlonglongrightarrow> Gamma (z :: complex)" |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2555 |
proof (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2556 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2557 |
then obtain n where "z = - of_nat n" by (elim nonpos_Ints_cases') |
69529 | 2558 |
also from True have "Gamma_series_Weierstrass \<dots> \<longlonglongrightarrow> Gamma z" |
2559 |
by (simp add: tendsto_cong[OF Gamma_series_Weierstrass_nonpos_Ints] Gamma_nonpos_Int) |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2560 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2561 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2562 |
case False |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2563 |
hence z: "z \<noteq> 0" by auto |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2564 |
let ?f = "(\<lambda>x. \<Prod>x = Suc 0..x. exp (z / of_nat x) / (1 + z / of_nat x))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2565 |
have A: "exp (ln (1 + z / of_nat n)) = (1 + z / of_nat n)" if "n \<ge> 1" for n :: nat |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2566 |
using False that by (subst exp_Ln) (auto simp: field_simps dest!: plus_of_nat_eq_0_imp) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2567 |
have "(\<lambda>n. \<Sum>k=1..n. z / of_nat k - ln (1 + z / of_nat k)) \<longlonglongrightarrow> ln_Gamma z + euler_mascheroni * z + ln z" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2568 |
using ln_Gamma_series'_aux[OF False] |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2569 |
by (simp only: atLeastLessThanSuc_atLeastAtMost [symmetric] One_nat_def |
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
|
2570 |
sum.shift_bounds_Suc_ivl sums_def atLeast0LessThan) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2571 |
from tendsto_exp[OF this] False z have "?f \<longlonglongrightarrow> z * exp (euler_mascheroni * z) * Gamma z" |
64267 | 2572 |
by (simp add: exp_add exp_sum exp_diff mult_ac Gamma_complex_altdef A) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2573 |
from tendsto_mult[OF tendsto_const[of "exp (-euler_mascheroni * z) / z"] this] z |
69529 | 2574 |
show "Gamma_series_Weierstrass z \<longlonglongrightarrow> Gamma z" |
2575 |
by (simp add: exp_minus divide_simps Gamma_series_Weierstrass_def [abs_def]) |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2576 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2577 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2578 |
lemma tendsto_complex_of_real_iff: "((\<lambda>x. complex_of_real (f x)) \<longlongrightarrow> of_real c) F = (f \<longlongrightarrow> c) F" |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2579 |
by (rule tendsto_of_real_iff) |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2580 |
|
69529 | 2581 |
lemma Gamma_Weierstrass_real: "Gamma_series_Weierstrass x \<longlonglongrightarrow> Gamma (x :: real)" |
2582 |
using Gamma_Weierstrass_complex[of "of_real x"] unfolding Gamma_series_Weierstrass_def[abs_def] |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2583 |
by (subst tendsto_complex_of_real_iff [symmetric]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2584 |
(simp_all add: exp_of_real[symmetric] Gamma_complex_of_real) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2585 |
|
69529 | 2586 |
lemma rGamma_Weierstrass_complex: "rGamma_series_Weierstrass z \<longlonglongrightarrow> rGamma (z :: complex)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2587 |
proof (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2588 |
case True |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2589 |
then obtain n where "z = - of_nat n" by (elim nonpos_Ints_cases') |
69529 | 2590 |
also from True have "rGamma_series_Weierstrass \<dots> \<longlonglongrightarrow> rGamma z" |
2591 |
by (simp add: tendsto_cong[OF rGamma_series_Weierstrass_nonpos_Ints] rGamma_nonpos_Int) |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2592 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2593 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2594 |
case False |
69529 | 2595 |
have "rGamma_series_Weierstrass z = (\<lambda>n. inverse (Gamma_series_Weierstrass z n))" |
2596 |
by (simp add: rGamma_series_Weierstrass_def[abs_def] Gamma_series_Weierstrass_def |
|
64272 | 2597 |
exp_minus divide_inverse prod_inversef[symmetric] mult_ac) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2598 |
also from False have "\<dots> \<longlonglongrightarrow> inverse (Gamma z)" |
69529 | 2599 |
by (intro tendsto_intros Gamma_Weierstrass_complex) (simp add: Gamma_eq_zero_iff) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2600 |
finally show ?thesis by (simp add: Gamma_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2601 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
2602 |
|
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2603 |
subsubsection \<open>Binomial coefficient form\<close> |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2604 |
|
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2605 |
lemma Gamma_gbinomial: |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2606 |
"(\<lambda>n. ((z + of_nat n) gchoose n) * exp (-z * of_real (ln (of_nat n)))) \<longlonglongrightarrow> rGamma (z+1)" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2607 |
proof (cases "z = 0") |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2608 |
case False |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2609 |
show ?thesis |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2610 |
proof (rule Lim_transform_eventually) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2611 |
let ?powr = "\<lambda>a b. exp (b * of_real (ln (of_nat a)))" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2612 |
show "eventually (\<lambda>n. rGamma_series z n / z = |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2613 |
((z + of_nat n) gchoose n) * ?powr n (-z)) sequentially" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2614 |
proof (intro always_eventually allI) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2615 |
fix n :: nat |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2616 |
from False have "((z + of_nat n) gchoose n) = pochhammer z (Suc n) / z / fact n" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2617 |
by (simp add: gbinomial_pochhammer' pochhammer_rec) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2618 |
also have "pochhammer z (Suc n) / z / fact n * ?powr n (-z) = rGamma_series z n / z" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2619 |
by (simp add: rGamma_series_def divide_simps exp_minus) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2620 |
finally show "rGamma_series z n / z = ((z + of_nat n) gchoose n) * ?powr n (-z)" .. |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2621 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2622 |
|
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2623 |
from False have "(\<lambda>n. rGamma_series z n / z) \<longlonglongrightarrow> rGamma z / z" by (intro tendsto_intros) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2624 |
also from False have "rGamma z / z = rGamma (z + 1)" using rGamma_plus1[of z] |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2625 |
by (simp add: field_simps) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2626 |
finally show "(\<lambda>n. rGamma_series z n / z) \<longlonglongrightarrow> rGamma (z+1)" . |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2627 |
qed |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2628 |
qed (simp_all add: binomial_gbinomial [symmetric]) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2629 |
|
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2630 |
lemma gbinomial_minus': "(a + of_nat b) gchoose b = (- 1) ^ b * (- (a + 1) gchoose b)" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2631 |
by (subst gbinomial_minus) (simp add: power_mult_distrib [symmetric]) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2632 |
|
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2633 |
lemma gbinomial_asymptotic: |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2634 |
fixes z :: "'a :: Gamma" |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
2635 |
shows "(\<lambda>n. (z gchoose n) / ((-1)^n / exp ((z+1) * of_real (ln (real n))))) \<longlonglongrightarrow> |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2636 |
inverse (Gamma (- z))" |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
2637 |
unfolding rGamma_inverse_Gamma [symmetric] using Gamma_gbinomial[of "-z-1"] |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2638 |
by (subst (asm) gbinomial_minus') |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2639 |
(simp add: add_ac mult_ac divide_inverse power_inverse [symmetric]) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2640 |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
2641 |
lemma fact_binomial_limit: |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2642 |
"(\<lambda>n. of_nat ((k + n) choose n) / of_nat (n ^ k) :: 'a :: Gamma) \<longlonglongrightarrow> 1 / fact k" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2643 |
proof (rule Lim_transform_eventually) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2644 |
have "(\<lambda>n. of_nat ((k + n) choose n) / of_real (exp (of_nat k * ln (real_of_nat n)))) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2645 |
\<longlonglongrightarrow> 1 / Gamma (of_nat (Suc k) :: 'a)" (is "?f \<longlonglongrightarrow> _") |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2646 |
using Gamma_gbinomial[of "of_nat k :: 'a"] |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2647 |
by (simp add: binomial_gbinomial add_ac Gamma_def divide_simps exp_of_real [symmetric] exp_minus) |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2648 |
also have "Gamma (of_nat (Suc k)) = fact k" by (simp add: Gamma_fact) |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2649 |
finally show "?f \<longlonglongrightarrow> 1 / fact k" . |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2650 |
|
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2651 |
show "eventually (\<lambda>n. ?f n = of_nat ((k + n) choose n) / of_nat (n ^ k)) sequentially" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2652 |
using eventually_gt_at_top[of "0::nat"] |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2653 |
proof eventually_elim |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2654 |
fix n :: nat assume n: "n > 0" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2655 |
from n have "exp (real_of_nat k * ln (real_of_nat n)) = real_of_nat (n^k)" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2656 |
by (simp add: exp_of_nat_mult) |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2657 |
thus "?f n = of_nat ((k + n) choose n) / of_nat (n ^ k)" by simp |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2658 |
qed |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2659 |
qed |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2660 |
|
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2661 |
lemma binomial_asymptotic': |
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2662 |
"(\<lambda>n. of_nat ((k + n) choose n) / (of_nat (n ^ k) / fact k) :: 'a :: Gamma) \<longlonglongrightarrow> 1" |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2663 |
using tendsto_mult[OF fact_binomial_limit[of k] tendsto_const[of "fact k :: 'a"]] by simp |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2664 |
|
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2665 |
lemma gbinomial_Beta: |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2666 |
assumes "z + 1 \<notin> \<int>\<^sub>\<le>\<^sub>0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2667 |
shows "((z::'a::Gamma) gchoose n) = inverse ((z + 1) * Beta (z - of_nat n + 1) (of_nat n + 1))" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2668 |
using assms |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2669 |
proof (induction n arbitrary: z) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2670 |
case 0 |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2671 |
hence "z + 2 \<notin> \<int>\<^sub>\<le>\<^sub>0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2672 |
using plus_one_in_nonpos_Ints_imp[of "z+1"] by (auto simp: add.commute) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2673 |
with 0 show ?case |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2674 |
by (auto simp: Beta_def Gamma_eq_zero_iff Gamma_plus1 [symmetric] add.commute) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2675 |
next |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2676 |
case (Suc n z) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2677 |
show ?case |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2678 |
proof (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2679 |
case True |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2680 |
with Suc.prems have "z = 0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2681 |
by (auto elim!: nonpos_Ints_cases simp: algebra_simps one_plus_of_int_in_nonpos_Ints_iff) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2682 |
show ?thesis |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2683 |
proof (cases "n = 0") |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2684 |
case True |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2685 |
with \<open>z = 0\<close> show ?thesis |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2686 |
by (simp add: Beta_def Gamma_eq_zero_iff Gamma_plus1 [symmetric]) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2687 |
next |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2688 |
case False |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2689 |
with \<open>z = 0\<close> show ?thesis |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2690 |
by (simp_all add: Beta_pole1 one_minus_of_nat_in_nonpos_Ints_iff gbinomial_1) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2691 |
qed |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2692 |
next |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2693 |
case False |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2694 |
have "(z gchoose (Suc n)) = ((z - 1 + 1) gchoose (Suc n))" by simp |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2695 |
also have "\<dots> = (z - 1 gchoose n) * ((z - 1) + 1) / of_nat (Suc n)" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2696 |
by (subst gbinomial_factors) (simp add: field_simps) |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
2697 |
also from False have "\<dots> = inverse (of_nat (Suc n) * Beta (z - of_nat n) (of_nat (Suc n)))" |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2698 |
(is "_ = inverse ?x") by (subst Suc.IH) (simp_all add: field_simps Beta_pole1) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2699 |
also have "of_nat (Suc n) \<notin> (\<int>\<^sub>\<le>\<^sub>0 :: 'a set)" by (subst of_nat_in_nonpos_Ints_iff) simp_all |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2700 |
hence "?x = (z + 1) * Beta (z - of_nat (Suc n) + 1) (of_nat (Suc n) + 1)" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2701 |
by (subst Beta_plus1_right [symmetric]) simp_all |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2702 |
finally show ?thesis . |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2703 |
qed |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2704 |
qed |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2705 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
2706 |
theorem gbinomial_Gamma: |
63295
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2707 |
assumes "z + 1 \<notin> \<int>\<^sub>\<le>\<^sub>0" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2708 |
shows "(z gchoose n) = Gamma (z + 1) / (fact n * Gamma (z - of_nat n + 1))" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2709 |
proof - |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2710 |
have "(z gchoose n) = Gamma (z + 2) / (z + 1) / (fact n * Gamma (z - of_nat n + 1))" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2711 |
by (subst gbinomial_Beta[OF assms]) (simp_all add: Beta_def Gamma_fact [symmetric] add_ac) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2712 |
also from assms have "Gamma (z + 2) / (z + 1) = Gamma (z + 1)" |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2713 |
using Gamma_plus1[of "z+1"] by (auto simp add: divide_simps mult_ac add_ac) |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2714 |
finally show ?thesis . |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2715 |
qed |
52792bb9126e
Facts about HK integration, complex powers, Gamma function
eberlm
parents:
63040
diff
changeset
|
2716 |
|
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
2717 |
|
63296 | 2718 |
subsubsection \<open>Integral form\<close> |
2719 |
||
66526 | 2720 |
lemma integrable_on_powr_from_0': |
2721 |
assumes a: "a > (-1::real)" and c: "c \<ge> 0" |
|
2722 |
shows "(\<lambda>x. x powr a) integrable_on {0<..c}" |
|
2723 |
proof - |
|
2724 |
from c have *: "{0<..c} - {0..c} = {}" "{0..c} - {0<..c} = {0}" by auto |
|
2725 |
show ?thesis |
|
2726 |
by (rule integrable_spike_set [OF integrable_on_powr_from_0[OF a c]]) (simp_all add: *) |
|
2727 |
qed |
|
2728 |
||
2729 |
lemma absolutely_integrable_Gamma_integral: |
|
2730 |
assumes "Re z > 0" "a > 0" |
|
2731 |
shows "(\<lambda>t. complex_of_real t powr (z - 1) / of_real (exp (a * t))) |
|
2732 |
absolutely_integrable_on {0<..}" (is "?f absolutely_integrable_on _") |
|
2733 |
proof - |
|
2734 |
have "((\<lambda>x. (Re z - 1) * (ln x / x)) \<longlongrightarrow> (Re z - 1) * 0) at_top" |
|
2735 |
by (intro tendsto_intros ln_x_over_x_tendsto_0) |
|
2736 |
hence "((\<lambda>x. ((Re z - 1) * ln x) / x) \<longlongrightarrow> 0) at_top" by simp |
|
2737 |
from order_tendstoD(2)[OF this, of "a/2"] and \<open>a > 0\<close> |
|
2738 |
have "eventually (\<lambda>x. (Re z - 1) * ln x / x < a/2) at_top" by simp |
|
2739 |
from eventually_conj[OF this eventually_gt_at_top[of 0]] |
|
2740 |
obtain x0 where "\<forall>x\<ge>x0. (Re z - 1) * ln x / x < a/2 \<and> x > 0" |
|
2741 |
by (auto simp: eventually_at_top_linorder) |
|
2742 |
hence "x0 > 0" by simp |
|
2743 |
have "x powr (Re z - 1) / exp (a * x) < exp (-(a/2) * x)" if "x \<ge> x0" for x |
|
2744 |
proof - |
|
2745 |
from that and \<open>\<forall>x\<ge>x0. _\<close> have x: "(Re z - 1) * ln x / x < a / 2" "x > 0" by auto |
|
2746 |
have "x powr (Re z - 1) = exp ((Re z - 1) * ln x)" |
|
2747 |
using \<open>x > 0\<close> by (simp add: powr_def) |
|
2748 |
also from x have "(Re z - 1) * ln x < (a * x) / 2" by (simp add: field_simps) |
|
2749 |
finally show ?thesis by (simp add: field_simps exp_add [symmetric]) |
|
2750 |
qed |
|
2751 |
note x0 = \<open>x0 > 0\<close> this |
|
2752 |
||
2753 |
have "?f absolutely_integrable_on ({0<..x0} \<union> {x0..})" |
|
2754 |
proof (rule set_integrable_Un) |
|
2755 |
show "?f absolutely_integrable_on {0<..x0}" |
|
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2756 |
unfolding set_integrable_def |
66526 | 2757 |
proof (rule Bochner_Integration.integrable_bound [OF _ _ AE_I2]) |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2758 |
show "integrable lebesgue (\<lambda>x. indicat_real {0<..x0} x *\<^sub>R x powr (Re z - 1))" |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2759 |
using x0(1) assms |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2760 |
by (intro nonnegative_absolutely_integrable_1 [unfolded set_integrable_def] integrable_on_powr_from_0') auto |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2761 |
show "(\<lambda>x. indicat_real {0<..x0} x *\<^sub>R (x powr (z - 1) / exp (a * x))) \<in> borel_measurable lebesgue" |
66526 | 2762 |
by (intro measurable_completion) |
2763 |
(auto intro!: borel_measurable_continuous_on_indicator continuous_intros) |
|
2764 |
fix x :: real |
|
2765 |
have "x powr (Re z - 1) / exp (a * x) \<le> x powr (Re z - 1) / 1" if "x \<ge> 0" |
|
2766 |
using that assms by (intro divide_left_mono) auto |
|
2767 |
thus "norm (indicator {0<..x0} x *\<^sub>R ?f x) \<le> |
|
2768 |
norm (indicator {0<..x0} x *\<^sub>R x powr (Re z - 1))" |
|
2769 |
by (simp_all add: norm_divide norm_powr_real_powr indicator_def) |
|
2770 |
qed |
|
2771 |
next |
|
2772 |
show "?f absolutely_integrable_on {x0..}" |
|
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2773 |
unfolding set_integrable_def |
66526 | 2774 |
proof (rule Bochner_Integration.integrable_bound [OF _ _ AE_I2]) |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2775 |
show "integrable lebesgue (\<lambda>x. indicat_real {x0..} x *\<^sub>R exp (- (a / 2) * x))" using assms |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2776 |
by (intro nonnegative_absolutely_integrable_1 [unfolded set_integrable_def] integrable_on_exp_minus_to_infinity) auto |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
2777 |
show "(\<lambda>x. indicat_real {x0..} x *\<^sub>R (x powr (z - 1) / exp (a * x))) \<in> borel_measurable lebesgue" using x0(1) |
66526 | 2778 |
by (intro measurable_completion) |
2779 |
(auto intro!: borel_measurable_continuous_on_indicator continuous_intros) |
|
2780 |
fix x :: real |
|
2781 |
show "norm (indicator {x0..} x *\<^sub>R ?f x) \<le> |
|
2782 |
norm (indicator {x0..} x *\<^sub>R exp (-(a/2) * x))" using x0 |
|
2783 |
by (auto simp: norm_divide norm_powr_real_powr indicator_def less_imp_le) |
|
2784 |
qed |
|
2785 |
qed auto |
|
2786 |
also have "{0<..x0} \<union> {x0..} = {0<..}" using x0(1) by auto |
|
2787 |
finally show ?thesis . |
|
2788 |
qed |
|
2789 |
||
63296 | 2790 |
lemma integrable_Gamma_integral_bound: |
2791 |
fixes a c :: real |
|
2792 |
assumes a: "a > -1" and c: "c \<ge> 0" |
|
2793 |
defines "f \<equiv> \<lambda>x. if x \<in> {0..c} then x powr a else exp (-x/2)" |
|
2794 |
shows "f integrable_on {0..}" |
|
2795 |
proof - |
|
2796 |
have "f integrable_on {0..c}" |
|
2797 |
by (rule integrable_spike_finite[of "{}", OF _ _ integrable_on_powr_from_0[of a c]]) |
|
2798 |
(insert a c, simp_all add: f_def) |
|
2799 |
moreover have A: "(\<lambda>x. exp (-x/2)) integrable_on {c..}" |
|
2800 |
using integrable_on_exp_minus_to_infinity[of "1/2"] by simp |
|
2801 |
have "f integrable_on {c..}" |
|
2802 |
by (rule integrable_spike_finite[of "{c}", OF _ _ A]) (simp_all add: f_def) |
|
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
2803 |
ultimately show "f integrable_on {0..}" |
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
2804 |
by (rule integrable_Un') (insert c, auto simp: max_def) |
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
2805 |
qed |
63296 | 2806 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
2807 |
theorem Gamma_integral_complex: |
63296 | 2808 |
assumes z: "Re z > 0" |
2809 |
shows "((\<lambda>t. of_real t powr (z - 1) / of_real (exp t)) has_integral Gamma z) {0..}" |
|
2810 |
proof - |
|
2811 |
have A: "((\<lambda>t. (of_real t) powr (z - 1) * of_real ((1 - t) ^ n)) |
|
2812 |
has_integral (fact n / pochhammer z (n+1))) {0..1}" |
|
2813 |
if "Re z > 0" for n z using that |
|
2814 |
proof (induction n arbitrary: z) |
|
2815 |
case 0 |
|
2816 |
have "((\<lambda>t. complex_of_real t powr (z - 1)) has_integral |
|
2817 |
(of_real 1 powr z / z - of_real 0 powr z / z)) {0..1}" using 0 |
|
2818 |
by (intro fundamental_theorem_of_calculus_interior) |
|
70707
125705f5965f
A little-known material, and some tidying up
paulson <lp15@cam.ac.uk>
parents:
70532
diff
changeset
|
2819 |
(auto intro!: continuous_intros derivative_eq_intros has_vector_derivative_real_field) |
63296 | 2820 |
thus ?case by simp |
2821 |
next |
|
2822 |
case (Suc n) |
|
2823 |
let ?f = "\<lambda>t. complex_of_real t powr z / z" |
|
2824 |
let ?f' = "\<lambda>t. complex_of_real t powr (z - 1)" |
|
2825 |
let ?g = "\<lambda>t. (1 - complex_of_real t) ^ Suc n" |
|
2826 |
let ?g' = "\<lambda>t. - ((1 - complex_of_real t) ^ n) * of_nat (Suc n)" |
|
2827 |
have "((\<lambda>t. ?f' t * ?g t) has_integral |
|
2828 |
(of_nat (Suc n)) * fact n / pochhammer z (n+2)) {0..1}" |
|
2829 |
(is "(_ has_integral ?I) _") |
|
2830 |
proof (rule integration_by_parts_interior[where f' = ?f' and g = ?g]) |
|
2831 |
from Suc.prems show "continuous_on {0..1} ?f" "continuous_on {0..1} ?g" |
|
2832 |
by (auto intro!: continuous_intros) |
|
2833 |
next |
|
2834 |
fix t :: real assume t: "t \<in> {0<..<1}" |
|
2835 |
show "(?f has_vector_derivative ?f' t) (at t)" using t Suc.prems |
|
70707
125705f5965f
A little-known material, and some tidying up
paulson <lp15@cam.ac.uk>
parents:
70532
diff
changeset
|
2836 |
by (auto intro!: derivative_eq_intros has_vector_derivative_real_field) |
63296 | 2837 |
show "(?g has_vector_derivative ?g' t) (at t)" |
70707
125705f5965f
A little-known material, and some tidying up
paulson <lp15@cam.ac.uk>
parents:
70532
diff
changeset
|
2838 |
by (rule has_vector_derivative_real_field derivative_eq_intros refl)+ simp_all |
63296 | 2839 |
next |
2840 |
from Suc.prems have [simp]: "z \<noteq> 0" by auto |
|
2841 |
from Suc.prems have A: "Re (z + of_nat n) > 0" for n by simp |
|
2842 |
have [simp]: "z + of_nat n \<noteq> 0" "z + 1 + of_nat n \<noteq> 0" for n |
|
2843 |
using A[of n] A[of "Suc n"] by (auto simp add: add.assoc simp del: plus_complex.sel) |
|
2844 |
have "((\<lambda>x. of_real x powr z * of_real ((1 - x) ^ n) * (- of_nat (Suc n) / z)) has_integral |
|
2845 |
fact n / pochhammer (z+1) (n+1) * (- of_nat (Suc n) / z)) {0..1}" |
|
2846 |
(is "(?A has_integral ?B) _") |
|
2847 |
using Suc.IH[of "z+1"] Suc.prems by (intro has_integral_mult_left) (simp_all add: add_ac pochhammer_rec) |
|
2848 |
also have "?A = (\<lambda>t. ?f t * ?g' t)" by (intro ext) (simp_all add: field_simps) |
|
2849 |
also have "?B = - (of_nat (Suc n) * fact n / pochhammer z (n+2))" |
|
63417
c184ec919c70
more lemmas to emphasize {0::nat..(<)n} as canonical representation of intervals on nat
haftmann
parents:
63367
diff
changeset
|
2850 |
by (simp add: divide_simps pochhammer_rec |
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
|
2851 |
prod.shift_bounds_cl_Suc_ivl del: of_nat_Suc) |
63296 | 2852 |
finally show "((\<lambda>t. ?f t * ?g' t) has_integral (?f 1 * ?g 1 - ?f 0 * ?g 0 - ?I)) {0..1}" |
2853 |
by simp |
|
2854 |
qed (simp_all add: bounded_bilinear_mult) |
|
2855 |
thus ?case by simp |
|
2856 |
qed |
|
2857 |
||
2858 |
have B: "((\<lambda>t. if t \<in> {0..of_nat n} then |
|
2859 |
of_real t powr (z - 1) * (1 - of_real t / of_nat n) ^ n else 0) |
|
2860 |
has_integral (of_nat n powr z * fact n / pochhammer z (n+1))) {0..}" for n |
|
2861 |
proof (cases "n > 0") |
|
2862 |
case [simp]: True |
|
2863 |
hence [simp]: "n \<noteq> 0" by auto |
|
2864 |
with has_integral_affinity01[OF A[OF z, of n], of "inverse (of_nat n)" 0] |
|
2865 |
have "((\<lambda>x. (of_nat n - of_real x) ^ n * (of_real x / of_nat n) powr (z - 1) / of_nat n ^ n) |
|
2866 |
has_integral fact n * of_nat n / pochhammer z (n+1)) ((\<lambda>x. real n * x)`{0..1})" |
|
2867 |
(is "(?f has_integral ?I) ?ivl") by (simp add: field_simps scaleR_conv_of_real) |
|
2868 |
also from True have "((\<lambda>x. real n*x)`{0..1}) = {0..real n}" |
|
2869 |
by (subst image_mult_atLeastAtMost) simp_all |
|
2870 |
also have "?f = (\<lambda>x. (of_real x / of_nat n) powr (z - 1) * (1 - of_real x / of_nat n) ^ n)" |
|
2871 |
using True by (intro ext) (simp add: field_simps) |
|
2872 |
finally have "((\<lambda>x. (of_real x / of_nat n) powr (z - 1) * (1 - of_real x / of_nat n) ^ n) |
|
2873 |
has_integral ?I) {0..real n}" (is ?P) . |
|
2874 |
also have "?P \<longleftrightarrow> ((\<lambda>x. exp ((z - 1) * of_real (ln (x / of_nat n))) * (1 - of_real x / of_nat n) ^ n) |
|
2875 |
has_integral ?I) {0..real n}" |
|
2876 |
by (intro has_integral_spike_finite_eq[of "{0}"]) (auto simp: powr_def Ln_of_real [symmetric]) |
|
2877 |
also have "\<dots> \<longleftrightarrow> ((\<lambda>x. exp ((z - 1) * of_real (ln x - ln (of_nat n))) * (1 - of_real x / of_nat n) ^ n) |
|
2878 |
has_integral ?I) {0..real n}" |
|
2879 |
by (intro has_integral_spike_finite_eq[of "{0}"]) (simp_all add: ln_div) |
|
2880 |
finally have \<dots> . |
|
2881 |
note B = has_integral_mult_right[OF this, of "exp ((z - 1) * ln (of_nat n))"] |
|
2882 |
have "((\<lambda>x. exp ((z - 1) * of_real (ln x)) * (1 - of_real x / of_nat n) ^ n) |
|
2883 |
has_integral (?I * exp ((z - 1) * ln (of_nat n)))) {0..real n}" (is ?P) |
|
2884 |
by (insert B, subst (asm) mult.assoc [symmetric], subst (asm) exp_add [symmetric]) |
|
66936 | 2885 |
(simp add: algebra_simps) |
63296 | 2886 |
also have "?P \<longleftrightarrow> ((\<lambda>x. of_real x powr (z - 1) * (1 - of_real x / of_nat n) ^ n) |
2887 |
has_integral (?I * exp ((z - 1) * ln (of_nat n)))) {0..real n}" |
|
2888 |
by (intro has_integral_spike_finite_eq[of "{0}"]) (simp_all add: powr_def Ln_of_real) |
|
2889 |
also have "fact n * of_nat n / pochhammer z (n+1) * exp ((z - 1) * Ln (of_nat n)) = |
|
2890 |
(of_nat n powr z * fact n / pochhammer z (n+1))" |
|
65587
16a8991ab398
New material (and some tidying) purely in the Analysis directory
paulson <lp15@cam.ac.uk>
parents:
65578
diff
changeset
|
2891 |
by (auto simp add: powr_def algebra_simps exp_diff exp_of_real) |
63296 | 2892 |
finally show ?thesis by (subst has_integral_restrict) simp_all |
2893 |
next |
|
2894 |
case False |
|
2895 |
thus ?thesis by (subst has_integral_restrict) (simp_all add: has_integral_refl) |
|
2896 |
qed |
|
2897 |
||
2898 |
have "eventually (\<lambda>n. Gamma_series z n = |
|
2899 |
of_nat n powr z * fact n / pochhammer z (n+1)) sequentially" |
|
2900 |
using eventually_gt_at_top[of "0::nat"] |
|
2901 |
by eventually_elim (simp add: powr_def algebra_simps Ln_of_nat Gamma_series_def) |
|
2902 |
from this and Gamma_series_LIMSEQ[of z] |
|
2903 |
have C: "(\<lambda>k. of_nat k powr z * fact k / pochhammer z (k+1)) \<longlonglongrightarrow> Gamma z" |
|
70532
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
paulson <lp15@cam.ac.uk>
parents:
70196
diff
changeset
|
2904 |
by (blast intro: Lim_transform_eventually) |
63296 | 2905 |
{ |
2906 |
fix x :: real assume x: "x \<ge> 0" |
|
2907 |
have lim_exp: "(\<lambda>k. (1 - x / real k) ^ k) \<longlonglongrightarrow> exp (-x)" |
|
2908 |
using tendsto_exp_limit_sequentially[of "-x"] by simp |
|
2909 |
have "(\<lambda>k. of_real x powr (z - 1) * of_real ((1 - x / of_nat k) ^ k)) |
|
2910 |
\<longlonglongrightarrow> of_real x powr (z - 1) * of_real (exp (-x))" (is ?P) |
|
2911 |
by (intro tendsto_intros lim_exp) |
|
2912 |
also from eventually_gt_at_top[of "nat \<lceil>x\<rceil>"] |
|
2913 |
have "eventually (\<lambda>k. of_nat k > x) sequentially" by eventually_elim linarith |
|
2914 |
hence "?P \<longleftrightarrow> (\<lambda>k. if x \<le> of_nat k then |
|
2915 |
of_real x powr (z - 1) * of_real ((1 - x / of_nat k) ^ k) else 0) |
|
2916 |
\<longlonglongrightarrow> of_real x powr (z - 1) * of_real (exp (-x))" |
|
2917 |
by (intro tendsto_cong) (auto elim!: eventually_mono) |
|
2918 |
finally have \<dots> . |
|
2919 |
} |
|
2920 |
hence D: "\<forall>x\<in>{0..}. (\<lambda>k. if x \<in> {0..real k} then |
|
2921 |
of_real x powr (z - 1) * (1 - of_real x / of_nat k) ^ k else 0) |
|
2922 |
\<longlonglongrightarrow> of_real x powr (z - 1) / of_real (exp x)" |
|
2923 |
by (simp add: exp_minus field_simps cong: if_cong) |
|
2924 |
||
2925 |
have "((\<lambda>x. (Re z - 1) * (ln x / x)) \<longlongrightarrow> (Re z - 1) * 0) at_top" |
|
2926 |
by (intro tendsto_intros ln_x_over_x_tendsto_0) |
|
2927 |
hence "((\<lambda>x. ((Re z - 1) * ln x) / x) \<longlongrightarrow> 0) at_top" by simp |
|
2928 |
from order_tendstoD(2)[OF this, of "1/2"] |
|
2929 |
have "eventually (\<lambda>x. (Re z - 1) * ln x / x < 1/2) at_top" by simp |
|
2930 |
from eventually_conj[OF this eventually_gt_at_top[of 0]] |
|
2931 |
obtain x0 where "\<forall>x\<ge>x0. (Re z - 1) * ln x / x < 1/2 \<and> x > 0" |
|
2932 |
by (auto simp: eventually_at_top_linorder) |
|
2933 |
hence x0: "x0 > 0" "\<And>x. x \<ge> x0 \<Longrightarrow> (Re z - 1) * ln x < x / 2" by auto |
|
2934 |
||
2935 |
define h where "h = (\<lambda>x. if x \<in> {0..x0} then x powr (Re z - 1) else exp (-x/2))" |
|
2936 |
have le_h: "x powr (Re z - 1) * exp (-x) \<le> h x" if x: "x \<ge> 0" for x |
|
2937 |
proof (cases "x > x0") |
|
2938 |
case True |
|
2939 |
from True x0(1) have "x powr (Re z - 1) * exp (-x) = exp ((Re z - 1) * ln x - x)" |
|
2940 |
by (simp add: powr_def exp_diff exp_minus field_simps exp_add) |
|
2941 |
also from x0(2)[of x] True have "\<dots> < exp (-x/2)" |
|
2942 |
by (simp add: field_simps) |
|
2943 |
finally show ?thesis using True by (auto simp add: h_def) |
|
2944 |
next |
|
2945 |
case False |
|
2946 |
from x have "x powr (Re z - 1) * exp (- x) \<le> x powr (Re z - 1) * 1" |
|
2947 |
by (intro mult_left_mono) simp_all |
|
2948 |
with False show ?thesis by (auto simp add: h_def) |
|
2949 |
qed |
|
2950 |
||
2951 |
have E: "\<forall>x\<in>{0..}. cmod (if x \<in> {0..real k} then of_real x powr (z - 1) * |
|
2952 |
(1 - complex_of_real x / of_nat k) ^ k else 0) \<le> h x" |
|
2953 |
(is "\<forall>x\<in>_. ?f x \<le> _") for k |
|
2954 |
proof safe |
|
2955 |
fix x :: real assume x: "x \<ge> 0" |
|
2956 |
{ |
|
2957 |
fix x :: real and n :: nat assume x: "x \<le> of_nat n" |
|
2958 |
have "(1 - complex_of_real x / of_nat n) = complex_of_real ((1 - x / of_nat n))" by simp |
|
2959 |
also have "norm \<dots> = \<bar>(1 - x / real n)\<bar>" by (subst norm_of_real) (rule refl) |
|
2960 |
also from x have "\<dots> = (1 - x / real n)" by (intro abs_of_nonneg) (simp_all add: divide_simps) |
|
2961 |
finally have "cmod (1 - complex_of_real x / of_nat n) = 1 - x / real n" . |
|
2962 |
} note D = this |
|
2963 |
from D[of x k] x |
|
2964 |
have "?f x \<le> (if of_nat k \<ge> x \<and> k > 0 then x powr (Re z - 1) * (1 - x / real k) ^ k else 0)" |
|
2965 |
by (auto simp: norm_mult norm_powr_real_powr norm_power intro!: mult_nonneg_nonneg) |
|
2966 |
also have "\<dots> \<le> x powr (Re z - 1) * exp (-x)" |
|
2967 |
by (auto intro!: mult_left_mono exp_ge_one_minus_x_over_n_power_n) |
|
2968 |
also from x have "\<dots> \<le> h x" by (rule le_h) |
|
2969 |
finally show "?f x \<le> h x" . |
|
2970 |
qed |
|
63594
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents:
63539
diff
changeset
|
2971 |
|
63296 | 2972 |
have F: "h integrable_on {0..}" unfolding h_def |
2973 |
by (rule integrable_Gamma_integral_bound) (insert assms x0(1), simp_all) |
|
2974 |
show ?thesis |
|
2975 |
by (rule has_integral_dominated_convergence[OF B F E D C]) |
|
2976 |
qed |
|
2977 |
||
2978 |
lemma Gamma_integral_real: |
|
2979 |
assumes x: "x > (0 :: real)" |
|
2980 |
shows "((\<lambda>t. t powr (x - 1) / exp t) has_integral Gamma x) {0..}" |
|
2981 |
proof - |
|
2982 |
have A: "((\<lambda>t. complex_of_real t powr (complex_of_real x - 1) / |
|
2983 |
complex_of_real (exp t)) has_integral complex_of_real (Gamma x)) {0..}" |
|
2984 |
using Gamma_integral_complex[of x] assms by (simp_all add: Gamma_complex_of_real powr_of_real) |
|
2985 |
have "((\<lambda>t. complex_of_real (t powr (x - 1) / exp t)) has_integral of_real (Gamma x)) {0..}" |
|
2986 |
by (rule has_integral_eq[OF _ A]) (simp_all add: powr_of_real [symmetric]) |
|
2987 |
from has_integral_linear[OF this bounded_linear_Re] show ?thesis by (simp add: o_def) |
|
2988 |
qed |
|
2989 |
||
66526 | 2990 |
lemma absolutely_integrable_Gamma_integral': |
2991 |
assumes "Re z > 0" |
|
2992 |
shows "(\<lambda>t. complex_of_real t powr (z - 1) / of_real (exp t)) absolutely_integrable_on {0<..}" |
|
2993 |
using absolutely_integrable_Gamma_integral [OF assms zero_less_one] by simp |
|
2994 |
||
2995 |
lemma Gamma_integral_complex': |
|
2996 |
assumes z: "Re z > 0" |
|
2997 |
shows "((\<lambda>t. of_real t powr (z - 1) / of_real (exp t)) has_integral Gamma z) {0<..}" |
|
2998 |
proof - |
|
2999 |
have "((\<lambda>t. of_real t powr (z - 1) / of_real (exp t)) has_integral Gamma z) {0..}" |
|
3000 |
by (rule Gamma_integral_complex) fact+ |
|
3001 |
hence "((\<lambda>t. if t \<in> {0<..} then of_real t powr (z - 1) / of_real (exp t) else 0) |
|
3002 |
has_integral Gamma z) {0..}" |
|
3003 |
by (rule has_integral_spike [of "{0}", rotated 2]) auto |
|
3004 |
also have "?this = ?thesis" |
|
3005 |
by (subst has_integral_restrict) auto |
|
3006 |
finally show ?thesis . |
|
3007 |
qed |
|
3008 |
||
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3009 |
lemma Gamma_conv_nn_integral_real: |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3010 |
assumes "s > (0::real)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3011 |
shows "Gamma s = nn_integral lborel (\<lambda>t. ennreal (indicator {0..} t * t powr (s - 1) / exp t))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3012 |
using nn_integral_has_integral_lebesgue[OF _ Gamma_integral_real[OF assms]] by simp |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3013 |
|
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3014 |
lemma integrable_Beta: |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3015 |
assumes "a > 0" "b > (0::real)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3016 |
shows "set_integrable lborel {0..1} (\<lambda>t. t powr (a - 1) * (1 - t) powr (b - 1))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3017 |
proof - |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3018 |
define C where "C = max 1 ((1/2) powr (b - 1))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3019 |
define D where "D = max 1 ((1/2) powr (a - 1))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3020 |
have C: "(1 - x) powr (b - 1) \<le> C" if "x \<in> {0..1/2}" for x |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3021 |
proof (cases "b < 1") |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3022 |
case False |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3023 |
with that have "(1 - x) powr (b - 1) \<le> (1 powr (b - 1))" by (intro powr_mono2) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3024 |
thus ?thesis by (auto simp: C_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3025 |
qed (insert that, auto simp: max.coboundedI1 max.coboundedI2 powr_mono2' powr_mono2 C_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3026 |
have D: "x powr (a - 1) \<le> D" if "x \<in> {1/2..1}" for x |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3027 |
proof (cases "a < 1") |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3028 |
case False |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3029 |
with that have "x powr (a - 1) \<le> (1 powr (a - 1))" by (intro powr_mono2) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3030 |
thus ?thesis by (auto simp: D_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3031 |
next |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3032 |
case True |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3033 |
qed (insert that, auto simp: max.coboundedI1 max.coboundedI2 powr_mono2' powr_mono2 D_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3034 |
have [simp]: "C \<ge> 0" "D \<ge> 0" by (simp_all add: C_def D_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3035 |
|
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3036 |
have I1: "set_integrable lborel {0..1/2} (\<lambda>t. t powr (a - 1) * (1 - t) powr (b - 1))" |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3037 |
unfolding set_integrable_def |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3038 |
proof (rule Bochner_Integration.integrable_bound[OF _ _ AE_I2]) |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3039 |
have "(\<lambda>t. t powr (a - 1)) integrable_on {0..1/2}" |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3040 |
by (rule integrable_on_powr_from_0) (use assms in auto) |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3041 |
hence "(\<lambda>t. t powr (a - 1)) absolutely_integrable_on {0..1/2}" |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3042 |
by (subst absolutely_integrable_on_iff_nonneg) auto |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3043 |
from integrable_mult_right[OF this [unfolded set_integrable_def], of C] |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3044 |
show "integrable lborel (\<lambda>x. indicat_real {0..1/2} x *\<^sub>R (C * x powr (a - 1)))" |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3045 |
by (subst (asm) integrable_completion) (auto simp: mult_ac) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3046 |
next |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3047 |
fix x :: real |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3048 |
have "x powr (a - 1) * (1 - x) powr (b - 1) \<le> x powr (a - 1) * C" if "x \<in> {0..1/2}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3049 |
using that by (intro mult_left_mono powr_mono2 C) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3050 |
thus "norm (indicator {0..1/2} x *\<^sub>R (x powr (a - 1) * (1 - x) powr (b - 1))) \<le> |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3051 |
norm (indicator {0..1/2} x *\<^sub>R (C * x powr (a - 1)))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3052 |
by (auto simp: indicator_def abs_mult mult_ac) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3053 |
qed (auto intro!: AE_I2 simp: indicator_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3054 |
|
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3055 |
have I2: "set_integrable lborel {1/2..1} (\<lambda>t. t powr (a - 1) * (1 - t) powr (b - 1))" |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3056 |
unfolding set_integrable_def |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3057 |
proof (rule Bochner_Integration.integrable_bound[OF _ _ AE_I2]) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3058 |
have "(\<lambda>t. t powr (b - 1)) integrable_on {0..1/2}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3059 |
by (rule integrable_on_powr_from_0) (use assms in auto) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3060 |
hence "(\<lambda>t. t powr (b - 1)) integrable_on (cbox 0 (1/2))" by simp |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3061 |
from integrable_affinity[OF this, of "-1" 1] |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3062 |
have "(\<lambda>t. (1 - t) powr (b - 1)) integrable_on {1/2..1}" by simp |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3063 |
hence "(\<lambda>t. (1 - t) powr (b - 1)) absolutely_integrable_on {1/2..1}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3064 |
by (subst absolutely_integrable_on_iff_nonneg) auto |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3065 |
from integrable_mult_right[OF this [unfolded set_integrable_def], of D] |
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3066 |
show "integrable lborel (\<lambda>x. indicat_real {1/2..1} x *\<^sub>R (D * (1 - x) powr (b - 1)))" |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3067 |
by (subst (asm) integrable_completion) (auto simp: mult_ac) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3068 |
next |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3069 |
fix x :: real |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3070 |
have "x powr (a - 1) * (1 - x) powr (b - 1) \<le> D * (1 - x) powr (b - 1)" if "x \<in> {1/2..1}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3071 |
using that by (intro mult_right_mono powr_mono2 D) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3072 |
thus "norm (indicator {1/2..1} x *\<^sub>R (x powr (a - 1) * (1 - x) powr (b - 1))) \<le> |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3073 |
norm (indicator {1/2..1} x *\<^sub>R (D * (1 - x) powr (b - 1)))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3074 |
by (auto simp: indicator_def abs_mult mult_ac) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3075 |
qed (auto intro!: AE_I2 simp: indicator_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3076 |
|
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3077 |
have "set_integrable lborel ({0..1/2} \<union> {1/2..1}) (\<lambda>t. t powr (a - 1) * (1 - t) powr (b - 1))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3078 |
by (intro set_integrable_Un I1 I2) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3079 |
also have "{0..1/2} \<union> {1/2..1} = {0..(1::real)}" by auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3080 |
finally show ?thesis . |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3081 |
qed |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3082 |
|
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3083 |
lemma integrable_Beta': |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3084 |
assumes "a > 0" "b > (0::real)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3085 |
shows "(\<lambda>t. t powr (a - 1) * (1 - t) powr (b - 1)) integrable_on {0..1}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3086 |
using integrable_Beta[OF assms] by (rule set_borel_integral_eq_integral) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3087 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
3088 |
theorem has_integral_Beta_real: |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3089 |
assumes a: "a > 0" and b: "b > (0 :: real)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3090 |
shows "((\<lambda>t. t powr (a - 1) * (1 - t) powr (b - 1)) has_integral Beta a b) {0..1}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3091 |
proof - |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3092 |
define B where "B = integral {0..1} (\<lambda>x. x powr (a - 1) * (1 - x) powr (b - 1))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3093 |
have [simp]: "B \<ge> 0" unfolding B_def using a b |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3094 |
by (intro integral_nonneg integrable_Beta') auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3095 |
from a b have "ennreal (Gamma a * Gamma b) = |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3096 |
(\<integral>\<^sup>+ t. ennreal (indicator {0..} t * t powr (a - 1) / exp t) \<partial>lborel) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3097 |
(\<integral>\<^sup>+ t. ennreal (indicator {0..} t * t powr (b - 1) / exp t) \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3098 |
by (subst ennreal_mult') (simp_all add: Gamma_conv_nn_integral_real) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3099 |
also have "\<dots> = (\<integral>\<^sup>+t. \<integral>\<^sup>+u. ennreal (indicator {0..} t * t powr (a - 1) / exp t) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3100 |
ennreal (indicator {0..} u * u powr (b - 1) / exp u) \<partial>lborel \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3101 |
by (simp add: nn_integral_cmult nn_integral_multc) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3102 |
also have "\<dots> = (\<integral>\<^sup>+t. \<integral>\<^sup>+u. ennreal (indicator ({0..}\<times>{0..}) (t,u) * t powr (a - 1) * u powr (b - 1) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3103 |
/ exp (t + u)) \<partial>lborel \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3104 |
by (intro nn_integral_cong) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3105 |
(auto simp: indicator_def divide_ennreal ennreal_mult' [symmetric] exp_add) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3106 |
also have "\<dots> = (\<integral>\<^sup>+t. \<integral>\<^sup>+u. ennreal (indicator ({0..}\<times>{t..}) (t,u) * t powr (a - 1) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3107 |
(u - t) powr (b - 1) / exp u) \<partial>lborel \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3108 |
proof (rule nn_integral_cong, goal_cases) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3109 |
case (1 t) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3110 |
have "(\<integral>\<^sup>+u. ennreal (indicator ({0..}\<times>{0..}) (t,u) * t powr (a - 1) * |
67399 | 3111 |
u powr (b - 1) / exp (t + u)) \<partial>distr lborel borel ((+) (-t))) = |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3112 |
(\<integral>\<^sup>+u. ennreal (indicator ({0..}\<times>{t..}) (t,u) * t powr (a - 1) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3113 |
(u - t) powr (b - 1) / exp u) \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3114 |
by (subst nn_integral_distr) (auto intro!: nn_integral_cong simp: indicator_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3115 |
thus ?case by (subst (asm) lborel_distr_plus) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3116 |
qed |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3117 |
also have "\<dots> = (\<integral>\<^sup>+u. \<integral>\<^sup>+t. ennreal (indicator ({0..}\<times>{t..}) (t,u) * t powr (a - 1) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3118 |
(u - t) powr (b - 1) / exp u) \<partial>lborel \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3119 |
by (subst lborel_pair.Fubini') |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3120 |
(auto simp: case_prod_unfold indicator_def cong: measurable_cong_sets) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3121 |
also have "\<dots> = (\<integral>\<^sup>+u. \<integral>\<^sup>+t. ennreal (indicator {0..u} t * t powr (a - 1) * (u - t) powr (b - 1)) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3122 |
ennreal (indicator {0..} u / exp u) \<partial>lborel \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3123 |
by (intro nn_integral_cong) (auto simp: indicator_def ennreal_mult' [symmetric]) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3124 |
also have "\<dots> = (\<integral>\<^sup>+u. (\<integral>\<^sup>+t. ennreal (indicator {0..u} t * t powr (a - 1) * (u - t) powr (b - 1)) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3125 |
\<partial>lborel) * ennreal (indicator {0..} u / exp u) \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3126 |
by (subst nn_integral_multc [symmetric]) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3127 |
also have "\<dots> = (\<integral>\<^sup>+u. (\<integral>\<^sup>+t. ennreal (indicator {0..u} t * t powr (a - 1) * (u - t) powr (b - 1)) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3128 |
\<partial>lborel) * ennreal (indicator {0<..} u / exp u) \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3129 |
by (intro nn_integral_cong_AE eventually_mono[OF AE_lborel_singleton[of 0]]) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3130 |
(auto simp: indicator_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3131 |
also have "\<dots> = (\<integral>\<^sup>+u. ennreal B * ennreal (indicator {0..} u / exp u * u powr (a + b - 1)) \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3132 |
proof (intro nn_integral_cong, goal_cases) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3133 |
case (1 u) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3134 |
show ?case |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3135 |
proof (cases "u > 0") |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3136 |
case True |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3137 |
have "(\<integral>\<^sup>+t. ennreal (indicator {0..u} t * t powr (a - 1) * (u - t) powr (b - 1)) \<partial>lborel) = |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3138 |
(\<integral>\<^sup>+t. ennreal (indicator {0..1} t * (u * t) powr (a - 1) * (u - u * t) powr (b - 1)) |
69064
5840724b1d71
Prefix form of infix with * on either side no longer needs special treatment
nipkow
parents:
68721
diff
changeset
|
3139 |
\<partial>distr lborel borel ((*) (1 / u)))" (is "_ = nn_integral _ ?f") |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3140 |
using True |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3141 |
by (subst nn_integral_distr) (auto simp: indicator_def field_simps intro!: nn_integral_cong) |
69064
5840724b1d71
Prefix form of infix with * on either side no longer needs special treatment
nipkow
parents:
68721
diff
changeset
|
3142 |
also have "distr lborel borel ((*) (1 / u)) = density lborel (\<lambda>_. u)" |
67278
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3143 |
using \<open>u > 0\<close> by (subst lborel_distr_mult) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3144 |
also have "nn_integral \<dots> ?f = (\<integral>\<^sup>+x. ennreal (indicator {0..1} x * (u * (u * x) powr (a - 1) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3145 |
(u * (1 - x)) powr (b - 1))) \<partial>lborel)" using \<open>u > 0\<close> |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3146 |
by (subst nn_integral_density) (auto simp: ennreal_mult' [symmetric] algebra_simps) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3147 |
also have "\<dots> = (\<integral>\<^sup>+x. ennreal (u powr (a + b - 1)) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3148 |
ennreal (indicator {0..1} x * x powr (a - 1) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3149 |
(1 - x) powr (b - 1)) \<partial>lborel)" using \<open>u > 0\<close> a b |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3150 |
by (intro nn_integral_cong) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3151 |
(auto simp: indicator_def powr_mult powr_add powr_diff mult_ac ennreal_mult' [symmetric]) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3152 |
also have "\<dots> = ennreal (u powr (a + b - 1)) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3153 |
(\<integral>\<^sup>+x. ennreal (indicator {0..1} x * x powr (a - 1) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3154 |
(1 - x) powr (b - 1)) \<partial>lborel)" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3155 |
by (subst nn_integral_cmult) auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3156 |
also have "((\<lambda>x. x powr (a - 1) * (1 - x) powr (b - 1)) has_integral |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3157 |
integral {0..1} (\<lambda>x. x powr (a - 1) * (1 - x) powr (b - 1))) {0..1}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3158 |
using a b by (intro integrable_integral integrable_Beta') |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3159 |
from nn_integral_has_integral_lebesgue[OF _ this] a b |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3160 |
have "(\<integral>\<^sup>+x. ennreal (indicator {0..1} x * x powr (a - 1) * |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3161 |
(1 - x) powr (b - 1)) \<partial>lborel) = B" by (simp add: mult_ac B_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3162 |
finally show ?thesis using \<open>u > 0\<close> by (simp add: ennreal_mult' [symmetric] mult_ac) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3163 |
qed auto |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3164 |
qed |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3165 |
also have "\<dots> = ennreal B * ennreal (Gamma (a + b))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3166 |
using a b by (subst nn_integral_cmult) (auto simp: Gamma_conv_nn_integral_real) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3167 |
also have "\<dots> = ennreal (B * Gamma (a + b))" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3168 |
by (subst (1 2) mult.commute, intro ennreal_mult' [symmetric]) (use a b in auto) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3169 |
finally have "B = Beta a b" using a b Gamma_real_pos[of "a + b"] |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3170 |
by (subst (asm) ennreal_inj) (auto simp: field_simps Beta_def Gamma_eq_zero_iff) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3171 |
moreover have "(\<lambda>t. t powr (a - 1) * (1 - t) powr (b - 1)) integrable_on {0..1}" |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3172 |
by (intro integrable_Beta' a b) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3173 |
ultimately show ?thesis by (simp add: has_integral_iff B_def) |
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents:
66936
diff
changeset
|
3174 |
qed |
63296 | 3175 |
|
3176 |
||
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
3177 |
subsection \<open>The Weierstraß product formula for the sine\<close> |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
3178 |
|
68624
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
68403
diff
changeset
|
3179 |
theorem sin_product_formula_complex: |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3180 |
fixes z :: complex |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3181 |
shows "(\<lambda>n. of_real pi * z * (\<Prod>k=1..n. 1 - z^2 / of_nat k^2)) \<longlonglongrightarrow> sin (of_real pi * z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3182 |
proof - |
69529 | 3183 |
let ?f = "rGamma_series_Weierstrass" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3184 |
have "(\<lambda>n. (- of_real pi * inverse z) * (?f z n * ?f (- z) n)) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3185 |
\<longlonglongrightarrow> (- of_real pi * inverse z) * (rGamma z * rGamma (- z))" |
69529 | 3186 |
by (intro tendsto_intros rGamma_Weierstrass_complex) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3187 |
also have "(\<lambda>n. (- of_real pi * inverse z) * (?f z n * ?f (-z) n)) = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3188 |
(\<lambda>n. of_real pi * z * (\<Prod>k=1..n. 1 - z^2 / of_nat k ^ 2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3189 |
proof |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3190 |
fix n :: nat |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3191 |
have "(- of_real pi * inverse z) * (?f z n * ?f (-z) n) = |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3192 |
of_real pi * z * (\<Prod>k=1..n. (of_nat k - z) * (of_nat k + z) / of_nat k ^ 2)" |
69529 | 3193 |
by (simp add: rGamma_series_Weierstrass_def mult_ac exp_minus |
64272 | 3194 |
divide_simps prod.distrib[symmetric] power2_eq_square) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3195 |
also have "(\<Prod>k=1..n. (of_nat k - z) * (of_nat k + z) / of_nat k ^ 2) = |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3196 |
(\<Prod>k=1..n. 1 - z^2 / of_nat k ^ 2)" |
64272 | 3197 |
by (intro prod.cong) (simp_all add: power2_eq_square field_simps) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3198 |
finally show "(- of_real pi * inverse z) * (?f z n * ?f (-z) n) = of_real pi * z * \<dots>" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3199 |
by (simp add: divide_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3200 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3201 |
also have "(- of_real pi * inverse z) * (rGamma z * rGamma (- z)) = sin (of_real pi * z)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3202 |
by (subst rGamma_reflection_complex') (simp add: divide_simps) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3203 |
finally show ?thesis . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3204 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3205 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3206 |
lemma sin_product_formula_real: |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3207 |
"(\<lambda>n. pi * (x::real) * (\<Prod>k=1..n. 1 - x^2 / of_nat k^2)) \<longlonglongrightarrow> sin (pi * x)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3208 |
proof - |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3209 |
from sin_product_formula_complex[of "of_real x"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3210 |
have "(\<lambda>n. of_real pi * of_real x * (\<Prod>k=1..n. 1 - (of_real x)^2 / (of_nat k)^2)) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3211 |
\<longlonglongrightarrow> sin (of_real pi * of_real x :: complex)" (is "?f \<longlonglongrightarrow> ?y") . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3212 |
also have "?f = (\<lambda>n. of_real (pi * x * (\<Prod>k=1..n. 1 - x^2 / (of_nat k^2))))" by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3213 |
also have "?y = of_real (sin (pi * x))" by (simp only: sin_of_real [symmetric] of_real_mult) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3214 |
finally show ?thesis by (subst (asm) tendsto_of_real_iff) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3215 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3216 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3217 |
lemma sin_product_formula_real': |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3218 |
assumes "x \<noteq> (0::real)" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3219 |
shows "(\<lambda>n. (\<Prod>k=1..n. 1 - x^2 / of_nat k^2)) \<longlonglongrightarrow> sin (pi * x) / (pi * x)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3220 |
using tendsto_divide[OF sin_product_formula_real[of x] tendsto_const[of "pi * x"]] assms |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3221 |
by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3222 |
|
63721 | 3223 |
theorem wallis: "(\<lambda>n. \<Prod>k=1..n. (4*real k^2) / (4*real k^2 - 1)) \<longlonglongrightarrow> pi / 2" |
3224 |
proof - |
|
66512
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
paulson <lp15@cam.ac.uk>
parents:
66453
diff
changeset
|
3225 |
from tendsto_inverse[OF tendsto_mult[OF |
63721 | 3226 |
sin_product_formula_real[of "1/2"] tendsto_const[of "2/pi"]]] |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3227 |
have "(\<lambda>n. (\<Prod>k=1..n. inverse (1 - (1/2)\<^sup>2 / (real k)\<^sup>2))) \<longlonglongrightarrow> pi/2" |
64272 | 3228 |
by (simp add: prod_inversef [symmetric]) |
67976
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
paulson <lp15@cam.ac.uk>
parents:
67399
diff
changeset
|
3229 |
also have "(\<lambda>n. (\<Prod>k=1..n. inverse (1 - (1/2)\<^sup>2 / (real k)\<^sup>2))) = |
63721 | 3230 |
(\<lambda>n. (\<Prod>k=1..n. (4*real k^2)/(4*real k^2 - 1)))" |
64272 | 3231 |
by (intro ext prod.cong refl) (simp add: divide_simps) |
63721 | 3232 |
finally show ?thesis . |
3233 |
qed |
|
3234 |
||
62085
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
3235 |
|
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
3236 |
subsection \<open>The Solution to the Basel problem\<close> |
5b7758af429e
Tuned approximations in Multivariate_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
62072
diff
changeset
|
3237 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3238 |
theorem inverse_squares_sums: "(\<lambda>n. 1 / (n + 1)\<^sup>2) sums (pi\<^sup>2 / 6)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3239 |
proof - |
63040 | 3240 |
define P where "P x n = (\<Prod>k=1..n. 1 - x^2 / of_nat k^2)" for x :: real and n |
3241 |
define K where "K = (\<Sum>n. inverse (real_of_nat (Suc n))^2)" |
|
3242 |
define f where [abs_def]: "f x = (\<Sum>n. P x n / of_nat (Suc n)^2)" for x |
|
3243 |
define g where [abs_def]: "g x = (1 - sin (pi * x) / (pi * x))" for x |
|
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3244 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3245 |
have sums: "(\<lambda>n. P x n / of_nat (Suc n)^2) sums (if x = 0 then K else g x / x^2)" for x |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3246 |
proof (cases "x = 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3247 |
assume x: "x = 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3248 |
have "summable (\<lambda>n. inverse ((real_of_nat (Suc n))\<^sup>2))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3249 |
using inverse_power_summable[of 2] by (subst summable_Suc_iff) simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3250 |
thus ?thesis by (simp add: x g_def P_def K_def inverse_eq_divide power_divide summable_sums) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3251 |
next |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3252 |
assume x: "x \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3253 |
have "(\<lambda>n. P x n - P x (Suc n)) sums (P x 0 - sin (pi * x) / (pi * x))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3254 |
unfolding P_def using x by (intro telescope_sums' sin_product_formula_real') |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3255 |
also have "(\<lambda>n. P x n - P x (Suc n)) = (\<lambda>n. (x^2 / of_nat (Suc n)^2) * P x n)" |
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
|
3256 |
unfolding P_def by (simp add: prod.nat_ivl_Suc' algebra_simps) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3257 |
also have "P x 0 = 1" by (simp add: P_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3258 |
finally have "(\<lambda>n. x\<^sup>2 / (of_nat (Suc n))\<^sup>2 * P x n) sums (1 - sin (pi * x) / (pi * x))" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3259 |
from sums_divide[OF this, of "x^2"] x show ?thesis unfolding g_def by simp |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3260 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3261 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3262 |
have "continuous_on (ball 0 1) f" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3263 |
proof (rule uniform_limit_theorem; (intro always_eventually allI)?) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3264 |
show "uniform_limit (ball 0 1) (\<lambda>n x. \<Sum>k<n. P x k / of_nat (Suc k)^2) f sequentially" |
69529 | 3265 |
proof (unfold f_def, rule Weierstrass_m_test) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3266 |
fix n :: nat and x :: real assume x: "x \<in> ball 0 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3267 |
{ |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3268 |
fix k :: nat assume k: "k \<ge> 1" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3269 |
from x have "x^2 < 1" by (auto simp: dist_0_norm abs_square_less_1) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3270 |
also from k have "\<dots> \<le> of_nat k^2" by simp |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3271 |
finally have "(1 - x^2 / of_nat k^2) \<in> {0..1}" using k |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3272 |
by (simp_all add: field_simps del: of_nat_Suc) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3273 |
} |
64272 | 3274 |
hence "(\<Prod>k=1..n. abs (1 - x^2 / of_nat k^2)) \<le> (\<Prod>k=1..n. 1)" by (intro prod_mono) simp |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3275 |
thus "norm (P x n / (of_nat (Suc n)^2)) \<le> 1 / of_nat (Suc n)^2" |
64272 | 3276 |
unfolding P_def by (simp add: field_simps abs_prod del: of_nat_Suc) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3277 |
qed (subst summable_Suc_iff, insert inverse_power_summable[of 2], simp add: inverse_eq_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3278 |
qed (auto simp: P_def intro!: continuous_intros) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3279 |
hence "isCont f 0" by (subst (asm) continuous_on_eq_continuous_at) simp_all |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3280 |
hence "(f \<midarrow> 0 \<rightarrow> f 0)" by (simp add: isCont_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3281 |
also have "f 0 = K" unfolding f_def P_def K_def by (simp add: inverse_eq_divide power_divide) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3282 |
finally have "f \<midarrow> 0 \<rightarrow> K" . |
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3283 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3284 |
moreover have "f \<midarrow> 0 \<rightarrow> pi^2 / 6" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3285 |
proof (rule Lim_transform_eventually) |
63040 | 3286 |
define f' where [abs_def]: "f' x = (\<Sum>n. - sin_coeff (n+3) * pi ^ (n+2) * x^n)" for x |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3287 |
have "eventually (\<lambda>x. x \<noteq> (0::real)) (at 0)" |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3288 |
by (auto simp add: eventually_at intro!: exI[of _ 1]) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3289 |
thus "eventually (\<lambda>x. f' x = f x) (at 0)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3290 |
proof eventually_elim |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3291 |
fix x :: real assume x: "x \<noteq> 0" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3292 |
have "sin_coeff 1 = (1 :: real)" "sin_coeff 2 = (0::real)" by (simp_all add: sin_coeff_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3293 |
with sums_split_initial_segment[OF sums_minus[OF sin_converges], of 3 "pi*x"] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3294 |
have "(\<lambda>n. - (sin_coeff (n+3) * (pi*x)^(n+3))) sums (pi * x - sin (pi*x))" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3295 |
by (simp add: eval_nat_numeral) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3296 |
from sums_divide[OF this, of "x^3 * pi"] x |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3297 |
have "(\<lambda>n. - (sin_coeff (n+3) * pi^(n+2) * x^n)) sums ((1 - sin (pi*x) / (pi*x)) / x^2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3298 |
by (simp add: divide_simps eval_nat_numeral power_mult_distrib mult_ac) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3299 |
with x have "(\<lambda>n. - (sin_coeff (n+3) * pi^(n+2) * x^n)) sums (g x / x^2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3300 |
by (simp add: g_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3301 |
hence "f' x = g x / x^2" by (simp add: sums_iff f'_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3302 |
also have "\<dots> = f x" using sums[of x] x by (simp add: sums_iff g_def f_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3303 |
finally show "f' x = f x" . |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3304 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3305 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3306 |
have "isCont f' 0" unfolding f'_def |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3307 |
proof (intro isCont_powser_converges_everywhere) |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3308 |
fix x :: real show "summable (\<lambda>n. -sin_coeff (n+3) * pi^(n+2) * x^n)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3309 |
proof (cases "x = 0") |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3310 |
assume x: "x \<noteq> 0" |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3311 |
from summable_divide[OF sums_summable[OF sums_split_initial_segment[OF |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3312 |
sin_converges[of "pi*x"]], of 3], of "-pi*x^3"] x |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3313 |
show ?thesis by (simp add: mult_ac power_mult_distrib divide_simps eval_nat_numeral) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3314 |
qed (simp only: summable_0_powser) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3315 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3316 |
hence "f' \<midarrow> 0 \<rightarrow> f' 0" by (simp add: isCont_def) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3317 |
also have "f' 0 = pi * pi / fact 3" unfolding f'_def |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3318 |
by (subst powser_zero) (simp add: sin_coeff_def) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3319 |
finally show "f' \<midarrow> 0 \<rightarrow> pi^2 / 6" by (simp add: eval_nat_numeral) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3320 |
qed |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3321 |
|
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3322 |
ultimately have "K = pi^2 / 6" by (rule LIM_unique) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3323 |
moreover from inverse_power_summable[of 2] |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3324 |
have "summable (\<lambda>n. (inverse (real_of_nat (Suc n)))\<^sup>2)" |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3325 |
by (subst summable_Suc_iff) (simp add: power_inverse) |
62131
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents:
62085
diff
changeset
|
3326 |
ultimately show ?thesis unfolding K_def |
62049
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3327 |
by (auto simp add: sums_iff power_divide inverse_eq_divide) |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3328 |
qed |
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3329 |
|
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents:
diff
changeset
|
3330 |
end |