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

sum_abs_R_isLittleO

PrimeNumberTheoremAnd.Consequences · PrimeNumberTheoremAnd/Consequences.lean:1806 to 1844

Mathematical statement

Exact Lean statement

lemma sum_abs_R_isLittleO : (fun x : ℝ => ∑ k ∈ Iic ⌊x⌋₊, |R (x / k)|) =o[atTop] (fun x => x * log x)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma sum_abs_R_isLittleO : (fun x :  => ∑ k  Iic ⌊x⌋₊, |R (x / k)|) =o[atTop] (fun x => x * log x) := by  have h_eps :  ε > 0,  x₀ : ,  x  x₀, (∑ k  Finset.Icc 1 ⌊x⌋₊, |R (x / k)|)  ε * x * Real.log x := by    intro ε hε_pos    obtain A, hA :  A : , 0 < A   y  A, |R y| / 2) * y := by      have := R_isLittleO      rw [Asymptotics.isLittleO_iff] at this      norm_num at *      exact Exists.elim (this (half_pos hε_pos)) fun A hA => Max.max A 1, by positivity, fun y hy => by simpa only [abs_of_nonneg (by linarith [le_max_right A 1] : 0  y)] using hA y (le_trans (le_max_left A 1) hy)    obtain C_A, hC_A :  C_A : ,  y  Set.Icc 0 A, |R y|  C_A := by      exact _, fun y hy => R_locally_bounded A hA.1.le |> Classical.choose_spec |> fun h => h y hy    have h_sum_bound :  x  max A 2, (∑ k  Finset.Icc 1 ⌊x⌋₊, |R (x / k)|) / 2) * x * (Real.log x + 1) + C_A * x := by      intros x hx      have h_sum_bound :  y  1, |R y| / 2) * y + C_A := by        intros y hy        by_cases hyA : y  A        · exact le_add_of_le_of_nonneg (hA.right y hyA) (by          exact le_trans (abs_nonneg _) (hC_A 0 by norm_num, by linarith))        · exact le_add_of_nonneg_of_le (by          positivity) (hC_A y by          linarith, by            linarith)      have := sum_bounded_of_linear_bound (show 0  ε / 2 by positivity) (show 0  C_A by exact le_trans (abs_nonneg _) (hC_A 0 by norm_num, by linarith)) (fun y hy => h_sum_bound y hy) x (by linarith [le_max_right A 2]) ; aesop    obtain x₀, hx₀ :  x₀ : ,  x  x₀, (ε / 2) * (Real.log x + 1) + C_A  ε * Real.log x := by      exact Real.exp (2 * (C_A / ε + 1)), fun x hx => by nlinarith [Real.log_exp (2 * (C_A / ε + 1)), Real.log_le_log (by positivity) hx, mul_div_cancel₀ C_A hε_pos.ne']    exact Max.max x₀ (Max.max A 2), fun x hx => le_trans (h_sum_bound x (le_trans (le_max_right _ _) hx)) (by nlinarith [hx₀ x (le_trans (le_max_left _ _) hx), le_max_right x₀ (Max.max A 2), le_max_left x₀ (Max.max A 2), le_max_right A 2, le_max_left A 2, Real.log_nonneg (show x  1 by linarith [le_max_right x₀ (Max.max A 2), le_max_left x₀ (Max.max A 2), le_max_right A 2, le_max_left A 2])])  rw [Asymptotics.isLittleO_iff_tendsto']  · have h_sum_eq :  x : , x  1  (∑ k  Finset.Iic ⌊x⌋₊, |R (x / k)|) = (∑ k  Finset.Icc 1 ⌊x⌋₊, |R (x / k)|) := by      intro x hx      have h0 : (0 : )  Finset.Iic ⌊x⌋₊ := by simp [Finset.mem_Iic]      have hI : (Finset.Iic ⌊x⌋₊).erase 0 = Finset.Icc 1 ⌊x⌋₊ := by        ext n        simp [Finset.mem_Iic, Finset.mem_Icc, Nat.one_le_iff_ne_zero, and_comm]      rw [ Finset.sum_erase_add (Finset.Iic ⌊x⌋₊) (fun k => |R (x / k)|) h0]      simp [hI, R, Psi, Chebyshev.psi_eq_sum_Icc]    rw [Metric.tendsto_nhds]    simp +zetaDelta only [gt_iff_lt, ge_iff_le, dist_zero_right, norm_div, norm_eq_abs, norm_mul,    eventually_atTop] at *    intro ε hε; obtain x₀, hx₀ := h_eps (ε / 2) (half_pos hε) ; use Max.max x₀ 2; intro x hx; rw [abs_of_nonneg (Finset.sum_nonneg fun _ _ => abs_nonneg _), abs_of_nonneg (by linarith [le_max_right x₀ 2]), abs_of_nonneg (Real.log_nonneg (by linarith [le_max_right x₀ 2]))] ; rw [div_lt_iff₀] <;> nlinarith [hx₀ x (le_trans (le_max_left x₀ 2) hx), Real.log_pos (by linarith [le_max_right x₀ 2] : 1 < x), mul_pos (by linarith [le_max_right x₀ 2] : 0 < x) (Real.log_pos (by linarith [le_max_right x₀ 2] : 1 < x)), h_sum_eq x (by linarith [le_max_right x₀ 2])]  · filter_upwards [Filter.eventually_gt_atTop 1] with x hx hx' using absurd hx' (by nlinarith [Real.log_pos hx])