@@ -3,13 +3,15 @@ Copyright (c) 2021 Oliver Nash. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
44Authors: Oliver Nash
55-/
6+ import Mathlib.Algebra.Ring.Divisibility.Lemmas
67import Mathlib.Algebra.Lie.Nilpotent
78import Mathlib.Algebra.Lie.TensorProduct
89import Mathlib.Algebra.Lie.Character
910import Mathlib.Algebra.Lie.Engel
1011import Mathlib.Algebra.Lie.CartanSubalgebra
1112import Mathlib.LinearAlgebra.Eigenspace.Basic
1213import Mathlib.LinearAlgebra.TensorProduct.Tower
14+ import Mathlib.RingTheory.Artinian
1315
1416#align_import algebra.lie.weights from "leanprover-community/mathlib" @"6b0169218d01f2837d79ea2784882009a0da1aa1"
1517
@@ -249,6 +251,139 @@ instance [LieAlgebra.IsNilpotent R L] [IsNoetherian R M] :
249251 IsNilpotent R L (weightSpace M (0 : L → R)) :=
250252 isNilpotent_iff_forall'.mpr <| isNilpotent_toEndomorphism_weightSpace_zero M
251253
254+ variable (R L)
255+
256+ @[simp]
257+ lemma weightSpace_zero_normalizer_eq_self [LieAlgebra.IsNilpotent R L] :
258+ (weightSpace M (0 : L → R)).normalizer = weightSpace M 0 := by
259+ refine' le_antisymm _ (LieSubmodule.le_normalizer _)
260+ intro m hm
261+ rw [LieSubmodule.mem_normalizer] at hm
262+ simp only [mem_weightSpace, Pi.zero_apply, zero_smul, sub_zero] at hm ⊢
263+ intro y
264+ obtain ⟨k, hk⟩ := hm y y
265+ use k + 1
266+ simpa [pow_succ', LinearMap.mul_eq_comp]
267+
268+ lemma iSup_ucs_le_weightSpace_zero [LieAlgebra.IsNilpotent R L] :
269+ ⨆ k, (⊥ : LieSubmodule R L M).ucs k ≤ weightSpace M (0 : L → R) := by
270+ simpa using LieSubmodule.ucs_le_of_normalizer_eq_self (weightSpace_zero_normalizer_eq_self R L M)
271+
272+ /-- See also `LieModule.iInf_lowerCentralSeries_eq_posFittingComp`. -/
273+ lemma iSup_ucs_eq_weightSpace_zero [LieAlgebra.IsNilpotent R L] [IsNoetherian R M] :
274+ ⨆ k, (⊥ : LieSubmodule R L M).ucs k = weightSpace M (0 : L → R) := by
275+ obtain ⟨k, hk⟩ := (LieSubmodule.isNilpotent_iff_exists_self_le_ucs
276+ <| weightSpace M (0 : L → R)).mp inferInstance
277+ refine le_antisymm (iSup_ucs_le_weightSpace_zero R L M) (le_trans hk ?_)
278+ exact le_iSup (fun k ↦ (⊥ : LieSubmodule R L M).ucs k) k
279+
280+ variable {L}
281+
282+ /-- If `M` is a representation of a nilpotent Lie algebra `L`, and `x : L`, then
283+ `posFittingCompOf R M x` is the infimum of the decreasing system
284+ `range φₓ ⊇ range φₓ² ⊇ range φₓ³ ⊇ ⋯` where `φₓ : End R M := toEndomorphism R L M x`. We call this
285+ the "positive Fitting component" because with appropriate assumptions (e.g., `R` is a field and
286+ `M` is finite-dimensional) `φₓ` induces the so-called Fitting decomposition: `M = M₀ ⊕ M₁` where
287+ `M₀ = weightSpaceOf M 0 x` and `M₁ = posFittingCompOf R M x`.
288+
289+ It is a Lie submodule because `L` is nilpotent. -/
290+ def posFittingCompOf [LieAlgebra.IsNilpotent R L] (x : L) : LieSubmodule R L M :=
291+ { toSubmodule := ⨅ k, LinearMap.range (toEndomorphism R L M x ^ k)
292+ lie_mem := by
293+ set φ := toEndomorphism R L M x
294+ intros y m hm
295+ simp only [AddSubsemigroup.mem_carrier, AddSubmonoid.mem_toSubsemigroup,
296+ Submodule.mem_toAddSubmonoid, Submodule.mem_iInf, LinearMap.mem_range] at hm ⊢
297+ intro k
298+ obtain ⟨N, hN⟩ := LieAlgebra.nilpotent_ad_of_nilpotent_algebra R L
299+ obtain ⟨m, rfl⟩ := hm (N + k)
300+ let f₁ : Module.End R (L ⊗[R] M) := (LieAlgebra.ad R L x).rTensor M
301+ let f₂ : Module.End R (L ⊗[R] M) := φ.lTensor L
302+ replace hN : f₁ ^ N = 0 := by ext; simp [hN]
303+ have h₁ : Commute f₁ f₂ := by ext; simp
304+ have h₂ : φ ∘ₗ toModuleHom R L M = toModuleHom R L M ∘ₗ (f₁ + f₂) := by ext; simp
305+ obtain ⟨q, hq⟩ := h₁.add_pow_dvd_pow_of_pow_eq_zero_right (N + k).le_succ hN
306+ use toModuleHom R L M (q (y ⊗ₜ m))
307+ change (φ ^ k).comp ((toModuleHom R L M : L ⊗[R] M →ₗ[R] M)) _ = _
308+ simp [LinearMap.commute_pow_left_of_commute h₂, LinearMap.comp_apply (g := (f₁ + f₂) ^ k),
309+ ← LinearMap.comp_apply (g := q), ← LinearMap.mul_eq_comp, ← hq] }
310+
311+ variable {M} in
312+ lemma mem_posFittingCompOf [LieAlgebra.IsNilpotent R L] (x : L) (m : M) :
313+ m ∈ posFittingCompOf R M x ↔ ∀ (k : ℕ), ∃ n, (toEndomorphism R L M x ^ k) n = m := by
314+ simp [posFittingCompOf]
315+
316+ @[simp] lemma posFittingCompOf_le_lowerCentralSeries [LieAlgebra.IsNilpotent R L] (x : L) (k : ℕ) :
317+ posFittingCompOf R M x ≤ lowerCentralSeries R L M k := by
318+ suffices : ∀ m l, (toEndomorphism R L M x ^ l) m ∈ lowerCentralSeries R L M l
319+ · intro m hm
320+ obtain ⟨n, rfl⟩ := (mem_posFittingCompOf R x m).mp hm k
321+ exact this n k
322+ intro m l
323+ induction' l with l ih; simp
324+ simp only [lowerCentralSeries_succ, pow_succ, LinearMap.mul_apply]
325+ exact LieSubmodule.lie_mem_lie _ ⊤ (LieSubmodule.mem_top x) ih
326+
327+ @[simp] lemma posFittingCompOf_eq_bot_of_isNilpotent
328+ [LieAlgebra.IsNilpotent R L] [IsNilpotent R L M] (x : L) :
329+ posFittingCompOf R M x = ⊥ := by
330+ simp_rw [eq_bot_iff, ← iInf_lowerCentralSeries_eq_bot_of_isNilpotent, le_iInf_iff,
331+ posFittingCompOf_le_lowerCentralSeries, forall_const]
332+
333+ lemma exists_coe_posFittingCompOf_eq_of_isArtinian
334+ [LieAlgebra.IsNilpotent R L] [IsArtinian R M] (x : L) :
335+ ∃ (k : ℕ), posFittingCompOf R M x = LinearMap.range (toEndomorphism R L M x ^ k) :=
336+ (toEndomorphism R L M x).exists_range_pow_eq_iInf
337+
338+ variable (L)
339+
340+ /-- If `M` is a representation of a nilpotent Lie algebra `L` with coefficients in `R`, then
341+ `posFittingComp R L M` is the span of the positive Fitting components of the action of `x` on `M`,
342+ as `x` ranges over `L`.
343+
344+ It is a Lie submodule because `L` is nilpotent. -/
345+ def posFittingComp [LieAlgebra.IsNilpotent R L] : LieSubmodule R L M :=
346+ ⨆ x, posFittingCompOf R M x
347+
348+ lemma mem_posFittingComp [LieAlgebra.IsNilpotent R L] (m : M) :
349+ m ∈ posFittingComp R L M ↔ m ∈ ⨆ (x : L), posFittingCompOf R M x := by
350+ rfl
351+
352+ lemma posFittingCompOf_le_posFittingComp [LieAlgebra.IsNilpotent R L] (x : L) :
353+ posFittingCompOf R M x ≤ posFittingComp R L M := by
354+ rw [posFittingComp]; exact le_iSup (posFittingCompOf R M) x
355+
356+ lemma posFittingComp_le_iInf_lowerCentralSeries [LieAlgebra.IsNilpotent R L] :
357+ posFittingComp R L M ≤ ⨅ k, lowerCentralSeries R L M k := by
358+ simp [posFittingComp]
359+
360+ /-- See also `LieModule.iSup_ucs_eq_weightSpace_zero`. -/
361+ @[simp] lemma iInf_lowerCentralSeries_eq_posFittingComp
362+ [LieAlgebra.IsNilpotent R L] [IsNoetherian R M] [IsArtinian R M] :
363+ ⨅ k, lowerCentralSeries R L M k = posFittingComp R L M := by
364+ refine le_antisymm ?_ (posFittingComp_le_iInf_lowerCentralSeries R L M)
365+ apply iInf_lcs_le_of_isNilpotent_quot
366+ rw [LieModule.isNilpotent_iff_forall']
367+ intro x
368+ obtain ⟨k, hk⟩ := exists_coe_posFittingCompOf_eq_of_isArtinian R M x
369+ use k
370+ ext ⟨m⟩
371+ set F := posFittingComp R L M
372+ replace hk : (toEndomorphism R L M x ^ k) m ∈ F := by
373+ apply posFittingCompOf_le_posFittingComp R L M x
374+ rw [← LieSubmodule.mem_coeSubmodule, hk]
375+ apply LinearMap.mem_range_self
376+ suffices (toEndomorphism R L (M ⧸ F) x ^ k) (LieSubmodule.Quotient.mk (N := F) m) =
377+ LieSubmodule.Quotient.mk (N := F) ((toEndomorphism R L M x ^ k) m) by simpa [this]
378+ have := LinearMap.congr_fun (LinearMap.commute_pow_left_of_commute
379+ (LieSubmodule.Quotient.toEndomorphism_comp_mk' F x) k) m
380+ simpa using this
381+
382+ @[simp] lemma posFittingComp_eq_bot_of_isNilpotent
383+ [LieAlgebra.IsNilpotent R L] [IsNilpotent R L M] :
384+ posFittingComp R L M = ⊥ := by
385+ simp [posFittingComp]
386+
252387end LieModule
253388
254389namespace LieAlgebra
0 commit comments