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

tactic: refine p.induction_on ?_ ?_ ?_
state_before: K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
⊢ ((aeval f) p) x = eval μ p • x
state_after: case refine_1
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
⊢ ∀ (a : K), ((aeval f) (C a)) x = eval μ (C a) • x

case refine_2
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
⊢ ∀ (p q : K[X]),
    ((aeval f) p) x = eval μ p • x → ((aeval f) q) x = eval μ q • x → ((aeval f) (p + q)) x = eval μ (p + q) • x

case refine_3
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
⊢ ∀ (n : ℕ) (a : K),
    ((aeval f) (C a * X ^ n)) x = eval μ (C a * X ^ n) • x →
      ((aeval f) (C a * X ^ (n + 1))) x = eval μ (C a * X ^ (n + 1)) • x

tactic: intro a
state_before: case refine_1
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
⊢ ∀ (a : K), ((aeval f) (C a)) x = eval μ (C a) • x
state_after: case refine_1
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
a : K
⊢ ((aeval f) (C a)) x = eval μ (C a) • x

tactic: simp [Module.algebraMap_end_apply]
state_before: case refine_1
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
a : K
⊢ ((aeval f) (C a)) x = eval μ (C a) • x
state_after: no goals

tactic: intro p q hp hq
state_before: case refine_2
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
⊢ ∀ (p q : K[X]),
    ((aeval f) p) x = eval μ p • x → ((aeval f) q) x = eval μ q • x → ((aeval f) (p + q)) x = eval μ (p + q) • x
state_after: case refine_2
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p✝ : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
p q : K[X]
hp : ((aeval f) p) x = eval μ p • x
hq : ((aeval f) q) x = eval μ q • x
⊢ ((aeval f) (p + q)) x = eval μ (p + q) • x

tactic: simp [hp, hq, add_smul]
state_before: case refine_2
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p✝ : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
p q : K[X]
hp : ((aeval f) p) x = eval μ p • x
hq : ((aeval f) q) x = eval μ q • x
⊢ ((aeval f) (p + q)) x = eval μ (p + q) • x
state_after: no goals

tactic: intro n a hna
state_before: case refine_3
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
⊢ ∀ (n : ℕ) (a : K),
    ((aeval f) (C a * X ^ n)) x = eval μ (C a * X ^ n) • x →
      ((aeval f) (C a * X ^ (n + 1))) x = eval μ (C a * X ^ (n + 1)) • x
state_after: case refine_3
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
n : ℕ
a : K
hna : ((aeval f) (C a * X ^ n)) x = eval μ (C a * X ^ n) • x
⊢ ((aeval f) (C a * X ^ (n + 1))) x = eval μ (C a * X ^ (n + 1)) • x

tactic: rw [mul_comm, pow_succ', mul_assoc, AlgHom.map_mul, LinearMap.mul_apply, mul_comm, hna]
state_before: case refine_3
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
n : ℕ
a : K
hna : ((aeval f) (C a * X ^ n)) x = eval μ (C a * X ^ n) • x
⊢ ((aeval f) (C a * X ^ (n + 1))) x = eval μ (C a * X ^ (n + 1)) • x
state_after: case refine_3
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
n : ℕ
a : K
hna : ((aeval f) (C a * X ^ n)) x = eval μ (C a * X ^ n) • x
⊢ ((aeval f) X) (eval μ (C a * X ^ n) • x) = eval μ (X * (C a * X ^ n)) • x

tactic: simp only [mem_eigenspace_iff.1 h.1, smul_smul, aeval_X, eval_mul, eval_C, eval_pow, eval_X,
  LinearMap.map_smulₛₗ, RingHom.id_apply, mul_comm]
state_before: case refine_3
K : Type v
V : Type w
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
f : End K V
p : K[X]
μ : K
x : V
h : f.HasEigenvector μ x
n : ℕ
a : K
hna : ((aeval f) (C a * X ^ n)) x = eval μ (C a * X ^ n) • x
⊢ ((aeval f) X) (eval μ (C a * X ^ n) • x) = eval μ (X * (C a * X ^ n)) • x
state_after: no goals