Paper XI · Lean source

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

PaperXI/MonodromyChain.lean122 lines

Original source pathformalization/PaperXI/MonodromyChain.lean
Skip declarations and read code

Skip source text

1 import Mathlib.LinearAlgebra.Pi
2 import Mathlib.Algebra.Module.End
3 import Mathlib.Tactic
4 
5 /-! Paper XI, Proposition 2.3. Actual operators on a finite chain of copies of W.
6 The transfers A i are arbitrary linear maps. Nilpotence is a conclusion.
7 `path` lists all composable transfers in their matrix multiplication order. -/
8 set_option autoImplicit false
9 noncomputable section
10 namespace PaperXI.MonodromyChain
11 open scoped BigOperators
12 
13 variable {K W : Type*} [Field K] [AddCommGroup W] [Module K W]
14 variable {m : ℕ}
15 
16 def shift (A : ℕ → Module.End K W) : Module.End K (Fin m → W) where
17   toFun x i := if h : i.val + 1 < m then A i.val (x ⟨i.val + 1, h⟩) else 0
18   map_add' x y := by funext i; by_cases h : i.val + 1 < m <;> simp [h]
19   map_smul' c x := by funext i; by_cases h : i.val + 1 < m <;> simp [h]
20 
21 @[simp] theorem shift_apply (A : ℕ → Module.End K W) (x : Fin m → W) (i : Fin m) :
22     shift A x i = if h : i.val + 1 < m then A i.val (x ⟨i.val + 1, h⟩) else 0 := rfl
23 
24 def path (A : ℕ → Module.End K W) (i : ℕ) : ℕ → Module.End K W
25   | 0 => 1
26   | r + 1 => path A i r * A (i + r)
27 
28 @[simp] theorem path_zero (A : ℕ → Module.End K W) (i : ℕ) : path A i 0 = 1 := rfl
29 @[simp] theorem path_succ (A : ℕ → Module.End K W) (i r : ℕ) :
30     path A i (r + 1) = path A i r * A (i + r) := rfl
31 
32 /-- The complete path formula, including the zero case beyond the chain endpoint. -/
33 theorem pow_apply (A : ℕ → Module.End K W) (r : ℕ) (x : Fin m → W) (i : Fin m) :
34     (shift A ^ r) x i =
35       if h : i.val + r < m then path A i.val r (x ⟨i.val + r, h⟩) else 0 := by
36   induction r generalizing x with
37   | zero => simp [i.isLt]
38   | succ r ih =>
39       rw [pow_succ, Module.End.mul_apply, ih]
40       by_cases hr : i.val + r < m
41       · rw [dite_eq_left hr, shift_apply]
42         by_cases hs : i.val + (r + 1) < m
43         · simp only [Nat.add_assoc] at *
44           rw [dite_eq_left hs, dite_eq_left hs, path_succ, Module.End.mul_apply]
45         · simp only [Nat.add_assoc] at *
46           rw [dite_eq_right hs, dite_eq_right hs, map_zero]
47       · have hs : ¬ i.val + (r + 1) < m := by omega
48         rw [dite_eq_right hr, dite_eq_right hs]
49 
50 /-- Proposition 2.3: arbitrary nearest-neighbor transfers have nilpotence bound m. -/
51 theorem nilpotent_bound (A : ℕ → Module.End K W) :
52     (shift A : Module.End K (Fin m → W)) ^ m = 0 := by
53   apply LinearMap.ext
54   intro x
55   funext i
56   rw [pow_apply, dite_eq_right (by omega)]
57   rfl
58 
59 def projector (j : Fin m) : Module.End K (Fin m → W) where
60   toFun x i := if i = j then x i else 0
61   map_add' x y := by funext i; split <;> simp_all
62   map_smul' c x := by funext i; split <;> simp_all
63 
64 @[simp] theorem projector_apply (j : Fin m) (x : Fin m → W) (i : Fin m) :
65     projector (K := K) j x i = if i = j then x i else 0 := rfl
66 
67 theorem projector_idempotent (j : Fin m) :
68     (projector (K := K) (W := W) j) ^ 2 = projector j := by
69   apply LinearMap.ext
70   intro x
71   funext i
72   by_cases h : i = j <;> simp [pow_two, Module.End.mul_apply, h]
73 
74 theorem projector_orthogonal {i j : Fin m} (h : i ≠ j) :
75     (projector (K := K) (W := W) i) * projector j = 0 := by
76   apply LinearMap.ext
77   intro x
78   funext k
79   by_cases hk : k = i
80   · subst k; simp [Module.End.mul_apply, h]
81   · simp [Module.End.mul_apply, hk]
82 
83 theorem projector_sum : (∑ j : Fin m, projector (K := K) (W := W) j) = 1 := by
84   apply LinearMap.ext
85   intro x
86   funext i
87   simp [LinearMap.sum_apply, Finset.sum_apply]
88 
89 /-- All matrix blocks outside the nearest-neighbor diagonal vanish. -/
90 theorem block_vanishes (A : ℕ → Module.End K W) (i j : Fin m)
91     (h : i.val + 1 ≠ j.val) :
92     projector i * shift A * projector j = 0 := by
93   apply LinearMap.ext
94   intro x
95   funext k
96   by_cases hk : k = i
97   · subst k
98     simp only [Module.End.mul_apply, projector_apply, ite_true, shift_apply]
99     split
100     · rename_i hi
101       have hij : (⟨i.val + 1, hi⟩ : Fin m) ≠ j := by
102         intro he; exact h (congrArg Fin.val he)
103       simp [hij]
104     · rfl
105   · simp [Module.End.mul_apply, hk]
106 
107 /-- Proposition 2.3: the full operator equals the sum of its admissible blocks.
108 The double sum is the boundary-safe form of Σ_{j=1}^{m-1} P_{j-1} N P_j. -/
109 theorem block_reconstruction (A : ℕ → Module.End K W) :
110     shift A = ∑ i : Fin m, ∑ j : Fin m,
111       if i.val + 1 = j.val then projector i * shift A * projector j else 0 := by
112   have h : ∀ i j : Fin m,
113       (if i.val + 1 = j.val then projector i * shift A * projector j else 0) =
114         projector i * shift A * projector j := by
115     intro i j
116     split
117     · rfl
118     · rename_i hij; exact (block_vanishes A i j hij).symm
119   simp_rw [h]
120   simp only [← Finset.mul_sum, projector_sum, mul_one, ← Finset.sum_mul, one_mul]
121 
122 end PaperXI.MonodromyChain

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: 3cf19949976f59a32001fee38e472b4bf8f9fda9d4d7c67e3819ff2e27ab101c

Original source on GitHub

Back to Paper XI: Packets, Arithmetic Realization, and Conditional Comparison