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

Kadiri.zeroImagDyadicAbsToPositiveCountWithZeroHeightSource_of_conj

PrimeNumberTheoremAnd.IEANTN.KadiriZeroCounting · PrimeNumberTheoremAnd/IEANTN/KadiriZeroCounting.lean:1209 to 1295

Source documentation

Conjugation symmetry reduces absolute-height counts to two positive-height buckets plus the finite zero-height bucket.

Exact Lean statement

theorem zeroImagDyadicAbsToPositiveCountWithZeroHeightSource_of_conj
    (hconj : riemannZetaConjZeroSource) :
    zeroImagDyadicAbsToPositiveCountWithZeroHeightSource

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem zeroImagDyadicAbsToPositiveCountWithZeroHeightSource_of_conj    (hconj : riemannZetaConjZeroSource) :    zeroImagDyadicAbsToPositiveCountWithZeroHeightSource := by  classical  refine 2, (Nat.card ZeroHeightNontrivialZeros : ), by norm_num, ?_, ?_  · exact_mod_cast Nat.zero_le (Nat.card ZeroHeightNontrivialZeros)  intro k  let T :  := (2 : ) ^ (k + 1)  have hT_pos : 0 < T := by    exact pow_pos (by norm_num) _  let Abs := {rho : NontrivialZeros // |(rho : ℂ).im| < T}  let Pos := {rho : NontrivialZeros // 0 < (rho : ℂ).im  (rho : ℂ).im < T}  let Z := ZeroHeightNontrivialZeros  haveI : Finite Pos := by    haveI : Finite (riemannZeta.zeroes_rect (.Ioo (0 : ) 1) (.Ioo 0 T)) :=      Set.finite_coe_iff.mpr (zeroes_rect_Ioo_critical_positive_height_finite T)    exact Finite.of_equiv _ (positiveHeightNontrivialZeroEquivZeroesRect T).symm  haveI : Finite Z := zeroHeightNontrivialZeros_finite  let toBucket : Abs  ((PosPos) ⊕ Z) := fun rho =>    if hpos : 0 < (rho.1 : ℂ).im then      Sum.inl (Sum.inl        rho.1,          by            constructor            · exact hpos            · have hlt := rho.2              rwa [abs_of_pos hpos] at hlt)    else if hzero : (rho.1 : ℂ).im = 0 then      Sum.inr rho.1, hzero    else      have hle : (rho.1 : ℂ).im  0 := le_of_not_gt hpos      have hneg : (rho.1 : ℂ).im < 0 := lt_of_le_of_ne hle hzero      Sum.inl (Sum.inr        ⟨⟨((starRingEnd ℂ) (rho.1 : ℂ)),            by simpa [Complex.conj_re] using rho.1.property.1,            Set.mem_univ _,            by exact hconj (rho.1 : ℂ) rho.1.property.2.2,          by            constructor            · rw [Complex.conj_im]              exact neg_pos.mpr hneg            · rw [Complex.conj_im]              simpa [abs_of_neg hneg] using rho.2)  let recover : ((PosPos) ⊕ Z)  NontrivialZeros := fun bucket =>    match bucket with    | Sum.inl (Sum.inl rho) => rho.1    | Sum.inl (Sum.inr rho) =>        ((starRingEnd ℂ) (rho.1 : ℂ)),          by simpa [Complex.conj_re] using rho.1.property.1,          Set.mem_univ _,          by exact hconj (rho.1 : ℂ) rho.1.property.2.2    | Sum.inr rho => rho.1  have hrecover :  rho : Abs, recover (toBucket rho) = rho.1 := by    intro rho    by_cases hpos : 0 < (rho.1 : ℂ).im    · simp [toBucket, recover, hpos]    · by_cases hzero : (rho.1 : ℂ).im = 0      · simp [toBucket, recover, hzero]      · simp [toBucket, recover, hpos, hzero]  have hinj : Function.Injective toBucket := by    intro rho eta h    apply Subtype.ext    calc      rho.1 = recover (toBucket rho) := (hrecover rho).symm      _ = recover (toBucket eta) := by rw [h]      _ = eta.1 := hrecover eta  have hcard_nat :      Nat.card Abs  Nat.card ((PosPos) ⊕ Z) :=    Nat.card_le_card_of_injective toBucket hinj  have hcard_real :      (Nat.card Abs : )  (Nat.card ((PosPos) ⊕ Z) : ) := by    exact_mod_cast hcard_nat  have htarget :      (Nat.card ((PosPos) ⊕ Z) : ) =        2 * (Nat.card Pos : ) + (Nat.card Z : ) := by    rw [Nat.card_sum, Nat.card_sum]    norm_num [Nat.cast_add]    ring  calc    (Nat.card {rho : NontrivialZeros // |(rho : ℂ).im| < (2 : ) ^ (k + 1)} : )        = (Nat.card Abs : ) := by rfl    _  (Nat.card ((PosPos) ⊕ Z) : ) := hcard_real    _ = 2 * (Nat.card Pos : ) + (Nat.card Z : ) := htarget    _ = 2 * (Nat.card {rho : NontrivialZeros //          0 < (rho : ℂ).im  (rho : ℂ).im < (2 : ) ^ (k + 1)} : ) +        (Nat.card ZeroHeightNontrivialZeros : ) := by          rfl