Theorem: Module.End.hasEigenvalue_of_isRoot
File: Mathlib/LinearAlgebra/Eigenspace/Minpoly.lean

Proof steps:
state_before: K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
⊢ f.HasEigenvalue μ
state_after: case intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
⊢ f.HasEigenvalue μ
tactic: cases' dvd_iff_isRoot.2 h with p hp
state_before: case intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
⊢ f.HasEigenvalue μ
state_after: case intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
⊢ LinearMap.ker (f - (algebraMap K (End K V)) μ) ≠ ⊥
tactic: rw [HasEigenvalue, eigenspace]
state_before: case intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
⊢ LinearMap.ker (f - (algebraMap K (End K V)) μ) ≠ ⊥
state_after: case intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
⊢ False
tactic: intro con
state_before: case intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
⊢ False
state_after: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
⊢ False
tactic: cases' (LinearMap.isUnit_iff_ker_eq_bot _).2 con with u hu
state_before: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
⊢ False
state_after: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
⊢ False
tactic: have p_ne_0 : p ≠ 0 := by
    intro con
    apply minpoly.ne_zero (Algebra.IsIntegral.isIntegral (R := K) f)
    rw [hp, con, mul_zero]
state_before: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
⊢ False
state_after: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
⊢ False
tactic: have : (aeval f) p = 0 := by
    have h_aeval := minpoly.aeval K f
    revert h_aeval
    simp [hp, ← hu]
state_before: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
⊢ False
state_after: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
h_deg : (minpoly K f).degree ≤ p.degree
⊢ False
tactic: have h_deg := minpoly.degree_le_of_ne_zero K f p_ne_0 this
state_before: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
h_deg : (minpoly K f).degree ≤ p.degree
⊢ False
state_after: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
h_deg : 1 + ↑p.natDegree ≤ ↑p.natDegree
⊢ False
tactic: rw [hp, degree_mul, degree_X_sub_C, Polynomial.degree_eq_natDegree p_ne_0] at h_deg
state_before: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
h_deg : 1 + ↑p.natDegree ≤ ↑p.natDegree
⊢ False
state_after: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
h_deg : 1 + p.natDegree ≤ p.natDegree
⊢ False
tactic: norm_cast at h_deg
state_before: case intro.intro
K : Type v
V : Type w
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
f : End K V
μ : K
h : (minpoly K f).IsRoot μ
p : K[X]
hp : minpoly K f = (X - C μ) * p
con : LinearMap.ker (f - (algebraMap K (End K V)) μ) = ⊥
u : (V →ₗ[K] V)ˣ
hu : ↑u = f - (algebraMap K (End K V)) μ
p_ne_0 : p ≠ 0
this : (aeval f) p = 0
h_deg : 1 + p.natDegree ≤ p.natDegree
⊢ False
state_after: no goals
tactic: omega