Paper IV · Lean source

ZeroLatticeComparison.lean

Selected results recorded Coverage and evidence

Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.

This viewer reads the retained source; it does not run Lean or assign new claim mappings.

Local imports (2)

KomorebiPaperIV/ZeroLatticeComparison.lean119 lines

Original source pathPaper_IV_Verification_Closeout_v1.1.0/formalization/lean/KomorebiPaperIV/ZeroLatticeComparison.lean
Skip declarations and read code

Skip source text

1 /-
2 Copyright (c) 2026 Komorebi P. All rights reserved.
3 Authors: Komorebi P.
4 -/
5 import KomorebiPaperIV.ExponentialZetaComparison
6 import KomorebiPaperIV.HurwitzLattice
7 
8 namespace Komorebi.PaperIV
9 noncomputable section
10 open Set Filter
11 open scoped Topology
12 
13 theorem positiveZetaTerm_mul {x y : ℝ} (hx : 0 < x) (hy : 0 < y) (s : ℂ) :
14     positiveZetaTerm (x * y) s = positiveZetaTerm x s * positiveZetaTerm y s := by
15   simp only [positiveZetaTerm, Real.log_mul hx.ne' hy.ne', Complex.ofReal_add, mul_add,
16     Complex.exp_add]
17 
18 theorem positiveZetaTerm_eq_cpow {x : ℝ} (hx : 0 < x) (s : ℂ) :
19     positiveZetaTerm x s = 1 / (x : ℂ) ^ s := by
20   rw [one_div, Complex.cpow_def_of_ne_zero (Complex.ofReal_ne_zero.mpr hx.ne'),
21     ← Complex.exp_neg, ← Complex.ofReal_log hx.le]
22   unfold positiveZetaTerm
23   congr 1
24   ring
25 
26 theorem positiveZetaTerm_norm {x : ℝ} (hx : 0 < x) (s : ℂ) :
27     ‖positiveZetaTerm x s‖ = 1 / x ^ s.re := by
28   simpa only [weightedDirichletTerm, Nat.cast_one, one_mul, positiveZetaTerm] using
29     weightedDirichletTerm_norm (fun _ : Unit => 1) (fun _ => x) (fun _ => hx) () s
30 
31 theorem positiveZetaTerm_lattice_hasSum {A : ℝ} (hA : 0 < A) (s : ℂ) (hs : 1 < s.re) :
32     HasSum (fun m : ℕ => positiveZetaTerm (A * ((m : ℝ) + 1 / 2)) s)
33       (hurwitzLatticeModel A 1 s) := by
34   have h := (HurwitzZeta.hasSum_hurwitzZeta_of_one_lt_re
35     (show (1 / 2 : ℝ) ∈ Icc 0 1 by constructor <;> norm_num) hs).mul_left (positiveZetaTerm A s)
36   convert! h using 1
37   · funext m
38     rw [positiveZetaTerm_mul hA (by positivity), positiveZetaTerm_eq_cpow (x := (m : ℝ) + 1 / 2) (by positivity)]
39     push_cast
40     rfl
41   · simp only [hurwitzLatticeModel, Nat.cast_one, one_mul, positiveZetaTerm]
42 
43 theorem signedZeroCenter_positive {N : ℕ} (hN : 2 ≤ N) (m : ℕ) :
44     0 < signedZeroCenter N m := by
45   unfold signedZeroCenter
46   exact mul_pos (div_pos Real.pi_pos (signed_sine_pos hN)) (by positivity)
47 
48 theorem signedZeroCenter_reciprocal_square_summable {N : ℕ} (hN : 2 ≤ N) :
49     Summable (fun m => 1 / signedZeroCenter N m ^ (2 : ℝ)) := by
50   have h := (positiveZetaTerm_lattice_hasSum
51     (div_pos Real.pi_pos (signed_sine_pos hN)) (2 : ℂ) (by norm_num)).summable.norm
52   change Summable (fun m => ‖positiveZetaTerm (signedZeroCenter N m) (2 : ℂ)‖) at h
53   simpa only [positiveZetaTerm_norm (signedZeroCenter_positive hN _), show (2 : ℂ).re = (2 : ℝ) by rfl] using! h
54 
55 theorem SignedZeroEnumeration.root_tendsto_atTop {N : ℕ} (hN : 2 ≤ N)
56     (e : SignedZeroEnumeration N) : Tendsto e.root atTop atTop := by
57   exact (e.root_equivalent_lattice hN).symm.tendsto_atTop
58     ((tendsto_natCast_atTop_atTop (R := ℝ)).const_mul_atTop
59       (div_pos Real.pi_pos (signed_sine_pos hN)))
60 
61 def SignedZeroEnumeration.latticeCorrection {N : ℕ} (e : SignedZeroEnumeration N) (s : ℂ) : ℂ :=
62   ∑' m, exponentialZetaDifference e.root (fun j => signedZeroCenter N (j + e.offset)) m s
63 
64 theorem SignedZeroEnumeration.latticeCorrection_locally_uniform {N : ℕ} (hN : 2 ≤ N)
65     (e : SignedZeroEnumeration N) :
66     HasSumLocallyUniformlyOn
67       (exponentialZetaDifference e.root (fun j => signedZeroCenter N (j + e.offset)))
68       e.latticeCorrection univ := by
69   obtain ⟨C, hC, γ, hγ, hdisp⟩ := e.displacement
70   apply exponentialZetaDifference_locally_uniform
71     (fun m => signedZeroCenter_positive hN _) (e.root_tendsto_atTop hN)
72     ((signedZeroCenter_tendsto_atTop hN).comp (tendsto_add_atTop_nat e.offset))
73     ((signedZeroCenter_reciprocal_square_summable hN).comp_injective (fun _ _ h => Nat.add_right_cancel h))
74     hC hγ
75   exact Eventually.of_forall hdisp
76 
77 theorem SignedZeroEnumeration.latticeCorrection_entire {N : ℕ} (hN : 2 ≤ N)
78     (e : SignedZeroEnumeration N) : Differentiable ℂ e.latticeCorrection := by
79   apply differentiableOn_univ.mp
80   exact (e.latticeCorrection_locally_uniform hN).summableLocallyUniformlyOn.differentiableOn
81     isOpen_univ (fun m s _ => exponentialZetaDifference_entire _ _ m s)
82 
83 theorem SignedZeroEnumeration.positiveZetaTerm_summable {N : ℕ} (hN : 2 ≤ N)
84     (e : SignedZeroEnumeration N) {s : ℂ} (hs : 1 < s.re) :
85     Summable (fun m => positiveZetaTerm (e.root m) s) := by
86   apply Summable.of_norm
87   simp only [positiveZetaTerm_norm (e.positive _)]
88   exact (e.root_reciprocal_rpow_summable_iff hN _).mpr hs
89 
90 def SignedZeroEnumeration.latticePrefix {N : ℕ} (e : SignedZeroEnumeration N) (s : ℂ) : ℂ :=
91   ∑ m ∈ Finset.range e.offset, positiveZetaTerm (signedZeroCenter N m) s
92 
93 theorem SignedZeroEnumeration.latticePrefix_entire {N : ℕ} (e : SignedZeroEnumeration N) :
94     Differentiable ℂ e.latticePrefix := by
95   unfold SignedZeroEnumeration.latticePrefix
96   exact Differentiable.fun_sum (fun m _ => positiveZetaTerm_entire _)
97 
98 /-- Equality with the unshifted Hurwitz model; the finite prefix is retained. -/
99 theorem SignedZeroEnumeration.root_zeta_eq_model {N : ℕ} (hN : 2 ≤ N)
100     (e : SignedZeroEnumeration N) {s : ℂ} (hs : 1 < s.re) :
101     (∑' m, positiveZetaTerm (e.root m) s) =
102       hurwitzLatticeModel (Real.pi / Real.sin (Real.pi / N)) 1 s +
103         e.latticeCorrection s - e.latticePrefix s := by
104   have hmodel := positiveZetaTerm_lattice_hasSum
105     (div_pos Real.pi_pos (signed_sine_pos hN)) s hs
106   have hsum := hmodel.summable
107   have htail := hsum.comp_injective (fun _ _ h => Nat.add_right_cancel h :
108     Function.Injective (fun m : ℕ => m + e.offset))
109   have hc : e.latticeCorrection s = (∑' m, positiveZetaTerm (e.root m) s) -
110       ∑' m, positiveZetaTerm (signedZeroCenter N (m + e.offset)) s :=
111     (e.positiveZetaTerm_summable hN hs).tsum_sub htail
112   have hp := hsum.sum_add_tsum_nat_add e.offset
113   rw [hmodel.tsum_eq] at hp
114   change e.latticePrefix s + (∑' m, positiveZetaTerm (signedZeroCenter N (m + e.offset)) s) = _ at hp
115   rw [hc]
116   linear_combination hp
117 
118 end
119 end Komorebi.PaperIV

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: e4d0a732e5a8f41eccd3e68f8b4aeea1c9f8f46d14961e27df3dad09f0e51d1c

Original source on GitHub

Back to Paper IV: Cyclic Analytic Functions, Reciprocal Families, and Spectral Zero Data