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

Complex.Hadamard.norm_inv_hadamardDenominator_le_exp_on_cartan_circle

PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.HadamardFactorization.Growth · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/HadamardFactorization/Growth.lean:95 to 234

Source documentation

On a Cartan-admissible circle, the denominator in the Hadamard quotient is not too small.

Exact Lean statement

theorem norm_inv_hadamardDenominator_le_exp_on_cartan_circle
    {f : ℂ → ℂ} {ρ τ : ℝ} {m : ℕ}
    (hmρ : (m : ℝ) ≤ ρ) (hτ : ρ < τ) (hτ_lt : τ < (m + 1 : ℝ))
    (hτ_nonneg : 0 ≤ τ)
    (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>
      ‖divisorZeroIndex₀_val p‖⁻¹ ^ (m + 1)))
    (hsumτ : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>
      ‖divisorZeroIndex₀_val p‖⁻¹ ^ τ)) :
    let Sτ : ℝ

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem norm_inv_hadamardDenominator_le_exp_on_cartan_circle    {f : ℂ  ℂ} {ρ τ : } {m : }    (hmρ : (m : )  ρ) (hτ : ρ < τ) (hτ_lt : τ < (m + 1 : ))    (hτ_nonneg : 0  τ)    (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>      ‖divisorZeroIndex₀_val p‖⁻¹ ^ (m + 1)))    (hsumτ : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) =>      ‖divisorZeroIndex₀_val p‖⁻¹ ^ τ)) :    let Sτ :  :=      ∑' p : divisorZeroIndex₀ f (Set.univ : Set ℂ), ‖divisorZeroIndex₀_val p‖⁻¹ ^ τ    let Cprod :  := cartanProductConstant m τ Sτ     {R r : }, 0 < R  1  R  R  r  r  2 * R        (smallSet : Set (divisorZeroIndex₀ f (Set.univ : Set ℂ)))        (hsmall_fin : smallSet.Finite),        smallSet =            {p : divisorZeroIndex₀ f (Set.univ : Set ℂ) |              ‖divisorZeroIndex₀_val p‖  4 * R}         (let small : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) := hsmall_fin.toFinset         let a : divisorZeroIndex₀ f (Set.univ : Set ℂ)   :=          fun p => ‖divisorZeroIndex₀_val p‖         r  small.image a)         (let small : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) := hsmall_fin.toFinset         let a : divisorZeroIndex₀ f (Set.univ : Set ℂ)   :=          fun p => ‖divisorZeroIndex₀_val p‖         (∑ p  small, (1 : ) * CartanBound.φ (r / a p))           CartanBound.Cφ * (small.card : ))          u : ℂ, ‖u‖ = r           ‖(u ^ analyticOrderNatAt f 0 *              divisorCanonicalProduct m f (Set.univ : Set ℂ) u)⁻¹‖             Real.exp (Cprod * (1 + r) ^ τ) := by  classical  introCprod R r hRpos hRle hR_le_r hr_le_2R smallSet hsmall_fin    hsmallSet hr_not_bad hr_phi u hur  let small : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)) := hsmall_fin.toFinset  let a : divisorZeroIndex₀ f (Set.univ : Set ℂ)   := fun p => ‖divisorZeroIndex₀_val p‖  let bad : Finset  := small.image a  have hr_not_bad' : r  bad := by    simpa [bad, small, a] using hr_not_bad  have hr1 : (1 : )  r := le_trans hRle hR_le_r  have hpow_inv_le1 : ‖(u ^ analyticOrderNatAt f 0)⁻¹‖  1 :=    Complex.norm_inv_pow_le_one_of_one_le_norm u (analyticOrderNatAt f 0) (by simpa [hur] using hr1)  let fac : divisorZeroIndex₀ f (Set.univ : Set ℂ) :=    fun p => weierstrassFactor m (u / divisorZeroIndex₀_val p)  have hloc :      HasProdLocallyUniformlyOn        (fun (p : divisorZeroIndex₀ f (Set.univ : Set ℂ)) (w : ℂ) =>          weierstrassFactor m (w / divisorZeroIndex₀_val p))        (divisorCanonicalProduct m f (Set.univ : Set ℂ))        (Set.univ : Set ℂ) :=    hasProdLocallyUniformlyOn_divisorCanonicalProduct_univ (m := m) (f := f) h_sum  have hprod :      HasProd fac (divisorCanonicalProduct m f (Set.univ : Set ℂ) u) :=    hloc.hasProd (by simp : u  (Set.univ : Set ℂ))  let ap : divisorZeroIndex₀ f (Set.univ : Set ℂ)   := fun p => ‖divisorZeroIndex₀_val p‖  haveI : DecidablePred (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) => p  small) :=    Classical.decPred _  let b : divisorZeroIndex₀ f (Set.univ : Set ℂ)   :=    fun p =>      if hp : p  small then        CartanBound.φ (r / ap p) + (m : ) * (1 + (r / ap p) ^ τ)      else        (2 : ) * (r / ap p) ^ τ  have hterm :  p, ‖(fac p)⁻¹‖  Real.exp (b p) := by    intro p    by_cases hp : p  small    · have hval_ne : r  ap p := by        intro hEq        have : r  bad := by          refine Finset.mem_image.2 p, hp, ?_          simp [ap, a, hEq]        exact (hr_not_bad' this).elim      have hval0 : divisorZeroIndex₀_val p  0 := divisorZeroIndex₀_val_ne_zero p      have hmτ : (m : )  τ := le_trans hmρ (le_of_lt hτ)      have hnear :          ‖(weierstrassFactor m (u / divisorZeroIndex₀_val p))⁻¹‖             Real.exp (CartanBound.φ (r / ap p) + (m : ) * (1 + (r / ap p) ^ τ)) := by        simpa [ap] using          (norm_inv_weierstrassFactor_le_exp_near (m := m) (τ := τ) (r := r)              (u := u) (a := divisorZeroIndex₀_val p)              (hur := hur) (ha := hval0) (hr := by simpa [ap] using hval_ne) hmτ)      simpa [fac, b, hp] using hnear    · have hlarge : (4 * R : ) < ap p := by        have : ¬ap p  4 * R := by          intro hle          have : p  small := by            have hp_mem : p  smallSet := by              simpa [hsmallSet, ap] using hle            simpa [small] using (hsmall_fin.mem_toFinset.2 hp_mem)          exact hp this        exact lt_of_not_ge this      have hz' : ‖u / divisorZeroIndex₀_val p‖  (1 / 2 : ) :=        norm_div_le_half_of_norm_le_of_two_mul_lt (z := u) (a := divisorZeroIndex₀_val p)          (R := 2 * R) (by nlinarith [hRpos]) (by rw [hur]; exact hr_le_2R)          (by nlinarith [hlarge])      have hτ_le : τ  (m + 1 : ) := le_of_lt hτ_lt      have hfar :          ‖(weierstrassFactor m (u / divisorZeroIndex₀_val p))⁻¹‖             Real.exp ((2 : ) * (r / ap p) ^ τ) := by        simpa [ap] using          (norm_inv_weierstrassFactor_le_exp_far (m := m) (τ := τ) (r := r)              (u := u) (a := divisorZeroIndex₀_val p)              (hur := hur) (ha := divisorZeroIndex₀_val_ne_zero p) (hz := hz') hτ_le)      simpa [fac, b, hp] using hfar  have hb_le :       s : Finset (divisorZeroIndex₀ f (Set.univ : Set ℂ)),        (∑ p  s, b p)  Cprod * (1 + r) ^ τ := by    intro s    simpa [small, ap, b, Sτ, Cprod, a, hsmallSet] using      (Complex.Hadamard.cartan_sum_majorant_le (f := f) (m := m) (τ := τ) (R := R) (r := r)        (hRpos := hRpos) (hrpos := lt_of_lt_of_le hRpos hR_le_r)        (hR_le_r := hR_le_r) (hτ_nonneg := hτ_nonneg)        (smallSet := smallSet) (hsmall_fin := hsmall_fin) (hsmallSet := hsmallSet)        (hsumτ := hsumτ)        (hr_phi := by          simpa [small, a, one_mul] using hr_phi)        s)  have hcprod_inv :      ‖(divisorCanonicalProduct m f (Set.univ : Set ℂ) u)⁻¹‖         Real.exp (Cprod * (1 + r) ^ τ) := by    refine hasProd_norm_inv_le_exp_of_pointwise_le_exp:= divisorZeroIndex₀ f (Set.univ : Set ℂ)) (fac := fac)      (F := divisorCanonicalProduct m f (Set.univ : Set ℂ) u)      hprod (b := b) (B := Cprod * (1 + r) ^ τ) ?_ ?_    · exact hterm    · intro s      exact hb_le s  have hmul :      ‖(u ^ analyticOrderNatAt f 0 *          divisorCanonicalProduct m f (Set.univ : Set ℂ) u)⁻¹‖        =      ‖(u ^ analyticOrderNatAt f 0)⁻¹‖ *        ‖(divisorCanonicalProduct m f (Set.univ : Set ℂ) u)⁻¹‖ := by    simp [mul_inv_rev, mul_comm]  rw [hmul]  have :      ‖(u ^ analyticOrderNatAt f 0)⁻¹‖ *          ‖(divisorCanonicalProduct m f (Set.univ : Set ℂ) u)⁻¹‖         1 * Real.exp (Cprod * (1 + r) ^ τ) :=    mul_le_mul hpow_inv_le1 hcprod_inv (by positivity) (by positivity)  simpa using this