1- import Mathlib
1+ /-
2+ Copyright (c) 2026 Bhavik Mehta. All rights reserved.
3+ Released under Apache 2.0 license as described in the file LICENSE.
4+ Authors: Bhavik Mehta
5+ -/
6+ import Mathlib.Algebra.Order.Ring.Star
7+ import Mathlib.Analysis.Normed.Module.RCLike.Basic
8+ import Mathlib.Analysis.Normed.Module.RieszLemma
9+ import Mathlib.Analysis.Normed.Operator.Banach
10+ import Mathlib.Analysis.Normed.Operator.BoundedLinearMaps
11+ import Mathlib.Analysis.Normed.Operator.Compact
12+ import Mathlib.LinearAlgebra.Eigenspace.Basic
13+
14+ /-!
15+ # Spectral theory of compact operators
16+
17+ This file develops the spectral theory of compact operators on Banach spaces.
18+ The main result is the Fredholm alternative for compact operators.
19+
20+ ## Main results
21+
22+ * `antilipschitz_of_not_hasEigenvalue`: if `T` is a compact operator and `μ ≠ 0` is not an
23+ eigenvalue, then `T - μI` is antilipschitz.
24+ * `fredholm_alternative`: the Fredholm alternative for compact operators.
25+ -/
226
327-- let X be a Banach space
4- variable {X : Type *} [NormedAddCommGroup X] [NormedSpace ℂ X]
28+ variable {𝕜 X : Type *} [RCLike 𝕜] [ NormedAddCommGroup X] [NormedSpace 𝕜 X]
529-- and T be a compact operator on it
6- variable {T : X →L[ℂ ] X} (hT : IsCompactOperator T)
30+ variable {T : X →L[𝕜 ] X}
731
8- open Module.End
32+ open Module End
33+
34+ /-- If a continuous linear map `f` satisfies `‖x‖ = 1 → 1 ≤ K * ‖f x‖`, then `f` is
35+ antilipschitz with constant `K`. -/
36+ lemma ContinuousLinearMap.antilipschitz_of_bound_of_norm_one {X Y : Type *}
37+ [NormedAddCommGroup X] [NormedSpace 𝕜 X] [NormedAddCommGroup Y] [NormedSpace 𝕜 Y]
38+ (f : X →L[𝕜] Y) {K : NNReal} (h : ∀ x, ‖x‖ = 1 → 1 ≤ K * ‖f x‖) :
39+ AntilipschitzWith K f :=
40+ ContinuousLinearMap.antilipschitz_of_bound _ fun x ↦ by
41+ obtain rfl | hx := eq_or_ne x 0
42+ · simp
43+ simpa [norm_smul, field] using h ((‖x‖⁻¹ : 𝕜) • x) (norm_smul_inv_norm hx)
944
1045open Filter Topology in
11- theorem far_away {μ : ℂ} (hμ : μ ≠ 0 ) (hT : IsCompactOperator T)
12- (h : ¬ HasEigenvalue (T : X →ₗ[ℂ] X) μ) :
13- ∃ c > 0 , ∀ x, c * ‖x‖ ≤ ‖(T - μ • 1 ) x‖ := by
14- -- By homogeneity, it suffices to establish the claim for unit vectors x.
46+ /-- If `T : X →L[𝕜] X` is a compact operator on a Banach space `X`, and `μ ≠ 0` is not an
47+ eigenvalue of `T`, then `T - μ • 1` is antilipschitz.
48+
49+ This is a useful step in the proof of the Fredholm alternative. -/
50+ theorem antilipschitz_of_not_hasEigenvalue (hT : IsCompactOperator T)
51+ {μ : 𝕜} (hμ : μ ≠ 0 ) (h : ¬ HasEigenvalue (T : End 𝕜 X) μ) :
52+ ∃ K > 0 , AntilipschitzWith K (T - μ • 1 : X →L[𝕜] X) := by
1553 suffices ∃ c > 0 , ∀ x, ‖x‖ = 1 → c ≤ ‖(T - μ • 1 ) x‖ by
1654 obtain ⟨c, hc', hc⟩ := this
17- refine ⟨c, hc', fun x ↦ ?_⟩
18- obtain h | h := eq_or_ne x 0
19- · simp [h]
20- simpa [norm_smul, le_inv_mul_iff₀', norm_pos_iff, h] using hc _ (norm_smul_inv_norm (𝕜 := ℂ) h)
55+ refine ⟨c.toNNReal⁻¹, by positivity, ?_⟩
56+ apply ContinuousLinearMap.antilipschitz_of_bound_of_norm_one
57+ simpa [NNReal.coe_inv, le_inv_mul_iff₀', hc'] using hc
2158 -- Suppose not, then we can find a sequence of unit vectors xₙ such that (T - μ • 1) xₙ → 0.
2259 by_contra!
2360 obtain ⟨φ, hφ_anti, hφ_pos, hφ⟩ := exists_seq_strictAnti_tendsto (0 : ℝ)
24- have : ∀ n, ∃ x, ‖x‖ = 1 ∧ ‖(T - μ • 1 ) x‖ < φ n := by
25- intro n
26- exact this (φ n) (hφ_pos n)
61+ have (n : ℕ) : ∃ x, ‖x‖ = 1 ∧ ‖(T - μ • 1 ) x‖ < φ n := this (φ n) (hφ_pos n)
2762 choose x hx_norm hx_bound using this
2863 have hx_lim : Tendsto (fun n ↦ (T - μ • 1 ) (x n)) atTop (𝓝 0 ) := squeeze_zero_norm (by grind) hφ
2964 -- Define the sequence of vectors yₙ := T xₙ
@@ -39,14 +74,14 @@ theorem far_away {μ : ℂ} (hμ : μ ≠ 0) (hT : IsCompactOperator T)
3974 -- since T is, so we can extract a convergent subsequence, and say y_ (ψ n) → y.
4075 obtain ⟨K, hK, hK'⟩ := hT.image_closedBall_subset_compact 1
4176 obtain ⟨y, hyK, ψ, hψ, hψy⟩ := hK.tendsto_subseq (x := y_) (fun n ↦ hK' ⟨x n, by simp [*], rfl⟩)
42- -- However (T - μ) yₙ = T (T - μ • 1) xₙ → 0
77+ -- However (T - μ • 1 ) yₙ = T (( T - μ • 1) xₙ) → 0
4378 have hy_lim : Tendsto (fun n ↦ (T - μ • 1 ) (y_ n)) atTop (nhds 0 ) := by
4479 have : Tendsto (fun n ↦ _) _ _ := T.continuous.continuousAt.tendsto.comp hx_lim
4580 simpa using this
46- -- so (T - μ) y = 0.
81+ -- so (T - μ • 1 ) y = 0.
4782 have hy_eigen' : (T - μ • 1 ) y = 0 := by
4883 apply tendsto_nhds_unique _ (hy_lim.comp hψ.tendsto_atTop)
49- have : Continuous (T - μ • 1 : X →L[ℂ ] X) := by fun_prop
84+ have : Continuous (T - μ • 1 : X →L[𝕜 ] X) := by fun_prop
5085 exact this.continuousAt.tendsto.comp hψy
5186 -- Since yₙ are bounded away from 0, we must have y ≠ 0.
5287 have hy_ne : y ≠ 0 := by
@@ -56,24 +91,95 @@ theorem far_away {μ : ℂ} (hμ : μ ≠ 0) (hT : IsCompactOperator T)
5691 specialize hψy (‖μ‖ / 2 ) (by positivity)
5792 filter_upwards [hψ.tendsto_atTop.eventually hy_lower, hψy] using by grind
5893 -- So y is an eigenvector of T with eigenvalue μ,
59- have : HasEigenvector (T : X →ₗ[ℂ] X) μ y := by
60- rw [hasEigenvector_iff]
61- rw [mem_genEigenspace_one]
62- simpa [hy_ne, sub_eq_zero] using hy_eigen'
94+ have : HasEigenvector (T : End 𝕜 X) μ y := by
95+ simpa [hasEigenvector_iff, mem_genEigenspace_one, hy_ne, sub_eq_zero] using hy_eigen'
6396 -- which is a contradiction.
6497 exact h (hasEigenvalue_of_hasEigenvector this)
6598
66- theorem fredholm_alternative [CompleteSpace X] {μ : ℂ} (hμ : μ ≠ 0 ) :
67- HasEigenvalue (T : X →ₗ[ℂ] X) μ ∨ μ ∈ resolventSet ℂ T := by
99+ /-- A variation of Riesz's lemma where we get a vector `x₀` of norm exactly 1. -/
100+ theorem riesz_lemma_one
101+ {𝕜 : Type *} [RCLike 𝕜] {E : Type *} [NormedAddCommGroup E] [NormedSpace 𝕜 E]
102+ {F : Subspace 𝕜 E} (hFc : IsClosed (F : Set E)) (hF : ∃ (x : E), x ∉ F) {r : ℝ} (hr : r < 1 ) :
103+ ∃ x₀ ∉ F, ‖x₀‖ = 1 ∧ ∀ y ∈ F, r ≤ ‖x₀ - y‖ := by
104+ obtain ⟨x₀, hx₀, h⟩ := riesz_lemma hFc hF hr
105+ have hx₀' : x₀ ≠ 0 := by rintro rfl; simp at hx₀
106+ refine ⟨(‖x₀‖⁻¹ : 𝕜) • x₀, ?_, norm_smul_inv_norm hx₀', ?_⟩
107+ · rwa [Submodule.smul_mem_iff]
108+ simpa
109+ intro y hy
110+ have h₂ : ‖(‖x₀‖ : 𝕜)⁻¹ • (x₀ - (‖x₀‖ : 𝕜) • y)‖ = ‖x₀‖⁻¹ * ‖x₀ - (‖x₀‖ : 𝕜) • y‖ := by
111+ rw [norm_smul, norm_inv, norm_algebraMap', norm_norm]
112+ have h₁ := h ((‖x₀‖ : 𝕜) • y) (F.smul_mem _ hy)
113+ rwa [← le_inv_mul_iff₀' (by simpa), ← h₂, smul_sub, inv_smul_smul₀] at h₁
114+ simpa using hx₀'
115+
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+ theorem thing {𝕜 X : Type *} [RCLike 𝕜] [NormedAddCommGroup X] [NormedSpace 𝕜 X]
121+ {S : X →L[𝕜] X}
122+ (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
126+ obtain ⟨x, hx⟩ : ∃ x : X, ∀ y, S y ≠ x := by simpa [Function.Surjective] using hS_not_surj
127+ let V (n : ℕ) : Submodule 𝕜 X := S.iterateRange n
128+ have hV_succ (n : ℕ) : V (n + 1 ) = (V n).map (S : End 𝕜 X) := LinearMap.iterateRange_succ
129+ have hV_closed (n : ℕ) : IsClosed (V n : Set X) := by
130+ induction n with
131+ | zero => simp [V, Module.End.one_eq_id]
132+ | succ n ih =>
133+ 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
136+ have h₁ : IsClosed (Submodule.comap (V n).subtype (V (n + 1 )) : Set (V n)) := by
137+ simpa using (hV_closed (n + 1 )).preimage_val
138+ 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)
142+ simp only [Submodule.mem_comap, Submodule.subtype_apply, AddSubgroupClass.coe_norm,
143+ AddSubgroupClass.coe_sub, Subtype.forall] at hx' hxn hxy
144+ exact ⟨x, hx, hxn, fun y hy ↦ hxy y (S.iterateRange.monotone (by simp) hy) hy⟩
145+ 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+
153+ /-- The Fredholm alternative for compact operators: if `T` is a compact operator and `μ ≠ 0`,
154+ then either `μ` is an eigenvalue of `T`, or `μ` is in the resolvent set of `T`. -/
155+ theorem fredholm_alternative [CompleteSpace X] (hT : IsCompactOperator T)
156+ {μ : 𝕜} (hμ : μ ≠ 0 ) :
157+ HasEigenvalue (T : End 𝕜 X) μ ∨ μ ∈ resolventSet 𝕜 T := by
68158 by_contra!
69159 obtain ⟨h₁, h₂⟩ := this
70- let S := (T - μ • 1 )
160+ let (eq := hS) S := (T - μ • 1 )
71161 replace h₂ : ¬ (S : X → X).Bijective := by
72162 rw [spectrum.mem_resolventSet_iff, ← IsUnit.neg_iff,
73163 ContinuousLinearMap.isUnit_iff_bijective] at h₂
74164 convert h₂
75165 ext x
76166 simp [S]
77- have : (S : X → X).Injective := by
167+ 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
171+ intro m n hmn
172+ have := hK.le_mul_dist (f m) (f n)
173+ simp [dist_eq_norm_sub] at this
78174 sorry
79175 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
0 commit comments