Paper IV · Lean source

IndicatorLimit.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 (2)

KomorebiPaperIV/IndicatorLimit.lean123 lines

Original source pathPaper_IV_Verification_Closeout_v1.1.0/formalization/lean/KomorebiPaperIV/IndicatorLimit.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.AlignedExponentialRadii
6 import KomorebiPaperIV.UniformDominantSectors
7 
8 namespace Komorebi.PaperIV
9 noncomputable section
10 open Set Filter
11 open scoped Topology
12 
13 /-- The finite exponential representation gives the sharp directional bound. -/
14 theorem canonicalSignedDenominator_indicator_upper {N : ℕ} (hN : 0 < N)
15     (θ : ℝ) {r : ℝ} (hr : 0 ≤ r) :
16     ‖canonicalSignedDenominator N ((r : ℂ) * rayDirection θ)‖ ≤ Real.exp (r * signedIndicator N hN θ) := by
17   unfold canonicalSignedDenominator
18   rw [entireSigned_zero_eq_average, norm_mul, norm_inv, Complex.norm_natCast]
19   have hb (i : ℕ) (hi : i ∈ Finset.range N) :
20       ‖Complex.exp (canonicalSignedVertex N i * ((r : ℂ) * rayDirection θ))‖ ≤
21         Real.exp (r * signedIndicator N hN θ) := by
22     rw [Complex.norm_exp]
23     apply Real.exp_le_exp.mpr
24     have he : (canonicalSignedVertex N i * ((r : ℂ) * rayDirection θ)).re =
25         r * signedProjection N θ i := by
26       rw [show canonicalSignedVertex N i * ((r : ℂ) * rayDirection θ) =
27         (r : ℂ) * (canonicalSignedVertex N i * rayDirection θ) by ring, Complex.re_ofReal_mul]
28       rfl
29     rw [he]
30     exact mul_le_mul_of_nonneg_left (signedProjection_le_indicator hN (Finset.mem_range.mp hi) θ) hr
31   calc
32     _ ≤ (N : ℝ)⁻¹ * ∑ i ∈ Finset.range N, ‖Complex.exp (canonicalSignedVertex N i * ((r : ℂ) * rayDirection θ))‖ :=
33       mul_le_mul_of_nonneg_left (norm_sum_le _ _) (by positivity)
34     _ ≤ (N : ℝ)⁻¹ * ∑ _i ∈ Finset.range N, Real.exp (r * signedIndicator N hN θ) :=
35       mul_le_mul_of_nonneg_left (Finset.sum_le_sum hb) (by positivity)
36     _ = _ := by simp [hN.ne']
37 
38 theorem canonicalSignedDenominator_log_indicator_upper {N : ℕ} (hN : 2 ≤ N)
39     (θ : ℝ) {r : ℝ} (hr : 0 < r) :
40     Real.log ‖canonicalSignedDenominator N ((r : ℂ) * rayDirection θ)‖ / r ≤
41       signedIndicator N (by omega) θ := by
42   apply (div_le_iff₀ hr).mpr
43   by_cases hz : canonicalSignedDenominator N ((r : ℂ) * rayDirection θ) = 0
44   · simp only [hz, norm_zero, Real.log_zero]
45     exact mul_nonneg (signedIndicator_nonneg hN θ) hr.le
46   · have h := (Real.log_le_iff_le_exp (norm_pos_iff.mpr hz)).mpr
47       (canonicalSignedDenominator_indicator_upper (show 0 < N by omega) θ hr.le)
48     simpa only [mul_comm] using h
49 
50 theorem canonicalSignedDenominator_real_normalization (N : ℕ) (θ h r : ℝ) :
51     Complex.exp (-((h * r : ℝ) : ℂ)) * canonicalSignedDenominator N ((r : ℂ) * rayDirection θ) =
52       (N : ℂ)⁻¹ * ∑ i ∈ Finset.range N,
53         Complex.exp ((canonicalSignedVertex N i * rayDirection θ - (h : ℂ)) * (r : ℂ)) := by
54   unfold canonicalSignedDenominator
55   rw [entireSigned_zero_eq_average, mul_left_comm]
56   congr 1
57   rw [Finset.mul_sum]
58   apply Finset.sum_congr rfl
59   intro i _
60   rw [← Complex.exp_add]
61   congr 1
62   dsimp [canonicalSignedVertex]
63   push_cast
64   ring
65 
66 /-- The lower indicator sequence exists in every direction, including ties. -/
67 theorem canonicalSignedDenominator_indicator_sequence {N : ℕ} (hN : 0 < N) (θ : ℝ) :
68     ∃ r : ℕ → ℝ, Tendsto r atTop atTop ∧
69       Tendsto (fun n => Real.log ‖canonicalSignedDenominator N ((r n : ℂ) * rayDirection θ)‖ / r n)
70         atTop (𝓝 (signedIndicator N hN θ)) ∧
71       ∀ᶠ n in atTop, canonicalSignedDenominator N ((r n : ℂ) * rayDirection θ) ≠ 0 := by
72   let a : ℕ → ℂ := fun i => canonicalSignedVertex N i * rayDirection θ
73   obtain ⟨k, hk, he⟩ := (Finset.range N).exists_mem_eq_sup' ⟨0, Finset.mem_range.mpr hN⟩ (signedProjection N θ)
74   have hmax : ∀ i ∈ Finset.range N, (a i).re ≤ (a k).re :=
75     fun i hi => (signedProjection_le_indicator hN (Finset.mem_range.mp hi) θ).trans_eq he
76   have ht := finite_unit_exponential_aligned_limit hk
77     (a := a) (fun i _ => by simp [a, norm_canonicalSignedVertex, norm_rayDirection]) hmax
78   let r := alignedRadii (a k).im
79   let c : ℂ := (N : ℂ)⁻¹ * ((Finset.range N).filter (fun i => (a i).re = (a k).re)).card
80   have hcard : 0 < ((Finset.range N).filter (fun i => (a i).re = (a k).re)).card :=
81     Finset.card_pos.mpr ⟨k, Finset.mem_filter.mpr ⟨hk, rfl⟩⟩
82   have hc : c ≠ 0 := mul_ne_zero
83     (inv_ne_zero (by exact_mod_cast hN.ne')) (by exact_mod_cast hcard.ne')
84   have hnorm : Tendsto (fun n => Complex.exp (-(((a k).re * r n : ℝ) : ℂ)) *
85       canonicalSignedDenominator N ((r n : ℂ) * rayDirection θ)) atTop (𝓝 c) := by
86     simpa only [canonicalSignedDenominator_real_normalization] using! ht.const_mul (N : ℂ)⁻¹
87   refine ⟨r, alignedRadii_tendsto _, ?_, ?_⟩
88   · have hslope := log_norm_slope_of_normalized_limit (alignedRadii_tendsto _) hc hnorm
89     have he' : signedIndicator N hN θ = (a k).re := he
90     rw [he']
91     exact hslope
92   · exact (hnorm.eventually_ne hc).mono (fun n hn => (mul_ne_zero_iff.mp hn).2)
93 
94 /-- A sharp upper bound and a convergent lower sequence determine a limsup. -/
95 theorem limsup_eq_of_upper_and_sequence {f : ℝ → ℝ} {h : ℝ} {l : Filter ℝ}
96     (hu : ∀ᶠ r in l, f r ≤ h) {r : ℕ → ℝ}
97     (hr : Tendsto r atTop l) (hf : Tendsto (fun n => f (r n)) atTop (𝓝 h)) :
98     limsup f l = h := by
99   have hleast (b : ℝ) (hb : ∀ᶠ x in l, f x ≤ b) : h ≤ b :=
100     le_of_tendsto hf (hr.eventually hb)
101   exact le_antisymm (limsup_le_of_le ⟨h, hleast⟩ hu) (le_limsup_of_le ⟨h, hu⟩ hleast)
102 
103 /-- The exact indicator equality in Theorem 11.4, with no omitted tie directions. -/
104 theorem canonicalSignedDenominator_indicator {N : ℕ} (hN : 2 ≤ N) (θ : ℝ) :
105     limsup (fun r : ℝ => Real.log ‖canonicalSignedDenominator N ((r : ℂ) * rayDirection θ)‖ / r) atTop =
106       signedIndicator N (by omega) θ := by
107   obtain ⟨r, hr, hf, _⟩ := canonicalSignedDenominator_indicator_sequence (show 0 < N by omega) θ
108   exact limsup_eq_of_upper_and_sequence
109     ((eventually_gt_atTop (0 : ℝ)).mono (fun r hr => canonicalSignedDenominator_log_indicator_upper hN θ hr)) hr hf
110 
111 /-- The same indicator on the classical logarithm domain. This avoids relying
112 on Lean's totalized value of log(0) at zeros along a ray. -/
113 theorem canonicalSignedDenominator_indicator_nonzero_radii {N : ℕ} (hN : 2 ≤ N) (θ : ℝ) :
114     limsup (fun r : ℝ => Real.log ‖canonicalSignedDenominator N ((r : ℂ) * rayDirection θ)‖ / r)
115       (atTop ⊓ principal {r : ℝ | canonicalSignedDenominator N ((r : ℂ) * rayDirection θ) ≠ 0}) =
116       signedIndicator N (by omega) θ := by
117   obtain ⟨r, hr, hf, hn⟩ := canonicalSignedDenominator_indicator_sequence (show 0 < N by omega) θ
118   apply limsup_eq_of_upper_and_sequence _ (tendsto_inf.mpr ⟨hr, tendsto_principal.mpr hn⟩) hf
119   exact ((eventually_gt_atTop (0 : ℝ)).mono
120     (fun r hr => canonicalSignedDenominator_log_indicator_upper hN θ hr)).filter_mono inf_le_left
121 
122 end
123 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: 2e9c852af139b966900ac3619a9e44f2f5dced262b947558c23cc665d48b791e

Original source on GitHub

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