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

ZetaAppendix.proposition_dadaro_b_tendsto_zero_atTop

PrimeNumberTheoremAnd.IEANTN.ZetaAppendix · PrimeNumberTheoremAnd/IEANTN/ZetaAppendix.lean:4986 to 5124

Mathematical statement

Exact Lean statement

lemma proposition_dadaro_b_tendsto_zero_atTop {s : ℂ} (hsigma : 0 < s.re) : Tendsto
  (fun b : ℝ => (b : ℂ) ^ (-s) * dadaro_g (s.im / (2 * π * b)))
  atTop (𝓝 0)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma proposition_dadaro_b_tendsto_zero_atTop {s : ℂ} (hsigma : 0 < s.re) : Tendsto  (fun b :  => (b : ℂ) ^ (-s) * dadaro_g (s.im / (2 * π * b)))  atTop (𝓝 0) := by  have h_pow_vanishes : Tendsto (fun b :  => (b : ℂ) ^ (-s)) atTop (𝓝 0) := by    rw [tendsto_zero_iff_norm_tendsto_zero]    have : (fun b :   ‖(b : ℂ) ^ (-s)‖) =ᶠ[atTop] (fun b  b ^ (-s.re)) := by      filter_upwards [Filter.eventually_gt_atTop 0] with b hb      simp [Complex.norm_cpow_eq_rpow_re_of_pos hb]    exact (tendsto_congr' this).mpr (tendsto_rpow_neg_atTop hsigma)  let g := dadaro_g  have hne : ᶠ x in 𝓝[] (0 : ℂ), x  0 :=    eventually_nhdsWithin_of_forall fun x hx => hx  have hsin : ᶠ x in 𝓝[] (0 : ℂ), Complex.sin x  0 := by    have hball : ᶠ x in 𝓝[] (0 : ℂ), ‖x‖ < π := by      apply eventually_nhdsWithin_of_eventually_nhds      exact eventually_nhds_iff.mpr        Metric.ball 0 π,        fun y hy => by simpa [Metric.mem_ball, dist_zero_right] using hy,        Metric.isOpen_ball,        Metric.mem_ball_self (by positivity)    filter_upwards [hball, hne] with x hlt hxne    rw [Complex.sin_ne_zero_iff]    intro k    by_cases hk : k = 0    · simp [hk, hxne]    · have hkπ : π  ‖(k : ℂ) * ↑π‖ := by        rw [norm_mul]        suffices 1  ‖(k : ℂ)‖ by          nth_rw 1 [ one_mul π]          gcongr          simp only [norm_real, norm_eq_abs]          exact le_abs_self π        simp only [norm_intCast]        exact_mod_cast Int.one_le_abs hk      intro heq      linarith [heq ▸ hlt]  have hl : (fun x  1 / Complex.sin x - 1 / x) =ᶠ[𝓝[] 0] (fun x  (x - Complex.sin x) / (x * Complex.sin x)) := by    filter_upwards [hsin, hne] with x hsinx hxne    field_simp [hxne, hsinx]  have hscale : Tendsto (fun t :   (↑π * ↑t : ℂ)) (𝓝 0) (𝓝 0) := by    simpa using! (continuous_const.mul Complex.continuous_ofReal).tendsto (0 : )  have h_pi : Tendsto (fun t :   (↑π * ↑t : ℂ)) (𝓝[] 0) (𝓝[] 0) := by    apply tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within    · exact tendsto_nhdsWithin_of_tendsto_nhds hscale    · apply eventually_nhdsWithin_of_forall      exact fun t ht  mul_ne_zero (by exact_mod_cast Real.pi_ne_zero) (Complex.ofReal_ne_zero.mpr ht)  have h2 : Tendsto (fun x  x / Complex.sin x) (𝓝[] 0) (𝓝 1) := by    have heq : Asymptotics.IsEquivalent (𝓝[] (0 : ℂ)) Complex.sin id := by      unfold Asymptotics.IsEquivalent      exact Complex.isEquivalent_sin.isLittleO.mono nhdsWithin_le_nhds    have hsinx : Tendsto (fun x  Complex.sin x / x) (𝓝[] 0) (𝓝 1) :=      (Asymptotics.isEquivalent_iff_tendsto_one hne).mp heq    have hflip : (fun x  x / Complex.sin x) =ᶠ[𝓝[] (0 : ℂ)] (fun x  (Complex.sin x / x)⁻¹) := by      filter_upwards [hsin, hne] with x hsx hxne      field_simp [hxne, hsx]    rw [tendsto_congr' hflip]    simpa using hsinx.inv₀ (by norm_num : (1 : ℂ)  0)  have hfactor : (fun x : ℂ  (x - Complex.sin x) / (x * Complex.sin x))      =ᶠ[𝓝[] 0] (fun x  (x - Complex.sin x) / x ^ 2 * (x / Complex.sin x)) := by    filter_upwards [hsin, hne]      with x hsx hxne    field_simp [hxne, hsx]  have hquot : Tendsto (fun x : ℂ  (x - Complex.sin x) / x ^ 2) (𝓝[] 0) (𝓝 0) := by    have hkey :  x : ℂ, x  0  ‖x‖  1         ‖(x - Complex.sin x) / x ^ 2 ‖x‖ / 6 + ‖x‖ ^ 2 * (5 / 96) := by      intro x hx hxn      have hbound := sin_bound hxn      have hxnorm : (0 : ) < ‖x‖ ^ 2 := by positivity      rw [norm_div, norm_pow, div_le_iff₀ hxnorm]      have htri : ‖x - Complex.sin x‖  ‖x‖ ^ 3 / 6 + ‖x‖ ^ 4 * (5 / 96) := by        have : ‖x - Complex.sin x‖  ‖x ^ 3 / 6+ ‖x ^ 3 / 6 - (x - Complex.sin x)‖ :=          calc ‖x - Complex.sin x‖            = ‖x ^ 3 / 6 - (x ^ 3 / 6 - (x - Complex.sin x))‖ := by ring_nf          _  ‖x ^ 3 / 6+ ‖x ^ 3 / 6 - (x - Complex.sin x)‖ := norm_sub_le _ _        have h1 : ‖x ^ 3 / 6= ‖x‖ ^ 3 / 6 := by          rw [norm_div, norm_pow]; norm_num        have h2 : ‖x ^ 3 / 6 - (x - Complex.sin x)‖  ‖x‖ ^ 4 * (5 / 96) := by          have heq : x ^ 3 / 6 - (x - Complex.sin x) = Complex.sin x - (x - x ^ 3 / 6) := by ring          rw [heq]          exact hbound.trans (by nlinarith [pow_nonneg (norm_nonneg x) 4, hxn])        linarith      linarith [htri]    have hsqueeze : Tendsto (fun x : ℂ  ‖x‖ / 6 + ‖x‖ ^ 2 * (5 / 96)) (𝓝[] 0) (𝓝 0) := by      rw [show (0 : ) = 0 / 6 + 0 ^ 2 * (5 / 96) by norm_num]      apply Filter.Tendsto.add      · apply Tendsto.div_const        refine Tendsto.mono_left ?_ nhdsWithin_le_nhds        exact tendsto_norm_zero      · apply Filter.Tendsto.mul_const        exact tendsto_nhdsWithin_of_tendsto_nhds (by          simpa using tendsto_norm_zero.pow 2)    apply squeeze_zero_norm' _ hsqueeze    rw [eventually_nhdsWithin_iff]    apply eventually_of_mem (Metric.ball_mem_nhds 0 one_pos)    intro x hx hne    apply hkey x hne    simp only [Metric.mem_ball, dist_zero_right] at hx    exact le_of_lt hx  have h_f_lim : Tendsto (fun x : ℂ  1 / Complex.sin x - 1 / x) (𝓝[] 0) (𝓝 0) := by    have hprod : Tendsto (fun x : ℂ  (x - Complex.sin x) / x ^ 2 * (x / Complex.sin x))        (𝓝[] 0) (𝓝 0) := by simpa using hquot.mul h2    exact (hprod.congr' hfactor.symm).congr' hl.symm  have h_f_lim_new : Tendsto (fun x : ℂ  1 / Complex.sin x - 1 / x) (𝓝 0) (𝓝 0) := by    have h0 : (fun x : ℂ  1 / Complex.sin x - 1 / x) 0 = 0 := by      simp [Complex.sin_zero]    rw [ nhdsWithin_univ]    apply tendsto_nhdsWithin_of_tendsto_nhds_of_eventually_within    · simp only [nhdsWithin_univ]      have hc : ContinuousAt (fun x  1 / Complex.sin x - 1 / x) 0 := by        rw [continuousAt_iff_punctured_nhds]        simp only [h0]        exact h_f_lim      simpa only [h0] using hc.tendsto    · exact Filter.Eventually.of_forall (fun x => trivial)  have h_g_limit : Tendsto g (𝓝 0) (𝓝 0) := by    have hg_eq : g =ᶠ[𝓝 0] fun t :  =>        (1 / Complex.sin (↑π * ↑t) - 1 / (↑π * ↑t)) / (2 * I) := by      exact Filter.Eventually.of_forall fun t  by        simp only [g, dadaro_g]        split_ifs with ht        · rfl        · simp only [one_div, mul_inv_rev]          field_simp          push Not at ht          simp [ht]    have hcomp : Tendsto (fun t :  =>        1 / Complex.sin (↑π * ↑t) - 1 / (↑π * ↑t)) (𝓝 0) (𝓝 0) :=      h_f_lim_new.comp hscale    have hdiv : Tendsto (fun t :  =>        (1 / Complex.sin (↑π * ↑t) - 1 / (↑π * ↑t)) / (2 * I)) (𝓝 0) (𝓝 0) := by      simpa using hcomp.div_const (2 * I)    exact hdiv.congr' hg_eq.symm  have h_arg_limit : Tendsto (fun b :   s.im / (2 * π * b)) atTop (𝓝 0) := by    apply Filter.Tendsto.const_div_atTop    apply (tendsto_const_mul_atTop_of_pos ?_).mpr tendsto_id    exact mul_pos two_pos pi_pos  have h_trig_vanishes : Tendsto (fun b :   g (s.im / (2 * π * b))) atTop (𝓝 0) :=    h_g_limit.comp h_arg_limit  simpa using h_pow_vanishes.mul h_trig_vanishes