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

Complex.Hadamard.summable_logDerivTerms_divisorZeroIndex₀_of_summable_inv_sq

PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorConvergence.lean:118 to 178

Source documentation

The genus-one logarithmic-derivative zero terms are summable away from the zero set whenever the genus-one divisor product is summable.

Exact Lean statement

theorem summable_logDerivTerms_divisorZeroIndex₀_of_summable_inv_sq
    {f : ℂ → ℂ} {z : ℂ}
    (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>
      ‖divisorZeroIndex₀_val p‖⁻¹ ^ (2 : ℕ)))
    (hz : ∀ p : divisorZeroIndex₀ f (Set.univ : Set ℂ), z ≠ divisorZeroIndex₀_val p) :
    Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>
      1 / (z - divisorZeroIndex₀_val p) + 1 / divisorZeroIndex₀_val p)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem summable_logDerivTerms_divisorZeroIndex₀_of_summable_inv_sq    {f : ℂ  ℂ} {z : ℂ}    (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>      ‖divisorZeroIndex₀_val p‖⁻¹ ^ (2 : )))    (hz :  p : divisorZeroIndex₀ f (Set.univ : Set ℂ), z  divisorZeroIndex₀_val p) :    Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>      1 / (z - divisorZeroIndex₀_val p) + 1 / divisorZeroIndex₀_val p) := by  let R :  := max ‖z‖ 1  have hRpos : 0 < R := lt_of_lt_of_le (by norm_num : (0 : ) < 1) (le_max_right _ _)  have hzle : ‖z‖  R := le_max_left _ _  let u : divisorZeroIndex₀ f (Set.univ : Set ℂ)   :=    fun p => (2 * R) * (‖divisorZeroIndex₀_val p‖⁻¹ ^ (2 : ))  have hu : Summable u := h_sum.mul_left (2 * R)  refine hu.of_norm_bounded_eventually ?_  have h_big :      ᶠ p : divisorZeroIndex₀ f (Set.univ : Set ℂ) in Filter.cofinite,        (2 * R : ) < ‖divisorZeroIndex₀_val p‖ := by    have hfin :        ({p : divisorZeroIndex₀ f (Set.univ : Set ℂ) | ‖divisorZeroIndex₀_val p‖           2 * R} : Set _).Finite := by      have : Metric.closedBall (0 : ℂ) (2 * R)  (Set.univ : Set ℂ) := by simp      exact divisorZeroIndex₀_norm_le_finite        (f := f) (U := (Set.univ : Set ℂ)) (B := 2 * R) this    have := hfin.eventually_cofinite_notMem    filter_upwards [this] with p hp    have : ¬ ‖divisorZeroIndex₀_val p‖  2 * R := by simpa using hp    exact lt_of_not_ge this  filter_upwards [h_big] with p hp  let a : ℂ := divisorZeroIndex₀_val p  have ha0 : a  0 := divisorZeroIndex₀_val_ne_zero p  have hza0 : z - a  0 := sub_ne_zero.mpr (hz p)  have hterm : 1 / (z - a) + 1 / a = z / (a * (z - a)) := by    field_simp [ha0, hza0]    ring  have htri : ‖a‖  ‖z‖ + ‖z - a‖ := by    have hraw : ‖a‖  ‖z‖ + ‖a - z‖ := by      have h := norm_add_le z (a - z)      simpa [a, sub_eq_add_neg, add_assoc, add_left_comm, add_comm] using h    simpa [norm_sub_rev] using hraw  have hza_lower : ‖a‖ / 2  ‖z - a‖ := by    nlinarith [htri, hzle, hp]  have hnorm : ‖1 / (z - a) + 1 / a‖  (2 * R) * (‖a‖⁻¹ ^ (2 : )) := by    rw [hterm, norm_div, norm_mul]    have ha_norm_pos : 0 < ‖a‖ := norm_pos_iff.mpr ha0    have hza_norm_pos : 0 < ‖z - a‖ := norm_pos_iff.mpr hza0    rw [div_eq_mul_inv]    calc      ‖z‖ * (‖a‖ * ‖z - a‖)⁻¹          = ‖z‖ * ‖a‖⁻¹ * ‖z - a‖⁻¹ := by              field_simp [ha_norm_pos.ne', hza_norm_pos.ne']      _  R * ‖a‖⁻¹ * ‖z - a‖⁻¹ := by              gcongr      _  R * ‖a‖⁻¹ * (2 * ‖a‖⁻¹) := by              gcongr              have hhalf_pos : 0 < ‖a‖ / 2 := by positivity              have hinv : ‖z - a‖⁻¹  (‖a‖ / 2)⁻¹ := by                simpa [one_div] using one_div_le_one_div_of_le hhalf_pos hza_lower              have hhalf_inv : (‖a‖ / 2)⁻¹ = 2 * ‖a‖⁻¹ := by field_simp [ha_norm_pos.ne']              simpa [hhalf_inv] using hinv      _ = (2 * R) * (‖a‖⁻¹ ^ (2 : )) := by ring  simpa [u, a] using hnorm