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

tactic: simp only [genEigenspace, OrderHom.coe_mk, ← LinearMap.ker_comp]
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
f : End R M
p : Submodule R M
k : ℕ
μ : R
hfp : ∀ x ∈ p, f x ∈ p
⊢ (genEigenspace (LinearMap.restrict f hfp) μ) k = Submodule.comap p.subtype ((f.genEigenspace μ) k)
state_after: 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
f : End R M
p : Submodule R M
k : ℕ
μ : R
hfp : ∀ x ∈ p, f x ∈ p
⊢ LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ k) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ k) ∘ₗ p.subtype)

tactic: induction' k with k ih
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
f : End R M
p : Submodule R M
k : ℕ
μ : R
hfp : ∀ x ∈ p, f x ∈ p
⊢ LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ k) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ k) ∘ₗ p.subtype)
state_after: case zero
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
f : End R M
p : Submodule R M
μ : R
hfp : ∀ x ∈ p, f x ∈ p
⊢ LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ 0) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ 0) ∘ₗ p.subtype)

case succ
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
f : End R M
p : Submodule R M
μ : R
hfp : ∀ x ∈ p, f x ∈ p
k : ℕ
ih :
  LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ k) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ k) ∘ₗ p.subtype)
⊢ LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ (k + 1)) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ (k + 1)) ∘ₗ p.subtype)

tactic: rw [pow_zero, pow_zero, LinearMap.one_eq_id]
state_before: case zero
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
f : End R M
p : Submodule R M
μ : R
hfp : ∀ x ∈ p, f x ∈ p
⊢ LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ 0) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ 0) ∘ₗ p.subtype)
state_after: case zero
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
f : End R M
p : Submodule R M
μ : R
hfp : ∀ x ∈ p, f x ∈ p
⊢ LinearMap.ker LinearMap.id = LinearMap.ker (1 ∘ₗ p.subtype)

tactic: apply (Submodule.ker_subtype _).symm
state_before: case zero
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
f : End R M
p : Submodule R M
μ : R
hfp : ∀ x ∈ p, f x ∈ p
⊢ LinearMap.ker LinearMap.id = LinearMap.ker (1 ∘ₗ p.subtype)
state_after: no goals

tactic: erw [pow_succ, pow_succ, LinearMap.ker_comp, LinearMap.ker_comp, ih, ← LinearMap.ker_comp,
  LinearMap.comp_assoc]
state_before: case succ
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
f : End R M
p : Submodule R M
μ : R
hfp : ∀ x ∈ p, f x ∈ p
k : ℕ
ih :
  LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ k) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ k) ∘ₗ p.subtype)
⊢ LinearMap.ker ((LinearMap.restrict f hfp - (algebraMap R (End R ↥p)) μ) ^ (k + 1)) =
    LinearMap.ker (((f - (algebraMap R (End R M)) μ) ^ (k + 1)) ∘ₗ p.subtype)
state_after: no goals