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

CH2.Phi_star.poles

PrimeNumberTheoremAnd.IEANTN.CH2.CH2_part1 · PrimeNumberTheoremAnd/IEANTN/CH2/CH2_part1.lean:1702 to 1834

Mathematical statement

Exact Lean statement

@[blueprint
  "Phi-star-poles"
  (title := "$\\Phi^{\\pm,\\ast}_\\nu$ poles")
  (statement := /--
  The poles of $$\Phi^{\pm,\ast}_\nu(z)$$ are of the form $n - i \nu/2\pi$ for $n \in \mathbb{Z} \backslash \{0\}$.
  -/)
  (proof := /-- This follows from the definition of $\Phi^{\pm,\ast}_\nu$ and the properties of the $B^\pm$ function. -/)
  (latexEnv := "lemma")
  (discussion := 1072)]
theorem Phi_star.poles (ν ε : ℝ) (hν : ν > 0) (z : ℂ) :
    meromorphicOrderAt (Phi_star ν ε) z < 0 ↔ ∃ n : ℤ, n ≠ 0 ∧ z = n - I * ν / (2 * π)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
@[blueprint  "Phi-star-poles"  (title := "$\\Phi^{\\pm,\\ast}_\\nu$ poles")  (statement := /--  The poles of $$\Phi^{\pm,\ast}_\nu(z)$$ are of the form $n - i \nu/2\pi$ for $n \in \mathbb{Z} \backslash \{0\}$.  -/)  (proof := /-- This follows from the definition of $\Phi^{\pm,\ast}_\nu$ and the properties of the $B^\pm$ function. -/)  (latexEnv := "lemma")  (discussion := 1072)]theorem Phi_star.poles (ν ε : ) (hν : ν > 0) (z : ℂ) :    meromorphicOrderAt (Phi_star ν ε) z < 0   n : , n  0  z = n - I * ν / (2 * π) := by  set w : ℂ := fun z  -2 * π * I * z + ν with hw_def  -- `w` is analytic everywhere with `w' = -2πI ≠ 0`.  have hw_anal :  ζ, AnalyticAt ℂ w ζ := fun ζ  by dsimp [w]; fun_prop  -- The exceptional point: `w z₀ = 0` exactly at the `n = 0` member of the pole family.  have hw_eq_zero_iff :  ζ : ℂ, w ζ = 0  ζ = (0 : ) - I * ν / (2 * π) := by    intro ζ    have hpi : (π : ℂ)  0 := by simp [pi_ne_zero]    have hden : (2 * (π : ℂ))  0 := by simp [pi_ne_zero]    have hrhs : ((0 : ) - I * (ν : ℂ) / (2 * π) : ℂ) = -(I * ν) / (2 * π) := by push_cast; ring    dsimp [w]    rw [hrhs, eq_div_iff hden]    constructor    · intro h      linear_combination I * h + (2 * (π : ℂ) * ζ) * Complex.I_sq    · intro h      linear_combination -I * h + ((ν : ℂ)) * Complex.I_sq  -- Reduce `Phi_star` to `g := w · Phi_circ` minus the constant `B ε ν`, up to the nonzero  -- scalar `1/(2πI)`: these agree on the punctured neighbourhood of any point.  set g : ℂ := fun z  w z * Phi_circ ν ε z with hg_def  have hg_mero :  ζ, MeromorphicAt g ζ := fun ζ  (hw_anal ζ).meromorphicAt.mul (Phi_circ.meromorphic ν ε ζ)  have h_star_eq : meromorphicOrderAt (Phi_star ν ε) z      = meromorphicOrderAt (fun z  g z - B ε ν) z := by    have h_const_ne : (2 * π * I : ℂ)  0 := by simp [pi_ne_zero, I_ne_zero]    -- `Phi_star = (1/(2πI)) • (g - B ε ν)` on the punctured nhd, then strip the scalar.    have h_evEq : Phi_star ν ε =ᶠ[nhdsWithin z {z}ᶜ]        (fun z  (1 / (2 * π * I)) * (g z - B ε ν)) := by      -- `w` has its only zero at `z₀`; on the punctured nhd of `z` we have `w ζ ≠ 0`.      set z₀ : ℂ := (0 : ) - I * ν / (2 * π) with hz₀_def      have hw_cont : ContinuousAt w z := (hw_anal z).continuousAt      have h_wne : ᶠ ζ in nhdsWithin z {z}ᶜ, w ζ  0 := by        by_cases hz : z = z₀        · -- exclude the centre `z₀`; for ζ ≠ z₀ in the nhd we have `w ζ ≠ 0`          subst hz          filter_upwards [self_mem_nhdsWithin] with ζ hζ          rw [Ne, hw_eq_zero_iff ζ]          simpa using        · -- away from `z₀`, `w z ≠ 0`, so `w` is nonzero near `z`          have hwz : w z  0 := by            rw [Ne, hw_eq_zero_iff z]            exact hz          exact nhdsWithin_le_nhds (hw_cont.eventually_ne hwz)      filter_upwards [h_wne] with ζ hwζ      have hB : B ε (w ζ) = w ζ * (coth (w ζ / 2) + ε) / 2 := by        unfold B; split_ifs with h_branch        · exact False.elim (hwζ h_branch)        · rfl      dsimp [Phi_star, Phi_circ, g, w]      dsimp [w] at hB      rw [hB]      ring    rw [meromorphicOrderAt_congr h_evEq]    rw [show (fun z  (1 / (2 * π * I)) * (g z - B ε ν))        = (fun _  (1 / (2 * π * I) : ℂ)) * (fun z  g z - B ε ν) from rfl]    rw [meromorphicOrderAt_mul_of_ne_zero (analyticAt_const (v := (1 / (2 * π * I) : ℂ)) (x := z))      (by simp [pi_ne_zero, I_ne_zero])]  rw [h_star_eq]  -- Subtracting the constant `B ε ν` does not change whether the order is negative.  have h_const_mero : MeromorphicAt (fun _  -(B ε ν)) z := MeromorphicAt.const _ z  have h_const_nonneg : 0  meromorphicOrderAt (fun _  -(B ε ν)) z := by    rw [meromorphicOrderAt_const]; split_ifs <;> simp  have h_drop : meromorphicOrderAt (fun z  g z - B ε ν) z < 0       meromorphicOrderAt g z < 0 := by    have h_sub_eq : (fun z  g z - B ε ν) = g + (fun _  -(B ε ν)) := by      ext z; simp [sub_eq_add_neg]    rw [h_sub_eq]    constructor    · intro h      by_contra hge      have hge' : 0  meromorphicOrderAt g z := not_lt.mp hge      have := le_trans (le_min hge' h_const_nonneg) (meromorphicOrderAt_add (hg_mero z) h_const_mero)      exact absurd h (not_lt.mpr this)    · intro h      have h_ne : meromorphicOrderAt g z  meromorphicOrderAt (fun _  -(B ε ν)) z :=        ne_of_lt (lt_of_lt_of_le h h_const_nonneg)      rw [meromorphicOrderAt_add_of_ne (hg_mero z) h_const_mero h_ne]      exact lt_of_le_of_lt (min_le_left _ _) h  rw [h_drop]  -- Now relate `order g` to `order (Phi_circ)`, distinguishing the `n = 0` point.  set z₀ : ℂ := (0 : ) - I * ν / (2 * π) with hz₀_def  by_cases hz : z = z₀  · -- At the `n = 0` point the simple zero of `w` cancels the simple pole of `Phi_circ`.    subst hz    have h_circ_ord : meromorphicOrderAt (Phi_circ ν ε) z₀ = -1 :=      (Phi_circ.poles_simple ν ε hν z₀).mpr 0, by simp [hz₀_def]    have h_w_ord : meromorphicOrderAt w z₀ = (1 : ) := by      rw [meromorphicOrderAt_eq_int_iff (hw_anal z₀).meromorphicAt]      refine fun _  -2 * π * I, analyticAt_const, by simp [pi_ne_zero, I_ne_zero], ?_      filter_upwards [self_mem_nhdsWithin] with ζ _      have hwz₀ : w z₀ = 0 := (hw_eq_zero_iff z₀).mpr hz₀_def      dsimp [w] at hwz₀       simp only [zpow_one]      linear_combination hwz₀    have hg_eq : g = w * Phi_circ ν ε := by rw [hg_def]; rfl    have hg_ord : meromorphicOrderAt g z₀ = 0 := by      rw [hg_eq, meromorphicOrderAt_mul (hw_anal z₀).meromorphicAt (Phi_circ.meromorphic ν ε z₀),        h_w_ord, h_circ_ord]      decide    rw [hg_ord]    constructor    · intro h; exact absurd h (by decide)    · rintro n, hn, hzn      exfalso      apply hn      have hzn' : ((0 : ) : ℂ) - I * ν / (2 * π) = (n : ℂ) - I * ν / (2 * π) := by        rw [ hz₀_def]; exact hzn      have : (n : ℂ) = 0 := by push_cast at hzn'; linear_combination -hzn'      exact_mod_cast this  · -- Away from the `n = 0` point, `w z ≠ 0`, so `order g = order (Phi_circ)`.    have hwz : w z  0 := by rw [Ne, hw_eq_zero_iff z]; exact hz    have hg_eq : g = w * Phi_circ ν ε := by rw [hg_def]; rfl    have hg_ord : meromorphicOrderAt g z = meromorphicOrderAt (Phi_circ ν ε) z := by      rw [hg_eq]      exact meromorphicOrderAt_mul_of_ne_zero (hw_anal z) hwz    rw [hg_ord, Phi_circ.poles ν ε hν z]    constructor    · rintro n, hzn      refine n, ?_, hzn      rintro rfl      apply hz      rw [hz₀_def]; push_cast; simpa using hzn    · rintro n, _, hzn      exact n, hzn