Skip to content

Commit 31e1951

Browse files
committed
chore(Analysis/InnerProductSpace): remove a hypothesis from LinearMap.IsSymmetric.card_filter_eigenvalues_eq (#36106)
Use proof by cases to remove an unnecessary hypothesis from `LinearMap.IsSymmetric.card_filter_eigenvalues_eq` and the related private `LinearMap.IsSymmetric.card_filter_unsortedEigenvalues_eq`. This required proving a statement similar to `LinearMap.IsSymmetric.hasEigenvalue_eigenvalues` but for `unsortedEigenvalues`.
1 parent b0b8870 commit 31e1951

1 file changed

Lines changed: 21 additions & 11 deletions

File tree

Mathlib/Analysis/InnerProductSpace/Spectrum.lean

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,13 @@ private noncomputable def unsortedEigenvalues (hT : T.IsSymmetric) (hn : Module.
205205
@RCLike.re 𝕜 _ <| (hT.direct_sum_isInternal.subordinateOrthonormalBasisIndex hn i
206206
hT.orthogonalFamily_eigenspaces').val
207207

208+
private theorem hasEigenvalue_unsortedEigenvalues (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n)
209+
(i : Fin n) : HasEigenvalue T (hT.unsortedEigenvalues hn i) := by
210+
unfold unsortedEigenvalues
211+
let ⟨x, hx⟩ := hT.direct_sum_isInternal.subordinateOrthonormalBasisIndex hn i
212+
hT.orthogonalFamily_eigenspaces'
213+
rwa [Eigenvalues.val_mk, RCLike.conj_eq_iff_re.mp (hT.conj_eigenvalue_eq_self hx)]
214+
208215
private theorem exists_unsortedEigenvalues_eq (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n)
209216
{μ : 𝕜} (hμ : HasEigenvalue T μ) : ∃ i : Fin n, hT.unsortedEigenvalues hn i = μ := by
210217
let (eq := hx) x : Eigenvalues T := ⟨μ, hμ⟩
@@ -215,15 +222,19 @@ private theorem exists_unsortedEigenvalues_eq (hT : T.IsSymmetric) (hn : Module.
215222
hT.conj_eigenvalue_eq_self hμ]
216223

217224
private theorem card_filter_unsortedEigenvalues_eq (hT : T.IsSymmetric)
218-
(hn : Module.finrank 𝕜 E = n) {μ : 𝕜} (hμ : HasEigenvalue T μ) :
225+
(hn : Module.finrank 𝕜 E = n) (μ : 𝕜) :
219226
Finset.card {i | hT.unsortedEigenvalues hn i = μ} = Module.finrank 𝕜 (eigenspace T μ) := by
220-
convert hT.direct_sum_isInternal.card_filter_subordinateOrthonormalBasisIndex_eq hn
221-
hT.orthogonalFamily_eigenspaces' ⟨μ, hμ⟩ with i
222-
rw [unsortedEigenvalues]
223-
set x := hT.direct_sum_isInternal.subordinateOrthonormalBasisIndex hn i
224-
hT.orthogonalFamily_eigenspaces'
225-
rw [RCLike.conj_eq_iff_re.mp (hT.conj_eigenvalue_eq_self (μ := x.val) x.property)]
226-
aesop
227+
by_cases hμ : HasEigenvalue T μ
228+
· convert hT.direct_sum_isInternal.card_filter_subordinateOrthonormalBasisIndex_eq hn
229+
hT.orthogonalFamily_eigenspaces' ⟨μ, hμ⟩ with i
230+
unfold unsortedEigenvalues
231+
let ⟨x, hx⟩ := hT.direct_sum_isInternal.subordinateOrthonormalBasisIndex hn i
232+
hT.orthogonalFamily_eigenspaces'
233+
rw [Eigenvalues.val_mk, RCLike.conj_eq_iff_re.mp (hT.conj_eigenvalue_eq_self hx)]
234+
exact Subtype.mk_eq_mk.symm
235+
· rw [Module.End.hasEigenvalue_iff.not_left.mp hμ, finrank_bot, Finset.card_filter_eq_zero_iff]
236+
intro i _ rfl
237+
exact hμ (hT.hasEigenvalue_unsortedEigenvalues hn i)
227238

228239
private noncomputable def unsortedEigenvectorBasis (hT : T.IsSymmetric)
229240
(hn : Module.finrank 𝕜 E = n) : OrthonormalBasis (Fin n) 𝕜 E :=
@@ -265,10 +276,9 @@ theorem exists_eigenvalues_eq (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E =
265276
use ((Tuple.sort (hT.unsortedEigenvalues hn)).symm i).revPerm
266277
simp [eigenvalues_def, hi]
267278

268-
theorem card_filter_eigenvalues_eq (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) {μ : 𝕜}
269-
(hμ : HasEigenvalue T μ) :
279+
theorem card_filter_eigenvalues_eq (hT : T.IsSymmetric) (hn : Module.finrank 𝕜 E = n) (μ : 𝕜) :
270280
Finset.card {i | hT.eigenvalues hn i = μ} = Module.finrank 𝕜 (eigenspace T μ) := by
271-
rw [← hT.card_filter_unsortedEigenvalues_eq hn, eigenvalues_def]
281+
rw [← hT.card_filter_unsortedEigenvalues_eq hn, eigenvalues_def]
272282
apply Finset.card_equiv (Fin.revPerm.trans (Tuple.sort (hT.unsortedEigenvalues hn)))
273283
simp
274284

0 commit comments

Comments
 (0)