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

ZetaAppendix.lemma_abadeulmit2_continuousAt_integral_tsum_one_div_sub_int_sq

PrimeNumberTheoremAnd.IEANTN.ZetaAppendix · PrimeNumberTheoremAnd/IEANTN/ZetaAppendix.lean:4041 to 4148

Mathematical statement

Exact Lean statement

lemma lemma_abadeulmit2_continuousAt_integral_tsum_one_div_sub_int_sq {z : ℂ}
  (hz : z ∈ integerComplement) :
  ContinuousAt (fun x' ↦ ∫ (t : ℝ) in 0..1, (fun w : ℂ ↦ ∑' (n : ℤ), 1 / (w - n) ^ 2) (z + ↑t * (x' - z))) z

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma lemma_abadeulmit2_continuousAt_integral_tsum_one_div_sub_int_sq {z : ℂ}  (hz : z  integerComplement) :  ContinuousAt (fun x'  ∫ (t : ) in 0..1, (fun w : ℂ  ∑' (n : ), 1 / (w - n) ^ 2) (z + ↑t * (x' - z))) z  := by  have h_open : IsOpen integerComplement := Complex.isOpen_compl_range_intCast  obtain ε, hε, h_ball := Metric.isOpen_iff.1 h_open z hz  let S : ℂ := fun w : ℂ  ∑' (n : ), 1 / (w - n) ^ 2  let ε' := ε / 2  have hε' : ε' > 0 := half_pos hε  let K := Metric.closedBall z ε'  have hK_compact : IsCompact K := by exact isCompact_closedBall z ε'  have hK_sub : K  integerComplement := (Metric.closedBall_subset_ball (half_lt_self hε)).trans h_ball  have hS_cont : ContinuousOn S K := by    dsimp [S]    refine continuousOn_tsum (u := fun (n : )  (‖z - n‖ - ε')⁻¹ ^ 2) ?_ ?_ ?_    · intro i      simp_rw [one_div]      apply ContinuousOn.inv₀ (by fun_prop)      · intro x hx        apply pow_ne_zero        rw [sub_ne_zero]        intro h        apply hK_sub hx        exact i, h.symm    · apply Summable.of_nat_of_neg_add_one      · apply summable_of_isBigO_nat (g := fun n :   (1 : ) / (n : )^2) (summable_one_div_nat_pow.mpr one_lt_two)        simp_rw [one_div,  inv_pow]        refine Asymptotics.IsBigO.pow ?_ 2        apply Asymptotics.IsBigO.inv_rev        · apply Asymptotics.IsBigO.of_bound 2          filter_upwards [eventually_ge_atTop (Nat.ceil (2 * (‖z‖ + ε')))] with x hx          norm_cast          have hx_real : 2 * (‖z‖ + ε')  x := by exact_mod_cast Nat.le_of_ceil_le hx          have h_dist : ↑x - ‖z‖  ‖z - ↑x‖ := by            rw [ Complex.norm_natCast x]            rw [norm_sub_rev z (x : ℂ)]            apply norm_sub_norm_le          rw [Real.norm_of_nonneg (by linarith)]          linarith        · filter_upwards [eventually_gt_atTop 0] with x hx hx_zero          norm_cast at hx_zero          linarith      · apply summable_of_isBigO_nat (g := fun n :   (1 : ) / (n + 1 : )^2)        · exact_mod_cast (summable_nat_add_iff 1).mpr (summable_one_div_nat_pow.mpr one_lt_two)        · simp_rw [one_div,  inv_pow]          refine Asymptotics.IsBigO.pow ?_ 2          apply Asymptotics.IsBigO.inv_rev          · apply Asymptotics.IsBigO.of_bound 2            filter_upwards [eventually_ge_atTop (Nat.ceil (2 * (‖z‖ + ε')))] with x hx            push_cast            simp only [sub_neg_eq_add]            have h_rev : ↑x + 1 - ‖z‖  ‖z + (↑x + 1)‖ := by              rw [add_comm]              have h_tri := norm_sub_norm_le (x + 1 : ℂ) (-z)              rw [norm_neg,  Nat.cast_add_one, Complex.norm_natCast] at h_tri              simpa [sub_neg_eq_add, add_comm, Nat.cast_add_one] using h_tri            have hx_real : 2 * (‖z‖ + ε')  ↑x := by exact_mod_cast Nat.le_of_ceil_le hx            norm_cast at *            push_cast at *            rw [Real.norm_of_nonneg (by linarith)]            linarith          · apply Filter.Eventually.of_forall            intro x hx            norm_cast at hx    · intro n x hx      rw [one_div, norm_inv, norm_pow,  inv_pow]      have h_dist : ε  ‖z - ↑n‖ := by        contrapose! hz        have h_mem : ↑n  Metric.ball z ε := by rwa [Metric.mem_ball, dist_eq_norm, norm_sub_rev]        have h_comp := h_ball h_mem        exact (h_comp n, rfl).elim      gcongr      · dsimp [ε'] at *        linarith      · rw [Metric.mem_closedBall, dist_eq_norm] at hx        calc ‖z - ↑n‖ - ε'  ‖z - ↑n‖ - ‖x - z‖ := by linarith                        _  ‖x - ↑n‖ := by                          rw [norm_sub_rev x z]                          linarith [norm_sub_le_norm_sub_add_norm_sub z x ↑n]  have h_bound : Bornology.IsBounded (S '' K) :=    (hK_compact.image_of_continuousOn hS_cont).isBounded  obtain M, hM := h_bound.exists_norm_le  apply intervalIntegral.continuousAt_of_dominated_interval    (bound := fun _  M) (F := fun x t  S (z + t * (x - z)))    (a := 0) (b := 1)  · filter_upwards [Metric.ball_mem_nhds z hε'] with x hx    refine ContinuousOn.aestronglyMeasurable ?_ measurableSet_uIoc    apply ContinuousOn.comp hS_cont (by fun_prop)    intro t ht    convert! Convex.add_smul_sub_mem (convex_closedBall z ε') (Metric.mem_closedBall_self (le_of_lt hε')) (Metric.ball_subset_closedBall hx) ?_    · simp only [Set.mem_Icc]      rw [uIoc_of_le zero_le_one] at ht      exact le_of_lt ht.1, ht.2  · filter_upwards [Metric.ball_mem_nhds z hε'] with x hx    apply Filter.Eventually.of_forall    intro t ht    apply hM    apply Set.mem_image_of_mem    convert! Convex.add_smul_sub_mem (convex_closedBall z ε') (Metric.mem_closedBall_self (le_of_lt hε')) (Metric.ball_subset_closedBall hx) ?_    rw [uIoc_of_le zero_le_one] at ht    exact le_of_lt ht.1, ht.2  · exact intervalIntegrable_const  · apply Filter.Eventually.of_forall    intro t ht    refine ContinuousAt.comp (g := S) ?_ ?_    · simp only [sub_self, mul_zero, add_zero]      apply hS_cont.continuousAt      exact Metric.closedBall_mem_nhds z hε'    · fun_prop