-- Mathlib/Analysis/InnerProductSpace/Spectrum.lean
theorem eigenvectorBasis_apply_self_apply (v : E) (i : Fin n) :
    (hT.eigenvectorBasis hn).repr (T v) i =
      hT.eigenvalues hn i * (hT.eigenvectorBasis hn).repr v i

Proof state:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
⊢ (hT.eigenvectorBasis hn).repr (T v) i = ↑(hT.eigenvalues hn i) * (hT.eigenvectorBasis hn).repr v i

Tactic:
suffices
  ∀ w : EuclideanSpace 𝕜 (Fin n),
    T ((hT.eigenvectorBasis hn).repr.symm w) =
      (hT.eigenvectorBasis hn).repr.symm fun i => hT.eigenvalues hn i * w i by
  simpa [OrthonormalBasis.sum_repr_symm] using
    congr_arg (fun v => (hT.eigenvectorBasis hn).repr v i)
      (this ((hT.eigenvectorBasis hn).repr v))

Result:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
⊢ ∀ (w : EuclideanSpace 𝕜 (Fin n)),
    T ((hT.eigenvectorBasis hn).repr.symm w) = (hT.eigenvectorBasis hn).repr.symm fun i => ↑(hT.eigenvalues hn i) * w i

Proof state:
case h
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
a : Fin n
⊢ w a • ↑(hT.eigenvalues hn a) • (hT.eigenvectorBasis hn) a =
    (↑(hT.eigenvalues hn a) * w a) • (hT.eigenvectorBasis hn) a

Tactic:
rw [smul_smul, mul_comm]

Result:
no goals

Proof state:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
⊢ ∑ x : Fin n, w x • ↑(hT.eigenvalues hn x) • (hT.eigenvectorBasis hn) x =
    ∑ x : Fin n, (↑(hT.eigenvalues hn x) * w x) • (hT.eigenvectorBasis hn) x

Tactic:
apply Fintype.sum_congr

Result:
case h
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
⊢ ∀ (a : Fin n),
    w a • ↑(hT.eigenvalues hn a) • (hT.eigenvectorBasis hn) a =
      (↑(hT.eigenvalues hn a) * w a) • (hT.eigenvectorBasis hn) a

Proof state:
case h
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
⊢ ∀ (a : Fin n),
    w a • ↑(hT.eigenvalues hn a) • (hT.eigenvectorBasis hn) a =
      (↑(hT.eigenvalues hn a) * w a) • (hT.eigenvectorBasis hn) a

Tactic:
intro a

Result:
case h
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
a : Fin n
⊢ w a • ↑(hT.eigenvalues hn a) • (hT.eigenvectorBasis hn) a =
    (↑(hT.eigenvalues hn a) * w a) • (hT.eigenvectorBasis hn) a

Proof state:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
⊢ T ((hT.eigenvectorBasis hn).repr.symm w) = (hT.eigenvectorBasis hn).repr.symm fun i => ↑(hT.eigenvalues hn i) * w i

Tactic:
simp_rw [← OrthonormalBasis.sum_repr_symm, map_sum, map_smul, apply_eigenvectorBasis]

Result:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
⊢ ∑ x : Fin n, w x • ↑(hT.eigenvalues hn x) • (hT.eigenvectorBasis hn) x =
    ∑ x : Fin n, (↑(hT.eigenvalues hn x) * w x) • (hT.eigenvectorBasis hn) x

Proof state:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
⊢ ∀ (w : EuclideanSpace 𝕜 (Fin n)),
    T ((hT.eigenvectorBasis hn).repr.symm w) = (hT.eigenvectorBasis hn).repr.symm fun i => ↑(hT.eigenvalues hn i) * w i

Tactic:
intro w

Result:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
w : EuclideanSpace 𝕜 (Fin n)
⊢ T ((hT.eigenvectorBasis hn).repr.symm w) = (hT.eigenvectorBasis hn).repr.symm fun i => ↑(hT.eigenvalues hn i) * w i

Proof state:
𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace 𝕜 E
T : E →ₗ[𝕜] E
inst✝ : FiniteDimensional 𝕜 E
hT : T.IsSymmetric
n : ℕ
hn : Module.finrank 𝕜 E = n
v : E
i : Fin n
this :
  ∀ (w : EuclideanSpace 𝕜 (Fin n)),
    T ((hT.eigenvectorBasis hn).repr.symm w) = (hT.eigenvectorBasis hn).repr.symm fun i => ↑(hT.eigenvalues hn i) * w i
⊢ (hT.eigenvectorBasis hn).repr (T v) i = ↑(hT.eigenvalues hn i) * (hT.eigenvectorBasis hn).repr v i

Tactic:
simpa [OrthonormalBasis.sum_repr_symm] using
  congr_arg (fun v => (hT.eigenvectorBasis hn).repr v i)
    (this ((hT.eigenvectorBasis hn).repr v))

Result:
no goals