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

Complex.Hadamard.exists_ball_eq_divisorCanonicalProduct_div_pow_eq

PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:138 to 237

Mathematical statement

Exact Lean statement

theorem exists_ball_eq_divisorCanonicalProduct_div_pow_eq
    (m : ℕ) (f : ℂ → ℂ)
    (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>
      ‖divisorZeroIndex₀_val p‖⁻¹ ^ (m + 1)))
    (z₀ : ℂ) :
    ∃ ε > 0, ∃ u : ℂ → ℂ, AnalyticAt ℂ u z₀ ∧
      u z₀ ≠ 0 ∧
        ∀ z : ℂ, z ∈ Metric.ball z₀ ε → z ≠ z₀ →
          (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) /
              (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card =
            (divisorComplementCanonicalProduct m f z₀ z) * u z

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem exists_ball_eq_divisorCanonicalProduct_div_pow_eq    (m : ) (f : ℂ  ℂ)    (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>      ‖divisorZeroIndex₀_val p‖⁻¹ ^ (m + 1)))    (z₀ : ℂ) :     ε > 0,  u : ℂ  ℂ, AnalyticAt ℂ u z₀       u z₀  0          z : ℂ, z  Metric.ball z₀ ε  z  z₀           (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) /              (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card =            (divisorComplementCanonicalProduct m f z₀ z) * u z := by  let fiber : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) :=    divisorZeroIndex₀_fiberFinset (f := f) z₀  have hfib :  u : ℂ  ℂ, AnalyticAt ℂ u z₀  u z₀  0           (fun z : ℂ => divisorPartialProduct m f fiber z) =ᶠ[𝓝 z₀]            fun z : ℂ => (z - z₀) ^ fiber.card • u z := by    simpa [fiber, divisorPartialProduct] using      (exists_analyticAt_eq_pow_smul_of_partialProduct_contains_fiber (m := m) (f := f) (z₀ := z₀)        (s := fiber) (by rfl : fiber  fiber))  rcases hfib with u, huA, hu0, huEq  have hmem : {z : ℂ | divisorPartialProduct m f fiber z =      (z - z₀) ^ fiber.card • u z}  𝓝 z₀ := huEq  rcases Metric.mem_nhds_iff.1 hmem with ε, hε, hball  refine ε, hε, u, huA, hu0, ?_  have hq :      TendstoLocallyUniformlyOn (fun s z => (divisorPartialProduct m f s z) / (z - z₀) ^ fiber.card)        (fun z => (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ fiber.card)        (Filter.atTop : Filter (Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ))))        ((Set.univ : Set ℂ) \ {z₀}) :=    tendstoLocallyUniformlyOn_divisorPartialProduct_div_pow_sub      (m := m) (f := f) (h_sum := h_sum) (z₀ := z₀) (k := fiber.card)  have hcomp :      TendstoLocallyUniformlyOn        (fun s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) =>          divisorComplementPartialProduct m f z₀ s)        (divisorComplementCanonicalProduct m f z₀)        Filter.atTop        (Set.univ : Set ℂ) :=    tendstoLocallyUniformlyOn_divisorComplementPartialProduct_univ (m := m) (f := f)    (z₀ := z₀) h_sum  intro z hz hzne  have hz' : z  ((Set.univ : Set ℂ) \ {z₀}) := by    refine by simp, ?_    simpa [Set.mem_singleton_iff] using hzne  have hF : Tendsto (fun s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) =>          (divisorPartialProduct m f s z) / (z - z₀) ^ fiber.card) (Filter.atTop : Filter _)        (𝓝 ((divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ fiber.card)) :=    hq.tendsto_at hz'  have hG0 : Tendsto  (fun s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) =>          divisorComplementPartialProduct m f z₀ s z) (Filter.atTop : Filter _)        (𝓝 (divisorComplementCanonicalProduct m f z₀ z)) :=    hcomp.tendsto_at (by simp : z  (Set.univ : Set ℂ))  have hG : Tendsto (fun s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) =>          (divisorComplementPartialProduct m f z₀ s z) * u z) (Filter.atTop : Filter _)        (𝓝 ((divisorComplementCanonicalProduct m f z₀ z) * u z)) :=    (hG0.mul tendsto_const_nhds)  have hsub : ᶠ s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) in (Filter.atTop : Filter _),      fiber  s := eventually_atTop_subset_fiberFinset (f := f) z₀  have heq_eventually :      ᶠ s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) in (Filter.atTop : Filter _),        (divisorPartialProduct m f s z) / (z - z₀) ^ fiber.card          = (divisorComplementPartialProduct m f z₀ s z) * u z := by    filter_upwards [hsub] with s hs    have hsplit :        divisorPartialProduct m f s z =          divisorPartialProduct m f fiber z * divisorComplementPartialProduct m f z₀ s z := by      simpa [fiber] using        (divisorPartialProduct_eq_fiber_mul_complement_of_subset (m := m) (f := f) (z₀ := z₀)          (z := z) (s := s) hs)    have hfibz :        divisorPartialProduct m f fiber z = (z - z₀) ^ fiber.card • u z := by      exact hball hz    have hzpow : (z - z₀) ^ fiber.card  0 :=      pow_ne_zero _ (sub_ne_zero.mpr hzne)    set a : ℂ := (z - z₀) ^ fiber.card    have ha : a  0 := by simpa [a] using hzpow    set c : ℂ := divisorComplementPartialProduct m f z₀ s z with hc    rw [hsplit, hfibz, smul_eq_mul]    calc      ((a * u z) * c) / a          = (a * (u z * c)) / a := by simp [mul_assoc]      _ = u z * c := by            simpa [mul_assoc] using (mul_div_cancel_left₀ (u z * c) ha)      _ = c * u z := by ac_rfl      _ = (divisorComplementPartialProduct m f z₀ s z) * u z := by            simp [c]  have hG' :      Tendsto        (fun s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) =>          (divisorPartialProduct m f s z) / (z - z₀) ^ fiber.card)        (Filter.atTop : Filter _)        (𝓝 ((divisorComplementCanonicalProduct m f z₀ z) * u z)) := by    have heq' :        ᶠ s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) in (Filter.atTop : Filter _),          (divisorComplementPartialProduct m f z₀ s z) * u z            = (divisorPartialProduct m f s z) / (z - z₀) ^ fiber.card := by      filter_upwards [heq_eventually] with s hs      exact hs.symm    exact (hG.congr' heq')  exact tendsto_nhds_unique hF hG'