@@ -10,6 +10,10 @@ import Mathlib.Analysis.Normed.Operator.Banach
1010import Mathlib.Analysis.Normed.Operator.BoundedLinearMaps
1111import Mathlib.Analysis.Normed.Operator.Compact
1212import Mathlib.LinearAlgebra.Eigenspace.Basic
13+ import Mathlib.Analysis.InnerProductSpace.Spectrum
14+ import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Instances
15+ import Mathlib.Analysis.CStarAlgebra.ContinuousFunctionalCalculus.Order
16+
1317
1418/-!
1519# Spectral theory of compact operators
@@ -113,16 +117,19 @@ theorem riesz_lemma_one
113117 rwa [← le_inv_mul_iff₀' (by simpa), ← h₂, smul_sub, inv_smul_smul₀] at h₁
114118 simpa using hx₀'
115119
116- -- theorem riesz_lemma_of_norm_lt {c : 𝕜} (hc : 1 < ‖c‖) {R : ℝ} (hR : ‖c‖ < R) {F : Subspace 𝕜 E}
117- -- (hFc : IsClosed (F : Set E)) (hF : ∃ x : E, x ∉ F) :
118- -- ∃ x₀ : E, ‖x₀‖ ≤ R ∧ ∀ y ∈ F, 1 ≤ ‖x₀ - y‖ := by
119-
120+ /--
121+ Given an endomorphism `S` of a normed space that's a closed embedding but not surjective, we can
122+ find a sequence of unit vectors `f n`, such that `f n` is in the range of `S ^ n` but is at least
123+ `1/2` away from any vector in the range of `S ^ (n + 1)`.
124+ -/
120125theorem thing {𝕜 X : Type *} [RCLike 𝕜] [NormedAddCommGroup X] [NormedSpace 𝕜 X]
121- {S : X →L[𝕜] X}
126+ {S : End 𝕜 X}
122127 (hS_not_surj : ¬ (S : X → X).Surjective)
123- (hS_inj : (S : X → X).Injective)
124- (hT_anti : Topology.IsClosedEmbedding S) :
125- ∃ f : ℕ → X, (∀ n, ‖f n‖ = 1 ) ∧ Pairwise (2 ⁻¹ ≤ ‖f · - f ·‖) := by
128+ (hS_anti : Topology.IsClosedEmbedding S)
129+ {r : ℝ} (hr : r < 1 ) :
130+ ∃ f : ℕ → X,
131+ (∀ n, ‖f n‖ = 1 ) ∧ (∀ n, f n ∈ (S ^ n).range) ∧
132+ (∀ n, ∀ y ∈ (S ^ (n + 1 )).range, r ≤ ‖f n - y‖) := by
126133 obtain ⟨x, hx⟩ : ∃ x : X, ∀ y, S y ≠ x := by simpa [Function.Surjective] using hS_not_surj
127134 let V (n : ℕ) : Submodule 𝕜 X := S.iterateRange n
128135 have hV_succ (n : ℕ) : V (n + 1 ) = (V n).map (S : End 𝕜 X) := LinearMap.iterateRange_succ
@@ -131,30 +138,23 @@ theorem thing {𝕜 X : Type*} [RCLike 𝕜] [NormedAddCommGroup X] [NormedSpace
131138 | zero => simp [V, Module.End.one_eq_id]
132139 | succ n ih =>
133140 rw [hV_succ]
134- apply hT_anti .isClosedMap _ ih
135- have x (n : ℕ) : ∃ x ∈ V n, ‖x‖ = 1 ∧ ∀ y ∈ V (n + 1 ), 2 ⁻¹ ≤ ‖x - y‖ := by
141+ apply hS_anti .isClosedMap _ ih
142+ have x (n : ℕ) : ∃ x ∈ V n, ‖x‖ = 1 ∧ ∀ y ∈ V (n + 1 ), r ≤ ‖x - y‖ := by
136143 have h₁ : IsClosed (Submodule.comap (V n).subtype (V (n + 1 )) : Set (V n)) := by
137144 simpa using (hV_closed (n + 1 )).preimage_val
138145 have h₂ : ∃ x : V n, x ∉ (V (n + 1 )).comap (V n).subtype := by
139- suffices ∃ a, ∀ y, S y ≠ a by simpa [iterate_succ, V, (iterate_injective hS_inj n).eq_iff]
140- use x
141- obtain ⟨⟨x, hx⟩, hx', hxn, hxy⟩ := riesz_lemma_one h₁ h₂ (show 2 ⁻¹ < 1 by norm_num)
146+ simpa [iterate_succ, V, (iterate_injective hS_anti.injective n).eq_iff] using by use x
147+ obtain ⟨⟨x, hx⟩, hx', hxn, hxy⟩ := riesz_lemma_one h₁ h₂ hr
142148 simp only [Submodule.mem_comap, Submodule.subtype_apply, AddSubgroupClass.coe_norm,
143149 AddSubgroupClass.coe_sub, Subtype.forall] at hx' hxn hxy
144150 exact ⟨x, hx, hxn, fun y hy ↦ hxy y (S.iterateRange.monotone (by simp) hy) hy⟩
145151 choose x hxv hxn hxy using x
146- refine ⟨x, hxn, ?_⟩
147- intro m n hmn
148- wlog! hmn' : m < n generalizing m n
149- · rw [norm_sub_rev]
150- exact this hmn.symm (by order)
151- exact hxy m (x n) (S.iterateRange.monotone hmn' (hxv n))
152+ exact ⟨x, hxn, hxv, hxy⟩
152153
153154/-- The Fredholm alternative for compact operators: if `T` is a compact operator and `μ ≠ 0`,
154155then either `μ` is an eigenvalue of `T`, or `μ` is in the resolvent set of `T`. -/
155156theorem fredholm_alternative [CompleteSpace X] (hT : IsCompactOperator T)
156- {μ : 𝕜} (hμ : μ ≠ 0 ) :
157- HasEigenvalue (T : End 𝕜 X) μ ∨ μ ∈ resolventSet 𝕜 T := by
157+ {μ : 𝕜} (hμ : μ ≠ 0 ) : HasEigenvalue (T : End 𝕜 X) μ ∨ μ ∈ resolventSet 𝕜 T := by
158158 by_contra!
159159 obtain ⟨h₁, h₂⟩ := this
160160 let (eq := hS) S := (T - μ • 1 )
@@ -165,21 +165,85 @@ theorem fredholm_alternative [CompleteSpace X] (hT : IsCompactOperator T)
165165 ext x
166166 simp [S]
167167 obtain ⟨K, -, hK : AntilipschitzWith K S⟩ := antilipschitz_of_not_hasEigenvalue hT hμ h₁
168- obtain ⟨f, hf_norm, hf_pair⟩ := thing (mt (.intro hK.injective) h₂) hK.injective
169- (hK.isClosedEmbedding S.uniformContinuous)
170- have : Pairwise fun x₁ x₂ ↦ 2 ⁻¹ * K ≤ ‖T (f x₁) - T (f x₂)‖ := by
168+ obtain ⟨f, hf_norm, hf_mem, hf_far⟩ := thing (mt (.intro hK.injective) h₂)
169+ (hK.isClosedEmbedding S.uniformContinuous) (show 2 ⁻¹ < 1 by norm_num)
170+ have hf_mem' (n : ℕ) : S (f n) ∈ ((S : End 𝕜 X) ^ (n + 1 )).range := by
171+ rw [iterate_succ']
172+ rw [LinearMap.range_comp]
173+ exact ⟨f n, hf_mem n, rfl⟩
174+ have hp : Pairwise fun x₁ x₂ ↦ 2 ⁻¹ * ‖μ‖ ≤ ‖T (f x₁) - T (f x₂)‖ := by
171175 intro m n hmn
172- have := hK.le_mul_dist (f m) (f n)
173- simp [dist_eq_norm_sub] at this
176+ wlog! hmn' : m < n generalizing m n
177+ · rw [norm_sub_rev]
178+ exact this hmn.symm (by order)
179+ let u : X := μ⁻¹ • (S (f n) - S (f m) + μ • f n)
180+ have hu : μ • (f m - u) = (T (f m) - T (f n)) := by
181+ rw [smul_sub, smul_inv_smul₀ hμ]
182+ simp [S]
183+ linear_combination (norm := module )
184+ have : u ∈ ((S : End 𝕜 X) ^ (m + 1 )).range := by
185+ apply Submodule.smul_mem _ _ (Submodule.add_mem _ _ _)
186+ · exact Submodule.sub_mem _ ((S : End 𝕜 X).iterateRange.monotone (by lia) (hf_mem' _))
187+ (hf_mem' _)
188+ · exact Submodule.smul_mem _ μ ((S : End 𝕜 X).iterateRange.monotone (by lia) (hf_mem n))
189+ rw [← hu, norm_smul, mul_comm]
190+ grw [hf_far _ u this]
191+ obtain ⟨K, hK, hK'⟩ := hT.image_closedBall_subset_compact 1
192+ obtain ⟨y, hyK, ψ, hψ, hψy⟩ := hK.tendsto_subseq (fun n ↦ hK' ⟨f n, by simp [*], rfl⟩)
193+ replace hψy := hψy.cauchySeq
194+ rw [Metric.cauchySeq_iff'] at hψy
195+ obtain ⟨N, hN⟩ := hψy (2 ⁻¹ * ‖μ‖) (by positivity)
196+ simp only [dist_eq_norm_sub, ContinuousLinearMap.coe_coe, Function.comp_apply] at hN
197+ have := hN (N + 1 ) (by simp)
198+ refine this.not_ge ?_
199+ apply hp
200+ simp [hψ.injective.eq_iff]
201+
202+ def ContinuousLinearMap.toLinearMapAlgHom
203+ {R₁ : Type *} [CommSemiring R₁] {M₁ : Type *}
204+ [TopologicalSpace M₁] [CommRing M₁] [Algebra R₁ M₁] [IsScalarTower R₁ R₁ M₁]
205+ [ContinuousAdd M₁] [ContinuousConstSMul R₁ M₁] [IsTopologicalAddGroup M₁] :
206+ (M₁ →L[R₁] M₁) →ₐ[R₁] M₁ →ₗ[R₁] M₁ where
207+ toRingHom := ContinuousLinearMap.toLinearMapRingHom
208+ commutes' r := by
209+ ext x
210+ simp
211+
212+ theorem ContinuousLinearMap.isUnit_toLinearMap_iff {𝕜 X : Type *} [NontriviallyNormedField 𝕜]
213+ [NormedAddCommGroup X] [NormedSpace 𝕜 X] [CompleteSpace X] {T : X →L[𝕜] X} :
214+ IsUnit T ↔ IsUnit (T : End 𝕜 X) := by
215+ rw [ContinuousLinearMap.isUnit_iff_bijective, Module.End.isUnit_iff]
216+ rfl
217+
218+ theorem ContinuousLinearMap.spectrum_eq [CompleteSpace X] :
219+ spectrum 𝕜 (T : X →L[𝕜] X) = spectrum 𝕜 (T : End 𝕜 X) := by
220+ ext μ
221+ rw [spectrum, resolventSet, Set.mem_compl_iff, Set.mem_setOf,
222+ ContinuousLinearMap.isUnit_toLinearMap_iff]
223+ rfl
224+
225+ theorem hasEigenvalue_iff_mem_spectrum [CompleteSpace X] (hT : IsCompactOperator T)
226+ {μ : 𝕜} (hμ : μ ≠ 0 ) :
227+ HasEigenvalue (T : End 𝕜 X) μ ↔ μ ∈ spectrum 𝕜 T := by
228+ constructor
229+ · intro hμ'
230+ rw [ContinuousLinearMap.spectrum_eq]
231+ exact hμ'.mem_spectrum
232+ · intro h
233+ exact (fredholm_alternative hT hμ).resolve_right h
234+
235+ theorem IsCompactOperator.forall_eigenspace_ne_bot_iff_eq_zero
236+ {𝕜 X : Type *} [RCLike 𝕜] [NormedAddCommGroup X] [InnerProductSpace 𝕜 X] [CompleteSpace X]
237+ {T : X →L[𝕜] X}
238+ (hT : IsCompactOperator T)
239+ (hT' : (T : End 𝕜 X).IsSymmetric) :
240+ (∀ μ, HasEigenvalue (T : End 𝕜 X) μ → μ = 0 ) ↔ T = 0 := by
241+ constructor
242+ · intro h
243+ rw [← ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric] at hT'
244+ have := CStarAlgebra.norm_or_neg_norm_mem_spectrum
174245 sorry
175- sorry
176-
177-
178- -- have S_inj : (S : X → X).Injective := by
179- -- rw [hasEigenvalue_iff, eigenspace_def, not_not, LinearMap.ker_eq_bot] at h₁
180- -- exact h₁
181- -- let V (n : ℕ) : Submodule ℂ X := (S ^ n).range
182-
183- -- sorry
184-
185- -- #min_imports
246+ · rintro rfl μ h
247+ obtain ⟨v, hv⟩ := h.exists_hasEigenvector
248+ simp [hasEigenvector_iff] at hv
249+ grind [smul_eq_zero]
0 commit comments