Skip to content

Commit 031dbdd

Browse files
jano-wolpre-commit-ci-lite[bot]ocfnash
committed
feat: drop IsAlgClosed hypothesis from isNilpotent_derivedSeries_of_traceForm_eq_zero_algClosed (#38542)
Generalise `LieModule.isNilpotent_derivedSeries_of_traceForm_eq_zero_algClosed` to any integral domain of characteristic zero. Co-authored-by: Janos Wolosz <janos.wolosz@gmail.com> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Oliver Nash <github@olivernash.org>
1 parent 5ab64f2 commit 031dbdd

5 files changed

Lines changed: 77 additions & 13 deletions

File tree

Mathlib/Algebra/Lie/CartanCriterion.lean

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public import Mathlib.LinearAlgebra.Eigenspace.Matrix
1212
public import Mathlib.LinearAlgebra.Eigenspace.Minpoly
1313
public import Mathlib.LinearAlgebra.Eigenspace.Semisimple
1414
public import Mathlib.LinearAlgebra.Lagrange
15+
public import Mathlib.RingTheory.Flat.Localization
1516

1617
/-!
1718
# Cartan's criteria
@@ -22,9 +23,9 @@ criterion.
2223
2324
## Main results
2425
25-
* `LieModule.isNilpotent_derivedSeries_of_traceForm_eq_zero_algClosed`: over an algebraically
26-
closed field of characteristic zero, if a finite-dimensional representation `M` of `L` has
27-
trivial trace form, then `M` is nilpotent as a `⁅L, L⁆`-module.
26+
* `LieModule.isNilpotent_derivedSeries_of_traceForm_eq_zero`: over a field of characteristic zero,
27+
if a finite-dimensional representation `M` of `L` has trivial trace form, then `M` is nilpotent
28+
as a `⁅L, L⁆`-module.
2829
2930
## TODO
3031
@@ -37,17 +38,19 @@ criterion.
3738
* [J. Humphreys, *Introduction to Lie Algebras and ...*](humphreys1972) Chapter II 4.3
3839
-/
3940

40-
4141
namespace LieModule
4242

43-
variable {K L M : Type*}
44-
[Field K] [CharZero K] [IsAlgClosed K]
43+
variable {R K L M : Type*}
44+
[Field K] [CharZero K]
4545
[LieRing L] [LieAlgebra K L]
4646
[AddCommGroup M] [Module K M] [LieRingModule L M] [LieModule K L M] [FiniteDimensional K M]
47+
[CommRing R] [CharZero R] [IsDomain R]
48+
[LieAlgebra R L] [Module R M] [LieModule R L M] [IsNoetherian R M] [Module.Free R M]
4749

4850
local notation "φ" => toEnd K L M
4951

50-
open Algebra LieAlgebra LinearMap Module Module.End Polynomial
52+
open Algebra Function LieAlgebra LinearMap Module Module.End Polynomial
53+
open scoped TensorProduct
5154

5255
lemma exists_polynomial_eval_sub_aux
5356
{ι R K : Type*} [Finite ι] [CommRing R] [Field K] [Algebra R K]
@@ -63,8 +66,10 @@ lemma exists_polynomial_eval_sub_aux
6366
have heq : (⟨a i, ha i⟩ - ⟨a j, ha j⟩ : E) = ⟨a k, ha k⟩ - ⟨a l, ha l⟩ := Subtype.ext hij
6467
rw [← (algebraMap R K).map_sub, ← (algebraMap R K).map_sub, ← map_sub, ← map_sub, heq]
6568

66-
/-- If the trace form of `M` is zero, then the `⁅L, L⁆`-module `M` is nilpotent. -/
67-
public theorem isNilpotent_derivedSeries_of_traceForm_eq_zero_algClosed (h : traceForm K L M = 0) :
69+
/-- An auxiliary lemma used to prove `LieModule.isNilpotent_derivedSeries_of_traceForm_eq_zero`
70+
which proves the same result except without the algebraically closed assumption. -/
71+
theorem isNilpotent_derivedSeries_of_traceForm_eq_zero_aux [IsAlgClosed K]
72+
(h : traceForm K L M = 0) :
6873
IsNilpotent (derivedSeries K L 1) M := by
6974
/- By Engel's theorem it suffices to prove that `⁅L, L⁆` acts nilpotently on `M`. -/
7075
suffices ∀ x ∈ derivedSeries K L 1, _root_.IsNilpotent (φ x) from
@@ -82,7 +87,7 @@ public theorem isNilpotent_derivedSeries_of_traceForm_eq_zero_algClosed (h : tra
8287
s.eigenspaces_iSupIndep hs_ss.iSup_eigenspace_eq_top
8388
let I := (ν : K) × Fin (finrank K (s.eigenspace ν))
8489
let v : Basis I K M := eigenDecomp.collectedBasis fun μ ↦ finBasis K (s.eigenspace μ)
85-
have : Fintype I := v.fintypeIndexOfRankLtAleph0 (rank_lt_aleph0 K M)
90+
have : Fintype I := FiniteDimensional.fintypeBasisIndex v
8691
let μ : I → K := Sigma.fst
8792
have hsv (i : I) : s (v i) = μ i • v i :=
8893
mem_eigenspace_iff.mp (eigenDecomp.collectedBasis_mem _ i)
@@ -160,4 +165,23 @@ public theorem isNilpotent_derivedSeries_of_traceForm_eq_zero_algClosed (h : tra
160165
exact Finset.sum_congr rfl <| by simp [toMatrix_apply, hyv, hsv]
161166
rw [hX_ns, add_mul, map_add, htr_n, htr_s, zero_add]
162167

168+
/-- If the trace form of `M` is zero, then the `⁅L, L⁆`-module `M` is nilpotent. -/
169+
public theorem isNilpotent_derivedSeries_of_traceForm_eq_zero (h : traceForm R L M = 0) :
170+
IsNilpotent (derivedSeries R L 1) M := by
171+
set A := AlgebraicClosure (FractionRing R)
172+
have _i : FaithfulSMul R A := FaithfulSMul.trans R (FractionRing R) A
173+
have nilp_ext : IsNilpotent (derivedSeries A (A ⊗[R] L) 1) (A ⊗[R] M) :=
174+
isNilpotent_derivedSeries_of_traceForm_eq_zero_aux <| by simpa
175+
rw [isNilpotent_iff_forall' (R := R)]
176+
rw [isNilpotent_iff_forall' (R := A)] at nilp_ext
177+
intro ⟨x, hx⟩
178+
have hx_ext : 1 ⊗ₜ[R] x ∈ derivedSeries A (A ⊗[R] L) 1 := by
179+
rw [derivedSeries_baseChange]
180+
exact Submodule.tmul_mem_baseChange_of_mem 1 hx
181+
have hbc_inj : Injective (End.baseChangeHom R A M) := LinearMap.baseChangeHom_injective R M A
182+
have aux : (toEnd R (derivedSeries R L 1) M ⟨x, hx⟩).baseChangeHom R A M =
183+
(toEnd R L M x).baseChange A := rfl
184+
rw [← IsNilpotent.map_iff hbc_inj, aux, ← toEnd_baseChange]
185+
exact nilp_ext ⟨_, hx_ext⟩
186+
163187
end LieModule

Mathlib/Algebra/Lie/TraceForm.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public import Mathlib.Algebra.Lie.InvariantForm
1010
public import Mathlib.Algebra.Lie.Weights.Cartan
1111
public import Mathlib.Algebra.Lie.Weights.Linear
1212
public import Mathlib.FieldTheory.IsAlgClosed.AlgebraicClosure
13+
public import Mathlib.LinearAlgebra.BilinearForm.TensorProduct
1314
public import Mathlib.LinearAlgebra.PID
1415

1516
/-!
@@ -105,6 +106,12 @@ lemma traceForm_lieInvariant : (traceForm R L M).lieInvariant L := by
105106
apply LinearMap.isNilpotent_trace_of_isNilpotent
106107
exact isNilpotent_toEnd_of_isNilpotent₂ R L M x y
107108

109+
open scoped TensorProduct in
110+
@[simp] lemma traceForm_baseChange [Module.Free R M] [Module.Finite R M]
111+
(A : Type*) [CommRing A] [Algebra R A] :
112+
traceForm A (A ⊗[R] L) (A ⊗[R] M) = (traceForm R L M).baseChange A := by
113+
ext; simp [traceForm_apply_apply, ← LinearMap.baseChange_comp, Algebra.algebraMap_eq_smul_one]
114+
108115
variable {R L M} in
109116
lemma trace_toEnd_mul_eq_zero_of_traceForm_eq_zero (h : traceForm R L M = 0)
110117
(y : End R M) (hy : ∀ z ∈ LieHom.range φ, ⁅y, z⁆ ∈ LieHom.range φ)

Mathlib/LinearAlgebra/BilinearForm/TensorProduct.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,14 @@ theorem baseChange_tmul (B₂ : BilinForm R M₂) (a : A) (m₂ : M₂)
142142
B₂.baseChange A (a ⊗ₜ m₂) (a' ⊗ₜ m₂') = (B₂ m₂ m₂') • (a * a') :=
143143
rfl
144144

145+
@[simp] lemma baseChange_zero : (0 : BilinForm R M₂).baseChange A = 0 := by ext; simp
146+
147+
@[simp] lemma baseChange_eq_zero_iff [FaithfulSMul R A]
148+
(B : BilinForm R M₂) : B.baseChange A = 0 ↔ B = 0 := by
149+
refine ⟨fun h ↦ ?_, fun h ↦ by simp [h]⟩
150+
ext m m'
151+
simpa [← Algebra.algebraMap_eq_smul_one] using LinearMap.congr_fun₂ h (1 ⊗ₜ[R] m) (1 ⊗ₜ[R] m')
152+
145153
variable (A) in
146154
/-- The base change of a symmetric bilinear form is symmetric. -/
147155
lemma IsSymm.baseChange {B₂ : BilinForm R M₂} (hB₂ : B₂.IsSymm) : (B₂.baseChange A).IsSymm :=

Mathlib/RingTheory/Flat/Basic.lean

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ open TensorProduct
7171

7272
namespace Module
7373

74-
open Function (Surjective)
74+
open Function (Injective Surjective)
7575

7676
open LinearMap Submodule DirectSum
7777

@@ -242,12 +242,35 @@ instance {S} [CommSemiring S] [Algebra R S] [Module S M] [IsScalarTower R S M]
242242

243243
example [Flat R M] [Flat R N] : Flat R (M ⊗[R] N) := inferInstance
244244

245-
theorem linearIndependent_one_tmul {S} [Semiring S] [Algebra R S] [Flat R S] {ι} {v : ι → M}
245+
section Algebra
246+
247+
variable {S : Type*} [Semiring S] [Algebra R S]
248+
249+
theorem linearIndependent_one_tmul [Flat R S] {ι} {v : ι → M}
246250
(hv : LinearIndependent R v) : LinearIndependent S ((1 : S) ⊗ₜ[R] v ·) := by
247251
classical rw [LinearIndependent, ← LinearMap.coe_restrictScalars R,
248252
Finsupp.linearCombination_one_tmul]
249253
simpa using lTensor_preserves_injective_linearMap _ hv
250254

255+
variable (R S M)
256+
257+
/-- See also `Module.FaithfullyFlat.tensorProduct_mk_injective`. -/
258+
lemma tensorProduct_mk_injective [FaithfulSMul R S] [Flat R M] :
259+
Injective (TensorProduct.mk R S M 1) := by
260+
have : TensorProduct.mk R S M 1 =
261+
(Algebra.linearMap R S).rTensor M ∘ (TensorProduct.lid R M).symm := by ext; simp
262+
rw [this]
263+
refine Injective.comp ?_ (LinearEquiv.injective _)
264+
exact Flat.rTensor_preserves_injective_linearMap _ <| FaithfulSMul.algebraMap_injective R S
265+
266+
lemma _root_.LinearMap.baseChangeHom_injective [FaithfulSMul R S] [Flat R N] :
267+
Injective (LinearMap.baseChangeHom R S M N) := by
268+
intro f g h
269+
ext m
270+
simpa using Flat.tensorProduct_mk_injective R N S <| LinearMap.congr_fun h (1 ⊗ₜ[R] m)
271+
272+
end Algebra
273+
251274
end Flat
252275

253276
end Semiring

Mathlib/RingTheory/Flat/FaithfullyFlat/Algebra.lean

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ lemma Module.FaithfullyFlat.of_flat_of_isLocalHom [IsLocalRing A] [IsLocalRing B
7676
variable [Module.FaithfullyFlat A B]
7777

7878
/-- If `B` is a faithfully flat `A`-module and `M` is any `A`-module, the canonical
79-
map `M →ₗ[A] B ⊗[A] M` is injective. -/
79+
map `M →ₗ[A] B ⊗[A] M` is injective.
80+
81+
See also `Module.Flat.tensorProduct_mk_injective`. -/
8082
lemma Module.FaithfullyFlat.tensorProduct_mk_injective (M : Type*) [AddCommGroup M] [Module A M] :
8183
Function.Injective (TensorProduct.mk A B M 1) := by
8284
rw [← Module.FaithfullyFlat.lTensor_injective_iff_injective A B]

0 commit comments

Comments
 (0)