Skip to content

Commit 43b4712

Browse files
committed
feat: if a Lie algebra has non-degenerate Killing form then its Cartan subalgebras are Abelian (#8430)
Note: the proof (due to Zassenhaus) makes no assumption about the characteristic of the coefficients.
1 parent d8fa728 commit 43b4712

File tree

13 files changed

+223
-10
lines changed

13 files changed

+223
-10
lines changed

Mathlib/Algebra/DirectSum/LinearMap.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,12 @@ lemma trace_eq_sum_trace_restrict [Fintype ι]
4747
toMatrix_directSum_collectedBasis_eq_blockDiagonal' h h b b hf, Matrix.trace_blockDiagonal',
4848
← trace_eq_matrix_trace]
4949

50+
lemma trace_eq_sum_trace_restrict' (hN : {i | N i ≠ ⊥}.Finite)
51+
{f : M →ₗ[R] M} (hf : ∀ i, MapsTo f (N i) (N i)) :
52+
trace R M f = ∑ i in hN.toFinset, trace R (N i) (f.restrict (hf i)) := by
53+
let _ : Fintype {i // N i ≠ ⊥} := hN.fintype
54+
let _ : Fintype {i | N i ≠ ⊥} := hN.fintype
55+
rw [← Finset.sum_coe_sort, trace_eq_sum_trace_restrict (isInternal_ne_bot_iff.mpr h) _]
56+
exact Fintype.sum_equiv hN.subtypeEquivToFinset _ _ (fun i ↦ rfl)
57+
5058
end LinearMap

Mathlib/Algebra/DirectSum/Module.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,12 @@ theorem isInternal_submodule_iff_isCompl (A : ι → Submodule R M) {i j : ι} (
453453
exact ⟨fun ⟨hd, ht⟩ ↦ ⟨hd, codisjoint_iff.mpr ht⟩, fun ⟨hd, ht⟩ ↦ ⟨hd, ht.eq_top⟩⟩
454454
#align direct_sum.is_internal_submodule_iff_is_compl DirectSum.isInternal_submodule_iff_isCompl
455455

456+
@[simp]
457+
theorem isInternal_ne_bot_iff {A : ι → Submodule R M} :
458+
IsInternal (fun i : {i // A i ≠ ⊥} ↦ A i) ↔ IsInternal A := by
459+
simp only [isInternal_submodule_iff_independent_and_iSup_eq_top]
460+
exact Iff.and CompleteLattice.independent_ne_bot_iff_independent <| by simp
461+
456462
/-! Now copy the lemmas for subgroup and submonoids. -/
457463

458464

Mathlib/Algebra/Lie/Abelian.lean

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ theorem trivial_lie_zero (L : Type v) (M : Type w) [Bracket L M] [Zero M] [LieMo
4545
LieModule.IsTrivial.trivial x m
4646
#align trivial_lie_zero trivial_lie_zero
4747

48+
instance LieModule.instIsTrivialOfSubsingleton {L M : Type*}
49+
[LieRing L] [AddCommGroup M] [LieRingModule L M] [Subsingleton L] : LieModule.IsTrivial L M :=
50+
fun x m ↦ by rw [Subsingleton.eq_zero x, zero_lie]⟩
51+
52+
instance LieModule.instIsTrivialOfSubsingleton' {L M : Type*}
53+
[LieRing L] [AddCommGroup M] [LieRingModule L M] [Subsingleton M] : LieModule.IsTrivial L M :=
54+
fun x m ↦ by simp_rw [Subsingleton.eq_zero m, lie_zero]⟩
55+
4856
/-- A Lie algebra is Abelian iff it is trivial as a Lie module over itself. -/
4957
abbrev IsLieAbelian (L : Type v) [Bracket L L] [Zero L] : Prop :=
5058
LieModule.IsTrivial L L
@@ -87,11 +95,6 @@ theorem commutative_ring_iff_abelian_lie_ring {A : Type v} [Ring A] :
8795
simp only [h₁, h₂, LieRing.of_associative_ring_bracket, sub_eq_zero]
8896
#align commutative_ring_iff_abelian_lie_ring commutative_ring_iff_abelian_lie_ring
8997

90-
theorem LieAlgebra.isLieAbelian_bot (R : Type u) (L : Type v) [CommRing R] [LieRing L]
91-
[LieAlgebra R L] : IsLieAbelian (⊥ : LieIdeal R L) :=
92-
fun ⟨x, hx⟩ _ => by simp [eq_iff_true_of_subsingleton]⟩
93-
#align lie_algebra.is_lie_abelian_bot LieAlgebra.isLieAbelian_bot
94-
9598
section Center
9699

97100
variable (R : Type u) (L : Type v) (M : Type w) (N : Type w₁)
@@ -281,6 +284,12 @@ theorem isLieAbelian_iff_center_eq_top : IsLieAbelian L ↔ center R L = ⊤ :=
281284

282285
end LieAlgebra
283286

287+
variable {R L} in
288+
lemma LieModule.commute_toEndomorphism_of_mem_center_left
289+
{x : L} (hx : x ∈ LieAlgebra.center R L) (y : L) :
290+
Commute (toEndomorphism R L M x) (toEndomorphism R L M y) := by
291+
rw [Commute.symm_iff, commute_iff_lie_eq, ← LieHom.map_lie, hx y, LieHom.map_zero]
292+
284293
end Center
285294

286295
section IdealOperations

Mathlib/Algebra/Lie/Killing.lean

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2023 Oliver Nash. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Oliver Nash
55
-/
6+
import Mathlib.Algebra.DirectSum.LinearMap
67
import Mathlib.Algebra.Lie.Nilpotent
78
import Mathlib.Algebra.Lie.Semisimple
89
import Mathlib.Algebra.Lie.Weights.Cartan
@@ -35,6 +36,8 @@ We define the trace / Killing form in this file and prove some basic properties.
3536
a Lie algebra is non-singular, it remains non-singular when restricted to a Cartan subalgebra.
3637
* `LieAlgebra.IsKilling.isSemisimple`: if a Lie algebra has non-singular Killing form then it is
3738
semisimple.
39+
* `LieAlgebra.IsKilling.isLieAbelian_of_isCartanSubalgebra`: if the Killing form of a Lie algebra
40+
is non-singular, then its Cartan subalgebras are Abelian.
3841
3942
## TODO
4043
@@ -45,9 +48,13 @@ variable (R L M : Type*) [CommRing R] [LieRing L] [LieAlgebra R L]
4548
[AddCommGroup M] [Module R M] [LieRingModule L M] [LieModule R L M]
4649
[Module.Free R M] [Module.Finite R M]
4750

51+
attribute [local instance] isNoetherian_of_isNoetherianRing_of_finite
52+
attribute [local instance] Module.free_of_finite_type_torsion_free'
53+
4854
local notation "φ" => LieModule.toEndomorphism R L M
4955

5056
open LinearMap (trace)
57+
open Set BigOperators
5158

5259
namespace LieModule
5360

@@ -162,6 +169,67 @@ lemma eq_zero_of_mem_weightSpace_mem_posFitting [LieAlgebra.IsNilpotent R L]
162169
obtain ⟨m, rfl⟩ := (mem_posFittingCompOf R x m₁).mp hm₁ k
163170
simp [hB, hk]
164171

172+
lemma trace_toEndomorphism_eq_zero_of_mem_lcs
173+
{k : ℕ} {x : L} (hk : 1 ≤ k) (hx : x ∈ lowerCentralSeries R L L k) :
174+
trace R _ (toEndomorphism R L M x) = 0 := by
175+
replace hx : x ∈ lowerCentralSeries R L L 1 := antitone_lowerCentralSeries _ _ _ hk hx
176+
replace hx : x ∈ Submodule.span R {m | ∃ u v : L, ⁅u, v⁆ = m} := by
177+
rw [lowerCentralSeries_succ, ← LieSubmodule.mem_coeSubmodule,
178+
LieSubmodule.lieIdeal_oper_eq_linear_span'] at hx
179+
simpa using hx
180+
refine Submodule.span_induction (p := fun x ↦ trace R _ (toEndomorphism R L M x) = 0) hx
181+
(fun y ⟨u, v, huv⟩ ↦ ?_) ?_ (fun u v hu hv ↦ ?_) (fun t u hu ↦ ?_)
182+
· simp_rw [← huv, LieHom.map_lie, Ring.lie_def, map_sub, LinearMap.trace_mul_comm, sub_self]
183+
· simp
184+
· simp [hu, hv]
185+
· simp [hu]
186+
187+
variable [LieAlgebra.IsNilpotent R L] [IsTriangularizable R L M]
188+
[IsDomain R] [IsPrincipalIdealRing R]
189+
190+
lemma traceForm_eq_sum_weightSpaceOf (z : L) :
191+
traceForm R L M =
192+
∑ χ in (finite_weightSpaceOf_ne_bot R L M z).toFinset, traceForm R L (weightSpaceOf M χ z) := by
193+
ext x y
194+
have hxy : ∀ χ : R, MapsTo ((toEndomorphism R L M x).comp (toEndomorphism R L M y))
195+
(weightSpaceOf M χ z) (weightSpaceOf M χ z) :=
196+
fun χ m hm ↦ LieSubmodule.lie_mem _ <| LieSubmodule.lie_mem _ hm
197+
have hfin : {χ : R | (weightSpaceOf M χ z : Submodule R M) ≠ ⊥}.Finite := by
198+
convert finite_weightSpaceOf_ne_bot R L M z
199+
exact LieSubmodule.coeSubmodule_eq_bot_iff (weightSpaceOf M _ _)
200+
classical
201+
have hds := DirectSum.isInternal_submodule_of_independent_of_iSup_eq_top
202+
(LieSubmodule.independent_iff_coe_toSubmodule.mp <| independent_weightSpaceOf R L M z)
203+
(IsTriangularizable.iSup_eq_top z)
204+
simp only [LinearMap.coeFn_sum, Finset.sum_apply, traceForm_apply_apply,
205+
LinearMap.trace_eq_sum_trace_restrict' hds hfin hxy]
206+
exact Finset.sum_congr (by simp) (fun χ _ ↦ rfl)
207+
208+
-- In characteristic zero a stronger result holds (no `⊓ LieAlgebra.center K L`) TODO prove this!
209+
lemma lowerCentralSeries_one_inf_center_le_ker_traceForm :
210+
lowerCentralSeries R L L 1 ⊓ LieAlgebra.center R L ≤ LinearMap.ker (traceForm R L M) := by
211+
rintro z ⟨hz : z ∈ lowerCentralSeries R L L 1, hzc : z ∈ LieAlgebra.center R L⟩
212+
ext x
213+
suffices ∀ χ : R, traceForm R L (weightSpaceOf M χ x) z x = 0 by
214+
simp [traceForm_eq_sum_weightSpaceOf R L M x, this]
215+
intro χ
216+
replace hz : LinearMap.trace R _ (toEndomorphism R L (weightSpaceOf M χ x) z) = 0 :=
217+
trace_toEndomorphism_eq_zero_of_mem_lcs R L _ (le_refl _) hz
218+
let f := toEndomorphism R L (weightSpaceOf M χ x) z
219+
let g := toEndomorphism R L (weightSpaceOf M χ x) x
220+
have h_comm : Commute f g := commute_toEndomorphism_of_mem_center_left _ hzc x
221+
have hg : _root_.IsNilpotent (g - algebraMap R _ χ) :=
222+
(toEndomorphism R L M x).isNilpotent_restrict_iSup_sub_algebraMap χ
223+
rw [traceForm_apply_apply, LinearMap.trace_comp_eq_mul_of_commute_of_isNilpotent χ h_comm hg, hz,
224+
mul_zero]
225+
226+
/-- A nilpotent Lie algebra with a representation whose trace form is non-singular is Abelian. -/
227+
lemma isLieAbelian_of_ker_traceForm_eq_bot (h : LinearMap.ker (traceForm R L M) = ⊥) :
228+
IsLieAbelian L := by
229+
simpa only [← disjoint_lowerCentralSeries_maxTrivSubmodule_iff R L L, disjoint_iff_inf_le,
230+
LieIdeal.coe_to_lieSubalgebra_to_submodule, LieSubmodule.coeSubmodule_eq_bot_iff, h]
231+
using lowerCentralSeries_one_inf_center_le_ker_traceForm R L M
232+
165233
end LieModule
166234

167235
namespace LieSubmodule
@@ -316,6 +384,13 @@ instance isSemisimple [IsDomain R] [IsPrincipalIdealRing R] : IsSemisimple R L :
316384

317385
-- TODO: formalize a positive-characteristic counterexample to the above instance
318386

387+
instance instIsLieAbelian_of_isCartanSubalgebra
388+
[IsDomain R] [IsPrincipalIdealRing R] [IsArtinian R L]
389+
(H : LieSubalgebra R L) [H.IsCartanSubalgebra] [LieModule.IsTriangularizable R H L] :
390+
IsLieAbelian H :=
391+
LieModule.isLieAbelian_of_ker_traceForm_eq_bot R H L <|
392+
ker_restrictBilinear_of_isCartanSubalgebra_eq_bot R L H
393+
319394
end IsKilling
320395

321396
end LieAlgebra

Mathlib/Algebra/Lie/Nilpotent.lean

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ noncomputable def nilpotencyLength : ℕ :=
325325
sInf {k | lowerCentralSeries R L M k = ⊥}
326326
#align lie_module.nilpotency_length LieModule.nilpotencyLength
327327

328+
@[simp]
328329
theorem nilpotencyLength_eq_zero_iff [IsNilpotent R L M] :
329330
nilpotencyLength R L M = 0 ↔ Subsingleton M := by
330331
let s := {k | lowerCentralSeries R L M k = ⊥}
@@ -350,6 +351,19 @@ theorem nilpotencyLength_eq_succ_iff (k : ℕ) :
350351
exact Nat.sInf_upward_closed_eq_succ_iff hs k
351352
#align lie_module.nilpotency_length_eq_succ_iff LieModule.nilpotencyLength_eq_succ_iff
352353

354+
@[simp]
355+
theorem nilpotencyLength_eq_one_iff [Nontrivial M] :
356+
nilpotencyLength R L M = 1 ↔ IsTrivial L M := by
357+
rw [nilpotencyLength_eq_succ_iff, ← trivial_iff_lower_central_eq_bot]
358+
simp
359+
360+
theorem isTrivial_of_nilpotencyLength_le_one [IsNilpotent R L M] (h : nilpotencyLength R L M ≤ 1) :
361+
IsTrivial L M := by
362+
nontriviality M
363+
cases' Nat.le_one_iff_eq_zero_or_eq_one.mp h with h h
364+
· rw [nilpotencyLength_eq_zero_iff] at h; infer_instance
365+
· rwa [nilpotencyLength_eq_one_iff] at h
366+
353367
/-- Given a non-trivial nilpotent Lie module `M` with lower central series
354368
`M = C₀ ≥ C₁ ≥ ⋯ ≥ Cₖ = ⊥`, this is the `k-1`th term in the lower central series (the last
355369
non-trivial term).
@@ -381,6 +395,35 @@ theorem nontrivial_lowerCentralSeriesLast [Nontrivial M] [IsNilpotent R L M] :
381395
exact h.2
382396
#align lie_module.nontrivial_lower_central_series_last LieModule.nontrivial_lowerCentralSeriesLast
383397

398+
theorem lowerCentralSeriesLast_le_of_not_isTrivial [IsNilpotent R L M] (h : ¬ IsTrivial L M) :
399+
lowerCentralSeriesLast R L M ≤ lowerCentralSeries R L M 1 := by
400+
rw [lowerCentralSeriesLast]
401+
replace h : 1 < nilpotencyLength R L M := by
402+
by_contra contra
403+
have := isTrivial_of_nilpotencyLength_le_one R L M (not_lt.mp contra)
404+
contradiction
405+
cases' hk : nilpotencyLength R L M with k <;> rw [hk] at h
406+
· contradiction
407+
· exact antitone_lowerCentralSeries _ _ _ (Nat.lt_succ.mp h)
408+
409+
/-- For a nilpotent Lie module `M` of a Lie algebra `L`, the first term in the lower central series
410+
of `M` contains a non-zero element on which `L` acts trivially unless the entire action is trivial.
411+
412+
Taking `M = L`, this provides a useful characterisation of Abelian-ness for nilpotent Lie
413+
algebras. -/
414+
lemma disjoint_lowerCentralSeries_maxTrivSubmodule_iff [IsNilpotent R L M] :
415+
Disjoint (lowerCentralSeries R L M 1) (maxTrivSubmodule R L M) ↔ IsTrivial L M := by
416+
refine ⟨fun h ↦ ?_, fun h ↦ by simp⟩
417+
nontriviality M
418+
by_contra contra
419+
have : lowerCentralSeriesLast R L M ≤ lowerCentralSeries R L M 1 ⊓ maxTrivSubmodule R L M :=
420+
le_inf_iff.mpr ⟨lowerCentralSeriesLast_le_of_not_isTrivial R L M contra,
421+
lowerCentralSeriesLast_le_max_triv R L M⟩
422+
suffices ¬ Nontrivial (lowerCentralSeriesLast R L M) by
423+
exact this (nontrivial_lowerCentralSeriesLast R L M)
424+
rw [h.eq_bot, le_bot_iff] at this
425+
exact this ▸ not_nontrivial _
426+
384427
theorem nontrivial_max_triv_of_isNilpotent [Nontrivial M] [IsNilpotent R L M] :
385428
Nontrivial (maxTrivSubmodule R L M) :=
386429
Set.nontrivial_mono (lowerCentralSeriesLast_le_max_triv R L M)

Mathlib/Algebra/Lie/Semisimple.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ theorem subsingleton_of_semisimple_lie_abelian [IsSemisimple R L] [h : IsLieAbel
9898
#align lie_algebra.subsingleton_of_semisimple_lie_abelian LieAlgebra.subsingleton_of_semisimple_lie_abelian
9999

100100
theorem abelian_radical_of_semisimple [IsSemisimple R L] : IsLieAbelian (radical R L) := by
101-
rw [IsSemisimple.semisimple]; exact isLieAbelian_bot R L
101+
rw [IsSemisimple.semisimple]; infer_instance
102102
#align lie_algebra.abelian_radical_of_semisimple LieAlgebra.abelian_radical_of_semisimple
103103

104104
/-- The two properties shown to be equivalent here are possible definitions for a Lie algebra

Mathlib/Algebra/Lie/Solvable.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ theorem abelian_derivedAbelianOfIdeal (I : LieIdeal R L) :
351351
IsLieAbelian (derivedAbelianOfIdeal I) := by
352352
dsimp only [derivedAbelianOfIdeal]
353353
cases' h : derivedLengthOfIdeal R L I with k
354-
· exact isLieAbelian_bot R L
354+
· infer_instance
355355
· rw [derivedSeries_of_derivedLength_succ] at h; exact h.1
356356
#align lie_algebra.abelian_derived_abelian_of_ideal LieAlgebra.abelian_derivedAbelianOfIdeal
357357

Mathlib/Algebra/Lie/Submodule.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,14 @@ theorem codisjoint_iff_coe_toSubmodule :
546546
rw [codisjoint_iff, codisjoint_iff, ← coe_toSubmodule_eq_iff, sup_coe_toSubmodule,
547547
top_coeSubmodule, ← codisjoint_iff]
548548

549+
theorem independent_iff_coe_toSubmodule {ι : Type*} {N : ι → LieSubmodule R L M} :
550+
CompleteLattice.Independent N ↔ CompleteLattice.Independent fun i ↦ (N i : Submodule R M) := by
551+
simp [CompleteLattice.independent_def, disjoint_iff_coe_toSubmodule]
552+
553+
theorem iSup_eq_top_iff_coe_toSubmodule {ι : Type*} {N : ι → LieSubmodule R L M} :
554+
⨆ i, N i = ⊤ ↔ ⨆ i, (N i : Submodule R M) = ⊤ := by
555+
rw [← iSup_coe_toSubmodule, ← top_coeSubmodule (L := L), coe_toSubmodule_eq_iff]
556+
549557
instance : AddCommMonoid (LieSubmodule R L M) where
550558
add := (· ⊔ ·)
551559
add_assoc _ _ _ := sup_assoc

Mathlib/Algebra/Lie/Weights/Basic.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,21 @@ lemma independent_weightSpace [NoZeroSMulDivisors R M] :
574574
rintro - ⟨u, hu, rfl⟩
575575
exact LieSubmodule.mapsTo_pow_toEndomorphism_sub_algebraMap _ hu
576576

577+
lemma independent_weightSpaceOf [NoZeroSMulDivisors R M] (x : L) :
578+
CompleteLattice.Independent fun (χ : R) ↦ weightSpaceOf M χ x := by
579+
rw [LieSubmodule.independent_iff_coe_toSubmodule]
580+
exact (toEndomorphism R L M x).independent_generalizedEigenspace
581+
582+
lemma finite_weightSpaceOf_ne_bot [NoZeroSMulDivisors R M] [IsNoetherian R M] (x : L) :
583+
{χ : R | weightSpaceOf M χ x ≠ ⊥}.Finite :=
584+
CompleteLattice.WellFounded.finite_ne_bot_of_independent
585+
(LieSubmodule.wellFounded_of_noetherian R L M) (independent_weightSpaceOf R L M x)
586+
587+
lemma finite_weightSpace_ne_bot [NoZeroSMulDivisors R M] [IsNoetherian R M] :
588+
{χ : L → R | weightSpace M χ ≠ ⊥}.Finite :=
589+
CompleteLattice.WellFounded.finite_ne_bot_of_independent
590+
(LieSubmodule.wellFounded_of_noetherian R L M) (independent_weightSpace R L M)
591+
577592
/-- A Lie module `M` of a Lie algebra `L` is triangularizable if the endomorhpism of `M` defined by
578593
any `x : L` is triangularizable. -/
579594
class IsTriangularizable : Prop :=

Mathlib/LinearAlgebra/Eigenspace/Basic.lean

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,28 @@ lemma mapsTo_iSup_generalizedEigenspace_of_comm {f g : End R M} (h : Commute f g
295295
rintro x ⟨k, hk⟩
296296
exact ⟨k, f.mapsTo_generalizedEigenspace_of_comm h μ k hk⟩
297297

298+
/-- The restriction of `f - μ • 1` to the `k`-fold generalized `μ`-eigenspace is nilpotent. -/
299+
lemma isNilpotent_restrict_sub_algebraMap (f : End R M) (μ : R) (k : ℕ)
300+
(h : MapsTo (f - algebraMap R (End R M) μ)
301+
(f.generalizedEigenspace μ k) (f.generalizedEigenspace μ k) :=
302+
mapsTo_generalizedEigenspace_of_comm (Algebra.mul_sub_algebraMap_commutes f μ) μ k) :
303+
IsNilpotent ((f - algebraMap R (End R M) μ).restrict h) := by
304+
use k
305+
ext
306+
simp [LinearMap.restrict_apply, LinearMap.pow_restrict _]
307+
308+
/-- The restriction of `f - μ • 1` to the generalized `μ`-eigenspace is nilpotent. -/
309+
lemma isNilpotent_restrict_iSup_sub_algebraMap [IsNoetherian R M] (f : End R M) (μ : R)
310+
(h : MapsTo (f - algebraMap R (End R M) μ)
311+
↑(⨆ k, f.generalizedEigenspace μ k) ↑(⨆ k, f.generalizedEigenspace μ k) :=
312+
mapsTo_iSup_generalizedEigenspace_of_comm (Algebra.mul_sub_algebraMap_commutes f μ) μ) :
313+
IsNilpotent ((f - algebraMap R (End R M) μ).restrict h) := by
314+
obtain ⟨l, hl⟩ : ∃ l, ⨆ k, f.generalizedEigenspace μ k = f.generalizedEigenspace μ l :=
315+
⟨_, maximalGeneralizedEigenspace_eq f μ⟩
316+
use l
317+
ext ⟨x, hx⟩
318+
simpa [hl, LinearMap.restrict_apply, LinearMap.pow_restrict _] using hx
319+
298320
lemma disjoint_generalizedEigenspace [NoZeroSMulDivisors R M]
299321
(f : End R M) {μ₁ μ₂ : R} (hμ : μ₁ ≠ μ₂) (k l : ℕ) :
300322
Disjoint (f.generalizedEigenspace μ₁ k) (f.generalizedEigenspace μ₂ l) := by

0 commit comments

Comments
 (0)