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

Commit 8044794

Browse files
committed
feat(topology/algebra/module/basic): continuous linear maps are automatically uniformly continuous (#13276)
Generalize `continuous_linear_map.uniform_continuous`, `continuous_linear_equiv.uniform_embedding` and `linear_equiv.uniform_embedding` form `normed_space`s to `uniform_add_group`s and move them to `topology/algebra/module/basic`.
1 parent 79abf67 commit 8044794

File tree

3 files changed

+54
-36
lines changed

3 files changed

+54
-36
lines changed

src/analysis/normed_space/operator_norm.lean

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -479,10 +479,6 @@ f.to_linear_map.to_add_monoid_hom.isometry_iff_norm
479479

480480
variables [ring_hom_isometric σ₁₂] (f : E →SL[σ₁₂] F)
481481

482-
/-- A continuous linear map is automatically uniformly continuous. -/
483-
protected theorem uniform_continuous : uniform_continuous f :=
484-
f.lipschitz.uniform_continuous
485-
486482
@[simp, nontriviality] lemma op_norm_subsingleton [subsingleton E] : ∥f∥ = 0 :=
487483
begin
488484
refine le_antisymm _ (norm_nonneg _),
@@ -1164,10 +1160,11 @@ section
11641160
variables [nondiscrete_normed_field 𝕜] [nondiscrete_normed_field 𝕜₂] [nondiscrete_normed_field 𝕜₃]
11651161
[normed_space 𝕜 E] [normed_space 𝕜₂ F] [normed_space 𝕜₃ G] [normed_space 𝕜 Fₗ] (c : 𝕜)
11661162
{σ₁₂ : 𝕜 →+* 𝕜₂} {σ₂₃ : 𝕜₂ →+* 𝕜₃}
1167-
[ring_hom_isometric σ₁₂] (f g : E →SL[σ₁₂] F) (x y z : E)
1163+
(f g : E →SL[σ₁₂] F) (x y z : E)
11681164

1169-
lemma linear_map.bound_of_shell (f : E →ₛₗ[σ₁₂] F) {ε C : ℝ} (ε_pos : 0 < ε) {c : 𝕜}
1170-
(hc : 1 < ∥c∥) (hf : ∀ x, ε / ∥c∥ ≤ ∥x∥ → ∥x∥ < ε → ∥f x∥ ≤ C * ∥x∥) (x : E) :
1165+
lemma linear_map.bound_of_shell [ring_hom_isometric σ₁₂] (f : E →ₛₗ[σ₁₂] F) {ε C : ℝ}
1166+
(ε_pos : 0 < ε) {c : 𝕜} (hc : 1 < ∥c∥)
1167+
(hf : ∀ x, ε / ∥c∥ ≤ ∥x∥ → ∥x∥ < ε → ∥f x∥ ≤ C * ∥x∥) (x : E) :
11711168
∥f x∥ ≤ C * ∥x∥ :=
11721169
begin
11731170
by_cases hx : x = 0, { simp [hx] },
@@ -1200,7 +1197,7 @@ section op_norm
12001197
open set real
12011198

12021199
/-- An operator is zero iff its norm vanishes. -/
1203-
theorem op_norm_zero_iff : ∥f∥ = 0 ↔ f = 0 :=
1200+
theorem op_norm_zero_iff [ring_hom_isometric σ₁₂] : ∥f∥ = 0 ↔ f = 0 :=
12041201
iff.intro
12051202
(λ hn, continuous_linear_map.ext (λ x, norm_le_zero_iff.1
12061203
(calc _ ≤ ∥f∥ * ∥x∥ : le_op_norm _ _
@@ -1221,8 +1218,8 @@ instance norm_one_class [nontrivial E] : norm_one_class (E →L[𝕜] E) := ⟨n
12211218

12221219
/-- Continuous linear maps themselves form a normed space with respect to
12231220
the operator norm. -/
1224-
instance to_normed_group : normed_group (E →SL[σ₁₂] F) :=
1225-
normed_group.of_core _ ⟨op_norm_zero_iff, op_norm_add_le, op_norm_neg⟩
1221+
instance to_normed_group [ring_hom_isometric σ₁₂] : normed_group (E →SL[σ₁₂] F) :=
1222+
normed_group.of_core _ ⟨λ f, op_norm_zero_iff f, op_norm_add_le, op_norm_neg⟩
12261223

12271224
/-- Continuous linear maps form a normed ring with respect to the operator norm. -/
12281225
instance to_normed_ring : normed_ring (E →L[𝕜] E) :=
@@ -1238,7 +1235,8 @@ instance to_normed_algebra [nontrivial E] : normed_algebra 𝕜 (E →L[𝕜] E)
12381235

12391236
variable {f}
12401237

1241-
lemma homothety_norm [nontrivial E] (f : E →SL[σ₁₂] F) {a : ℝ} (hf : ∀x, ∥f x∥ = a * ∥x∥) :
1238+
lemma homothety_norm [ring_hom_isometric σ₁₂] [nontrivial E] (f : E →SL[σ₁₂] F) {a : ℝ}
1239+
(hf : ∀x, ∥f x∥ = a * ∥x∥) :
12421240
∥f∥ = a :=
12431241
begin
12441242
obtain ⟨x, hx⟩ : ∃ (x : E), x ≠ 0 := exists_ne 0,
@@ -1296,7 +1294,7 @@ section completeness
12961294
open_locale topological_space
12971295
open filter
12981296

1299-
variables {E' : Type*} [semi_normed_group E'] [normed_space 𝕜 E']
1297+
variables {E' : Type*} [semi_normed_group E'] [normed_space 𝕜 E'] [ring_hom_isometric σ₁₂]
13001298

13011299
/-- Construct a bundled continuous (semi)linear map from a map `f : E → F` and a proof of the fact
13021300
that it belongs to the closure of the image of a bounded set `s : set (E →SL[σ₁₂] F)` under coercion
@@ -1417,7 +1415,7 @@ extend_unique _ _ _ _ _ (zero_comp _)
14171415
end
14181416

14191417
section
1420-
variables {N : ℝ≥0} (h_e : ∀x, ∥x∥ ≤ N * ∥e x∥)
1418+
variables {N : ℝ≥0} (h_e : ∀x, ∥x∥ ≤ N * ∥e x∥) [ring_hom_isometric σ₁₂]
14211419

14221420
local notation ` := f.extend e h_dense (uniform_embedding_of_bound _ h_e).to_uniform_inducing
14231421

@@ -1457,7 +1455,8 @@ end continuous_linear_map
14571455

14581456
namespace linear_isometry
14591457

1460-
@[simp] lemma norm_to_continuous_linear_map [nontrivial E] (f : E →ₛₗᵢ[σ₁₂] F) :
1458+
@[simp] lemma norm_to_continuous_linear_map [nontrivial E] [ring_hom_isometric σ₁₂]
1459+
(f : E →ₛₗᵢ[σ₁₂] F) :
14611460
∥f.to_continuous_linear_map∥ = 1 :=
14621461
f.to_continuous_linear_map.homothety_norm $ by simp
14631462

@@ -1466,7 +1465,8 @@ variables {σ₁₃ : 𝕜 →+* 𝕜₃} [ring_hom_comp_triple σ₁₂ σ₂
14661465
include σ₁₃
14671466
/-- Postcomposition of a continuous linear map with a linear isometry preserves
14681467
the operator norm. -/
1469-
lemma norm_to_continuous_linear_map_comp (f : F →ₛₗᵢ[σ₂₃] G) {g : E →SL[σ₁₂] F} :
1468+
lemma norm_to_continuous_linear_map_comp [ring_hom_isometric σ₁₂] (f : F →ₛₗᵢ[σ₂₃] G)
1469+
{g : E →SL[σ₁₂] F} :
14701470
∥f.to_continuous_linear_map.comp g∥ = ∥g∥ :=
14711471
op_norm_ext (f.to_continuous_linear_map.comp g) g
14721472
(λ x, by simp only [norm_map, coe_to_continuous_linear_map, coe_comp'])
@@ -1594,12 +1594,6 @@ protected lemma antilipschitz (e : E ≃SL[σ₁₂] F) :
15941594
antilipschitz_with (nnnorm (e.symm : F →SL[σ₂₁] E)) e :=
15951595
e.symm.lipschitz.to_right_inverse e.left_inv
15961596

1597-
include σ₂₁
1598-
/-- A continuous linear equiv is a uniform embedding. -/
1599-
lemma uniform_embedding [ring_hom_isometric σ₁₂] (e : E ≃SL[σ₁₂] F) : uniform_embedding e :=
1600-
e.antilipschitz.uniform_embedding e.lipschitz.uniform_continuous
1601-
omit σ₂₁
1602-
16031597
lemma one_le_norm_mul_norm_symm [ring_hom_isometric σ₁₂] [nontrivial E] (e : E ≃SL[σ₁₂] F) :
16041598
1 ≤ ∥(e : E →SL[σ₁₂] F)∥ * ∥(e.symm : F →SL[σ₂₁] E)∥ :=
16051599
begin
@@ -1676,21 +1670,6 @@ end
16761670

16771671
end continuous_linear_equiv
16781672

1679-
variables [nondiscrete_normed_field 𝕜] [nondiscrete_normed_field 𝕜₂]
1680-
[normed_space 𝕜 E] [normed_space 𝕜₂ F] {σ₁₂ : 𝕜 →+* 𝕜₂} {σ₂₁ : 𝕜₂ →+* 𝕜}
1681-
[ring_hom_inv_pair σ₁₂ σ₂₁] [ring_hom_inv_pair σ₂₁ σ₁₂]
1682-
[ring_hom_isometric σ₁₂] [ring_hom_isometric σ₂₁]
1683-
1684-
include σ₂₁
1685-
lemma linear_equiv.uniform_embedding (e : E ≃ₛₗ[σ₁₂] F) (h₁ : continuous e)
1686-
(h₂ : continuous e.symm) : uniform_embedding e :=
1687-
continuous_linear_equiv.uniform_embedding
1688-
({ continuous_to_fun := h₁,
1689-
continuous_inv_fun := h₂,
1690-
.. e } : E ≃SL[σ₁₂] F)
1691-
1692-
omit σ₂₁
1693-
16941673
end normed
16951674

16961675
/--

src/topology/algebra/module/basic.lean

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Jan-David Salchow, Sébastien Gouëzel, Jean Lo, Yury Kudryashov, Fréd
66
-/
77
import topology.algebra.ring
88
import topology.algebra.mul_action
9+
import topology.algebra.uniform_group
910
import topology.uniform_space.uniform_embedding
1011
import algebra.algebra.basic
1112
import linear_algebra.projection
@@ -360,6 +361,12 @@ instance to_fun : has_coe_to_fun (M₁ →SL[σ₁₂] M₂) (λ _, M₁ → M
360361
@[continuity]
361362
protected lemma continuous (f : M₁ →SL[σ₁₂] M₂) : continuous f := f.2
362363

364+
protected lemma uniform_continuous {E₁ E₂ : Type*} [uniform_space E₁] [uniform_space E₂]
365+
[add_comm_group E₁] [add_comm_group E₂] [module R₁ E₁] [module R₂ E₂]
366+
[uniform_add_group E₁] [uniform_add_group E₂] (f : E₁ →SL[σ₁₂] E₂) :
367+
uniform_continuous f :=
368+
uniform_continuous_add_monoid_hom_of_continuous f.continuous
369+
363370
@[simp, norm_cast] lemma coe_inj {f g : M₁ →SL[σ₁₂] M₂} :
364371
(f : M₁ →ₛₗ[σ₁₂] M₂) = g ↔ f = g :=
365372
coe_injective.eq_iff
@@ -1496,6 +1503,25 @@ by rw [e.symm.image_eq_preimage, e.symm_symm]
14961503
@[simp] protected lemma preimage_symm_preimage (e : M₁ ≃SL[σ₁₂] M₂) (s : set M₁) :
14971504
e ⁻¹' (e.symm ⁻¹' s) = s := e.symm.symm_preimage_preimage s
14981505

1506+
protected lemma uniform_embedding {E₁ E₂ : Type*} [uniform_space E₁] [uniform_space E₂]
1507+
[add_comm_group E₁] [add_comm_group E₂] [module R₁ E₁] [module R₂ E₂]
1508+
[uniform_add_group E₁] [uniform_add_group E₂]
1509+
(e : E₁ ≃SL[σ₁₂] E₂) :
1510+
uniform_embedding e :=
1511+
e.to_linear_equiv.to_equiv.uniform_embedding
1512+
e.to_continuous_linear_map.uniform_continuous
1513+
e.symm.to_continuous_linear_map.uniform_continuous
1514+
1515+
protected lemma _root_.linear_equiv.uniform_embedding {E₁ E₂ : Type*} [uniform_space E₁]
1516+
[uniform_space E₂] [add_comm_group E₁] [add_comm_group E₂] [module R₁ E₁] [module R₂ E₂]
1517+
[uniform_add_group E₁] [uniform_add_group E₂]
1518+
(e : E₁ ≃ₛₗ[σ₁₂] E₂) (h₁ : continuous e) (h₂ : continuous e.symm) :
1519+
uniform_embedding e :=
1520+
continuous_linear_equiv.uniform_embedding
1521+
({ continuous_to_fun := h₁,
1522+
continuous_inv_fun := h₂,
1523+
.. e } : E₁ ≃SL[σ₁₂] E₂)
1524+
14991525
omit σ₂₁
15001526

15011527
/-- Create a `continuous_linear_equiv` from two `continuous_linear_map`s that are

src/topology/uniform_space/uniform_embedding.lean

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,19 @@ by simp only [uniform_embedding_def, uniform_continuous_def]; exact
9090
λ ⟨I, H₁, H₂⟩, ⟨I, λ s, ⟨H₂ s,
9191
λ ⟨t, tu, h⟩, mem_of_superset (H₁ t tu) (λ ⟨a, b⟩, h a b)⟩⟩⟩
9292

93+
lemma equiv.uniform_embedding {α β : Type*} [uniform_space α] [uniform_space β] (f : α ≃ β)
94+
(h₁ : uniform_continuous f) (h₂ : uniform_continuous f.symm) : uniform_embedding f :=
95+
{ comap_uniformity :=
96+
begin
97+
refine le_antisymm _ _,
98+
{ change comap (f.prod_congr f) _ ≤ _,
99+
rw ← map_equiv_symm (f.prod_congr f),
100+
exact h₂ },
101+
{ rw ← map_le_iff_le_comap,
102+
exact h₁ }
103+
end,
104+
inj := f.injective }
105+
93106
theorem uniform_embedding_inl : uniform_embedding (sum.inl : α → α ⊕ β) :=
94107
begin
95108
apply uniform_embedding_def.2 ⟨sum.inl_injective, λ s, ⟨_, _⟩⟩,

0 commit comments

Comments
 (0)