Paper I · Lean source
CyclicClassification.lean
4 claims linked to this Lean module
- Two-sided annihilator criterion · Read statement beside this module
- Primary decomposition for polynomial modules · Read statement beside this module
- Invariant-factor count · Read statement beside this module
- Cyclic-matrix criterion · Read statement beside this module
These links follow the claim index. They do not extend the recorded proof or Lean coverage.
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)
PaperICompletion/CyclicClassification.lean206 lines
Original source path
formal/current/PaperICompletion/CyclicClassification.leanSkip declarations and read code
1 import KomorebiVerification.SingleOperatorGraph
2 import Mathlib.Algebra.Module.PID
3 import Mathlib.LinearAlgebra.AnnihilatingPolynomial
4 import Mathlib.RingTheory.AdjoinRoot
5
6 /-!
7 # The cyclic-vector / minimal-characteristic polynomial bridge
8
9 Unlike the historical certificate-assembly theorem, these declarations do
10 not accept the desired polynomial equivalence as a hypothesis. The reverse
11 implication uses Mathlib's proven PID-module annihilator-attainment theorem.
12 All maps are the actual polynomial action of the given endomorphism.
13 -/
14
15 set_option autoImplicit false
16 noncomputable section
17
18 namespace Komorebi.PaperICompletion.CyclicClassification
19 open Komorebi.SingleOperatorGraph
20 open Polynomial
21
22 universe u v
23 variable {k : Type u} [Field k]
24 variable {V : Type v} [AddCommGroup V] [Module k V]
25
26 /-- The polynomial-module presentation of the orbit of a specified vector. -/
27 def orbitMap (T : Module.End k V) (x : V) : k[X] →ₗ[k[X]] Module.AEval' T :=
28 LinearMap.toSpanSingleton k[X] (Module.AEval' T) (Module.AEval'.of T x)
29
30 @[simp]
31 theorem orbitMap_apply (T : Module.End k V) (x : V) (p : k[X]) :
32 orbitMap T x p = Module.AEval'.of T (aeval T p x) := rfl
33
34 /-- The span definition of one seed is equivalent to surjectivity of its actual orbit map. -/
35 theorem singleton_generates_iff_orbitMap_surjective (T : Module.End k V) (x : V) :
36 FamilyGenerates T (fun _ : Fin 1 ↦ x) ↔ Function.Surjective (orbitMap T x) := by
37 have hrange : Set.range (orbitFamily T (fun _ : Fin 1 ↦ x)) =
38 ((evalVector T x).range : Set V) := by
39 ext y
40 constructor
41 · rintro ⟨⟨_i, p⟩, rfl⟩
42 exact ⟨p, rfl⟩
43 · rintro ⟨p, rfl⟩
44 exact ⟨(0, p), rfl⟩
45 change Submodule.span k (Set.range (orbitFamily T (fun _ : Fin 1 ↦ x))) = ⊤ ↔ _
46 rw [hrange, Submodule.span_eq, LinearMap.range_eq_top]
47 rfl
48
49 /-- Eliminate the arbitrary indexing function from the one-seed predicate. -/
50 theorem hasCyclicVector_iff_exists_surjective (T : Module.End k V) :
51 HasCyclicVector T ↔ ∃ x : V, Function.Surjective (orbitMap T x) := by
52 constructor
53 · rintro ⟨s, hs⟩
54 have heq : s = fun _ : Fin 1 ↦ s 0 := by
55 funext i
56 exact congrArg s (Subsingleton.elim i 0)
57 rw [heq] at hs
58 exact ⟨s 0, (singleton_generates_iff_orbitMap_surjective T (s 0)).mp hs⟩
59 · rintro ⟨x, hx⟩
60 exact ⟨fun _ : Fin 1 ↦ x, (singleton_generates_iff_orbitMap_surjective T x).mpr hx⟩
61
62 /-- A cyclic vector has exactly the annihilator of the whole polynomial module. -/
63 theorem orbitMap_ker_eq_annihilator_of_surjective
64 (T : Module.End k V) (x : V) (hx : Function.Surjective (orbitMap T x)) :
65 (orbitMap T x).ker = Module.annihilator k[X] (Module.AEval' T) := by
66 ext p
67 change p • Module.AEval'.of T x = 0 ↔
68 p ∈ Module.annihilator k[X] (Module.AEval' T)
69 rw [Module.mem_annihilator]
70 constructor
71 · intro hp y
72 obtain ⟨q, rfl⟩ := hx y
73 change p • (q • Module.AEval'.of T x) = 0
74 rw [smul_smul, mul_comm p q, ← smul_smul, hp, smul_zero]
75 · intro hp
76 exact hp (Module.AEval'.of T x)
77
78 /-- Identify the orbit's quotient with the minimal-polynomial quotient, from kernel equality. -/
79 def minpolyQuotientEquivOrbit (T : Module.End k V) (x : V)
80 (hx : (orbitMap T x).ker = Module.annihilator k[X] (Module.AEval' T)) :
81 (k[X] ⧸ Ideal.span {minpoly k T}) ≃ₗ[k[X]] (orbitMap T x).range :=
82 (Submodule.quotEquivOfEq _ _
83 ((Polynomial.span_minpoly_eq_annihilator k T).trans hx.symm)).trans
84 (orbitMap T x).quotKerEquivRange
85
86 /-- The cyclic orbit has dimension equal to the degree of the minimal polynomial. -/
87 theorem orbit_finrank_eq_minpoly_degree (T : Module.End k V) (x : V)
88 (hx : (orbitMap T x).ker = Module.annihilator k[X] (Module.AEval' T)) :
89 Module.finrank k (orbitMap T x).range = (minpoly k T).natDegree := by
90 rw [← ((minpolyQuotientEquivOrbit T x hx).restrictScalars k).finrank_eq]
91 exact finrank_quotient_span_eq_natDegree
92
93 /-- Cyclicity gives the minimal polynomial its full possible degree. -/
94 theorem minpoly_degree_eq_finrank_of_cyclic [FiniteDimensional k V]
95 (T : Module.End k V) (hT : HasCyclicVector T) :
96 (minpoly k T).natDegree = Module.finrank k V := by
97 obtain ⟨x, hx⟩ := (hasCyclicVector_iff_exists_surjective T).mp hT
98 have hker := orbitMap_ker_eq_annihilator_of_surjective T x hx
99 have hd := orbit_finrank_eq_minpoly_degree T x hker
100 have he : (orbitMap T x).range ≃ₗ[k[X]] Module.AEval' T :=
101 LinearEquiv.ofTop (orbitMap T x).range (LinearMap.range_eq_top.mpr hx)
102 exact hd.symm.trans (((he.restrictScalars k).finrank_eq).trans
103 (Module.AEval'.of T).finrank_eq.symm)
104
105 /-- The forward minpoly/charpoly bridge, without any canonical-form certificate. -/
106 theorem minpoly_eq_charpoly_of_cyclic [FiniteDimensional k V]
107 (T : Module.End k V) (hT : HasCyclicVector T) :
108 minpoly k T = T.charpoly := by
109 apply (Polynomial.eq_of_monic_of_dvd_of_natDegree_le
110 (minpoly.monic (LinearMap.isIntegral T)) (LinearMap.charpoly_monic T)
111 (LinearMap.minpoly_dvd_charpoly T) ?_).symm
112 rw [LinearMap.charpoly_natDegree, minpoly_degree_eq_finrank_of_cyclic T hT]
113
114 /-- The PID theorem supplies a vector with the full operator annihilator. -/
115 theorem exists_full_annihilator_vector [FiniteDimensional k V] (T : Module.End k V) :
116 ∃ x : V, (orbitMap T x).ker = Module.annihilator k[X] (Module.AEval' T) := by
117 obtain ⟨x, hx⟩ := Module.exists_ker_toSpanSingleton_eq_annihilator
118 k[X] (Module.AEval' T)
119 exact ⟨(Module.AEval'.of T).symm x, hx⟩
120
121 /-- Full minimal-polynomial degree forces the attained annihilator orbit to fill the space. -/
122 theorem cyclic_of_minpoly_degree_eq_finrank [FiniteDimensional k V]
123 (T : Module.End k V) (hdegree : (minpoly k T).natDegree = Module.finrank k V) :
124 HasCyclicVector T := by
125 obtain ⟨x, hx⟩ := exists_full_annihilator_vector T
126 have hrank : Module.finrank k (orbitMap T x).range =
127 Module.finrank k (Module.AEval' T) := by
128 rw [orbit_finrank_eq_minpoly_degree T x hx, hdegree, ← (Module.AEval'.of T).finrank_eq]
129 have htop : ((orbitMap T x).range.restrictScalars k) = ⊤ :=
130 Submodule.eq_top_of_finrank_eq hrank
131 have hsurj : Function.Surjective (orbitMap T x) := by
132 intro y
133 have hy : y ∈ (orbitMap T x).range.restrictScalars k := by rw [htop]; trivial
134 exact hy
135 exact (hasCyclicVector_iff_exists_surjective T).mpr ⟨x, hsurj⟩
136
137 /-- The complete cyclic-vector criterion over an arbitrary field. -/
138 theorem hasCyclicVector_iff_minpoly_eq_charpoly [FiniteDimensional k V]
139 (T : Module.End k V) : HasCyclicVector T ↔ minpoly k T = T.charpoly := by
140 constructor
141 · exact minpoly_eq_charpoly_of_cyclic T
142 · intro hp
143 apply cyclic_of_minpoly_degree_eq_finrank T
144 rw [hp, LinearMap.charpoly_natDegree]
145
146 /-- The one-seed polynomial predicate agrees with cyclicity for the actual operator algebra. -/
147 theorem hasCyclicVector_iff_operatorAlgebra_cyclic (T : Module.End k V) :
148 HasCyclicVector T ↔ Komorebi.SeedRankBasics.Cyclic (operatorAlgebra T) V := by
149 constructor
150 · rintro ⟨s, hs⟩
151 have heq : s = fun _ : Fin 1 ↦ s 0 := by
152 funext i
153 exact congrArg s (Subsingleton.elim i 0)
154 rw [heq] at hs
155 have h := (familyGenerates_iff_operatorAlgebra_familyGenerates T
156 (fun _ : Fin 1 ↦ s 0)).mp hs
157 exact ⟨s 0, by simpa [Komorebi.SeedRankBasics.FamilyGenerates] using h⟩
158 · rintro ⟨x, hx⟩
159 refine ⟨fun _ : Fin 1 ↦ x, ?_⟩
160 apply (familyGenerates_iff_operatorAlgebra_familyGenerates T _).mpr
161 simpa [Komorebi.SeedRankBasics.FamilyGenerates] using hx
162
163 /-- Rank-one form of the genuine polynomial criterion; nonzero space is necessary. -/
164 theorem operatorAlgebra_seedRank_eq_one_iff_minpoly_eq_charpoly
165 [FiniteDimensional k V] [Nontrivial V] (T : Module.End k V) :
166 Komorebi.SeedRankBasics.seedRank (operatorAlgebra T) V = 1 ↔
167 minpoly k T = T.charpoly := by
168 let : Module.Finite (operatorAlgebra T) V :=
169 Module.Finite.of_restrictScalars_finite k (operatorAlgebra T) V
170 rw [Komorebi.SeedRankBasics.seedRank_eq_one_iff_cyclic,
171 ← hasCyclicVector_iff_operatorAlgebra_cyclic,
172 hasCyclicVector_iff_minpoly_eq_charpoly]
173
174 /-- The old four-way assembly no longer needs a polynomial classification input.
175 The seed-number and geometric/block-identification certificates remain explicit. -/
176 theorem cyclic_four_way_without_polynomial_certificate
177 [FiniteDimensional k V] {Λ : Type*}
178 (T : Module.End k V) (R : ℕ)
179 (geometricMultiplicity blockMultiplicity : Λ → ℕ)
180 (hpositive : ∀ eigen, 0 < geometricMultiplicity eigen)
181 (hbound : ∀ eigen, geometricMultiplicity eigen ≤ R)
182 (maxEigen : Λ) (hmax : geometricMultiplicity maxEigen = R)
183 (hLeast : IsLeast {r : ℕ | SeedNumberLE T r} R)
184 (hgeometric_eq_blocks : ∀ eigen,
185 geometricMultiplicity eigen = blockMultiplicity eigen) :
186 (HasCyclicVector T ↔ AllGeometricMultiplicitiesOne geometricMultiplicity) ∧
187 (AllGeometricMultiplicitiesOne geometricMultiplicity ↔
188 OneJordanBlockPerEigenvalue blockMultiplicity) ∧
189 (OneJordanBlockPerEigenvalue blockMultiplicity ↔ minpoly k T = T.charpoly) := by
190 have hfirst : HasCyclicVector T ↔
191 AllGeometricMultiplicitiesOne geometricMultiplicity :=
192 hasCyclicVector_iff_one_block_per_eigenvalue
193 T R geometricMultiplicity hpositive hbound maxEigen hmax hLeast
194 have hmiddle : AllGeometricMultiplicitiesOne geometricMultiplicity ↔
195 OneJordanBlockPerEigenvalue blockMultiplicity := by
196 constructor
197 · intro h eigen
198 rw [← hgeometric_eq_blocks eigen]
199 exact h eigen
200 · intro h eigen
201 rw [hgeometric_eq_blocks eigen]
202 exact h eigen
203 exact ⟨hfirst, hmiddle,
204 hmiddle.symm.trans (hfirst.symm.trans (hasCyclicVector_iff_minpoly_eq_charpoly T))⟩
205
206 end Komorebi.PaperICompletion.CyclicClassification
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: 35b2cd6480b67176f2163ea6f7527bf849b29eb5ed1a9c6835b32d57295c36ca
Back to Paper I: Typed Operator Systems, Seed Rank, and Exact Packet Coordinates