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

Real.one_add_abs_two_mul_dyadicRadius_rpow_le

PrimeNumberTheoremAnd.Mathlib.Analysis.SpecialFunctions.Log.Dyadic · PrimeNumberTheoremAnd/Mathlib/Analysis/SpecialFunctions/Log/Dyadic.lean:108 to 174

Source documentation

A dyadic radius r₀ 2^(k+1) gives polynomial growth bounded by a geometric term.

Exact Lean statement

lemma one_add_abs_two_mul_dyadicRadius_rpow_le {r0 ρ : ℝ} (k : ℕ)
    (hr0 : 0 < r0) (hρ : 0 ≤ ρ) :
    (1 + |2 * (r0 * (2 : ℝ) ^ ((k : ℝ) + 1))|) ^ ρ
      ≤ (1 + 4 * r0) ^ ρ * ((2 : ℝ) ^ ρ) ^ k

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma one_add_abs_two_mul_dyadicRadius_rpow_le {r0 ρ : } (k : )    (hr0 : 0 < r0) (hρ : 0  ρ) :    (1 + |2 * (r0 * (2 : ) ^ ((k : ) + 1))|) ^ ρ       (1 + 4 * r0) ^ ρ * ((2 : ) ^ ρ) ^ k := by  let Rk :  := r0 * (2 : ) ^ ((k : ) + 1)  have hRk' : |2 * Rk| = 4 * r0 * (2 : ) ^ (k : ) := by    have hnonneg : 0  (2 : ) * Rk := by      have : 0  Rk := by        dsimp [Rk]        exact mul_nonneg hr0.le (le_of_lt (Real.rpow_pos_of_pos (by norm_num) _))      nlinarith    have hmul : (2 : ) * Rk = 4 * r0 * (2 : ) ^ (k : ) := by      dsimp [Rk]      calc        (2 : ) * (r0 * (2 : ) ^ ((k : ) + 1))            = (2 * r0) * (2 : ) ^ ((k : ) + 1) := by ring        _ = (2 * r0) * ((2 : ) ^ (k : ) * (2 : ) ^ (1 : )) := by              simp [Real.rpow_add, mul_assoc]        _ = (2 * r0) * ((2 : ) ^ (k : ) * 2) := by simp [Real.rpow_one]        _ = 4 * r0 * (2 : ) ^ (k : ) := by ring    calc      |2 * Rk| = 2 * Rk := abs_of_nonneg hnonneg      _ = 4 * r0 * (2 : ) ^ (k : ) := hmul  have hbase :      (1 + |2 * Rk|)  (1 + 4 * r0) * (2 : ) ^ (k : ) := by    have h1 : (1 : )  (2 : ) ^ (k : ) := by      have : (1 : )  (2 : ) ^ (k : ) := by        simpa using (one_le_pow₀ (by norm_num : (1 : )  (2 : )))      simpa [Real.rpow_natCast] using this    have habs :        1 + |2 * Rk|  (2 : ) ^ (k : ) + (4 * r0) * (2 : ) ^ (k : ) := by      rw [hRk']      simpa [add_assoc, add_left_comm, add_comm, mul_assoc, mul_left_comm, mul_comm] using        (add_le_add_right h1 ((4 * r0) * (2 : ) ^ (k : )))    have hfac :        (2 : ) ^ (k : ) + (4 * r0) * (2 : ) ^ (k : )          = (1 + 4 * r0) * (2 : ) ^ (k : ) := by      ring    exact habs.trans (le_of_eq hfac)  have hRnonneg : 0  (1 + |2 * Rk|) := by linarith [abs_nonneg (2 * Rk)]  have :      (1 + |2 * Rk|) ^ ρ  ((1 + 4 * r0) * (2 : ) ^ (k : )) ^ ρ :=    Real.rpow_le_rpow hRnonneg hbase hρ  have hsplit :      ((1 + 4 * r0) * (2 : ) ^ (k : )) ^ ρ        = (1 + 4 * r0) ^ ρ * ((2 : ) ^ (k : )) ^ ρ := by    have h1 : 0  (1 + 4 * r0) := by nlinarith [hr0.le]    have h2 : 0  (2 : ) ^ (k : ) :=      le_of_lt (Real.rpow_pos_of_pos (by norm_num) _)    simpa using (Real.mul_rpow h1 h2 (z := ρ))  have hpow : ((2 : ) ^ (k : )) ^ ρ = ((2 : ) ^ ρ) ^ k := by    have h2nonneg : (0 : )  2 := by norm_num    calc      ((2 : ) ^ (k : )) ^ ρ = (2 : ) ^ ((k : ) * ρ) := by        simp [Real.rpow_mul]      _ = ((2 : ) ^ ρ) ^ (k : ) := by        simpa [mul_comm] using          (Real.rpow_mul (x := (2 : )) (y := ρ) (z := (k : )) h2nonneg)      _ = ((2 : ) ^ ρ) ^ k := by        simp [Real.rpow_natCast]  calc    (1 + |2 * (r0 * (2 : ) ^ ((k : ) + 1))|) ^ ρ        = (1 + |2 * Rk|) ^ ρ := by rfl    _  ((1 + 4 * r0) * (2 : ) ^ (k : )) ^ ρ := this    _ = (1 + 4 * r0) ^ ρ * ((2 : ) ^ (k : )) ^ ρ := hsplit    _ = (1 + 4 * r0) ^ ρ * ((2 : ) ^ ρ) ^ k := by      simpa [mul_assoc] using congrArg (fun t => (1 + 4 * r0) ^ ρ * t) hpow