Skip to content

Commit 11c160d

Browse files
committed
feat: port Algebra.Lie.Semisimple (#4680)
1 parent 3452e3d commit 11c160d

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ import Mathlib.Algebra.Lie.IdealOperations
211211
import Mathlib.Algebra.Lie.Matrix
212212
import Mathlib.Algebra.Lie.NonUnitalNonAssocAlgebra
213213
import Mathlib.Algebra.Lie.OfAssociative
214+
import Mathlib.Algebra.Lie.Semisimple
214215
import Mathlib.Algebra.Lie.SkewAdjoint
215216
import Mathlib.Algebra.Lie.Solvable
216217
import Mathlib.Algebra.Lie.Subalgebra
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/-
2+
Copyright (c) 2021 Oliver Nash. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Oliver Nash
5+
6+
! This file was ported from Lean 3 source module algebra.lie.semisimple
7+
! leanprover-community/mathlib commit 356447fe00e75e54777321045cdff7c9ea212e60
8+
! Please do not edit these lines, except to modify the commit id
9+
! if you have ported upstream changes.
10+
-/
11+
import Mathlib.Algebra.Lie.Solvable
12+
13+
/-!
14+
# Semisimple Lie algebras
15+
16+
The famous Cartan-Dynkin-Killing classification of semisimple Lie algebras renders them one of the
17+
most important classes of Lie algebras. In this file we define simple and semisimple Lie algebras
18+
and prove some basic related results.
19+
20+
## Main definitions
21+
22+
* `LieModule.IsIrreducible`
23+
* `LieAlgebra.IsSimple`
24+
* `LieAlgebra.IsSemisimple`
25+
* `LieAlgebra.isSemisimple_iff_no_solvable_ideals`
26+
* `LieAlgebra.isSemisimple_iff_no_abelian_ideals`
27+
* `LieAlgebra.abelian_radical_iff_solvable_is_abelian`
28+
29+
## Tags
30+
31+
lie algebra, radical, simple, semisimple
32+
-/
33+
34+
35+
universe u v w w₁ w₂
36+
37+
/-- A Lie module is irreducible if it is zero or its only non-trivial Lie submodule is itself. -/
38+
class LieModule.IsIrreducible (R : Type u) (L : Type v) (M : Type w) [CommRing R] [LieRing L]
39+
[LieAlgebra R L] [AddCommGroup M] [Module R M] [LieRingModule L M] [LieModule R L M] :
40+
Prop where
41+
Irreducible : ∀ N : LieSubmodule R L M, N ≠ ⊥ → N = ⊤
42+
#align lie_module.is_irreducible LieModule.IsIrreducible
43+
44+
namespace LieAlgebra
45+
46+
variable (R : Type u) (L : Type v)
47+
48+
variable [CommRing R] [LieRing L] [LieAlgebra R L]
49+
50+
/-- A Lie algebra is simple if it is irreducible as a Lie module over itself via the adjoint
51+
action, and it is non-Abelian. -/
52+
class IsSimple extends LieModule.IsIrreducible R L L : Prop where
53+
non_abelian : ¬IsLieAbelian L
54+
#align lie_algebra.is_simple LieAlgebra.IsSimple
55+
56+
/-- A semisimple Lie algebra is one with trivial radical.
57+
58+
Note that the label 'semisimple' is apparently not universally agreed
59+
[upon](https://mathoverflow.net/questions/149391/on-radicals-of-a-lie-algebra#comment383669_149391)
60+
for general coefficients. We are following [Seligman, page 15](seligman1967) and using the label
61+
for the weakest of the various properties which are all equivalent over a field of characteristic
62+
zero. -/
63+
class IsSemisimple : Prop where
64+
semisimple : radical R L = ⊥
65+
#align lie_algebra.is_semisimple LieAlgebra.IsSemisimple
66+
67+
theorem isSemisimple_iff_no_solvable_ideals :
68+
IsSemisimple R L ↔ ∀ I : LieIdeal R L, IsSolvable R I → I = ⊥ :=
69+
fun h => sSup_eq_bot.mp h.semisimple, fun h => ⟨sSup_eq_bot.mpr h⟩⟩
70+
#align lie_algebra.is_semisimple_iff_no_solvable_ideals LieAlgebra.isSemisimple_iff_no_solvable_ideals
71+
72+
theorem isSemisimple_iff_no_abelian_ideals :
73+
IsSemisimple R L ↔ ∀ I : LieIdeal R L, IsLieAbelian I → I = ⊥ := by
74+
rw [isSemisimple_iff_no_solvable_ideals]
75+
constructor <;> intro h₁ I h₂
76+
· haveI : IsLieAbelian I := h₂; apply h₁; exact LieAlgebra.ofAbelianIsSolvable R I
77+
· haveI : IsSolvable R I := h₂; rw [← abelian_of_solvable_ideal_eq_bot_iff]; apply h₁
78+
exact abelian_derivedAbelianOfIdeal I
79+
#align lie_algebra.is_semisimple_iff_no_abelian_ideals LieAlgebra.isSemisimple_iff_no_abelian_ideals
80+
81+
@[simp]
82+
theorem center_eq_bot_of_semisimple [h : IsSemisimple R L] : center R L = ⊥ := by
83+
rw [isSemisimple_iff_no_abelian_ideals] at h; apply h; infer_instance
84+
#align lie_algebra.center_eq_bot_of_semisimple LieAlgebra.center_eq_bot_of_semisimple
85+
86+
/-- A simple Lie algebra is semisimple. -/
87+
instance (priority := 100) isSemisimpleOfIsSimple [h : IsSimple R L] : IsSemisimple R L := by
88+
rw [isSemisimple_iff_no_abelian_ideals]
89+
intro I hI
90+
obtain @⟨⟨h₁⟩, h₂⟩ := id h
91+
by_contra contra
92+
rw [h₁ I contra, lie_abelian_iff_equiv_lie_abelian LieIdeal.topEquiv] at hI
93+
exact h₂ hI
94+
#align lie_algebra.is_semisimple_of_is_simple LieAlgebra.isSemisimpleOfIsSimple
95+
96+
/-- A semisimple Abelian Lie algebra is trivial. -/
97+
theorem subsingleton_of_semisimple_lie_abelian [IsSemisimple R L] [h : IsLieAbelian L] :
98+
Subsingleton L := by
99+
rw [isLieAbelian_iff_center_eq_top R L, center_eq_bot_of_semisimple] at h
100+
exact (LieSubmodule.subsingleton_iff R L L).mp (subsingleton_of_bot_eq_top h)
101+
#align lie_algebra.subsingleton_of_semisimple_lie_abelian LieAlgebra.subsingleton_of_semisimple_lie_abelian
102+
103+
theorem abelian_radical_of_semisimple [IsSemisimple R L] : IsLieAbelian (radical R L) := by
104+
rw [IsSemisimple.semisimple]; exact isLieAbelian_bot R L
105+
#align lie_algebra.abelian_radical_of_semisimple LieAlgebra.abelian_radical_of_semisimple
106+
107+
/-- The two properties shown to be equivalent here are possible definitions for a Lie algebra
108+
to be reductive.
109+
110+
Note that there is absolutely [no agreement](https://mathoverflow.net/questions/284713/) on what
111+
the label 'reductive' should mean when the coefficients are not a field of characteristic zero. -/
112+
theorem abelian_radical_iff_solvable_is_abelian [IsNoetherian R L] :
113+
IsLieAbelian (radical R L) ↔ ∀ I : LieIdeal R L, IsSolvable R I → IsLieAbelian I := by
114+
constructor
115+
· rintro h₁ I h₂
116+
rw [LieIdeal.solvable_iff_le_radical] at h₂
117+
exact (LieIdeal.homOfLe_injective h₂).isLieAbelian h₁
118+
· intro h; apply h; infer_instance
119+
#align lie_algebra.abelian_radical_iff_solvable_is_abelian LieAlgebra.abelian_radical_iff_solvable_is_abelian
120+
121+
theorem ad_ker_eq_bot_of_semisimple [IsSemisimple R L] : (ad R L).ker = ⊥ := by simp
122+
#align lie_algebra.ad_ker_eq_bot_of_semisimple LieAlgebra.ad_ker_eq_bot_of_semisimple
123+
124+
end LieAlgebra

0 commit comments

Comments
 (0)