-- Mathlib/Algebra/Lie/Weights/Basic.lean
/-- See also `LieModule.iSup_ucs_eq_genWeightSpace_zero`. -/
@[simp] lemma iInf_lowerCentralSeries_eq_posFittingComp
    [IsNoetherian R M] [IsArtinian R M] :
    ⨅ k, lowerCentralSeries R L M k = posFittingComp R L M

Proof state:
case h
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
⊢ _root_.IsNilpotent ((toEnd R L (M ⧸ posFittingComp R L M)) x)

Tactic:
obtain ⟨k, hk⟩ := Filter.eventually_atTop.mp (toEnd R L M x).eventually_iInf_range_pow_eq

Result:
case h.intro
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
⊢ _root_.IsNilpotent ((toEnd R L (M ⧸ posFittingComp R L M)) x)

Proof state:
case h
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
⊢ (toEnd R L (M ⧸ posFittingComp R L M)) x ^ k = 0

Tactic:
ext ⟨m⟩

Result:
case h.h.mk
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
x✝ : M ⧸ posFittingComp R L M
m : M
⊢ ((toEnd R L (M ⧸ posFittingComp R L M)) x ^ k) (Quot.mk (⇑(↑(posFittingComp R L M)).quotientRel) m) =
    0 (Quot.mk (⇑(↑(posFittingComp R L M)).quotientRel) m)

Proof state:
case h.h.mk
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
x✝ : M ⧸ posFittingComp R L M
m : M
⊢ ((toEnd R L (M ⧸ posFittingComp R L M)) x ^ k) (Quot.mk (⇑(↑(posFittingComp R L M)).quotientRel) m) =
    0 (Quot.mk (⇑(↑(posFittingComp R L M)).quotientRel) m)

Tactic:
set F := posFittingComp R L M

Result:
case h.h.mk
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
m : M
F : LieSubmodule R L M := posFittingComp R L M
x✝ : M ⧸ F
⊢ ((toEnd R L (M ⧸ F)) x ^ k) (Quot.mk (⇑(↑F).quotientRel) m) = 0 (Quot.mk (⇑(↑F).quotientRel) m)

Proof state:
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
⊢ ⨅ k, lowerCentralSeries R L M k ≤ posFittingComp R L M

Tactic:
apply iInf_lcs_le_of_isNilpotent_quot

Result:
case h
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
⊢ IsNilpotent L (M ⧸ posFittingComp R L M)

Proof state:
case h.h.mk
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
m : M
F : LieSubmodule R L M := posFittingComp R L M
x✝ : M ⧸ F
hk : ((toEnd R L M) x ^ k) m ∈ F
⊢ ((toEnd R L (M ⧸ F)) x ^ k) (LieSubmodule.Quotient.mk m) = LieSubmodule.Quotient.mk (((toEnd R L M) x ^ k) m)

Tactic:
have := LinearMap.congr_fun (LinearMap.commute_pow_left_of_commute
  (LieSubmodule.Quotient.toEnd_comp_mk' F x) k) m

Result:
case h.h.mk
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
m : M
F : LieSubmodule R L M := posFittingComp R L M
x✝ : M ⧸ F
hk : ((toEnd R L M) x ^ k) m ∈ F
this :
  (((toEnd R L (M ⧸ F)) x ^ k) ∘ₗ ↑(LieSubmodule.Quotient.mk' F)) m =
    (↑(LieSubmodule.Quotient.mk' F) ∘ₗ (toEnd R L M) x ^ k) m
⊢ ((toEnd R L (M ⧸ F)) x ^ k) (LieSubmodule.Quotient.mk m) = LieSubmodule.Quotient.mk (((toEnd R L M) x ^ k) m)

Proof state:
case a
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
m : M
F : LieSubmodule R L M := posFittingComp R L M
x✝ : M ⧸ F
⊢ ((toEnd R L M) x ^ k) m ∈ LinearMap.range ((toEnd R L M) x ^ k)

Tactic:
apply LinearMap.mem_range_self

Result:
no goals

Proof state:
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
m : M
F : LieSubmodule R L M := posFittingComp R L M
x✝ : M ⧸ F
⊢ ((toEnd R L M) x ^ k) m ∈ F

Tactic:
apply posFittingCompOf_le_posFittingComp R L M x

Result:
case a
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
hk : ∀ b ≥ k, ⨅ m, LinearMap.range ((toEnd R L M) x ^ m) = LinearMap.range ((toEnd R L M) x ^ b)
m : M
F : LieSubmodule R L M := posFittingComp R L M
x✝ : M ⧸ F
⊢ ((toEnd R L M) x ^ k) m ∈ posFittingCompOf R M x

Proof state:
R : Type u_2
L : Type u_3
M : Type u_4
inst✝⁹ : CommRing R
inst✝⁸ : LieRing L
inst✝⁷ : LieAlgebra R L
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : LieRingModule L M
inst✝³ : LieModule R L M
inst✝² : LieRing.IsNilpotent L
inst✝¹ : IsNoetherian R M
inst✝ : IsArtinian R M
x : L
k : ℕ
m : M
F : LieSubmodule R L M := posFittingComp R L M
x✝ : M ⧸ F
hk : ((toEnd R L M) x ^ k) m ∈ F
this : ((toEnd R L (M ⧸ F)) x ^ k) (LieSubmodule.Quotient.mk m) = LieSubmodule.Quotient.mk (((toEnd R L M) x ^ k) m)
⊢ ((toEnd R L (M ⧸ F)) x ^ k) (Quot.mk (⇑(↑F).quotientRel) m) = 0 (Quot.mk (⇑(↑F).quotientRel) m)

Tactic:
simpa [Submodule.Quotient.quot_mk_eq_mk, this]

Result:
no goals