Head version
a93551347dce
a93551347dce924b1db75d40218841bf085a465f
- Toolchain
- leanprover/lean4:v4.32.0
- Revision date
- 22 Jul 2026
- Dependencies
- 13
- Versions
- 9
AlexKontorovich/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.
Head version
a93551347dce924b1db75d40218841bf085a465f
External build observation
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
Showing 1,081 to 1,100 of 1,644 declarations.
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorPartialProductFactor · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorPartialProductFactor.lean:176
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:27
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:51
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:104
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:138
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:245
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:312
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:433
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:463
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:486
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientConvergence · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientConvergence.lean:511
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientRemovable · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientRemovable.lean:33
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientRemovable · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientRemovable.lean:57
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientRemovable · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientRemovable.lean:82
theorem
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorQuotientRemovable · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorQuotientRemovable.lean:116
theorem
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
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]
/-!
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
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]
/-!
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
/-!
f away from the originAway 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
lemma
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorUnits · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorUnits.lean:25
lemma
Open the record for the exact Lean statement and complete source.
PrimeNumberTheoremAnd.Mathlib.Analysis.Complex.DivisorUnits · PrimeNumberTheoremAnd/Mathlib/Analysis/Complex/DivisorUnits.lean:38
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.