Skip to main content
All packages

AlexKontorovich/PrimeNumberTheoremAnd

PrimeNumberTheoremAnd

Blueprint for the PNT+ Project

Therefore indexed 1,644 complete source declarations from the exact package revision. Individual authorship and independent verification remain unset.

Research project325 GitHub starsApache-2.09 indexed versionsRepositoryFull history on Reservoir

Head version

a93551347dce

a93551347dce924b1db75d40218841bf085a465f

Toolchain
leanprover/lean4:v4.32.0
Revision date
22 Jul 2026
Dependencies
13
Versions
9

External build observation

Exact head commit and toolchain

No Reservoir build observation was found for this exact commit and toolchain. This is not evidence of failure.

Pin this source in lakefile.lean

require PrimeNumberTheoremAnd from git "https://github.com/AlexKontorovich/PrimeNumberTheoremAnd.git" @ "a93551347dce924b1db75d40218841bf085a465f"

Source declarations

1,644 indexed proofs

Package history

Showing 1,081 to 1,100 of 1,644 declarations.

theorem

Complex.Hadamard.exists_analyticAt_divisorCanonicalProduct_quotient

A removable analytic quotient for divisorCanonicalProduct m f univ z / (z - z₀)^k, where k is the divisor fiber cardinality at z₀.

PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientRemovable · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientRemovable.lean:154

theorem

Complex.Hadamard.analyticOrderNatAt_divisorCanonicalProduct_eq_fiber_card

A removable analytic quotient for divisorCanonicalProduct m f univ z / (z - z₀)^k, where k is the divisor fiber cardinality at z₀. -/ theorem exists_analyticAt_divisorCanonicalProduct_quotient (m : ℕ) (f : ℂ → ℂ) (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) => ‖divisorZeroIndex₀_val p‖⁻¹ ^ (m + 1))) (z₀ : ℂ) : ∃ q : ℂ → ℂ, AnalyticAt ℂ q z₀ ∧ q z₀ = limUnder (𝓝[≠] z₀) (fun z : ℂ => (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card) ∧ ∀ z : ℂ, z ≠ z₀ → q z = (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card := by let q : ℂ → ℂ := Function.update (fun z : ℂ => (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card) z₀ (limUnder (𝓝[≠] z₀) fun z : ℂ => (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card) refine ⟨q, ?, ?, ?_⟩ · simpa [q] using analyticAt_update_limUnder_divisorCanonicalProduct_div_pow (m := m) (f := f) (h_sum := h_sum) (z₀ := z₀) · simp [q] · intro z hz simp [q, Function.update_of_ne hz]

/-!

Exact multiplicity of the divisor canonical product

At each z₀, the zero multiplicity of divisorCanonicalProduct equals the fiber cardinality card (divisorZeroIndex₀_fiberFinset z₀).

PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientRemovable · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientRemovable.lean:193

theorem

Complex.Hadamard.analyticOrderNatAt_divisorCanonicalProduct_eq_analyticOrderNatAt

A removable analytic quotient for divisorCanonicalProduct m f univ z / (z - z₀)^k, where k is the divisor fiber cardinality at z₀. -/ theorem exists_analyticAt_divisorCanonicalProduct_quotient (m : ℕ) (f : ℂ → ℂ) (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) => ‖divisorZeroIndex₀_val p‖⁻¹ ^ (m + 1))) (z₀ : ℂ) : ∃ q : ℂ → ℂ, AnalyticAt ℂ q z₀ ∧ q z₀ = limUnder (𝓝[≠] z₀) (fun z : ℂ => (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card) ∧ ∀ z : ℂ, z ≠ z₀ → q z = (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card := by let q : ℂ → ℂ := Function.update (fun z : ℂ => (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card) z₀ (limUnder (𝓝[≠] z₀) fun z : ℂ => (divisorCanonicalProduct m f (Set.univ : Set ℂ) z) / (z - z₀) ^ (divisorZeroIndex₀_fiberFinset (f := f) z₀).card) refine ⟨q, ?, ?, ?_⟩ · simpa [q] using analyticAt_update_limUnder_divisorCanonicalProduct_div_pow (m := m) (f := f) (h_sum := h_sum) (z₀ := z₀) · simp [q] · intro z hz simp [q, Function.update_of_ne hz]

/-!

Exact multiplicity of the divisor canonical product

At each z₀, the zero multiplicity of divisorCanonicalProduct equals the fiber cardinality card (divisorZeroIndex₀_fiberFinset z₀). -/

theorem analyticOrderNatAt_divisorCanonicalProduct_eq_fiber_card (m : ℕ) (f : ℂ → ℂ) (h_sum : Summable (fun p : divisorZeroIndex₀ f (Set.univ : Set ℂ) => ‖divisorZeroIndex₀_val p‖⁻¹ ^ (m + 1))) (z₀ : ℂ) : analyticOrderNatAt (divisorCanonicalProduct m f (Set.univ : Set ℂ)) z₀ = (divisorZeroIndex₀_fiberFinset (f := f) z₀).card := by set k : ℕ := (divisorZeroIndex₀_fiberFinset (f := f) z₀).card let F : ℂ → ℂ := divisorCanonicalProduct m f (Set.univ : Set ℂ) let q0 : ℂ → ℂ := fun z => F z / (z - z₀) ^ k rcases exists_analyticAt_divisorCanonicalProduct_quotient (m := m) (f := f) (h_sum := h_sum) (z₀ := z₀) with ⟨q, hqA, hq_self, hq_ne⟩ have hdiff_univ : DifferentiableOn ℂ F (Set.univ : Set ℂ) := differentiableOn_divisorCanonicalProduct_univ (m := m) (f := f) h_sum have han : AnalyticAt ℂ F z₀ := by refine (Complex.analyticAt_iff_eventually_differentiableAt).2 ?_ refine Filter.Eventually.of_forall ?_ intro z have : DifferentiableWithinAt ℂ F (Set.univ : Set ℂ) z := hdiff_univ z (by simp) exact this.differentiableAt (by simp) rcases exists_ball_eq_divisorCanonicalProduct_div_pow_eq (m := m) (f := f) (h_sum := h_sum) (z₀ := z₀) with ⟨ε, hε, u, huA, hu0, hEq⟩ let g : ℂ → ℂ := fun z => (divisorComplementCanonicalProduct m f z₀ z) * u z have hcompDiff : DifferentiableOn ℂ (divisorComplementCanonicalProduct m f z₀) (Set.univ : Set ℂ) := differentiableOn_divisorComplementCanonicalProduct_univ (m := m) (f := f) (z₀ := z₀) h_sum have hcompCont : ContinuousAt (divisorComplementCanonicalProduct m f z₀) z₀ := (hcompDiff z₀ (by simp)).differentiableAt (by simp) |>.continuousAt have hgCont : ContinuousAt g z₀ := (hcompCont.mul huA.continuousAt) have hg0 : g z₀ ≠ 0 := by have hcomp0 : divisorComplementCanonicalProduct m f z₀ z₀ ≠ 0 := divisorComplementCanonicalProduct_ne_zero_at (m := m) (f := f) (z₀ := z₀) h_sum exact mul_ne_zero hcomp0 hu0 have hne_mem : ∀ᶠ z in 𝓝[≠] z₀, z ∈ (({z₀} : Set ℂ)ᶜ) := Filter.eventually_of_mem (self_mem_nhdsWithin : (({z₀} : Set ℂ)ᶜ) ∈ 𝓝[≠] z₀) (fun _ hz => hz) have hne : ∀ᶠ z in 𝓝[≠] z₀, z ≠ z₀ := by filter_upwards [hne_mem] with z hz simpa [Set.mem_compl_singleton_iff] using hz have ht_q0 : Tendsto q0 (𝓝[≠] z₀) (𝓝 (g z₀)) := by have hball : ∀ᶠ z in 𝓝[≠] z₀, z ∈ Metric.ball z₀ ε := Filter.eventually_of_mem (mem_nhdsWithin_of_mem_nhds (Metric.ball_mem_nhds z₀ hε)) (fun _ hz => hz) have heq : q0 =ᶠ[𝓝[≠] z₀] g := by filter_upwards [hball, hne] with z hz hzne have hq := hEq z hz hzne simpa [q0, F, k, g, smul_eq_mul] using hq exact (hgCont.continuousWithinAt.tendsto.congr' heq.symm) have hlim : limUnder (𝓝[≠] z₀) q0 = g z₀ := ht_q0.limUnder_eq have hq0 : q z₀ ≠ 0 := by have hq_self' : q z₀ = limUnder (𝓝[≠] z₀) q0 := by simpa [q0, F, k] using hq_self have : q z₀ = g z₀ := hq_self'.trans hlim exact this.symm ▸ hg0 have heq_punct : (fun z : ℂ => F z) =ᶠ[𝓝[≠] z₀] fun z : ℂ => (z - z₀) ^ k • q z := by filter_upwards [hne] with z hz have hzpow : (z - z₀) ^ k ≠ 0 := pow_ne_zero _ (sub_ne_zero.mpr hz) have hq : q z = q0 z := by simpa [q0, F, k] using hq_ne z hz have hmul : (z - z₀) ^ k * q0 z = F z := by calc (z - z₀) ^ k * q0 z = (((z - z₀) ^ k) * F z) / ((z - z₀) ^ k) := by simp [q0, div_eq_mul_inv, mul_assoc] _ = F z := by simpa [mul_assoc] using (mul_div_cancel_left₀ (F z) hzpow) have : F z = (z - z₀) ^ k * q z := by calc F z = (z - z₀) ^ k * q0 z := hmul.symm _ = (z - z₀) ^ k * q z := by simp [hq] simpa [smul_eq_mul] using this have hcontF : ContinuousAt F z₀ := (hdiff_univ z₀ (by simp)).differentiableAt (by simp) |>.continuousAt have hcontq : ContinuousAt q z₀ := hqA.continuousAt have h_at_z0 : F z₀ = (z₀ - z₀) ^ k • q z₀ := by have ht1 : Tendsto F (𝓝[≠] z₀) (𝓝 (F z₀)) := hcontF.continuousWithinAt.tendsto have hpow : Tendsto (fun z : ℂ => (z - z₀) ^ k) (𝓝[≠] z₀) (𝓝 ((z₀ - z₀) ^ k)) := ((continuousAt_id.sub continuousAt_const).pow k).continuousWithinAt.tendsto have ht2 : Tendsto (fun z : ℂ => (z - z₀) ^ k • q z) (𝓝[≠] z₀) (𝓝 ((z₀ - z₀) ^ k • q z₀)) := hpow.mul (hcontq.continuousWithinAt.tendsto) have ht2' : Tendsto F (𝓝[≠] z₀) (𝓝 ((z₀ - z₀) ^ k • q z₀)) := ht2.congr' heq_punct.symm exact tendsto_nhds_unique ht1 ht2' have hfac : ∀ᶠ z in 𝓝 z₀, F z = (z - z₀) ^ k • q z := by have hball1 : Metric.ball z₀ 1 ∈ 𝓝 z₀ := Metric.ball_mem_nhds z₀ (by norm_num) have hball1' : ∀ᶠ z in 𝓝 z₀, z ∈ Metric.ball z₀ 1 := Filter.eventually_of_mem hball1 (fun _ hz => hz) filter_upwards [hball1'] with z _hz by_cases hz0 : z = z₀ · subst hz0 simpa using h_at_z0 · have hzpow : (z - z₀) ^ k ≠ 0 := pow_ne_zero _ (sub_ne_zero.mpr hz0) have hq : q z = q0 z := by simpa [q0, F, k] using hq_ne z hz0 have hmul : (z - z₀) ^ k * q0 z = F z := by calc (z - z₀) ^ k * q0 z = (((z - z₀) ^ k) * F z) / ((z - z₀) ^ k) := by simp [q0, div_eq_mul_inv, mul_assoc] _ = F z := by simpa [mul_assoc] using (mul_div_cancel_left₀ (F z) hzpow) have : F z = (z - z₀) ^ k * q z := by calc F z = (z - z₀) ^ k * q0 z := hmul.symm _ = (z - z₀) ^ k * q z := by simp [hq] simpa [smul_eq_mul] using this have hk' : analyticOrderAt F z₀ = k := (han.analyticOrderAt_eq_natCast (n := k)).2 ⟨q, hqA, hq0, hfac⟩ have hkNat : analyticOrderNatAt F z₀ = k := by simp [analyticOrderNatAt, hk'] simpa [F, k] using hkNat

/-!

Canonical product has the same analytic order as f away from the origin

Away from 0, the analytic order of the divisor-indexed canonical product agrees with that of f (for differentiable f), assuming the standard summability hypothesis.

PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientRemovable · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientRemovable.lean:316

Static source extraction only. Package code was not executed. Every result keeps its complete declaration, exact file and line range, commit, toolchain, license file, and content hash.