Skip to content

Commit dbf90e0

Browse files
chore(Analysis/Normed/Operator): move extension to a new file (#29888)
The moved parts are not modified except for adapting the sections and imports. Original definition of `ContinuousLinearMap.extend` was by Zhouhang Zhou in 2019 (mathlib3 PR #1649) Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 68abb99 commit dbf90e0

File tree

5 files changed

+121
-86
lines changed

5 files changed

+121
-86
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,6 +1883,7 @@ import Mathlib.Analysis.Normed.Operator.Compact
18831883
import Mathlib.Analysis.Normed.Operator.Completeness
18841884
import Mathlib.Analysis.Normed.Operator.Conformal
18851885
import Mathlib.Analysis.Normed.Operator.ContinuousLinearMap
1886+
import Mathlib.Analysis.Normed.Operator.Extend
18861887
import Mathlib.Analysis.Normed.Operator.LinearIsometry
18871888
import Mathlib.Analysis.Normed.Operator.Mul
18881889
import Mathlib.Analysis.Normed.Operator.NNNorm

Mathlib/Analysis/InnerProductSpace/LinearPMap.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Authors: Moritz Doll
55
-/
66
import Mathlib.Analysis.InnerProductSpace.Adjoint
77
import Mathlib.Analysis.InnerProductSpace.ProdL2
8-
import Mathlib.Analysis.Normed.Operator.Completeness
8+
import Mathlib.Analysis.Normed.Operator.Extend
99
import Mathlib.Topology.Algebra.Module.Equiv
1010
import Mathlib.Topology.Algebra.Module.LinearPMap
1111

Mathlib/Analysis/Normed/Operator/Completeness.lean

Lines changed: 0 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -155,88 +155,4 @@ theorem isCompact_image_coe_closedBall [ProperSpace F] (f₀ : E →SL[σ₁₂]
155155

156156
end Completeness
157157

158-
section UniformlyExtend
159-
160-
section NonField
161-
162-
variable {R R₂ E F Fₗ : Type*} [AddCommGroup E] [UniformSpace E] [IsUniformAddGroup E]
163-
[AddCommGroup F] [UniformSpace F] [IsUniformAddGroup F] [T0Space F]
164-
[AddCommMonoid Fₗ] [UniformSpace Fₗ] [ContinuousAdd Fₗ]
165-
[Semiring R] [Semiring R₂] [Module R E] [Module R₂ F] [Module R Fₗ]
166-
[ContinuousConstSMul R Fₗ] [ContinuousConstSMul R₂ F]
167-
{σ₁₂ : R →+* R₂} (f g : E →SL[σ₁₂] F) [CompleteSpace F] (e : E →L[R] Fₗ) (h_dense : DenseRange e)
168-
169-
variable (h_e : IsUniformInducing e)
170-
171-
/-- Extension of a continuous linear map `f : E →SL[σ₁₂] F`, with `E` a normed space and `F` a
172-
complete normed space, along a uniform and dense embedding `e : E →L[𝕜] Fₗ`. -/
173-
def extend : Fₗ →SL[σ₁₂] F :=
174-
-- extension of `f` is continuous
175-
have cont := (uniformContinuous_uniformly_extend h_e h_dense f.uniformContinuous).continuous
176-
-- extension of `f` agrees with `f` on the domain of the embedding `e`
177-
have eq := uniformly_extend_of_ind h_e h_dense f.uniformContinuous
178-
{ toFun := (h_e.isDenseInducing h_dense).extend f
179-
map_add' := by
180-
refine h_dense.induction_on₂ ?_ ?_
181-
· exact isClosed_eq (cont.comp continuous_add)
182-
((cont.comp continuous_fst).add (cont.comp continuous_snd))
183-
· intro x y
184-
simp only [eq, ← e.map_add]
185-
exact f.map_add _ _
186-
map_smul' := fun k => by
187-
refine fun b => h_dense.induction_on b ?_ ?_
188-
· exact isClosed_eq (cont.comp (continuous_const_smul _))
189-
((continuous_const_smul _).comp cont)
190-
· intro x
191-
rw [← map_smul]
192-
simp only [eq]
193-
exact ContinuousLinearMap.map_smulₛₗ _ _ _
194-
cont }
195-
196-
@[simp]
197-
theorem extend_eq (x : E) : extend f e h_dense h_e (e x) = f x :=
198-
IsDenseInducing.extend_eq (h_e.isDenseInducing h_dense) f.cont _
199-
200-
theorem extend_unique (g : Fₗ →SL[σ₁₂] F) (H : g.comp e = f) : extend f e h_dense h_e = g :=
201-
ContinuousLinearMap.coeFn_injective <|
202-
uniformly_extend_unique h_e h_dense (ContinuousLinearMap.ext_iff.1 H) g.continuous
203-
204-
@[simp]
205-
theorem extend_zero : extend (0 : E →SL[σ₁₂] F) e h_dense h_e = 0 :=
206-
extend_unique _ _ _ _ _ (zero_comp _)
207-
208-
end NonField
209-
210-
section
211-
212-
variable [CompleteSpace F] (e : E →L[𝕜] Fₗ) (h_dense : DenseRange e)
213-
214-
variable {N : ℝ≥0} (h_e : ∀ x, ‖x‖ ≤ N * ‖e x‖) [RingHomIsometric σ₁₂]
215-
216-
/-- If a dense embedding `e : E →L[𝕜] G` expands the norm by a constant factor `N⁻¹`, then the
217-
norm of the extension of `f` along `e` is bounded by `N * ‖f‖`. -/
218-
theorem opNorm_extend_le :
219-
‖f.extend e h_dense (isUniformEmbedding_of_bound _ h_e).isUniformInducing‖ ≤ N * ‖f‖ := by
220-
-- Add `opNorm_le_of_dense`?
221-
refine opNorm_le_bound _ ?_ (isClosed_property h_dense (isClosed_le ?_ ?_) fun x ↦ ?_)
222-
· cases le_total 0 N with
223-
| inl hN => exact mul_nonneg hN (norm_nonneg _)
224-
| inr hN =>
225-
have : Unique E := ⟨⟨0⟩, fun x ↦ norm_le_zero_iff.mp <|
226-
(h_e x).trans (mul_nonpos_of_nonpos_of_nonneg hN (norm_nonneg _))⟩
227-
obtain rfl : f = 0 := Subsingleton.elim ..
228-
simp
229-
· exact (cont _).norm
230-
· exact continuous_const.mul continuous_norm
231-
· rw [extend_eq]
232-
calc
233-
‖f x‖ ≤ ‖f‖ * ‖x‖ := le_opNorm _ _
234-
_ ≤ ‖f‖ * (N * ‖e x‖) := mul_le_mul_of_nonneg_left (h_e x) (norm_nonneg _)
235-
_ ≤ N * ‖f‖ * ‖e x‖ := by rw [mul_comm ↑N ‖f‖, mul_assoc]
236-
237-
238-
end
239-
240-
end UniformlyExtend
241-
242158
end ContinuousLinearMap
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/-
2+
Copyright (c) 2025 Moritz Doll. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Moritz Doll, Zhouhang Zhou
5+
-/
6+
import Mathlib.Analysis.Normed.Operator.Basic
7+
8+
/-!
9+
10+
# Extension of continuous linear maps on Banach spaces
11+
12+
In this file we provide two different ways to extend a continuous linear map defined on a dense
13+
subspace to the entire Banach space.
14+
15+
* `ContinuousLinearMap.extend`: Extend from a dense subspace using `IsUniformInducing`
16+
* `ContinuousLinearMap.extendOfNorm`: Extend from a continuous linear map that is a dense
17+
injection into the domain and using a norm estimate.
18+
19+
-/
20+
21+
suppress_compilation
22+
23+
open scoped NNReal
24+
25+
variable {𝕜 𝕜₂ E Eₗ F Fₗ : Type*}
26+
27+
namespace ContinuousLinearMap
28+
29+
section Extend
30+
31+
section Ring
32+
33+
variable [AddCommGroup E] [UniformSpace E] [IsUniformAddGroup E]
34+
[AddCommGroup F] [UniformSpace F] [IsUniformAddGroup F] [T0Space F]
35+
[AddCommMonoid Eₗ] [UniformSpace Eₗ] [ContinuousAdd Eₗ]
36+
[Semiring 𝕜] [Semiring 𝕜₂] [Module 𝕜 E] [Module 𝕜₂ F] [Module 𝕜 Eₗ]
37+
[ContinuousConstSMul 𝕜 Eₗ] [ContinuousConstSMul 𝕜₂ F]
38+
{σ₁₂ : 𝕜 →+* 𝕜₂} (f g : E →SL[σ₁₂] F) [CompleteSpace F] (e : E →L[𝕜] Eₗ)
39+
40+
variable (h_dense : DenseRange e) (h_e : IsUniformInducing e)
41+
42+
/-- Extension of a continuous linear map `f : E →SL[σ₁₂] F`, with `E` a normed space and `F` a
43+
complete normed space, along a uniform and dense embedding `e : E →L[𝕜] Eₗ`. -/
44+
def extend : Eₗ →SL[σ₁₂] F :=
45+
-- extension of `f` is continuous
46+
have cont := (uniformContinuous_uniformly_extend h_e h_dense f.uniformContinuous).continuous
47+
-- extension of `f` agrees with `f` on the domain of the embedding `e`
48+
have eq := uniformly_extend_of_ind h_e h_dense f.uniformContinuous
49+
{ toFun := (h_e.isDenseInducing h_dense).extend f
50+
map_add' := by
51+
refine h_dense.induction_on₂ ?_ ?_
52+
· exact isClosed_eq (cont.comp continuous_add)
53+
((cont.comp continuous_fst).add (cont.comp continuous_snd))
54+
· intro x y
55+
simp only [eq, ← e.map_add]
56+
exact f.map_add _ _
57+
map_smul' := fun k => by
58+
refine fun b => h_dense.induction_on b ?_ ?_
59+
· exact isClosed_eq (cont.comp (continuous_const_smul _))
60+
((continuous_const_smul _).comp cont)
61+
· intro x
62+
rw [← map_smul]
63+
simp only [eq]
64+
exact ContinuousLinearMap.map_smulₛₗ _ _ _
65+
cont }
66+
67+
@[simp]
68+
theorem extend_eq (x : E) : extend f e h_dense h_e (e x) = f x :=
69+
IsDenseInducing.extend_eq (h_e.isDenseInducing h_dense) f.cont _
70+
71+
theorem extend_unique (g : Eₗ →SL[σ₁₂] F) (H : g.comp e = f) : extend f e h_dense h_e = g :=
72+
ContinuousLinearMap.coeFn_injective <|
73+
uniformly_extend_unique h_e h_dense (ContinuousLinearMap.ext_iff.1 H) g.continuous
74+
75+
@[simp]
76+
theorem extend_zero : extend (0 : E →SL[σ₁₂] F) e h_dense h_e = 0 :=
77+
extend_unique _ _ _ _ _ (zero_comp _)
78+
79+
end Ring
80+
81+
section NormedField
82+
83+
variable [NontriviallyNormedField 𝕜] [NontriviallyNormedField 𝕜₂] {σ₁₂ : 𝕜 →+* 𝕜₂}
84+
[NormedAddCommGroup E] [NormedAddCommGroup Eₗ] [NormedAddCommGroup F] [NormedAddCommGroup Fₗ]
85+
[NormedSpace 𝕜 E] [NormedSpace 𝕜 Eₗ] [NormedSpace 𝕜₂ F] [NormedSpace 𝕜₂ Fₗ] [CompleteSpace F]
86+
(f g : E →SL[σ₁₂] F) (e : E →L[𝕜] Eₗ)
87+
88+
variable (h_dense : DenseRange e) (h_e : IsUniformInducing e)
89+
90+
variable {N : ℝ≥0} (h_e : ∀ x, ‖x‖ ≤ N * ‖e x‖) [RingHomIsometric σ₁₂]
91+
92+
/-- If a dense embedding `e : E →L[𝕜] G` expands the norm by a constant factor `N⁻¹`, then the
93+
norm of the extension of `f` along `e` is bounded by `N * ‖f‖`. -/
94+
theorem opNorm_extend_le :
95+
‖f.extend e h_dense (isUniformEmbedding_of_bound _ h_e).isUniformInducing‖ ≤ N * ‖f‖ := by
96+
-- Add `opNorm_le_of_dense`?
97+
refine opNorm_le_bound _ ?_ (isClosed_property h_dense (isClosed_le ?_ ?_) fun x ↦ ?_)
98+
· cases le_total 0 N with
99+
| inl hN => exact mul_nonneg hN (norm_nonneg _)
100+
| inr hN =>
101+
have : Unique E := ⟨⟨0⟩, fun x ↦ norm_le_zero_iff.mp <|
102+
(h_e x).trans (mul_nonpos_of_nonpos_of_nonneg hN (norm_nonneg _))⟩
103+
obtain rfl : f = 0 := Subsingleton.elim ..
104+
simp
105+
· exact (cont _).norm
106+
· exact continuous_const.mul continuous_norm
107+
· rw [extend_eq]
108+
calc
109+
‖f x‖ ≤ ‖f‖ * ‖x‖ := le_opNorm _ _
110+
_ ≤ ‖f‖ * (N * ‖e x‖) := mul_le_mul_of_nonneg_left (h_e x) (norm_nonneg _)
111+
_ ≤ N * ‖f‖ * ‖e x‖ := by rw [mul_comm ↑N ‖f‖, mul_assoc]
112+
113+
114+
end NormedField
115+
116+
end Extend
117+
118+
end ContinuousLinearMap

Mathlib/MeasureTheory/Integral/SetToL1.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Zhouhang Zhou, Yury Kudryashov, Sébastien Gouëzel, Rémy Degenne
55
-/
66
import Mathlib.MeasureTheory.Integral.FinMeasAdditive
7-
import Mathlib.Analysis.Normed.Operator.Completeness
7+
import Mathlib.Analysis.Normed.Operator.Extend
88

99
/-!
1010
# Extension of a linear function from indicators to L1

0 commit comments

Comments
 (0)