Theorem: IsNilpotent.charpoly_eq_X_pow_finrank
File: Mathlib/LinearAlgebra/Eigenspace/Zero.lean

Proof steps:
state_before: R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ LinearMap.charpoly φ = X ^ finrank R M
state_after: R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ LinearMap.charpoly φ - X ^ finrank R M = 0
tactic: rw [← sub_eq_zero]
state_before: R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ LinearMap.charpoly φ - X ^ finrank R M = 0
state_after: case h
R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ IsNilpotent (LinearMap.charpoly φ - X ^ finrank R M)
tactic: apply IsNilpotent.eq_zero
state_before: case h
R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ IsNilpotent (LinearMap.charpoly φ - X ^ finrank R M)
state_after: case h
R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ IsNilpotent (LinearMap.charpoly φ - X ^ Fintype.card (ChooseBasisIndex R M))
tactic: rw [finrank_eq_card_chooseBasisIndex]
state_before: case h
R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ IsNilpotent (LinearMap.charpoly φ - X ^ Fintype.card (ChooseBasisIndex R M))
state_after: case h.hM
R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ IsNilpotent ((LinearMap.toMatrix (chooseBasis R M) (chooseBasis R M)) φ)
tactic: apply Matrix.isNilpotent_charpoly_sub_pow_of_isNilpotent
state_before: case h.hM
R : Type u_1
K : Type u_2
M : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : IsDomain R
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Finite R M
inst✝² : Module.Free R M
inst✝¹ : Module K M
inst✝ : Module.Finite K M
φ : Module.End R M
h : IsNilpotent φ
⊢ IsNilpotent ((LinearMap.toMatrix (chooseBasis R M) (chooseBasis R M)) φ)
state_after: no goals
tactic: exact h.map (LinearMap.toMatrixAlgEquiv (chooseBasis R M))