|
| 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 hψ |
| 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