Skip to content

Commit 63afe10

Browse files
committed
chore(Analysis/InnerProductSpace/Rayleigh): clean up and fix a non-terminal simp (#33376)
1 parent cfceff4 commit 63afe10

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

Mathlib/Analysis/InnerProductSpace/Rayleigh.lean

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,16 @@ theorem rayleigh_smul (x : E) {c : 𝕜} (hc : c ≠ 0) :
6363
· simp [hx]
6464
simp [field, norm_smul, T.reApplyInnerSelf_smul]
6565

66+
theorem rayleighQuotient_add (S : E →L[𝕜] E) {x : E} :
67+
(T + S).rayleighQuotient x = T.rayleighQuotient x + S.rayleighQuotient x := by
68+
simp [rayleighQuotient, reApplyInnerSelf_apply, inner_add_left, add_div]
69+
6670
theorem image_rayleigh_eq_image_rayleigh_sphere {r : ℝ} (hr : 0 < r) :
6771
rayleighQuotient T '' {0}ᶜ = rayleighQuotient T '' sphere 0 r := by
6872
ext a
6973
constructor
7074
· rintro ⟨x, hx : x ≠ 0, hxT⟩
71-
let c : 𝕜 := ‖x‖⁻¹ * r
75+
let c : 𝕜 := ‖x‖⁻¹ * r
7276
have : c ≠ 0 := by simp [c, hx, hr.ne']
7377
refine ⟨c • x, ?_, ?_⟩
7478
· simp [field, c, norm_smul, abs_of_pos hr]
@@ -131,8 +135,6 @@ theorem linearly_dependent_of_isLocalExtrOn (hT : IsSelfAdjoint T) {x₀ : F}
131135
apply smul_right_injective (F →L[ℝ] ℝ) (two_ne_zero : (2 : ℝ) ≠ 0)
132136
simpa only [two_smul, smul_add, add_smul, add_zero] using h₂
133137

134-
-- Non-terminal simp, used to be field_simp
135-
set_option linter.flexible false in
136138
open scoped InnerProductSpace in
137139
theorem eq_smul_self_of_isLocalExtrOn_real (hT : IsSelfAdjoint T) {x₀ : F}
138140
(hextr : IsLocalExtrOn T.reApplyInnerSelf (sphere (0 : F) ‖x₀‖) x₀) :
@@ -149,9 +151,7 @@ theorem eq_smul_self_of_isLocalExtrOn_real (hT : IsSelfAdjoint T) {x₀ : F}
149151
linear_combination (norm := match_scalars <;> field) b⁻¹ • h₂
150152
set c : ℝ := -b⁻¹ * a
151153
convert hc
152-
have := congr_arg (fun x => ⟪x, x₀⟫_ℝ) hc
153-
simp [field, inner_smul_left, mul_comm a] at this ⊢
154-
exact this
154+
simpa [field, inner_smul_left, mul_comm a] using congr_arg (fun x => ⟪x, x₀⟫_ℝ) hc
155155

156156
end Real
157157

@@ -161,7 +161,7 @@ variable [CompleteSpace E] {T : E →L[𝕜] E}
161161

162162
theorem eq_smul_self_of_isLocalExtrOn (hT : IsSelfAdjoint T) {x₀ : E}
163163
(hextr : IsLocalExtrOn T.reApplyInnerSelf (sphere (0 : E) ‖x₀‖) x₀) :
164-
T x₀ = (↑(T.rayleighQuotient x₀) : 𝕜) • x₀ := by
164+
T x₀ = (T.rayleighQuotient x₀ : 𝕜) • x₀ := by
165165
letI := InnerProductSpace.rclikeToReal 𝕜 E
166166
let hSA := hT.isSymmetric.restrictScalars.toSelfAdjoint.prop
167167
exact hSA.eq_smul_self_of_isLocalExtrOn_real hextr
@@ -170,7 +170,7 @@ theorem eq_smul_self_of_isLocalExtrOn (hT : IsSelfAdjoint T) {x₀ : E}
170170
centred at the origin is an eigenvector of `T`. -/
171171
theorem hasEigenvector_of_isLocalExtrOn (hT : IsSelfAdjoint T) {x₀ : E} (hx₀ : x₀ ≠ 0)
172172
(hextr : IsLocalExtrOn T.reApplyInnerSelf (sphere (0 : E) ‖x₀‖) x₀) :
173-
HasEigenvector (T : E →ₗ[𝕜] E) (↑(T.rayleighQuotient x₀)) x₀ := by
173+
HasEigenvector (T : E →ₗ[𝕜] E) (T.rayleighQuotient x₀) x₀ := by
174174
refine ⟨?_, hx₀⟩
175175
rw [Module.End.mem_eigenspace_iff]
176176
exact hT.eq_smul_self_of_isLocalExtrOn hextr
@@ -180,7 +180,7 @@ at the origin is an eigenvector of `T`, with eigenvalue the global supremum of t
180180
quotient. -/
181181
theorem hasEigenvector_of_isMaxOn (hT : IsSelfAdjoint T) {x₀ : E} (hx₀ : x₀ ≠ 0)
182182
(hextr : IsMaxOn T.reApplyInnerSelf (sphere (0 : E) ‖x₀‖) x₀) :
183-
HasEigenvector (T : E →ₗ[𝕜] E) (↑(⨆ x : { x : E // x ≠ 0 }, T.rayleighQuotient x)) x₀ := by
183+
HasEigenvector (T : E →ₗ[𝕜] E) (⨆ x : { x : E // x ≠ 0 }, T.rayleighQuotient x : ℝ) x₀ := by
184184
convert hT.hasEigenvector_of_isLocalExtrOn hx₀ (Or.inr hextr.localize)
185185
have hx₀' : 0 < ‖x₀‖ := by simp [hx₀]
186186
have hx₀'' : x₀ ∈ sphere (0 : E) ‖x₀‖ := by simp
@@ -199,7 +199,7 @@ at the origin is an eigenvector of `T`, with eigenvalue the global infimum of th
199199
quotient. -/
200200
theorem hasEigenvector_of_isMinOn (hT : IsSelfAdjoint T) {x₀ : E} (hx₀ : x₀ ≠ 0)
201201
(hextr : IsMinOn T.reApplyInnerSelf (sphere (0 : E) ‖x₀‖) x₀) :
202-
HasEigenvector (T : E →ₗ[𝕜] E) (↑(⨅ x : { x : E // x ≠ 0 }, T.rayleighQuotient x)) x₀ := by
202+
HasEigenvector (T : E →ₗ[𝕜] E) (⨅ x : { x : E // x ≠ 0 }, T.rayleighQuotient x : ℝ) x₀ := by
203203
convert hT.hasEigenvector_of_isLocalExtrOn hx₀ (Or.inl hextr.localize)
204204
have hx₀' : 0 < ‖x₀‖ := by simp [hx₀]
205205
have hx₀'' : x₀ ∈ sphere (0 : E) ‖x₀‖ := by simp
@@ -228,7 +228,7 @@ namespace IsSymmetric
228228
/-- The supremum of the Rayleigh quotient of a symmetric operator `T` on a nontrivial
229229
finite-dimensional vector space is an eigenvalue for that operator. -/
230230
theorem hasEigenvalue_iSup_of_finiteDimensional [Nontrivial E] (hT : T.IsSymmetric) :
231-
HasEigenvalue T (⨆ x : { x : E // x ≠ 0 }, RCLike.re ⟪T x, x⟫ / ‖(x : E)‖ ^ 2 : ℝ) := by
231+
HasEigenvalue T (⨆ x : { x : E // x ≠ 0 }, RCLike.re ⟪T x, x⟫ / ‖(x : E)‖ ^ 2 : ℝ) := by
232232
haveI := FiniteDimensional.proper_rclike 𝕜 E
233233
let T' := hT.toSelfAdjoint
234234
obtain ⟨x, hx⟩ : ∃ x : E, x ≠ 0 := exists_ne 0
@@ -247,7 +247,7 @@ theorem hasEigenvalue_iSup_of_finiteDimensional [Nontrivial E] (hT : T.IsSymmetr
247247
/-- The infimum of the Rayleigh quotient of a symmetric operator `T` on a nontrivial
248248
finite-dimensional vector space is an eigenvalue for that operator. -/
249249
theorem hasEigenvalue_iInf_of_finiteDimensional [Nontrivial E] (hT : T.IsSymmetric) :
250-
HasEigenvalue T (⨅ x : { x : E // x ≠ 0 }, RCLike.re ⟪T x, x⟫ / ‖(x : E)‖ ^ 2 : ℝ) := by
250+
HasEigenvalue T (⨅ x : { x : E // x ≠ 0 }, RCLike.re ⟪T x, x⟫ / ‖(x : E)‖ ^ 2 : ℝ) := by
251251
haveI := FiniteDimensional.proper_rclike 𝕜 E
252252
let T' := hT.toSelfAdjoint
253253
obtain ⟨x, hx⟩ : ∃ x : E, x ≠ 0 := exists_ne 0

0 commit comments

Comments
 (0)