|
| 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 |
0 commit comments