Paper II · Lean source

NestedRefinement.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)

KomorebiVerification/PaperII/NestedRefinement.lean682 lines

Original source pathformal/current/KomorebiVerification/PaperII/NestedRefinement.lean
Skip declarations and read code

Skip source text

1 import KomorebiVerification.ExactCoordinates
2 
3 /-!
4 # Nested refinement of exact projector coordinates
5 
6 Author: Komorebi P.
7 
8 This module formalizes the algebraic nested-refinement results of Paper II.
9 A refinement consists of a surjective parent map together with exact recovery
10 of every coarse projector as the finite sum of its fine children.  The file
11 proves the two absorption orders, canonical reconstruction and uniqueness,
12 transitivity, exact cross-level range coordinates, and refinement of transfer
13 blocks.
14 -/
15 
16 set_option autoImplicit false
17 
18 namespace Komorebi.PaperII.NestedRefinement
19 
20 open Komorebi.Foundation
21 open Komorebi.Foundation.LinearProjectorFamily
22 
23 universe u v w x y z
24 
25 variable {R : Type u} {M : Type v}
26 variable {ι : Type w} {κ : Type x} {τ : Type y}
27 variable [Semiring R] [AddCommMonoid M] [Module R M]
28 variable [Fintype ι] [Fintype κ] [Fintype τ]
29 
30 /-! ## Refinement data -/
31 
32 /-- The finite set of fine indices having the specified coarse parent. -/
33 noncomputable def children (parent : κ → ι) (a : ι) : Finset κ := by
34   classical
35   exact Finset.univ.filter (fun b => parent b = a)
36 
37 omit [Fintype ι] in
38 @[simp] theorem mem_children (parent : κ → ι) (a : ι) (b : κ) :
39     b ∈ children parent a ↔ parent b = a := by
40   classical
41   simp [children]
42 
43 /--
44 `fine` refines `coarse` along `parent` when `parent` is surjective and every
45 coarse projector is exactly the sum of the fine projectors over its fibre.
46 -/
47 structure Refines
48     (coarse : LinearProjectorFamily R M ι)
49     (fine : LinearProjectorFamily R M κ)
50     (parent : κ → ι) : Prop where
51   surjective : Function.Surjective parent
52   coarse_eq_sum_children :
53     ∀ a, coarse.proj a = ∑ b ∈ children parent a, fine.proj b
54 
55 /-! ## Generic finite-packet uniqueness -/
56 
57 /--
58 For any finite collection of mutually orthogonal projector ranges, applying the
59 corresponding projector recovers its summand.  No parent map, surjectivity, or
60 coarse-projector reconstruction is needed.
61 -/
62 theorem finitePacket_decomposition_unique
63     (P : LinearProjectorFamily R M κ) (s : Finset κ) (x : M)
64     (packets : κ → M)
65     (hrange : ∀ b ∈ s, packets b ∈ LinearMap.range (P.proj b))
66     (hsum : ∑ b ∈ s, packets b = x) :
67     ∀ b ∈ s, packets b = P.proj b x := by
68   classical
69   intro b hb
70   have hself : P.proj b (packets b) = packets b := by
71     rcases hrange b hb with ⟨y, hy⟩
72     rw [← hy]
73     exact P.idempotent b y
74   have hproject : P.proj b (∑ j ∈ s, packets j) = packets b := by
75     rw [map_sum]
76     calc
77       (∑ j ∈ s, P.proj b (packets j)) = P.proj b (packets b) := by
78         apply Finset.sum_eq_single_of_mem b hb
79         intro j hj hjb
80         rcases hrange j hj with ⟨y, hy⟩
81         rw [← hy]
82         exact P.orthogonal hjb.symm y
83       _ = packets b := hself
84   calc
85     packets b = P.proj b (∑ j ∈ s, packets j) := hproject.symm
86     _ = P.proj b x := congrArg (P.proj b) hsum
87 
88 /-- Two finite decompositions into the same orthogonal packet ranges agree. -/
89 theorem finitePacket_decomposition_ext
90     (P : LinearProjectorFamily R M κ) (s : Finset κ)
91     (packets packets' : κ → M)
92     (hrange : ∀ b ∈ s, packets b ∈ LinearMap.range (P.proj b))
93     (hrange' : ∀ b ∈ s, packets' b ∈ LinearMap.range (P.proj b))
94     (hsum : ∑ b ∈ s, packets b = ∑ b ∈ s, packets' b) :
95     ∀ b ∈ s, packets b = packets' b := by
96   intro b hb
97   calc
98     packets b = P.proj b (∑ j ∈ s, packets j) :=
99       finitePacket_decomposition_unique P s _ packets hrange rfl b hb
100     _ = P.proj b (∑ j ∈ s, packets' j) := congrArg (P.proj b) hsum
101     _ = packets' b :=
102       (finitePacket_decomposition_unique P s _ packets' hrange' rfl b hb).symm
103 
104 namespace Refines
105 
106 variable {coarse : LinearProjectorFamily R M ι}
107 variable {fine : LinearProjectorFamily R M κ}
108 variable {parent : κ → ι}
109 
110 /-- Pointwise form of the defining coarse-projector reconstruction. -/
111 theorem coarse_proj_apply_eq_sum_children
112     (h : Refines coarse fine parent) (a : ι) (x : M) :
113     coarse.proj a x = ∑ b ∈ children parent a, fine.proj b x := by
114   rw [h.coarse_eq_sum_children a]
115   simp only [LinearMap.sum_apply]
116 
117 /-! ## Absorption in both orders -/
118 
119 /-- A coarse projector absorbs a fine child on the left. -/
120 theorem coarse_comp_fine_eq_self
121     (h : Refines coarse fine parent) {a : ι} {b : κ}
122     (hb : parent b = a) :
123     (coarse.proj a).comp (fine.proj b) = fine.proj b := by
124   classical
125   ext x
126   simp only [LinearMap.comp_apply]
127   rw [h.coarse_proj_apply_eq_sum_children]
128   have hbmem : b ∈ children parent a := (mem_children parent a b).2 hb
129   calc
130     (∑ j ∈ children parent a, fine.proj j (fine.proj b x)) =
131         fine.proj b (fine.proj b x) := by
132           apply Finset.sum_eq_single_of_mem b hbmem
133           intro j _ hjb
134           exact fine.orthogonal hjb x
135     _ = fine.proj b x := fine.idempotent b x
136 
137 /-- A non-parent coarse projector annihilates a fine packet on the left. -/
138 theorem coarse_comp_fine_eq_zero
139     (h : Refines coarse fine parent) {a : ι} {b : κ}
140     (hb : parent b ≠ a) :
141     (coarse.proj a).comp (fine.proj b) = 0 := by
142   classical
143   ext x
144   simp only [LinearMap.comp_apply, LinearMap.zero_apply]
145   rw [h.coarse_proj_apply_eq_sum_children]
146   apply Finset.sum_eq_zero
147   intro j hj
148   have hjparent : parent j = a := (mem_children parent a j).1 hj
149   have hjb : j ≠ b := by
150     intro hjb
151     subst j
152     exact hb hjparent
153   exact fine.orthogonal hjb x
154 
155 /-- A fine child absorbs its coarse parent on the right. -/
156 theorem fine_comp_coarse_eq_self
157     (h : Refines coarse fine parent) {a : ι} {b : κ}
158     (hb : parent b = a) :
159     (fine.proj b).comp (coarse.proj a) = fine.proj b := by
160   classical
161   ext x
162   simp only [LinearMap.comp_apply]
163   rw [h.coarse_proj_apply_eq_sum_children, map_sum]
164   have hbmem : b ∈ children parent a := (mem_children parent a b).2 hb
165   calc
166     (∑ j ∈ children parent a, fine.proj b (fine.proj j x)) =
167         fine.proj b (fine.proj b x) := by
168           apply Finset.sum_eq_single_of_mem b hbmem
169           intro j _ hjb
170           exact fine.orthogonal hjb.symm x
171     _ = fine.proj b x := fine.idempotent b x
172 
173 /-- A fine projector annihilates a non-parent coarse packet on the right. -/
174 theorem fine_comp_coarse_eq_zero
175     (h : Refines coarse fine parent) {a : ι} {b : κ}
176     (hb : parent b ≠ a) :
177     (fine.proj b).comp (coarse.proj a) = 0 := by
178   classical
179   ext x
180   simp only [LinearMap.comp_apply, LinearMap.zero_apply]
181   rw [h.coarse_proj_apply_eq_sum_children, map_sum]
182   apply Finset.sum_eq_zero
183   intro j hj
184   have hjparent : parent j = a := (mem_children parent a j).1 hj
185   have hbj : b ≠ j := by
186     intro hbj
187     subst j
188     exact hb hjparent
189   exact fine.orthogonal hbj x
190 
191 /-- Pointwise left absorption by the parent. -/
192 theorem coarse_fine_apply_eq_self
193     (h : Refines coarse fine parent) (b : κ) (x : M) :
194     coarse.proj (parent b) (fine.proj b x) = fine.proj b x := by
195   exact LinearMap.congr_fun (h.coarse_comp_fine_eq_self rfl) x
196 
197 /-- Pointwise right absorption by the parent. -/
198 theorem fine_coarse_apply_eq_self
199     (h : Refines coarse fine parent) (b : κ) (x : M) :
200     fine.proj b (coarse.proj (parent b) x) = fine.proj b x := by
201   exact LinearMap.congr_fun (h.fine_comp_coarse_eq_self rfl) x
202 
203 /-! ## Reconstruction and uniqueness -/
204 
205 /-- Every vector in a coarse projector range is the sum of its fine children. -/
206 theorem coarse_packet_reconstruction
207     (h : Refines coarse fine parent) (a : ι)
208     (x : LinearMap.range (coarse.proj a)) :
209     (x : M) = ∑ b ∈ children parent a, fine.proj b (x : M) := by
210   have hx : coarse.proj a (x : M) = (x : M) := by
211     rcases x.property with ⟨y, hy⟩
212     rw [← hy]
213     exact coarse.idempotent a y
214   exact hx.symm.trans (h.coarse_proj_apply_eq_sum_children a (x : M))
215 
216 /--
217 A sum of vectors belonging to distinct fine-child ranges has uniquely
218 determined components: the `b`-component is obtained by applying `fine.proj b`.
219 -/
220 theorem child_decomposition_unique
221     (_h : Refines coarse fine parent) (a : ι) (x : M)
222     (packets : κ → M)
223     (hrange : ∀ b ∈ children parent a,
224       packets b ∈ LinearMap.range (fine.proj b))
225     (hsum : ∑ b ∈ children parent a, packets b = x) :
226     ∀ b ∈ children parent a, packets b = fine.proj b x := by
227   exact finitePacket_decomposition_unique
228     fine (children parent a) x packets hrange hsum
229 
230 /-- Two decompositions into the same fine-child ranges with the same sum agree. -/
231 theorem child_decomposition_ext
232     (_h : Refines coarse fine parent) (a : ι)
233     (packets packets' : κ → M)
234     (hrange : ∀ b ∈ children parent a,
235       packets b ∈ LinearMap.range (fine.proj b))
236     (hrange' : ∀ b ∈ children parent a,
237       packets' b ∈ LinearMap.range (fine.proj b))
238     (hsum : ∑ b ∈ children parent a, packets b =
239       ∑ b ∈ children parent a, packets' b) :
240     ∀ b ∈ children parent a, packets b = packets' b := by
241   exact finitePacket_decomposition_ext
242     fine (children parent a) packets packets' hrange hrange' hsum
243 
244 /-! ## Transitivity -/
245 
246 variable {middle : LinearProjectorFamily R M κ}
247 variable {finest : LinearProjectorFamily R M τ}
248 variable {parent₁ : κ → ι} {parent₂ : τ → κ}
249 
250 /-- Refinement is transitive, with the composite parent map. -/
251 theorem trans
252     (h₁ : Refines coarse middle parent₁)
253     (h₂ : Refines middle finest parent₂) :
254     Refines coarse finest (parent₁ ∘ parent₂) := by
255   classical
256   refine ⟨?_, ?_⟩
257   · intro a
258     rcases h₁.surjective a with ⟨b, rfl⟩
259     rcases h₂.surjective b with ⟨c, rfl⟩
260     exact ⟨c, rfl⟩
261   · intro a
262     ext x
263     simp only [LinearMap.sum_apply]
264     calc
265       coarse.proj a x = coarse.proj a (∑ c, finest.proj c x) := by
266         rw [finest.complete x]
267       _ = ∑ c, coarse.proj a (finest.proj c x) := by
268         rw [map_sum]
269       _ = ∑ c, if parent₁ (parent₂ c) = a then finest.proj c x else 0 := by
270         apply Finset.sum_congr rfl
271         intro c _
272         by_cases hc : parent₁ (parent₂ c) = a
273         · simp only [hc, ↓reduceIte]
274           rw [← h₂.coarse_fine_apply_eq_self c x]
275           exact LinearMap.congr_fun (h₁.coarse_comp_fine_eq_self hc) _
276         · simp only [hc, ↓reduceIte]
277           rw [← h₂.coarse_fine_apply_eq_self c x]
278           exact LinearMap.congr_fun (h₁.coarse_comp_fine_eq_zero hc) _
279       _ = ∑ c ∈ children (parent₁ ∘ parent₂) a, finest.proj c x := by
280         rw [children, Finset.sum_filter]
281         simp only [Function.comp_apply]
282 
283 end Refines
284 
285 /-! ## Exact range-coordinate transport -/
286 
287 section Coordinates
288 
289 variable (coarse : LinearProjectorFamily R M ι)
290 variable (fine : LinearProjectorFamily R M κ)
291 
292 /-- Resolve coarse range coordinates by synthesis followed by fine analysis. -/
293 def refineCoordinates : PacketSpace coarse →ₗ[R] PacketSpace fine :=
294   fine.rangeAnalysis.comp coarse.rangeSynthesis
295 
296 /-- Regroup fine range coordinates by synthesis followed by coarse analysis. -/
297 def coarsenCoordinates : PacketSpace fine →ₗ[R] PacketSpace coarse :=
298   coarse.rangeAnalysis.comp fine.rangeSynthesis
299 
300 @[simp] theorem refineCoordinates_apply (packets : PacketSpace coarse) :
301     refineCoordinates coarse fine packets =
302       fine.rangeAnalysis (coarse.rangeSynthesis packets) := rfl
303 
304 @[simp] theorem coarsenCoordinates_apply (packets : PacketSpace fine) :
305     coarsenCoordinates coarse fine packets =
306       coarse.rangeAnalysis (fine.rangeSynthesis packets) := rfl
307 
308 /-- Refinement carries the coarse analysis of a vector to its fine analysis. -/
309 @[simp] theorem refineCoordinates_rangeAnalysis (x : M) :
310     refineCoordinates coarse fine (coarse.rangeAnalysis x) =
311       fine.rangeAnalysis x := by
312   simp [refineCoordinates]
313 
314 /-- Fine synthesis after refinement is the original coarse synthesis. -/
315 @[simp] theorem rangeSynthesis_refineCoordinates
316     (packets : PacketSpace coarse) :
317     fine.rangeSynthesis (refineCoordinates coarse fine packets) =
318       coarse.rangeSynthesis packets := by
319   simp [refineCoordinates]
320 
321 /-- Coarsening carries the fine analysis of a vector to its coarse analysis. -/
322 @[simp] theorem coarsenCoordinates_rangeAnalysis (x : M) :
323     coarsenCoordinates coarse fine (fine.rangeAnalysis x) =
324       coarse.rangeAnalysis x := by
325   simp [coarsenCoordinates]
326 
327 /-- Coarse synthesis after coarsening is the original fine synthesis. -/
328 @[simp] theorem rangeSynthesis_coarsenCoordinates
329     (packets : PacketSpace fine) :
330     coarse.rangeSynthesis (coarsenCoordinates coarse fine packets) =
331       fine.rangeSynthesis packets := by
332   simp [coarsenCoordinates]
333 
334 /-- Coarsening after refinement is the identity on coarse range coordinates. -/
335 @[simp] theorem coarsenCoordinates_refineCoordinates
336     (packets : PacketSpace coarse) :
337     coarsenCoordinates coarse fine (refineCoordinates coarse fine packets) =
338       packets := by
339   simp [coarsenCoordinates, refineCoordinates]
340 
341 /-- Refinement after coarsening is the identity on fine range coordinates. -/
342 @[simp] theorem refineCoordinates_coarsenCoordinates
343     (packets : PacketSpace fine) :
344     refineCoordinates coarse fine (coarsenCoordinates coarse fine packets) =
345       packets := by
346   simp [coarsenCoordinates, refineCoordinates]
347 
348 /-- The exact linear equivalence between the two independent range products. -/
349 def coordinateRefinementEquiv : PacketSpace coarse ≃ₗ[R] PacketSpace fine where
350   toFun := refineCoordinates coarse fine
351   invFun := coarsenCoordinates coarse fine
352   left_inv := coarsenCoordinates_refineCoordinates coarse fine
353   right_inv := refineCoordinates_coarsenCoordinates coarse fine
354   map_add' := (refineCoordinates coarse fine).map_add
355   map_smul' := (refineCoordinates coarse fine).map_smul
356 
357 @[simp] theorem coordinateRefinementEquiv_apply (packets : PacketSpace coarse) :
358     coordinateRefinementEquiv coarse fine packets =
359       refineCoordinates coarse fine packets := rfl
360 
361 @[simp] theorem coordinateRefinementEquiv_symm_apply (packets : PacketSpace fine) :
362     (coordinateRefinementEquiv coarse fine).symm packets =
363       coarsenCoordinates coarse fine packets := rfl
364 
365 /-! ## Identity and cocycle laws -/
366 
367 /-- Refining a coordinate system to itself is pointwise the identity. -/
368 @[simp] theorem refineCoordinates_self (packets : PacketSpace coarse) :
369     refineCoordinates coarse coarse packets = packets := by
370   simp [refineCoordinates]
371 
372 /-- Coarsening a coordinate system to itself is pointwise the identity. -/
373 @[simp] theorem coarsenCoordinates_self (packets : PacketSpace coarse) :
374     coarsenCoordinates coarse coarse packets = packets := by
375   simp [coarsenCoordinates]
376 
377 /-- Coarsening is definitionally refinement in the reverse direction. -/
378 theorem coarsenCoordinates_eq_refineCoordinates_reverse :
379     coarsenCoordinates coarse fine = refineCoordinates fine coarse := rfl
380 
381 variable (middle : LinearProjectorFamily R M τ)
382 
383 /-- Exact coordinate refinement obeys the pointwise cocycle law. -/
384 @[simp] theorem refineCoordinates_cocycle (packets : PacketSpace coarse) :
385     refineCoordinates middle fine (refineCoordinates coarse middle packets) =
386       refineCoordinates coarse fine packets := by
387   simp [refineCoordinates]
388 
389 /-- The cocycle law as an equality of linear coordinate-change maps. -/
390 theorem refineCoordinates_comp :
391     (refineCoordinates middle fine).comp (refineCoordinates coarse middle) =
392       refineCoordinates coarse fine := by
393   apply LinearMap.ext
394   intro packets
395   exact refineCoordinates_cocycle coarse fine middle packets
396 
397 /-- Reverse coordinate transport obeys the corresponding cocycle law. -/
398 @[simp] theorem coarsenCoordinates_cocycle (packets : PacketSpace fine) :
399     coarsenCoordinates coarse middle (coarsenCoordinates middle fine packets) =
400       coarsenCoordinates coarse fine packets := by
401   simp [coarsenCoordinates]
402 
403 /-- The exact coordinate equivalence at one level is the identity equivalence. -/
404 @[simp] theorem coordinateRefinementEquiv_self :
405     coordinateRefinementEquiv coarse coarse = LinearEquiv.refl R (PacketSpace coarse) := by
406   apply LinearEquiv.ext
407   intro packets
408   simp
409 
410 /-- Reversing the coordinate equivalence swaps its endpoint families. -/
411 theorem coordinateRefinementEquiv_symm :
412     (coordinateRefinementEquiv coarse fine).symm =
413       coordinateRefinementEquiv fine coarse := by
414   apply LinearEquiv.ext
415   intro packets
416   rfl
417 
418 /-- Exact coordinate equivalences compose coherently through an intermediate level. -/
419 theorem coordinateRefinementEquiv_trans :
420     (coordinateRefinementEquiv coarse middle).trans
421         (coordinateRefinementEquiv middle fine) =
422       coordinateRefinementEquiv coarse fine := by
423   apply LinearEquiv.ext
424   intro packets
425   exact refineCoordinates_cocycle coarse fine middle packets
426 
427 end Coordinates
428 
429 /-! ## Typed operator coordinates and naturality -/
430 
431 section CoordinateNaturality
432 
433 variable {N : Type z} {L : Type*}
434 variable [AddCommMonoid N] [Module R N]
435 variable [AddCommMonoid L] [Module R L]
436 variable {ι' : Type*} {κ' : Type*} {τ' : Type*}
437 variable [Fintype ι'] [Fintype κ'] [Fintype τ']
438 
439 /--
440 The typed coordinate representation of a linear map between two independently
441 chosen exact packet systems.
442 -/
443 def coordinateOperator
444     (source : LinearProjectorFamily R M ι)
445     (target : LinearProjectorFamily R N κ')
446     (T : M →ₗ[R] N) : PacketSpace source →ₗ[R] PacketSpace target :=
447   target.rangeAnalysis.comp (T.comp source.rangeSynthesis)
448 
449 @[simp] theorem coordinateOperator_apply
450     (source : LinearProjectorFamily R M ι)
451     (target : LinearProjectorFamily R N κ')
452     (T : M →ₗ[R] N) (packets : PacketSpace source) :
453     coordinateOperator source target T packets =
454       target.rangeAnalysis (T (source.rangeSynthesis packets)) := rfl
455 
456 /-- Analysis intertwines a linear map with its exact coordinate representation. -/
457 @[simp] theorem coordinateOperator_rangeAnalysis
458     (source : LinearProjectorFamily R M ι)
459     (target : LinearProjectorFamily R N κ')
460     (T : M →ₗ[R] N) (x : M) :
461     coordinateOperator source target T (source.rangeAnalysis x) =
462       target.rangeAnalysis (T x) := by
463   simp [coordinateOperator]
464 
465 /-- Synthesis intertwines an exact coordinate representation with its linear map. -/
466 @[simp] theorem rangeSynthesis_coordinateOperator
467     (source : LinearProjectorFamily R M ι)
468     (target : LinearProjectorFamily R N κ')
469     (T : M →ₗ[R] N) (packets : PacketSpace source) :
470     target.rangeSynthesis (coordinateOperator source target T packets) =
471       T (source.rangeSynthesis packets) := by
472   simp [coordinateOperator]
473 
474 /-- Representing the identity between two packet systems is coordinate refinement. -/
475 theorem coordinateOperator_id_eq_refineCoordinates
476     (source : LinearProjectorFamily R M ι)
477     (target : LinearProjectorFamily R M κ) :
478     coordinateOperator source target LinearMap.id =
479       refineCoordinates source target := by
480   apply LinearMap.ext
481   intro packets
482   rfl
483 
484 /-- In one fixed packet system, the represented identity is the identity map. -/
485 @[simp] theorem coordinateOperator_id
486     (source : LinearProjectorFamily R M ι) :
487     coordinateOperator source source LinearMap.id = LinearMap.id := by
488   rw [coordinateOperator_id_eq_refineCoordinates]
489   apply LinearMap.ext
490   intro packets
491   simp
492 
493 /-- Coordinate representation preserves typed composition. -/
494 theorem coordinateOperator_comp
495     (source : LinearProjectorFamily R M ι)
496     (middle : LinearProjectorFamily R N κ')
497     (target : LinearProjectorFamily R L τ')
498     (T : M →ₗ[R] N) (U : N →ₗ[R] L) :
499     (coordinateOperator middle target U).comp
500         (coordinateOperator source middle T) =
501       coordinateOperator source target (U.comp T) := by
502   ext packets
503   simp [coordinateOperator]
504 
505 /--
506 Changing exact coordinates on both source and target commutes with the typed
507 coordinate representation of every linear map.
508 -/
509 theorem coordinateOperator_naturality
510     (sourceCoarse : LinearProjectorFamily R M ι)
511     (sourceFine : LinearProjectorFamily R M κ)
512     (targetCoarse : LinearProjectorFamily R N ι')
513     (targetFine : LinearProjectorFamily R N κ')
514     (T : M →ₗ[R] N) :
515     (refineCoordinates targetCoarse targetFine).comp
516         (coordinateOperator sourceCoarse targetCoarse T) =
517       (coordinateOperator sourceFine targetFine T).comp
518         (refineCoordinates sourceCoarse sourceFine) := by
519   ext packets
520   simp [coordinateOperator, refineCoordinates]
521 
522 /-- The pointwise commuting-square form of coordinate-operator naturality. -/
523 theorem coordinateOperator_naturality_apply
524     (sourceCoarse : LinearProjectorFamily R M ι)
525     (sourceFine : LinearProjectorFamily R M κ)
526     (targetCoarse : LinearProjectorFamily R N ι')
527     (targetFine : LinearProjectorFamily R N κ')
528     (T : M →ₗ[R] N) (packets : PacketSpace sourceCoarse) :
529     refineCoordinates targetCoarse targetFine
530         (coordinateOperator sourceCoarse targetCoarse T packets) =
531       coordinateOperator sourceFine targetFine T
532         (refineCoordinates sourceCoarse sourceFine packets) := by
533   exact LinearMap.congr_fun
534     (coordinateOperator_naturality
535       sourceCoarse sourceFine targetCoarse targetFine T) packets
536 
537 end CoordinateNaturality
538 
539 /-! ## Parent/child formulas for exact coordinates -/
540 
541 namespace Refines
542 
543 variable {coarse : LinearProjectorFamily R M ι}
544 variable {fine : LinearProjectorFamily R M κ}
545 variable {parent : κ → ι}
546 
547 /-- A refined coordinate only sees the coarse coordinate of its parent. -/
548 theorem refineCoordinates_component
549     (h : Refines coarse fine parent) (packets : PacketSpace coarse) (b : κ) :
550     ((refineCoordinates coarse fine packets b :
551       LinearMap.range (fine.proj b)) : M) =
552       fine.proj b (packets (parent b) : M) := by
553   classical
554   change fine.proj b (∑ a, (packets a : M)) = _
555   rw [map_sum]
556   apply Finset.sum_eq_single_of_mem (parent b) (Finset.mem_univ _)
557   intro a _ hab
558   rcases (packets a).property with ⟨x, hx⟩
559   rw [← hx]
560   exact LinearMap.congr_fun
561     (h.fine_comp_coarse_eq_zero (Ne.symm hab)) x
562 
563 /-- A coarsened coordinate is the sum of the fine coordinates over its fibre. -/
564 theorem coarsenCoordinates_component
565     (h : Refines coarse fine parent) (packets : PacketSpace fine) (a : ι) :
566     ((coarsenCoordinates coarse fine packets a :
567       LinearMap.range (coarse.proj a)) : M) =
568       ∑ b ∈ children parent a, (packets b : M) := by
569   classical
570   change coarse.proj a (∑ b, (packets b : M)) = _
571   rw [map_sum]
572   calc
573     (∑ b, coarse.proj a (packets b : M)) =
574         ∑ b, if parent b = a then (packets b : M) else 0 := by
575           apply Finset.sum_congr rfl
576           intro b _
577           rcases (packets b).property with ⟨x, hx⟩
578           rw [← hx]
579           by_cases hb : parent b = a
580           · simp only [hb, ↓reduceIte]
581             exact LinearMap.congr_fun (h.coarse_comp_fine_eq_self hb) x
582           · simp only [hb, ↓reduceIte]
583             exact LinearMap.congr_fun (h.coarse_comp_fine_eq_zero hb) x
584     _ = ∑ b ∈ children parent a, (packets b : M) := by
585       rw [children, Finset.sum_filter]
586 
587 end Refines
588 
589 /-! ## Transfer-block refinement -/
590 
591 section TransferBlocks
592 
593 variable {N : Type z} {ι' : Type*} {κ' : Type*}
594 variable [AddCommMonoid N] [Module R N]
595 variable [Fintype ι'] [Fintype κ']
596 
597 variable {sourceCoarse : LinearProjectorFamily R M ι}
598 variable {sourceFine : LinearProjectorFamily R M κ}
599 variable {targetCoarse : LinearProjectorFamily R N ι'}
600 variable {targetFine : LinearProjectorFamily R N κ'}
601 variable {sourceParent : κ → ι} {targetParent : κ' → ι'}
602 
603 /--
604 Both sides of a linear transfer block refine independently into their fine
605 descendants.  This is the two-module strengthening of the Paper II formula.
606 -/
607 theorem transferBlock_refinement_between
608     (hsource : Refines sourceCoarse sourceFine sourceParent)
609     (htarget : Refines targetCoarse targetFine targetParent)
610     (T : M →ₗ[R] N) (b : ι') (a : ι) :
611     transferBlock sourceCoarse targetCoarse T b a =
612       ∑ β ∈ children targetParent b,
613         ∑ α ∈ children sourceParent a,
614           transferBlock sourceFine targetFine T β α := by
615   classical
616   ext x
617   simp only [transferBlock, LinearMap.comp_apply, LinearMap.sum_apply]
618   rw [hsource.coarse_proj_apply_eq_sum_children, map_sum]
619   calc
620     targetCoarse.proj b
621         (∑ α ∈ children sourceParent a, T (sourceFine.proj α x)) =
622       ∑ α ∈ children sourceParent a,
623         targetCoarse.proj b (T (sourceFine.proj α x)) := by
624           rw [map_sum]
625     _ = ∑ α ∈ children sourceParent a,
626         ∑ β ∈ children targetParent b,
627           targetFine.proj β (T (sourceFine.proj α x)) := by
628           apply Finset.sum_congr rfl
629           intro α _
630           exact htarget.coarse_proj_apply_eq_sum_children b _
631     _ = ∑ β ∈ children targetParent b,
632         ∑ α ∈ children sourceParent a,
633           targetFine.proj β (T (sourceFine.proj α x)) := by
634           exact Finset.sum_comm
635 
636 variable {coarse : LinearProjectorFamily R M ι}
637 variable {fine : LinearProjectorFamily R M κ}
638 variable {parent : κ → ι}
639 
640 /-- Every endomorphism block is the sum of all fine descendant blocks. -/
641 theorem transferBlock_refinement
642     (h : Refines coarse fine parent) (T : Module.End R M) (b a : ι) :
643     transferBlock coarse coarse T b a =
644       ∑ β ∈ children parent b,
645         ∑ α ∈ children parent a,
646           transferBlock fine fine T β α :=
647   transferBlock_refinement_between h h T b a
648 
649 /--
650 Direct traceability wrapper for the complete transfer-block statement in the
651 Paper II manuscript.  It records the refined block identity together with
652 reconstruction of the same linear map from all coarse and all fine blocks.
653 -/
654 theorem transferBlock_refinement_and_reconstruction
655     (hsource : Refines sourceCoarse sourceFine sourceParent)
656     (htarget : Refines targetCoarse targetFine targetParent)
657     (T : M →ₗ[R] N) (b : ι') (a : ι) :
658     transferBlock sourceCoarse targetCoarse T b a =
659         ∑ β ∈ children targetParent b,
660           ∑ α ∈ children sourceParent a,
661             transferBlock sourceFine targetFine T β α ∧
662       (∀ x : M,
663         (∑ β, ∑ α,
664           targetCoarse.proj β (T (sourceCoarse.proj α x))) = T x) ∧
665       (∀ x : M,
666         (∑ β, ∑ α,
667           targetFine.proj β (T (sourceFine.proj α x))) = T x) := by
668   exact ⟨transferBlock_refinement_between hsource htarget T b a,
669     transferBlock_reconstruction sourceCoarse targetCoarse T,
670     transferBlock_reconstruction sourceFine targetFine T⟩
671 
672 end TransferBlocks
673 
674 end Komorebi.PaperII.NestedRefinement
675 
676 #print axioms Komorebi.PaperII.NestedRefinement.Refines.trans
677 #print axioms Komorebi.PaperII.NestedRefinement.coordinateRefinementEquiv
678 #print axioms Komorebi.PaperII.NestedRefinement.finitePacket_decomposition_unique
679 #print axioms Komorebi.PaperII.NestedRefinement.refineCoordinates_comp
680 #print axioms Komorebi.PaperII.NestedRefinement.coordinateRefinementEquiv_trans
681 #print axioms Komorebi.PaperII.NestedRefinement.coordinateOperator_naturality
682 #print axioms Komorebi.PaperII.NestedRefinement.transferBlock_refinement

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: 582e860bd01ad6931057f31790c2df063ee602ad0d6fc381384943ec3c100cf7

Original source on GitHub

Back to Paper II: Refinement Towers, Weighted Transfer, and Integral Separation of Operator Packets