Paper IV · Lean source

CanonicalProductMultiplicity.lean

Selected results recorded Coverage and evidence

Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.

This viewer reads the retained source; it does not run Lean or assign new claim mappings.

Local imports (1)

KomorebiPaperIV/CanonicalProductMultiplicity.lean137 lines

Original source pathPaper_IV_Verification_Closeout_v1.1.0/formalization/lean/KomorebiPaperIV/CanonicalProductMultiplicity.lean
Skip declarations and read code

Skip source text

1 /-
2 Copyright (c) 2026 Komorebi P. All rights reserved.
3 Authors: Komorebi P.
4 -/
5 import KomorebiPaperIV.FullCanonicalProduct
6 
7 namespace Komorebi.PaperIV
8 noncomputable section
9 open Set Filter
10 
11 /-- A general normally convergent reciprocal product, also used after deleting
12 all copies of a single zero. -/
13 def reciprocalProduct {ι : Type*} (a : ι → ℂ) (w : ℂ) : ℂ := ∏' i, (1 - w / a i)
14 
15 theorem reciprocalProduct_locally_uniform {ι : Type*} (a : ι → ℂ)
16     (hs : Summable (fun i => 1 / ‖a i‖)) :
17     HasProdLocallyUniformlyOn (fun i w => 1 - w / a i) (reciprocalProduct a) univ := by
18   apply hasProdLocallyUniformlyOn_of_forall_compact isOpen_univ
19   intro K _ hK
20   obtain ⟨B, hB⟩ := hK.isBounded.exists_norm_le
21   have h := (hs.mul_left B).hasProdUniformlyOn_one_add hK
22     (f := fun i w => -w / a i) (Eventually.of_forall (fun i w hw => ?_)) (fun _ => by fun_prop)
23   · simpa only [reciprocalProduct, neg_div, ← sub_eq_add_neg] using! h
24   · rw [norm_div, norm_neg, mul_one_div]
25     exact div_le_div_of_nonneg_right (hB w hw) (norm_nonneg _)
26 
27 theorem reciprocalProduct_entire {ι : Type*} (a : ι → ℂ)
28     (hs : Summable (fun i => 1 / ‖a i‖)) : Differentiable ℂ (reciprocalProduct a) := by
29   apply differentiableOn_univ.mp
30   apply (reciprocalProduct_locally_uniform a hs).differentiableOn _ isOpen_univ
31   apply Eventually.of_forall
32   intro S
33   have h : DifferentiableOn ℂ (fun w : ℂ => ∏ i ∈ S, (1 - w / a i)) univ :=
34     DifferentiableOn.fun_finsetProd (fun _ _ => by fun_prop)
35   simpa only [Finset.prod_fn] using h
36 
37 theorem reciprocalProduct_ne_zero {ι : Type*} (a : ι → ℂ)
38     (hs : Summable (fun i => 1 / ‖a i‖)) (ha : ∀ i, a i ≠ 0)
39     {w : ℂ} (hw : ∀ i, w ≠ a i) : reciprocalProduct a w ≠ 0 := by
40   have h := tprod_one_add_ne_zero_of_summable (f := fun i => -w / a i) (fun i => ?_)
41     (by simpa only [norm_div, norm_neg, mul_one_div] using hs.mul_left ‖w‖)
42   · simpa only [reciprocalProduct, neg_div, ← sub_eq_add_neg] using! h
43   · rw [neg_div, ← sub_eq_add_neg, sub_ne_zero]
44     intro he
45     exact hw i ((div_eq_one_iff_eq (ha i)).mp he.symm)
46 
47 def zeroIndexFiberEquiv (f : ℂ → ℂ) (z : {z : ℂ // f z = 0}) :
48     Fin (analyticOrderNatAt f z) ≃ {i : ZeroMultiplicityIndex f // i.1 = z} where
49   toFun k := ⟨⟨z, k⟩, rfl⟩
50   invFun i := by
51     rcases i with ⟨⟨w, k⟩, h⟩
52     cases h
53     exact k
54   left_inv _ := rfl
55   right_inv i := by
56     rcases i with ⟨⟨w, k⟩, h⟩
57     cases h
58     rfl
59 
60 def otherZeroProduct (f : ℂ → ℂ) (z : {z : ℂ // f z = 0}) (w : ℂ) : ℂ :=
61   reciprocalProduct (fun i : {i : ZeroMultiplicityIndex f // i.1 ≠ z} => indexedZero i.val) w
62 
63 theorem otherZeroProduct_entire {f : ℂ → ℂ} (hs : ZeroPowerSummable f 1)
64     (z : {z : ℂ // f z = 0}) : Differentiable ℂ (otherZeroProduct f z) :=
65   reciprocalProduct_entire _ ((zeroMultiplicity_reciprocal_summable hs).subtype _)
66 
67 theorem otherZeroProduct_ne_zero_at_zero {f : ℂ → ℂ} (hs : ZeroPowerSummable f 1)
68     (hf0 : f 0 ≠ 0) (z : {z : ℂ // f z = 0}) : otherZeroProduct f z z ≠ 0 := by
69   apply reciprocalProduct_ne_zero _ ((zeroMultiplicity_reciprocal_summable hs).subtype _)
70     (fun i => indexedZero_ne_zero hf0 i.val)
71   intro i he
72   apply i.property
73   exact Subtype.ext he.symm
74 
75 /-- The factor at one distinct zero has exactly the prescribed multiplicity. -/
76 theorem fullCanonicalProduct_factor_at_zero {f : ℂ → ℂ} (hs : ZeroPowerSummable f 1)
77     (z : {z : ℂ // f z = 0}) (w : ℂ) :
78     fullCanonicalProduct f w = (1 - w / (z : ℂ)) ^ analyticOrderNatAt f z * otherZeroProduct f z w := by
79   have hm := fullCanonicalProduct_factors_summable hs w
80   let S : Set (ZeroMultiplicityIndex f) := {i | i.1 = z}
81   have he := Multipliable.tprod_mul_tprod_compl
82     (f := fun i : ZeroMultiplicityIndex f => 1 - w / indexedZero i) (s := S)
83     (multipliable_one_sub_of_summable (hm.subtype S))
84     (multipliable_one_sub_of_summable (hm.subtype (Sᶜ)))
85   have hfiber : (∏' _k : Fin (analyticOrderNatAt f z), (1 - w / (z : ℂ))) =
86       ∏' i : S, (1 - w / indexedZero i.val) :=
87     (zeroIndexFiberEquiv f z).tprod_eq (fun i => 1 - w / indexedZero i.val)
88   have hf : (∏' i : S, (1 - w / indexedZero i.val)) =
89       (1 - w / (z : ℂ)) ^ analyticOrderNatAt f z := by
90     simpa only [tprod_fintype, Finset.prod_const,
91       Finset.card_univ, Fintype.card_fin] using hfiber.symm
92   rw [hf] at he
93   exact he.symm
94 
95 theorem linear_zero_factor_order {z : ℂ} (hz : z ≠ 0) :
96     analyticOrderAt (fun w : ℂ => 1 - w / z) z = 1 := by
97   apply (show AnalyticAt ℂ (fun w : ℂ => 1 - w / z) z by fun_prop).analyticOrderAt_eq_one_of_zero_deriv_ne_zero
98   · rw [div_self hz, sub_self]
99   · have hd := ((hasDerivAt_id z).div_const z).const_sub 1
100     erw [hd.deriv]
101     exact neg_ne_zero.mpr (one_div_ne_zero hz)
102 
103 theorem fullCanonicalProduct_order_at_zero {f : ℂ → ℂ} (hs : ZeroPowerSummable f 1)
104     (hf0 : f 0 ≠ 0) (z : {z : ℂ // f z = 0}) :
105     analyticOrderAt (fullCanonicalProduct f) z = (analyticOrderNatAt f z : ℕ∞) := by
106   have hz : (z : ℂ) ≠ 0 := by intro h; apply hf0; simpa only [h] using z.property
107   have he : fullCanonicalProduct f =
108       (fun w : ℂ => (1 - w / (z : ℂ)) ^ analyticOrderNatAt f z) * otherZeroProduct f z :=
109     funext (fullCanonicalProduct_factor_at_zero hs z)
110   rw [he, analyticOrderAt_mul (by fun_prop) ((otherZeroProduct_entire hs z).analyticAt z)]
111   have ho := ((otherZeroProduct_entire hs z).analyticAt z).analyticOrderAt_eq_zero.mpr
112     (otherZeroProduct_ne_zero_at_zero hs hf0 z)
113   rw [ho, add_zero]
114   erw [analyticOrderAt_pow (f := fun w : ℂ => 1 - w / (z : ℂ)) (by fun_prop)]
115   rw [linear_zero_factor_order hz]
116   simp only [nsmul_one]
117 
118 theorem fullCanonicalProduct_same_orders {f : ℂ → ℂ} (hf : Differentiable ℂ f)
119     (hs : ZeroPowerSummable f 1) (hf0 : f 0 ≠ 0) (z : ℂ) :
120     analyticOrderAt (fullCanonicalProduct f) z = analyticOrderAt f z := by
121   by_cases hz : f z = 0
122   · have h := fullCanonicalProduct_order_at_zero hs hf0 ⟨z, hz⟩
123     simpa only [Nat.cast_analyticOrderNatAt (entire_analyticOrderAt_ne_top (fun w => hf.analyticAt w) hf0 z)] using h
124   · rw [((fullCanonicalProduct_entire hs).analyticAt z).analyticOrderAt_eq_zero.mpr
125       (fun h => hz ((fullCanonicalProduct_zero_iff hf hs hf0 z).mp h)),
126       (hf.analyticAt z).analyticOrderAt_eq_zero.mpr hz]
127 
128 theorem entireReducedDenominator_full_product_same_orders {N : ℕ} (hN : 2 ≤ N) (z : ℂ) :
129     analyticOrderAt (fullCanonicalProduct (entireReducedDenominator N)) z =
130       analyticOrderAt (entireReducedDenominator N) z :=
131   fullCanonicalProduct_same_orders
132     (fun z => (analyticAt_entireReducedDenominator (by omega) z).differentiableAt)
133     (entireReducedDenominator_reciprocal_zeros_summable hN)
134     (by rw [entireReducedDenominator_zero]; exact one_ne_zero) z
135 
136 end
137 end Komorebi.PaperIV

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: 83210b6e7b4a1b24275360f104069e82295f2f6a2d6ee40dde32a99f0197f52f

Original source on GitHub

Back to Paper IV: Cyclic Analytic Functions, Reciprocal Families, and Spectral Zero Data