Special Functions · Lean source

CoupledFormal.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.

CoupledFormal.lean466 lines

Original source pathlean/CoupledFormal.lean
Skip declarations and read code

Skip source text

1 import Mathlib.Basic.Real.Basic
2 import Mathlib.Tactic.Ring
3 import Mathlib.Tactic.Linarith
4 import Mathlib.Tactic.Positivity
5 import Mathlib.Algebra.BigOperators.Fin
6 import Lean.Elab.Tactic.Omega
7 import Mathlib.Analysis.Complex.Basic
8 import Mathlib.Analysis.SpecificLimits.Normed
9 
10 /-!
11 # Coupled special functions: recurrence, local convergence, and parameter recovery
12 
13 Source: Special Functions, Appendix F (recurrence and local coefficient bounds)
14 and Appendix G (degree-seven parameter recovery and the exceptional surfaces).
15 The coordinate maps are linked to a recursively constructed infinite sequence.
16 All parameters in the inverse theorem are positive real numbers. The local
17 convergence theorem additionally assumes that every scale is at most one.
18 
19 This module does not assert entire continuation, the differential-equation
20 identification of the sums, or the Perron growth law. The precise claim map
21 and restart point are in `formalization/Block01/`.
22 -/
23 
24 set_option autoImplicit false
25 set_option maxHeartbeats 800000
26 
27 noncomputable section
28 
29 namespace Komorebi.SpecialFunctions.Coupled
30 
31 /-- Two weighted observations and the product recover a positive first coordinate,
32 provided the coefficient discriminant is nonzero. No root-selection oracle is used. -/
33 theorem positive_pair_recovery {p k u v x y X Y : ℝ}
34     (hk : k ≠ 0) (hx : 0 < x) (hX : 0 < X)
35     (hprod : x * y = X * Y)
36     (hlin : p * x + k * y = p * X + k * Y)
37     (hquad : u * x ^ 2 + v * y ^ 2 = u * X ^ 2 + v * Y ^ 2)
38     (hD : k ^ 2 * u - p ^ 2 * v ≠ 0) : x = X ∧ y = Y := by
39   have hfirst : x = X := by
40     by_contra hn
41     have hfactor : (x - X) * (p * X - k * y) = 0 := by
42       calc
43         _ = X * ((p * x + k * y) - (p * X + k * Y)) -
44             k * (x * y - X * Y) := by ring
45         _ = 0 := by rw [hlin, hprod]; ring
46     have hc1 : p * X = k * y :=
47       sub_eq_zero.mp ((mul_eq_zero.mp hfactor).resolve_left (sub_ne_zero.mpr hn))
48     have hc2 : p * x = k * Y := by linarith only [hlin, hc1]
49     have hc1sq := congrArg (fun t : ℝ => t ^ 2) hc1
50     have hc2sq := congrArg (fun t : ℝ => t ^ 2) hc2
51     have hs : k ^ 2 * (y ^ 2 - Y ^ 2) + p ^ 2 * (x ^ 2 - X ^ 2) = 0 := by
52       nlinarith only [hc1sq, hc2sq]
53     have hz : (k ^ 2 * u - p ^ 2 * v) * (x ^ 2 - X ^ 2) = 0 := by
54       calc
55         _ = k ^ 2 * ((u * x ^ 2 + v * y ^ 2) - (u * X ^ 2 + v * Y ^ 2)) -
56             v * (k ^ 2 * (y ^ 2 - Y ^ 2) + p ^ 2 * (x ^ 2 - X ^ 2)) := by ring
57         _ = 0 := by rw [hquad, hs]; ring
58     have hsq : x ^ 2 = X ^ 2 :=
59       sub_eq_zero.mp ((mul_eq_zero.mp hz).resolve_left hD)
60     have hdiff : (x - X) * (x + X) = 0 := by nlinarith only [hsq]
61     exact hn (sub_eq_zero.mp ((mul_eq_zero.mp hdiff).resolve_right (ne_of_gt (add_pos hx hX))))
62   refine ⟨hfirst, ?_⟩
63   apply mul_left_cancel₀ hk
64   rw [hfirst] at hlin
65   linarith only [hlin]
66 
67 structure Scales where
68   q : ℝ
69   r : ℝ
70   a : ℝ
71   b : ℝ
72 
73 namespace Scales
74 
75 def positive (s : Scales) : Prop := 0 < s.q ∧ 0 < s.r ∧ 0 < s.a ∧ 0 < s.b
76 
77 def p (s : Scales) : ℝ := s.q * s.r
78 
79 def k (s : Scales) : ℝ := s.a * s.b
80 
81 def u1 (s : Scales) : ℝ := s.p / 3
82 
83 def v1 (s : Scales) : ℝ := s.k / 3
84 
85 def u2 (s : Scales) : ℝ := s.p / 15 * (s.p * s.q ^ 2 + s.k * s.r ^ 2)
86 
87 def v2 (s : Scales) : ℝ := s.k / 15 * (s.p * s.a ^ 2 + s.k * s.b ^ 2)
88 
89 def u3 (s : Scales) : ℝ := s.p / 7 *
90   (s.q ^ 4 * s.u2 + s.p ^ 2 * s.u1 * s.v1 + s.r ^ 4 * s.v2)
91 
92 def v3 (s : Scales) : ℝ := s.k / 7 *
93   (s.a ^ 4 * s.u2 + s.k ^ 2 * s.u1 * s.v1 + s.b ^ 4 * s.v2)
94 
95 def defect (s : Scales) : ℝ := s.k ^ 2 * s.u2 - s.p ^ 2 * s.v2
96 
97 def sameJet (s t : Scales) : Prop :=
98   s.u1 = t.u1 ∧ s.v1 = t.v1 ∧ s.u2 = t.u2 ∧ s.v2 = t.v2 ∧ s.u3 = t.u3 ∧ s.v3 = t.v3
99 
100 theorem defect_factor (s : Scales) :
101     s.defect = (s.p * s.k * s.a * s.r / 15) *
102       (s.q ^ 2 - s.b ^ 2) * (s.q * s.b - s.a * s.r) := by
103   unfold defect u2 v2 p k
104   ring
105 
106 theorem defect_eq_zero_iff (s : Scales) (h : s.positive) :
107     s.defect = 0 ↔ s.q = s.b ∨ s.q * s.b = s.a * s.r := by
108   rcases h with ⟨hq, hr, ha, hb⟩
109   have hpk : s.p * s.k * s.a * s.r / 15 ≠ 0 := by
110     unfold p k
111     positivity
112   rw [defect_factor]
113   rw [mul_eq_zero, mul_eq_zero]
114   simp only [hpk, false_or, sub_eq_zero]
115   have heq : s.q ^ 2 = s.b ^ 2 ↔ s.q = s.b := by
116     constructor
117     · intro hs
118       have ht : (s.q - s.b) * (s.q + s.b) = 0 := by nlinarith only [hs]
119       exact sub_eq_zero.mp ((mul_eq_zero.mp ht).resolve_right (ne_of_gt (add_pos hq hb)))
120     · intro hs; rw [hs]
121   rw [heq]
122 
123 
124 /-- Equality of positive squares recovers the signed scale, not just its magnitude. -/
125 theorem positive_square_injective {x y : ℝ} (hx : 0 < x) (hy : 0 < y)
126     (h : x ^ 2 = y ^ 2) : x = y := by
127   have hf : (x - y) * (x + y) = 0 := by nlinarith only [h]
128   exact sub_eq_zero.mp ((mul_eq_zero.mp hf).resolve_right (ne_of_gt (add_pos hx hy)))
129 
130 /-- The algebraic inverse theorem corresponding to Appendix G.2.
131 This proves injectivity of the six-coefficient map on positive scales off D=0. -/
132 theorem seven_jet_injective {s t : Scales} (hs : s.positive) (ht : t.positive)
133     (hD : s.defect ≠ 0) (hj : s.sameJet t) : s = t := by
134   rcases hs with ⟨hq, hr, ha, hb⟩
135   rcases ht with ⟨tq, tr, ta, tb⟩
136   rcases hj with ⟨hu1, hv1, hu2, hv2, hu3, hv3⟩
137   have hp : s.p = t.p := by unfold u1 at hu1; linarith only [hu1]
138   have hk : s.k = t.k := by unfold v1 at hv1; linarith only [hv1]
139   have hp0 : s.p ≠ 0 := ne_of_gt (mul_pos hq hr)
140   have hk0 : s.k ≠ 0 := ne_of_gt (mul_pos ha hb)
141   have hl1 : s.p * s.q ^ 2 + s.k * s.r ^ 2 = s.p * t.q ^ 2 + s.k * t.r ^ 2 := by
142     have h := hu2
143     simp only [u2, ← hp, ← hk] at h
144     exact mul_left_cancel₀ (div_ne_zero hp0 (by norm_num)) h
145   have hl2 : s.p * s.a ^ 2 + s.k * s.b ^ 2 = s.p * t.a ^ 2 + s.k * t.b ^ 2 := by
146     have h := hv2
147     simp only [v2, ← hp, ← hk] at h
148     exact mul_left_cancel₀ (div_ne_zero hk0 (by norm_num)) h
149   have hquad1 : s.u2 * (s.q ^ 2) ^ 2 + s.v2 * (s.r ^ 2) ^ 2 =
150       s.u2 * (t.q ^ 2) ^ 2 + s.v2 * (t.r ^ 2) ^ 2 := by
151     have h := hu3
152     simp only [u3, ← hp, ← hu1, ← hv1, ← hu2, ← hv2] at h
153     have hc := mul_left_cancel₀ (div_ne_zero hp0 (by norm_num : (7 : ℝ) ≠ 0)) h
154     nlinarith only [hc]
155   have hquad2 : s.u2 * (s.a ^ 2) ^ 2 + s.v2 * (s.b ^ 2) ^ 2 =
156       s.u2 * (t.a ^ 2) ^ 2 + s.v2 * (t.b ^ 2) ^ 2 := by
157     have h := hv3
158     simp only [v3, ← hk, ← hu1, ← hv1, ← hu2, ← hv2] at h
159     have hc := mul_left_cancel₀ (div_ne_zero hk0 (by norm_num : (7 : ℝ) ≠ 0)) h
160     nlinarith only [hc]
161   have hprod1 : s.q ^ 2 * s.r ^ 2 = t.q ^ 2 * t.r ^ 2 := by
162     have h := congrArg (fun x : ℝ => x ^ 2) hp
163     unfold p at h
164     nlinarith only [h]
165   have hprod2 : s.a ^ 2 * s.b ^ 2 = t.a ^ 2 * t.b ^ 2 := by
166     have h := congrArg (fun x : ℝ => x ^ 2) hk
167     unfold k at h
168     nlinarith only [h]
169   have hrow1 := positive_pair_recovery hk0 (sq_pos_of_pos hq) (sq_pos_of_pos tq)
170     hprod1 hl1 hquad1 hD
171   have hrow2 := positive_pair_recovery hk0 (sq_pos_of_pos ha) (sq_pos_of_pos ta)
172     hprod2 hl2 hquad2 hD
173   have hqeq := positive_square_injective hq tq hrow1.1
174   have hreq := positive_square_injective hr tr hrow1.2
175   have haeq := positive_square_injective ha ta hrow2.1
176   have hbeq := positive_square_injective hb tb hrow2.2
177   cases s
178   cases t
179   simp_all
180 
181 
182 /-- The next odd coefficient: n indexes the previously available coefficients. -/
183 def nextCoefficient (x y : ℝ) (f : ℕ → ℝ × ℝ) (n : ℕ) : ℝ :=
184   (∑ i : Fin (n + 1), x ^ (2 * i.val + 1) * y ^ (2 * (n - i.val) + 1) *
185     (f i.val).1 * (f (n - i.val)).2) / (2 * (n : ℝ) + 3)
186 
187 /-- The simultaneous, uniquely determined infinite coefficient sequence.
188 The n-th pair multiplies z^(2*n+1). No convergence is included in this definition. -/
189 def coefficients (s : Scales) : ℕ → ℝ × ℝ
190   | 0 => (1, 1)
191   | n + 1 =>
192     ((∑ i : Fin (n + 1), s.q ^ (2 * i.val + 1) * s.r ^ (2 * (n - i.val) + 1) *
193       (coefficients s i.val).1 * (coefficients s (n - i.val)).2) / (2 * (n : ℝ) + 3),
194      (∑ i : Fin (n + 1), s.a ^ (2 * i.val + 1) * s.b ^ (2 * (n - i.val) + 1) *
195       (coefficients s i.val).1 * (coefficients s (n - i.val)).2) / (2 * (n : ℝ) + 3))
196 termination_by n => n
197 decreasing_by all_goals omega
198 
199 /-- Recurrence contract. It does not assume a particular formula for later coefficients. -/
200 def IsCoefficientSolution (s : Scales) (f : ℕ → ℝ × ℝ) : Prop :=
201   f 0 = (1, 1) ∧ ∀ n, f (n + 1) =
202     (nextCoefficient s.q s.r f n, nextCoefficient s.a s.b f n)
203 
204 theorem coefficients_solution (s : Scales) : s.IsCoefficientSolution s.coefficients := by
205   constructor
206   · rw [coefficients]
207   · intro n
208     rw [coefficients]
209     rfl
210 
211 theorem nextCoefficient_congr {x y : ℝ} {f g : ℕ → ℝ × ℝ} {n : ℕ}
212     (h : ∀ j, j ≤ n → f j = g j) : nextCoefficient x y f n = nextCoefficient x y g n := by
213   unfold nextCoefficient
214   congr 1
215   apply Finset.sum_congr rfl
216   intro i _
217   rw [h i.val (by omega), h (n - i.val) (Nat.sub_le _ _)]
218 
219 theorem coefficient_solution_unique {s : Scales} {f g : ℕ → ℝ × ℝ}
220     (hf : s.IsCoefficientSolution f) (hg : s.IsCoefficientSolution g) : f = g := by
221   funext n
222   induction n using Nat.strong_induction_on with
223   | h n ih =>
224     cases n with
225     | zero => exact hf.1.trans hg.1.symm
226     | succ n =>
227       rw [hf.2, hg.2]
228       have hl : ∀ j, j ≤ n → f j = g j := fun j hj => ih j (by omega)
229       rw [nextCoefficient_congr hl, nextCoefficient_congr hl]
230 
231 theorem coefficient_solution_exists_unique (s : Scales) : ∃! f, s.IsCoefficientSolution f := by
232   refine ⟨s.coefficients, s.coefficients_solution, ?_⟩
233   intro g hg
234   exact coefficient_solution_unique hg s.coefficients_solution
235 
236 theorem coefficients_zero (s : Scales) : s.coefficients 0 = (1, 1) := by rw [coefficients]
237 
238 theorem coefficients_one (s : Scales) : s.coefficients 1 = (s.u1, s.v1) := by
239   simp [coefficients, u1, v1, p, k]
240 
241 theorem coefficients_two (s : Scales) : s.coefficients 2 = (s.u2, s.v2) := by
242   rw [s.coefficients_solution.2]
243   simp [nextCoefficient, Fin.sum_univ_succ, coefficients_zero, coefficients_one,
244     u1, v1, u2, v2, p, k]
245   constructor <;> ring
246 
247 theorem coefficients_three (s : Scales) : s.coefficients 3 = (s.u3, s.v3) := by
248   rw [s.coefficients_solution.2]
249   simp [nextCoefficient, Fin.sum_univ_succ, coefficients_zero, coefficients_one, coefficients_two,
250     u1, v1, u2, v2, u3, v3, p, k]
251   constructor <;> ring
252 
253 theorem nextCoefficient_positive {x y : ℝ} {f : ℕ → ℝ × ℝ} {n : ℕ}
254     (hx : 0 < x) (hy : 0 < y)
255     (hf : ∀ j, j ≤ n → 0 < (f j).1 ∧ 0 < (f j).2) :
256     0 < nextCoefficient x y f n := by
257   unfold nextCoefficient
258   apply div_pos
259   · apply Finset.sum_pos
260     · intro i _
261       have hfi := (hf i.val (by omega)).1
262       have hfj := (hf (n - i.val) (Nat.sub_le _ _)).2
263       positivity
264     · exact Finset.univ_nonempty
265   · positivity
266 
267 theorem coefficients_positive (s : Scales) (hs : s.positive) (n : ℕ) :
268     0 < (s.coefficients n).1 ∧ 0 < (s.coefficients n).2 := by
269   induction n using Nat.strong_induction_on with
270   | h n ih =>
271     cases n with
272     | zero => rw [coefficients_zero]; norm_num
273     | succ n =>
274       rw [s.coefficients_solution.2]
275       have hl : ∀ j, j ≤ n → 0 < (s.coefficients j).1 ∧ 0 < (s.coefficients j).2 :=
276         fun j hj => ih j (by omega)
277       exact ⟨nextCoefficient_positive hs.1 hs.2.1 hl,
278         nextCoefficient_positive hs.2.2.1 hs.2.2.2 hl⟩
279 
280 
281 /-- Uniform coefficient bound for one recurrence step. -/
282 theorem nextCoefficient_le_geometric {x y : ℝ} {f : ℕ → ℝ × ℝ} {n : ℕ}
283     (hx : 0 < x) (hy : 0 < y) (hx1 : x ≤ 1) (hy1 : y ≤ 1)
284     (hf : ∀ j, j ≤ n → 0 ≤ (f j).1 ∧ (f j).1 ≤ (1 / 2 : ℝ) ^ j ∧
285       0 ≤ (f j).2 ∧ (f j).2 ≤ (1 / 2 : ℝ) ^ j) :
286     nextCoefficient x y f n ≤ (1 / 2 : ℝ) ^ (n + 1) := by
287   have hterm (i : Fin (n + 1)) :
288       x ^ (2 * i.val + 1) * y ^ (2 * (n - i.val) + 1) *
289         (f i.val).1 * (f (n - i.val)).2 ≤ (1 / 2 : ℝ) ^ n := by
290     have hi : i.val ≤ n := by omega
291     have hj : n - i.val ≤ n := Nat.sub_le _ _
292     have hp : x ^ (2 * i.val + 1) * y ^ (2 * (n - i.val) + 1) ≤ 1 := by
293       calc
294         _ ≤ (1 : ℝ) * 1 := mul_le_mul (pow_le_one₀ hx.le hx1)
295           (pow_le_one₀ hy.le hy1) (by positivity) (by norm_num)
296         _ = 1 := by norm_num
297     have hc : (f i.val).1 * (f (n - i.val)).2 ≤
298         (1 / 2 : ℝ) ^ i.val * (1 / 2 : ℝ) ^ (n - i.val) :=
299       mul_le_mul (hf i.val hi).2.1 (hf (n - i.val) hj).2.2.2
300         (hf (n - i.val) hj).2.2.1 (by positivity)
301     calc
302       _ = (x ^ (2 * i.val + 1) * y ^ (2 * (n - i.val) + 1)) *
303           ((f i.val).1 * (f (n - i.val)).2) := by ring
304       _ ≤ 1 * ((1 / 2 : ℝ) ^ i.val * (1 / 2 : ℝ) ^ (n - i.val)) :=
305         mul_le_mul hp hc (mul_nonneg (hf i.val hi).1 (hf (n - i.val) hj).2.2.1)
306           (by norm_num)
307       _ = (1 / 2 : ℝ) ^ n := by rw [one_mul, ← pow_add, Nat.add_sub_of_le hi]
308   have hsum : (∑ i : Fin (n + 1), x ^ (2 * i.val + 1) * y ^ (2 * (n - i.val) + 1) *
309       (f i.val).1 * (f (n - i.val)).2) ≤ ((n : ℝ) + 1) * (1 / 2 : ℝ) ^ n := by
310     calc
311       _ ≤ ∑ _i : Fin (n + 1), (1 / 2 : ℝ) ^ n :=
312         Finset.sum_le_sum (fun i _ => hterm i)
313       _ = ((n : ℝ) + 1) * (1 / 2 : ℝ) ^ n := by simp
314   unfold nextCoefficient
315   apply (div_le_iff₀ (by positivity : (0 : ℝ) < 2 * (n : ℝ) + 3)).2
316   rw [pow_succ]
317   have hnonneg : 0 ≤ (1 / 2 : ℝ) ^ n := by positivity
318   nlinarith only [hsum, hnonneg]
319 
320 /-- Both coefficient sequences have the common geometric majorant 2^(-n).
321 This is a coefficient estimate, not an entire-function assertion. -/
322 theorem coefficients_le_geometric (s : Scales) (hs : s.positive)
323     (hsmall : s.q ≤ 1 ∧ s.r ≤ 1 ∧ s.a ≤ 1 ∧ s.b ≤ 1) (n : ℕ) :
324     (s.coefficients n).1 ≤ (1 / 2 : ℝ) ^ n ∧
325       (s.coefficients n).2 ≤ (1 / 2 : ℝ) ^ n := by
326   induction n using Nat.strong_induction_on with
327   | h n ih =>
328     cases n with
329     | zero => rw [coefficients_zero]; norm_num
330     | succ n =>
331       have hl : ∀ j, j ≤ n → 0 ≤ (s.coefficients j).1 ∧
332           (s.coefficients j).1 ≤ (1 / 2 : ℝ) ^ j ∧
333           0 ≤ (s.coefficients j).2 ∧ (s.coefficients j).2 ≤ (1 / 2 : ℝ) ^ j := by
334         intro j hj
335         exact ⟨(s.coefficients_positive hs j).1.le, (ih j (by omega)).1,
336           (s.coefficients_positive hs j).2.le, (ih j (by omega)).2⟩
337       rw [s.coefficients_solution.2]
338       exact ⟨nextCoefficient_le_geometric hs.1 hs.2.1 hsmall.1 hsmall.2.1 hl,
339         nextCoefficient_le_geometric hs.2.2.1 hs.2.2.2 hsmall.2.2.1 hsmall.2.2.2 hl⟩
340 
341 
342 /-- The geometric bound controls the actual complex odd-series terms. -/
343 theorem odd_series_norm_bound {c : ℕ → ℝ}
344     (hc : ∀ n, 0 ≤ c n ∧ c n ≤ (1 / 2 : ℝ) ^ n) (z : ℂ) (n : ℕ) :
345     ‖(c n : ℂ) * z ^ (2 * n + 1)‖ ≤ ‖z‖ * (‖z‖ ^ 2 / 2) ^ n := by
346   rw [norm_mul, Complex.norm_of_nonneg (hc n).1, norm_pow]
347   calc
348     _ ≤ (1 / 2 : ℝ) ^ n * ‖z‖ ^ (2 * n + 1) :=
349       mul_le_mul_of_nonneg_right (hc n).2 (by positivity)
350     _ = ‖z‖ * (‖z‖ ^ 2 / 2) ^ n := by
351       simp only [pow_add, pow_one, pow_mul, div_pow, one_pow]
352       ring
353 
354 /-- Absolute convergence on the open disk norm(z)^2 < 2. -/
355 theorem odd_series_norm_summable {c : ℕ → ℝ}
356     (hc : ∀ n, 0 ≤ c n ∧ c n ≤ (1 / 2 : ℝ) ^ n)
357     (z : ℂ) (hz : ‖z‖ ^ 2 < 2) :
358     Summable (fun n => ‖(c n : ℂ) * z ^ (2 * n + 1)‖) := by
359   have hr0 : 0 ≤ ‖z‖ ^ 2 / 2 := by positivity
360   have hr1 : ‖z‖ ^ 2 / 2 < 1 := by linarith only [hz]
361   have hg := (summable_geometric_of_lt_one hr0 hr1).mul_left ‖z‖
362   exact Summable.of_nonneg_of_le (fun n => norm_nonneg _) (odd_series_norm_bound hc z) hg
363 
364 theorem odd_series_summable {c : ℕ → ℝ}
365     (hc : ∀ n, 0 ≤ c n ∧ c n ≤ (1 / 2 : ℝ) ^ n)
366     (z : ℂ) (hz : ‖z‖ ^ 2 < 2) :
367     Summable (fun n => (c n : ℂ) * z ^ (2 * n + 1)) :=
368   (odd_series_norm_summable hc z hz).of_norm
369 
370 /-- Both recurrence series converge absolutely on the stated disk.
371 This does not yet assert differentiability or continuation to the entire plane. -/
372 theorem coefficient_series_absolutely_convergent (s : Scales) (hs : s.positive)
373     (hsmall : s.q ≤ 1 ∧ s.r ≤ 1 ∧ s.a ≤ 1 ∧ s.b ≤ 1)
374     (z : ℂ) (hz : ‖z‖ ^ 2 < 2) :
375     Summable (fun n => ‖((s.coefficients n).1 : ℂ) * z ^ (2 * n + 1)‖) ∧
376     Summable (fun n => ‖((s.coefficients n).2 : ℂ) * z ^ (2 * n + 1)‖) := by
377   constructor
378   · apply odd_series_norm_summable _ z hz
379     intro n
380     exact ⟨(s.coefficients_positive hs n).1.le, (s.coefficients_le_geometric hs hsmall n).1⟩
381   · apply odd_series_norm_summable _ z hz
382     intro n
383     exact ⟨(s.coefficients_positive hs n).2.le, (s.coefficients_le_geometric hs hsmall n).2⟩
384 
385 
386 /-- An explicit certified truncation bound, beginning at coefficient index N. -/
387 theorem odd_series_tail_bound {c : ℕ → ℝ}
388     (hc : ∀ n, 0 ≤ c n ∧ c n ≤ (1 / 2 : ℝ) ^ n)
389     (z : ℂ) (hz : ‖z‖ ^ 2 < 2) (N : ℕ) :
390     ‖∑' n, (c (n + N) : ℂ) * z ^ (2 * (n + N) + 1)‖ ≤
391       ‖z‖ * (‖z‖ ^ 2 / 2) ^ N / (1 - ‖z‖ ^ 2 / 2) := by
392   let r : ℝ := ‖z‖ ^ 2 / 2
393   have hr0 : 0 ≤ r := by dsimp [r]; positivity
394   have hr1 : r < 1 := by dsimp [r]; linarith only [hz]
395   have hg : HasSum (fun n : ℕ => (‖z‖ * r ^ N) * r ^ n)
396       (‖z‖ * r ^ N / (1 - r)) := by
397     simpa only [div_eq_mul_inv] using
398       (hasSum_geometric_of_lt_one hr0 hr1).mul_left (‖z‖ * r ^ N)
399   have hbound (n : ℕ) : ‖(c (n + N) : ℂ) * z ^ (2 * (n + N) + 1)‖ ≤
400       (‖z‖ * r ^ N) * r ^ n := by
401     calc
402       _ ≤ ‖z‖ * r ^ (n + N) := odd_series_norm_bound hc z (n + N)
403       _ = _ := by rw [pow_add]; ring
404   have hf := Summable.of_norm_bounded hg.summable hbound
405   exact hf.hasSum.norm_le_of_bounded hg hbound
406 
407 /-- The explicit six-coordinate map is the actual jet of the infinite recurrence. -/
408 theorem sameJet_of_coefficients_eq {s t : Scales}
409     (h : ∀ n, 1 ≤ n → n ≤ 3 → s.coefficients n = t.coefficients n) : s.sameJet t := by
410   have h1 := h 1 (by omega) (by omega)
411   have h2 := h 2 (by omega) (by omega)
412   have h3 := h 3 (by omega) (by omega)
413   rw [coefficients_one, coefficients_one, Prod.mk.injEq] at h1
414   rw [coefficients_two, coefficients_two, Prod.mk.injEq] at h2
415   rw [coefficients_three, coefficients_three, Prod.mk.injEq] at h3
416   exact ⟨h1.1, h1.2, h2.1, h2.2, h3.1, h3.2⟩
417 
418 /-- Parameter recovery directly from finite observations of the recurrence. -/
419 theorem parameters_of_jet_through_degree_seven {s t : Scales} (hs : s.positive) (ht : t.positive)
420     (hD : s.defect ≠ 0)
421     (h : ∀ n, 1 ≤ n → n ≤ 3 → s.coefficients n = t.coefficients n) : s = t :=
422   seven_jet_injective hs ht hD (sameJet_of_coefficients_eq h)
423 
424 /-- Generic injectivity of the full formal coefficient sequence. -/
425 theorem parameters_of_formal_pair_eq {s t : Scales} (hs : s.positive) (ht : t.positive)
426     (hD : s.defect ≠ 0) (h : s.coefficients = t.coefficients) : s = t := by
427   apply parameters_of_jet_through_degree_seven hs ht hD
428   intro n _ _
429   exact congrFun h n
430 
431 
432 /-- The nondegenerate rational example used in Appendix G. -/
433 def workedScales : Scales := ⟨1/5, 2/5, 3/5, 7/10⟩
434 
435 theorem workedScales_positive : workedScales.positive := by
436   norm_num [workedScales, positive]
437 
438 theorem workedScales_defect : workedScales.defect = 189 / 7812500 := by
439   norm_num [workedScales, defect, u2, v2, p, k]
440 
441 theorem workedScales_recoverable {s : Scales} (hs : s.positive)
442     (h : workedScales.sameJet s) : s = workedScales := by
443   have hD : workedScales.defect ≠ 0 := by rw [workedScales_defect]; norm_num
444   exact (seven_jet_injective workedScales_positive hs hD h).symm
445 
446 /-- A genuine boundary collision demonstrates why the nonzero-defect guard matters. -/
447 def boundaryLeft : Scales := ⟨1/4, 1/2, 1/4, 1/2⟩
448 
449 def boundaryRight : Scales := ⟨1/2, 1/4, 1/2, 1/4⟩
450 
451 theorem boundary_collision : boundaryLeft.positive ∧ boundaryRight.positive ∧
452     boundaryLeft.defect = 0 ∧ boundaryLeft.sameJet boundaryRight ∧ boundaryLeft ≠ boundaryRight := by
453   constructor
454   · norm_num [boundaryLeft, positive]
455   constructor
456   · norm_num [boundaryRight, positive]
457   constructor
458   · norm_num [boundaryLeft, defect, u2, v2, p, k]
459   constructor
460   · norm_num [sameJet, boundaryLeft, boundaryRight, u1, v1, u2, v2, u3, v3, p, k]
461   · intro h
462     have hq := congrArg Scales.q h
463     norm_num [boundaryLeft, boundaryRight] at hq
464 
465 end Scales
466 end Komorebi.SpecialFunctions.Coupled

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: 18ca2a8c463d83c9402bab3f2c312fd84e1a63fdb21873d669f6d2d0cc4d6c87

Original source on GitHub

Back to Special Functions