Theorem: Module.End.isNilpotent_restrict_iSup_sub_algebraMap
File: Mathlib/LinearAlgebra/Eigenspace/Basic.lean

tactic: obtain ⟨l, hl⟩ : ∃ l, ⨆ k, f.genEigenspace μ k = f.genEigenspace μ l :=
  ⟨_, maxGenEigenspace_eq f μ⟩
state_before: K R : Type v
V M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian R M
f : End R M
μ : R
h : optParam (MapsTo ⇑(f - (algebraMap R (End R M)) μ) ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)) ⋯
⊢ IsNilpotent (LinearMap.restrict (f - (algebraMap R (End R M)) μ) h)
state_after: case intro
K R : Type v
V M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian R M
f : End R M
μ : R
h : optParam (MapsTo ⇑(f - (algebraMap R (End R M)) μ) ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)) ⋯
l : ℕ
hl : ⨆ k, (f.genEigenspace μ) k = (f.genEigenspace μ) l
⊢ IsNilpotent (LinearMap.restrict (f - (algebraMap R (End R M)) μ) h)

tactic: use l
state_before: case intro
K R : Type v
V M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian R M
f : End R M
μ : R
h : optParam (MapsTo ⇑(f - (algebraMap R (End R M)) μ) ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)) ⋯
l : ℕ
hl : ⨆ k, (f.genEigenspace μ) k = (f.genEigenspace μ) l
⊢ IsNilpotent (LinearMap.restrict (f - (algebraMap R (End R M)) μ) h)
state_after: case h
K R : Type v
V M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian R M
f : End R M
μ : R
h : optParam (MapsTo ⇑(f - (algebraMap R (End R M)) μ) ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)) ⋯
l : ℕ
hl : ⨆ k, (f.genEigenspace μ) k = (f.genEigenspace μ) l
⊢ LinearMap.restrict (f - (algebraMap R (End R M)) μ) h ^ l = 0

tactic: ext ⟨x, hx⟩
state_before: case h
K R : Type v
V M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian R M
f : End R M
μ : R
h : optParam (MapsTo ⇑(f - (algebraMap R (End R M)) μ) ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)) ⋯
l : ℕ
hl : ⨆ k, (f.genEigenspace μ) k = (f.genEigenspace μ) l
⊢ LinearMap.restrict (f - (algebraMap R (End R M)) μ) h ^ l = 0
state_after: case h.h.mk.a
K R : Type v
V M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian R M
f : End R M
μ : R
h : optParam (MapsTo ⇑(f - (algebraMap R (End R M)) μ) ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)) ⋯
l : ℕ
hl : ⨆ k, (f.genEigenspace μ) k = (f.genEigenspace μ) l
x : M
hx : x ∈ ⨆ k, (f.genEigenspace μ) k
⊢ ↑((LinearMap.restrict (f - (algebraMap R (End R M)) μ) h ^ l) ⟨x, hx⟩) = ↑(0 ⟨x, hx⟩)

tactic: simpa [hl, LinearMap.restrict_apply, LinearMap.pow_restrict _] using hx
state_before: case h.h.mk.a
K R : Type v
V M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian R M
f : End R M
μ : R
h : optParam (MapsTo ⇑(f - (algebraMap R (End R M)) μ) ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)) ⋯
l : ℕ
hl : ⨆ k, (f.genEigenspace μ) k = (f.genEigenspace μ) l
x : M
hx : x ∈ ⨆ k, (f.genEigenspace μ) k
⊢ ↑((LinearMap.restrict (f - (algebraMap R (End R M)) μ) h ^ l) ⟨x, hx⟩) = ↑(0 ⟨x, hx⟩)
state_after: no goals