Skip to content

Commit f09d529

Browse files
jcommelinocfnash
andcommitted
feat(Algebra/Lie): existence of Cartan subalgebras (#12297)
Co-authored-by: Oliver Nash <github@olivernash.org>
1 parent bd932a4 commit f09d529

File tree

4 files changed

+400
-0
lines changed

4 files changed

+400
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ import Mathlib.Algebra.Jordan.Basic
324324
import Mathlib.Algebra.Lie.Abelian
325325
import Mathlib.Algebra.Lie.BaseChange
326326
import Mathlib.Algebra.Lie.Basic
327+
import Mathlib.Algebra.Lie.CartanExists
327328
import Mathlib.Algebra.Lie.CartanMatrix
328329
import Mathlib.Algebra.Lie.CartanSubalgebra
329330
import Mathlib.Algebra.Lie.Character

Mathlib/Algebra/Lie/CartanExists.lean

Lines changed: 372 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,372 @@
1+
/-
2+
Copyright (c) 2024 Johan Commelin. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Johan Commelin
5+
-/
6+
7+
import Mathlib.Algebra.Lie.CartanSubalgebra
8+
import Mathlib.Algebra.Lie.Rank
9+
10+
/-!
11+
# Existence of Cartan subalgebras
12+
13+
In this file we prove existence of Cartan subalgebras in finite-dimensional Lie algebras,
14+
following [barnes1967].
15+
16+
## Main results
17+
18+
* `exists_isCartanSubalgebra_of_finrank_le_card`:
19+
A Lie algebra `L` over a field `K` has a Cartan subalgebra,
20+
provided that the dimension of `L` over `K` is less than or equal to the cardinality of `K`.
21+
* `exists_isCartanSubalgebra`:
22+
A finite-dimensional Lie algebra `L` over an infinite field `K` has a Cartan subalgebra.
23+
24+
## References
25+
26+
* [barnes1967]: "On Cartan subalgebras of Lie algebras" by D.W. Barnes.
27+
28+
-/
29+
30+
namespace LieAlgebra
31+
32+
section CommRing
33+
34+
variable {K R L M : Type*}
35+
variable [Field K] [CommRing R] [Nontrivial R]
36+
variable [LieRing L] [LieAlgebra K L] [LieAlgebra R L]
37+
variable [AddCommGroup M] [Module R M] [LieRingModule L M] [LieModule R L M]
38+
variable [Module.Finite K L]
39+
variable [Module.Finite R L] [Module.Free R L]
40+
variable [Module.Finite R M] [Module.Free R M]
41+
42+
open FiniteDimensional LieSubalgebra Module.Free Polynomial
43+
44+
variable (K)
45+
46+
namespace engel_isBot_of_isMin
47+
48+
/-!
49+
## Implementation details for the proof of `LieAlgebra.engel_isBot_of_isMin`
50+
51+
In this section we provide some auxiliary definitions and lemmas
52+
that are used in the proof of `LieAlgebra.engel_isBot_of_isMin`,
53+
which is the following statement:
54+
55+
Let `L` be a Lie algebra of dimension `n` over a field `K` with at least `n` elements.
56+
Given a Lie subalgebra `U` of `L`, and an element `x ∈ U` such that `U ≤ engel K x`.
57+
Suppose that `engel K x` is minimal amongst the Engel subalgebras `engel K y` for `y ∈ U`.
58+
Then `engel K x ≤ engel K y` for all `y ∈ U`.
59+
60+
We follow the proof strategy of Lemma 2 in [barnes1967].
61+
-/
62+
63+
variable (R M)
64+
65+
variable (x y : L)
66+
67+
open LieModule LinearMap
68+
69+
local notation "φ" => LieModule.toEndomorphism R L M
70+
71+
/-- Let `x` and `y` be elements of a Lie `R`-algebra `L`, and `M` a Lie module over `M`.
72+
Then the characteristic polynomials of the family of endomorphisms `⁅r • y + x, _⁆` of `M`
73+
have coefficients that are polynomial in `r : R`.
74+
In other words, we obtain a polynomial over `R[X]`
75+
that specializes to the characteristic polynomial of `⁅r • y + x, _⁆` under the map `X ↦ r`.
76+
This polynomial is captured in `lieCharpoly R M x y`. -/
77+
private noncomputable
78+
def lieCharpoly : Polynomial R[X] :=
79+
letI bL := chooseBasis R L
80+
(polyCharpoly (LieHom.toLinearMap φ) bL).map <| RingHomClass.toRingHom <|
81+
MvPolynomial.aeval fun i ↦ C (bL.repr y i) * X + C (bL.repr x i)
82+
83+
lemma lieCharpoly_monic : (lieCharpoly R M x y).Monic :=
84+
(polyCharpoly_monic _ _).map _
85+
86+
lemma lieCharpoly_natDegree : (lieCharpoly R M x y).natDegree = finrank R M := by
87+
rw [lieCharpoly, (polyCharpoly_monic _ _).natDegree_map, polyCharpoly_natDegree]
88+
89+
variable {R} in
90+
lemma lieCharpoly_map_eval (r : R) :
91+
(lieCharpoly R M x y).map (evalRingHom r) = (φ (r • y + x)).charpoly := by
92+
rw [lieCharpoly, map_map]
93+
set b := chooseBasis R L
94+
have aux : (fun i ↦ (b.repr y) i * r + (b.repr x) i) = b.repr (r • y + x) := by
95+
ext i; simp [mul_comm r]
96+
simp_rw [← coe_aeval_eq_evalRingHom, ← AlgHom.comp_toRingHom, MvPolynomial.comp_aeval,
97+
map_add, map_mul, aeval_C, Algebra.id.map_eq_id, RingHom.id_apply, aeval_X, aux,
98+
MvPolynomial.coe_aeval_eq_eval, polyCharpoly_map_eq_charpoly, LieHom.coe_toLinearMap]
99+
100+
lemma lieCharpoly_coeff_natDegree (i j : ℕ) (hij : i + j = finrank R M) :
101+
((lieCharpoly R M x y).coeff i).natDegree ≤ j := by
102+
classical
103+
rw [← mul_one j, lieCharpoly, coeff_map]
104+
apply MvPolynomial.aeval_natDegree_le
105+
· apply (polyCharpoly_coeff_isHomogeneous φ (chooseBasis R L) _ _ hij).totalDegree_le
106+
intro k
107+
apply Polynomial.natDegree_add_le_of_degree_le
108+
· apply (Polynomial.natDegree_C_mul_le _ _).trans
109+
simp only [natDegree_X, le_rfl]
110+
· simp only [natDegree_C, zero_le]
111+
112+
end engel_isBot_of_isMin
113+
114+
end CommRing
115+
116+
section Field
117+
118+
variable {K L : Type*} [Field K] [LieRing L] [LieAlgebra K L] [Module.Finite K L]
119+
120+
open FiniteDimensional LieSubalgebra LieSubmodule Polynomial Cardinal LieModule engel_isBot_of_isMin
121+
122+
/-- Let `L` be a Lie algebra of dimension `n` over a field `K` with at least `n` elements.
123+
Given a Lie subalgebra `U` of `L`, and an element `x ∈ U` such that `U ≤ engel K x`.
124+
Suppose that `engel K x` is minimal amongst the Engel subalgebras `engel K y` for `y ∈ U`.
125+
Then `engel K x ≤ engel K y` for all `y ∈ U`.
126+
127+
Lemma 2 in [barnes1967]. -/
128+
lemma engel_isBot_of_isMin (hLK : finrank K L ≤ #K) (U : LieSubalgebra K L)
129+
(E : {engel K x | x ∈ U}) (hUle : U ≤ E) (hmin : IsMin E) :
130+
IsBot E := by
131+
rcases E with ⟨_, x, hxU, rfl⟩
132+
rintro ⟨_, y, hyU, rfl⟩
133+
-- It will be useful to repackage the Engel subalgebras
134+
set Ex : {engel K x | x ∈ U} := ⟨engel K x, x, hxU, rfl⟩
135+
set Ey : {engel K y | y ∈ U} := ⟨engel K y, y, hyU, rfl⟩
136+
replace hUle : U ≤ Ex := hUle
137+
replace hmin : ∀ E, E ≤ Ex → Ex ≤ E := @hmin
138+
-- We also repackage the Engel subalgebra `engel K x`
139+
-- as Lie submodule `E` of `L` over the Lie algebra `U`.
140+
let E : LieSubmodule K U L :=
141+
{ engel K x with
142+
lie_mem := by rintro ⟨u, hu⟩ y hy; exact (engel K x).lie_mem (hUle hu) hy }
143+
-- We may and do assume that `x ≠ 0`, since otherwise the statement is trivial.
144+
obtain rfl|hx₀ := eq_or_ne x 0
145+
· simpa [Ex, Ey] using hmin Ey
146+
-- We denote by `Q` the quotient `L / E`, and by `r` the dimension of `E`.
147+
let Q := L ⧸ E
148+
let r := finrank K E
149+
-- If `r = finrank K L`, then `E = L`, and the statement is trivial.
150+
obtain hr|hr : r = finrank K L ∨ r < finrank K L := (Submodule.finrank_le _).eq_or_lt
151+
· suffices engel K y ≤ engel K x from hmin Ey this
152+
suffices engel K x = ⊤ by simp_rw [this, le_top]
153+
apply LieSubalgebra.to_submodule_injective
154+
apply Submodule.eq_top_of_finrank_eq hr
155+
-- So from now on, we assume that `r < finrank K L`.
156+
-- We denote by `x'` and `y'` the elements `x` and `y` viewed as terms of `U`.
157+
set x' : U := ⟨x, hxU⟩
158+
set y' : U := ⟨y, hyU⟩
159+
-- Let `u : U` denote `y - x`.
160+
let u : U := y' - x'
161+
-- We denote by `χ r` the characteristic polynomial of `⁅r • u + x, _⁆`
162+
-- viewed as endomorphism of `E`. Note that `χ` is polynomial in its argument `r`.
163+
-- Similarly: `ψ r` is the characteristic polynomial of `⁅r • u + x, _⁆`
164+
-- viewed as endomorphism of `Q`. Note that `ψ` is polynomial in its argument `r`.
165+
let χ : Polynomial (K[X]) := lieCharpoly K E x' u
166+
let ψ : Polynomial (K[X]) := lieCharpoly K Q x' u
167+
-- It suffices to show that `χ` is the monomial `X ^ r`.
168+
suffices χ = X ^ r by
169+
-- Indeed, by evaluating the coefficients at `1`
170+
apply_fun (fun p ↦ p.map (evalRingHom 1)) at this
171+
-- we find that the characteristic polynomial `χ 1` of `⁅y, _⁆` is equal to `X ^ r`
172+
simp_rw [Polynomial.map_pow, map_X, χ, lieCharpoly_map_eval, one_smul, u, sub_add_cancel,
173+
-- and therefore the endomorphism `⁅y, _⁆` acts nilpotently on `E`.
174+
r, LinearMap.charpoly_eq_X_pow_iff,
175+
Subtype.ext_iff, coe_toEndomorphism_pow, ZeroMemClass.coe_zero] at this
176+
-- We ultimately want to show `engel K x ≤ engel K y`
177+
intro z hz
178+
-- which holds by definition of Engel subalgebra and the nilpotency that we just established.
179+
rw [mem_engel_iff]
180+
exact this ⟨z, hz⟩
181+
-- To show that `χ = X ^ r`, it suffices to show that all coefficients in degrees `< r` are `0`.
182+
suffices ∀ i < r, χ.coeff i = 0 by
183+
simp_rw [r, ← lieCharpoly_natDegree K E x' u] at this ⊢
184+
rw [(lieCharpoly_monic K E x' u).eq_X_pow_iff_natDegree_le_natTrailingDegree]
185+
exact le_natTrailingDegree (lieCharpoly_monic K E x' u).ne_zero this
186+
-- Let us consider the `i`-th coefficient of `χ`, for `i < r`.
187+
intro i hi
188+
-- We separately consider the case `i = 0`.
189+
obtain rfl|hi0 := eq_or_ne i 0
190+
· -- `The polynomial `coeff χ 0` is zero if it evaluates to zero on all elements of `K`,
191+
-- provided that its degree is stictly less than `#K`.
192+
apply eq_zero_of_forall_eval_zero_of_natDegree_lt_card _ _ ?deg
193+
case deg =>
194+
-- We need to show `(natDegree (coeff χ 0)) < #K` and know that `finrank K L ≤ #K`
195+
apply lt_of_lt_of_le _ hLK
196+
rw [Nat.cast_lt]
197+
-- So we are left with showing `natDegree (coeff χ 0) < finrank K L`
198+
apply lt_of_le_of_lt _ hr
199+
apply lieCharpoly_coeff_natDegree _ _ _ _ 0 r (zero_add r)
200+
-- Fix an element of `K`.
201+
intro α
202+
-- We want to show that `α` is a root of `coeff χ 0`.
203+
-- So we need to show that there is a `z ≠ 0` in `E` satisfying `⁅α • u + x, z⁆ = 0`.
204+
rw [← coe_evalRingHom, ← coeff_map, lieCharpoly_map_eval,
205+
← constantCoeff_apply, LinearMap.charpoly_constantCoeff_eq_zero_iff]
206+
-- We consider `z = α • u + x`, and split into the cases `z = 0` and `z ≠ 0`.
207+
let z := α • u + x'
208+
obtain hz₀|hz₀ := eq_or_ne z 0
209+
· -- If `z = 0`, then `⁅α • u + x, x⁆` vanishes and we use our assumption `x ≠ 0`.
210+
refine ⟨⟨x, self_mem_engel K x⟩, ?_, ?_⟩
211+
· simpa [coe_bracket_of_module, ne_eq, Submodule.mk_eq_zero] using hx₀
212+
· dsimp only [z] at hz₀
213+
simp only [coe_bracket_of_module, hz₀, LieHom.map_zero, LinearMap.zero_apply]
214+
-- If `z ≠ 0`, then `⁅α • u + x, z⁆` vanishes per axiom of Lie algebras
215+
refine ⟨⟨z, hUle z.2⟩, ?_, ?_⟩
216+
· simpa only [coe_bracket_of_module, ne_eq, Submodule.mk_eq_zero, Subtype.ext_iff] using hz₀
217+
· show ⁅z, _⁆ = (0 : E)
218+
ext
219+
exact lie_self z.1
220+
-- We are left with the case `i ≠ 0`, and want to show `coeff χ i = 0`.
221+
-- We will do this once again by showing that `coeff χ i` vanishes
222+
-- on a sufficiently large subset `s` of `K`.
223+
-- But we first need to get our hands on that subset `s`.
224+
-- We start by observing that `ψ` has non-trivial constant coefficient.
225+
have hψ : constantCoeff ψ ≠ 0 := by
226+
-- Suppose that `ψ` in fact has trivial constant coefficient.
227+
intro H
228+
-- Then there exists a `z ≠ 0` in `Q` such that `⁅x, z⁆ = 0`.
229+
obtain ⟨z, hz0, hxz⟩ : ∃ z : Q, z ≠ 0 ∧ ⁅x', z⁆ = 0 := by
230+
-- Indeed, if the constant coefficient of `ψ` is trivial,
231+
-- then `0` is a root of the characteristic polynomial of `⁅0 • u + x, _⁆` acting on `Q`,
232+
-- and hence we find an eigenvector `z` as desired.
233+
apply_fun (evalRingHom 0) at H
234+
rw [constantCoeff_apply, ← coeff_map, lieCharpoly_map_eval,
235+
← constantCoeff_apply, map_zero, LinearMap.charpoly_constantCoeff_eq_zero_iff] at H
236+
simpa only [coe_bracket_of_module, ne_eq, zero_smul, zero_add, toEndomorphism_apply_apply]
237+
using H
238+
-- It suffices to show `z = 0` (in `Q`) to obtain a contradiction.
239+
apply hz0
240+
-- We replace `z : Q` by a representative in `L`.
241+
obtain ⟨z, rfl⟩ := LieSubmodule.Quotient.surjective_mk' E z
242+
-- The assumption `⁅x, z⁆ = 0` is equivalent to `⁅x, z⁆ ∈ E`.
243+
have : ⁅x, z⁆ ∈ E := by rwa [← LieSubmodule.Quotient.mk_eq_zero']
244+
-- From this we deduce that there exists an `n` such that `⁅x, _⁆ ^ n` vanishes on `⁅x, z⁆`.
245+
-- On the other hand, our goal is to show `z = 0` in `Q`,
246+
-- which is equivalent to showing that `⁅x, _⁆ ^ n` vanishes on `z`, for some `n`.
247+
simp only [coe_bracket_of_module, LieSubmodule.mem_mk_iff', mem_coe_submodule, mem_engel_iff,
248+
LieSubmodule.Quotient.mk'_apply, LieSubmodule.Quotient.mk_eq_zero', E, Q] at this ⊢
249+
-- Hence we win.
250+
obtain ⟨n, hn⟩ := this
251+
use n+1
252+
rwa [pow_succ]
253+
-- Now we find a subset `s` of `K` of size `≥ r`
254+
-- such that `constantCoeff ψ` takes non-zero values on all of `s`.
255+
-- This turns out to be the subset that we alluded to earlier.
256+
obtain ⟨s, hs, hsψ⟩ : ∃ s : Finset K, r ≤ s.card ∧ ∀ α ∈ s, (constantCoeff ψ).eval α ≠ 0 := by
257+
classical
258+
-- Let `t` denote the set of roots of `constantCoeff ψ`.
259+
let t := (constantCoeff ψ).roots.toFinset
260+
-- We show that `t` has cardinality at most `finrank K L - r`.
261+
have ht : t.card ≤ finrank K L - r := by
262+
refine (Multiset.toFinset_card_le _).trans ?_
263+
refine (card_roots' _).trans ?_
264+
rw [constantCoeff_apply]
265+
-- Indeed, `constantCoeff ψ` has degree at most `finrank K Q = finrank K L - r`.
266+
apply lieCharpoly_coeff_natDegree
267+
suffices finrank K Q + r = finrank K L by rw [← this, zero_add, Nat.add_sub_cancel]
268+
apply Submodule.finrank_quotient_add_finrank
269+
-- Hence there exists a subset of size `≥ r` in the complement of `t`,
270+
-- and `constantCoeff ψ` takes non-zero values on all of this subset.
271+
obtain ⟨s, hs⟩ := exists_finset_le_card K _ hLK
272+
use s \ t
273+
refine ⟨?_, ?_⟩
274+
· refine le_trans ?_ (Finset.le_card_sdiff _ _)
275+
omega
276+
· intro α hα
277+
simp only [Finset.mem_sdiff, Multiset.mem_toFinset, mem_roots', IsRoot.def, not_and, t] at hα
278+
exact hα.2
279+
-- So finally we can continue our proof strategy by showing that `coeff χ i` vanishes on `s`.
280+
apply eq_zero_of_natDegree_lt_card_of_eval_eq_zero' _ s _ ?hcard
281+
case hcard =>
282+
-- We need to show that `natDegree (coeff χ i) < s.card`
283+
-- Which follows from our assumptions `i < r` and `r ≤ s.card`
284+
-- and the fact that the degree of `coeff χ i` is less than or equal to `r - i`.
285+
apply lt_of_le_of_lt (lieCharpoly_coeff_natDegree _ _ _ _ i (r - i) _)
286+
· omega
287+
· dsimp only [r] at hi ⊢
288+
rw [Nat.add_sub_cancel' hi.le]
289+
-- We need to show that for all `α ∈ s`, the polynomial `coeff χ i` evaluates to zero at `α`.
290+
intro α hα
291+
-- Once again, we are left with showing that `⁅y, _⁆` acts nilpotently on `E`.
292+
rw [← coe_evalRingHom, ← coeff_map, lieCharpoly_map_eval,
293+
(LinearMap.charpoly_eq_X_pow_iff _).mpr, coeff_X_pow, if_neg hi.ne]
294+
-- To do so, it suffices to show that the Engel subalgebra of `v = a • u + x` is contained in `E`.
295+
let v := α • u + x'
296+
suffices engel K (v : L) ≤ engel K x by
297+
-- Indeed, in that case the minimality assumption on `E` implies
298+
-- that `E` is contained in the Engel subalgebra of `v`.
299+
replace this : engel K x ≤ engel K (v : L) := (hmin ⟨_, v, v.2, rfl⟩ this).ge
300+
intro z
301+
-- And so we are done, by the definition of Engel subalgebra.
302+
simpa only [mem_engel_iff, Subtype.ext_iff, coe_toEndomorphism_pow] using this z.2
303+
-- Now we are in good shape.
304+
-- Fix an element `z` in the Engel subalgebra of `y`.
305+
intro z hz
306+
-- We need to show that `z` is in `E`, or alternatively that `z = 0` in `Q`.
307+
show z ∈ E
308+
rw [← LieSubmodule.Quotient.mk_eq_zero]
309+
-- We denote the image of `z` in `Q` by `z'`.
310+
set z' : Q := LieSubmodule.Quotient.mk' E z
311+
-- First we observe that `z'` is killed by a power of `⁅v, _⁆`.
312+
have hz' : ∃ n : ℕ, (toEndomorphism K U Q v ^ n) z' = 0 := by
313+
rw [mem_engel_iff] at hz
314+
obtain ⟨n, hn⟩ := hz
315+
use n
316+
apply_fun LieSubmodule.Quotient.mk' E at hn
317+
rw [LieModuleHom.map_zero] at hn
318+
rw [← hn]
319+
clear hn
320+
induction n with
321+
| zero => simp only [Nat.zero_eq, pow_zero, LinearMap.one_apply]
322+
| succ n ih => rw [pow_succ', pow_succ', LinearMap.mul_apply, ih]; rfl
323+
classical
324+
-- Now let `n` be the smallest power such that `⁅v, _⁆ ^ n` kills `z'`.
325+
set n := Nat.find hz' with _hn
326+
have hn : (toEndomorphism K U Q v ^ n) z' = 0 := Nat.find_spec hz'
327+
-- If `n = 0`, then we are done.
328+
obtain hn₀|⟨k, hk⟩ : n = 0 ∨ ∃ k, n = k + 1 := by cases n <;> simp
329+
· simpa only [hn₀, pow_zero, LinearMap.one_apply] using hn
330+
-- If `n = k + 1`, then we can write `⁅v, _⁆ ^ n = ⁅v, _⁆ ∘ ⁅v, _⁆ ^ k`.
331+
-- Recall that `constantCoeff ψ` is non-zero on `α`, and `v = α • u + x`.
332+
specialize hsψ α hα
333+
-- Hence `⁅v, _⁆` acts injectively on `Q`.
334+
rw [← coe_evalRingHom, constantCoeff_apply, ← coeff_map, lieCharpoly_map_eval,
335+
← constantCoeff_apply, ne_eq, LinearMap.charpoly_constantCoeff_eq_zero_iff] at hsψ
336+
-- We deduce from this that `z' = 0`, arguing by contraposition.
337+
contrapose! hsψ
338+
-- Indeed `⁅v, _⁆` kills `⁅v, _⁆ ^ k` applied to `z'`.
339+
use (toEndomorphism K U Q v ^ k) z'
340+
refine ⟨?_, ?_⟩
341+
· -- And `⁅v, _⁆ ^ k` applied to `z'` is non-zero by definition of `n`.
342+
apply Nat.find_min hz'; omega
343+
· rw [← hn, hk, pow_succ', LinearMap.mul_apply]
344+
345+
variable (K L)
346+
347+
lemma exists_isCartanSubalgebra_engel_of_finrank_le_card (h : finrank K L ≤ #K) :
348+
∃ x : L, IsCartanSubalgebra (engel K x) := by
349+
obtain ⟨x, hx⟩ := exists_isRegular_of_finrank_le_card K L h
350+
use x
351+
refine ⟨?_, normalizer_engel _ _⟩
352+
apply isNilpotent_of_forall_le_engel
353+
intro y hy
354+
set Ex : {engel K z | z ∈ engel K x} := ⟨engel K x, x, self_mem_engel _ _, rfl⟩
355+
suffices IsBot Ex from @this ⟨engel K y, y, hy, rfl⟩
356+
apply engel_isBot_of_isMin h (engel K x) Ex le_rfl
357+
rintro ⟨_, y, hy, rfl⟩ hyx
358+
suffices finrank K (engel K x) ≤ finrank K (engel K y) by
359+
suffices engel K y = engel K x from this.ge
360+
apply LieSubalgebra.to_submodule_injective
361+
exact eq_of_le_of_finrank_le hyx this
362+
rw [(isRegular_iff_finrank_engel_eq_rank K x).mp hx]
363+
apply rank_le_finrank_engel
364+
365+
lemma exists_isCartanSubalgebra_engel [Infinite K] :
366+
∃ x : L, IsCartanSubalgebra (engel K x) := by
367+
apply exists_isCartanSubalgebra_engel_of_finrank_le_card
368+
exact (Cardinal.nat_lt_aleph0 _).le.trans <| Cardinal.infinite_iff.mp ‹Infinite K›
369+
370+
end Field
371+
372+
end LieAlgebra

0 commit comments

Comments
 (0)