Theorem: eigenvalue_nonneg_of_nonneg
File: Mathlib/Analysis/InnerProductSpace/Spectrum.lean

tactic: obtain ⟨v, hv⟩ := hμ.exists_hasEigenvector
state_before: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
⊢ 0 ≤ μ
state_after: case intro
𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
⊢ 0 ≤ μ

tactic: have hpos : (0 : ℝ) < ‖v‖ ^ 2 := by simpa only [sq_pos_iff, norm_ne_zero_iff] using hv.2
state_before: case intro
𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
⊢ 0 ≤ μ
state_after: case intro
𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
⊢ 0 ≤ μ

tactic: have : RCLike.re ⟪v, T v⟫ = μ * ‖v‖ ^ 2 := by
  have := congr_arg RCLike.re (inner_product_apply_eigenvector hv.1)
  rw [← RCLike.ofReal_pow, ← RCLike.ofReal_mul] at this
  exact mod_cast this
state_before: case intro
𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
⊢ 0 ≤ μ
state_after: case intro
𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
this : RCLike.re ⟪v, T v⟫_𝕜 = μ * ‖v‖ ^ 2
⊢ 0 ≤ μ

tactic: exact (mul_nonneg_iff_of_pos_right hpos).mp (this ▸ hnn v)
state_before: case intro
𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
this : RCLike.re ⟪v, T v⟫_𝕜 = μ * ‖v‖ ^ 2
⊢ 0 ≤ μ
state_after: no goals

tactic: simpa only [sq_pos_iff, norm_ne_zero_iff] using hv.2
state_before: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
⊢ 0 < ‖v‖ ^ 2
state_after: no goals

tactic: have := congr_arg RCLike.re (inner_product_apply_eigenvector hv.1)
state_before: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
⊢ RCLike.re ⟪v, T v⟫_𝕜 = μ * ‖v‖ ^ 2
state_after: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
this : RCLike.re ⟪v, T v⟫_𝕜 = RCLike.re (↑μ * ↑‖v‖ ^ 2)
⊢ RCLike.re ⟪v, T v⟫_𝕜 = μ * ‖v‖ ^ 2

tactic: rw [← RCLike.ofReal_pow, ← RCLike.ofReal_mul] at this
state_before: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
this : RCLike.re ⟪v, T v⟫_𝕜 = RCLike.re (↑μ * ↑‖v‖ ^ 2)
⊢ RCLike.re ⟪v, T v⟫_𝕜 = μ * ‖v‖ ^ 2
state_after: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
this : RCLike.re ⟪v, T v⟫_𝕜 = RCLike.re ↑(μ * ‖v‖ ^ 2)
⊢ RCLike.re ⟪v, T v⟫_𝕜 = μ * ‖v‖ ^ 2

tactic: exact mod_cast this
state_before: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : InnerProductSpace 𝕜 E
μ : ℝ
T : E →ₗ[𝕜] E
hμ : HasEigenvalue T ↑μ
hnn : ∀ (x : E), 0 ≤ RCLike.re ⟪x, T x⟫_𝕜
v : E
hv : HasEigenvector T (↑μ) v
hpos : 0 < ‖v‖ ^ 2
this : RCLike.re ⟪v, T v⟫_𝕜 = RCLike.re ↑(μ * ‖v‖ ^ 2)
⊢ RCLike.re ⟪v, T v⟫_𝕜 = μ * ‖v‖ ^ 2
state_after: no goals