@@ -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+
208215private 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
217224private 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
228239private 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 hμ , 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