| author | wenzelm | 
| Mon, 06 Sep 2021 12:23:06 +0200 | |
| changeset 74245 | 282cd3aa6cc6 | 
| parent 73928 | 3b76524f5a85 | 
| child 74362 | 0135a0c77b64 | 
| 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: 
62049diff
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: 
62049diff
changeset | 4 | |
| 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 5 | section \<open>The Gamma Function\<close> | 
| 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 6 | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
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: 
70136diff
changeset | 8 | imports | 
| 
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: 
70136diff
changeset | 9 | Equivalence_Lebesgue_Henstock_Integration | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 10 | Summation_Tests | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 11 | Harmonic_Numbers | 
| 66453 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 wenzelm parents: 
66447diff
changeset | 12 | "HOL-Library.Nonpos_Ints" | 
| 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 wenzelm parents: 
66447diff
changeset | 13 | "HOL-Library.Periodic_Fun" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 14 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 15 | |
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 16 | text \<open> | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 17 | 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: 
62049diff
changeset | 18 | 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: 
62049diff
changeset | 19 | 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: 
62085diff
changeset | 20 | |
| 72318 
bc97bd4c0474
prefer old-fashioned {\ss} to prevent problems with encoding in lualatex;
 wenzelm parents: 
71633diff
changeset | 21 |   Based on the Gamma function, we also prove the Weierstra{\ss} product form of the
 | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 22 | sin function and, based on this, the solution of the Basel problem (the | 
| 69597 | 23 | sum over all \<^term>\<open>1 / (n::nat)^2\<close>. | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 24 | \<close> | 
| 62055 
755fda743c49
Multivariate-Analysis: fixed headers and a LaTex error (c.f. Isabelle b0f941e207cf)
 hoelzl parents: 
62049diff
changeset | 25 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 26 | 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 | 27 | "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 | 28 | by (auto simp: pochhammer_eq_0_iff) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 29 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 30 | 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 | 31 | proof - | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 32 |   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 | 33 | 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 | 34 | 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 | 35 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 36 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 37 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 38 | 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 | 39 | 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 | 40 | |
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 41 | lemma of_int_in_nonpos_Ints_iff: | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 42 | "(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: 
63040diff
changeset | 43 | by (auto simp: nonpos_Ints_def) | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 44 | |
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 45 | lemma one_plus_of_int_in_nonpos_Ints_iff: | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 46 | "(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: 
63040diff
changeset | 47 | proof - | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 48 | have "1 + of_int n = (of_int (n + 1) :: 'a)" by simp | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 49 | 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: 
63040diff
changeset | 50 | also have "\<dots> \<longleftrightarrow> n \<le> -1" by presburger | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 51 | finally show ?thesis . | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 52 | qed | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 53 | |
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 54 | lemma one_minus_of_nat_in_nonpos_Ints_iff: | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 55 | "(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: 
63040diff
changeset | 56 | proof - | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 57 | have "(1 - of_nat n :: 'a) = of_int (1 - int n)" by simp | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 58 | 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: 
63040diff
changeset | 59 | finally show ?thesis . | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 60 | qed | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 61 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 62 | lemma fraction_not_in_ints: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 63 | 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 | 64 |   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 | 65 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 66 | 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 | 67 | then obtain k where "of_int m / of_int n = (of_int k :: 'a)" by (elim Ints_cases) | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 68 | with assms have "of_int m = (of_int (k * n) :: 'a)" by (auto simp add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 69 | 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 | 70 | hence "n dvd m" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 71 | 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 | 72 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 73 | |
| 63317 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 74 | lemma fraction_not_in_nats: | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 75 | assumes "\<not>n dvd m" "n \<noteq> 0" | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 76 |   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: 
63296diff
changeset | 77 | proof | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 78 | assume "of_int m / of_int n \<in> (\<nat> :: 'a set)" | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 79 | also note Nats_subset_Ints | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 80 | finally have "of_int m / of_int n \<in> (\<int> :: 'a set)" . | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 81 | moreover have "of_int m / of_int n \<notin> (\<int> :: 'a set)" | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 82 | using assms by (intro fraction_not_in_ints) | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 83 | ultimately show False by contradiction | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 84 | qed | 
| 
ca187a9f66da
Various additions to polynomials, FPSs, Gamma function
 eberlm parents: 
63296diff
changeset | 85 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 86 | 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 | 87 | 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 | 88 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 89 | lemma double_in_nonpos_Ints_imp: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 90 | 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 | 91 | 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 | 92 | proof- | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 93 | 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 | 94 | 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 | 95 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 96 | |
| 
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 | 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 | 99 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 100 | 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: 
62085diff
changeset | 101 | 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 | 102 | (\<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 | 103 | 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: 
66286diff
changeset | 104 | (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 | 105 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 106 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 107 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 108 | 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 | 109 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 110 | 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: 
62085diff
changeset | 111 | 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 | 112 | (\<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 | 113 | by (subst sums_mono_reindex[of "\<lambda>n. 2*n", symmetric]) | 
| 66447 
a1f5c5c26fa6
Replaced subseq with strict_mono
 eberlm <eberlm@in.tum.de> parents: 
66286diff
changeset | 114 | (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 | 115 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 116 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 117 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 118 | lemma sin_z_over_z_series: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 119 |   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 | 120 | assumes "z \<noteq> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 121 | 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 | 122 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 123 | 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 | 124 | 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 | 125 | 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 | 126 | by (simp add: field_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 127 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 128 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 129 | lemma sin_z_over_z_series': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 130 |   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 | 131 | assumes "z \<noteq> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 132 | 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 | 133 | proof - | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 134 | 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 | 135 | 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 | 136 | 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 | 137 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 138 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 139 | 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 | 140 |   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 | 141 | 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 | 142 | (is "(?f has_field_derivative ?f') _") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 143 | proof (rule has_field_derivative_at_within) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 144 | 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 | 145 | 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 | 146 | proof (rule termdiffs_strong) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 147 | 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 | 148 | 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 | 149 | qed simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 150 | 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 | 151 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 152 | fix z | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 153 | 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: 
62085diff
changeset | 154 | by (cases "z = 0") (insert sin_z_over_z_series'[of z], | 
| 66936 | 155 | 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 | 156 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 157 | also have "(\<Sum>n. diffs (\<lambda>n. of_real (sin_coeff (n + 1))) n * (0::'a) ^ n) = | 
| 66936 | 158 | 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 | 159 | 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 | 160 | 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 | 161 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 162 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 163 | lemma round_Re_minimises_norm: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 164 | "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 | 165 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 166 | let ?n = "round (Re z)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 167 | 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 | 168 | by (simp add: cmod_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 169 | 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 | 170 | 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 | 171 | 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 | 172 | 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 | 173 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 174 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 175 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 176 | lemma Re_pos_in_ball: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 177 | 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 | 178 | shows "Re t > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 179 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 180 | 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 | 181 | 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 | 182 | 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 | 183 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 184 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 185 | 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 | 186 | 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 | 187 | 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 | 188 | 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 | 189 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 190 | 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 | 191 | 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 | 192 | 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 | 193 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 194 | 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 | 195 | 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 | 196 | 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 | 197 | 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 | 198 | 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 | 199 | 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 | 200 | finally have "dist t (of_int n) > 0" by simp | 
| 62072 | 201 | 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 | 202 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 203 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 204 | lemma no_nonpos_Int_in_ball': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 205 |   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 | 206 | 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 | 207 | proof (rule that) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 208 |   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 | 209 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 210 |   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 | 211 |   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 | 212 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 213 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 214 | lemma no_nonpos_Real_in_ball: | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 215 | 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: 
62085diff
changeset | 216 | shows "t \<notin> \<real>\<^sub>\<le>\<^sub>0" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 217 | using z | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 218 | proof (cases "Im z = 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 219 | assume A: "Im z = 0" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 220 | 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: 
62085diff
changeset | 221 | 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 | 222 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 223 | assume A: "Im z \<noteq> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 224 | 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 | 225 | 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 | 226 | 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: 
62085diff
changeset | 227 | 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 | 228 | finally have "abs (Im t) > 0" using A by simp | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 229 | 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 | 230 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 231 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 232 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 233 | 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 | 234 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 235 | text \<open> | 
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 236 | 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: 
68403diff
changeset | 237 | 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 | 238 | 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: 
68403diff
changeset | 239 | (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: 
68403diff
changeset | 240 | 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: 
68403diff
changeset | 241 | |
| 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 242 | 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: 
62085diff
changeset | 243 | 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: 
68403diff
changeset | 244 | (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 | 245 | immediately from the definition. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 246 | \<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 247 | |
| 70136 | 248 | 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 | 249 | "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 | 250 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 251 | 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 | 252 | "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 | 253 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 254 | 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 | 255 | "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 | 256 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 257 | 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 | 258 | 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 | 259 | unfolding Gamma_series_def rGamma_series_def by simp_all | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 260 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 261 | lemma rGamma_series_minus_of_nat: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 262 | "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 | 263 | using eventually_ge_at_top[of k] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 264 | 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 | 265 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 266 | lemma Gamma_series_minus_of_nat: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 267 | "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 | 268 | using eventually_ge_at_top[of k] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 269 | 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 | 270 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 271 | lemma Gamma_series'_minus_of_nat: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 272 | "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 | 273 | 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 | 274 | 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: 
62085diff
changeset | 275 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 276 | 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 | 277 | 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 | 278 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 279 | 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 | 280 | 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 | 281 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 282 | 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 | 283 | 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: 
62085diff
changeset | 284 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 285 | lemma Gamma_series_Gamma_series': | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 286 | 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 | 287 | 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 | 288 | proof (rule Lim_transform_eventually) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 289 | 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 | 290 | 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 | 291 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 292 | 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 | 293 | 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 | 294 | by (cases n, simp) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 295 | (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 | 296 | dest: pochhammer_eq_0_imp_nonpos_Int plus_of_nat_eq_0_imp) | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 297 | also from n have "\<dots> = z / of_nat n + 1" by (simp add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 298 | 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 | 299 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 300 | 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 | 301 | by (rule tendsto_norm_zero_cancel) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 302 | (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 | 303 | 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 | 304 | 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 | 305 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 306 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 307 | text \<open> | 
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 308 | 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: 
62085diff
changeset | 309 | 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 | 310 | real part. | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 311 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 312 | 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: 
62085diff
changeset | 313 | 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 | 314 | continuous. | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 315 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 316 | 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: 
62072diff
changeset | 317 | 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 | 318 | \<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 319 | |
| 70136 | 320 | 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 | 321 | "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 | 322 | |
| 70136 | 323 | 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 | 324 | "ln_Gamma_series' z n = | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 325 | - 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 | 326 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 327 | 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 | 328 | "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 | 329 | |
| 
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 | text \<open> | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 332 | 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: 
68403diff
changeset | 333 | 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 | 334 | \<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 335 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 336 | context | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 337 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 338 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 339 | 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 | 340 | fixes z :: complex and k :: nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 341 | 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 | 342 | 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 | 343 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 344 | 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 | 345 | 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 | 346 | by (simp add: algebra_simps) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 347 | 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 | 348 | 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 | 349 | 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 | 350 | using k by (intro Ln_approx_linear) (simp add: norm_divide) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 351 | 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 | 352 | 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 | 353 | 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 | 354 | 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 | 355 | 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 | 356 | 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 | 357 | 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 | 358 | by (intro Ln_approx_linear) (simp add: norm_divide) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 359 | 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 | 360 | 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 | 361 | 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 | 362 | 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 | 363 | 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 | 364 | 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 | 365 | also note add_divide_distrib [symmetric] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 366 | 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 | 367 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 368 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 369 | lemma ln_Gamma_series_complex_converges: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 370 | 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 | 371 | 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 | 372 | 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 | 373 | 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 | 374 | fix e :: real assume e: "e > 0" | 
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 375 | define e'' where "e'' = (SUP t\<in>ball z d. norm t + norm t^2)" | 
| 63040 | 376 | 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 | 377 | 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 | 378 | 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 | 379 | 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 | 380 | 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 | 381 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 382 | 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 | 383 | 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 | 384 | 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 | 385 | by (rule cSUP_upper[OF _ bdd]) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 386 | 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 | 387 | 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 | 388 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 389 | 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 | 390 | by (rule inverse_power_summable) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 391 | 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 | 392 | |
| 63040 | 393 | 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 | 394 |   {
 | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 395 | 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 | 396 | 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 | 397 | hence "2 * (norm z + d) \<le> of_nat (nat \<lceil>2 * (norm z + d)\<rceil>)" unfolding N_def | 
| 71633 | 398 | by (simp_all) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 399 | 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 | 400 | 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 | 401 | 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 | 402 | 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 | 403 | moreover have "(\<Sum>k=m..n. 1/(of_nat k)\<^sup>2) < e'" if "m \<ge> N" for m n | 
| 62072 | 404 | using M[OF order.trans[OF \<open>N \<ge> M\<close> that]] unfolding real_norm_def | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 405 | by (subst (asm) abs_of_nonneg) (auto intro: sum_nonneg simp: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 406 | moreover note calculation | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 407 | } note N = this | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 408 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 409 | 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 | 410 | unfolding dist_complex_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 411 | 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 | 412 | 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 | 413 | 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 | 414 | 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 | 415 | by (simp add: dist_commute) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 416 | 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 | 417 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 418 | 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 | 419 | 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 | 420 | 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 | 421 | 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 | 422 | 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 | 423 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 424 | 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 | 425 | (-(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 | 426 | ((\<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 | 427 | 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 | 428 | 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 | 429 |                  (\<Sum>k\<in>{1..n}-{1..m}. Ln (t / of_nat k + 1))" using mn
 | 
| 64267 | 430 | by (simp add: sum_diff) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 431 |     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: 
62085diff
changeset | 432 | 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 | 433 | (\<Sum>k = Suc m..n. t * Ln (of_nat (k - 1)) - t * Ln (of_nat k))" using mn | 
| 64267 | 434 | 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 | 435 | also have "... = (\<Sum>k = Suc m..n. t * Ln (of_nat (k - 1) / of_nat k))" using mn N | 
| 64267 | 436 | by (intro sum_cong_Suc) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 437 | (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 | 438 |     also have "of_nat (k - 1) / of_nat k = 1 - 1 / (of_nat k :: complex)" if "k \<in> {Suc m..n}" for k
 | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 439 | using that of_nat_eq_0_iff[of "Suc i" for i] by (cases k) (simp_all add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 440 | 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 | 441 | (\<Sum>k = Suc m..n. t * Ln (1 - 1 / of_nat k))" using mn N | 
| 64267 | 442 | by (intro sum.cong) simp_all | 
| 443 | also note sum.distrib [symmetric] | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 444 | 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 | 445 | (\<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 | 446 | 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 | 447 | also have "... \<le> 2 * (norm t + norm t^2) * (\<Sum>k=Suc m..n. 1 / (of_nat k)\<^sup>2)" | 
| 64267 | 448 | 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 | 449 | 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 | 450 | 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: 
62085diff
changeset | 451 | 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 | 452 | by (simp add: e'_def field_simps power2_eq_square) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 453 | 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 | 454 | 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 | 455 | 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 | 456 | qed | 
| 
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 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 459 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 460 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 461 | lemma ln_Gamma_series_complex_converges': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 462 | 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 | 463 | 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 | 464 | proof - | 
| 63040 | 465 | define d' where "d' = Re z" | 
| 466 | 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 | 467 | 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 | 468 | 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 | 469 | 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 | 470 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 471 | 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 | 472 | proof (cases "Re z > 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 473 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 474 | 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 | 475 | 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 | 476 | 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 | 477 | 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 | 478 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 479 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 480 | case False | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 481 | 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 | 482 | 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 | 483 | 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 | 484 | 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 | 485 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 486 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 487 | 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 | 488 | 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 | 489 | 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 | 490 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 491 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 492 | 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 | 493 | 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 | 494 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 495 | 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 | 496 | 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 | 497 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 498 | lemma exp_ln_Gamma_series_complex: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 499 | 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 | 500 | 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 | 501 | proof - | 
| 63417 
c184ec919c70
more lemmas to emphasize {0::nat..(<)n} as canonical representation of intervals on nat
 haftmann parents: 
63367diff
changeset | 502 | 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 | 503 | from assms have "z \<noteq> 0" by (intro notI) auto | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 504 | 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 | 505 | (of_nat n) powr z / (z * (\<Prod>k=1..n. exp (Ln (z / of_nat k + 1))))" | 
| 64267 | 506 | 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 | 507 | 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 | 508 | 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: 
63367diff
changeset | 509 | also have "... = (\<Prod>k=1..n. z + k) / fact n" | 
| 64272 | 510 | by (simp add: fact_prod) | 
| 511 | (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: 
63367diff
changeset | 512 | 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: 
69597diff
changeset | 513 | 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: 
63367diff
changeset | 514 | also have "(\<Prod>k=0..n. z + k) = pochhammer z (Suc n)" | 
| 64272 | 515 | unfolding pochhammer_prod | 
| 516 | 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 | 517 | also have "of_nat n powr z / (pochhammer z (Suc n) / fact n) = Gamma_series z n" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 518 | unfolding Gamma_series_def using assms by (simp add: field_split_simps powr_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 519 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 520 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 521 | |
| 
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 | lemma ln_Gamma_series'_aux: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 524 | assumes "(z::complex) \<notin> \<int>\<^sub>\<le>\<^sub>0" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 525 | 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 | 526 | (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 | 527 | unfolding sums_def | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 528 | proof (rule Lim_transform) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 529 | 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: 
62085diff
changeset | 530 | (is "?g \<longlonglongrightarrow> _") | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 531 | 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 | 532 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 533 | 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 | 534 | 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 | 535 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 536 | 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 | 537 | 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: 
69597diff
changeset | 538 | 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 | 539 | subst atLeastLessThanSuc_atLeastAtMost) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 540 | also have "\<dots> = z * of_real (harm n) - (\<Sum>k=1..n. ln (1 + z / of_nat k))" | 
| 64267 | 541 | 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 | 542 | also from n have "\<dots> - ?g n = 0" | 
| 71633 | 543 | by (simp add: ln_Gamma_series_def sum_subtractf algebra_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 544 | 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 | 545 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 546 | 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 | 547 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 548 | |
| 
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 | lemma uniformly_summable_deriv_ln_Gamma: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 551 |   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 | 552 | 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 | 553 | (\<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 | 554 | (is "uniformly_convergent_on _ (\<lambda>k z. \<Sum>i<k. ?f i z)") | 
| 69529 | 555 | 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 | 556 |   {
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 557 | 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 | 558 | 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 | 559 | 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 | 560 | 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 | 561 | 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: 
62085diff
changeset | 562 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 563 | 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 | 564 | 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 | 565 | 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 | 566 | 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 | 567 | 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 | 568 | note A B | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 569 | } note ball = this | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 570 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 571 | 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 | 572 | 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 | 573 | proof safe | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 574 | 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 | 575 | 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 | 576 | 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 | 577 | 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 | 578 | 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 | 579 | 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 | 580 | 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 | 581 | 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 | 582 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 583 | with t_nz have "?f n t = 1 / (of_nat (Suc n) * (1 + of_nat (Suc n)/t))" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 584 | by (simp add: field_split_simps eq_neg_iff_add_eq_0 del: of_nat_Suc) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 585 | also have "norm \<dots> = inverse (of_nat (Suc n)) * inverse (norm (of_nat (Suc n)/t + 1))" | 
| 71633 | 586 | by (simp add: norm_divide norm_mult field_split_simps del: of_nat_Suc) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 587 |     also {
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 588 | 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 | 589 | by (intro divide_left_mono mult_pos_pos) simp_all | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 590 | 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 | 591 | 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 | 592 | 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 | 593 | finally have "inverse (norm (of_nat (Suc n)/t + 1)) \<le> 4 * norm z / of_nat (Suc n)" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 594 | using z by (simp add: field_split_simps norm_divide mult_ac del: of_nat_Suc) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 595 | } | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 596 | 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: 
62085diff
changeset | 597 | 4 * norm z * inverse (of_nat (Suc n)^2)" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 598 | by (simp add: field_split_simps power2_eq_square del: of_nat_Suc) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 599 | 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 | 600 | by (simp del: of_nat_Suc) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 601 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 602 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 603 | 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 | 604 | 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 | 605 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 606 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 607 | |
| 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 608 | subsection \<open>The Polygamma functions\<close> | 
| 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 609 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 610 | lemma summable_deriv_ln_Gamma: | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 611 |   "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 | 612 | 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 | 613 | unfolding summable_iff_convergent | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 614 | 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 | 615 | 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 | 616 | |
| 70136 | 617 | 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: 
62085diff
changeset | 618 | "Polygamma n z = (if n = 0 then | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 619 | (\<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 | 620 | (-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 | 621 | |
| 70136 | 622 | 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 | 623 | "Digamma \<equiv> Polygamma 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 624 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 625 | lemma Digamma_def: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 626 | "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 | 627 | by (simp add: Polygamma_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 628 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 629 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 630 | lemma summable_Digamma: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 631 |   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 | 632 | 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 | 633 | proof - | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 634 | 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 | 635 | (0 - inverse (z + of_nat 0))" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 636 | 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 | 637 | 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 | 638 | 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 | 639 | 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 | 640 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 641 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 642 | lemma summable_offset: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 643 | 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 | 644 | shows "summable f" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 645 | proof - | 
| 73005 
83b114a6545f
A few more simprules for iff-reasoning
 paulson <lp15@cam.ac.uk> parents: 
72318diff
changeset | 646 | from assms have "convergent (\<lambda>m. \<Sum>n<m. f (n + k))" | 
| 
83b114a6545f
A few more simprules for iff-reasoning
 paulson <lp15@cam.ac.uk> parents: 
72318diff
changeset | 647 | using summable_iff_convergent by blast | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
62085diff
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: 
69597diff
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: 
62085diff
changeset | 679 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
62085diff
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: 
62085diff
changeset | 695 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
68403diff
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: 
70196diff
changeset | 718 | proof (rule Lim_transform_eventually) | 
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
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: 
66453diff
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: 
66453diff
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: 
66453diff
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: 
68403diff
changeset | 740 | theorem Polygamma_LIMSEQ: | 
| 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
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: 
68403diff
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: 
68403diff
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: 
68403diff
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: 
68403diff
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: 
68403diff
changeset | 746 | |
| 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 747 | theorem has_field_derivative_ln_Gamma_complex [derivative_intros]: | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 748 | fixes z :: complex | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
changeset | 773 | apply (auto simp add: complex_nonpos_Reals_iff) | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 774 | done | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
68403diff
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: 
62085diff
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: 
68403diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
changeset | 869 | also have "Digamma (1/2::real) = | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
67399diff
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: 
67399diff
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: 
62072diff
changeset | 899 | also note euler_mascheroni_less_13_over_22 | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
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: 
68403diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
changeset | 946 | have "uniformly_convergent_on (ball z d) | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
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: 
62085diff
changeset | 974 | lemma isCont_ln_Gamma_complex [continuous_intros]: | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 975 | fixes f :: "'a::t2_space \<Rightarrow> complex" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
62085diff
changeset | 980 | fixes A :: "complex set" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
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: 
62085diff
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: 
66453diff
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: 
66453diff
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: 
66453diff
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: 
66453diff
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 | ||
| 73928 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1018 | lemma higher_deriv_ln_Gamma_complex: | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1019 | assumes "(x::complex) \<notin> \<real>\<^sub>\<le>\<^sub>0" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1020 | shows "(deriv ^^ j) ln_Gamma x = (if j = 0 then ln_Gamma x else Polygamma (j - 1) x)" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1021 | proof (cases j) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1022 | case (Suc j') | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1023 | have "(deriv ^^ j') (deriv ln_Gamma) x = (deriv ^^ j') Digamma x" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1024 | using eventually_nhds_in_open[of "UNIV - \<real>\<^sub>\<le>\<^sub>0" x] assms | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1025 | by (intro higher_deriv_cong_ev refl) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1026 | (auto elim!: eventually_mono simp: open_Diff deriv_ln_Gamma_complex) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1027 | also have "\<dots> = Polygamma j' x" using assms | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1028 | by (subst higher_deriv_Polygamma) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1029 | (auto elim!: nonpos_Ints_cases simp: complex_nonpos_Reals_iff) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1030 | finally show ?thesis using Suc by (simp del: funpow.simps add: funpow_Suc_right) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1031 | qed simp_all | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1032 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1033 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1034 | text \<open> | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1035 | 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: 
62085diff
changeset | 1036 | 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: 
62085diff
changeset | 1037 | 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 | 1038 | \<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1039 | |
| 70136 | 1040 | 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 | 1041 | fixes rGamma :: "'a \<Rightarrow> 'a" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1042 | 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: 
62085diff
changeset | 1043 | assumes differentiable_rGamma_aux1: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1044 | "(\<And>n. z \<noteq> - of_nat n) \<Longrightarrow> | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1045 | 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 | 1046 | \<longlonglongrightarrow> d) - scaleR euler_mascheroni 1 | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1047 | 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 | 1048 | norm (y - z)) (nhds 0) (at z)" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1049 | assumes differentiable_rGamma_aux2: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1050 | "let z = - of_nat n | 
| 64272 | 1051 |      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 | 1052 | norm (y - z)) (nhds 0) (at z)" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1053 | assumes rGamma_series_aux: "(\<And>n. z \<noteq> - of_nat n) \<Longrightarrow> | 
| 64272 | 1054 |              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 | 1055 | 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 | 1056 | pochhammer' = (\<lambda>a n. (\<Prod>n = 0..n. a + of_nat n)) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1057 | 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 | 1058 | (nhds (rGamma z)) sequentially" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1059 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1060 | subclass banach .. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1061 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1062 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1063 | definition "Gamma z = inverse (rGamma z)" | 
| 
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 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1066 | subsection \<open>Basic properties\<close> | 
| 
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 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 | 1069 | 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 | 1070 | 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 | 1071 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1072 | 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 | 1073 | 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 | 1074 | 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 | 1075 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1076 | 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 | 1077 | 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 | 1078 | 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 | 1079 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1080 | 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 | 1081 | unfolding Gamma_def by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1082 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1083 | lemma rGamma_series_LIMSEQ [tendsto_intros]: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1084 | "rGamma_series z \<longlonglongrightarrow> rGamma z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1085 | 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 | 1086 | case False | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1087 | 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 | 1088 | from rGamma_series_aux[OF this] show ?thesis | 
| 64272 | 1089 | by (simp add: rGamma_series_def[abs_def] fact_prod pochhammer_Suc_prod | 
| 63367 
6c731c8b7f03
simplified definitions of combinatorial functions
 haftmann parents: 
63317diff
changeset | 1090 | 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 | 1091 | 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 | 1092 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 1093 | 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 | 1094 | "Gamma_series z \<longlonglongrightarrow> Gamma z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1095 | 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 | 1096 | case False | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1097 | 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 | 1098 | by (intro tendsto_intros) (simp_all add: rGamma_eq_zero_iff) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1099 | 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 | 1100 | 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 | 1101 | 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 | 1102 | 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 | 1103 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1104 | 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 | 1105 | 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 | 1106 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1107 | 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 | 1108 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1109 | 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 | 1110 | using eventually_gt_at_top[of "0::nat"] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1111 | by (force elim!: eventually_mono simp: rGamma_series_def exp_of_real pochhammer_fact | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 1112 | field_split_simps pochhammer_rec' 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 | 1113 | 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 | 1114 | 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 | 1115 | 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 | 1116 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1117 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1118 | 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 | 1119 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1120 | 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 | 1121 | 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 | 1122 | 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 | 1123 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1124 | 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 | 1125 | 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 | 1126 | 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 | 1127 | 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 | 1128 | also from n have "\<dots> = ?f n * rGamma_series z n" | 
| 71633 | 1129 | by (subst pochhammer_rec') (simp_all add: field_split_simps rGamma_series_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1130 | 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 | 1131 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1132 | 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 | 1133 | 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 | 1134 | 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 | 1135 | 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: 
70196diff
changeset | 1136 | 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 | 1137 | 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 | 1138 | by (intro tendsto_intros) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1139 | 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 | 1140 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1141 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1142 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1143 | 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 | 1144 | proof (induction n arbitrary: z) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1145 | case (Suc n z) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1146 | 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 | 1147 | also note rGamma_plus1 [symmetric] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1148 | 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 | 1149 | qed simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1150 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 1151 | 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 | 1152 | 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 | 1153 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 1154 | 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: 
62085diff
changeset | 1155 | using pochhammer_rGamma[of z] | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1156 | 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 | 1157 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1158 | 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 | 1159 | 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 | 1160 | 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 | 1161 | 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 | 1162 | 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 | 1163 | 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 | 1164 | 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 | 1165 | 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 | 1166 | 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 | 1167 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1168 | 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 | 1169 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 1170 | theorem Gamma_fact: "Gamma (1 + of_nat n) = fact n" | 
| 68403 | 1171 | 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 | 1172 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1173 | lemma Gamma_numeral: "Gamma (numeral n) = fact (pred_numeral n)" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 1174 | by (subst of_nat_numeral[symmetric], subst numeral_eq_Suc, | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 1175 | 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 | 1176 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1177 | 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 | 1178 | proof (cases "n > 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1179 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1180 | 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: 
63040diff
changeset | 1181 | 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 | 1182 | 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 | 1183 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1184 | 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 | 1185 | 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 | 1186 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1187 | lemma Gamma_seriesI: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1188 | 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 | 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 | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1192 | 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 | 1193 | show "eventually (\<lambda>n. g n / Gamma_series z n * Gamma_series z n = g n) sequentially" | 
| 71633 | 1194 | by (force elim!: eventually_mono simp: dist_real_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1195 | 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 | 1196 | by (intro tendsto_intros) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1197 | 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 | 1198 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1199 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1200 | lemma Gamma_seriesI': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1201 | assumes "f \<longlonglongrightarrow> rGamma z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1202 | 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 | 1203 | 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 | 1204 | shows "g \<longlonglongrightarrow> Gamma z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1205 | proof (rule Lim_transform_eventually) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1206 | 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 | 1207 | from tendstoD[OF assms(2), OF this] show "eventually (\<lambda>n. g n * f n / f n = g n) sequentially" | 
| 71633 | 1208 | by (force elim!: eventually_mono simp: dist_real_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1209 | 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 | 1210 | 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 | 1211 | 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 | 1212 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1213 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1214 | lemma Gamma_series'_LIMSEQ: "Gamma_series' z \<longlonglongrightarrow> Gamma z" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1215 | 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 | 1216 | 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 | 1217 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1218 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1219 | subsection \<open>Differentiability\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1220 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1221 | 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 | 1222 | 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 | 1223 | 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 | 1224 | 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 | 1225 | from assms have "z \<noteq> - of_nat n" for n by auto | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1226 | 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 | 1227 | 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 | 1228 | 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 | 1229 | 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 | 1230 | 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 | 1231 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1232 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1233 | lemma has_field_derivative_rGamma_nonpos_int: | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1234 | "(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 | 1235 | 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 | 1236 | using differentiable_rGamma_aux2[of n] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1237 | unfolding Let_def has_field_derivative_def has_derivative_def netlimit_at | 
| 64272 | 1238 | 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 | 1239 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1240 | 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 | 1241 | "(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 | 1242 | 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 | 1243 | 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 | 1244 | 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 | 1245 | by (auto elim!: nonpos_Ints_cases') | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1246 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1247 | 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 | 1248 | 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 | 1249 | 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 | 1250 | 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 | 1251 | 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 | 1252 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 1253 | 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 | 1254 | "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 | 1255 | unfolding Gamma_def [abs_def] | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1256 | 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 | 1257 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1258 | 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 | 1259 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1260 | (* TODO: Hide ugly facts properly *) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1261 | 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 | 1262 | 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 | 1263 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1264 | 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 | 1265 | 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 | 1266 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1267 | 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 | 1268 | 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 | 1269 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1270 | lemma isCont_rGamma [continuous_intros]: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1271 | "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 | 1272 | 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 | 1273 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1274 | lemma isCont_Gamma [continuous_intros]: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1275 | "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 | 1276 | 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 | 1277 | |
| 70136 | 1278 | subsection\<^marker>\<open>tag unimportant\<close> \<open>The complex Gamma function\<close> | 
| 1279 | ||
| 1280 | 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 | 1281 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1282 | |
| 70136 | 1283 | 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 | 1284 | "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 | 1285 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1286 | lemma rGamma_series_complex_converges: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1287 | "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 | 1288 | and rGamma_complex_altdef: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1289 | "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 | 1290 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1291 | have "?thesis1 \<and> ?thesis2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1292 | 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 | 1293 | case False | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1294 | 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 | 1295 | proof (rule Lim_transform_eventually) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1296 | 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: 
62085diff
changeset | 1297 | 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 | 1298 | 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 | 1299 | 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 | 1300 | 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 | 1301 | 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 | 1302 | 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 | 1303 | 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 | 1304 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1305 | with False show ?thesis | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1306 | 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 | 1307 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1308 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1309 | 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 | 1310 | 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 | 1311 | 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 | 1312 | finally show ?thesis using True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1313 | 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 | 1314 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1315 | thus "?thesis1" "?thesis2" by blast+ | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1316 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1317 | |
| 70136 | 1318 | 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 | 1319 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1320 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1321 | (* TODO: duplication *) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1322 | 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 | 1323 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1324 | 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 | 1325 | 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 | 1326 | 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 | 1327 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1328 | 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 | 1329 | 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 | 1330 | 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 | 1331 | 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 | 1332 | also from n have "\<dots> = ?f n * rGamma_series z n" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 1333 | by (subst pochhammer_rec') (simp_all add: field_split_simps rGamma_series_def add_ac) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1334 | 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 | 1335 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1336 | 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 | 1337 | using rGamma_series_complex_converges | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1338 | 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 | 1339 | (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 | 1340 | 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 | 1341 | 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: 
70196diff
changeset | 1342 | 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 | 1343 | 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: 
62085diff
changeset | 1344 | using rGamma_series_complex_converges | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1345 | 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 | 1346 | 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 | 1347 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1348 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1349 | 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 | 1350 | 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 | 1351 | 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 | 1352 | proof - | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1353 | 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 | 1354 | proof (subst DERIV_cong_ev[OF refl _ refl]) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1355 | 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 | 1356 | 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 | 1357 | 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 | 1358 | 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 | 1359 | 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 | 1360 | next | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1361 | 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: 
62085diff
changeset | 1362 | 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: 
62085diff
changeset | 1363 | 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 | 1364 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1365 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1366 | 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 | 1367 | 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 | 1368 | case (Suc n z) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1369 | 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 | 1370 | 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 | 1371 | 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 | 1372 | 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: 
62085diff
changeset | 1373 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1374 | 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 | 1375 | -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 | 1376 | 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: 
62085diff
changeset | 1377 | 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 | 1378 | by (simp add: rGamma_complex_plus1) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1379 | 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 | 1380 | 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 | 1381 | 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 | 1382 | 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 | 1383 | finally show ?case . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1384 | qed (intro diff, simp) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1385 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1386 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1387 | 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 | 1388 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1389 | 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 | 1390 | using eventually_gt_at_top[of "0::nat"] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1391 | by (force elim!: eventually_mono simp: rGamma_series_def exp_of_real pochhammer_fact | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 1392 | field_split_simps pochhammer_rec' 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 | 1393 | 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 | 1394 | 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 | 1395 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1396 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1397 | 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 | 1398 | "(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 | 1399 | proof (induction n) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1400 | case 0 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1401 | 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 | 1402 | 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 | 1403 | 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 | 1404 | 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 | 1405 | 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 | 1406 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1407 | case (Suc n) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1408 | 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 | 1409 | (at (- of_nat (Suc n) + 1 :: complex))" by simp | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1410 | 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 | 1411 | (- 1) ^ Suc n * fact (Suc n)) (at (- of_nat (Suc n)))" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1412 | 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 | 1413 | (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 | 1414 | 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 | 1415 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1416 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1417 | instance proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1418 | 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 | 1419 | 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 | 1420 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1421 | 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 | 1422 | 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 | 1423 | 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 | 1424 | 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: 
62085diff
changeset | 1425 | \<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 | 1426 | 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 | 1427 | by (simp add: has_field_derivative_def has_derivative_def Digamma_def sums_def [abs_def] | 
| 71633 | 1428 | of_real_def[symmetric] suminf_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1429 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1430 | fix n :: nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1431 | from has_field_derivative_rGamma_complex_nonpos_Int[of n] | 
| 64272 | 1432 |   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 | 1433 | (y - z)) /\<^sub>R cmod (y - z)) \<midarrow>z\<rightarrow> 0" | 
| 71633 | 1434 | by (simp add: has_field_derivative_def has_derivative_def fact_prod Let_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1435 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1436 | fix z :: complex | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1437 | 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 | 1438 | by (simp add: convergent_LIMSEQ_iff rGamma_complex_def) | 
| 64272 | 1439 |   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 | 1440 | 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 | 1441 | 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 | 1442 | in (\<lambda>n. pochhammer' z n / (fact' n * exp (z * ln (real_of_nat n) *\<^sub>R 1))) \<longlonglongrightarrow> rGamma z" | 
| 64272 | 1443 | by (simp add: fact_prod pochhammer_Suc_prod rGamma_series_def [abs_def] exp_def | 
| 63367 
6c731c8b7f03
simplified definitions of combinatorial functions
 haftmann parents: 
63317diff
changeset | 1444 | 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 | 1445 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1446 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1447 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1448 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1449 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1450 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1451 | lemma Gamma_complex_altdef: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1452 | "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 | 1453 | 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 | 1454 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1455 | 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 | 1456 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1457 | 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 | 1458 | 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 | 1459 | 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 | 1460 | 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 | 1461 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1462 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1463 | 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 | 1464 | unfolding Gamma_def by (simp add: cnj_rGamma) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1465 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1466 | lemma Gamma_complex_real: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1467 | "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 | 1468 | 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 | 1469 | |
| 62534 
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1470 | 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: 
62533diff
changeset | 1471 | 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 | 1472 | |
| 64969 | 1473 | 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: 
62533diff
changeset | 1474 | 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 | 1475 | |
| 68721 | 1476 | lemma holomorphic_rGamma' [holomorphic_intros]: | 
| 1477 | assumes "f holomorphic_on A" | |
| 1478 | shows "(\<lambda>x. rGamma (f x)) holomorphic_on A" | |
| 1479 | proof - | |
| 1480 | have "rGamma \<circ> f holomorphic_on A" using assms | |
| 1481 | by (intro holomorphic_on_compose assms holomorphic_rGamma) | |
| 1482 | thus ?thesis by (simp only: o_def) | |
| 1483 | qed | |
| 1484 | ||
| 64969 | 1485 | lemma analytic_rGamma: "rGamma analytic_on A" | 
| 1486 | 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 | 1487 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1488 | |
| 62534 
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1489 | 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: 
62533diff
changeset | 1490 | 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 | 1491 | |
| 64969 | 1492 | 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: 
62533diff
changeset | 1493 | 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 | 1494 | |
| 68721 | 1495 | lemma holomorphic_Gamma' [holomorphic_intros]: | 
| 1496 | assumes "f holomorphic_on A" and "\<And>x. x \<in> A \<Longrightarrow> f x \<notin> \<int>\<^sub>\<le>\<^sub>0" | |
| 1497 | shows "(\<lambda>x. Gamma (f x)) holomorphic_on A" | |
| 1498 | proof - | |
| 1499 | have "Gamma \<circ> f holomorphic_on A" using assms | |
| 1500 | by (intro holomorphic_on_compose assms holomorphic_Gamma) auto | |
| 1501 | thus ?thesis by (simp only: o_def) | |
| 1502 | qed | |
| 1503 | ||
| 64969 | 1504 | 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 | 1505 | by (rule analytic_on_subset[of _ "UNIV - \<int>\<^sub>\<le>\<^sub>0"], subst analytic_on_open) | 
| 64969 | 1506 | (auto intro!: holomorphic_Gamma) | 
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1507 | |
| 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1508 | |
| 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1509 | lemma field_differentiable_ln_Gamma_complex: | 
| 64969 | 1510 | "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> ln_Gamma field_differentiable (at (z::complex) within A)" | 
| 1511 | by (rule field_differentiable_within_subset[of _ _ UNIV]) | |
| 1512 | (force simp: field_differentiable_def intro!: derivative_intros)+ | |
| 1513 | ||
| 1514 | lemma holomorphic_ln_Gamma [holomorphic_intros]: "A \<inter> \<real>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> ln_Gamma holomorphic_on A"
 | |
| 1515 | unfolding holomorphic_on_def by (auto intro!: field_differentiable_ln_Gamma_complex) | |
| 1516 | ||
| 1517 | lemma analytic_ln_Gamma: "A \<inter> \<real>\<^sub>\<le>\<^sub>0 = {} \<Longrightarrow> ln_Gamma analytic_on A"
 | |
| 1518 | by (rule analytic_on_subset[of _ "UNIV - \<real>\<^sub>\<le>\<^sub>0"], subst analytic_on_open) | |
| 1519 | (auto intro!: holomorphic_ln_Gamma) | |
| 1520 | ||
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1521 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1522 | lemma has_field_derivative_rGamma_complex' [derivative_intros]: | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1523 | "(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 | 1524 | -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 | 1525 | 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 | 1526 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1527 | 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 | 1528 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1529 | |
| 62534 
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1530 | lemma field_differentiable_Polygamma: | 
| 64969 | 1531 | fixes z :: complex | 
| 62533 
bc25f3916a99
new material to Blochj's theorem, as well as supporting lemmas
 paulson <lp15@cam.ac.uk> parents: 
62398diff
changeset | 1532 | shows | 
| 62534 
6855b348e828
complex_differentiable -> field_differentiable, etc. (making these theorems also available for type real)
 paulson <lp15@cam.ac.uk> parents: 
62533diff
changeset | 1533 | "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: 
62533diff
changeset | 1534 | 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 | 1535 | |
| 64969 | 1536 | 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: 
62533diff
changeset | 1537 | 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 | 1538 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1539 | 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 | 1540 | 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 | 1541 | (auto intro!: holomorphic_on_Polygamma) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1542 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1543 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1544 | |
| 70136 | 1545 | 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 | 1546 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1547 | lemma rGamma_series_real: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1548 | "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 | 1549 | 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 | 1550 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1551 | 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 | 1552 | 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 | 1553 | Re (of_real (pochhammer x (Suc n)) / (fact n * exp (of_real (x * ln (real_of_nat n)))))" | 
| 71633 | 1554 | using n by (simp add: rGamma_series_def powr_def pochhammer_of_real) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1555 | 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 | 1556 | (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 | 1557 | by (subst exp_of_real) simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1558 | 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 | 1559 | 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 | 1560 | 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 | 1561 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1562 | |
| 70136 | 1563 | 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 | 1564 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1565 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1566 | 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 | 1567 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1568 | instance proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1569 | fix x :: real | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1570 | 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 | 1571 | 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 | 1572 | 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 | 1573 | 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 | 1574 | 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 | 1575 | 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 | 1576 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1577 | fix x :: real assume "\<And>n. x \<noteq> - of_nat n" | 
| 63539 | 1578 | 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 | 1579 | by (subst of_real_in_nonpos_Ints_iff) (auto elim!: nonpos_Ints_cases') | 
| 63539 | 1580 | then have "x \<noteq> 0" by auto | 
| 1581 | 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: 
70532diff
changeset | 1582 | 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 | 1583 | 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 | 1584 | 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: 
62085diff
changeset | 1585 | \<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 | 1586 | 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 | 1587 | by (simp add: has_field_derivative_def has_derivative_def Digamma_def sums_def [abs_def] | 
| 71633 | 1588 | of_real_def[symmetric] suminf_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1589 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1590 | fix n :: nat | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1591 | 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: 
70532diff
changeset | 1592 | 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 | 1593 | simp: Polygamma_of_real rGamma_real_def [abs_def]) | 
| 64272 | 1594 |   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 | 1595 | (y - x)) /\<^sub>R norm (y - x)) \<midarrow>x::real\<rightarrow> 0" | 
| 71633 | 1596 | by (simp add: has_field_derivative_def has_derivative_def fact_prod Let_def) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1597 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1598 | fix x :: real | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1599 | 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 | 1600 | proof (rule Lim_transform_eventually) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1601 | 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 | 1602 | by (intro tendsto_intros) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1603 | qed (insert rGamma_series_real, simp add: eq_commute) | 
| 64272 | 1604 |   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 | 1605 | 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 | 1606 | 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 | 1607 | in (\<lambda>n. pochhammer' x n / (fact' n * exp (x * ln (real_of_nat n) *\<^sub>R 1))) \<longlonglongrightarrow> rGamma x" | 
| 64272 | 1608 | by (simp add: fact_prod pochhammer_Suc_prod rGamma_series_def [abs_def] exp_def | 
| 63367 
6c731c8b7f03
simplified definitions of combinatorial functions
 haftmann parents: 
63317diff
changeset | 1609 | 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 | 1610 | qed | 
| 
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 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1613 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1614 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1615 | 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 | 1616 | 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 | 1617 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1618 | 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 | 1619 | 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 | 1620 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1621 | 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 | 1622 | 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 | 1623 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1624 | 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 | 1625 | 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 | 1626 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1627 | 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 | 1628 | using rGamma_complex_real[OF Reals_of_real[of x]] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1629 | by (elim Reals_cases) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1630 | (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 | 1631 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1632 | 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 | 1633 | "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 | 1634 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1635 | assume xn: "x > 0" "n > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1636 | 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 | 1637 | using that xn by (subst Ln_of_real [symmetric]) (auto intro!: add_nonneg_pos simp: field_simps) | 
| 71633 | 1638 | with xn show ?thesis by (simp add: ln_Gamma_series_def Ln_of_real) | 
| 62049 
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 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1641 | lemma ln_Gamma_real_converges: | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1642 | assumes "(x::real) > 0" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1643 | shows "convergent (ln_Gamma_series x)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1644 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1645 | 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 | 1646 | 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 | 1647 | moreover from eventually_gt_at_top[of "0::nat"] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1648 | have "eventually (\<lambda>n. complex_of_real (ln_Gamma_series x n) = | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1649 | 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 | 1650 | 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 | 1651 | 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 | 1652 | by (subst tendsto_cong) assumption+ | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1653 | 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 | 1654 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1655 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1656 | 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 | 1657 | 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 | 1658 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1659 | 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 | 1660 | 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 | 1661 | assume x: "x > 0" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1662 | show "eventually (\<lambda>n. of_real (ln_Gamma_series x n) = | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1663 | ln_Gamma_series (complex_of_real x) n) sequentially" | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1664 | 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 | 1665 | 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 | 1666 | 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: 
62085diff
changeset | 1667 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1668 | 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: 
62085diff
changeset | 1669 | 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 | 1670 | 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 | 1671 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1672 | 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 | 1673 | 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 | 1674 | |
| 64969 | 1675 | lemma ln_Gamma_complex_conv_fact: "n > 0 \<Longrightarrow> ln_Gamma (of_nat n :: complex) = ln (fact (n - 1))" | 
| 1676 | 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: 
66453diff
changeset | 1677 | 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: 
66453diff
changeset | 1678 | |
| 64969 | 1679 | lemma ln_Gamma_real_conv_fact: "n > 0 \<Longrightarrow> ln_Gamma (real n) = ln (fact (n - 1))" | 
| 1680 | using Gamma_fact[of "n - 1", where 'a = real] | |
| 1681 | by (simp add: ln_Gamma_real_pos of_nat_diff Ln_of_real [symmetric]) | |
| 1682 | ||
| 67278 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 1683 | 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: 
66936diff
changeset | 1684 | 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: 
66936diff
changeset | 1685 | |
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 1686 | 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 | 1687 | by (simp add: Gamma_real_pos_exp) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1688 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1689 | 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 | 1690 | assumes x: "x > (0::real)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1691 | 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 | 1692 | 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 | 1693 | 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: 
70532diff
changeset | 1694 | 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 | 1695 | simp: Polygamma_of_real o_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1696 |   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 | 1697 | 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 | 1698 | 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 | 1699 | qed | 
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1700 | |
| 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1701 | lemma field_differentiable_ln_Gamma_real: | 
| 64969 | 1702 | "x > 0 \<Longrightarrow> ln_Gamma field_differentiable (at (x::real) within A)" | 
| 1703 | by (rule field_differentiable_within_subset[of _ _ UNIV]) | |
| 1704 | (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 | 1705 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1706 | 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: 
66453diff
changeset | 1707 | |
| 64969 | 1708 | lemma deriv_ln_Gamma_real: | 
| 1709 | assumes "z > 0" | |
| 1710 | shows "deriv ln_Gamma z = Digamma (z :: real)" | |
| 1711 | 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 | 1712 | |
| 73928 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1713 | lemma higher_deriv_ln_Gamma_real: | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1714 | assumes "(x::real) > 0" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1715 | shows "(deriv ^^ j) ln_Gamma x = (if j = 0 then ln_Gamma x else Polygamma (j - 1) x)" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1716 | proof (cases j) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1717 | case (Suc j') | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1718 | have "(deriv ^^ j') (deriv ln_Gamma) x = (deriv ^^ j') Digamma x" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1719 |     using eventually_nhds_in_open[of "{0<..}" x] assms
 | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1720 | by (intro higher_deriv_cong_ev refl) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1721 | (auto elim!: eventually_mono simp: open_Diff deriv_ln_Gamma_real) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1722 | also have "\<dots> = Polygamma j' x" using assms | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1723 | by (subst higher_deriv_Polygamma) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1724 | (auto elim!: nonpos_Ints_cases simp: complex_nonpos_Reals_iff) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1725 | finally show ?thesis using Suc by (simp del: funpow.simps add: funpow_Suc_right) | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1726 | qed simp_all | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1727 | |
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1728 | lemma higher_deriv_ln_Gamma_complex_of_real: | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1729 | assumes "(x :: real) > 0" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1730 | shows "(deriv ^^ j) ln_Gamma (complex_of_real x) = of_real ((deriv ^^ j) ln_Gamma x)" | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1731 | using assms | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1732 | by (auto simp: higher_deriv_ln_Gamma_real higher_deriv_ln_Gamma_complex | 
| 
3b76524f5a85
Imported lots of material from Stirling_Formula/Gamma_Asymptotics
 paulson <lp15@cam.ac.uk> parents: 
73005diff
changeset | 1733 | ln_Gamma_complex_of_real Polygamma_of_real) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1734 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1735 | lemma has_field_derivative_rGamma_real' [derivative_intros]: | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1736 | "(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 | 1737 | -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 | 1738 | 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 | 1739 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1740 | 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 | 1741 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1742 | lemma Polygamma_real_odd_pos: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1743 | 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 | 1744 | shows "Polygamma n x > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1745 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1746 | 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 | 1747 | with assms show ?thesis | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1748 | unfolding Polygamma_def using Polygamma_converges'[of x "Suc n"] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1749 | 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 | 1750 | 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 | 1751 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1752 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1753 | lemma Polygamma_real_even_neg: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1754 | 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 | 1755 | shows "Polygamma n x < 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1756 | 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 | 1757 | by (auto intro!: mult_pos_pos suminf_pos) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1758 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1759 | lemma Polygamma_real_strict_mono: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1760 | 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 | 1761 | 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 | 1762 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1763 | 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 | 1764 | 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 | 1765 | 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 | 1766 | note \<xi>(3) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1767 | 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 | 1768 | 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 | 1769 | finally show ?thesis by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1770 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1771 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1772 | lemma Polygamma_real_strict_antimono: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1773 | 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 | 1774 | 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 | 1775 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1776 | 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 | 1777 | 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 | 1778 | 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 | 1779 | note \<xi>(3) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1780 | 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 | 1781 | 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 | 1782 | finally show ?thesis by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1783 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1784 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1785 | lemma Polygamma_real_mono: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1786 | 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 | 1787 | shows "Polygamma n x \<le> Polygamma n y" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1788 | 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 | 1789 | by (cases "x = y") simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1790 | |
| 63721 | 1791 | lemma Digamma_real_strict_mono: "(0::real) < x \<Longrightarrow> x < y \<Longrightarrow> Digamma x < Digamma y" | 
| 1792 | by (rule Polygamma_real_strict_mono) simp_all | |
| 1793 | ||
| 1794 | lemma Digamma_real_mono: "(0::real) < x \<Longrightarrow> x \<le> y \<Longrightarrow> Digamma x \<le> Digamma y" | |
| 1795 | by (rule Polygamma_real_mono) simp_all | |
| 1796 | ||
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1797 | 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 | 1798 | assumes "x \<ge> 3/2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1799 | shows "Digamma (x :: real) > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1800 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1801 | 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 | 1802 | 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 | 1803 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1804 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1805 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1806 | lemma ln_Gamma_real_strict_mono: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1807 | 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 | 1808 | 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 | 1809 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1810 | 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 | 1811 | 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 | 1812 | 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 | 1813 | note \<xi>(3) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1814 | 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 | 1815 | 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 | 1816 | finally show ?thesis by simp | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1817 | qed | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1818 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1819 | lemma Gamma_real_strict_mono: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1820 | 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 | 1821 | shows "Gamma (x :: real) < Gamma y" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1822 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1823 | 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 | 1824 | 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 | 1825 | 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 | 1826 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1827 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1828 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 1829 | 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 | 1830 | by (rule convex_on_realI[of _ _ Digamma]) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 1831 | (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 | 1832 | 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 | 1833 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1834 | |
| 63725 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1835 | 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: 
63721diff
changeset | 1836 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1837 | text \<open> | 
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1838 | The following is a proof of the Bohr--Mollerup theorem, which states that | 
| 69566 | 1839 | any log-convex function \<open>G\<close> on the positive reals that fulfils \<open>G(1) = 1\<close> and | 
| 1840 | 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: 
63721diff
changeset | 1841 | Gamma function. | 
| 69566 | 1842 | 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: 
66453diff
changeset | 1843 | 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: 
63721diff
changeset | 1844 | integers, where the Gamma function is not defined). | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1845 | \<close> | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1846 | |
| 70136 | 1847 | context\<^marker>\<open>tag unimportant\<close> | 
| 63725 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1848 | fixes G :: "real \<Rightarrow> real" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1849 | assumes G_1: "G 1 = 1" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1850 | 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: 
63721diff
changeset | 1851 | assumes G_pos: "x > 0 \<Longrightarrow> G x > 0" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1852 |   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: 
63721diff
changeset | 1853 | begin | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1854 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1855 | 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: 
63721diff
changeset | 1856 | using G_plus1[of "real n + 1" for n] | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1857 | 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: 
63721diff
changeset | 1858 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1859 | private definition S :: "real \<Rightarrow> real \<Rightarrow> real" where | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1860 | "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: 
63721diff
changeset | 1861 | |
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1862 | private lemma S_eq: | 
| 63725 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1863 | "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: 
63721diff
changeset | 1864 | 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: 
63721diff
changeset | 1865 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1866 | private lemma G_lower: | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1867 | assumes x: "x > 0" and n: "n \<ge> 1" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1868 | shows "Gamma_series x n \<le> G x" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1869 | proof - | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1870 | 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: 
63721diff
changeset | 1871 | (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: 
63721diff
changeset | 1872 | (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: 
63721diff
changeset | 1873 | 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: 
66453diff
changeset | 1874 | 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: 
63721diff
changeset | 1875 | 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: 
63721diff
changeset | 1876 | 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: 
66453diff
changeset | 1877 | unfolding S_def using n | 
| 63725 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1878 | 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: 
63721diff
changeset | 1879 | 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: 
63721diff
changeset | 1880 | 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: 
63721diff
changeset | 1881 | 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: 
63721diff
changeset | 1882 | 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: 
66453diff
changeset | 1883 | 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: 
63721diff
changeset | 1884 | using x by (simp add: ln_mult) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1885 | 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: 
63721diff
changeset | 1886 | 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: 
63721diff
changeset | 1887 | 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: 
63721diff
changeset | 1888 | 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: 
63721diff
changeset | 1889 | 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: 
63721diff
changeset | 1890 | finally show "Gamma_series x n \<le> G x" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1891 | 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: 
63721diff
changeset | 1892 | qed | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1893 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1894 | private lemma G_upper: | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1895 | 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: 
63721diff
changeset | 1896 | 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: 
63721diff
changeset | 1897 | proof - | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1898 | 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: 
63721diff
changeset | 1899 | (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: 
66453diff
changeset | 1900 | ((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: 
63721diff
changeset | 1901 | 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: 
66453diff
changeset | 1902 | 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: 
63721diff
changeset | 1903 | 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: 
63721diff
changeset | 1904 | 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: 
63721diff
changeset | 1905 | 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: 
63721diff
changeset | 1906 | 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: 
63721diff
changeset | 1907 | 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: 
66453diff
changeset | 1908 | 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: 
63721diff
changeset | 1909 | 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: 
63721diff
changeset | 1910 | 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: 
63721diff
changeset | 1911 | by (simp add: ln_mult) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1912 | 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: 
63721diff
changeset | 1913 | 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: 
63721diff
changeset | 1914 | 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: 
63721diff
changeset | 1915 | 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: 
63721diff
changeset | 1916 | 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: 
63721diff
changeset | 1917 | 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: 
63721diff
changeset | 1918 | using x by (simp add: field_simps pochhammer_pos) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1919 | 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: 
66453diff
changeset | 1920 | 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: 
63721diff
changeset | 1921 | 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: 
63721diff
changeset | 1922 | 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: 
63721diff
changeset | 1923 | finally show ?thesis . | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1924 | qed | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1925 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1926 | private lemma G_eq_Gamma_aux: | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1927 | assumes x: "x > 0" "x \<le> 1" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1928 | shows "G x = Gamma x" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1929 | proof (rule antisym) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1930 | 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: 
63918diff
changeset | 1931 | proof (rule tendsto_upperbound) | 
| 63725 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1932 | 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: 
64969diff
changeset | 1933 | 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: 
63721diff
changeset | 1934 | qed (simp_all add: Gamma_series_LIMSEQ) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1935 | next | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1936 | 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: 
63918diff
changeset | 1937 | proof (rule tendsto_lowerbound) | 
| 63725 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1938 | 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: 
66453diff
changeset | 1939 | 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: 
63721diff
changeset | 1940 | Gamma_series_LIMSEQ filterlim_real_sequentially)+ | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1941 | 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: 
63721diff
changeset | 1942 | next | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1943 | 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: 
64969diff
changeset | 1944 | 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: 
63721diff
changeset | 1945 | qed simp_all | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1946 | qed | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1947 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1948 | theorem Gamma_pos_real_unique: | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1949 | assumes x: "x > 0" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1950 | shows "G x = Gamma x" | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1951 | proof - | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1952 |   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: 
63721diff
changeset | 1953 | proof (induction n) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1954 | case (Suc n) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1955 | from Suc have "x + real n > 0" by simp | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1956 | 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: 
63721diff
changeset | 1957 | 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: 
63721diff
changeset | 1958 | by (auto simp: add_ac) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1959 | qed (simp_all add: G_eq_Gamma_aux) | 
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 1960 | |
| 63725 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1961 | show ?thesis | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1962 | proof (cases "frac x = 0") | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1963 | case True | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1964 | 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: 
63721diff
changeset | 1965 | 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: 
63721diff
changeset | 1966 | 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: 
63721diff
changeset | 1967 | next | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1968 | case False | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1969 | 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: 
63721diff
changeset | 1970 | by (simp add: frac_def) | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1971 | 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: 
63721diff
changeset | 1972 | show ?thesis | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1973 | 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: 
63721diff
changeset | 1974 | qed | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1975 | qed | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1976 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1977 | end | 
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1978 | |
| 
4c00ba1ad11a
Bohr-Mollerup theorem for the Gamma function
 Manuel Eberl <eberlm@in.tum.de> parents: 
63721diff
changeset | 1979 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 1980 | 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 | 1981 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1982 | 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 | 1983 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1984 | 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 | 1985 | 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 | 1986 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1987 | 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 | 1988 | 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 | 1989 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 1990 | 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 | 1991 | 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: 
62085diff
changeset | 1992 | 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 | 1993 | (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 | 1994 | 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 | 1995 | |
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 1996 | 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: 
63040diff
changeset | 1997 | by (auto simp add: Beta_def elim!: nonpos_Ints_cases') | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 1998 | |
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 1999 | 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: 
63040diff
changeset | 2000 | by (auto simp add: Beta_def elim!: nonpos_Ints_cases') | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 2001 | |
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2002 | 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: 
63040diff
changeset | 2003 | by (auto simp add: Beta_def elim!: nonpos_Ints_cases') | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 2004 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2005 | 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 | 2006 | 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: 
62085diff
changeset | 2007 | 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 | 2008 | (at y within A)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2009 | 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 | 2010 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 2011 | theorem Beta_plus1_plus1: | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2012 | 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 | 2013 | 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 | 2014 | proof - | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2015 | 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 | 2016 | (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 | 2017 | 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 | 2018 | 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 | 2019 | 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 | 2020 | 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 | 2021 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2022 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2023 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 2024 | theorem Beta_plus1_left: | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2025 | 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 | 2026 | 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 | 2027 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2028 | 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 | 2029 | 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 | 2030 | 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 | 2031 | 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 | 2032 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2033 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2034 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 2035 | theorem Beta_plus1_right: | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2036 | 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 | 2037 | shows "(x + y) * Beta x (y + 1) = y * Beta x y" | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2038 | 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 | 2039 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2040 | lemma Gamma_Gamma_Beta: | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2041 | 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 | 2042 | 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 | 2043 | 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 | 2044 | by (simp add: rGamma_inverse_Gamma) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2045 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2046 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2047 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2048 | subsection \<open>Legendre duplication theorem\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2049 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2050 | context | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2051 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2052 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2053 | private lemma Gamma_legendre_duplication_aux: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2054 | fixes z :: "'a :: Gamma" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2055 | 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 | 2056 | 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 | 2057 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2058 | 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: 
62085diff
changeset | 2059 | 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 | 2060 | 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 | 2061 |   {
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2062 | 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: 
62085diff
changeset | 2063 | 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 | 2064 | Gamma_series' (2*z) (2*n)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2065 | 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 | 2066 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2067 | 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 | 2068 | 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 | 2069 | 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 | 2070 | 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 | 2071 | (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 | 2072 | 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: 
62085diff
changeset | 2073 | have B: "Gamma_series' (2*z) (2*n) = | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2074 | ?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 | 2075 | (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 | 2076 | 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 | 2077 | 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 | 2078 | 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: 
62085diff
changeset | 2079 | 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 | 2080 | ?f^2 / ?f' * of_nat (2^(2*n)) * (?powr n ((4*z + 1)/2) * ?powr n (-2*z))" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2081 | using n unfolding A B by (simp add: field_split_simps exp_minus) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2082 | 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 | 2083 | 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 | 2084 | 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 | 2085 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2086 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2087 | 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 | 2088 | 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: 
68721diff
changeset | 2089 | 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 | 2090 | by (intro tendsto_intros Gamma_series'_LIMSEQ) | 
| 66447 
a1f5c5c26fa6
Replaced subseq with strict_mono
 eberlm <eberlm@in.tum.de> parents: 
66286diff
changeset | 2091 | (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 | 2092 | 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: 
70196diff
changeset | 2093 | 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 | 2094 | } note lim = this | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2095 | |
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2096 | 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 | 2097 | 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 | 2098 | 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: 
67399diff
changeset | 2099 | 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 | 2100 | from LIMSEQ_unique[OF this lim[OF assms]] z' show ?thesis | 
| 71633 | 2101 | by (simp add: field_split_simps Gamma_eq_zero_iff ring_distribs exp_diff exp_of_real) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2102 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2103 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2104 | text \<open> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2105 | The following lemma is somewhat annoying. With a little bit of complex analysis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2106 | (Cauchy's integral theorem, to be exact), this would be completely trivial. However, | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2107 | we want to avoid depending on the complex analysis session at this point, so we prove it | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2108 | the hard way. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2109 | \<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2110 | private lemma Gamma_reflection_aux: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2111 | defines "h \<equiv> \<lambda>z::complex. if z \<in> \<int> then 0 else | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2112 | (of_real pi * cot (of_real pi*z) + Digamma z - Digamma (1 - z))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2113 | defines "a \<equiv> complex_of_real pi" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2114 | obtains h' where "continuous_on UNIV h'" "\<And>z. (h has_field_derivative (h' z)) (at z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2115 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2116 | define f where "f n = a * of_real (cos_coeff (n+1) - sin_coeff (n+2))" for n | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2117 | define F where "F z = (if z = 0 then 0 else (cos (a*z) - sin (a*z)/(a*z)) / z)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2118 | define g where "g n = complex_of_real (sin_coeff (n+1))" for n | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2119 | define G where "G z = (if z = 0 then 1 else sin (a*z)/(a*z))" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2120 | have a_nz: "a \<noteq> 0" unfolding a_def by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2121 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2122 | have "(\<lambda>n. f n * (a*z)^n) sums (F z) \<and> (\<lambda>n. g n * (a*z)^n) sums (G z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2123 | if "abs (Re z) < 1" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2124 | proof (cases "z = 0"; rule conjI) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2125 | assume "z \<noteq> 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2126 | note z = this that | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2127 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2128 | from z have sin_nz: "sin (a*z) \<noteq> 0" unfolding a_def by (auto simp: sin_eq_0) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2129 | have "(\<lambda>n. of_real (sin_coeff n) * (a*z)^n) sums (sin (a*z))" using sin_converges[of "a*z"] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2130 | by (simp add: scaleR_conv_of_real) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2131 | from sums_split_initial_segment[OF this, of 1] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2132 | have "(\<lambda>n. (a*z) * of_real (sin_coeff (n+1)) * (a*z)^n) sums (sin (a*z))" by (simp add: mult_ac) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2133 | from sums_mult[OF this, of "inverse (a*z)"] z a_nz | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2134 | have A: "(\<lambda>n. g n * (a*z)^n) sums (sin (a*z)/(a*z))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2135 | by (simp add: field_simps g_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2136 | with z show "(\<lambda>n. g n * (a*z)^n) sums (G z)" by (simp add: G_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2137 | from A z a_nz sin_nz have g_nz: "(\<Sum>n. g n * (a*z)^n) \<noteq> 0" by (simp add: sums_iff g_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2138 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2139 | have [simp]: "sin_coeff (Suc 0) = 1" by (simp add: sin_coeff_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2140 | from sums_split_initial_segment[OF sums_diff[OF cos_converges[of "a*z"] A], of 1] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2141 | have "(\<lambda>n. z * f n * (a*z)^n) sums (cos (a*z) - sin (a*z) / (a*z))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2142 | by (simp add: mult_ac scaleR_conv_of_real ring_distribs f_def g_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2143 | from sums_mult[OF this, of "inverse z"] z assms | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2144 | show "(\<lambda>n. f n * (a*z)^n) sums (F z)" by (simp add: divide_simps mult_ac f_def F_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2145 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2146 | assume z: "z = 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2147 | have "(\<lambda>n. f n * (a * z) ^ n) sums f 0" using powser_sums_zero[of f] z by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2148 | with z show "(\<lambda>n. f n * (a * z) ^ n) sums (F z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2149 | by (simp add: f_def F_def sin_coeff_def cos_coeff_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2150 | have "(\<lambda>n. g n * (a * z) ^ n) sums g 0" using powser_sums_zero[of g] z by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2151 | with z show "(\<lambda>n. g n * (a * z) ^ n) sums (G z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2152 | by (simp add: g_def G_def sin_coeff_def cos_coeff_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2153 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2154 | note sums = conjunct1[OF this] conjunct2[OF this] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2155 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2156 | define h2 where [abs_def]: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2157 | "h2 z = (\<Sum>n. f n * (a*z)^n) / (\<Sum>n. g n * (a*z)^n) + Digamma (1 + z) - Digamma (1 - z)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2158 | define POWSER where [abs_def]: "POWSER f z = (\<Sum>n. f n * (z^n :: complex))" for f z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2159 | define POWSER' where [abs_def]: "POWSER' f z = (\<Sum>n. diffs f n * (z^n))" for f and z :: complex | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2160 | define h2' where [abs_def]: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2161 | "h2' z = a * (POWSER g (a*z) * POWSER' f (a*z) - POWSER f (a*z) * POWSER' g (a*z)) / | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2162 | (POWSER g (a*z))^2 + Polygamma 1 (1 + z) + Polygamma 1 (1 - z)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2163 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2164 | have h_eq: "h t = h2 t" if "abs (Re t) < 1" for t | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2165 | proof - | 
| 71633 | 2166 | from that have t: "t \<in> \<int> \<longleftrightarrow> t = 0" by (auto elim!: Ints_cases) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2167 | hence "h t = a*cot (a*t) - 1/t + Digamma (1 + t) - Digamma (1 - t)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2168 | unfolding h_def using Digamma_plus1[of t] by (force simp: field_simps a_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2169 | also have "a*cot (a*t) - 1/t = (F t) / (G t)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2170 | using t by (auto simp add: divide_simps sin_eq_0 cot_def a_def F_def G_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2171 | also have "\<dots> = (\<Sum>n. f n * (a*t)^n) / (\<Sum>n. g n * (a*t)^n)" | 
| 71633 | 2172 | using sums[of t] that by (simp add: sums_iff) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2173 | finally show "h t = h2 t" by (simp only: h2_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2174 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2175 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2176 |   let ?A = "{z. abs (Re z) < 1}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2177 |   have "open ({z. Re z < 1} \<inter> {z. Re z > -1})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2178 | using open_halfspace_Re_gt open_halfspace_Re_lt by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2179 |   also have "({z. Re z < 1} \<inter> {z. Re z > -1}) = {z. abs (Re z) < 1}" by auto
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2180 | finally have open_A: "open ?A" . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2181 | hence [simp]: "interior ?A = ?A" by (simp add: interior_open) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2182 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2183 | have summable_f: "summable (\<lambda>n. f n * z^n)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2184 | by (rule powser_inside, rule sums_summable, rule sums[of "\<i> * of_real (norm z + 1) / a"]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2185 | (simp_all add: norm_mult a_def del: of_real_add) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2186 | have summable_g: "summable (\<lambda>n. g n * z^n)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2187 | by (rule powser_inside, rule sums_summable, rule sums[of "\<i> * of_real (norm z + 1) / a"]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2188 | (simp_all add: norm_mult a_def del: of_real_add) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2189 | have summable_fg': "summable (\<lambda>n. diffs f n * z^n)" "summable (\<lambda>n. diffs g n * z^n)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2190 | by (intro termdiff_converges_all summable_f summable_g)+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2191 | have "(POWSER f has_field_derivative (POWSER' f z)) (at z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2192 | "(POWSER g has_field_derivative (POWSER' g z)) (at z)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2193 | unfolding POWSER_def POWSER'_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2194 | by (intro termdiffs_strong_converges_everywhere summable_f summable_g)+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2195 | note derivs = this[THEN DERIV_chain2[OF _ DERIV_cmult[OF DERIV_ident]], unfolded POWSER_def] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2196 | have "isCont (POWSER f) z" "isCont (POWSER g) z" "isCont (POWSER' f) z" "isCont (POWSER' g) z" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2197 | for z unfolding POWSER_def POWSER'_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2198 | by (intro isCont_powser_converges_everywhere summable_f summable_g summable_fg')+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2199 | note cont = this[THEN isCont_o2[rotated], unfolded POWSER_def POWSER'_def] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2200 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2201 |   {
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2202 | fix z :: complex assume z: "abs (Re z) < 1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2203 | define d where "d = \<i> * of_real (norm z + 1)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2204 | have d: "abs (Re d) < 1" "norm z < norm d" by (simp_all add: d_def norm_mult del: of_real_add) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2205 | have "eventually (\<lambda>z. h z = h2 z) (nhds z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2206 | using eventually_nhds_in_nhd[of z ?A] using h_eq z | 
| 71633 | 2207 | by (auto elim!: eventually_mono) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2208 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2209 | moreover from sums(2)[OF z] z have nz: "(\<Sum>n. g n * (a * z) ^ n) \<noteq> 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2210 | unfolding G_def by (auto simp: sums_iff sin_eq_0 a_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2211 | have A: "z \<in> \<int> \<longleftrightarrow> z = 0" using z by (auto elim!: Ints_cases) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2212 | have no_int: "1 + z \<in> \<int> \<longleftrightarrow> z = 0" using z Ints_diff[of "1+z" 1] A | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2213 | by (auto elim!: nonpos_Ints_cases) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2214 | have no_int': "1 - z \<in> \<int> \<longleftrightarrow> z = 0" using z Ints_diff[of 1 "1-z"] A | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2215 | by (auto elim!: nonpos_Ints_cases) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2216 | from no_int no_int' have no_int: "1 - z \<notin> \<int>\<^sub>\<le>\<^sub>0" "1 + z \<notin> \<int>\<^sub>\<le>\<^sub>0" by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2217 | have "(h2 has_field_derivative h2' z) (at z)" unfolding h2_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2218 | by (rule DERIV_cong, (rule derivative_intros refl derivs[unfolded POWSER_def] nz no_int)+) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2219 | (auto simp: h2'_def POWSER_def field_simps power2_eq_square) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2220 | ultimately have deriv: "(h has_field_derivative h2' z) (at z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2221 | by (subst DERIV_cong_ev[OF refl _ refl]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2222 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2223 | from sums(2)[OF z] z have "(\<Sum>n. g n * (a * z) ^ n) \<noteq> 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2224 | unfolding G_def by (auto simp: sums_iff a_def sin_eq_0) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2225 | hence "isCont h2' z" using no_int unfolding h2'_def[abs_def] POWSER_def POWSER'_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2226 | by (intro continuous_intros cont | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2227 |             continuous_on_compose2[OF _ continuous_on_Polygamma[of "{z. Re z > 0}"]]) auto
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2228 | note deriv and this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2229 | } note A = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2230 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2231 | interpret h: periodic_fun_simple' h | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2232 | proof | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2233 | fix z :: complex | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2234 | show "h (z + 1) = h z" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2235 | proof (cases "z \<in> \<int>") | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2236 | assume z: "z \<notin> \<int>" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2237 | hence A: "z + 1 \<notin> \<int>" "z \<noteq> 0" using Ints_diff[of "z+1" 1] by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2238 | hence "Digamma (z + 1) - Digamma (-z) = Digamma z - Digamma (-z + 1)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2239 | by (subst (1 2) Digamma_plus1) simp_all | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2240 | with A z show "h (z + 1) = h z" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2241 | by (simp add: h_def sin_plus_pi cos_plus_pi ring_distribs cot_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2242 | qed (simp add: h_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2243 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2244 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2245 | have h2'_eq: "h2' (z - 1) = h2' z" if z: "Re z > 0" "Re z < 1" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2246 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2247 | have "((\<lambda>z. h (z - 1)) has_field_derivative h2' (z - 1)) (at z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2248 | by (rule DERIV_cong, rule DERIV_chain'[OF _ A(1)]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2249 | (insert z, auto intro!: derivative_eq_intros) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2250 | hence "(h has_field_derivative h2' (z - 1)) (at z)" by (subst (asm) h.minus_1) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2251 | moreover from z have "(h has_field_derivative h2' z) (at z)" by (intro A) simp_all | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2252 | ultimately show "h2' (z - 1) = h2' z" by (rule DERIV_unique) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2253 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2254 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2255 | define h2'' where "h2'' z = h2' (z - of_int \<lfloor>Re z\<rfloor>)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2256 | have deriv: "(h has_field_derivative h2'' z) (at z)" for z | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2257 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2258 | fix z :: complex | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2259 | have B: "\<bar>Re z - real_of_int \<lfloor>Re z\<rfloor>\<bar> < 1" by linarith | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2260 | have "((\<lambda>t. h (t - of_int \<lfloor>Re z\<rfloor>)) has_field_derivative h2'' z) (at z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2261 | unfolding h2''_def by (rule DERIV_cong, rule DERIV_chain'[OF _ A(1)]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2262 | (insert B, auto intro!: derivative_intros) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2263 | thus "(h has_field_derivative h2'' z) (at z)" by (simp add: h.minus_of_int) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2264 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2265 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2266 | have cont: "continuous_on UNIV h2''" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2267 | proof (intro continuous_at_imp_continuous_on ballI) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2268 | fix z :: complex | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2269 | define r where "r = \<lfloor>Re z\<rfloor>" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2270 |     define A where "A = {t. of_int r - 1 < Re t \<and> Re t < of_int r + 1}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2271 | have "continuous_on A (\<lambda>t. h2' (t - of_int r))" unfolding A_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2272 | by (intro continuous_at_imp_continuous_on isCont_o2[OF _ A(2)] ballI continuous_intros) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2273 | (simp_all add: abs_real_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2274 | moreover have "h2'' t = h2' (t - of_int r)" if t: "t \<in> A" for t | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2275 | proof (cases "Re t \<ge> of_int r") | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2276 | case True | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2277 | from t have "of_int r - 1 < Re t" "Re t < of_int r + 1" by (simp_all add: A_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2278 | with True have "\<lfloor>Re t\<rfloor> = \<lfloor>Re z\<rfloor>" unfolding r_def by linarith | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2279 | thus ?thesis by (auto simp: r_def h2''_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2280 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2281 | case False | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2282 | from t have t: "of_int r - 1 < Re t" "Re t < of_int r + 1" by (simp_all add: A_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2283 | with False have t': "\<lfloor>Re t\<rfloor> = \<lfloor>Re z\<rfloor> - 1" unfolding r_def by linarith | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2284 | moreover from t False have "h2' (t - of_int r + 1 - 1) = h2' (t - of_int r + 1)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2285 | by (intro h2'_eq) simp_all | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2286 | ultimately show ?thesis by (auto simp: r_def h2''_def algebra_simps t') | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2287 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2288 | ultimately have "continuous_on A h2''" by (subst continuous_on_cong[OF refl]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2289 |     moreover {
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2290 |       have "open ({t. of_int r - 1 < Re t} \<inter> {t. of_int r + 1 > Re t})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2291 | by (intro open_Int open_halfspace_Re_gt open_halfspace_Re_lt) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2292 |       also have "{t. of_int r - 1 < Re t} \<inter> {t. of_int r + 1 > Re t} = A"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2293 | unfolding A_def by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2294 | finally have "open A" . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2295 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2296 | ultimately have C: "isCont h2'' t" if "t \<in> A" for t using that | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2297 | by (subst (asm) continuous_on_eq_continuous_at) auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2298 | have "of_int r - 1 < Re z" "Re z < of_int r + 1" unfolding r_def by linarith+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2299 | thus "isCont h2'' z" by (intro C) (simp_all add: A_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2300 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2301 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2302 | from that[OF cont deriv] show ?thesis . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2303 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2304 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2305 | lemma Gamma_reflection_complex: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2306 | fixes z :: complex | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2307 | 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 | 2308 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2309 | let ?g = "\<lambda>z::complex. Gamma z * Gamma (1 - z) * sin (of_real pi * z)" | 
| 63040 | 2310 | 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 | 2311 | let ?h = "\<lambda>z::complex. (of_real pi * cot (of_real pi*z) + Digamma z - Digamma (1 - z))" | 
| 63040 | 2312 | 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 | 2313 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2314 |   \<comment> \<open>@{term g} 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 | 2315 | interpret g: periodic_fun_simple' g | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2316 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2317 | fix z :: complex | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2318 | show "g (z + 1) = g z" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2319 | proof (cases "z \<in> \<int>") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2320 | case False | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2321 | 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: 
62085diff
changeset | 2322 | 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 | 2323 | 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 | 2324 | 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 | 2325 | 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 | 2326 | 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 | 2327 | by (subst Beta_plus1_right) (auto simp: ring_distribs sin_plus_pi) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2328 | 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 | 2329 | 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 | 2330 | 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 | 2331 | qed (simp add: g_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2332 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2333 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2334 |   \<comment> \<open>@{term g} is entire.\<close>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2335 | have g_g': "(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 | 2336 | proof (cases "z \<in> \<int>") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2337 | 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 | 2338 | 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 | 2339 | case False | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2340 | 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 | 2341 | 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 | 2342 | 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 | 2343 |     moreover {
 | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2344 | 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 | 2345 | 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 | 2346 | 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 | 2347 | 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 | 2348 | 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 | 2349 | 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 | 2350 | 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 | 2351 | } | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2352 | 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 | 2353 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2354 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2355 | 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 | 2356 | 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 | 2357 | 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 | 2358 | 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 | 2359 | 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 | 2360 | 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 | 2361 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2362 | 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 | 2363 | 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 | 2364 | proof (cases "z = 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2365 | assume z': "z \<noteq> 0" | 
| 71633 | 2366 | with z have z'': "z \<notin> \<int>\<^sub>\<le>\<^sub>0" "z \<notin> \<int>" by (auto elim!: Ints_cases) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2367 | 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 | 2368 | 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 | 2369 | qed (simp add: g_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2370 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2371 | have "(?t has_field_derivative (0 * of_real pi)) (at 0)" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2372 | 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 | 2373 | by (intro DERIV_chain) simp_all | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2374 | 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 | 2375 | 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 | 2376 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2377 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2378 | 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 | 2379 | 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 | 2380 | 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 | 2381 | 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 | 2382 | qed | 
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 2383 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2384 | 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 | 2385 | proof (cases "z \<in> \<int>") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2386 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2387 | 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 | 2388 | 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 | 2389 | 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 | 2390 | 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 | 2391 | 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 | 2392 | 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 | 2393 | ultimately show ?thesis by force | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2394 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2395 | case False | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2396 | 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 | 2397 | 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: 
62085diff
changeset | 2398 | 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 | 2399 | 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 | 2400 | 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: 
62085diff
changeset | 2401 | 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 | 2402 | (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 | 2403 | (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 | 2404 | by (simp add: g_def) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2405 | 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 | 2406 | 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 | 2407 | by (simp add: add_divide_distrib) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2408 | also from z'' Gamma_legendre_duplication_aux[of "1-(z+1)/2"] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2409 | 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 | 2410 | 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 | 2411 | 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 | 2412 | 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 | 2413 | (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 | 2414 | 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 | 2415 | 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 | 2416 | 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 | 2417 | 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 | 2418 | 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 | 2419 | 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 | 2420 | 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 | 2421 | 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 | 2422 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2423 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2424 | 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 | 2425 | proof - | 
| 63040 | 2426 | 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 | 2427 | 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 | 2428 | 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 | 2429 | 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: 
62085diff
changeset | 2430 | hence "Gamma (1/2)^2 * g (z - 2 * of_int r) = | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2431 | 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 | 2432 | 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 | 2433 | 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 | 2434 | 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 | 2435 | 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 | 2436 | 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 | 2437 | finally show ?thesis .. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2438 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2439 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2440 | 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 | 2441 | 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 | 2442 | 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: 
66453diff
changeset | 2443 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2444 | 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 | 2445 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2446 | 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 | 2447 | (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 | 2448 | 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 | 2449 | 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 | 2450 | 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 | 2451 | 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 | 2452 | 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 | 2453 | 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 | 2454 | 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 | 2455 | 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 | 2456 | 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 | 2457 | 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 | 2458 | 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 | 2459 | by (intro DERIV_unique) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2460 | 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 | 2461 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2462 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2463 | obtain h' where h'_cont: "continuous_on UNIV h'" and | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2464 | h_h': "\<And>z. (h has_field_derivative h' z) (at z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2465 | unfolding h_def by (erule Gamma_reflection_aux) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2466 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2467 | 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 | 2468 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2469 | 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: 
62085diff
changeset | 2470 | ((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 | 2471 | 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 | 2472 | 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 | 2473 | by (subst (asm) h_eq[symmetric]) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2474 | 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 | 2475 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2476 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2477 | 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 | 2478 | proof - | 
| 63040 | 2479 | define m where "m = max 1 \<bar>Re z\<bar>" | 
| 2480 |     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: 
62085diff
changeset | 2481 |     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 | 2482 |                   {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: 
62085diff
changeset | 2483 | (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 | 2484 | 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 | 2485 | 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 | 2486 | finally have "closed B" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2487 | 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 | 2488 | proof (intro ballI exI) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2489 | 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 | 2490 | 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 | 2491 | 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 | 2492 | 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 | 2493 | 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 | 2494 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2495 | ultimately have compact: "compact B" by (subst compact_eq_bounded_closed) blast | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2496 | |
| 69260 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 haftmann parents: 
69064diff
changeset | 2497 | 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 | 2498 | have "compact (h' ` B)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2499 | 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 | 2500 | 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 | 2501 | 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 | 2502 | 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 | 2503 | also have "M \<le> M/2" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2504 | 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 | 2505 | 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 | 2506 |       thus "B \<noteq> {}" by auto
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2507 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2508 | 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 | 2509 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2510 | fix t :: complex assume t: "t \<in> B" | 
| 71633 | 2511 | from h'_eq[of t] t have "h' t = (h' (t/2) + h' ((t+1)/2)) / 4" by (simp) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2512 | 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 | 2513 | 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 | 2514 | by (rule norm_triangle_ineq) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2515 | 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: 
62085diff
changeset | 2516 | 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: 
62085diff
changeset | 2517 | 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 | 2518 | 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 | 2519 | 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 | 2520 | 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 | 2521 | qed | 
| 71633 | 2522 | qed (insert bdd, auto) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2523 | hence "M \<le> 0" by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2524 | 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 | 2525 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2526 | 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 | 2527 | using h_h'[of z] h'_zero[of z] by simp | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2528 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2529 | 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 | 2530 | 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 | 2531 | 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 | 2532 | unfolding h_def using that by (auto intro!: Reals_mult Reals_add Reals_diff Polygamma_Real) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2533 | have g_nz: "g z \<noteq> 0" for z unfolding g_def using Ints_diff[of 1 "1-z"] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2534 | by (auto simp: Gamma_eq_zero_iff sin_eq_0) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2535 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2536 | from h'_zero h_h'_2 have "\<exists>c. \<forall>z\<in>UNIV. h z = c" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2537 | by (intro has_field_derivative_zero_constant) (simp_all add: dist_0_norm) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2538 | 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 | 2539 | 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 | 2540 | by (intro complex_mvt_line g_g') | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2541 | then obtain u where u: "u \<in> closed_segment 0 1" "Re (g 1) - Re (g 0) = Re (h u * g u)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2542 | by auto | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2543 | 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 | 2544 | 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 | 2545 | 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 | 2546 | 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 | 2547 | 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 | 2548 | 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 | 2549 | 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 | 2550 | 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 | 2551 | hence "\<exists>c'. \<forall>z\<in>UNIV. g z = c'" by (intro has_field_derivative_zero_constant) simp_all | 
| 71633 | 2552 | then obtain c' where c: "\<And>z. g z = c'" by (force) | 
| 63539 | 2553 | from this[of 0] have "c' = pi" unfolding g_def by simp | 
| 2554 | with c have "g z = pi" by simp | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2555 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2556 | show ?thesis | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2557 | proof (cases "z \<in> \<int>") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2558 | case False | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
70817diff
changeset | 2559 | 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 | 2560 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2561 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2562 | 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 | 2563 | 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 | 2564 | 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 | 2565 | ultimately show ?thesis using n | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2566 | 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 | 2567 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2568 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2569 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2570 | lemma rGamma_reflection_complex: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2571 | "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 | 2572 | using Gamma_reflection_complex[of z] | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2573 | by (simp add: Gamma_def field_split_simps split: if_split_asm) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2574 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2575 | lemma rGamma_reflection_complex': | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2576 | "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 | 2577 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2578 | 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 | 2579 | 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 | 2580 | 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 | 2581 | by (rule rGamma_reflection_complex) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2582 | finally show ?thesis by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2583 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2584 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2585 | lemma Gamma_reflection_complex': | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2586 | "Gamma z * Gamma (- z :: complex) = - of_real pi / (z * sin (of_real pi * z))" | 
| 71633 | 2587 | using rGamma_reflection_complex'[of z] by (force simp add: Gamma_def field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2588 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2589 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2590 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2591 | 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 | 2592 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2593 | 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 | 2594 | 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 | 2595 | 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 | 2596 | 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 | 2597 | 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 | 2598 | 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 | 2599 | 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 | 2600 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2601 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2602 | 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 | 2603 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2604 | 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 | 2605 | 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 | 2606 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2607 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2608 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 2609 | theorem Gamma_legendre_duplication: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2610 | fixes z :: complex | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2611 | 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: 
62085diff
changeset | 2612 | 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 | 2613 | 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 | 2614 | 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 | 2615 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2616 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2617 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2618 | |
| 70136 | 2619 | 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 | 2620 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2621 | text \<open> | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2622 | 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 | 2623 | \<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2624 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2625 | lemma rGamma_zeros: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2626 | "(\<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 | 2627 | proof (subst tendsto_cong) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2628 | 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 | 2629 | 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: 
62085diff
changeset | 2630 | 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 | 2631 | by (subst pochhammer_rGamma[of _ "Suc n"]) | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2632 | (auto elim!: eventually_mono simp: field_split_simps pochhammer_rec' eq_neg_iff_add_eq_0) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2633 | 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 | 2634 | 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 | 2635 | by (simp add: pochhammer_same) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2636 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2637 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2638 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2639 | text \<open> | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2640 | 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 | 2641 | 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 | 2642 | \<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2643 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2644 | 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 | 2645 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2646 | 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 | 2647 | 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 | 2648 | 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 | 2649 | simp: rGamma_eq_zero_iff dist_of_nat dist_minus) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2650 | 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 | 2651 | 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 | 2652 | 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 | 2653 | (simp_all add: filterlim_at) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2654 | 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 | 2655 | 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 | 2656 | ultimately show ?thesis by (simp only: ) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2657 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2658 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2659 | lemma Gamma_residues: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2660 | "(\<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 | 2661 | proof (subst tendsto_cong) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2662 | 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 | 2663 | 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: 
62085diff
changeset | 2664 | 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: 
62085diff
changeset | 2665 | (at (- of_nat n))" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2666 | by (auto elim!: eventually_mono simp: field_split_simps rGamma_inverse_Gamma) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2667 | 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 | 2668 | inverse ((- 1) ^ n * fact n :: 'a)" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2669 | by (intro tendsto_intros rGamma_zeros) simp_all | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2670 | also have "inverse ((- 1) ^ n * fact n) = ?c" | 
| 68403 | 2671 | 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 | 2672 | 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 | 2673 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2674 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2675 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2676 | subsection \<open>Alternative definitions\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2677 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2678 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2679 | 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 | 2680 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2681 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2682 | definition Gamma_series_euler' where | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2683 | "Gamma_series_euler' z n = | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2684 | 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 | 2685 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2686 | context | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2687 | begin | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2688 | private lemma Gamma_euler'_aux1: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2689 |   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 | 2690 | assumes n: "n > 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2691 | 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 | 2692 | proof - | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2693 | 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 | 2694 | exp (z * of_real (\<Sum>k = 1..n. ln (1 + 1 / real_of_nat k)))" | 
| 64267 | 2695 | 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 | 2696 | 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 | 2697 | 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 | 2698 | also have "(\<Prod>k=1..n. 1 + 1 / of_nat k :: real) = (\<Prod>k=1..n. (of_nat k + 1) / of_nat k)" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2699 | by (intro prod.cong) (simp_all add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2700 | also have "(\<Prod>k=1..n. (of_nat k + 1) / of_nat k :: real) = of_nat n + 1" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2701 | by (induction n) (simp_all add: prod.nat_ivl_Suc' field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2702 | finally show ?thesis .. | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2703 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2704 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 2705 | theorem Gamma_series_euler': | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2706 | 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 | 2707 | 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 | 2708 | 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 | 2709 | 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 | 2710 | 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 | 2711 | 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 | 2712 | 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 | 2713 | |
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 2714 | have "eventually (\<lambda>n. ?r' n = ?r n) sequentially" | 
| 71633 | 2715 | using z by (auto simp: field_split_simps Gamma_series_def ring_distribs exp_diff ln_div | 
| 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: 
64969diff
changeset | 2716 | 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 | 2717 | 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 | 2718 | 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: 
70196diff
changeset | 2719 | ultimately show "?r \<longlonglongrightarrow> 1" by (force intro: Lim_transform_eventually) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2720 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2721 | 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 | 2722 | 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 | 2723 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2724 | fix n :: nat assume n: "n > 0" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2725 | 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 | 2726 | 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: 
62085diff
changeset | 2727 | by (subst Gamma_euler'_aux1) | 
| 64272 | 2728 | (simp_all add: Gamma_series_euler'_def prod.distrib | 
| 2729 | prod_inversef[symmetric] divide_inverse) | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2730 | 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: 
69597diff
changeset | 2731 | 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: 
69597diff
changeset | 2732 | 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: 
69597diff
changeset | 2733 | 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: 
69597diff
changeset | 2734 | 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: 
69597diff
changeset | 2735 | 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: 
69597diff
changeset | 2736 | 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: 
69597diff
changeset | 2737 | qed auto | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2738 | 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 | 2739 | 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 | 2740 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2741 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2742 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2743 | end | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2744 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2745 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2746 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2747 | subsubsection \<open>Weierstrass form\<close> | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2748 | |
| 69529 | 2749 | definition Gamma_series_Weierstrass :: "'a :: {banach,real_normed_field} \<Rightarrow> nat \<Rightarrow> 'a" where
 | 
| 2750 | "Gamma_series_Weierstrass z n = | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2751 | 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 | 2752 | |
| 70136 | 2753 | definition\<^marker>\<open>tag unimportant\<close> | 
| 69529 | 2754 |   rGamma_series_Weierstrass :: "'a :: {banach,real_normed_field} \<Rightarrow> nat \<Rightarrow> 'a" where
 | 
| 2755 | "rGamma_series_Weierstrass z n = | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2756 | 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 | 2757 | |
| 69529 | 2758 | lemma Gamma_series_Weierstrass_nonpos_Ints: | 
| 2759 | "eventually (\<lambda>k. Gamma_series_Weierstrass (- of_nat n) k = 0) sequentially" | |
| 2760 | using eventually_ge_at_top[of n] by eventually_elim (auto simp: Gamma_series_Weierstrass_def) | |
| 2761 | ||
| 2762 | lemma rGamma_series_Weierstrass_nonpos_Ints: | |
| 2763 | "eventually (\<lambda>k. rGamma_series_Weierstrass (- of_nat n) k = 0) sequentially" | |
| 2764 | using eventually_ge_at_top[of n] by eventually_elim (auto simp: rGamma_series_Weierstrass_def) | |
| 2765 | ||
| 2766 | 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 | 2767 | 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 | 2768 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2769 | then obtain n where "z = - of_nat n" by (elim nonpos_Ints_cases') | 
| 69529 | 2770 | also from True have "Gamma_series_Weierstrass \<dots> \<longlonglongrightarrow> Gamma z" | 
| 2771 | 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 | 2772 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2773 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2774 | case False | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2775 | 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 | 2776 | 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 | 2777 | 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 | 2778 | 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 | 2779 | 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 | 2780 | using ln_Gamma_series'_aux[OF False] | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2781 | 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: 
69597diff
changeset | 2782 | 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 | 2783 | from tendsto_exp[OF this] False z have "?f \<longlonglongrightarrow> z * exp (euler_mascheroni * z) * Gamma z" | 
| 64267 | 2784 | 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 | 2785 | from tendsto_mult[OF tendsto_const[of "exp (-euler_mascheroni * z) / z"] this] z | 
| 69529 | 2786 | show "Gamma_series_Weierstrass z \<longlonglongrightarrow> Gamma z" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2787 | by (simp add: exp_minus field_split_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 | 2788 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2789 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2790 | 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: 
62085diff
changeset | 2791 | by (rule tendsto_of_real_iff) | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2792 | |
| 69529 | 2793 | lemma Gamma_Weierstrass_real: "Gamma_series_Weierstrass x \<longlonglongrightarrow> Gamma (x :: real)" | 
| 2794 | 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 | 2795 | 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 | 2796 | (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 | 2797 | |
| 69529 | 2798 | 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 | 2799 | 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 | 2800 | case True | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2801 | then obtain n where "z = - of_nat n" by (elim nonpos_Ints_cases') | 
| 69529 | 2802 | also from True have "rGamma_series_Weierstrass \<dots> \<longlonglongrightarrow> rGamma z" | 
| 2803 | 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 | 2804 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2805 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2806 | case False | 
| 69529 | 2807 | have "rGamma_series_Weierstrass z = (\<lambda>n. inverse (Gamma_series_Weierstrass z n))" | 
| 2808 | by (simp add: rGamma_series_Weierstrass_def[abs_def] Gamma_series_Weierstrass_def | |
| 64272 | 2809 | 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 | 2810 | also from False have "\<dots> \<longlonglongrightarrow> inverse (Gamma z)" | 
| 69529 | 2811 | 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 | 2812 | 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 | 2813 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 2814 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2815 | subsubsection \<open>Binomial coefficient form\<close> | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2816 | |
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2817 | lemma Gamma_gbinomial: | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2818 | "(\<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: 
62072diff
changeset | 2819 | proof (cases "z = 0") | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2820 | case False | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2821 | show ?thesis | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2822 | proof (rule Lim_transform_eventually) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2823 | 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: 
62085diff
changeset | 2824 | show "eventually (\<lambda>n. rGamma_series z n / z = | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2825 | ((z + of_nat n) gchoose n) * ?powr n (-z)) sequentially" | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2826 | proof (intro always_eventually allI) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2827 | fix n :: nat | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2828 | 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: 
62072diff
changeset | 2829 | by (simp add: gbinomial_pochhammer' pochhammer_rec) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2830 | also have "pochhammer z (Suc n) / z / fact n * ?powr n (-z) = rGamma_series z n / z" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 2831 | by (simp add: rGamma_series_def field_split_simps exp_minus) | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2832 | 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: 
62072diff
changeset | 2833 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2834 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2835 | 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: 
62085diff
changeset | 2836 | 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: 
62072diff
changeset | 2837 | by (simp add: field_simps) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2838 | 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: 
62072diff
changeset | 2839 | qed | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2840 | qed (simp_all add: binomial_gbinomial [symmetric]) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2841 | |
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2842 | 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: 
63040diff
changeset | 2843 | by (subst gbinomial_minus) (simp add: power_mult_distrib [symmetric]) | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2844 | |
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2845 | lemma gbinomial_asymptotic: | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2846 | fixes z :: "'a :: Gamma" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 2847 | 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: 
63040diff
changeset | 2848 | inverse (Gamma (- z))" | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 2849 | unfolding rGamma_inverse_Gamma [symmetric] using Gamma_gbinomial[of "-z-1"] | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2850 | by (subst (asm) gbinomial_minus') | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2851 | (simp add: add_ac mult_ac divide_inverse power_inverse [symmetric]) | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2852 | |
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 2853 | lemma fact_binomial_limit: | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2854 | "(\<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: 
62072diff
changeset | 2855 | proof (rule Lim_transform_eventually) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2856 | 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: 
62072diff
changeset | 2857 | \<longlonglongrightarrow> 1 / Gamma (of_nat (Suc k) :: 'a)" (is "?f \<longlonglongrightarrow> _") | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2858 | using Gamma_gbinomial[of "of_nat k :: 'a"] | 
| 71633 | 2859 | by (simp add: binomial_gbinomial Gamma_def field_split_simps exp_of_real [symmetric] exp_minus) | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2860 | 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: 
62072diff
changeset | 2861 | finally show "?f \<longlonglongrightarrow> 1 / fact k" . | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2862 | |
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2863 | 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: 
62072diff
changeset | 2864 | using eventually_gt_at_top[of "0::nat"] | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2865 | proof eventually_elim | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2866 | fix n :: nat assume n: "n > 0" | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2867 | 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: 
62072diff
changeset | 2868 | by (simp add: exp_of_nat_mult) | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2869 | 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: 
62072diff
changeset | 2870 | qed | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2871 | qed | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2872 | |
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2873 | lemma binomial_asymptotic': | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2874 | "(\<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: 
62072diff
changeset | 2875 | 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: 
62072diff
changeset | 2876 | |
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2877 | lemma gbinomial_Beta: | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2878 | assumes "z + 1 \<notin> \<int>\<^sub>\<le>\<^sub>0" | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2879 | 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: 
63040diff
changeset | 2880 | using assms | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2881 | proof (induction n arbitrary: z) | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2882 | case 0 | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2883 | hence "z + 2 \<notin> \<int>\<^sub>\<le>\<^sub>0" | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2884 | 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: 
63040diff
changeset | 2885 | with 0 show ?case | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2886 | 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: 
63040diff
changeset | 2887 | next | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2888 | case (Suc n z) | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2889 | show ?case | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2890 | proof (cases "z \<in> \<int>\<^sub>\<le>\<^sub>0") | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2891 | case True | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2892 | with Suc.prems have "z = 0" | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2893 | 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: 
63040diff
changeset | 2894 | show ?thesis | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2895 | proof (cases "n = 0") | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2896 | case True | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2897 | with \<open>z = 0\<close> show ?thesis | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2898 | by (simp add: Beta_def Gamma_eq_zero_iff Gamma_plus1 [symmetric]) | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2899 | next | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2900 | case False | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2901 | with \<open>z = 0\<close> show ?thesis | 
| 71633 | 2902 | by (simp_all add: Beta_pole1 one_minus_of_nat_in_nonpos_Ints_iff) | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2903 | qed | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2904 | next | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2905 | case False | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2906 | have "(z gchoose (Suc n)) = ((z - 1 + 1) gchoose (Suc n))" by simp | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2907 | 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: 
63040diff
changeset | 2908 | by (subst gbinomial_factors) (simp add: field_simps) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 2909 | 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: 
63040diff
changeset | 2910 | (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: 
63040diff
changeset | 2911 | 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: 
63040diff
changeset | 2912 | 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: 
63040diff
changeset | 2913 | by (subst Beta_plus1_right [symmetric]) simp_all | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2914 | finally show ?thesis . | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2915 | qed | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2916 | qed | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2917 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 2918 | theorem gbinomial_Gamma: | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2919 | assumes "z + 1 \<notin> \<int>\<^sub>\<le>\<^sub>0" | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2920 | 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: 
63040diff
changeset | 2921 | proof - | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2922 | 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: 
63040diff
changeset | 2923 | 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: 
63040diff
changeset | 2924 | also from assms have "Gamma (z + 2) / (z + 1) = Gamma (z + 1)" | 
| 71633 | 2925 | using Gamma_plus1[of "z+1"] by (auto simp add: field_split_simps) | 
| 63295 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2926 | finally show ?thesis . | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2927 | qed | 
| 
52792bb9126e
Facts about HK integration, complex powers, Gamma function
 eberlm parents: 
63040diff
changeset | 2928 | |
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 2929 | |
| 63296 | 2930 | subsubsection \<open>Integral form\<close> | 
| 2931 | ||
| 66526 | 2932 | lemma integrable_on_powr_from_0': | 
| 2933 | assumes a: "a > (-1::real)" and c: "c \<ge> 0" | |
| 2934 |   shows   "(\<lambda>x. x powr a) integrable_on {0<..c}"
 | |
| 2935 | proof - | |
| 2936 |   from c have *: "{0<..c} - {0..c} = {}" "{0..c} - {0<..c} = {0}" by auto
 | |
| 2937 | show ?thesis | |
| 2938 | by (rule integrable_spike_set [OF integrable_on_powr_from_0[OF a c]]) (simp_all add: *) | |
| 2939 | qed | |
| 2940 | ||
| 2941 | lemma absolutely_integrable_Gamma_integral: | |
| 2942 | assumes "Re z > 0" "a > 0" | |
| 2943 | shows "(\<lambda>t. complex_of_real t powr (z - 1) / of_real (exp (a * t))) | |
| 2944 |              absolutely_integrable_on {0<..}" (is "?f absolutely_integrable_on _")
 | |
| 2945 | proof - | |
| 2946 | have "((\<lambda>x. (Re z - 1) * (ln x / x)) \<longlongrightarrow> (Re z - 1) * 0) at_top" | |
| 2947 | by (intro tendsto_intros ln_x_over_x_tendsto_0) | |
| 2948 | hence "((\<lambda>x. ((Re z - 1) * ln x) / x) \<longlongrightarrow> 0) at_top" by simp | |
| 2949 | from order_tendstoD(2)[OF this, of "a/2"] and \<open>a > 0\<close> | |
| 2950 | have "eventually (\<lambda>x. (Re z - 1) * ln x / x < a/2) at_top" by simp | |
| 2951 | from eventually_conj[OF this eventually_gt_at_top[of 0]] | |
| 2952 | obtain x0 where "\<forall>x\<ge>x0. (Re z - 1) * ln x / x < a/2 \<and> x > 0" | |
| 2953 | by (auto simp: eventually_at_top_linorder) | |
| 2954 | hence "x0 > 0" by simp | |
| 2955 | have "x powr (Re z - 1) / exp (a * x) < exp (-(a/2) * x)" if "x \<ge> x0" for x | |
| 2956 | proof - | |
| 2957 | from that and \<open>\<forall>x\<ge>x0. _\<close> have x: "(Re z - 1) * ln x / x < a / 2" "x > 0" by auto | |
| 2958 | have "x powr (Re z - 1) = exp ((Re z - 1) * ln x)" | |
| 2959 | using \<open>x > 0\<close> by (simp add: powr_def) | |
| 2960 | also from x have "(Re z - 1) * ln x < (a * x) / 2" by (simp add: field_simps) | |
| 2961 | finally show ?thesis by (simp add: field_simps exp_add [symmetric]) | |
| 2962 | qed | |
| 2963 | note x0 = \<open>x0 > 0\<close> this | |
| 2964 | ||
| 2965 |   have "?f absolutely_integrable_on ({0<..x0} \<union> {x0..})"
 | |
| 2966 | proof (rule set_integrable_Un) | |
| 2967 |     show "?f absolutely_integrable_on {0<..x0}"
 | |
| 67976 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 2968 | unfolding set_integrable_def | 
| 66526 | 2969 | 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: 
67399diff
changeset | 2970 |       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: 
67399diff
changeset | 2971 | using x0(1) assms | 
| 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 2972 | 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: 
67399diff
changeset | 2973 |       show "(\<lambda>x. indicat_real {0<..x0} x *\<^sub>R (x powr (z - 1) / exp (a * x))) \<in> borel_measurable lebesgue"
 | 
| 66526 | 2974 | by (intro measurable_completion) | 
| 2975 | (auto intro!: borel_measurable_continuous_on_indicator continuous_intros) | |
| 2976 | fix x :: real | |
| 2977 | have "x powr (Re z - 1) / exp (a * x) \<le> x powr (Re z - 1) / 1" if "x \<ge> 0" | |
| 2978 | using that assms by (intro divide_left_mono) auto | |
| 2979 |       thus "norm (indicator {0<..x0} x *\<^sub>R ?f x) \<le> 
 | |
| 2980 |                norm (indicator {0<..x0} x *\<^sub>R x powr (Re z - 1))"
 | |
| 2981 | by (simp_all add: norm_divide norm_powr_real_powr indicator_def) | |
| 2982 | qed | |
| 2983 | next | |
| 2984 |     show "?f absolutely_integrable_on {x0..}"
 | |
| 67976 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 2985 | unfolding set_integrable_def | 
| 66526 | 2986 | 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: 
67399diff
changeset | 2987 |       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: 
67399diff
changeset | 2988 | 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: 
67399diff
changeset | 2989 |       show "(\<lambda>x. indicat_real {x0..} x *\<^sub>R (x powr (z - 1) / exp (a * x))) \<in> borel_measurable lebesgue" using x0(1)
 | 
| 66526 | 2990 | by (intro measurable_completion) | 
| 2991 | (auto intro!: borel_measurable_continuous_on_indicator continuous_intros) | |
| 2992 | fix x :: real | |
| 2993 |       show "norm (indicator {x0..} x *\<^sub>R ?f x) \<le> 
 | |
| 2994 |                norm (indicator {x0..} x *\<^sub>R exp (-(a/2) * x))" using x0
 | |
| 2995 | by (auto simp: norm_divide norm_powr_real_powr indicator_def less_imp_le) | |
| 2996 | qed | |
| 2997 | qed auto | |
| 2998 |   also have "{0<..x0} \<union> {x0..} = {0<..}" using x0(1) by auto
 | |
| 2999 | finally show ?thesis . | |
| 3000 | qed | |
| 3001 | ||
| 63296 | 3002 | lemma integrable_Gamma_integral_bound: | 
| 3003 | fixes a c :: real | |
| 3004 | assumes a: "a > -1" and c: "c \<ge> 0" | |
| 3005 |   defines "f \<equiv> \<lambda>x. if x \<in> {0..c} then x powr a else exp (-x/2)"
 | |
| 3006 |   shows   "f integrable_on {0..}"
 | |
| 3007 | proof - | |
| 3008 |   have "f integrable_on {0..c}"
 | |
| 3009 |     by (rule integrable_spike_finite[of "{}", OF _ _ integrable_on_powr_from_0[of a c]])
 | |
| 3010 | (insert a c, simp_all add: f_def) | |
| 3011 |   moreover have A: "(\<lambda>x. exp (-x/2)) integrable_on {c..}"
 | |
| 3012 | using integrable_on_exp_minus_to_infinity[of "1/2"] by simp | |
| 3013 |   have "f integrable_on {c..}"
 | |
| 3014 |     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: 
63539diff
changeset | 3015 |   ultimately show "f integrable_on {0..}"
 | 
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 3016 | by (rule integrable_Un') (insert c, auto simp: max_def) | 
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 3017 | qed | 
| 63296 | 3018 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 3019 | theorem Gamma_integral_complex: | 
| 63296 | 3020 | assumes z: "Re z > 0" | 
| 3021 |   shows   "((\<lambda>t. of_real t powr (z - 1) / of_real (exp t)) has_integral Gamma z) {0..}"
 | |
| 3022 | proof - | |
| 3023 | have A: "((\<lambda>t. (of_real t) powr (z - 1) * of_real ((1 - t) ^ n)) | |
| 3024 |           has_integral (fact n / pochhammer z (n+1))) {0..1}"
 | |
| 3025 | if "Re z > 0" for n z using that | |
| 3026 | proof (induction n arbitrary: z) | |
| 3027 | case 0 | |
| 3028 | have "((\<lambda>t. complex_of_real t powr (z - 1)) has_integral | |
| 3029 |             (of_real 1 powr z / z - of_real 0 powr z / z)) {0..1}" using 0
 | |
| 3030 | by (intro fundamental_theorem_of_calculus_interior) | |
| 70707 
125705f5965f
A little-known material, and some tidying up
 paulson <lp15@cam.ac.uk> parents: 
70532diff
changeset | 3031 | (auto intro!: continuous_intros derivative_eq_intros has_vector_derivative_real_field) | 
| 63296 | 3032 | thus ?case by simp | 
| 3033 | next | |
| 3034 | case (Suc n) | |
| 3035 | let ?f = "\<lambda>t. complex_of_real t powr z / z" | |
| 3036 | let ?f' = "\<lambda>t. complex_of_real t powr (z - 1)" | |
| 3037 | let ?g = "\<lambda>t. (1 - complex_of_real t) ^ Suc n" | |
| 3038 | let ?g' = "\<lambda>t. - ((1 - complex_of_real t) ^ n) * of_nat (Suc n)" | |
| 3039 | have "((\<lambda>t. ?f' t * ?g t) has_integral | |
| 3040 |             (of_nat (Suc n)) * fact n / pochhammer z (n+2)) {0..1}"
 | |
| 3041 | (is "(_ has_integral ?I) _") | |
| 3042 | proof (rule integration_by_parts_interior[where f' = ?f' and g = ?g]) | |
| 3043 |       from Suc.prems show "continuous_on {0..1} ?f" "continuous_on {0..1} ?g"
 | |
| 3044 | by (auto intro!: continuous_intros) | |
| 3045 | next | |
| 3046 |       fix t :: real assume t: "t \<in> {0<..<1}"
 | |
| 3047 | 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: 
70532diff
changeset | 3048 | by (auto intro!: derivative_eq_intros has_vector_derivative_real_field) | 
| 63296 | 3049 | 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: 
70532diff
changeset | 3050 | by (rule has_vector_derivative_real_field derivative_eq_intros refl)+ simp_all | 
| 63296 | 3051 | next | 
| 3052 | from Suc.prems have [simp]: "z \<noteq> 0" by auto | |
| 3053 | from Suc.prems have A: "Re (z + of_nat n) > 0" for n by simp | |
| 3054 | have [simp]: "z + of_nat n \<noteq> 0" "z + 1 + of_nat n \<noteq> 0" for n | |
| 3055 | using A[of n] A[of "Suc n"] by (auto simp add: add.assoc simp del: plus_complex.sel) | |
| 3056 | have "((\<lambda>x. of_real x powr z * of_real ((1 - x) ^ n) * (- of_nat (Suc n) / z)) has_integral | |
| 3057 |               fact n / pochhammer (z+1) (n+1) * (- of_nat (Suc n) / z)) {0..1}"
 | |
| 3058 | (is "(?A has_integral ?B) _") | |
| 3059 | using Suc.IH[of "z+1"] Suc.prems by (intro has_integral_mult_left) (simp_all add: add_ac pochhammer_rec) | |
| 3060 | also have "?A = (\<lambda>t. ?f t * ?g' t)" by (intro ext) (simp_all add: field_simps) | |
| 3061 | also have "?B = - (of_nat (Suc n) * fact n / pochhammer z (n+2))" | |
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 3062 | by (simp add: field_split_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: 
69597diff
changeset | 3063 | prod.shift_bounds_cl_Suc_ivl del: of_nat_Suc) | 
| 63296 | 3064 |       finally show "((\<lambda>t. ?f t * ?g' t) has_integral (?f 1 * ?g 1 - ?f 0 * ?g 0 - ?I)) {0..1}"
 | 
| 3065 | by simp | |
| 3066 | qed (simp_all add: bounded_bilinear_mult) | |
| 3067 | thus ?case by simp | |
| 3068 | qed | |
| 3069 | ||
| 3070 |   have B: "((\<lambda>t. if t \<in> {0..of_nat n} then
 | |
| 3071 | of_real t powr (z - 1) * (1 - of_real t / of_nat n) ^ n else 0) | |
| 3072 |            has_integral (of_nat n powr z * fact n / pochhammer z (n+1))) {0..}" for n
 | |
| 3073 | proof (cases "n > 0") | |
| 3074 | case [simp]: True | |
| 3075 | hence [simp]: "n \<noteq> 0" by auto | |
| 3076 | with has_integral_affinity01[OF A[OF z, of n], of "inverse (of_nat n)" 0] | |
| 3077 | have "((\<lambda>x. (of_nat n - of_real x) ^ n * (of_real x / of_nat n) powr (z - 1) / of_nat n ^ n) | |
| 3078 |               has_integral fact n * of_nat n / pochhammer z (n+1)) ((\<lambda>x. real n * x)`{0..1})"
 | |
| 3079 | (is "(?f has_integral ?I) ?ivl") by (simp add: field_simps scaleR_conv_of_real) | |
| 3080 |     also from True have "((\<lambda>x. real n*x)`{0..1}) = {0..real n}"
 | |
| 3081 | by (subst image_mult_atLeastAtMost) simp_all | |
| 3082 | also have "?f = (\<lambda>x. (of_real x / of_nat n) powr (z - 1) * (1 - of_real x / of_nat n) ^ n)" | |
| 3083 | using True by (intro ext) (simp add: field_simps) | |
| 3084 | finally have "((\<lambda>x. (of_real x / of_nat n) powr (z - 1) * (1 - of_real x / of_nat n) ^ n) | |
| 3085 |                     has_integral ?I) {0..real n}" (is ?P) .
 | |
| 3086 | also have "?P \<longleftrightarrow> ((\<lambda>x. exp ((z - 1) * of_real (ln (x / of_nat n))) * (1 - of_real x / of_nat n) ^ n) | |
| 3087 |                         has_integral ?I) {0..real n}"
 | |
| 3088 |       by (intro has_integral_spike_finite_eq[of "{0}"]) (auto simp: powr_def Ln_of_real [symmetric])
 | |
| 3089 | 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) | |
| 3090 |                         has_integral ?I) {0..real n}"
 | |
| 3091 |       by (intro has_integral_spike_finite_eq[of "{0}"]) (simp_all add: ln_div)
 | |
| 3092 | finally have \<dots> . | |
| 3093 | note B = has_integral_mult_right[OF this, of "exp ((z - 1) * ln (of_nat n))"] | |
| 3094 | have "((\<lambda>x. exp ((z - 1) * of_real (ln x)) * (1 - of_real x / of_nat n) ^ n) | |
| 3095 |             has_integral (?I * exp ((z - 1) * ln (of_nat n)))) {0..real n}" (is ?P)
 | |
| 3096 | by (insert B, subst (asm) mult.assoc [symmetric], subst (asm) exp_add [symmetric]) | |
| 66936 | 3097 | (simp add: algebra_simps) | 
| 63296 | 3098 | also have "?P \<longleftrightarrow> ((\<lambda>x. of_real x powr (z - 1) * (1 - of_real x / of_nat n) ^ n) | 
| 3099 |             has_integral (?I * exp ((z - 1) * ln (of_nat n)))) {0..real n}"
 | |
| 3100 |       by (intro has_integral_spike_finite_eq[of "{0}"]) (simp_all add: powr_def Ln_of_real)
 | |
| 3101 | also have "fact n * of_nat n / pochhammer z (n+1) * exp ((z - 1) * Ln (of_nat n)) = | |
| 3102 | (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: 
65578diff
changeset | 3103 | by (auto simp add: powr_def algebra_simps exp_diff exp_of_real) | 
| 63296 | 3104 | finally show ?thesis by (subst has_integral_restrict) simp_all | 
| 3105 | next | |
| 3106 | case False | |
| 3107 | thus ?thesis by (subst has_integral_restrict) (simp_all add: has_integral_refl) | |
| 3108 | qed | |
| 3109 | ||
| 3110 | have "eventually (\<lambda>n. Gamma_series z n = | |
| 3111 | of_nat n powr z * fact n / pochhammer z (n+1)) sequentially" | |
| 3112 | using eventually_gt_at_top[of "0::nat"] | |
| 71633 | 3113 | by eventually_elim (simp add: powr_def algebra_simps Gamma_series_def) | 
| 63296 | 3114 | from this and Gamma_series_LIMSEQ[of z] | 
| 3115 | 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: 
70196diff
changeset | 3116 | by (blast intro: Lim_transform_eventually) | 
| 63296 | 3117 |   {
 | 
| 3118 | fix x :: real assume x: "x \<ge> 0" | |
| 3119 | have lim_exp: "(\<lambda>k. (1 - x / real k) ^ k) \<longlonglongrightarrow> exp (-x)" | |
| 3120 | using tendsto_exp_limit_sequentially[of "-x"] by simp | |
| 3121 | have "(\<lambda>k. of_real x powr (z - 1) * of_real ((1 - x / of_nat k) ^ k)) | |
| 3122 | \<longlonglongrightarrow> of_real x powr (z - 1) * of_real (exp (-x))" (is ?P) | |
| 3123 | by (intro tendsto_intros lim_exp) | |
| 3124 | also from eventually_gt_at_top[of "nat \<lceil>x\<rceil>"] | |
| 3125 | have "eventually (\<lambda>k. of_nat k > x) sequentially" by eventually_elim linarith | |
| 3126 | hence "?P \<longleftrightarrow> (\<lambda>k. if x \<le> of_nat k then | |
| 3127 | of_real x powr (z - 1) * of_real ((1 - x / of_nat k) ^ k) else 0) | |
| 3128 | \<longlonglongrightarrow> of_real x powr (z - 1) * of_real (exp (-x))" | |
| 3129 | by (intro tendsto_cong) (auto elim!: eventually_mono) | |
| 3130 | finally have \<dots> . | |
| 3131 | } | |
| 3132 |   hence D: "\<forall>x\<in>{0..}. (\<lambda>k. if x \<in> {0..real k} then
 | |
| 3133 | of_real x powr (z - 1) * (1 - of_real x / of_nat k) ^ k else 0) | |
| 3134 | \<longlonglongrightarrow> of_real x powr (z - 1) / of_real (exp x)" | |
| 3135 | by (simp add: exp_minus field_simps cong: if_cong) | |
| 3136 | ||
| 3137 | have "((\<lambda>x. (Re z - 1) * (ln x / x)) \<longlongrightarrow> (Re z - 1) * 0) at_top" | |
| 3138 | by (intro tendsto_intros ln_x_over_x_tendsto_0) | |
| 3139 | hence "((\<lambda>x. ((Re z - 1) * ln x) / x) \<longlongrightarrow> 0) at_top" by simp | |
| 3140 | from order_tendstoD(2)[OF this, of "1/2"] | |
| 3141 | have "eventually (\<lambda>x. (Re z - 1) * ln x / x < 1/2) at_top" by simp | |
| 3142 | from eventually_conj[OF this eventually_gt_at_top[of 0]] | |
| 3143 | obtain x0 where "\<forall>x\<ge>x0. (Re z - 1) * ln x / x < 1/2 \<and> x > 0" | |
| 3144 | by (auto simp: eventually_at_top_linorder) | |
| 3145 | hence x0: "x0 > 0" "\<And>x. x \<ge> x0 \<Longrightarrow> (Re z - 1) * ln x < x / 2" by auto | |
| 3146 | ||
| 3147 |   define h where "h = (\<lambda>x. if x \<in> {0..x0} then x powr (Re z - 1) else exp (-x/2))"
 | |
| 3148 | have le_h: "x powr (Re z - 1) * exp (-x) \<le> h x" if x: "x \<ge> 0" for x | |
| 3149 | proof (cases "x > x0") | |
| 3150 | case True | |
| 3151 | from True x0(1) have "x powr (Re z - 1) * exp (-x) = exp ((Re z - 1) * ln x - x)" | |
| 3152 | by (simp add: powr_def exp_diff exp_minus field_simps exp_add) | |
| 3153 | also from x0(2)[of x] True have "\<dots> < exp (-x/2)" | |
| 3154 | by (simp add: field_simps) | |
| 3155 | finally show ?thesis using True by (auto simp add: h_def) | |
| 3156 | next | |
| 3157 | case False | |
| 3158 | from x have "x powr (Re z - 1) * exp (- x) \<le> x powr (Re z - 1) * 1" | |
| 3159 | by (intro mult_left_mono) simp_all | |
| 3160 | with False show ?thesis by (auto simp add: h_def) | |
| 3161 | qed | |
| 3162 | ||
| 3163 |   have E: "\<forall>x\<in>{0..}. cmod (if x \<in> {0..real k} then of_real x powr (z - 1) *
 | |
| 3164 | (1 - complex_of_real x / of_nat k) ^ k else 0) \<le> h x" | |
| 3165 | (is "\<forall>x\<in>_. ?f x \<le> _") for k | |
| 3166 | proof safe | |
| 3167 | fix x :: real assume x: "x \<ge> 0" | |
| 3168 |     {
 | |
| 3169 | fix x :: real and n :: nat assume x: "x \<le> of_nat n" | |
| 3170 | have "(1 - complex_of_real x / of_nat n) = complex_of_real ((1 - x / of_nat n))" by simp | |
| 3171 | also have "norm \<dots> = \<bar>(1 - x / real n)\<bar>" by (subst norm_of_real) (rule refl) | |
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 3172 | also from x have "\<dots> = (1 - x / real n)" by (intro abs_of_nonneg) (simp_all add: field_split_simps) | 
| 63296 | 3173 | finally have "cmod (1 - complex_of_real x / of_nat n) = 1 - x / real n" . | 
| 3174 | } note D = this | |
| 3175 | from D[of x k] x | |
| 3176 | 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)" | |
| 3177 | by (auto simp: norm_mult norm_powr_real_powr norm_power intro!: mult_nonneg_nonneg) | |
| 3178 | also have "\<dots> \<le> x powr (Re z - 1) * exp (-x)" | |
| 3179 | by (auto intro!: mult_left_mono exp_ge_one_minus_x_over_n_power_n) | |
| 3180 | also from x have "\<dots> \<le> h x" by (rule le_h) | |
| 3181 | finally show "?f x \<le> h x" . | |
| 3182 | qed | |
| 63594 
bd218a9320b5
HOL-Multivariate_Analysis: rename theories for more descriptive names
 hoelzl parents: 
63539diff
changeset | 3183 | |
| 63296 | 3184 |   have F: "h integrable_on {0..}" unfolding h_def
 | 
| 3185 | by (rule integrable_Gamma_integral_bound) (insert assms x0(1), simp_all) | |
| 3186 | show ?thesis | |
| 3187 | by (rule has_integral_dominated_convergence[OF B F E D C]) | |
| 3188 | qed | |
| 3189 | ||
| 3190 | lemma Gamma_integral_real: | |
| 3191 | assumes x: "x > (0 :: real)" | |
| 3192 |   shows   "((\<lambda>t. t powr (x - 1) / exp t) has_integral Gamma x) {0..}"
 | |
| 3193 | proof - | |
| 3194 | have A: "((\<lambda>t. complex_of_real t powr (complex_of_real x - 1) / | |
| 3195 |           complex_of_real (exp t)) has_integral complex_of_real (Gamma x)) {0..}"
 | |
| 3196 | using Gamma_integral_complex[of x] assms by (simp_all add: Gamma_complex_of_real powr_of_real) | |
| 3197 |   have "((\<lambda>t. complex_of_real (t powr (x - 1) / exp t)) has_integral of_real (Gamma x)) {0..}"
 | |
| 3198 | by (rule has_integral_eq[OF _ A]) (simp_all add: powr_of_real [symmetric]) | |
| 3199 | from has_integral_linear[OF this bounded_linear_Re] show ?thesis by (simp add: o_def) | |
| 3200 | qed | |
| 3201 | ||
| 66526 | 3202 | lemma absolutely_integrable_Gamma_integral': | 
| 3203 | assumes "Re z > 0" | |
| 3204 |   shows   "(\<lambda>t. complex_of_real t powr (z - 1) / of_real (exp t)) absolutely_integrable_on {0<..}"
 | |
| 3205 | using absolutely_integrable_Gamma_integral [OF assms zero_less_one] by simp | |
| 3206 | ||
| 3207 | lemma Gamma_integral_complex': | |
| 3208 | assumes z: "Re z > 0" | |
| 3209 |   shows   "((\<lambda>t. of_real t powr (z - 1) / of_real (exp t)) has_integral Gamma z) {0<..}"
 | |
| 3210 | proof - | |
| 3211 |   have "((\<lambda>t. of_real t powr (z - 1) / of_real (exp t)) has_integral Gamma z) {0..}"
 | |
| 3212 | by (rule Gamma_integral_complex) fact+ | |
| 3213 |   hence "((\<lambda>t. if t \<in> {0<..} then of_real t powr (z - 1) / of_real (exp t) else 0) 
 | |
| 3214 |            has_integral Gamma z) {0..}"
 | |
| 3215 |     by (rule has_integral_spike [of "{0}", rotated 2]) auto
 | |
| 3216 | also have "?this = ?thesis" | |
| 3217 | by (subst has_integral_restrict) auto | |
| 3218 | finally show ?thesis . | |
| 3219 | qed | |
| 3220 | ||
| 67278 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3221 | 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: 
66936diff
changeset | 3222 | assumes "s > (0::real)" | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3223 |   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: 
66936diff
changeset | 3224 | 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: 
66936diff
changeset | 3225 | |
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3226 | lemma integrable_Beta: | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3227 | 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: 
66936diff
changeset | 3228 |   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: 
66936diff
changeset | 3229 | proof - | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3230 | 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: 
66936diff
changeset | 3231 | 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: 
66936diff
changeset | 3232 |   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: 
66936diff
changeset | 3233 | proof (cases "b < 1") | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3234 | case False | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3235 | 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: 
66936diff
changeset | 3236 | 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: 
66936diff
changeset | 3237 | 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: 
66936diff
changeset | 3238 |   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: 
66936diff
changeset | 3239 | proof (cases "a < 1") | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3240 | case False | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3241 | 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: 
66936diff
changeset | 3242 | 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: 
66936diff
changeset | 3243 | next | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3244 | case True | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3245 | 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: 
66936diff
changeset | 3246 | 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: 
66936diff
changeset | 3247 | |
| 67976 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 3248 |   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: 
67399diff
changeset | 3249 | unfolding set_integrable_def | 
| 67278 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3250 | 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: 
67399diff
changeset | 3251 |     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: 
66936diff
changeset | 3252 | 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: 
67399diff
changeset | 3253 |     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: 
66936diff
changeset | 3254 | by (subst absolutely_integrable_on_iff_nonneg) auto | 
| 67976 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 3255 | 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: 
67399diff
changeset | 3256 |     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: 
66936diff
changeset | 3257 | 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: 
66936diff
changeset | 3258 | next | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3259 | fix x :: real | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3260 |     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: 
66936diff
changeset | 3261 | 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: 
66936diff
changeset | 3262 |     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: 
66936diff
changeset | 3263 |             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: 
66936diff
changeset | 3264 | 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: 
66936diff
changeset | 3265 | 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: 
66936diff
changeset | 3266 | |
| 67976 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 3267 |   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: 
67399diff
changeset | 3268 | unfolding set_integrable_def | 
| 67278 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3269 | 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: 
66936diff
changeset | 3270 |     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: 
66936diff
changeset | 3271 | 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: 
66936diff
changeset | 3272 | 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: 
66936diff
changeset | 3273 | 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: 
66936diff
changeset | 3274 |       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: 
66936diff
changeset | 3275 |     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: 
66936diff
changeset | 3276 | by (subst absolutely_integrable_on_iff_nonneg) auto | 
| 67976 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 3277 | 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: 
67399diff
changeset | 3278 |     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: 
66936diff
changeset | 3279 | 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: 
66936diff
changeset | 3280 | next | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3281 | fix x :: real | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3282 |     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: 
66936diff
changeset | 3283 | 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: 
66936diff
changeset | 3284 |     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: 
66936diff
changeset | 3285 |             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: 
66936diff
changeset | 3286 | 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: 
66936diff
changeset | 3287 | 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: 
66936diff
changeset | 3288 | |
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3289 |   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: 
66936diff
changeset | 3290 | 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: 
66936diff
changeset | 3291 |   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: 
66936diff
changeset | 3292 | finally show ?thesis . | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3293 | qed | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3294 | |
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3295 | lemma integrable_Beta': | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3296 | 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: 
66936diff
changeset | 3297 |   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: 
66936diff
changeset | 3298 | 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: 
66936diff
changeset | 3299 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 3300 | 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: 
66936diff
changeset | 3301 | 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: 
66936diff
changeset | 3302 |   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: 
66936diff
changeset | 3303 | proof - | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3304 |   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: 
66936diff
changeset | 3305 | 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: 
66936diff
changeset | 3306 | 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: 
66936diff
changeset | 3307 | 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: 
66936diff
changeset | 3308 |     (\<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: 
66936diff
changeset | 3309 |     (\<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: 
66936diff
changeset | 3310 | 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: 
66936diff
changeset | 3311 |   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: 
66936diff
changeset | 3312 |                             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: 
66936diff
changeset | 3313 | 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: 
66936diff
changeset | 3314 |   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: 
66936diff
changeset | 3315 | / 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: 
66936diff
changeset | 3316 | by (intro nn_integral_cong) | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3317 | (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: 
66936diff
changeset | 3318 |   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: 
66936diff
changeset | 3319 | (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: 
66936diff
changeset | 3320 | 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: 
66936diff
changeset | 3321 | case (1 t) | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3322 |     have "(\<integral>\<^sup>+u. ennreal (indicator ({0..}\<times>{0..}) (t,u) * t powr (a - 1) * 
 | 
| 67399 | 3323 | 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: 
66936diff
changeset | 3324 |                (\<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: 
66936diff
changeset | 3325 | (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: 
66936diff
changeset | 3326 | 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: 
66936diff
changeset | 3327 | 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: 
66936diff
changeset | 3328 | qed | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3329 |   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: 
66936diff
changeset | 3330 | (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: 
66936diff
changeset | 3331 | by (subst lborel_pair.Fubini') | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3332 | (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: 
66936diff
changeset | 3333 |   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: 
66936diff
changeset | 3334 |                               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: 
66936diff
changeset | 3335 | 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: 
66936diff
changeset | 3336 |   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: 
66936diff
changeset | 3337 |                           \<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: 
66936diff
changeset | 3338 | 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: 
66936diff
changeset | 3339 |   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: 
66936diff
changeset | 3340 |                           \<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: 
66936diff
changeset | 3341 | 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: 
66936diff
changeset | 3342 | (auto simp: indicator_def) | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3343 |   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: 
66936diff
changeset | 3344 | 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: 
66936diff
changeset | 3345 | case (1 u) | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3346 | show ?case | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3347 | proof (cases "u > 0") | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3348 | case True | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3349 |       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: 
66936diff
changeset | 3350 |               (\<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: 
68721diff
changeset | 3351 | \<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: 
66936diff
changeset | 3352 | using True | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3353 | 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: 
68721diff
changeset | 3354 | 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: 
66936diff
changeset | 3355 | 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: 
66936diff
changeset | 3356 |       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: 
66936diff
changeset | 3357 | (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: 
66936diff
changeset | 3358 | 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: 
66936diff
changeset | 3359 | 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: 
66936diff
changeset | 3360 |                             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: 
66936diff
changeset | 3361 | (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: 
66936diff
changeset | 3362 | by (intro nn_integral_cong) | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3363 | (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: 
66936diff
changeset | 3364 | 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: 
66936diff
changeset | 3365 |                         (\<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: 
66936diff
changeset | 3366 | (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: 
66936diff
changeset | 3367 | 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: 
66936diff
changeset | 3368 | 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: 
66936diff
changeset | 3369 |                    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: 
66936diff
changeset | 3370 | 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: 
66936diff
changeset | 3371 | 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: 
66936diff
changeset | 3372 |         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: 
66936diff
changeset | 3373 | (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: 
66936diff
changeset | 3374 | 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: 
66936diff
changeset | 3375 | qed auto | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3376 | qed | 
| 
c60e3d615b8c
Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
 eberlm <eberlm@in.tum.de> parents: 
66936diff
changeset | 3377 | 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: 
66936diff
changeset | 3378 | 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: 
66936diff
changeset | 3379 | 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: 
66936diff
changeset | 3380 | 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: 
66936diff
changeset | 3381 | 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: 
66936diff
changeset | 3382 | 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: 
66936diff
changeset | 3383 |   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: 
66936diff
changeset | 3384 | 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: 
66936diff
changeset | 3385 | 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: 
66936diff
changeset | 3386 | qed | 
| 63296 | 3387 | |
| 3388 | ||
| 72318 
bc97bd4c0474
prefer old-fashioned {\ss} to prevent problems with encoding in lualatex;
 wenzelm parents: 
71633diff
changeset | 3389 | subsection \<open>The Weierstra{\ss} product formula for the sine\<close>
 | 
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 3390 | |
| 68624 
205d352ed727
Tagged Ball_Volume and Gamma_Function in HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
68403diff
changeset | 3391 | theorem sin_product_formula_complex: | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3392 | fixes z :: complex | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3393 | 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 | 3394 | proof - | 
| 69529 | 3395 | let ?f = "rGamma_series_Weierstrass" | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3396 | 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 | 3397 | \<longlonglongrightarrow> (- of_real pi * inverse z) * (rGamma z * rGamma (- z))" | 
| 69529 | 3398 | 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 | 3399 | 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 | 3400 | (\<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 | 3401 | proof | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3402 | fix n :: nat | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3403 | 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 | 3404 | of_real pi * z * (\<Prod>k=1..n. (of_nat k - z) * (of_nat k + z) / of_nat k ^ 2)" | 
| 69529 | 3405 | by (simp add: rGamma_series_Weierstrass_def mult_ac exp_minus | 
| 64272 | 3406 | 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 | 3407 | 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 | 3408 | (\<Prod>k=1..n. 1 - z^2 / of_nat k ^ 2)" | 
| 64272 | 3409 | by (intro prod.cong) (simp_all add: power2_eq_square field_simps) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3410 | finally show "(- of_real pi * inverse z) * (?f z n * ?f (-z) n) = of_real pi * z * \<dots>" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 3411 | by (simp add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3412 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3413 | also have "(- of_real pi * inverse z) * (rGamma z * rGamma (- z)) = sin (of_real pi * z)" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 3414 | by (subst rGamma_reflection_complex') (simp add: field_split_simps) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3415 | finally show ?thesis . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3416 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3417 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3418 | lemma sin_product_formula_real: | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3419 | "(\<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 | 3420 | proof - | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3421 | 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 | 3422 | 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 | 3423 | \<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 | 3424 | 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 | 3425 | 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 | 3426 | 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 | 3427 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3428 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3429 | lemma sin_product_formula_real': | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3430 | assumes "x \<noteq> (0::real)" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3431 | 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 | 3432 | 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 | 3433 | by simp | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3434 | |
| 63721 | 3435 | theorem wallis: "(\<lambda>n. \<Prod>k=1..n. (4*real k^2) / (4*real k^2 - 1)) \<longlonglongrightarrow> pi / 2" | 
| 3436 | proof - | |
| 66512 
89b6455b63b6
starting to unscramble bounded_variation_absolutely_integrable_interval
 paulson <lp15@cam.ac.uk> parents: 
66453diff
changeset | 3437 | from tendsto_inverse[OF tendsto_mult[OF | 
| 63721 | 3438 | 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: 
67399diff
changeset | 3439 | have "(\<lambda>n. (\<Prod>k=1..n. inverse (1 - (1/2)\<^sup>2 / (real k)\<^sup>2))) \<longlonglongrightarrow> pi/2" | 
| 64272 | 3440 | by (simp add: prod_inversef [symmetric]) | 
| 67976 
75b94eb58c3d
Analysis builds using set_borel_measurable_def, etc.
 paulson <lp15@cam.ac.uk> parents: 
67399diff
changeset | 3441 | also have "(\<lambda>n. (\<Prod>k=1..n. inverse (1 - (1/2)\<^sup>2 / (real k)\<^sup>2))) = | 
| 63721 | 3442 | (\<lambda>n. (\<Prod>k=1..n. (4*real k^2)/(4*real k^2 - 1)))" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70707diff
changeset | 3443 | by (intro ext prod.cong refl) (simp add: field_split_simps) | 
| 63721 | 3444 | finally show ?thesis . | 
| 3445 | qed | |
| 3446 | ||
| 62085 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 3447 | |
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 3448 | subsection \<open>The Solution to the Basel problem\<close> | 
| 
5b7758af429e
Tuned approximations in Multivariate_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
62072diff
changeset | 3449 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3450 | 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 | 3451 | proof - | 
| 63040 | 3452 | define P where "P x n = (\<Prod>k=1..n. 1 - x^2 / of_nat k^2)" for x :: real and n | 
| 3453 | define K where "K = (\<Sum>n. inverse (real_of_nat (Suc n))^2)" | |
| 3454 | define f where [abs_def]: "f x = (\<Sum>n. P x n / of_nat (Suc n)^2)" for x | |
| 3455 | 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: 
62085diff
changeset | 3456 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3457 | 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 | 3458 | proof (cases "x = 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3459 | assume x: "x = 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3460 | 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 | 3461 | 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 | 3462 | 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 | 3463 | next | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3464 | assume x: "x \<noteq> 0" | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3465 | 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 | 3466 | 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 | 3467 | 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: 
69597diff
changeset | 3468 | 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 | 3469 | 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 | 3470 | 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 | 3471 | 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 | 3472 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3473 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3474 | 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 | 3475 | 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 | 3476 | show "uniform_limit (ball 0 1) (\<lambda>n x. \<Sum>k<n. P x k / of_nat (Suc k)^2) f sequentially" | 
| 69529 | 3477 | 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 | 3478 | 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 | 3479 |       {
 | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3480 | fix k :: nat assume k: "k \<ge> 1" | 
| 71633 | 3481 | from x have "x^2 < 1" by (auto simp: abs_square_less_1) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3482 | also from k have "\<dots> \<le> of_nat k^2" by simp | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3483 |         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 | 3484 | 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 | 3485 | } | 
| 64272 | 3486 | 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 | 3487 | thus "norm (P x n / (of_nat (Suc n)^2)) \<le> 1 / of_nat (Suc n)^2" | 
| 64272 | 3488 | 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 | 3489 | 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 | 3490 | 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 | 3491 | 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 | 3492 | 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 | 3493 | 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: 
62085diff
changeset | 3494 | finally have "f \<midarrow> 0 \<rightarrow> K" . | 
| 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3495 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3496 | 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 | 3497 | proof (rule Lim_transform_eventually) | 
| 63040 | 3498 | 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: 
62085diff
changeset | 3499 | 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 | 3500 | 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 | 3501 | 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 | 3502 | proof eventually_elim | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3503 | 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 | 3504 | 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 | 3505 | 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 | 3506 | 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 | 3507 | by (simp add: eval_nat_numeral) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3508 | 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 | 3509 | have "(\<lambda>n. - (sin_coeff (n+3) * pi^(n+2) * x^n)) sums ((1 - sin (pi*x) / (pi*x)) / x^2)" | 
| 71633 | 3510 | by (simp add: field_split_simps eval_nat_numeral) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3511 | 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 | 3512 | by (simp add: g_def) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3513 | 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 | 3514 | 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 | 3515 | finally show "f' x = f x" . | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3516 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3517 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3518 | have "isCont f' 0" unfolding f'_def | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3519 | 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 | 3520 | 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 | 3521 | proof (cases "x = 0") | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3522 | assume x: "x \<noteq> 0" | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3523 | 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 | 3524 | sin_converges[of "pi*x"]], of 3], of "-pi*x^3"] x | 
| 71633 | 3525 | show ?thesis by (simp add: field_split_simps eval_nat_numeral) | 
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3526 | qed (simp only: summable_0_powser) | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3527 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3528 | hence "f' \<midarrow> 0 \<rightarrow> f' 0" by (simp add: isCont_def) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3529 | 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 | 3530 | 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 | 3531 | 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 | 3532 | qed | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3533 | |
| 62049 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3534 | 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 | 3535 | 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 | 3536 | 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 | 3537 | by (subst summable_Suc_iff) (simp add: power_inverse) | 
| 62131 
1baed43f453e
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
 paulson parents: 
62085diff
changeset | 3538 | 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 | 3539 | 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 | 3540 | qed | 
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3541 | |
| 
b0f941e207cf
Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
 eberlm parents: diff
changeset | 3542 | end |