@@ -825,6 +825,82 @@ protected def piFieldEquiv : G ≃ₗᵢ[𝕜] ContinuousMultilinearMap 𝕜 (fu
825825
826826end ContinuousMultilinearMap
827827
828+ open ContinuousMultilinearMap
829+
830+ namespace MultilinearMap
831+
832+ /-- Given a map `f : G →ₗ[𝕜] MultilinearMap 𝕜 E G'` and an estimate
833+ `H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖`, construct a continuous linear
834+ map from `G` to `ContinuousMultilinearMap 𝕜 E G'`.
835+
836+ In order to lift, e.g., a map `f : (MultilinearMap 𝕜 E G) →ₗ[𝕜] MultilinearMap 𝕜 E' G'`
837+ to a map `(ContinuousMultilinearMap 𝕜 E G) →L[𝕜] ContinuousMultilinearMap 𝕜 E' G'`,
838+ one can apply this construction to `f.comp ContinuousMultilinearMap.toMultilinearMapLinear`
839+ which is a linear map from `ContinuousMultilinearMap 𝕜 E G` to `MultilinearMap 𝕜 E' G'`. -/
840+ def mkContinuousLinear (f : G →ₗ[𝕜] MultilinearMap 𝕜 E G') (C : ℝ)
841+ (H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖) : G →L[𝕜] ContinuousMultilinearMap 𝕜 E G' :=
842+ LinearMap.mkContinuous
843+ { toFun := fun x => (f x).mkContinuous (C * ‖x‖) <| H x
844+ map_add' := fun x y => by
845+ ext1
846+ simp
847+ map_smul' := fun c x => by
848+ ext1
849+ simp }
850+ (max C 0 ) fun x => by
851+ simpa using ((f x).mkContinuous_norm_le' _).trans_eq <| by
852+ rw [max_mul_of_nonneg _ _ (norm_nonneg x), zero_mul]
853+
854+ theorem mkContinuousLinear_norm_le' (f : G →ₗ[𝕜] MultilinearMap 𝕜 E G') (C : ℝ)
855+ (H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖) : ‖mkContinuousLinear f C H‖ ≤ max C 0 := by
856+ dsimp only [mkContinuousLinear]
857+ exact LinearMap.mkContinuous_norm_le _ (le_max_right _ _) _
858+
859+ theorem mkContinuousLinear_norm_le (f : G →ₗ[𝕜] MultilinearMap 𝕜 E G') {C : ℝ} (hC : 0 ≤ C)
860+ (H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖) : ‖mkContinuousLinear f C H‖ ≤ C :=
861+ (mkContinuousLinear_norm_le' f C H).trans_eq (max_eq_left hC)
862+
863+ variable [∀ i, SeminormedAddCommGroup (E' i)] [∀ i, NormedSpace 𝕜 (E' i)]
864+
865+ /-- Given a map `f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)` and an estimate
866+ `H : ∀ m m', ‖f m m'‖ ≤ C * ∏ i, ‖m i‖ * ∏ i, ‖m' i‖`, upgrade all `MultilinearMap`s in the type to
867+ `ContinuousMultilinearMap`s. -/
868+ def mkContinuousMultilinear (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) (C : ℝ)
869+ (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) :
870+ ContinuousMultilinearMap 𝕜 E (ContinuousMultilinearMap 𝕜 E' G) :=
871+ mkContinuous
872+ { toFun := fun m => mkContinuous (f m) (C * ∏ i, ‖m i‖) <| H m
873+ map_update_add' := fun m i x y => by
874+ ext1
875+ simp
876+ map_update_smul' := fun m i c x => by
877+ ext1
878+ simp }
879+ (max C 0 ) fun m => by
880+ simp only [coe_mk]
881+ refine ((f m).mkContinuous_norm_le' _).trans_eq ?_
882+ rw [max_mul_of_nonneg, zero_mul]
883+ positivity
884+
885+ @[simp]
886+ theorem mkContinuousMultilinear_apply (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) {C : ℝ}
887+ (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) (m : ∀ i, E i) :
888+ ⇑(mkContinuousMultilinear f C H m) = f m :=
889+ rfl
890+
891+ theorem mkContinuousMultilinear_norm_le' (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) (C : ℝ)
892+ (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) :
893+ ‖mkContinuousMultilinear f C H‖ ≤ max C 0 := by
894+ dsimp only [mkContinuousMultilinear]
895+ exact mkContinuous_norm_le _ (le_max_right _ _) _
896+
897+ theorem mkContinuousMultilinear_norm_le (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) {C : ℝ}
898+ (hC : 0 ≤ C) (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) :
899+ ‖mkContinuousMultilinear f C H‖ ≤ C :=
900+ (mkContinuousMultilinear_norm_le' f C H).trans_eq (max_eq_left hC)
901+
902+ end MultilinearMap
903+
828904namespace ContinuousLinearMap
829905
830906theorem norm_compContinuousMultilinearMap_le (g : G →L[𝕜] G') (f : ContinuousMultilinearMap 𝕜 E G) :
@@ -926,85 +1002,8 @@ theorem LinearIsometry.norm_compContinuousMultilinearMap (g : G →ₗᵢ[𝕜]
9261002 LinearIsometry.coe_toContinuousLinearMap, LinearIsometry.norm_map,
9271003 ContinuousMultilinearMap.norm_def, Function.comp_apply]
9281004
929- open ContinuousMultilinearMap
930-
931- namespace MultilinearMap
932-
933- /-- Given a map `f : G →ₗ[𝕜] MultilinearMap 𝕜 E G'` and an estimate
934- `H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖`, construct a continuous linear
935- map from `G` to `ContinuousMultilinearMap 𝕜 E G'`.
936-
937- In order to lift, e.g., a map `f : (MultilinearMap 𝕜 E G) →ₗ[𝕜] MultilinearMap 𝕜 E' G'`
938- to a map `(ContinuousMultilinearMap 𝕜 E G) →L[𝕜] ContinuousMultilinearMap 𝕜 E' G'`,
939- one can apply this construction to `f.comp ContinuousMultilinearMap.toMultilinearMapLinear`
940- which is a linear map from `ContinuousMultilinearMap 𝕜 E G` to `MultilinearMap 𝕜 E' G'`. -/
941- def mkContinuousLinear (f : G →ₗ[𝕜] MultilinearMap 𝕜 E G') (C : ℝ)
942- (H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖) : G →L[𝕜] ContinuousMultilinearMap 𝕜 E G' :=
943- LinearMap.mkContinuous
944- { toFun := fun x => (f x).mkContinuous (C * ‖x‖) <| H x
945- map_add' := fun x y => by
946- ext1
947- simp
948- map_smul' := fun c x => by
949- ext1
950- simp }
951- (max C 0 ) fun x => by
952- simpa using ((f x).mkContinuous_norm_le' _).trans_eq <| by
953- rw [max_mul_of_nonneg _ _ (norm_nonneg x), zero_mul]
954-
955- theorem mkContinuousLinear_norm_le' (f : G →ₗ[𝕜] MultilinearMap 𝕜 E G') (C : ℝ)
956- (H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖) : ‖mkContinuousLinear f C H‖ ≤ max C 0 := by
957- dsimp only [mkContinuousLinear]
958- exact LinearMap.mkContinuous_norm_le _ (le_max_right _ _) _
959-
960- theorem mkContinuousLinear_norm_le (f : G →ₗ[𝕜] MultilinearMap 𝕜 E G') {C : ℝ} (hC : 0 ≤ C)
961- (H : ∀ x m, ‖f x m‖ ≤ C * ‖x‖ * ∏ i, ‖m i‖) : ‖mkContinuousLinear f C H‖ ≤ C :=
962- (mkContinuousLinear_norm_le' f C H).trans_eq (max_eq_left hC)
963-
964- variable [∀ i, SeminormedAddCommGroup (E' i)] [∀ i, NormedSpace 𝕜 (E' i)]
965-
966- /-- Given a map `f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)` and an estimate
967- `H : ∀ m m', ‖f m m'‖ ≤ C * ∏ i, ‖m i‖ * ∏ i, ‖m' i‖`, upgrade all `MultilinearMap`s in the type to
968- `ContinuousMultilinearMap`s. -/
969- def mkContinuousMultilinear (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) (C : ℝ)
970- (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) :
971- ContinuousMultilinearMap 𝕜 E (ContinuousMultilinearMap 𝕜 E' G) :=
972- mkContinuous
973- { toFun := fun m => mkContinuous (f m) (C * ∏ i, ‖m i‖) <| H m
974- map_update_add' := fun m i x y => by
975- ext1
976- simp
977- map_update_smul' := fun m i c x => by
978- ext1
979- simp }
980- (max C 0 ) fun m => by
981- simp only [coe_mk]
982- refine ((f m).mkContinuous_norm_le' _).trans_eq ?_
983- rw [max_mul_of_nonneg, zero_mul]
984- positivity
985-
986- @[simp]
987- theorem mkContinuousMultilinear_apply (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) {C : ℝ}
988- (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) (m : ∀ i, E i) :
989- ⇑(mkContinuousMultilinear f C H m) = f m :=
990- rfl
991-
992- theorem mkContinuousMultilinear_norm_le' (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) (C : ℝ)
993- (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) :
994- ‖mkContinuousMultilinear f C H‖ ≤ max C 0 := by
995- dsimp only [mkContinuousMultilinear]
996- exact mkContinuous_norm_le _ (le_max_right _ _) _
997-
998- theorem mkContinuousMultilinear_norm_le (f : MultilinearMap 𝕜 E (MultilinearMap 𝕜 E' G)) {C : ℝ}
999- (hC : 0 ≤ C) (H : ∀ m₁ m₂, ‖f m₁ m₂‖ ≤ (C * ∏ i, ‖m₁ i‖) * ∏ i, ‖m₂ i‖) :
1000- ‖mkContinuousMultilinear f C H‖ ≤ C :=
1001- (mkContinuousMultilinear_norm_le' f C H).trans_eq (max_eq_left hC)
1002-
1003- end MultilinearMap
1004-
10051005namespace ContinuousMultilinearMap
10061006
1007-
10081007theorem norm_compContinuousLinearMap_le (g : ContinuousMultilinearMap 𝕜 E₁ G)
10091008 (f : ∀ i, E i →L[𝕜] E₁ i) : ‖g.compContinuousLinearMap f‖ ≤ ‖g‖ * ∏ i, ‖f i‖ :=
10101009 opNorm_le_bound (by positivity) fun m =>
0 commit comments