Skip to content

Commit 74196ac

Browse files
YaelDilliesReemMelamed
authored andcommitted
feat(Analysis): pre/postcomposition by an isometry preserves the operator norm (leanprover-community#39969)
Also create a separate section for the new series of similar lemmas. Note that a few lemmas had to change from `f.toLinearIsometry.toContinuousLinearMap` to `f.toContinuousLinearEquiv.toContinuousLinearMap` because the latter is the inferred coercion from `LinearIsometryEquiv` to `ContinuousLinearMap`. This is in line with our decision to deprioritise coercions from isos to homs (compared to coercions within isos). From MeanFourier
1 parent 2d51f60 commit 74196ac

3 files changed

Lines changed: 56 additions & 30 deletions

File tree

Mathlib/Analysis/Normed/Operator/NormedSpace.lean

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ open Topology
2424
open scoped NNReal
2525

2626
-- the `ₗ` subscript variables are for special cases about linear (as opposed to semilinear) maps
27-
variable {𝕜 𝕜₂ 𝕜₃ E F Fₗ G : Type*}
27+
variable {𝕜 𝕜₁ 𝕜₂ 𝕜₃ E F Fₗ G : Type*}
2828

2929
section SeminormedAddCommGroup
3030
variable [SeminormedAddCommGroup E] [SeminormedAddCommGroup F] [SeminormedAddCommGroup G]
@@ -182,33 +182,15 @@ end ContinuousLinearMap
182182
end
183183

184184
namespace ContinuousLinearMap
185-
186-
variable [NontriviallyNormedField 𝕜] [NontriviallyNormedField 𝕜₂] [NontriviallyNormedField 𝕜₃]
187-
[NormedSpace 𝕜 E] [NormedSpace 𝕜₂ F] [NormedSpace 𝕜₃ G] [NormedSpace 𝕜 Fₗ]
188-
{σ₂₃ : 𝕜₂ →+* 𝕜₃}
189-
190-
variable {𝕜₂' : Type*} [NontriviallyNormedField 𝕜₂'] {F' : Type*} [NormedAddCommGroup F']
191-
[NormedSpace 𝕜₂' F'] {σ₂' : 𝕜₂' →+* 𝕜₂} {σ₂'' : 𝕜₂ →+* 𝕜₂'} {σ₂₃' : 𝕜₂' →+* 𝕜₃}
192-
[RingHomInvPair σ₂' σ₂''] [RingHomInvPair σ₂'' σ₂'] [RingHomCompTriple σ₂' σ₂₃ σ₂₃']
193-
[RingHomCompTriple σ₂'' σ₂₃' σ₂₃] [RingHomIsometric σ₂₃] [RingHomIsometric σ₂']
194-
[RingHomIsometric σ₂''] [RingHomIsometric σ₂₃']
195-
196-
/-- Precomposition with a linear isometry preserves the operator norm. -/
197-
theorem opNorm_comp_linearIsometryEquiv (f : F →SL[σ₂₃] G) (g : F' ≃ₛₗᵢ[σ₂'] F) :
198-
‖f.comp g.toLinearIsometry.toContinuousLinearMap‖ = ‖f‖ := by
199-
cases subsingleton_or_nontrivial F'
200-
· haveI := g.symm.toLinearEquiv.toEquiv.subsingleton
201-
simp
202-
refine le_antisymm ?_ ?_
203-
· convert! f.opNorm_comp_le g.toLinearIsometry.toContinuousLinearMap
204-
simp [g.toLinearIsometry.norm_toContinuousLinearMap]
205-
· convert!
206-
(f.comp g.toLinearIsometry.toContinuousLinearMap).opNorm_comp_le
207-
g.symm.toLinearIsometry.toContinuousLinearMap
208-
· ext
209-
simp
210-
haveI := g.symm.surjective.nontrivial
211-
simp [g.symm.toLinearIsometry.norm_toContinuousLinearMap]
185+
variable
186+
[NontriviallyNormedField 𝕜] [NormedSpace 𝕜 E] [NormedSpace 𝕜 Fₗ]
187+
[NontriviallyNormedField 𝕜₁] [NormedSpace 𝕜₁ E]
188+
[NontriviallyNormedField 𝕜₂] [NormedSpace 𝕜₂ F]
189+
[NontriviallyNormedField 𝕜₃] [NormedSpace 𝕜₃ G]
190+
{σ₁₂ : 𝕜₁ →+* 𝕜₂} {σ₂₁ : 𝕜₂ →+* 𝕜₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂]
191+
{σ₂₃ : 𝕜₂ →+* 𝕜₃} {σ₃₂ : 𝕜₃ →+* 𝕜₂} [RingHomInvPair σ₂₃ σ₃₂] [RingHomInvPair σ₃₂ σ₂₃]
192+
{σ₁₃ : 𝕜₁ →+* 𝕜₃} [RingHomIsometric σ₁₃]
193+
[RingHomCompTriple σ₁₂ σ₂₃ σ₁₃]
212194

213195
@[simp]
214196
theorem norm_smulRightL (c : StrongDual 𝕜 E) [Nontrivial Fₗ] : ‖smulRightL 𝕜 E Fₗ c‖ = ‖c‖ :=
@@ -217,6 +199,50 @@ theorem norm_smulRightL (c : StrongDual 𝕜 E) [Nontrivial Fₗ] : ‖smulRight
217199
lemma norm_smulRightL_le : ‖smulRightL 𝕜 E Fₗ‖ ≤ 1 :=
218200
LinearMap.mkContinuous₂_norm_le _ zero_le_one _
219201

202+
/-! ### Composition with isometries -/
203+
204+
/-- Precomposition with a linear isometry preserves the operator norm. -/
205+
@[simp]
206+
lemma opNNNorm_comp_linearIsometryEquiv [RingHomIsometric σ₂₃] (f : F →SL[σ₂₃] G)
207+
(e : E ≃ₛₗᵢ[σ₁₂] F) : ‖f.comp (e : E →SL[σ₁₂] F)‖₊ = ‖f‖₊ :=
208+
eq_of_forall_ge_iff fun r ↦ by simp [opNNNorm_le_iff, ← e.forall_congr_right]
209+
210+
/-- Postcomposition with a linear isometry preserves the operator norm. -/
211+
@[simp]
212+
lemma opNNNorm_linearIsometryEquiv_comp [RingHomIsometric σ₁₂] (e : F ≃ₛₗᵢ[σ₂₃] G)
213+
(f : E →SL[σ₁₂] F) : ‖(e : F →SL[σ₂₃] G).comp f‖₊ = ‖f‖₊ :=
214+
eq_of_forall_ge_iff fun r ↦ by simp [opNNNorm_le_iff]
215+
216+
/-- Precomposition with a linear isometry preserves the operator norm. -/
217+
@[simp]
218+
lemma opNorm_comp_linearIsometryEquiv [RingHomIsometric σ₂₃] (f : F →SL[σ₂₃] G)
219+
(e : E ≃ₛₗᵢ[σ₁₂] F) : ‖f.comp (e : E →SL[σ₁₂] F)‖ = ‖f‖ := by simp [← coe_nnnorm]
220+
221+
/-- Postcomposition with a linear isometry preserves the operator norm. -/
222+
@[simp]
223+
lemma opNorm_linearIsometryEquiv_comp [RingHomIsometric σ₁₂] (e : F ≃ₛₗᵢ[σ₂₃] G)
224+
(f : E →SL[σ₁₂] F) : ‖(e : F →SL[σ₂₃] G).comp f‖ = ‖f‖ := by simp [← coe_nnnorm]
225+
226+
/-- Precomposition with a linear isometry preserves the operator norm. -/
227+
@[simp]
228+
lemma opNNNorm_mul_linearIsometryEquiv (f : E →L[𝕜] E) (e : E ≃ₗᵢ[𝕜] E) : ‖f * e‖₊ = ‖f‖₊ :=
229+
opNNNorm_comp_linearIsometryEquiv ..
230+
231+
/-- Postcomposition with a linear isometry preserves the operator norm. -/
232+
@[simp]
233+
lemma opNNNorm_linearIsometryEquiv_mul (e : E ≃ₗᵢ[𝕜] E) (f : E →L[𝕜] E) : ‖e * f‖₊ = ‖f‖₊ :=
234+
opNNNorm_linearIsometryEquiv_comp ..
235+
236+
/-- Precomposition with a linear isometry preserves the operator norm. -/
237+
@[simp]
238+
lemma opNorm_mul_linearIsometryEquiv (f : E →L[𝕜] E) (e : E ≃ₗᵢ[𝕜] E) : ‖f * e‖ = ‖f‖ :=
239+
opNorm_comp_linearIsometryEquiv ..
240+
241+
/-- Postcomposition with a linear isometry preserves the operator norm. -/
242+
@[simp]
243+
lemma opNorm_linearIsometryEquiv_mul (e : E ≃ₗᵢ[𝕜] E) (f : E →L[𝕜] E) : ‖e * f‖ = ‖f‖ :=
244+
opNorm_linearIsometryEquiv_comp ..
245+
220246
end ContinuousLinearMap
221247

222248
namespace Submodule

Mathlib/MeasureTheory/Function/LpSpace/ContinuousFunctions.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ from the space `α →ᵇ E` of bounded continuous functions, so this constructi
142142
transferring the structure from `BoundedContinuousFunction.toLp` along the isometry. -/
143143
noncomputable def toLp : C(α, E) →L[𝕜] Lp E p μ :=
144144
(BoundedContinuousFunction.toLp p μ 𝕜).comp
145-
(linearIsometryBoundedOfCompact α E 𝕜).toLinearIsometry.toContinuousLinearMap
145+
(linearIsometryBoundedOfCompact α E 𝕜).toContinuousLinearEquiv.toContinuousLinearMap
146146

147147
variable {𝕜}
148148

Mathlib/Probability/Distributions/Gaussian/Multivariate.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ lemma stdGaussian_map {F : Type*} [NormedAddCommGroup F] [InnerProductSpace ℝ
131131
have := f.finiteDimensional
132132
apply Measure.ext_of_charFunDual
133133
ext L
134-
simp_rw [show ⇑f = f.toLinearIsometry.toContinuousLinearMap from rfl, charFunDual_map,
134+
simp_rw [show ⇑f = f.toContinuousLinearEquiv.toContinuousLinearMap from rfl, charFunDual_map,
135135
charFunDual_stdGaussian, L.opNorm_comp_linearIsometryEquiv]
136136

137137
lemma map_pi_eq_stdGaussian :

0 commit comments

Comments
 (0)