pith. machine review for the scientific record. sign in

IndisputableMonolith.NumberTheory.HilbertPolyaFunctionField

IndisputableMonolith/NumberTheory/HilbertPolyaFunctionField.lean · 175 lines · 8 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   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

source mirrored from github.com/jonwashburn/shape-of-logic