Skip to content

Commit ba16996

Browse files
committed
chore: move code around in NormedSpace.Multilinear.Basic (#30087)
Preparation for #22089. The current PR only moves 77 lines earlier in the file, to make it available at a point where I will need it. Pure cut and paste, no other change. Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr>
1 parent 6549fa3 commit ba16996

1 file changed

Lines changed: 76 additions & 77 deletions

File tree

  • Mathlib/Analysis/NormedSpace/Multilinear

Mathlib/Analysis/NormedSpace/Multilinear/Basic.lean

Lines changed: 76 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,82 @@ protected def piFieldEquiv : G ≃ₗᵢ[𝕜] ContinuousMultilinearMap 𝕜 (fu
825825

826826
end 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+
828904
namespace ContinuousLinearMap
829905

830906
theorem 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-
10051005
namespace ContinuousMultilinearMap
10061006

1007-
10081007
theorem 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

Comments
 (0)