Paper VIII · Lean source
KrylovPackets.lean
Inherited / related evidence Coverage and evidence
The edition relies on earlier or related formal evidence. That evidence is not a fresh full-edition replay.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
Local imports (4)
KrylovPackets.lean209 lines
Original source path
source/complete/Paper_VIII_Complete_v0.6.0_With_Visual_Appendix/original_snapshot/formalization/KrylovPackets.leanSkip declarations and read code
1 module
2 public import LowRankChains
3 import all LowRankChains
4 import all LowRankAlgebra
5 import all ProductChainError
6 import all QuantumPacketCore
7 public import Mathlib.Topology.MetricSpace.HausdorffDistance
8 public import Mathlib.Analysis.Normed.Operator.NormedSpace
9 public import Mathlib.LinearAlgebra.Span.Basic
10 public import Mathlib.Tactic
11
12 /-!
13 Author: Komorebi P.
14 Paper VIII 7.2 and 7.3. Actual Krylov submodules, independently defined as
15 spans of finite operator orbits. Directness is proved from the packet ranges.
16 The distance certificate is for the actual metric infimum distance.
17 No condition-number or conjugate-gradient convergence theorem is claimed here.
18 -/
19 public section
20 set_option autoImplicit false
21 set_option backward.isDefEq.respectTransparency false
22 set_option backward.isDefEq.respectTransparency.types false
23 namespace KomorebiPaperVIII
24 open scoped BigOperators
25 open KomorebiPaperVII
26
27 section Algebra
28 variable {R I : Type*} [Ring R] [Fintype I] [DecidableEq I]
29
30 /-- Zero cross-packet transfer implies actual commutation with every projector. -/
31 theorem packet_diagonal_commutes (P : PacketFamily R I) (D : R)
32 (hD : PacketDiagonal P D) (i : I) : Commute D (P.proj i) := by
33 have hc : (∑ b, P.block D b i) = P.block D i i := by
34 apply Finset.sum_eq_single i
35 · intro b _ hbi
36 exact hD b i hbi
37 · simp
38 have hr : (∑ a, P.block D i a) = P.block D i i := by
39 apply Finset.sum_eq_single i
40 · intro a _ hai
41 exact hD i a hai.symm
42 · simp
43 have hcl : (∑ b, P.block D b i) = D * P.proj i := by
44 simp only [PacketFamily.block, ← Finset.sum_mul, P.sum_proj, one_mul]
45 have hrl : (∑ a, P.block D i a) = P.proj i * D := by
46 simp only [PacketFamily.block, ← Finset.mul_sum, P.sum_proj, mul_one]
47 exact hcl.symm.trans (hc.trans (hr.symm.trans hrl))
48
49 /-- Powers of the local block agree with full powers on that packet's range. -/
50 theorem power_on_packet (P : PacketFamily R I) (A : R)
51 (hA : ∀ i, Commute A (P.proj i)) (i : I) (j : ℕ) :
52 (P.block A i i) ^ j * P.proj i = A ^ j * P.proj i := by
53 have hb : P.block A i i = A * P.proj i := by
54 rw [PacketFamily.block, ← (hA i).eq, mul_assoc, P.idempotent]
55 have hp : ∀ j : ℕ, P.proj i ^ j * P.proj i = P.proj i := by
56 intro k
57 induction k with
58 | zero => simp
59 | succ k ih => simpa only [pow_succ, mul_assoc, P.idempotent] using ih
60 rw [hb, (hA i).mul_pow, mul_assoc, hp]
61 end Algebra
62
63 section Krylov
64 variable {K X I : Type*} [NontriviallyNormedField K]
65 variable [NormedAddCommGroup X] [NormedSpace K X] [Fintype I] [DecidableEq I]
66
67 /-- Span of v, A v, ..., A^(m-1) v; m=0 is the zero subspace. -/
68 def krylovSpace (A : X →L[K] X) (v : X) (m : ℕ) : Submodule K X :=
69 Submodule.span K (Set.range (fun j : Fin m => (A ^ j.val) v))
70
71 theorem krylov_generator_mem (A : X →L[K] X) (v : X) (m j : ℕ) (hj : j < m) :
72 (A ^ j) v ∈ krylovSpace A v m :=
73 Submodule.subset_span ⟨⟨j, hj⟩, rfl⟩
74
75 /-- Proposition 7.2: exact decomposition of every actual iterate. -/
76 theorem invariant_packet_power_expansion (P : PacketFamily (X →L[K] X) I)
77 (A : X →L[K] X) (hA : ∀ i, Commute A (P.proj i)) (v : X) (j : ℕ) :
78 (A ^ j) v = ∑ i, ((P.block A i i) ^ j) (P.proj i v) := by
79 have hv : ∑ i, P.proj i v = v := by
80 simpa only [sum_apply, one_apply_eq_self] using
81 congrArg (fun (T : X →L[K] X) => T v) P.sum_proj
82 calc
83 (A ^ j) v = (A ^ j) (∑ i, P.proj i v) := by rw [hv]
84 _ = ∑ i, (A ^ j) (P.proj i v) := map_sum _ _ _
85 _ = _ := Finset.sum_congr rfl (fun i _ =>
86 (congrArg (fun (T : X →L[K] X) => T v) (power_on_packet P A hA i j)).symm)
87
88 /-- Proposition 7.2: inclusion of actual Krylov spans in the sum of the local spans. -/
89 theorem invariant_packet_krylov (P : PacketFamily (X →L[K] X) I)
90 (A : X →L[K] X) (hA : ∀ i, Commute A (P.proj i)) (v : X) (m : ℕ) :
91 krylovSpace A v m ≤ ⨆ i, krylovSpace (P.block A i i) (P.proj i v) m := by
92 apply Submodule.span_le.mpr
93 rintro x ⟨j, rfl⟩
94 change (A ^ j.val) v ∈ (⨆ i, krylovSpace (P.block A i i) (P.proj i v) m : Submodule K X)
95 rw [invariant_packet_power_expansion P A hA v j.val]
96 apply Submodule.sum_mem
97 intro i _
98 exact Submodule.mem_iSup_of_mem i
99 (krylov_generator_mem (P.block A i i) (P.proj i v) m j.val j.isLt)
100
101 /-- Local Krylov spaces stay in their actual projector ranges. -/
102 theorem local_krylov_le_range (P : PacketFamily (X →L[K] X) I)
103 (A : X →L[K] X) (v : X) (m : ℕ) (i : I) :
104 krylovSpace (P.block A i i) (P.proj i v) m ≤ LinearMap.range (P.proj i).toLinearMap := by
105 apply Submodule.span_le.mpr
106 rintro x ⟨j, rfl⟩
107 cases hj : j.val with
108 | zero => exact ⟨v, by simp [hj]⟩
109 | succ n =>
110 refine ⟨A (P.proj i (((P.block A i i) ^ n) (P.proj i v))), ?_⟩
111 simp only [hj, pow_succ', PacketFamily.block, mul_apply_eq_comp,
112 ContinuousLinearMap.coe_coe]
113
114 /-- Projecting a finite sum of range-supported vectors selects exactly one term. -/
115 theorem project_packet_sum (P : PacketFamily (X →L[K] X) I) (x : I → X)
116 (hx : ∀ i, x i ∈ LinearMap.range (P.proj i).toLinearMap) (j : I) :
117 P.proj j (∑ i, x i) = x j := by
118 have ht (i : I) : P.proj j (x i) = if j = i then x i else 0 := by
119 obtain ⟨v, hv⟩ := hx i
120 change P.proj i v = x i at hv
121 rw [← hv]
122 have hm := congrArg (fun (T : X →L[K] X) => T v) (P.mul_proj j i)
123 by_cases hji : j = i
124 · subst j
125 simpa only [ite_true, mul_apply_eq_comp] using hm
126 · simpa [hji] using hm
127 simp only [map_sum, ht]
128 simp
129
130 /-- The sum in Proposition 7.2 is direct: a zero local decomposition is termwise zero. -/
131 theorem local_krylov_direct (P : PacketFamily (X →L[K] X) I)
132 (A : X →L[K] X) (v : X) (m : ℕ) (x : I → X)
133 (hx : ∀ i, x i ∈ krylovSpace (P.block A i i) (P.proj i v) m)
134 (hsum : ∑ i, x i = 0) : ∀ i, x i = 0 := by
135 intro i
136 have h := project_packet_sum P x (fun j => local_krylov_le_range P A v m j (hx j)) i
137 simpa only [hsum, map_zero] using h.symm
138 end Krylov
139
140 section PowerBound
141 variable {R : Type*} [NormedRing R]
142
143 /-- A sharp first-order power perturbation bound valid even in the trivial ring. -/
144 theorem power_difference_bound_succ (A D : R) (n : ℕ) :
145 ‖A ^ (n + 1) - D ^ (n + 1)‖ ≤
146 ((n + 1 : ℕ) : ℝ) * (max ‖A‖ ‖D‖) ^ n * ‖A - D‖ := by
147 let M := max ‖A‖ ‖D‖
148 have hM : 0 ≤ M := (norm_nonneg A).trans (le_max_left _ _)
149 have hA : ‖A‖ ≤ M := le_max_left _ _
150 have hD : ‖D‖ ≤ M := le_max_right _ _
151 induction n with
152 | zero => simp
153 | succ n ih =>
154 have hid : A ^ (n + 1 + 1) - D ^ (n + 1 + 1) =
155 A * (A ^ (n + 1) - D ^ (n + 1)) + (A - D) * D ^ (n + 1) := by
156 rw [pow_succ' A (n + 1), pow_succ' D (n + 1)]
157 noncomm_ring
158 have hp : ‖D ^ (n + 1)‖ ≤ M ^ (n + 1) :=
159 (norm_pow_le' D (Nat.succ_pos n)).trans (pow_le_pow_left₀ (norm_nonneg D) hD _)
160 calc
161 _ = ‖A * (A ^ (n + 1) - D ^ (n + 1)) + (A - D) * D ^ (n + 1)‖ := by rw [hid]
162 _ ≤ ‖A‖ * ‖A ^ (n + 1) - D ^ (n + 1)‖ + ‖A - D‖ * ‖D ^ (n + 1)‖ :=
163 (norm_add_le _ _).trans (add_le_add (norm_mul_le _ _) (norm_mul_le _ _))
164 _ ≤ M * (((n + 1 : ℕ) : ℝ) * M ^ n * ‖A - D‖) + ‖A - D‖ * M ^ (n + 1) :=
165 add_le_add (mul_le_mul hA ih (norm_nonneg _) hM)
166 (mul_le_mul_of_nonneg_left hp (norm_nonneg _))
167 _ = _ := by dsimp [M]; push_cast; rw [pow_succ]; ring
168
169 /-- Theorem 7.3's operator estimate in the manuscript's positive-index convention. -/
170 theorem approximate_packet_power_bound (D K : R) (j : ℕ) (hj : 0 < j) :
171 ‖(D + K) ^ j - D ^ j‖ ≤
172 (j : ℝ) * (max ‖D + K‖ ‖D‖) ^ (j - 1) * ‖K‖ := by
173 have h := power_difference_bound_succ (D + K) D (j - 1)
174 have he : j - 1 + 1 = j := by omega
175 simpa only [he, add_sub_cancel_left] using h
176 end PowerBound
177
178 section Distance
179 variable {K X I : Type*} [NontriviallyNormedField K]
180 variable [NormedAddCommGroup X] [NormedSpace K X] [Fintype I] [DecidableEq I]
181
182 /-- Theorem 7.3's actual distance-to-local-Krylov-space certificate. -/
183 theorem approximate_packet_krylov_distance (P : PacketFamily (X →L[K] X) I)
184 (D E : X →L[K] X) (hD : PacketDiagonal P D) (v : X) (j : ℕ) (hj : 0 < j) :
185 Metric.infDist (((D + E) ^ j) v)
186 ((⨆ i, krylovSpace (P.block D i i) (P.proj i v) (j + 1) : Submodule K X) : Set X) ≤
187 (j : ℝ) * (max ‖D + E‖ ‖D‖) ^ (j - 1) * ‖E‖ * ‖v‖ := by
188 have hm : (D ^ j) v ∈ (⨆ i, krylovSpace (P.block D i i) (P.proj i v) (j + 1) : Submodule K X) :=
189 invariant_packet_krylov P D (packet_diagonal_commutes P D hD) v (j + 1)
190 (krylov_generator_mem D v (j + 1) j (Nat.lt_succ_self j))
191 calc
192 _ ≤ dist (((D + E) ^ j) v) ((D ^ j) v) := Metric.infDist_le_dist_of_mem hm
193 _ = ‖((D + E) ^ j - D ^ j) v‖ := by rw [dist_eq_norm]; rfl
194 _ ≤ ‖(D + E) ^ j - D ^ j‖ * ‖v‖ := ((D + E) ^ j - D ^ j).le_opNorm v
195 _ ≤ _ := mul_le_mul_of_nonneg_right (approximate_packet_power_bound D E j hj) (norm_nonneg _)
196 end Distance
197 end KomorebiPaperVIII
198
199 #print axioms KomorebiPaperVIII.packet_diagonal_commutes
200 #print axioms KomorebiPaperVIII.power_on_packet
201 #print axioms KomorebiPaperVIII.krylov_generator_mem
202 #print axioms KomorebiPaperVIII.invariant_packet_power_expansion
203 #print axioms KomorebiPaperVIII.invariant_packet_krylov
204 #print axioms KomorebiPaperVIII.local_krylov_le_range
205 #print axioms KomorebiPaperVIII.project_packet_sum
206 #print axioms KomorebiPaperVIII.local_krylov_direct
207 #print axioms KomorebiPaperVIII.power_difference_bound_succ
208 #print axioms KomorebiPaperVIII.approximate_packet_power_bound
209 #print axioms KomorebiPaperVIII.approximate_packet_krylov_distance
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: 12fd73f08368ec528953e66e165ef4281f1a978052c21e0c61dbde6d12c508b5
Back to Paper VIII: Packet Operator Algorithms, Exact Compilation, and GPU Realization