Documentation

LeanPool.ZetaZeros.Hilbert.AlphaExpansion

Integrability and factorisation for the Bessel coefficients #

The analytic ingredients alphaCoeff_eq needs on top of the algebraic identity bigF_eq.

Integrability is Hölder with p = q = 2: each factor is a twisted function, square-integrable by memLp_fz, against a conjugated element, so the product is . That is what licenses splitting the finite sum under the integral.

The factorisation of the double integral needs no integrability: pulling a constant out of a Bochner integral is unconditional, so a separable integrand factors by two such pulls rather than by Fubini.

theorem ZetaZeros.memLp_conj_coeFn {lam : } (ψ : (L2Interval lam)) :
MeasureTheory.MemLp (fun (u : ) => (starRingEnd ) (ψ u)) 2 (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam))

A conjugated element is still in .

theorem ZetaZeros.integrable_fz_mul_conj {lam : } {eta : } (h : IsAdmissible lam eta) (x : ) (ψ : (L2Interval lam)) :
MeasureTheory.Integrable (fun (u : ) => fz eta x u * (starRingEnd ) (ψ u)) (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam))

A twisted function against a conjugated element is integrable: Hölder with p = q = 2.

theorem ZetaZeros.integrable_gz_mul_conj {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) (ψ : (L2Interval lam)) :
MeasureTheory.Integrable (fun (u : ) => gz eta z u * (starRingEnd ) (ψ u)) (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam))

The even part against a conjugated element is integrable.

theorem ZetaZeros.integrable_hz_mul_conj {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) (ψ : (L2Interval lam)) :
MeasureTheory.Integrable (fun (u : ) => hz eta z u * (starRingEnd ) (ψ u)) (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam))

The odd part against a conjugated element is integrable.

theorem ZetaZeros.integral_double_finsetSum {ι : Type u_1} (s : Finset ι) (c : ι) (Φ : ι) (k : ) (lam : ) (hint : is, MeasureTheory.Integrable (fun (u : ) => Φ i u * k u) (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam))) :
(u : ) (v : ) in Set.Ioo (-lam) lam, (∑ is, c i * Φ i u * Φ i v) * (k u * k v) = is, c i * ( (u : ) in Set.Ioo (-lam) lam, Φ i u * k u) ^ 2

The double integral of a finite sum of separable terms. Splitting the sum under the integral is what needs the integrability hypothesis; each term then factors as a square with none.

This is the reusable core of alphaCoeff_eq, applied once per family (fz, gz, hz).

theorem ZetaZeros.integral_mul_conj_eq_inner {lam : } (Φ Ψ : (L2Interval lam)) :
(u : ) in Set.Ioo (-lam) lam, Φ u * (starRingEnd ) (Ψ u) = inner Ψ Φ

The integral of Φ * conj Ψ is the inner product ⟪Ψ, Φ⟫.

theorem ZetaZeros.alphaCoeff_eq {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) (psi : (L2Interval lam)) (j : ) :
alphaCoeff eta lam Z m psi j = xsimpleRealPart Z m multipleRealPart Z m, (m x) * ( (u : ) in Set.Ioo (-lam) lam, fz eta x u * (starRingEnd ) ((psi j) u)) ^ 2 + znonRealPart Z, (m z) * (( (u : ) in Set.Ioo (-lam) lam, gz eta z u * (starRingEnd ) ((psi j) u)) ^ 2 - ( (u : ) in Set.Ioo (-lam) lam, hz eta z u * (starRingEnd ) ((psi j) u)) ^ 2)

The Bessel coefficient in terms of one-variable integrals.

Stated for an arbitrary family psi: the identity is linearity together with bigF_eq, so the source's adapted-orthonormal-basis hypothesis plays no role and is dropped.

theorem ZetaZeros.alphaCoeff_eq_alphaOf {lam : } {eta : } {Z : Finset } {m : } (psi : (L2Interval lam)) (j : ) :
alphaCoeff eta lam Z m psi j = alphaOf eta lam Z m (psi j)

alphaCoeff is alphaOf at the indexed member: the family parameter is spurious.

theorem ZetaZeros.integral_symmetric_im_eq_zero {Φ₁ Φ₂ : } (h1 : IsSymmetric Φ₁) (h2 : IsSymmetric Φ₂) (lam : ) :
( (u : ) in Set.Ioo (-lam) lam, Φ₁ u * (starRingEnd ) (Φ₂ u)).im = 0

The set-integral form of inner_symmetric_im_eq_zero. The pairing of two symmetric functions over the symmetric interval is real.

theorem ZetaZeros.alphaCoeff_im_eq_zero {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) (psi : (L2Interval lam)) (j : ) (hpsi : IsSymmetric (psi j)) :
(alphaCoeff eta lam Z m psi j).im = 0

The Bessel coefficients are real.

theorem ZetaZeros.inner_eq_zero_of_mem_span {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] {s : Set E} {v w : E} (hv : ys, inner v y = 0) (hw : w Submodule.span s) :
inner v w = 0

Orthogonality to a spanning set extends to the span.

theorem ZetaZeros.coeFn_fzL2 {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
(fzL2 h z) =ᵐ[MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)] fz eta z

fzL2 agrees a.e. with fz.

theorem ZetaZeros.coeFn_gzL2 {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
(gzL2 h z) =ᵐ[MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)] gz eta z

gzL2 agrees a.e. with gz.

theorem ZetaZeros.coeFn_hzL2 {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
(hzL2 h z) =ᵐ[MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)] hz eta z

hzL2 agrees a.e. with hz.

theorem ZetaZeros.isSymmetricL2_of_isSymmetric {lam : } {F : (L2Interval lam)} {phi : } (hF : F =ᵐ[MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)] phi) (hphi : IsSymmetric phi) :

Pointwise symmetry of a representing function gives a.e. symmetry of the element.

theorem ZetaZeros.fzL2_mem_symmetricSubspace {lam : } {eta : } (h : IsAdmissible lam eta) {x : } (hx : x.im = 0) :

At a real point the twisted function is a symmetric element.

theorem ZetaZeros.gzL2_mem_symmetricSubspace {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :

The even part is a symmetric element.

theorem ZetaZeros.hzL2_mem_symmetricSubspace {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :

The odd part is a symmetric element.

theorem ZetaZeros.inner_symmetricL2_im_eq_zero {lam : } {F G : (L2Interval lam)} (hF : IsSymmetricL2 F) (hG : IsSymmetricL2 G) :
(inner F G).im = 0

Inner products of symmetric elements are real.

theorem ZetaZeros.integral_mul_conj_eq_inner_of_ae {lam : } {Φ : } {F : (L2Interval lam)} (hF : F =ᵐ[MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)] Φ) (ψ : (L2Interval lam)) :
(u : ) in Set.Ioo (-lam) lam, Φ u * (starRingEnd ) (ψ u) = inner ψ F

The integral of Φ * conj ψ, for a function Φ agreeing a.e. with an element, is the inner product ⟪ψ, Φ⟫.

theorem ZetaZeros.alphaOf_eq {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) (φ : (L2Interval lam)) :
alphaOf eta lam Z m φ = xsimpleRealPart Z m multipleRealPart Z m, (m x) * ( (u : ) in Set.Ioo (-lam) lam, fz eta x u * (starRingEnd ) (φ u)) ^ 2 + znonRealPart Z, (m z) * (( (u : ) in Set.Ioo (-lam) lam, gz eta z u * (starRingEnd ) (φ u)) ^ 2 - ( (u : ) in Set.Ioo (-lam) lam, hz eta z u * (starRingEnd ) (φ u)) ^ 2)

alphaCoeff_eq, restated for a single vector. Definitionally the same statement.

theorem ZetaZeros.alphaOf_im_eq_zero_l2 {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) {φ : (L2Interval lam)} (hsym : IsSymmetricL2 φ) :
(alphaOf eta lam Z m φ).im = 0

A Bessel coefficient against a symmetric element is real.

theorem ZetaZeros.alphaOf_re_nonpos {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) {psi : Fin (Module.finrank (subspaceW h Z m))(L2Interval lam)} (hb : IsAdaptedBasis h Z m psi) {j : Fin (Module.finrank (subspaceW h Z m))} (hsym : IsSymmetricL2 (psi j)) (hj : Module.finrank (subspaceV h Z m) j) :
(alphaOf eta lam Z m (psi j)).re 0

Past dim V the Bessel coefficient is non-positive.

theorem ZetaZeros.memLp_conj_fz {lam : } {eta : } (h : IsAdmissible lam eta) (w : ) :
MeasureTheory.MemLp (fun (u : ) => (starRingEnd ) (fz eta w u)) 2 (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam))

The conjugate of a twisted function is still square-integrable.

theorem ZetaZeros.integral_norm_gz_sq_sub_integral_norm_hz_sq {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
( (u : ) in Set.Ioo (-lam) lam, gz eta z u ^ 2) - (u : ) in Set.Ioo (-lam) lam, hz eta z u ^ 2 = 1

The even and odd parts differ by exactly one in squared norm (lem_g_h_norm_diff).

The kernel at 0 is 1, and by the Gram identity it is the pairing of f_z against f_{conj z}. Pointwise the real part of that pairing is already ‖g_z‖² - ‖h_z‖², because the cross term is g conj h + h conj g = 2 re (g conj h), which is real, so I times it contributes nothing. Taking real parts once — rather than expanding the product into four integrals and discharging integrability for each — is what keeps this short.

theorem ZetaZeros.gzL2_conj {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
gzL2 h ((starRingEnd ) z) = gzL2 h z

Conjugating the index leaves the even part unchanged as an element.

Membership in the non-real support, unfolded.

Conjugation is injective on the complex numbers.

theorem ZetaZeros.conj_mem_nonRealPart {Z : Finset } {m : } (hZ : IsConjInvariant Z m) {z : } (hz : z nonRealPart Z) :

Conjugation maps the non-real support to itself.

theorem ZetaZeros.filter_not_pos_eq_image_filter_pos {Z : Finset } {m : } (hZ : IsConjInvariant Z m) :
{znonRealPart Z | ¬0 < z.im} = Finset.image (⇑(starRingEnd )) ({znonRealPart Z | 0 < z.im})

The lower half of the non-real support is exactly the conjugate image of the upper half. Conjugation has no fixed point there, since every point has non-zero imaginary part.

theorem ZetaZeros.card_nonRealPart_eq_two_mul {Z : Finset } {m : } (hZ : IsConjInvariant Z m) :
(nonRealPart Z).card = 2 * {znonRealPart Z | 0 < z.im}.card

The non-real support has exactly twice as many points as its upper half.

theorem ZetaZeros.finrank_subspaceU_le {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) :

The dimension of U (lem_dim_U). It is spanned by one vector per multiple real point together with the even parts at the non-real points, and conjugation identifies those in pairs, so they contribute only half of |S|. The half is exact rather than a floor, because |S| is even.

Alternating series, and the three external inputs #

theorem ZetaZeros.alternating_series_bracket {a : } (ha : Antitone a) {L : } (hL : Filter.Tendsto (fun (n : ) => iFinset.range n, (-1) ^ i * a i) Filter.atTop (nhds L)) (n : ) :
iFinset.range (2 * n), (-1) ^ i * a i L L iFinset.range (2 * n + 1), (-1) ^ i * a i

Alternating series bracketing (lem_alt_bracket). The partial sums of an alternating series with antitone terms bracket its limit: even-length sums from below, odd-length from above.

Generalised off the source, which also assumes the terms non-negative and null: neither is needed once the limit is a hypothesis, and Mathlib's two one-sided bounds ask only for antitonicity.

Bessel input for the second-range estimate #

theorem ZetaZeros.norm_sq_eq_integral {lam : } (F : (L2Interval lam)) :
F ^ 2 = (u : ) in Set.Ioo (-lam) lam, F u ^ 2

The squared norm as an integral of squared pointwise norms.

theorem ZetaZeros.norm_fzL2_sq_eq_one {lam : } {eta : } (h : IsAdmissible lam eta) {x : } (hx : x.im = 0) :
fzL2 h x ^ 2 = 1

At a real point the twisted function is a unit vector of .

theorem ZetaZeros.inner_eq_zero_of_span_initial {lam : } {N : } {psi : Fin N(L2Interval lam)} (horth : Orthonormal psi) {d : } {K : Submodule (L2Interval lam)} (hspan : Submodule.span (psi '' {i : Fin N | i < d}) = K) {j : Fin N} (hj : d j) (w : (L2Interval lam)) :
w Kinner (psi j) w = 0

Orthogonality to an initial segment's span. If the first d members of an orthonormal family span K, then every later member is orthogonal to all of K.

Factored out because both range estimates need it — for U and for V — with only d changing.

R₁ and R₂ are disjoint: multiplicity exactly one versus at least two.

theorem ZetaZeros.sum_alphaOf_re_le_card_simpleRealPart {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) {psi : Fin (Module.finrank (subspaceW h Z m))(L2Interval lam)} (hb : IsAdaptedBasis h Z m psi) (hsym : ∀ (j : Fin (Module.finrank (subspaceW h Z m))), IsSymmetricL2 (psi j)) :
j : Fin (Module.finrank (subspaceW h Z m)) with Module.finrank (subspaceU h Z m) j j < Module.finrank (subspaceV h Z m), (alphaOf eta lam Z m (psi j)).re (simpleRealPart Z m).card

The second-range estimate (lem_alpha_second_upper). Summed over dim U < j ≤ dim V, the Bessel coefficients are bounded by the number of simple real points.

Past dim U the basis vector is orthogonal to U, so the R₂ and S pairings drop out and only R₁ survives — with weight one, since that is what R₁ means. Discarding the subtracted h_z sum (non-negative) and applying Bessel to each f_x, which is a unit vector at a real point, gives one per point of R₁.

The cutoff normalising constant #

The extremal test function is non-negative everywhere: positive on [-1/2, 1/2] and zero off it.

theorem ZetaZeros.cutoffNormaliser_pos {delta : } (hd : 0 < delta) (hd4 : delta < 1 / 4) {psi : } (hpsi : IsCutoff delta psi) :

The normalising constant is positive.

The integrand ψ²f₀ is non-negative, and on |x| ≤ 1/2 - δ it equals f₀ > 0, a set of positive measure. Note it is NOT positive throughout (-1/2, 1/2): a cutoff may vanish between 1/2 - δ and 1/2, so the argument has to go through the support rather than through positivity on the whole interval.

0 < δ is genuinely needed, not decoration: with δ negative the shrunken interval |x| ≤ 1/2 - δ would be LARGER than [-1/2, 1/2], and f₀ is only positive on the latter.

theorem ZetaZeros.sum_sq_norm_inner_eq_norm_sq_of_span {lam : } {iota : Type u_1} [Fintype iota] {psi : iota(L2Interval lam)} (horth : Orthonormal psi) {x : (L2Interval lam)} (hx : x Submodule.span (Set.range psi)) :
j : iota, inner (psi j) x ^ 2 = x ^ 2

Parseval at elements of the span, for an arbitrary finite index type.

Mathlib has Bessel for an arbitrary element (Orthonormal.sum_inner_products_le) and the equality only through OrthonormalBasis, which wants the family to span the WHOLE space. Here the family spans a proper submodule, so the statement is proved from the expansion directly: the inner product against a basis vector picks out that coefficient, and the squared norm is the sum of the squared coefficients.

theorem ZetaZeros.sum_sq_norm_inner_eq_norm_sq_of_mem_span {lam : } {N : } {psi : Fin N(L2Interval lam)} (horth : Orthonormal psi) {x : (L2Interval lam)} (hx : x Submodule.span (Set.range psi)) :
j : Fin N, inner (psi j) x ^ 2 = x ^ 2

The Fin N specialization of sum_sq_norm_inner_eq_norm_sq_of_span.

theorem ZetaZeros.integral_tensor_square_pairing {lam : } {ι : Type u_1} [DecidableEq ι] (psi : ι(MeasureTheory.Lp 2 (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)))) (h : Orthonormal psi) (j l : ι) :
(u : ) (v : ) in Set.Ioo (-lam) lam, (psi j) u * (psi j) v * (starRingEnd ) ((psi l) u * (psi l) v) = if j = l then 1 else 0

The tensor squares pair as the square of the inner product, hence are orthonormal in L²(I²).

This needs no Fubini: the double integral factors by pulling a constant out of each integral, the same route integral_double_finsetSum takes.

The total Bessel sum #

theorem ZetaZeros.norm_gzL2_sq {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
gzL2 h z ^ 2 = (u : ) in Set.Ioo (-lam) lam, gz eta z u ^ 2

gzL2 has the squared norm of gz.

theorem ZetaZeros.norm_hzL2_sq {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
hzL2 h z ^ 2 = (u : ) in Set.Ioo (-lam) lam, hz eta z u ^ 2

hzL2 has the squared norm of hz.

theorem ZetaZeros.norm_gzL2_sq_sub_norm_hzL2_sq {lam : } {eta : } (h : IsAdmissible lam eta) (z : ) :
gzL2 h z ^ 2 - hzL2 h z ^ 2 = 1

integral_norm_gz_sq_sub_integral_norm_hz_sq at the level of elements.

theorem ZetaZeros.natCast_mul_sq_re {w : } (hw : w.im = 0) (n : ) :
(n * w ^ 2).re = n * w ^ 2

The real part of a natural multiple of the square of a real complex number.

Not private: a private name is mangled, so the axiom probe reports Unknown constant for it and then cannot gate the file at all.

theorem ZetaZeros.sum_alphaOf_re_eq_sum_mult {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) {psi : Fin (Module.finrank (subspaceW h Z m))(L2Interval lam)} (hb : IsAdaptedBasis h Z m psi) (hsym : ∀ (j : Fin (Module.finrank (subspaceW h Z m))), IsSymmetricL2 (psi j)) :
j : Fin (Module.finrank (subspaceW h Z m)), (alphaOf eta lam Z m (psi j)).re = zZ, (m z)

The total Bessel sum (lem_alpha_sum_total). Over the whole basis the coefficients sum to the total multiplicity.

Parseval, not Bessel: the pairings are summed over the FULL basis, so each spanning vector contributes exactly its squared norm — one for each f_x at a real point, and one for each non-real z by the norm defect between g_z and h_z.

The adapted orthonormal basis #

The new ingredient over standard Gram--Schmidt is that every vector stays in the prescribed real subspace, which is what carries the paper's symmetry.

Scoped in a section: it opens Set and Submodule, which the rest of this file does not.

theorem ZetaZeros.gramSchmidt_mem_S {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] (S : Submodule E) (hreal : aS, bS, (inner a b).im = 0) {n : } (v : Fin nE) (hv : ∀ (i : Fin n), v i S) (i : Fin n) :

(Crux, uses hreal.) Every Gram-Schmidt vector of a family lying in the real subspace S stays in S.

Argument: strong induction on i using the recursion gramSchmidt ℂ v i = v i - ∑_{k<i} (ℂ ∙ gramSchmidt ℂ v k).starProjection (v i) (InnerProductSpace.gramSchmidt_def). Each summand is (ℂ ∙ g k).starProjection (v i); for a unit vector u, (ℂ ∙ u).starProjection w = ⟪u,w⟫ • u, and in general the projection onto the line ℂ ∙ (g k) is (⟪g k, v i⟫ / ‖g k‖²) • g k. By the induction hypothesis g k ∈ S, and v i ∈ S, so by hreal the coefficient ⟪g k, v i⟫ is real; dividing by the real ‖g k‖² keeps it real. Since S is an -submodule it is closed under real scalar multiplication, so each summand lies in S, and thus v i - (sum) = g i ∈ S.

theorem ZetaZeros.gramSchmidtNormed_mem_S {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] (S : Submodule E) (hreal : aS, bS, (inner a b).im = 0) {n : } (v : Fin nE) (hv : ∀ (i : Fin n), v i S) (i : Fin n) :

The normalized Gram-Schmidt vectors also stay in S: gn i = ‖g i‖⁻¹ • g i is a real scalar multiple of g i ∈ S.

theorem ZetaZeros.exists_adapted_orthonormal_basis {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] (S : Submodule E) (hreal : aS, bS, (inner a b).im = 0) {n : } (v : Fin nE) (hv : ∀ (i : Fin n), v i S) (dU dV : ) (hUV : dU dV) (hVn : dV n) :

Existence of an adapted orthonormal basis inside a real subspace.

v is a finite ordered family spanning W; its initial segments of lengths dU and dV span two nested subspaces. There is an orthonormal family spanning the same W, lying in S, whose own initial segments (of the appropriate dimensions) span those same two subspaces.

A symmetric adapted basis for the three Hilbert subspaces #

theorem ZetaZeros.range_finset_enum {E : Type u_1} (s : Finset E) :
(Set.range fun (i : Fin s.card) => (s.equivFin.symm i)) = s

Enumerating a finset through its canonical equivalence with Fin has precisely the finset as its range.

theorem ZetaZeros.range_fin_append {E : Type u_1} {a b : } (f : Fin aE) (g : Fin bE) :

The range of two finite families appended together is the union of their ranges.

theorem ZetaZeros.image_append_lt_left {E : Type u_1} {a b : } (f : Fin aE) (g : Fin bE) :
Fin.append f g '' {i : Fin (a + b) | i < a} = Set.range f

The first block in an appended finite family has the expected image.

theorem ZetaZeros.image_append_lt_of_le {E : Type u_1} {a b d : } (f : Fin aE) (g : Fin bE) (hd : d a) :
Fin.append f g '' {i : Fin (a + b) | i < d} = f '' {i : Fin a | i < d}

An initial segment lying in the left block of an appended family is computed in that block.

theorem ZetaZeros.exists_symmetric_adapted_basis {lam : } {eta : } (h : IsAdmissible lam eta) (Z : Finset ) (m : ) :
∃ (psi : Fin (Module.finrank (subspaceW h Z m))(L2Interval lam)), IsAdaptedBasis h Z m psi ∀ (j : Fin (Module.finrank (subspaceW h Z m))), IsSymmetricL2 (psi j)

A symmetric adapted basis exists.

Order the natural spanning vectors in three blocks: the generators of U, the further generators of V, and the further generators of W. The real Gram–Schmidt construction above then preserves symmetry and its initial segments span exactly U and V.

Multiplicity of a non-trivial zero #

Every non-trivial zero has multiplicity at least one (lem_mult_pos).

Two things have to be ruled out, and only one of them is the obvious one. The order is not 0 because zeta is analytic at the point and vanishes there. It is also not : zeta is not identically zero near the point, and the only route to that is the identity theorem on the punctured plane, where zeta 2 ≠ 0 supplies the contradiction.

The rescaled zeros carry the three counts #

The rescaling is injective: it is affine with non-zero linear coefficient.

theorem ZetaZeros.rescaledMult_rescale {T : } (hT : 1 < T) (rho : ) :

The transported multiplicity agrees with the original at a rescaled point.

The rescaled zeros carry the counted total (part of lem_Z_T_counts).

The rescaled zeros carry the distinct count (part of lem_Z_T_counts).

The rescaled zeros carry the simple-on-line count (part of lem_Z_T_counts).

The third of the entity's three conjuncts. Under the bijection a rescaled point is real exactly when the zero is on the critical line (rescale_im_eq_zero_iff) and has multiplicity one exactly when the zero does.

theorem ZetaZeros.sum_sq_norm_inner_eq_norm_sq_of_mem_span_finset {lam : } {iota : Type u_1} {psi : iota(L2Interval lam)} (horth : Orthonormal psi) (s : Finset iota) {x : (L2Interval lam)} (hx : x Submodule.span (psi '' s)) :
js, inner (psi j) x ^ 2 = x ^ 2

Parseval over a sub-family, at elements of that sub-family's span.

The normalised test function has total mass one #

theorem ZetaZeros.cutoffTestSq_eq {delta : } {psi : } (hd : 0 < delta) (hd4 : delta < 1 / 4) (h : IsCutoff delta psi) (x : ) :

The normalised square, written out: f_psi = psi² f₀ / A_psi. The square roots cancel because both f₀ and A_psi are non-negative.

theorem ZetaZeros.integral_cutoffTestSq {delta : } {psi : } (hd : 0 < delta) (hd4 : delta < 1 / 4) (h : IsCutoff delta psi) :
(x : ), cutoffTestSq psi x = 1

The normalised test function has total mass one (lem_f_psi_integral).

theorem ZetaZeros.fourierC_cutoffTestSq_zero {delta : } {psi : } (hd : 0 < delta) (hd4 : delta < 1 / 4) (h : IsCutoff delta psi) :

Its Fourier transform at zero is one (lem_f_psi_integral).

Bessel for a kernel against tensor squares #

The abstract statement: it mentions no admissible eta, no bigF and no alphaCoeff. What the instantiation still needs is that bigF and the tensor squares are MemLp 2 for the product measure; the orthonormality hypothesis is discharged by integral_tensor_square_pairing.

theorem ZetaZeros.sum_sq_pairing_le_integral_norm_sq {lam : } {N : } (K : ) (phi : Fin N) (hK : MeasureTheory.MemLp (fun (p : × ) => K p.1 p.2) 2 ((MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)).prod (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)))) (hphi : ∀ (j : Fin N), MeasureTheory.MemLp (fun (p : × ) => phi j p.1 * phi j p.2) 2 ((MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)).prod (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)))) (horth : ∀ (j l : Fin N), (u : ) (v : ) in Set.Ioo (-lam) lam, phi j u * phi j v * (starRingEnd ) (phi l u * phi l v) = if j = l then 1 else 0) :
j : Fin N, (u : ) (v : ) in Set.Ioo (-lam) lam, K u v * (starRingEnd ) (phi j u * phi j v) ^ 2 (u : ) (v : ) in Set.Ioo (-lam) lam, K u v ^ 2

Bessel for a kernel paired against tensor squares.

phi is a finite family whose tensor squares are orthonormal in the iterated-integral pairing (horth). Then the squared pairings of the kernel K against them are dominated by the squared norm of K.

theorem ZetaZeros.memLp_tensor_two {alpha : Type u_1} {beta : Type u_2} [MeasurableSpace alpha] [MeasurableSpace beta] {mu : MeasureTheory.Measure alpha} {nu : MeasureTheory.Measure beta} {f : alpha} {g : beta} (hf : MeasureTheory.MemLp f 2 mu) (hg : MeasureTheory.MemLp g 2 nu) :
MeasureTheory.MemLp (fun (p : alpha × beta) => f p.1 * g p.2) 2 (mu.prod nu)

The tensor product of two functions is for the product measure.

theorem ZetaZeros.isAdmissible_cutoffTest {delta : } (hd : 0 < delta) (hd4 : delta < 1 / 4) {psi : } (h : IsCutoff delta psi) :
IsAdmissible (1 / 2) (cutoffTest psi)

The normalised cutoff test function is 1/2-admissible.

Three of the four fields are the smoothness, support and integral facts for cutoffTest read off directly. Only square-integrability is new, and it is immediate once the function is known to be continuous with compact support -- which is why HasCompactSupport was worth stating there rather than leaving the support condition purely pointwise.

The kernel sums agree #

The double sum over the rescaled zeros and the double sum over the actual zeros are the same sum, reindexed along the rescaling. Two facts carry it: the rescaling is injective, so Finset.sum_image applies at both levels; and it turns a difference of zeros into exactly the rescaled difference the pair-correlation formula is stated with.

Stated without an admissibility hypothesis on eta: nothing in a reindexing can use it.

theorem ZetaZeros.rescale_sub_rescale (T : ) (rho rho' : ) :
rescale T rho - rescale T rho' = rescaledDiff T rho rho'

The rescaling turns a difference of zeros into the rescaled difference.

theorem ZetaZeros.sum_testKernel_sq_eq_finsum_rescaledDiff {T : } (hT : 1 < T) (eta : ) :
zrescaledZerosFinset T, srescaledZerosFinset T, ↑(rescaledMult T z * rescaledMult T s) * testKernel eta (z - s) ^ 2 = ∑ᶠ (rho : ) (_ : rho nontrivialZeros T) (rho' : ) (_ : rho' nontrivialZeros T), ↑(zeroMultiplicity rho * zeroMultiplicity rho') * testKernel eta (rescaledDiff T rho rho') ^ 2

The kernel sums agree (lem_kernel_sum_identity).

The Fourier transform of the self-convolution #

The convolution theorem, at a complex frequency. The move worth keeping is to abstract the character: the statement holds for any continuous E : ℝ → ℂ with E (a + b) = E a * E b, and the complex frequency then stops being special -- no analytic-continuation argument is needed, only Fubini on the compactly supported integrand.

The bookkeeping behind the second moment #

A double integral whose integrand is a finite double sum with factored terms equals the double sum of the products of the single integrals. Also stated abstractly.

theorem ZetaZeros.selfConv_aux (f : ) (hf : Continuous f) (hsupp : HasCompactSupport f) (E : ) (hEadd : ∀ (a b : ), E (a + b) = E a * E b) (hEcont : Continuous E) :
(x : ), ( (t : ), f t * f (x - t)) * E x = ( (u : ), (f u) * E u) ^ 2

Abstract version: for any continuous multiplicative character E, the "transform" of a self-convolution factors.

theorem ZetaZeros.fourierC_selfConv (f : ) (hf : Continuous f) (hsupp : HasCompactSupport f) (ξ : ) :
fourierC (fun (x : ) => (t : ), f t * f (x - t)) ξ = fourierC f ξ ^ 2

The transform of a self-convolution is the square of the transform.

theorem ZetaZeros.integral_integral_double_sum_factored {iota : Type u_1} (F : Finset iota) (mu : MeasureTheory.Measure ) (c : iotaiota) (a : iotaiota) (ha : ∀ (i j : iota), MeasureTheory.Integrable (a i j) mu) :
(u : ), (v : ), iF, jF, c i j * a i j u * a i j v mu mu = iF, jF, (c i j * (u : ), a i j u mu) * (v : ), a i j v mu

A double integral of a factored double sum.

The two instantiations #

theorem ZetaZeros.fourierC_cutoffSelfConv {delta : } {psi : } (h : IsCutoff delta psi) (z : ) :

The transform of Q_psi is the square of the kernel (lem_Q_psi_hat).

theorem ZetaZeros.integrable_fz_mul_conj_fz {lam : } {eta : } (h : IsAdmissible lam eta) (z s : ) :
MeasureTheory.Integrable (fun (u : ) => fz eta z u * (starRingEnd ) (fz eta s u)) (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam))

A twisted function against another twisted function's conjugate is integrable.

Distinct from the existing integrable_fz_mul_conj, which pairs against an ELEMENT. That one is not syntactically usable here: (fzL2 h s : ℝ → ℂ) is only a.e. equal to fz eta s, so applying it would need an Integrable.congr where memLp_fz directly needs nothing.

theorem ZetaZeros.sum_testKernel_sq_eq_integral_bigF_mul_conj {lam : } {eta : } (h : IsAdmissible lam eta) (Z : Finset ) (m : ) :
zZ, sZ, ↑(m z * m s) * testKernel eta (z - (starRingEnd ) s) ^ 2 = (u : ) (v : ) in Set.Ioo (-lam) lam, bigF eta Z m u v * (starRingEnd ) (bigF eta Z m u v)

The second moment is the L²(I²) norm of the two-variable kernel (lem_second_moment).

Bessel's inequality for the two-variable kernel #

The abstract inequality is sum_sq_pairing_le_integral_norm_sq, and the orthonormality of the tensor squares is integral_tensor_square_pairing. What is left is the integrability, which is proved here rather than assumed as a hypothesis.

bigF is a finite sum of tensor products, so memLp_tensor_two on each summand and memLp_finsetSum over Z does it; the basis members give their tensor squares the same way.

Realness of the coefficients is not needed. The usual argument invokes alphaCoeff_im_eq_zero to turn |alpha_j|^2 into alpha_j^2; but the norm form is the stronger inequality and (re a)^2 ≤ ‖a‖^2 holds for every complex a, so the real-coefficient form follows with no appeal to realness, no conjugation-invariance and no symmetry hypothesis. That matters practically: alphaCoeff_im_eq_zero wants pointwise IsSymmetric, whereas a Gram--Schmidt basis is only symmetric almost everywhere.

theorem ZetaZeros.memLp_bigF {lam : } {eta : } (h : IsAdmissible lam eta) (Z : Finset ) (m : ) :
MeasureTheory.MemLp (fun (p : × ) => bigF eta Z m p.1 p.2) 2 ((MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)).prod (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)))

The two-variable kernel is on the square: it is a finite sum of tensor products.

theorem ZetaZeros.memLp_tensor_square {lam : } (psi : (L2Interval lam)) :
MeasureTheory.MemLp (fun (p : × ) => psi p.1 * psi p.2) 2 ((MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)).prod (MeasureTheory.volume.restrict (Set.Ioo (-lam) lam)))

The tensor square of an element is on the square.

theorem ZetaZeros.sum_norm_alphaOf_sq_le_integral_norm_bigF_sq {lam : } {eta : } (h : IsAdmissible lam eta) {Z : Finset } {m : } {N : } (psi : Fin N(L2Interval lam)) (horth : Orthonormal psi) :
j : Fin N, alphaOf eta lam Z m (psi j) ^ 2 (u : ) (v : ) in Set.Ioo (-lam) lam, bigF eta Z m u v ^ 2

Bessel's inequality for the kernel, in norm form. Stronger than the real-coefficient form, and what actually gets proved.

theorem ZetaZeros.sum_alphaOf_re_sq_le_integral_norm_bigF_sq {lam : } {eta : } (h : IsAdmissible lam eta) {Z : Finset } {m : } {N : } (psi : Fin N(L2Interval lam)) (horth : Orthonormal psi) :
j : Fin N, (alphaOf eta lam Z m (psi j)).re ^ 2 (u : ) (v : ) in Set.Ioo (-lam) lam, bigF eta Z m u v ^ 2

Bessel's inequality for the kernel (lem_bessel_F).

Stated without conjugation-invariance of (Z, m) and without symmetry of the basis members: the norm form above needs neither, and (re a)^2 <= ‖a‖^2 delivers this from it.

The rescaled multiset is conjugation-invariant #

The composite symmetry rho ↦ 1 - conj rho is what makes the rescaled zeros conjugation-invariant. Both halves are available: zeroMultiplicity_conj for conjugation and zeroMultiplicity_one_sub for the reflection.

The computation is that conjugating a rescaled zero rescales the REFLECTED CONJUGATE: conj (rescale T rho) = rescale T (1 - conj rho). Everything else follows, and the vanishing of zeta at 1 - conj rho comes straight from the functional equation rather than through the multiplicity -- zeta (conj rho) = conj (zeta rho) = 0, so the product form vanishes.

theorem ZetaZeros.conj_rescale (T : ) (rho : ) :

Conjugating a rescaled point rescales the reflected conjugate.

The reflected conjugate of a non-trivial zero is a non-trivial zero at the same height.

theorem ZetaZeros.zeroMultiplicity_one_sub_conj {rho : } (hre0 : 0 < rho.re) (hre1 : rho.re < 1) :

The multiplicity is unchanged by the composite symmetry.

The rescaled multiset is conjugation-invariant (lem_Z_T_conj).

The tensor square of an function belongs to for the product measure.

The kernel second moment #

theorem ZetaZeros.sum_testKernel_sq_eq_integral_norm_bigF_sq {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) :
zZ, sZ, (m z) * (m s) * testKernel eta (z - s) ^ 2 = (u : ) (v : ) in Set.Ioo (-lam) lam, ↑(bigF eta Z m u v ^ 2)

The unconjugated finite kernel sum is the product-space second moment of bigF.

The Gram identity initially conjugates the second support point; conjugation invariance permits the change of variables back to the difference z - s.

theorem ZetaZeros.sum_testKernel_sq_re_eq_integral_norm_bigF_sq {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) :
(∑ zZ, sZ, (m z) * (m s) * testKernel eta (z - s) ^ 2).re = (u : ) (v : ) in Set.Ioo (-lam) lam, bigF eta Z m u v ^ 2

Real-valued form of the second-moment identity, matching the right side of Bessel's inequality.

The first-range coefficient estimate #

theorem ZetaZeros.alphaOf_re_eq_sum_norm {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) {phi : (L2Interval lam)} (hsym : IsSymmetricL2 phi) :
(alphaOf eta lam Z m phi).re = xsimpleRealPart Z m multipleRealPart Z m, (m x) * inner phi (fzL2 h x) ^ 2 + znonRealPart Z, (m z) * (inner phi (gzL2 h z) ^ 2 - inner phi (hzL2 h z) ^ 2)

The real part of one coefficient expressed entirely in squared Hilbert-space pairings.

This is the common pointwise form used by the Parseval/Bessel arguments for the three basis ranges. Symmetry makes all the pairings real, so the real part of their complex squares is their squared norm.

theorem ZetaZeros.sum_alphaOf_re_first_lower {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) {psi : Fin (Module.finrank (subspaceW h Z m))(L2Interval lam)} (hb : IsAdaptedBasis h Z m psi) (hsym : ∀ (j : Fin (Module.finrank (subspaceW h Z m))), IsSymmetricL2 (psi j)) :
2 * (multipleRealPart Z m).card + (nonRealPart Z).card j : Fin (Module.finrank (subspaceW h Z m)) with j < Module.finrank (subspaceU h Z m), (alphaOf eta lam Z m (psi j)).re

First range: lower bound for the coefficient sum (lem_alpha_first_lower).

Parseval on the initial segment spanning U is exact for the f_x at multiple real points and the g_z at non-real points. Bessel bounds the subtracted h_z terms, leaving the unit norm defect. Finally multiplicities are at least two on R₂ and at least one on the support.

Three-range algebra #

theorem ZetaZeros.three_range_simple {N dU dV R1 R2 S : } (a : Fin N) (hdUV : dU dV) (hdVN : dV N) (hdU : dU R2 + S / 2) (hdGap : dV dU + R1) (hfirst : 2 * R2 + S j : Fin N with j < dU, a j) (hthird : ∀ (j : Fin N), dV ja j 0) :
2 * j : Fin N, a j - R1 j : Fin N, a j ^ 2

The numerical three-range estimate used for the simple-real-point bound.

The first range uses a² + 4 ≥ 4a, the middle range uses a² + 1 ≥ 2a, and the last range uses a ≤ 0.

theorem ZetaZeros.card_simpleRealPart_lower {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) :
2 * zZ, (m z) - (∑ zZ, sZ, (m z) * (m s) * testKernel eta (z - s) ^ 2).re (simpleRealPart Z m).card

Lower bound for the simple real elements (prop_simple_real_lower).

theorem ZetaZeros.three_range_distinct {N dU dV R1 R2 S : } (a : Fin N) (hdUV : dU dV) (hdVN : dV N) (hdU : dU R2 + S / 2) (hdGap : dV dU + R1) (hsecond : j : Fin N with dU j j < dV, a j R1) (hthird : ∀ (j : Fin N), dV ja j 0) (hmult : R1 + 2 * R2 + S j : Fin N, a j) :
3 * j : Fin N, a j - 2 * (R1 + R2 + S) j : Fin N, a j ^ 2

The numerical three-range estimate used for the distinct-point bound.

Compared with three_range_simple, all three ranges retain a factor four. On the middle range, the upper bound on its coefficient sum supplies the extra factor two.

theorem ZetaZeros.card_lower {lam : } {eta : } {Z : Finset } {m : } (h : IsAdmissible lam eta) (hZ : IsConjInvariant Z m) :
3 / 2 * zZ, (m z) - 1 / 2 * (∑ zZ, sZ, (m z) * (m s) * testKernel eta (z - s) ^ 2).re Z.card

Lower bound for the distinct elements (prop_distinct_lower).