Komorebi Space · Lean source

CascadeLimits.lean

Declared contract recorded Coverage and evidence

The cited release explicitly reports completion of its registered formal contract, under its exact hypotheses.

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

Local imports (1)

KomorebiSpace/CascadeLimits.lean207 lines

Original source pathlean/KomorebiSpace/CascadeLimits.lean
Skip declarations and read code

Skip source text

1 import KomorebiSpace.CascadeProjections
2 import Mathlib.Analysis.Normed.Group.InfiniteSum
3 import Mathlib.Analysis.SpecificLimits.Basic
4 
5 set_option autoImplicit false
6 
7 /-!
8 # Infinite reconstruction and the persistent coarse component
9 
10 Natural-order partial sums are used unless absolute summability is explicitly
11 assumed. No unconditional `HasSum` claim is inferred merely from ordered
12 convergence. Coarse data must be lifted before their size is tested.
13 -/
14 universe u v
15 noncomputable section
16 namespace KomorebiSpace
17 namespace CoarseningCascade
18 open Filter
19 open scoped Topology
20 variable {𝕜 : Type u} [NontriviallyNormedField 𝕜]
21 variable (T : CoarseningCascade.{u,v} 𝕜)
22 
23 @[simp] theorem partial_error (x : T.Obj 0) (N : ℕ) :
24     ‖x - T.reconstructed N x‖ = ‖T.remainder N x‖ := by
25   rw [partial_apply, sub_sub_cancel]
26 
27 /-- The exact convergence criterion, with no summability assumption. -/
28 theorem partial_tendsto_iff (x : T.Obj 0) :
29     Tendsto (fun N => T.reconstructed N x) atTop (𝓝 x) ↔
30     Tendsto (fun N => T.remainder N x) atTop (𝓝 0) := by
31   constructor
32   · intro h
33     have hh := (tendsto_const_nhds (x := x)).sub h
34     simpa only [partial_apply, sub_sub_cancel, sub_self] using hh
35   · intro h
36     have hh := (tendsto_const_nhds (x := x)).sub h
37     simpa only [partial_apply, sub_zero] using hh
38 
39 /-- The finite theorem upgrades to ordered infinite reconstruction precisely
40 when its actual lifted remainder vanishes. -/
41 theorem ordered_reconstruction_iff (x : T.Obj 0) :
42     Tendsto (fun N => ∑ n ∈ Finset.range N, T.detailTerm x n) atTop (𝓝 x) ↔
43     Tendsto (fun N => T.remainder N x) atTop (𝓝 0) := by
44   simpa only [partial_eq_sum] using T.partial_tendsto_iff x
45 
46 /-- Recoverable data form a linear subspace, not necessarily the entire space. -/
47 def recoverable : Submodule 𝕜 (T.Obj 0) where
48   carrier := {x | Tendsto (fun N => T.remainder N x) atTop (𝓝 0)}
49   zero_mem' := by simpa only [Set.mem_ofPred_eq, map_zero] using (tendsto_const_nhds (x := (0 : T.Obj 0)))
50   add_mem' := by
51     intro x y hx hy
52     simpa only [Set.mem_ofPred_eq, map_add, zero_add] using hx.add hy
53   smul_mem' := by
54     intro c x hx
55     simpa only [Set.mem_ofPred_eq, map_smul, smul_zero] using (tendsto_const_nhds (x := c)).smul hx
56 
57 @[simp] theorem mem_recoverable (x : T.Obj 0) :
58     x ∈ T.recoverable ↔ Tendsto (fun N => T.remainder N x) atTop (𝓝 0) := Iff.rfl
59 
60 /-- The persistent and recoverable subspaces intersect only at zero. -/
61 theorem persistent_recoverable_zero (x : T.Obj 0)
62     (hp : x ∈ T.persistent) (hr : x ∈ T.recoverable) : x = 0 := by
63   change ∀ n, T.remainder n x = x at hp
64   have h : Tendsto (fun _ : ℕ => x) atTop (𝓝 0) := by
65     change Tendsto (fun N => T.remainder N x) atTop (𝓝 0) at hr
66     simpa only [hp] using hr
67   exact tendsto_nhds_unique tendsto_const_nhds h
68 
69 theorem zero_iff_details_on_recoverable (x : T.Obj 0) (hx : x ∈ T.recoverable) :
70     x = 0 ↔ ∀ n, T.detail x n = 0 := by
71   constructor
72   · rintro rfl; exact T.detail_zero
73   · intro h
74     exact T.persistent_recoverable_zero x ((T.persistent_iff_details_zero x).2 h) hx
75 
76 /-- All detail coordinates are injective on the recoverable subspace. -/
77 theorem details_injective_on_recoverable (x y : T.Obj 0)
78     (hx : x ∈ T.recoverable) (hy : y ∈ T.recoverable)
79     (hd : ∀ n, T.detail x n = T.detail y n) : x = y := by
80   apply sub_eq_zero.mp
81   exact T.persistent_recoverable_zero (x-y)
82     ((T.equal_details_iff_persistent_difference x y).1 hd)
83     (T.recoverable.sub_mem hx hy)
84 
85 /-- Every convergent remainder lands in the persistent coarse subspace. -/
86 theorem remainder_limit_persistent (x z : T.Obj 0)
87     (hz : Tendsto (fun N => T.remainder N x) atTop (𝓝 z)) : z ∈ T.persistent := by
88   intro m
89   have h1 : Tendsto (fun N => T.remainder m (T.remainder N x)) atTop
90       (𝓝 (T.remainder m z)) := (T.remainder m).continuous.continuousAt.tendsto.comp hz
91   have h2 : Tendsto (fun N => T.remainder m (T.remainder N x)) atTop (𝓝 z) := by
92     apply hz.congr'
93     filter_upwards [eventually_ge_atTop m] with N hN
94     exact (T.remainder_nested_left m N hN x).symm
95   exact tendsto_nhds_unique h1 h2
96 
97 /-- A convergent remainder is an explicit boundary term in infinite reconstruction. -/
98 theorem reconstruction_with_boundary (x z : T.Obj 0)
99     (hz : Tendsto (fun N => T.remainder N x) atTop (𝓝 z)) :
100     Tendsto (fun N => ∑ n ∈ Finset.range N, T.detailTerm x n) atTop (𝓝 (x-z)) ∧
101     z ∈ T.persistent := by
102   constructor
103   · have hh := (tendsto_const_nhds (x := x)).sub hz
104     simpa only [← partial_apply, partial_eq_sum] using hh
105   · exact T.remainder_limit_persistent x z hz
106 
107 /-- Absolute summability yields a boundary term; it does not by itself kill it. -/
108 theorem absolutely_summable_boundary [CompleteSpace (T.Obj 0)] (x : T.Obj 0)
109     (hs : Summable (fun n => ‖T.detailTerm x n‖)) :
110     x - ∑' n, T.detailTerm x n ∈ T.persistent := by
111   have hsum := hs.of_norm.tendsto_sum_tsum_nat
112   have hz : Tendsto (fun N => T.remainder N x) atTop
113       (𝓝 (x - ∑' n, T.detailTerm x n)) := by
114     have hh := (tendsto_const_nhds (x := x)).sub hsum
115     simpa only [← partial_eq_sum, partial_apply, sub_sub_cancel] using hh
116   exact T.remainder_limit_persistent x _ hz
117 
118 /-- Absolute reconstruction is valid once the residual boundary is excluded. -/
119 theorem tsum_reconstruction [CompleteSpace (T.Obj 0)] (x : T.Obj 0)
120     (hs : Summable (fun n => ‖T.detailTerm x n‖))
121     (hp : T.persistent = ⊥) : (∑' n, T.detailTerm x n) = x := by
122   have h := T.absolutely_summable_boundary x hs
123   rw [hp, Submodule.mem_bot] at h
124   exact (sub_eq_zero.mp h).symm
125 
126 /-- Product gain for restoration, retaining possible amplification at each level. -/
127 def liftGain (N : ℕ) : ℝ := ∏ n ∈ Finset.range N, ‖(T.splitting n).lift‖
128 
129 @[simp] theorem liftGain_zero : T.liftGain 0 = 1 := by simp [liftGain]
130 @[simp] theorem liftGain_succ (N : ℕ) :
131     T.liftGain (N+1) = T.liftGain N * ‖(T.splitting N).lift‖ := by
132   simp [liftGain, Finset.prod_range_succ]
133 
134 theorem liftGain_nonneg (N : ℕ) : 0 ≤ T.liftGain N := by
135   unfold liftGain
136   exact Finset.prod_nonneg (fun n _ => norm_nonneg _)
137 
138 theorem restore_gain_bound (N : ℕ) (y : T.Obj N) :
139     ‖T.restore N y‖ ≤ T.liftGain N * ‖y‖ := by
140   induction N with
141   | zero => simp
142   | succ N ih =>
143     rw [restore_succ, liftGain_succ]
144     calc
145       _ ≤ T.liftGain N * ‖(T.splitting N).lift y‖ := ih _
146       _ ≤ T.liftGain N * (‖(T.splitting N).lift‖ * ‖y‖) :=
147         mul_le_mul_of_nonneg_left ((T.splitting N).lift.le_opNorm y) (T.liftGain_nonneg N)
148       _ = _ := (mul_assoc _ _ _).symm
149 
150 theorem reconstruction_error_bound (x : T.Obj 0) (N : ℕ) :
151     ‖x-T.reconstructed N x‖ ≤ T.liftGain N * ‖T.level x N‖ := by
152   rw [partial_error, remainder_apply]
153   exact T.restore_gain_bound _ _
154 
155 /-- Coarse decay after multiplication by the full restoration gain is sufficient. -/
156 theorem recoverable_of_weighted_coarse_decay (x : T.Obj 0)
157     (h : Tendsto (fun N => T.liftGain N * ‖T.level x N‖) atTop (𝓝 0)) :
158     x ∈ T.recoverable := by
159   apply tendsto_zero_iff_norm_tendsto_zero.mpr
160   apply squeeze_zero (fun _ => norm_nonneg _) _ h
161   intro N
162   rw [remainder_apply]
163   exact T.restore_gain_bound _ _
164 
165 /-- Quantitative geometric criterion allowing amplification and decay together. -/
166 theorem recoverable_of_geometric_bounds (x : T.Obj 0) (B C a b : ℝ)
167     (hB : 0 ≤ B) (_hC : 0 ≤ C) (ha : 0 ≤ a) (hb : 0 ≤ b)
168     (hgap : a*b < 1)
169     (hgain : ∀ N, T.liftGain N ≤ B*a^N)
170     (hcoarse : ∀ N, ‖T.level x N‖ ≤ C*b^N) :
171     x ∈ T.recoverable ∧
172     ∀ N, ‖x-T.reconstructed N x‖ ≤ (B*C)*(a*b)^N := by
173   have hbound (N : ℕ) : T.liftGain N * ‖T.level x N‖ ≤ (B*C)*(a*b)^N := by
174     calc
175       _ ≤ (B*a^N)*(C*b^N) := mul_le_mul (hgain N) (hcoarse N)
176         (norm_nonneg _) (mul_nonneg hB (pow_nonneg ha N))
177       _ = _ := by rw [mul_pow]; ring
178   constructor
179   · apply T.recoverable_of_weighted_coarse_decay
180     apply squeeze_zero (fun N => mul_nonneg (T.liftGain_nonneg N) (norm_nonneg _)) hbound
181     simpa only [mul_zero] using
182       (tendsto_pow_atTop_nhds_zero_of_lt_one (mul_nonneg ha hb) hgap).const_mul (B*C)
183   · intro N
184     exact (T.reconstruction_error_bound x N).trans (hbound N)
185 
186 /-- Contractive lifts cannot amplify the remaining coarse term. -/
187 theorem liftGain_le_one (hJ : ∀ n, ‖(T.splitting n).lift‖ ≤ 1) (N : ℕ) :
188     T.liftGain N ≤ 1 := by
189   induction N with
190   | zero => simp
191   | succ N ih =>
192     rw [liftGain_succ]
193     exact (mul_le_mul ih (hJ N) (norm_nonneg _) (by norm_num)).trans (by norm_num)
194 
195 theorem recoverable_of_coarse_decay (hJ : ∀ n, ‖(T.splitting n).lift‖ ≤ 1)
196     (x : T.Obj 0) (h : Tendsto (fun N => ‖T.level x N‖) atTop (𝓝 0)) :
197     x ∈ T.recoverable := by
198   apply T.recoverable_of_weighted_coarse_decay
199   apply squeeze_zero (fun N => mul_nonneg (T.liftGain_nonneg N) (norm_nonneg _)) _ h
200   intro N
201   simpa only [one_mul] using
202     mul_le_mul_of_nonneg_right (T.liftGain_le_one hJ N) (norm_nonneg (T.level x N))
203 
204 
205 end CoarseningCascade
206 end KomorebiSpace
207 end

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: b68f01dbfbb73344bada748c561985a5ba57a2992839dabd37061923185c269f

Original source on GitHub

Back to Komorebi Space