Skip to content

Commit 47928a0

Browse files
YaelDilliesBergschaf
authored andcommitted
feat(Analysis): operator norm of a LinearIsometryEquiv (leanprover-community#39143)
Also generalise a bunch of lemmas from `NormedAddCommGroup` + `Nontrivial` to `SeminormedAddCommGroup` + `NontrivialTopology`. From MeanFourier
1 parent ba3d564 commit 47928a0

3 files changed

Lines changed: 72 additions & 48 deletions

File tree

Mathlib/Analysis/Normed/Operator/NormedSpace.lean

Lines changed: 65 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,64 @@ open scoped NNReal
2626
-- the `ₗ` subscript variables are for special cases about linear (as opposed to semilinear) maps
2727
variable {𝕜 𝕜₂ 𝕜₃ E F Fₗ G : Type*}
2828

29+
section SeminormedAddCommGroup
30+
variable [SeminormedAddCommGroup E] [SeminormedAddCommGroup F] [SeminormedAddCommGroup G]
31+
[NontriviallyNormedField 𝕜] [NontriviallyNormedField 𝕜₂] [NontriviallyNormedField 𝕜₃]
32+
[NormedSpace 𝕜 E] [NormedSpace 𝕜₂ F] [NormedSpace 𝕜₃ G]
33+
{σ₁₂ : 𝕜 →+* 𝕜₂} {σ₂₃ : 𝕜₂ →+* 𝕜₃} (f : E →SL[σ₁₂] F)
34+
35+
namespace LinearIsometry
36+
section
37+
variable [NontrivialTopology E] [RingHomIsometric σ₁₂]
38+
39+
@[simp] lemma norm_toContinuousLinearMap (f : E →ₛₗᵢ[σ₁₂] F) : ‖f.toContinuousLinearMap‖ = 1 :=
40+
f.toContinuousLinearMap.homothety_norm <| by simp
41+
42+
@[simp] lemma nnnorm_toContinuousLinearMap (f : E →ₛₗᵢ[σ₁₂] F) : ‖f.toContinuousLinearMap‖₊ = 1 :=
43+
Subtype.ext f.norm_toContinuousLinearMap
44+
45+
@[simp] lemma enorm_toContinuousLinearMap (f : E →ₛₗᵢ[σ₁₂] F) : ‖f.toContinuousLinearMap‖ₑ = 1 :=
46+
congrArg _ f.nnnorm_toContinuousLinearMap
47+
48+
end
49+
50+
variable {σ₁₃ : 𝕜 →+* 𝕜₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃]
51+
52+
/-- Postcomposition of a continuous linear map with a linear isometry preserves
53+
the operator norm. -/
54+
lemma norm_toContinuousLinearMap_comp [RingHomIsometric σ₁₂] (f : F →ₛₗᵢ[σ₂₃] G)
55+
{g : E →SL[σ₁₂] F} : ‖f.toContinuousLinearMap.comp g‖ = ‖g‖ :=
56+
(f.toContinuousLinearMap.comp g).opNorm_ext g fun x ↦ by simp
57+
58+
/-- Composing on the left with a linear isometry gives a linear isometry between spaces of
59+
continuous linear maps. -/
60+
def postcomp [RingHomIsometric σ₁₂] [RingHomIsometric σ₁₃] (a : F →ₛₗᵢ[σ₂₃] G) :
61+
(E →SL[σ₁₂] F) →ₛₗᵢ[σ₂₃] (E →SL[σ₁₃] G) where
62+
toFun f := a.toContinuousLinearMap.comp f
63+
map_add' f g := by simp
64+
map_smul' c f := by simp
65+
norm_map' f := by simp [a.norm_toContinuousLinearMap_comp]
66+
67+
end LinearIsometry
68+
69+
namespace LinearIsometryEquiv
70+
variable [NontrivialTopology E] {σ₁₂ : 𝕜 →+* 𝕜₂} {σ₂₁ : 𝕜₂ →+* 𝕜}
71+
[RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] [RingHomIsometric σ₁₂]
72+
73+
@[simp] lemma norm_toContinuousLinearMap (e : E ≃ₛₗᵢ[σ₁₂] F) :
74+
‖e.toContinuousLinearEquiv.toContinuousLinearMap‖ = 1 :=
75+
e.toLinearIsometry.norm_toContinuousLinearMap
76+
77+
@[simp] lemma nnnorm_toContinuousLinearMap (e : E ≃ₛₗᵢ[σ₁₂] F) :
78+
‖e.toContinuousLinearEquiv.toContinuousLinearMap‖₊ = 1 :=
79+
e.toLinearIsometry.nnnorm_toContinuousLinearMap
80+
81+
@[simp] lemma enorm_toContinuousLinearMap (e : E ≃ₛₗᵢ[σ₁₂] F) :
82+
‖e.toContinuousLinearEquiv.toContinuousLinearMap‖ₑ = 1 :=
83+
e.toLinearIsometry.enorm_toContinuousLinearMap
84+
85+
end LinearIsometryEquiv
86+
end SeminormedAddCommGroup
2987

3088
section Normed
3189

@@ -91,8 +149,6 @@ end LinearMap
91149

92150
namespace ContinuousLinearMap
93151

94-
section OpNorm
95-
96152
open Set Real
97153

98154
/-- An operator is zero iff its norm vanishes. -/
@@ -121,47 +177,8 @@ theorem antilipschitz_of_isEmbedding (f : E →L[𝕜] Fₗ) (hf : IsEmbedding f
121177
∃ K, AntilipschitzWith K f :=
122178
f.toLinearMap.antilipschitz_of_comap_nhds_le <| map_zero f ▸ (hf.nhds_eq_comap 0).ge
123179

124-
end OpNorm
125-
126180
end ContinuousLinearMap
127181

128-
namespace LinearIsometry
129-
130-
@[simp]
131-
theorem norm_toContinuousLinearMap [Nontrivial E] [RingHomIsometric σ₁₂] (f : E →ₛₗᵢ[σ₁₂] F) :
132-
‖f.toContinuousLinearMap‖ = 1 :=
133-
f.toContinuousLinearMap.homothety_norm <| by simp
134-
135-
@[simp]
136-
theorem nnnorm_toContinuousLinearMap [Nontrivial E] [RingHomIsometric σ₁₂] (f : E →ₛₗᵢ[σ₁₂] F) :
137-
‖f.toContinuousLinearMap‖₊ = 1 :=
138-
Subtype.ext f.norm_toContinuousLinearMap
139-
140-
@[simp]
141-
theorem enorm_toContinuousLinearMap [Nontrivial E] [RingHomIsometric σ₁₂] (f : E →ₛₗᵢ[σ₁₂] F) :
142-
‖f.toContinuousLinearMap‖ₑ = 1 :=
143-
congrArg _ f.nnnorm_toContinuousLinearMap
144-
145-
variable {σ₁₃ : 𝕜 →+* 𝕜₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃]
146-
147-
/-- Postcomposition of a continuous linear map with a linear isometry preserves
148-
the operator norm. -/
149-
theorem norm_toContinuousLinearMap_comp [RingHomIsometric σ₁₂] (f : F →ₛₗᵢ[σ₂₃] G)
150-
{g : E →SL[σ₁₂] F} : ‖f.toContinuousLinearMap.comp g‖ = ‖g‖ :=
151-
opNorm_ext (f.toContinuousLinearMap.comp g) g fun x => by
152-
simp only [norm_map, coe_toContinuousLinearMap, coe_comp', Function.comp_apply]
153-
154-
/-- Composing on the left with a linear isometry gives a linear isometry between spaces of
155-
continuous linear maps. -/
156-
def postcomp [RingHomIsometric σ₁₂] [RingHomIsometric σ₁₃] (a : F →ₛₗᵢ[σ₂₃] G) :
157-
(E →SL[σ₁₂] F) →ₛₗᵢ[σ₂₃] (E →SL[σ₁₃] G) where
158-
toFun f := a.toContinuousLinearMap.comp f
159-
map_add' f g := by simp
160-
map_smul' c f := by simp
161-
norm_map' f := by simp [a.norm_toContinuousLinearMap_comp]
162-
163-
end LinearIsometry
164-
165182
end
166183

167184
namespace ContinuousLinearMap
@@ -272,7 +289,7 @@ end Normed
272289
/-- A bounded bilinear form `B` in a real normed space is *coercive*
273290
if there is some positive constant C such that `C * ‖u‖ * ‖u‖ ≤ B u u`.
274291
-/
275-
def IsCoercive [NormedAddCommGroup E] [NormedSpace ℝ E] (B : E →L[ℝ] E →L[ℝ] ℝ) : Prop :=
292+
def IsCoercive [SeminormedAddCommGroup E] [NormedSpace ℝ E] (B : E →L[ℝ] E →L[ℝ] ℝ) : Prop :=
276293
∃ C, 0 < C ∧ ∀ u, C * ‖u‖ * ‖u‖ ≤ B u u
277294

278295
section Equicontinuous
@@ -348,8 +365,8 @@ lemma ContinuousLinearMap.norm_single_le_one [∀ i, SeminormedAddCommGroup (E i
348365
‖ContinuousLinearMap.single 𝕜 E i‖ ≤ 1 :=
349366
(LinearIsometry.single 𝕜 E i).norm_toContinuousLinearMap_le
350367

351-
lemma ContinuousLinearMap.norm_single [∀ i, NormedAddCommGroup (E i)] [∀ i, NormedSpace 𝕜 (E i)]
352-
(i : ι) [Nontrivial (E i)] :
368+
lemma ContinuousLinearMap.norm_single [∀ i, SeminormedAddCommGroup (E i)]
369+
[∀ i, NormedSpace 𝕜 (E i)] (i : ι) [NontrivialTopology (E i)] :
353370
‖ContinuousLinearMap.single 𝕜 E i‖ = 1 :=
354371
(LinearIsometry.single 𝕜 E i).norm_toContinuousLinearMap
355372

@@ -389,13 +406,13 @@ lemma ContinuousLinearMap.norm_inr_le_one [SeminormedAddCommGroup E] [NormedSpac
389406
‖ContinuousLinearMap.inr 𝕜 E F‖ ≤ 1 :=
390407
(LinearIsometry.inr 𝕜 E F).norm_toContinuousLinearMap_le
391408

392-
lemma ContinuousLinearMap.norm_inl [NormedAddCommGroup E] [NormedSpace 𝕜 E]
393-
[NormedAddCommGroup F] [NormedSpace 𝕜 F] [Nontrivial E] :
409+
lemma ContinuousLinearMap.norm_inl [SeminormedAddCommGroup E] [NontrivialTopology E]
410+
[NormedSpace 𝕜 E] [SeminormedAddCommGroup F] [NormedSpace 𝕜 F] :
394411
‖ContinuousLinearMap.inl 𝕜 E F‖ = 1 :=
395412
(LinearIsometry.inl 𝕜 E F).norm_toContinuousLinearMap
396413

397-
lemma ContinuousLinearMap.norm_inr [NormedAddCommGroup E] [NormedSpace 𝕜 E]
398-
[NormedAddCommGroup F] [NormedSpace 𝕜 F] [Nontrivial F] :
414+
lemma ContinuousLinearMap.norm_inr [SeminormedAddCommGroup E] [NontrivialTopology E]
415+
[NormedSpace 𝕜 E] [SeminormedAddCommGroup F] [NormedSpace 𝕜 F] [NontrivialTopology F] :
399416
‖ContinuousLinearMap.inr 𝕜 E F‖ = 1 :=
400417
(LinearIsometry.inr 𝕜 E F).norm_toContinuousLinearMap
401418

Mathlib/Topology/ContinuousMap/Compact.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ instance {E : Type*} [NormedAddCommGroup E] : NormedAddCommGroup C(α, E) where
180180
__ : SeminormedAddCommGroup C(α, E) := inferInstance
181181
__ : MetricSpace C(α, E) := inferInstance
182182

183+
instance [Nonempty α] {E : Type*} [NormedAddCommGroup E] [Nontrivial E] :
184+
NontrivialTopology C(α, E) := by
185+
simpa [nontrivialTopology_iff_exists_norm_ne_zero] using exists_ne (0 : C(α, E))
186+
183187
instance [Nonempty α] [One E] [NormOneClass E] : NormOneClass C(α, E) where
184188
norm_one := by simp only [← norm_mkOfCompact, mkOfCompact_one, norm_one]
185189

Mathlib/Topology/Order.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,9 @@ instance (priority := 100) Subsingleton.discreteTopology [t : TopologicalSpace
542542
instance [TopologicalSpace α] [Subsingleton α] : IndiscreteTopology α where
543543
eq_top := Subsingleton.elim _ _
544544

545+
variable (α) in
546+
lemma Nontrivial.of_nontrivialTopology [TopologicalSpace α] [h : NontrivialTopology α] :
547+
Nontrivial α := by contrapose! h; infer_instance
545548

546549
instance : TopologicalSpace Empty := ⊥
547550
instance : DiscreteTopology Empty := ⟨rfl⟩

0 commit comments

Comments
 (0)