Paper VII · Lean source

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

SeedOrbit.lean404 lines

Original source pathsource/complete/Paper_VII_Complete_v0.6.0_With_Visual_Appendix/original_snapshot/formalization/SeedOrbit.lean
Skip declarations and read code

Skip source text

1 module
2 public import Mathlib.LinearAlgebra.Matrix.Rank
3 public import Mathlib.LinearAlgebra.Dimension.Constructions
4 public import Mathlib.LinearAlgebra.Pi
5 public import Mathlib.Analysis.Complex.Basic
6 public import Mathlib.Algebra.Order.Floor.Div
7 public import Mathlib.LinearAlgebra.Matrix.Kronecker
8 public import Mathlib.Analysis.Matrix.PosDef
9 public import Mathlib.Tactic
10 
11 /-! Author: Komorebi P. Paper VII, checked third block.
12 This module is independently compilable using the pinned portable Lean kit. -/
13 public section
14 set_option autoImplicit false
15 set_option linter.unusedSectionVars false
16 set_option backward.isDefEq.respectTransparency false
17 set_option backward.isDefEq.respectTransparency.types false
18 namespace KomorebiPaperVII.SeedOrbit
19 open Matrix Module
20 open scoped Kronecker
21 variable {d m : Type*} [Fintype d] [Fintype m]
22 
23 /-- The row space is the actual image of right multiplication by C. -/
24 noncomputable def rowSpace (C : Matrix d m ℂ) : Submodule ℂ (m → ℂ) :=
25   LinearMap.range C.vecMulLinear
26 
27 /-- Actual algebra orbit. It is already a linear subspace. -/
28 noncomputable def orbitSpace (C : Matrix d m ℂ) : Submodule ℂ (Matrix d m ℂ) :=
29   LinearMap.range (C.vecMulLinear.compLeft d)
30 
31 theorem mem_orbit_iff (C X : Matrix d m ℂ) :
32     X ∈ orbitSpace C ↔ ∃ A : Matrix d d ℂ, A * C = X := by
33   rfl
34 
35 theorem mem_orbit_iff_rows (C X : Matrix d m ℂ) :
36     X ∈ orbitSpace C ↔ ∀ i, X i ∈ rowSpace C := by
37   constructor
38   · rintro ⟨A, rfl⟩ i
39     exact ⟨A i, rfl⟩
40   · intro h
41     have h' : ∀ i, ∃ a : d → ℂ, a ᵥ* C = X i := h
42     choose A hA using h'
43     exact ⟨A, funext hA⟩
44 
45 noncomputable def orbitRowEquiv (C : Matrix d m ℂ) :
46     orbitSpace C ≃ₗ[ℂ] (d → rowSpace C) where
47   toFun X i := ⟨X.val i, (mem_orbit_iff_rows C X.val).mp X.property i⟩
48   invFun f := ⟨fun i => (f i).val, (mem_orbit_iff_rows C _).mpr (fun i => (f i).property)⟩
49   left_inv _ := rfl
50   right_inv _ := rfl
51   map_add' _ _ := rfl
52   map_smul' _ _ := rfl
53 
54 theorem row_dimension (C : Matrix d m ℂ) :
55     finrank ℂ (rowSpace C) = C.rank := by
56   rw [rowSpace, range_vecMulLinear, ← Matrix.rank_eq_finrank_span_row]
57 
58 theorem orbit_dimension (C : Matrix d m ℂ) :
59     finrank ℂ (orbitSpace C) = Fintype.card d * C.rank := by
60   rw [(orbitRowEquiv C).finrank_eq, Module.finrank_pi_fintype]
61   simp [row_dimension]
62 
63 theorem orbit_span (C : Matrix d m ℂ) :
64     Submodule.span ℂ (Set.range fun A : Matrix d d ℂ => A * C) = orbitSpace C := by
65   change Submodule.span ℂ (orbitSpace C : Set (Matrix d m ℂ)) = orbitSpace C
66   exact Submodule.span_eq _
67 
68 theorem span_orbit_dimension (C : Matrix d m ℂ) :
69     finrank ℂ (Submodule.span ℂ (Set.range fun A : Matrix d d ℂ => A * C)) =
70       Fintype.card d * C.rank := by
71   rw [orbit_span, orbit_dimension]
72 
73 theorem cyclic_iff_full_rank [Nonempty d] (C : Matrix d m ℂ) :
74     orbitSpace C = ⊤ ↔ C.rank = Fintype.card m := by
75   rw [Submodule.eq_top_iff_finrank_eq, orbit_dimension]
76   have hdim : finrank ℂ (Matrix d m ℂ) = Fintype.card d * Fintype.card m := by
77     change finrank ℂ (d → m → ℂ) = _
78     simp [Module.finrank_pi_fintype]
79   rw [hdim]
80   exact Nat.mul_left_cancel_iff (Fintype.card_pos)
81 
82 theorem cyclic_multiplicity_bound [Nonempty d] (C : Matrix d m ℂ)
83     (h : orbitSpace C = ⊤) : Fintype.card m ≤ Fintype.card d := by
84   rw [← (cyclic_iff_full_rank C).mp h]
85   exact C.rank_le_card_height
86 
87 
88 /-! Actual multi-seed matrix action and the sharp generator count. -/
89 variable {o k : Type*} [Fintype o] [Fintype k]
90 noncomputable def rowOrbit (C : Matrix d m ℂ) (o : Type*) : Submodule ℂ (o → m → ℂ) :=
91   LinearMap.range (C.vecMulLinear.compLeft o)
92 
93 theorem rowOrbit_mem (C : Matrix d m ℂ) (X : o → m → ℂ) :
94     X ∈ rowOrbit C o ↔ ∀ i, X i ∈ rowSpace C := by
95   constructor
96   · rintro ⟨A, rfl⟩ i
97     exact ⟨A i, rfl⟩
98   · intro h
99     have h' : ∀ i, ∃ a : d → ℂ, a ᵥ* C = X i := h
100     choose A hA using h'
101     exact ⟨A, funext hA⟩
102 
103 noncomputable def rowOrbitEquiv (C : Matrix d m ℂ) :
104     rowOrbit C o ≃ₗ[ℂ] (o → rowSpace C) where
105   toFun X i := ⟨X.val i, (rowOrbit_mem C X.val).mp X.property i⟩
106   invFun f := ⟨fun i => (f i).val, (rowOrbit_mem C _).mpr (fun i => (f i).property)⟩
107   left_inv _ := rfl
108   right_inv _ := rfl
109   map_add' _ _ := rfl
110   map_smul' _ _ := rfl
111 
112 theorem rowOrbit_dimension (C : Matrix d m ℂ) :
113     finrank ℂ (rowOrbit C o) = Fintype.card o * C.rank := by
114   rw [(rowOrbitEquiv (o := o) C).finrank_eq, Module.finrank_pi_fintype]
115   simp [row_dimension]
116 
117 theorem rowOrbit_full [Nonempty o] (C : Matrix d m ℂ) :
118     rowOrbit C o = ⊤ ↔ C.rank = Fintype.card m := by
119   rw [Submodule.eq_top_iff_finrank_eq, rowOrbit_dimension]
120   simp only [Module.finrank_pi_fintype, Finset.sum_const,
121     Finset.card_univ, smul_eq_mul, Module.finrank_self, mul_one]
122   exact Nat.mul_left_cancel_iff (Fintype.card_pos (α := o))
123 
124 def stackSeeds (C : k → Matrix d m ℂ) : Matrix (k × d) m ℂ := fun q j => C q.1 q.2 j
125 
126 /-- The explicit k-seed action, allowing a different algebra element on each seed. -/
127 def Generates (C : k → Matrix d m ℂ) : Prop :=
128   ∀ X : Matrix d m ℂ, ∃ A : k → Matrix d d ℂ, ∑ a, A a * C a = X
129 
130 theorem stacked_action (C : k → Matrix d m ℂ) (A : k → Matrix d d ℂ) :
131     (show Matrix d (k × d) ℂ from fun i q => A q.1 i q.2) * stackSeeds C = ∑ a, A a * C a := by
132   ext i j
133   simp [Matrix.sum_apply, Matrix.mul_apply, stackSeeds, Fintype.sum_prod_type]
134 
135 theorem generates_iff_rowOrbit (C : k → Matrix d m ℂ) :
136     Generates C ↔ rowOrbit (stackSeeds C) d = ⊤ := by
137   rw [Submodule.eq_top_iff']
138   constructor
139   · intro h X
140     obtain ⟨A, hA⟩ := h X
141     exact ⟨fun i q => A q.1 i q.2, (stacked_action C A).trans hA⟩
142   · intro h X
143     obtain ⟨A, hA⟩ := h X
144     refine ⟨fun a i r => A i (a,r), ?_⟩
145     rw [← stacked_action]
146     exact hA
147 
148 theorem generates_iff_rank [Nonempty d] (C : k → Matrix d m ℂ) :
149     Generates C ↔ (stackSeeds C).rank = Fintype.card m := by
150   rw [generates_iff_rowOrbit, rowOrbit_full]
151 
152 theorem seed_count_lower [Nonempty d] (C : k → Matrix d m ℂ) (h : Generates C) :
153     Fintype.card m ≤ Fintype.card k * Fintype.card d := by
154   rw [← (generates_iff_rank C).mp h, ← Fintype.card_prod]
155   exact (stackSeeds C).rank_le_card_height
156 
157 /-- Realizes every attainable full column rank by an explicit coordinate embedding. -/
158 theorem exists_full_column_rank (h : Fintype.card m ≤ Fintype.card d) :
159     ∃ C : Matrix d m ℂ, C.rank = Fintype.card m := by
160   classical
161   obtain ⟨f⟩ := Function.Embedding.nonempty_of_card_le h
162   let C : Matrix d m ℂ := fun i j => if i=f j then 1 else 0
163   have hC (x : m → ℂ) (j : m) : (C *ᵥ x) (f j) = x j := by
164     simp [C, Matrix.mulVec, dotProduct, f.injective.eq_iff]
165   have hi : Function.Injective C.mulVecLin := by
166     intro x y hxy
167     funext j
168     have h := congrFun hxy (f j)
169     simpa only [Matrix.mulVecLin_apply, hC] using h
170   refine ⟨C, ?_⟩
171   rw [Matrix.rank, LinearMap.finrank_range_of_inj hi, Module.finrank_pi]
172 
173 theorem exists_generating_seeds_iff [Nonempty d] :
174     (∃ C : k → Matrix d m ℂ, Generates C) ↔
175       Fintype.card m ≤ Fintype.card k * Fintype.card d := by
176   constructor
177   · rintro ⟨C, hC⟩
178     exact seed_count_lower C hC
179   · intro h
180     obtain ⟨D, hD⟩ := exists_full_column_rank (d := k × d) (m := m)
181       (by simpa using h)
182     refine ⟨fun a i j => D (a,i) j, (generates_iff_rank _).mpr ?_⟩
183     exact hD
184 
185 /-! Direct sums: actual simultaneous block action and its minimum seed cardinality. -/
186 section Blocks
187 variable {I : Type*} [Fintype I]
188 
189 def BlockGenerates (dd mm : I → ℕ) {s : ℕ}
190     (C : Fin s → (i : I) → Matrix (Fin (dd i)) (Fin (mm i)) ℂ) : Prop :=
191   ∀ X : (i : I) → Matrix (Fin (dd i)) (Fin (mm i)) ℂ,
192     ∃ A : Fin s → (i : I) → Matrix (Fin (dd i)) (Fin (dd i)) ℂ,
193       ∀ i, ∑ a, A a i * C a i = X i
194 
195 theorem block_generates_iff (dd mm : I → ℕ) {s : ℕ}
196     (C : Fin s → (i : I) → Matrix (Fin (dd i)) (Fin (mm i)) ℂ) :
197     BlockGenerates dd mm C ↔ ∀ i, Generates (fun a => C a i) := by
198   classical
199   constructor
200   · intro h i Y
201     let X : (j : I) → Matrix (Fin (dd j)) (Fin (mm j)) ℂ :=
202       fun j => if hji : j=i then hji.symm ▸ Y else 0
203     obtain ⟨A, hA⟩ := h X
204     exact ⟨fun a => A a i, by simpa [X] using hA i⟩
205   · intro h X
206     have hi := fun i => h i (X i)
207     choose A hA using hi
208     exact ⟨fun a i => A i a, hA⟩
209 
210 theorem exists_block_seeds_iff (dd mm : I → ℕ) (hd : ∀ i, 0 < dd i) (s : ℕ) :
211     (∃ C : Fin s → (i : I) → Matrix (Fin (dd i)) (Fin (mm i)) ℂ,
212       BlockGenerates dd mm C) ↔ ∀ i, mm i ≤ s * dd i := by
213   classical
214   constructor
215   · rintro ⟨C, hC⟩ i
216     let : Nonempty (Fin (dd i)) := Fin.pos_iff_nonempty.mp (hd i)
217     simpa using seed_count_lower (fun a => C a i) ((block_generates_iff dd mm C).mp hC i)
218   · intro h
219     have hi (i : I) : ∃ C : Fin s → Matrix (Fin (dd i)) (Fin (mm i)) ℂ,
220         Generates C := by
221       let : Nonempty (Fin (dd i)) := Fin.pos_iff_nonempty.mp (hd i)
222       exact exists_generating_seeds_iff.mpr (by simpa using h i)
223     choose C hC using hi
224     exact ⟨fun a i => C i a, (block_generates_iff dd mm _).mpr hC⟩
225 
226 noncomputable def seedRankFormula (dd mm : I → ℕ) : ℕ :=
227   Finset.univ.sup (fun i => mm i ⌈/⌉ dd i)
228 
229 theorem seed_formula_le_iff (dd mm : I → ℕ) (hd : ∀ i, 0 < dd i) (s : ℕ) :
230     seedRankFormula dd mm ≤ s ↔ ∀ i, mm i ≤ s * dd i := by
231   simp only [seedRankFormula, Finset.sup_le_iff, Finset.mem_univ, forall_true_left]
232   constructor
233   · intro h i
234     simpa only [Nat.mul_comm] using (ceilDiv_le_iff_le_mul (hd i)).mp (h i)
235   · intro h i
236     exact (ceilDiv_le_iff_le_mul (hd i)).mpr (by simpa only [Nat.mul_comm] using h i)
237 
238 /-- Sharp minimum, with existence witnessed by explicit matrix seeds. -/
239 theorem quantum_seed_rank (dd mm : I → ℕ) (hd : ∀ i, 0 < dd i) :
240     IsLeast {s : ℕ | ∃ C : Fin s → (i : I) → Matrix (Fin (dd i)) (Fin (mm i)) ℂ,
241       BlockGenerates dd mm C} (seedRankFormula dd mm) := by
242   constructor
243   · exact (exists_block_seeds_iff dd mm hd _).mpr
244       ((seed_formula_le_iff dd mm hd _).mp le_rfl)
245   · intro s hs
246     exact (seed_formula_le_iff dd mm hd s).mpr ((exists_block_seeds_iff dd mm hd s).mp hs)
247 end Blocks
248 
249 
250 /-! Bipartite tensor coefficients, minimum product length, and actual partial trace. -/
251 
252 /-- Coefficients in the product of the two standard orthonormal bases. -/
253 def coefficientEquiv : (d × m → ℂ) ≃ₗ[ℂ] Matrix d m ℂ where
254   toFun psi i j := psi (i,j)
255   invFun C q := C q.1 q.2
256   left_inv _ := rfl
257   right_inv _ := rfl
258   map_add' _ _ := rfl
259   map_smul' _ _ := rfl
260 
261 theorem local_tensor_action [DecidableEq m] (A : Matrix d d ℂ) (psi : d × m → ℂ) :
262     coefficientEquiv ((A ⊗ₖ (1 : Matrix m m ℂ)) *ᵥ psi) = A * coefficientEquiv psi := by
263   ext i j
264   simp [coefficientEquiv, Matrix.mulVec, dotProduct,
265     Fintype.sum_prod_type, Matrix.one_apply, Matrix.mul_apply]
266 
267 /-- A sum of s genuine product vectors, not a rank assumption. -/
268 def HasProductDecomposition (C : Matrix d m ℂ) (s : ℕ) : Prop :=
269   ∃ u : Fin s → d → ℂ, ∃ v : Fin s → m → ℂ,
270     ∀ i j, C i j = ∑ a, u a i * v a j
271 
272 theorem product_decomposition_rank_bound (C : Matrix d m ℂ) {s : ℕ}
273     (h : HasProductDecomposition C s) : C.rank ≤ s := by
274   obtain ⟨u, v, h⟩ := h
275   let U : Matrix d (Fin s) ℂ := fun i a => u a i
276   let V : Matrix (Fin s) m ℂ := v
277   have hc : C = U * V := by ext i j; exact h i j
278   rw [hc]
279   exact (Matrix.rank_mul_le_right U V).trans (by simpa using V.rank_le_card_height)
280 
281 noncomputable def rowVector (C : Matrix d m ℂ) (i : d) : rowSpace C := by
282   classical
283   refine ⟨C i, Pi.single i 1, ?_⟩
284   change Pi.single i 1 ᵥ* C = C i
285   rw [Matrix.single_vecMul, one_smul]
286   rfl
287 
288 /-- Constructs a minimum-length product decomposition using a row-space basis. -/
289 theorem product_decomposition_at_rank (C : Matrix d m ℂ) : HasProductDecomposition C C.rank := by
290   classical
291   let b := Module.finBasisOfFinrankEq ℂ (rowSpace C) (row_dimension C)
292   refine ⟨fun a i => b.repr (rowVector C i) a, fun a j => (b a).val j, ?_⟩
293   intro i j
294   have h := congrArg (fun x : rowSpace C => x.val j) (b.sum_repr (rowVector C i))
295   simpa only [rowVector, Submodule.coe_sum, Submodule.coe_smul, Finset.sum_apply, Pi.smul_apply,
296     smul_eq_mul] using h.symm
297 
298 theorem product_length_minimum (C : Matrix d m ℂ) :
299     IsLeast {s : ℕ | HasProductDecomposition C s} C.rank := by
300   exact ⟨product_decomposition_at_rank C, fun _ h => product_decomposition_rank_bound C h⟩
301 
302 /-- Schmidt rank defined independently as the least number of product-vector summands. -/
303 noncomputable def schmidtRank (psi : d × m → ℂ) : ℕ := by
304   classical
305   exact Nat.find (show ∃ s, HasProductDecomposition (coefficientEquiv psi) s from
306     ⟨_, product_decomposition_at_rank _⟩)
307 
308 theorem schmidt_rank_eq_matrix_rank (psi : d × m → ℂ) :
309     schmidtRank psi = (coefficientEquiv psi).rank := by
310   classical
311   unfold schmidtRank
312   apply le_antisymm
313   · exact Nat.find_min' _ (product_decomposition_at_rank _)
314   · exact product_decomposition_rank_bound _ (Nat.find_spec _)
315 
316 noncomputable def localOrbit (psi : d × m → ℂ) : Submodule ℂ (d × m → ℂ) :=
317   (orbitSpace (coefficientEquiv psi)).map coefficientEquiv.symm.toLinearMap
318 
319 theorem local_orbit_is_tensor_span [DecidableEq m] (psi : d × m → ℂ) :
320     localOrbit psi = Submodule.span ℂ
321       (Set.range fun A : Matrix d d ℂ => (A ⊗ₖ (1 : Matrix m m ℂ)) *ᵥ psi) := by
322   rw [localOrbit, ← orbit_span, Submodule.map_span, ← Set.range_comp]
323   congr 2
324   funext A
325   apply coefficientEquiv.injective
326   simpa using (local_tensor_action A psi).symm
327 
328 theorem local_orbit_schmidt_dimension (psi : d × m → ℂ) :
329     finrank ℂ (localOrbit psi) = Fintype.card d * schmidtRank psi := by
330   rw [localOrbit, LinearEquiv.finrank_map_eq, orbit_dimension, schmidt_rank_eq_matrix_rank]
331 
332 /-- The actual B-reduced matrix obtained by tracing the A-index of |psi><psi|. -/
333 def reducedB (psi : d × m → ℂ) : Matrix m m ℂ :=
334   fun j l => ∑ i, psi (i,j) * star (psi (i,l))
335 
336 theorem partial_trace_gram (psi : d × m → ℂ) :
337     reducedB psi = (coefficientEquiv psi)ᵀ * ((coefficientEquiv psi)ᵀ)ᴴ := by
338   ext j l
339   rfl
340 
341 open scoped ComplexOrder
342 
343 theorem reduced_rank_eq_schmidt (psi : d × m → ℂ) :
344     (reducedB psi).rank = schmidtRank psi := by
345   rw [partial_trace_gram, Matrix.rank_self_mul_conjTranspose,
346     Matrix.rank_transpose, schmidt_rank_eq_matrix_rank]
347 
348 theorem reduced_positive (psi : d × m → ℂ) : (reducedB psi).PosSemidef := by
349   rw [partial_trace_gram]
350   exact Matrix.posSemidef_self_mul_conjTranspose _
351 
352 theorem reduced_full_support_iff (psi : d × m → ℂ) :
353     LinearMap.range (reducedB psi).mulVecLin = ⊤ ↔ schmidtRank psi = Fintype.card m := by
354   rw [Submodule.eq_top_iff_finrank_eq, ← Matrix.rank, reduced_rank_eq_schmidt,
355     Module.finrank_pi]
356 
357 theorem local_orbit_full_iff [Nonempty d] (psi : d × m → ℂ) :
358     localOrbit psi = ⊤ ↔ schmidtRank psi = Fintype.card m := by
359   rw [Submodule.eq_top_iff_finrank_eq, local_orbit_schmidt_dimension, Module.finrank_pi,
360     Fintype.card_prod]
361   exact Nat.mul_left_cancel_iff (Fintype.card_pos (α := d))
362 
363 /-- Full local controllability of the state orbit iff the actual reduced state has full support. -/
364 theorem local_orbit_reduced_support [Nonempty d] (psi : d × m → ℂ) :
365     localOrbit psi = ⊤ ↔ LinearMap.range (reducedB psi).mulVecLin = ⊤ := by
366   rw [local_orbit_full_iff, reduced_full_support_iff]
367 
368 end KomorebiPaperVII.SeedOrbit
369 
370 /-! Complete declaration-level trust audit. -/
371 #print axioms KomorebiPaperVII.SeedOrbit.mem_orbit_iff
372 #print axioms KomorebiPaperVII.SeedOrbit.mem_orbit_iff_rows
373 #print axioms KomorebiPaperVII.SeedOrbit.row_dimension
374 #print axioms KomorebiPaperVII.SeedOrbit.orbit_dimension
375 #print axioms KomorebiPaperVII.SeedOrbit.orbit_span
376 #print axioms KomorebiPaperVII.SeedOrbit.span_orbit_dimension
377 #print axioms KomorebiPaperVII.SeedOrbit.cyclic_iff_full_rank
378 #print axioms KomorebiPaperVII.SeedOrbit.cyclic_multiplicity_bound
379 #print axioms KomorebiPaperVII.SeedOrbit.rowOrbit_mem
380 #print axioms KomorebiPaperVII.SeedOrbit.rowOrbit_dimension
381 #print axioms KomorebiPaperVII.SeedOrbit.rowOrbit_full
382 #print axioms KomorebiPaperVII.SeedOrbit.stacked_action
383 #print axioms KomorebiPaperVII.SeedOrbit.generates_iff_rowOrbit
384 #print axioms KomorebiPaperVII.SeedOrbit.generates_iff_rank
385 #print axioms KomorebiPaperVII.SeedOrbit.seed_count_lower
386 #print axioms KomorebiPaperVII.SeedOrbit.exists_full_column_rank
387 #print axioms KomorebiPaperVII.SeedOrbit.exists_generating_seeds_iff
388 #print axioms KomorebiPaperVII.SeedOrbit.block_generates_iff
389 #print axioms KomorebiPaperVII.SeedOrbit.exists_block_seeds_iff
390 #print axioms KomorebiPaperVII.SeedOrbit.seed_formula_le_iff
391 #print axioms KomorebiPaperVII.SeedOrbit.quantum_seed_rank
392 #print axioms KomorebiPaperVII.SeedOrbit.local_tensor_action
393 #print axioms KomorebiPaperVII.SeedOrbit.product_decomposition_rank_bound
394 #print axioms KomorebiPaperVII.SeedOrbit.product_decomposition_at_rank
395 #print axioms KomorebiPaperVII.SeedOrbit.product_length_minimum
396 #print axioms KomorebiPaperVII.SeedOrbit.schmidt_rank_eq_matrix_rank
397 #print axioms KomorebiPaperVII.SeedOrbit.local_orbit_is_tensor_span
398 #print axioms KomorebiPaperVII.SeedOrbit.local_orbit_schmidt_dimension
399 #print axioms KomorebiPaperVII.SeedOrbit.partial_trace_gram
400 #print axioms KomorebiPaperVII.SeedOrbit.reduced_rank_eq_schmidt
401 #print axioms KomorebiPaperVII.SeedOrbit.reduced_positive
402 #print axioms KomorebiPaperVII.SeedOrbit.reduced_full_support_iff
403 #print axioms KomorebiPaperVII.SeedOrbit.local_orbit_full_iff
404 #print axioms KomorebiPaperVII.SeedOrbit.local_orbit_reduced_support

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: 0b1da8c7e74ccc7bbca8e2b7c0c26bce01bc95d4089616ba95c1e4fe2f147773

Original source on GitHub

Back to Paper VII: Quantum Seed Calculus