11.1. HardyZeta.CriticalLine
def criticalPoint (t : ℝ) : ℂ := 1 / 2 + t * Complex.I@[simp] theorem criticalPoint_re (t : ℝ) : (criticalPoint t).re = 1 / 2 := t:ℝ⊢ (criticalPoint t).re = 1 / 2
All goals completed! 🐙@[simp] theorem criticalPoint_im (t : ℝ) : (criticalPoint t).im = t := t:ℝ⊢ (criticalPoint t).im = t
All goals completed! 🐙theorem criticalPoint_injective : Function.Injective criticalPoint := ⊢ Function.Injective criticalPoint
t:ℝu:ℝh:criticalPoint t = criticalPoint u⊢ t = u
All goals completed! 🐙theorem criticalPoint_ne_zero (t : ℝ) : criticalPoint t ≠ 0 := t:ℝ⊢ criticalPoint t ≠ 0
t:ℝh:criticalPoint t = 0⊢ False
t:ℝh:criticalPoint t = 0this:(criticalPoint t).re = Complex.re 0⊢ False
All goals completed! 🐙theorem criticalPoint_ne_one (t : ℝ) : criticalPoint t ≠ 1 := t:ℝ⊢ criticalPoint t ≠ 1
t:ℝh:criticalPoint t = 1⊢ False
t:ℝh:criticalPoint t = 1this:(criticalPoint t).re = Complex.re 1⊢ False
All goals completed! 🐙theorem continuous_criticalPoint : Continuous criticalPoint := ⊢ Continuous criticalPoint
⊢ Continuous fun t => 1 / 2 + ↑t * Complex.I
All goals completed! 🐙
/-- Riemann's xi normalization, used only away from its removable singularities here. -/def xi (s : ℂ) : ℂ := (1 / 2) * s * (s - 1) * completedRiemannZeta s
/-- The complex-valued restriction; reality is a separate theorem, not a coercion assumption. -/def criticalXi (t : ℝ) : ℂ := xi (criticalPoint t)theorem completedZeta_criticalPoint_eq_zero_iff (t : ℝ) :
completedRiemannZeta (criticalPoint t) = 0 ↔ riemannZeta (criticalPoint t) = 0 := t:ℝ⊢ completedRiemannZeta (criticalPoint t) = 0 ↔ riemannZeta (criticalPoint t) = 0
t:ℝ⊢ completedRiemannZeta (criticalPoint t) = 0 ↔ completedRiemannZeta (criticalPoint t) / (criticalPoint t).Gammaℝ = 0
have hg : Complex.Gammaℝ (criticalPoint t) ≠ 0 :=
Complex.Gammaℝ_ne_zero_of_re_pos (by t:ℝ⊢ 0 < (criticalPoint t).re simp All goals completed! 🐙) t:ℝhg:(criticalPoint t).Gammaℝ ≠ 0⊢ completedRiemannZeta (criticalPoint t) = 0 ↔ completedRiemannZeta (criticalPoint t) / (criticalPoint t).Gammaℝ = 0
simp [div_eq_zero_iff, hg] All goals completed! 🐙theorem criticalXi_eq_zero_iff (t : ℝ) :
criticalXi t = 0 ↔ riemannZeta (criticalPoint t) = 0 := by t:ℝ⊢ criticalXi t = 0 ↔ riemannZeta (criticalPoint t) = 0
simp only [criticalXi, xi, mul_eq_zero] t:ℝ⊢ ((1 / 2 = 0 ∨ criticalPoint t = 0) ∨ criticalPoint t - 1 = 0) ∨ completedRiemannZeta (criticalPoint t) = 0 ↔
riemannZeta (criticalPoint t) = 0
simp [criticalPoint_ne_zero, criticalPoint_ne_one, sub_eq_zero,
completedZeta_criticalPoint_eq_zero_iff] All goals completed! 🐙theorem xi_one_sub (s : ℂ) : xi (1 - s) = xi s := by s:ℂ⊢ xi (1 - s) = xi s
unfold xi s:ℂ⊢ 1 / 2 * (1 - s) * (1 - s - 1) * completedRiemannZeta (1 - s) = 1 / 2 * s * (s - 1) * completedRiemannZeta s
rw [completedRiemannZeta_one_sub s:ℂ⊢ 1 / 2 * (1 - s) * (1 - s - 1) * completedRiemannZeta s = 1 / 2 * s * (s - 1) * completedRiemannZeta s] s:ℂ⊢ 1 / 2 * (1 - s) * (1 - s - 1) * completedRiemannZeta s = 1 / 2 * s * (s - 1) * completedRiemannZeta s
ring All goals completed! 🐙theorem criticalPoint_neg (t : ℝ) : criticalPoint (-t) = 1 - criticalPoint t := by t:ℝ⊢ criticalPoint (-t) = 1 - criticalPoint t
simp [criticalPoint] t:ℝ⊢ 2⁻¹ + -(↑t * Complex.I) = 1 - (2⁻¹ + ↑t * Complex.I)
ring All goals completed! 🐙theorem criticalXi_neg (t : ℝ) : criticalXi (-t) = criticalXi t := by t:ℝ⊢ criticalXi (-t) = criticalXi t
simp only [criticalXi, criticalPoint_neg, xi_one_sub] All goals completed! 🐙theorem continuous_criticalXi : Continuous criticalXi := by ⊢ Continuous criticalXi
have hc : Continuous (fun t ↦ completedRiemannZeta (criticalPoint t)) := by
apply continuous_iff_continuousAt.mpr ⊢ ∀ (x : ℝ), ContinuousAt (fun t => completedRiemannZeta (criticalPoint t)) x
intro t t:ℝ⊢ ContinuousAt (fun t => completedRiemannZeta (criticalPoint t)) t
exact (differentiableAt_completedZeta (criticalPoint_ne_zero t)
(criticalPoint_ne_one t)).continuousAt.comp continuous_criticalPoint.continuousAt hc:Continuous fun t => completedRiemannZeta (criticalPoint t)⊢ Continuous criticalXi
unfold criticalXi xi hc:Continuous fun t => completedRiemannZeta (criticalPoint t)⊢ Continuous fun t => 1 / 2 * criticalPoint t * (criticalPoint t - 1) * completedRiemannZeta (criticalPoint t)
exact ((continuous_const.mul continuous_criticalPoint).mul
(continuous_criticalPoint.sub continuous_const)).mul hc All goals completed! 🐙
/-- Exact target of the development; defining this proposition is not proving it. -/def InfinitelyManyCriticalZeros : Prop :=
Set.Infinite {s : ℂ | s.re = 1 / 2 ∧ riemannZeta s = 0}
/-- The stronger positive-ordinate form of Hardy's theorem. -/def ZerosAboveEveryHeight : Prop :=
∀ T : ℝ, ∃ t : ℝ, T < t ∧ riemannZeta (criticalPoint t) = 0theorem infinite_criticalZeros_of_zerosAboveEveryHeight
(h : ZerosAboveEveryHeight) : InfinitelyManyCriticalZeros := by h:ZerosAboveEveryHeight⊢ InfinitelyManyCriticalZeros
intro hf h:ZerosAboveEveryHeighthf:{s | s.re = 1 / 2 ∧ riemannZeta s = 0}.Finite⊢ False
have hb := (hf.image Complex.im).bddAbove h:ZerosAboveEveryHeighthf:{s | s.re = 1 / 2 ∧ riemannZeta s = 0}.Finitehb:BddAbove (Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0})⊢ False
obtain ⟨M, hM⟩ := hb h:ZerosAboveEveryHeighthf:{s | s.re = 1 / 2 ∧ riemannZeta s = 0}.FiniteM:ℝhM:M ∈ upperBounds (Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0})⊢ False
obtain ⟨t, ht, hz⟩ := h M h:ZerosAboveEveryHeighthf:{s | s.re = 1 / 2 ∧ riemannZeta s = 0}.FiniteM:ℝhM:M ∈ upperBounds (Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0})t:ℝht:M < thz:riemannZeta (criticalPoint t) = 0⊢ False
have hmem : (criticalPoint t).im ∈ Complex.im ''
{s : ℂ | s.re = 1 / 2 ∧ riemannZeta s = 0} :=
⟨criticalPoint t, ⟨criticalPoint_re t, hz⟩, rfl⟩ h:ZerosAboveEveryHeighthf:{s | s.re = 1 / 2 ∧ riemannZeta s = 0}.FiniteM:ℝhM:M ∈ upperBounds (Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0})t:ℝht:M < thz:riemannZeta (criticalPoint t) = 0hmem:(criticalPoint t).im ∈ Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0}⊢ False
have := hM hmem h:ZerosAboveEveryHeighthf:{s | s.re = 1 / 2 ∧ riemannZeta s = 0}.FiniteM:ℝhM:M ∈ upperBounds (Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0})t:ℝht:M < thz:riemannZeta (criticalPoint t) = 0hmem:(criticalPoint t).im ∈ Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0}this:(criticalPoint t).im ≤ M⊢ False
simp only [criticalPoint_im] at this h:ZerosAboveEveryHeighthf:{s | s.re = 1 / 2 ∧ riemannZeta s = 0}.FiniteM:ℝhM:M ∈ upperBounds (Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0})t:ℝht:M < thz:riemannZeta (criticalPoint t) = 0hmem:(criticalPoint t).im ∈ Complex.im '' {s | s.re = 1 / 2 ∧ riemannZeta s = 0}this:t ≤ M⊢ False
exact (not_lt_of_ge this) ht All goals completed! 🐙
end HardyZeta