Skip to main content
AlexKontorovich/PrimeNumberTheoremAnd
Source indexedtheorem · leanprover/lean4:v4.32.0

meromorphicAt_riemannZeta

PrimeNumberTheoremAnd.IEANTN.KadiriEq12Helpers · PrimeNumberTheoremAnd/IEANTN/KadiriEq12Helpers.lean:65 to 87

Source documentation

The Riemann zeta function is meromorphic at every point.

Exact Lean statement

theorem meromorphicAt_riemannZeta (s : ℂ) : MeromorphicAt riemannZeta s

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem meromorphicAt_riemannZeta (s : ℂ) : MeromorphicAt riemannZeta s := by  have hΛ : MeromorphicAt completedRiemannZeta s := by    rw [show completedRiemannZeta = fun z  completedRiemannZeta₀ z - 1 / z - 1 / (1 - z) from      funext completedRiemannZeta_eq]    exact (((differentiable_completedZeta₀.analyticAt s).meromorphicAt.sub      ((MeromorphicAt.const 1 s).div analyticAt_id.meromorphicAt)).sub      ((MeromorphicAt.const 1 s).div ((analyticAt_const.sub analyticAt_id).meromorphicAt)))  have hG : MeromorphicAt Gamma s := by    rw [show Gamma = fun z  (Real.pi : ℂ) ^ (-z / 2) * Complex.Gamma (z / 2) from funext Gamma_def]    refine MeromorphicAt.mul (AnalyticAt.meromorphicAt ?_)      (MeromorphicAt.comp_analyticAt (f := Complex.Gamma) (g := fun z : ℂ  z / 2) (x := s)        ((MeromorphicOn.Gamma (s := Set.univ)) (s / 2) (Set.mem_univ _)) (by fun_prop))    rw [show (fun z : ℂ  (Real.pi : ℂ) ^ (-z / 2))        = fun z  Complex.exp (Complex.log (Real.pi : ℂ) * (-z / 2)) from by      funext z; rw [Complex.cpow_def_of_ne_zero (by simp [Real.pi_ne_zero])]]    fun_prop  have hz0 : ᶠ z in 𝓝[] s, z  0 := by    rcases eq_or_ne s 0 with h | h    · subst h; exact self_mem_nhdsWithin    · exact (isOpen_compl_singleton.eventually_mem (Set.mem_compl_singleton_iff.mpr h)).filter_mono        nhdsWithin_le_nhds  exact (hΛ.div hG).congr ((by filter_upwards [hz0] with z hz using riemannZeta_def_of_ne_zero hz :    riemannZeta =ᶠ[𝓝[] s] fun z  completedRiemannZeta z / Gamma z)).symm