Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Mathlib/LinearAlgebra/Eigenspace/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,14 @@ theorem hasEigenvalue_iff_mem_spectrum [FiniteDimensional K V] {f : End K V} {μ

alias ⟨_, HasEigenvalue.of_mem_spectrum⟩ := hasEigenvalue_iff_mem_spectrum

theorem mem_spectrum_of_map_eq_smul {f : End R M} {v : M} {a : R} (h0 : v ≠ 0) (h : f v = a • v) :

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to keep things consistent with the files, can you use \mu instead of a for the eigenvalue (here and below, and also for the matrix lemmas)?

a ∈ spectrum R f :=
hasEigenvalue_of_hasEigenvector ⟨by simp [h], h0⟩ |>.mem_spectrum

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you move this below the hasEigenvalue_iff_exists_map_eq_smul lemma then you can use that lemma without simp

Suggested change
hasEigenvalue_of_hasEigenvector ⟨by simp [h], h0⟩ |>.mem_spectrum
(hasEigenvalue_iff_exists_map_eq_smul.mpr ⟨v, h0, h⟩).mem_spectrum

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's why I said I think we should remove this lemma entirely. The .mem_spectrum at the end makes it weaker (when the module isn't finite-dimensional), so it's a weak version of one side of an iff we already have.
Wdyt?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean? They're all already in the right generality (without finite-dimensionality)?

Anyway, if you don't think it's useful to have you can remove it.


theorem hasEigenvalue_iff_exists_map_eq_smul {f : End R M} {a : R} :
f.HasEigenvalue a ↔ ∃ v ≠ 0, f v = a • v := by
simp [hasEigenvalue_iff, Submodule.ne_bot_iff, and_comm]

theorem eigenspace_div (f : End K V) (a b : K) (hb : b ≠ 0) :
eigenspace f (a / b) = LinearMap.ker (b • f - algebraMap K (End K V) a) :=
genEigenspace_div f a b hb
Expand Down
14 changes: 14 additions & 0 deletions Mathlib/LinearAlgebra/Eigenspace/Matrix.lean
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,20 @@ theorem spectrum_toLin (A : Matrix n n R) (b : Basis n R M) :
theorem spectrum_toLin' (A : Matrix n n R) : spectrum R A.toLin' = spectrum R A :=
AlgEquiv.spectrum_eq Matrix.toLinAlgEquiv' A

theorem mem_spectrum_of_mulVec_eq_smul {A : Matrix n n R} {v : n → R} {a : R} (h0 : v ≠ 0)
Comment thread
SnirBroshi marked this conversation as resolved.
(h : A *ᵥ v = a • v) : a ∈ spectrum R A := by
rw [← spectrum_toLin']
exact mem_spectrum_of_map_eq_smul h0 h

theorem mem_spectrum_iff_exists_mulVec_eq_smul {K : Type*} [Field K] {A : Matrix n n K} {a : K} :
a ∈ spectrum K A ↔ ∃ v ≠ 0, A *ᵥ v = a • v := by
simp_rw [← spectrum_toLin', ← hasEigenvalue_iff_mem_spectrum,
hasEigenvalue_iff_exists_map_eq_smul, toLin'_apply]

theorem isUnit_iff_forall_mulVec_eq_zero {K : Type*} [Field K] {A : Matrix n n K} :

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this belongs in this file now (not using anything about spectrum anymore)

IsUnit A ↔ ∀ v, A *ᵥ v = 0 → v = 0 := by
simp_rw [← isUnit_toLin'_iff, A.toLin'.isUnit_iff_ker_eq_bot, A.toLin'.ker_eq_bot', toLin'_apply]

end Matrix

/-- The spectrum of the diagonal operator is the range of the diagonal viewed as a function. -/
Expand Down
Loading