Skip to content

Commit e5c91d3

Browse files
committed
wip
1 parent 2ceb0ac commit e5c91d3

1 file changed

Lines changed: 101 additions & 37 deletions

File tree

Mathlib/Analysis/SpecialFunctions/Log/Compact.lean

Lines changed: 101 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import Mathlib.Analysis.Normed.Operator.Banach
1010
import Mathlib.Analysis.Normed.Operator.BoundedLinearMaps
1111
import Mathlib.Analysis.Normed.Operator.Compact
1212
import 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+
-/
120125
theorem 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`,
154155
then either `μ` is an eigenvalue of `T`, or `μ` is in the resolvent set of `T`. -/
155156
theorem 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

Comments
 (0)