Skip to content

Commit 21ec483

Browse files
feat(NumberTheory/EulerProduct/DirichletLSeries): use infinite product and L-series (#12809)
This is a follow-up to [#12161](#12161). It adds `HasProd` and `tsum` versions of the Euler Product statements for the Riemann zeta function and Dirichlet L-series (in the latter case, also replacing the explicit infinite sum by `L ↗χ s`). See [this Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/L-series/near/438037266).
1 parent 1718faa commit 21ec483

File tree

1 file changed

+64
-16
lines changed

1 file changed

+64
-16
lines changed

Mathlib/NumberTheory/EulerProduct/DirichletLSeries.lean

Lines changed: 64 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,23 @@ Authors: Michael Stoll
55
-/
66
import Mathlib.NumberTheory.DirichletCharacter.Bounds
77
import Mathlib.NumberTheory.EulerProduct.Basic
8+
import Mathlib.NumberTheory.LSeries.Basic
89
import Mathlib.NumberTheory.ZetaFunction
910

1011
/-!
1112
# The Euler Product for the Riemann Zeta Function and Dirichlet L-Series
1213
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
1515
$$\prod_p \frac{1}{1 - p^{-s}}
1616
= \lim_{n \to \infty} \prod_{p < n} \frac{1}{1 - p^{-s}} = \zeta(s)$$
1717
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.
2021
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.
2325
-/
2426

2527
open Complex
@@ -58,28 +60,74 @@ lemma summable_riemannZetaSummand (hs : 1 < s.re) :
5860
abs_cpow_eq_rpow_re_of_nonneg (Nat.cast_nonneg n) <| re_neg_ne_zero_of_one_lt_re hs,
5961
neg_re, Real.rpow_neg <| Nat.cast_nonneg n]
6062

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+
6170
/-- When `s.re > 1`, the map `n ↦ χ(n) * n^(-s)` is norm-summable. -/
6271
lemma summable_dirichletSummand {N : ℕ} (χ : DirichletCharacter ℂ N) (hs : 1 < s.re) :
6372
Summable (fun n ↦ ‖dirichletSummandHom χ (ne_zero_of_one_lt_re hs) n‖) := by
6473
simp only [dirichletSummandHom, MonoidWithZeroHom.coe_mk, ZeroHom.coe_mk, norm_mul]
6574
exact (summable_riemannZetaSummand hs).of_nonneg_of_le (fun _ ↦ by positivity)
6675
(fun n ↦ mul_le_of_le_one_left (norm_nonneg _) <| χ.norm_le_one n)
6776

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+
6887
open Filter Nat Topology BigOperators EulerProduct
6988

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. -/
72104
theorem riemannZeta_eulerProduct (hs : 1 < s.re) :
73105
Tendsto (fun n : ℕ ↦ ∏ p in primesBelow n, (1 - (p : ℂ) ^ (-s))⁻¹) atTop
74106
(𝓝 (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
79126

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. -/
82129
theorem dirichletLSeries_eulerProduct {N : ℕ} (χ : DirichletCharacter ℂ N) (hs : 1 < s.re) :
83130
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

Comments
 (0)