@@ -5,21 +5,23 @@ Authors: Michael Stoll
5
5
-/
6
6
import Mathlib.NumberTheory.DirichletCharacter.Bounds
7
7
import Mathlib.NumberTheory.EulerProduct.Basic
8
+ import Mathlib.NumberTheory.LSeries.Basic
8
9
import Mathlib.NumberTheory.ZetaFunction
9
10
10
11
/-!
11
12
# The Euler Product for the Riemann Zeta Function and Dirichlet L-Series
12
13
13
- The first main result of this file is `riemannZeta_eulerProduct`, which states
14
- the Euler Product formula for the Riemann ζ function
14
+ The first main result of this file is the Euler Product formula for the Riemann ζ function
15
15
$$\prod_p \frac{1}{1 - p^{-s}}
16
16
= \lim_{n \to \infty} \prod_{p < n} \frac{1}{1 - p^{-s}} = \zeta(s)$$
17
17
for $s$ with real part $> 1$ ($p$ runs through the primes).
18
- The formalized statement is the second equality above, since infinite products are not yet
19
- available in Mathlib.
18
+ `riemannZeta_eulerProduct` is the second equality above. There are versions
19
+ `riemannZeta_eulerProduct_hasProd` and `riemannZeta_eulerProduct_tprod` in terms of `HasProd`
20
+ and `tprod`, respectively.
20
21
21
- The second result is `dirichletLSeries_eulerProduct`, which is the analogous statement
22
- for Dirichlet L-functions.
22
+ The second result is `dirichletLSeries_eulerProduct` (with variants
23
+ `dirichletLSeries_eulerProduct_hasProd` and `dirichletLSeries_eulerProduct_tprod`),
24
+ which is the analogous statement for Dirichlet L-series.
23
25
-/
24
26
25
27
open Complex
@@ -58,28 +60,74 @@ lemma summable_riemannZetaSummand (hs : 1 < s.re) :
58
60
abs_cpow_eq_rpow_re_of_nonneg (Nat.cast_nonneg n) <| re_neg_ne_zero_of_one_lt_re hs,
59
61
neg_re, Real.rpow_neg <| Nat.cast_nonneg n]
60
62
63
+ lemma tsum_riemannZetaSummand (hs : 1 < s.re) :
64
+ ∑' (n : ℕ), riemannZetaSummandHom (ne_zero_of_one_lt_re hs) n = riemannZeta s := by
65
+ have hsum := summable_riemannZetaSummand hs
66
+ rw [zeta_eq_tsum_one_div_nat_add_one_cpow hs, tsum_eq_zero_add hsum.of_norm, map_zero, zero_add]
67
+ simp only [riemannZetaSummandHom, cpow_neg, MonoidWithZeroHom.coe_mk, ZeroHom.coe_mk,
68
+ Nat.cast_add, Nat.cast_one, one_div]
69
+
61
70
/-- When `s.re > 1`, the map `n ↦ χ(n) * n^(-s)` is norm-summable. -/
62
71
lemma summable_dirichletSummand {N : ℕ} (χ : DirichletCharacter ℂ N) (hs : 1 < s.re) :
63
72
Summable (fun n ↦ ‖dirichletSummandHom χ (ne_zero_of_one_lt_re hs) n‖) := by
64
73
simp only [dirichletSummandHom, MonoidWithZeroHom.coe_mk, ZeroHom.coe_mk, norm_mul]
65
74
exact (summable_riemannZetaSummand hs).of_nonneg_of_le (fun _ ↦ by positivity)
66
75
(fun n ↦ mul_le_of_le_one_left (norm_nonneg _) <| χ.norm_le_one n)
67
76
77
+ open scoped LSeries.notation in
78
+ lemma tsum_dirichletSummand {N : ℕ} (χ : DirichletCharacter ℂ N) (hs : 1 < s.re) :
79
+ ∑' (n : ℕ), dirichletSummandHom χ (ne_zero_of_one_lt_re hs) n = L ↗χ s := by
80
+ simp only [LSeries, LSeries.term, dirichletSummandHom]
81
+ refine tsum_congr (fun n ↦ ?_)
82
+ rcases eq_or_ne n 0 with rfl | hn
83
+ · simp only [map_zero, ↓reduceIte]
84
+ · simp only [cpow_neg, MonoidWithZeroHom.coe_mk, ZeroHom.coe_mk, hn, ↓reduceIte,
85
+ Field.div_eq_mul_inv]
86
+
68
87
open Filter Nat Topology BigOperators EulerProduct
69
88
70
- /-- The Euler product for the Riemann ζ function, valid for `s.re > 1`. -/
71
- -- TODO: state in terms of `∏'` once this is in Mathlib
89
+ /-- The Euler product for the Riemann ζ function, valid for `s.re > 1`.
90
+ This version is stated in terms of `HasProd`. -/
91
+ theorem riemannZeta_eulerProduct_hasProd (hs : 1 < s.re) :
92
+ HasProd (fun p : Primes ↦ (1 - (p : ℂ) ^ (-s))⁻¹) (riemannZeta s) := by
93
+ rw [← tsum_riemannZetaSummand hs]
94
+ apply eulerProduct_completely_multiplicative_hasProd <| summable_riemannZetaSummand hs
95
+
96
+ /-- The Euler product for the Riemann ζ function, valid for `s.re > 1`.
97
+ This version is stated in terms of `tprod`. -/
98
+ theorem riemannZeta_eulerProduct_tprod (hs : 1 < s.re) :
99
+ ∏' p : Primes, (1 - (p : ℂ) ^ (-s))⁻¹ = riemannZeta s :=
100
+ (riemannZeta_eulerProduct_hasProd hs).tprod_eq
101
+
102
+ /-- The Euler product for the Riemann ζ function, valid for `s.re > 1`.
103
+ This version is stated in the form of convergence of finite partial products. -/
72
104
theorem riemannZeta_eulerProduct (hs : 1 < s.re) :
73
105
Tendsto (fun n : ℕ ↦ ∏ p in primesBelow n, (1 - (p : ℂ) ^ (-s))⁻¹) atTop
74
106
(𝓝 (riemannZeta s)) := by
75
- have hsum := summable_riemannZetaSummand hs
76
- convert eulerProduct_completely_multiplicative hsum
77
- rw [zeta_eq_tsum_one_div_nat_add_one_cpow hs, tsum_eq_zero_add hsum.of_norm, map_zero, zero_add]
78
- simp [riemannZetaSummandHom, cpow_neg]
107
+ rw [← tsum_riemannZetaSummand hs]
108
+ apply eulerProduct_completely_multiplicative <| summable_riemannZetaSummand hs
109
+
110
+ open scoped LSeries.notation
111
+
112
+ /-- The Euler product for Dirichlet L-series, valid for `s.re > 1`.
113
+ This version is stated in terms of `HasProd`. -/
114
+ theorem dirichletLSeries_eulerProduct_hasProd {N : ℕ} (χ : DirichletCharacter ℂ N)
115
+ (hs : 1 < s.re) :
116
+ HasProd (fun p : Primes ↦ (1 - χ p * (p : ℂ) ^ (-s))⁻¹) (L ↗χ s) := by
117
+ rw [← tsum_dirichletSummand χ hs]
118
+ convert eulerProduct_completely_multiplicative_hasProd <| summable_dirichletSummand χ hs
119
+
120
+ /-- The Euler product for Dirichlet L-series, valid for `s.re > 1`.
121
+ This version is stated in terms of `tprod`. -/
122
+ theorem dirichletLSeries_eulerProduct_tprod {N : ℕ} (χ : DirichletCharacter ℂ N)
123
+ (hs : 1 < s.re) :
124
+ ∏' p : Primes, (1 - χ p * (p : ℂ) ^ (-s))⁻¹ = L ↗χ s :=
125
+ (dirichletLSeries_eulerProduct_hasProd χ hs).tprod_eq
79
126
80
- /-- The Euler product for Dirichlet L-series, valid for `s.re > 1`. -/
81
- -- TODO: state in terms of `∏'` once this is in Mathlib
127
+ /-- The Euler product for Dirichlet L-series, valid for `s.re > 1`.
128
+ This version is stated in the form of convergence of finite partial products. -/
82
129
theorem dirichletLSeries_eulerProduct {N : ℕ} (χ : DirichletCharacter ℂ N) (hs : 1 < s.re) :
83
130
Tendsto (fun n : ℕ ↦ ∏ p in primesBelow n, (1 - χ p * (p : ℂ) ^ (-s))⁻¹) atTop
84
- (𝓝 (∑' n : ℕ, dirichletSummandHom χ (ne_zero_of_one_lt_re hs) n)) := by
85
- convert eulerProduct_completely_multiplicative <| summable_dirichletSummand χ hs
131
+ (𝓝 (L ↗χ s)) := by
132
+ rw [← tsum_dirichletSummand χ hs]
133
+ apply eulerProduct_completely_multiplicative <| summable_dirichletSummand χ hs
0 commit comments