Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit b45657f

Browse files
j-loreauxurkud
andcommitted
feat(algebra/algebra/spectrum, analysis/normed_space/spectrum): prove the spectrum of any element in a complex Banach algebra is nonempty (#12115)
This establishes that the spectrum of any element in a (nontrivial) complex Banach algebra is nonempty. The nontrivial assumption is necessary, as otherwise the only element is invertible. In addition, we establish some properties of the resolvent function; in particular, it tends to zero at infinity. - [x] depends on: #12095 Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
1 parent 29c84f7 commit b45657f

File tree

2 files changed

+120
-17
lines changed

2 files changed

+120
-17
lines changed

src/algebra/algebra/spectrum.lean

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,15 @@ section defs
4444
variables (R : Type u) {A : Type v}
4545
variables [comm_semiring R] [ring A] [algebra R A]
4646

47+
local notation `↑ₐ` := algebra_map R A
48+
4749
-- definition and basic properties
4850

4951
/-- Given a commutative ring `R` and an `R`-algebra `A`, the *resolvent set* of `a : A`
5052
is the `set R` consisting of those `r : R` for which `r•1 - a` is a unit of the
5153
algebra `A`. -/
5254
def resolvent_set (a : A) : set R :=
53-
{ r : R | is_unit (algebra_map R A r - a) }
55+
{ r : R | is_unit (↑ₐr - a) }
5456

5557

5658
/-- Given a commutative ring `R` and an `R`-algebra `A`, the *spectrum* of `a : A`
@@ -66,23 +68,23 @@ variable {R}
6668
a map `R → A` which sends `r : R` to `(algebra_map R A r - a)⁻¹` when
6769
`r ∈ resolvent R A` and `0` when `r ∈ spectrum R A`. -/
6870
noncomputable def resolvent (a : A) (r : R) : A :=
69-
ring.inverse (algebra_map R A r - a)
70-
71-
72-
end defs
71+
ring.inverse (↑ₐr - a)
7372

73+
/-- The unit `1 - r⁻¹ • a` constructed from `r • 1 - a` when the latter is a unit. -/
74+
@[simps]
75+
noncomputable def is_unit.sub_inv_smul {r : Rˣ} {s : R} {a : A}
76+
(h : is_unit $ r • ↑ₐs - a) : Aˣ :=
77+
{ val := ↑ₐs - r⁻¹ • a,
78+
inv := r • ↑h.unit⁻¹,
79+
val_inv := by rw [mul_smul_comm, ←smul_mul_assoc, smul_sub, smul_inv_smul, h.mul_coe_inv],
80+
inv_val := by rw [smul_mul_assoc, ←mul_smul_comm, smul_sub, smul_inv_smul, h.coe_inv_mul], }
7481

7582
-- products of scalar units and algebra units
76-
77-
78-
lemma is_unit.smul_sub_iff_sub_inv_smul {R : Type u} {A : Type v}
79-
[comm_ring R] [ring A] [algebra R A] {r : Rˣ} {a : A} :
83+
lemma is_unit.smul_sub_iff_sub_inv_smul {r : Rˣ} {a : A} :
8084
is_unit (r • 1 - a) ↔ is_unit (1 - r⁻¹ • a) :=
81-
begin
82-
have a_eq : a = r•r⁻¹•a, by simp,
83-
nth_rewrite 0 a_eq,
84-
rw [←smul_sub,is_unit_smul_iff],
85-
end
85+
by rw [←@is_unit_smul_iff _ _ _ _ _ _ _ r (1 - r⁻¹ • a), smul_sub, smul_inv_smul]
86+
87+
end defs
8688

8789
namespace spectrum
8890
open_locale polynomial
@@ -116,6 +118,34 @@ lemma resolvent_eq {a : A} {r : R} (h : r ∈ resolvent_set R a) :
116118
resolvent a r = ↑h.unit⁻¹ :=
117119
ring.inverse_unit h.unit
118120

121+
lemma units_smul_resolvent {r : Rˣ} {s : R} {a : A} :
122+
r • resolvent a (s : R) = resolvent (r⁻¹ • a) (r⁻¹ • s : R) :=
123+
begin
124+
by_cases h : s ∈ spectrum R a,
125+
{ rw [mem_iff] at h,
126+
simp only [resolvent, algebra.algebra_map_eq_smul_one] at *,
127+
rw [smul_assoc, ←smul_sub],
128+
have h' : ¬ is_unit (r⁻¹ • (s • 1 - a)),
129+
from λ hu, h (by simpa only [smul_inv_smul] using is_unit.smul r hu),
130+
simp only [ring.inverse_non_unit _ h, ring.inverse_non_unit _ h', smul_zero] },
131+
{ simp only [resolvent],
132+
have h' : is_unit (r • (algebra_map R A (r⁻¹ • s)) - a),
133+
{ simpa [algebra.algebra_map_eq_smul_one, smul_assoc] using not_mem_iff.mp h },
134+
rw [←h'.coe_sub_inv_smul, ←(not_mem_iff.mp h).unit_spec, ring.inverse_unit, ring.inverse_unit,
135+
h'.coe_inv_sub_inv_smul],
136+
simp only [algebra.algebra_map_eq_smul_one, smul_assoc, smul_inv_smul], },
137+
end
138+
139+
lemma units_smul_resolvent_self {r : Rˣ} {a : A} :
140+
r • resolvent a (r : R) = resolvent (r⁻¹ • a) (1 : R) :=
141+
by simpa only [units.smul_def, algebra.id.smul_eq_mul, units.inv_mul]
142+
using @units_smul_resolvent _ _ _ _ _ r r a
143+
144+
/-- The resolvent is a unit when the argument is in the resolvent set. -/
145+
lemma is_unit_resolvent {r : R} {a : A} :
146+
r ∈ resolvent_set R a ↔ is_unit (resolvent a r) :=
147+
is_unit_ring_inverse.symm
148+
119149
lemma inv_mem_resolvent_set {r : Rˣ} {a : Aˣ} (h : (r : R) ∈ resolvent_set R (a : A)) :
120150
(↑r⁻¹ : R) ∈ resolvent_set R (↑a⁻¹ : A) :=
121151
begin

src/analysis/normed_space/spectrum.lean

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Authors: Jireh Loreaux
55
-/
66
import algebra.algebra.spectrum
77
import analysis.special_functions.pow
8-
import analysis.complex.cauchy_integral
8+
import analysis.complex.liouville
99
import analysis.analytic.radius_liminf
1010
/-!
1111
# The spectrum of elements in a complete normed algebra
@@ -27,6 +27,7 @@ This file contains the basic theory for the resolvent and spectrum of a Banach a
2727
* `spectrum.has_deriv_at_resolvent`: the resolvent function is differentiable on the resolvent set.
2828
* `spectrum.pow_nnnorm_pow_one_div_tendsto_nhds_spectral_radius`: Gelfand's formula for the
2929
spectral radius in Banach algebras over `ℂ`.
30+
* `spectrum.nonempty`: the spectrum of any element in a complex Banach algebra is nonempty.
3031
3132
3233
## TODO
@@ -123,7 +124,9 @@ end
123124

124125
end spectrum_compact
125126

126-
section resolvent_deriv
127+
section resolvent
128+
129+
open filter asymptotics
127130

128131
variables [nondiscrete_normed_field 𝕜] [normed_ring A] [normed_algebra 𝕜 A] [complete_space A]
129132

@@ -139,7 +142,40 @@ begin
139142
simpa [resolvent, sq, hk.unit_spec, ← ring.inverse_unit hk.unit] using H₁.comp_has_deriv_at k H₂,
140143
end
141144

142-
end resolvent_deriv
145+
/- TODO: Once there is sufficient API for bornology, we should get a nice filter / asymptotics
146+
version of this, for example: `tendsto (resolvent a) (cobounded 𝕜) (𝓝 0)` or more specifically
147+
`is_O (resolvent a) (λ z, z⁻¹) (cobounded 𝕜)`. -/
148+
lemma norm_resolvent_le_forall (a : A) :
149+
∀ ε > 0, ∃ R > 0, ∀ z : 𝕜, R ≤ ∥z∥ → ∥resolvent a z∥ ≤ ε :=
150+
begin
151+
obtain ⟨c, c_pos, hc⟩ := (@normed_ring.inverse_one_sub_norm A _ _).exists_pos,
152+
rw [is_O_with_iff, eventually_iff, metric.mem_nhds_iff] at hc,
153+
rcases hc with ⟨δ, δ_pos, hδ⟩,
154+
simp only [cstar_ring.norm_one, mul_one] at hδ,
155+
intros ε hε,
156+
have ha₁ : 0 < ∥a∥ + 1 := lt_of_le_of_lt (norm_nonneg a) (lt_add_one _),
157+
have min_pos : 0 < min (δ * (∥a∥ + 1)⁻¹) (ε * c⁻¹),
158+
from lt_min (mul_pos δ_pos (inv_pos.mpr ha₁)) (mul_pos hε (inv_pos.mpr c_pos)),
159+
refine ⟨(min (δ * (∥a∥ + 1)⁻¹) (ε * c⁻¹))⁻¹, inv_pos.mpr min_pos, (λ z hz, _)⟩,
160+
have hnz : z ≠ 0 := norm_pos_iff.mp (lt_of_lt_of_le (inv_pos.mpr min_pos) hz),
161+
replace hz := inv_le_of_inv_le min_pos hz,
162+
rcases (⟨units.mk0 z hnz, units.coe_mk0 hnz⟩ : is_unit z) with ⟨z, rfl⟩,
163+
have lt_δ : ∥z⁻¹ • a∥ < δ,
164+
{ rw [units.smul_def, norm_smul, units.coe_inv', norm_inv],
165+
calc ∥(z : 𝕜)∥⁻¹ * ∥a∥ ≤ δ * (∥a∥ + 1)⁻¹ * ∥a∥
166+
: mul_le_mul_of_nonneg_right (hz.trans (min_le_left _ _)) (norm_nonneg _)
167+
... < δ
168+
: by { conv { rw mul_assoc, to_rhs, rw (mul_one δ).symm },
169+
exact mul_lt_mul_of_pos_left
170+
((inv_mul_lt_iff ha₁).mpr ((mul_one (∥a∥ + 1)).symm ▸ (lt_add_one _))) δ_pos } },
171+
rw [←inv_smul_smul z (resolvent a (z : 𝕜)), units_smul_resolvent_self, resolvent,
172+
algebra.algebra_map_eq_smul_one, one_smul, units.smul_def, norm_smul, units.coe_inv', norm_inv],
173+
calc _ ≤ ε * c⁻¹ * c : mul_le_mul (hz.trans (min_le_right _ _)) (hδ (mem_ball_zero_iff.mpr lt_δ))
174+
(norm_nonneg _) (mul_pos hε (inv_pos.mpr c_pos)).le
175+
... = _ : inv_mul_cancel_right₀ c_pos.ne.symm ε,
176+
end
177+
178+
end resolvent
143179

144180
section one_sub_smul
145181

@@ -273,6 +309,43 @@ end
273309

274310
end gelfand_formula
275311

312+
/-- In a (nontrivial) complex Banach algebra, every element has nonempty spectrum. -/
313+
theorem nonempty {A : Type*} [normed_ring A] [normed_algebra ℂ A] [complete_space A]
314+
[nontrivial A] [topological_space.second_countable_topology A]
315+
(a : A) : (spectrum ℂ a).nonempty :=
316+
begin
317+
/- Suppose `σ a = ∅`, then resolvent set is `ℂ`, any `(z • 1 - a)` is a unit, and `resolvent`
318+
is differentiable on `ℂ`. -/
319+
rw ←set.ne_empty_iff_nonempty,
320+
by_contra h,
321+
have H₀ : resolvent_set ℂ a = set.univ, by rwa [spectrum, set.compl_empty_iff] at h,
322+
have H₁ : differentiable ℂ (λ z : ℂ, resolvent a z), from λ z,
323+
(has_deriv_at_resolvent (H₀.symm ▸ set.mem_univ z : z ∈ resolvent_set ℂ a)).differentiable_at,
324+
/- The norm of the resolvent is small for all sufficently large `z`, and by compactness and
325+
continuity it is bounded on the complement of a large ball, thus uniformly bounded on `ℂ`.
326+
By Liouville's theorem `λ z, resolvent a z` is constant -/
327+
have H₂ := norm_resolvent_le_forall a,
328+
have H₃ : ∀ z : ℂ, resolvent a z = resolvent a (0 : ℂ),
329+
{ refine λ z, H₁.apply_eq_apply_of_bounded (bounded_iff_exists_norm_le.mpr _) z 0,
330+
rcases H₂ 1 zero_lt_one with ⟨R, R_pos, hR⟩,
331+
rcases (proper_space.is_compact_closed_ball (0 : ℂ) R).exists_bound_of_continuous_on
332+
H₁.continuous.continuous_on with ⟨C, hC⟩,
333+
use max C 1,
334+
rintros _ ⟨w, rfl⟩,
335+
refine or.elim (em (∥w∥ ≤ R)) (λ hw, _) (λ hw, _),
336+
{ exact (hC w (mem_closed_ball_zero_iff.mpr hw)).trans (le_max_left _ _) },
337+
{ exact (hR w (not_le.mp hw).le).trans (le_max_right _ _), }, },
338+
/- `resolvent a 0 = 0`, which is a contradition because it isn't a unit. -/
339+
have H₅ : resolvent a (0 : ℂ) = 0,
340+
{ refine norm_eq_zero.mp (le_antisymm (le_of_forall_pos_le_add (λ ε hε, _)) (norm_nonneg _)),
341+
rcases H₂ ε hε with ⟨R, R_pos, hR⟩,
342+
simpa only [H₃ R] using (zero_add ε).symm.subst
343+
(hR R (by exact_mod_cast (real.norm_of_nonneg R_pos.lt.le).symm.le)), },
344+
/- `not_is_unit_zero` is where we need `nontrivial A`, it is unavoidable. -/
345+
exact not_is_unit_zero (H₅.subst (is_unit_resolvent.mp
346+
(mem_resolvent_set_iff.mp (H₀.symm ▸ set.mem_univ 0)))),
347+
end
348+
276349
end spectrum
277350

278351
namespace alg_hom

0 commit comments

Comments
 (0)