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

Ramanujan.ex_pi_gt_nonneg

PrimeNumberTheoremAnd.IEANTN.Ramanujan.Ramanujan · PrimeNumberTheoremAnd/IEANTN/Ramanujan/Ramanujan.lean:281 to 398

Mathematical statement

Exact Lean statement

theorem ex_pi_gt_nonneg
    (m_a x_a : ℝ)
    (hm : 0 ≤ m_a)
    (hlower : ∀ x > x_a,
      x * ∑ k ∈ Finset.range 5, (k.factorial / log x ^ (k + 1))
        + (m_a * x / log x ^ 6) < pi x) :
    ∀ x > exp 1 * x_a,
      exp 1 * x / log x * pi (x / exp 1) >
        x ^ 2 * (
          1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5
          + 65 / log x ^ 6 + ε' m_a x / log x ^ 7)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem ex_pi_gt_nonneg    (m_a x_a : )    (hm : 0  m_a)    (hlower :  x > x_a,      x * ∑ k  Finset.range 5, (k.factorial / log x ^ (k + 1))        + (m_a * x / log x ^ 6) < pi x) :     x > exp 1 * x_a,      exp 1 * x / log x * pi (x / exp 1) >        x ^ 2 * (          1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5          + 65 / log x ^ 6 + ε' m_a x / log x ^ 7) := by  intro x hx  have hxa_ge_one : 1  x_a := by    by_contra hxa    have hlt : x_a < 1 := lt_of_not_ge hxa    have hbad := hlower 1 hlt    have hpi1 : pi 1 = 0 := by      unfold _root_.pi      norm_num    have hleft0 :        (1 : ) * ∑ k  Finset.range 5, (k.factorial / log (1 : ) ^ (k + 1))          + (m_a * (1 : ) / log (1 : ) ^ 6) = 0 := by      norm_num    linarith  have hxe : exp 1 < x := by    have h1 : exp 1  exp 1 * x_a := by      nlinarith [hxa_ge_one, exp_pos (1 : )]    grind  have hlog_gt1 : 1 < log x := by    simpa using log_lt_log (show 0 < exp 1 by positivity) hxe  have hlog_pos : 0 < log x := by linarith  have hx_pos : 0 < x := lt_trans (exp_pos 1) hxe  have hy_gt : x / exp 1 > x_a := by    have hmul : x_a * exp 1 < x := by simpa [mul_comm] using hx    exact (lt_div_iff₀ (exp_pos 1)).2 hmul  have hlow := hlower (x / exp 1) hy_gt  have hmul_pos : 0 < exp 1 * x / log x :=    div_pos (mul_pos (exp_pos 1) hx_pos) hlog_pos  have hmul := mul_lt_mul_of_pos_left hlow hmul_pos  have hlog_div : log (x / exp 1) = log x - 1 := by    rw [log_div (show x  0 by linarith) (show exp 1  0 by positivity), log_exp]  have hfrom0 :      exp 1 * x / log x *        ((x / exp 1) * ∑ k  Finset.range 5, (k.factorial / (log x - 1) ^ (k + 1))          + (m_a * (x / exp 1) / (log x - 1) ^ 6))      < exp 1 * x / log x * pi (x / exp 1) := by    simpa [hlog_div] using hmul  let S :  := ∑ k  Finset.range 5, (k.factorial / (log x - 1) ^ (k + 1))  have hfrom :      x ^ 2 * ((1 / log x) * (S + m_a / (log x - 1) ^ 6))      < exp 1 * x / log x * pi (x / exp 1) := by    have hleft :        exp 1 * x / log x * ((x / exp 1) * S + (m_a * (x / exp 1) / (log x - 1) ^ 6))        = x ^ 2 * ((1 / log x) * (S + m_a / (log x - 1) ^ 6)) := by      field_simp [hlog_pos.ne', show (exp 1 : )  0 by positivity]    simpa [S, hleft] using hfrom0  have hsum :      S =        1 / (log x - 1) + 1 / (log x - 1) ^ 2 + 2 / (log x - 1) ^ 3 +        6 / (log x - 1) ^ 4 + 24 / (log x - 1) ^ 5 := by    dsimp [S]    simp [Finset.sum_range_succ, Nat.factorial]  have hfac :      (1 / log x) * S            1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5 + 65 / log x ^ 6        + (206 + 364 / log x + 381 / log x ^ 2 + 238 / log x ^ 3 + 97 / log x ^ 4 +            30 / log x ^ 5 + 8 / log x ^ 6) / log x ^ 7 := by    simpa [hsum] using shift_factorial_lower (log x) hlog_gt1  have hmterm :      m_a / (log x * (log x - 1) ^ 6)       m_a / log x ^ 7 := by    simpa using shift_m_lower_of_nonneg m_a (log x) hm hlog_gt1  have hcore65 :      (1 / log x) * (S + m_a / (log x - 1) ^ 6)            1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5 + 65 / log x ^ 6        + ε' m_a x / log x ^ 7 := by    have hsplit :        (1 / log x) * (S + m_a / (log x - 1) ^ 6)        = (1 / log x) * S + m_a / (log x * (log x - 1) ^ 6) := by      calc        (1 / log x) * (S + m_a / (log x - 1) ^ 6)            = (1 / log x) * S + (1 / log x) * (m_a / (log x - 1) ^ 6) := by ring        _ = (1 / log x) * S + m_a / (log x * (log x - 1) ^ 6) := by          field_simp [hlog_pos.ne']    have hsum' := add_le_add hfac hmterm    have hsum'' :        1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5 + 65 / log x ^ 6          + (206 + 364 / log x + 381 / log x ^ 2 + 238 / log x ^ 3 + 97 / log x ^ 4 +              30 / log x ^ 5 + 8 / log x ^ 6) / log x ^ 7          + m_a / log x ^ 7         (1 / log x) * (S + m_a / (log x - 1) ^ 6) := by      calc        1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5 + 65 / log x ^ 6          + (206 + 364 / log x + 381 / log x ^ 2 + 238 / log x ^ 3 + 97 / log x ^ 4 +              30 / log x ^ 5 + 8 / log x ^ 6) / log x ^ 7          + m_a / log x ^ 7             (1 / log x) * S + m_a / (log x * (log x - 1) ^ 6) := hsum'        _ = (1 / log x) * (S + m_a / (log x - 1) ^ 6) := hsplit.symm    calc      1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5 + 65 / log x ^ 6        + ε' m_a x / log x ^ 7          =            1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5 + 65 / log x ^ 6              + (206 + 364 / log x + 381 / log x ^ 2 + 238 / log x ^ 3 + 97 / log x ^ 4 +                  30 / log x ^ 5 + 8 / log x ^ 6) / log x ^ 7              + m_a / log x ^ 7 := by                simp [ε']                ring      _  (1 / log x) * (S + m_a / (log x - 1) ^ 6) := hsum''  have htarget_le :      x ^ 2 *          (1 / log x ^ 2 + 2 / log x ^ 3 + 5 / log x ^ 4 + 16 / log x ^ 5 + 65 / log x ^ 6 +            ε' m_a x / log x ^ 7)       x ^ 2 * ((1 / log x) * (S + m_a / (log x - 1) ^ 6)) :=    mul_le_mul_of_nonneg_left hcore65 (sq_nonneg x)  grind