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

lambda_pnt

PrimeNumberTheoremAnd.Consequences · PrimeNumberTheoremAnd/Consequences.lean:2201 to 2251

Mathematical statement

Exact Lean statement

@[blueprint
  "lambda-pnt"
  (statement := /-- We have $\sum_{n \leq x} \lambda(n) = o(x)$. -/)
  (proof := /--
  From the identity
    $$ \lambda(n) = \sum_{d^2|n} \mu(n/d^2)$$
  and summing, we have
  $$ \sum_{n \leq x} \lambda(n) = \sum_{d \leq \sqrt{x}} \sum_{n \leq x/d^2} \mu(n).$$
  For any $\eps>0$, we have from Proposition \ref{mu-pnt} that
  $$ \sum_{n \leq x/d^2} \mu(n) = O(\eps x/d^2) + O_\eps(1)$$
  and hence on summing in $d$
  $$ \sum_{n \leq x} \lambda(n) = O(\eps x) + O_\eps(x^{1/2}).$$
  Sending $\eps \to 0$ we obtain the claim.
  -/)
  (proofUses := ["mu-pnt"])
  (latexEnv := "proposition")]
theorem lambda_pnt : (fun x : ℝ ↦ ∑ n ∈ range ⌊x⌋₊, (-1)^(Ω n)) =o[atTop] fun x ↦ x

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
@[blueprint  "lambda-pnt"  (statement := /-- We have $\sum_{n \leq x} \lambda(n) = o(x)$. -/)  (proof := /--  From the identity    $$ \lambda(n) = \sum_{d^2|n} \mu(n/d^2)$$  and summing, we have  $$ \sum_{n \leq x} \lambda(n) = \sum_{d \leq \sqrt{x}} \sum_{n \leq x/d^2} \mu(n).$$  For any $\eps>0$, we have from Proposition \ref{mu-pnt} that  $$ \sum_{n \leq x/d^2} \mu(n) = O(\eps x/d^2) + O_\eps(1)$$  and hence on summing in $d$  $$ \sum_{n \leq x} \lambda(n) = O(\eps x) + O_\eps(x^{1/2}).$$  Sending $\eps \to 0$ we obtain the claim.  -/)  (proofUses := ["mu-pnt"])  (latexEnv := "proposition")]theorem lambda_pnt : (fun x :   ∑ n  range ⌊x⌋₊, (-1)^(Ω n)) =o[atTop] fun x  x := by  have h_lambda_pnt : (fun N :  => ∑ n  Finset.range N, (-1 : ) ^ (Nat.factorization n).sum (fun p k => k)) =o[Filter.atTop] (fun N :  => (N : )) := by    have h_lambda_pnt : (fun N :  => ∑ n  Finset.Icc 1 N, (-1 : ) ^ (Nat.factorization n).sum (fun p k => k)) =o[Filter.atTop] (fun N :  => (N : )) := by      have h_lambda_pnt : (fun N :  => ∑ d  Finset.Icc 1 (Nat.sqrt N), ∑ k  Finset.Icc 1 (N / d^2), (μ k : )) =o[Filter.atTop] (fun N :  => (N : )) := by        exact sum_mu_div_sq_isLittleO      convert h_lambda_pnt using 2;      convert sum_lambda_eq_sum_mu_div_sq _;      exact Eq.symm cardFactors_eq_sum_factorization    have h_lambda_pnt : (fun N :  => ∑ n  Finset.range (N + 1), (-1 : ) ^ (Nat.factorization n).sum (fun p k => k)) =o[Filter.atTop] (fun N :  => (N : )) := by      rw [ Asymptotics.isLittleO_iff_tendsto' ] at * <;> norm_num at *;      · convert h_lambda_pnt.add ( show Filter.Tendsto ( fun x :  => ( 1 :  ) / x ) Filter.atTop ( nhds 0 ) from tendsto_const_nhds.div_atTop tendsto_natCast_atTop_atTop ) using 2 <;> norm_num [ Finset.sum_Ico_eq_sum_range ];        erw [ Finset.sum_Ico_eq_sub _ _ ] <;> norm_num [ Finset.sum_range_succ' ] ; ring_nf;      · exact  1, by aesop ;      · exact  1, by aesop ;    simp_all +decide only [Finset.sum_range_succ]    have := h_lambda_pnt.sub ( show ( fun N :  => ( -1 :  ) ^ N.factorization.sum fun p k => k ) =o[Filter.atTop] fun N :  => ( N :  ) from ?_ );    · aesop;    · rw [ Asymptotics.isLittleO_iff_tendsto' ] <;> norm_num;      · exact tendsto_zero_iff_norm_tendsto_zero.mpr ( by simpa using tendsto_inv_atTop_nhds_zero_nat );      · exact  1, fun n hn => by positivity ;  have h_floor : (fun x :  => ∑ n  Finset.range ⌊x⌋₊, (-1 : ) ^ (Nat.factorization n).sum (fun p k => k)) =o[Filter.atTop] (fun x :  => (⌊x⌋₊ : )) := by    rw [ Asymptotics.isLittleO_iff_tendsto' ] at * <;> norm_num at *;    · exact h_lambda_pnt.comp <| tendsto_nat_floor_atTop;    · exact  1, by aesop ;    · exact  1, by intros; linarith ;  rw [ Asymptotics.isLittleO_iff ] at *;  intro c hc  filter_upwards [h_floor (half_pos hc), Filter.eventually_gt_atTop 1] with x hx₁ hx₂  refine le_trans ?_ (le_trans hx₁ ?_)  · norm_num [ Norm.norm ];    convert le_rfl using 2;    congr! 2;    exact Eq.symm cardFactors_eq_sum_factorization  · norm_num [ abs_of_nonneg, Nat.floor_le, hx₂.le ];    rw [ abs_of_nonneg ( by positivity ) ] ; nlinarith [ Nat.floor_le ( by positivity : 0  x ) ]