@@ -7,6 +7,7 @@ import linear_algebra.finite_dimensional
7
7
import analysis.normed_space.linear_isometry
8
8
import analysis.normed_space.riesz_lemma
9
9
import analysis.asymptotics.asymptotics
10
+ import algebra.algebra.tower
10
11
11
12
/-!
12
13
# Operator norm on the space of continuous linear maps
@@ -755,6 +756,8 @@ private lemma le_norm_flip (f : E →L[𝕜] F →L[𝕜] G) : ∥f∥ ≤ ∥fl
755
756
f.op_norm_le_bound₂ (norm_nonneg _) $ λ x y,
756
757
by { rw mul_right_comm, exact (flip f).le_op_norm₂ y x }
757
758
759
+ @[simp] lemma flip_apply (f : E →L[𝕜] F →L[𝕜] G) (x : E) (y : F) : f.flip y x = f x y := rfl
760
+
758
761
@[simp] lemma flip_flip (f : E →L[𝕜] F →L[𝕜] G) :
759
762
f.flip.flip = f :=
760
763
by { ext, refl }
@@ -802,31 +805,99 @@ variables {𝕜 F}
802
805
803
806
@[simp] lemma apply_apply (v : E) (f : E →L[𝕜] F) : apply 𝕜 F v f = f v := rfl
804
807
808
+ variables (𝕜 E F G)
809
+
810
+ /-- Composition of continuous linear maps as a continuous bilinear map. -/
811
+ def compL : (F →L[𝕜] G) →L[𝕜] (E →L[𝕜] F) →L[𝕜] (E →L[𝕜] G) :=
812
+ linear_map.mk_continuous₂
813
+ (linear_map.mk₂ _ comp add_comp smul_comp comp_add (λ c f g, comp_smul _ _ _))
814
+ 1 $ λ f g, by simpa only [one_mul] using op_norm_comp_le f g
815
+
816
+ variables {𝕜 E F G}
817
+
818
+ @[simp] lemma compL_apply (f : F →L[𝕜] G) (g : E →L[𝕜] F) : compL 𝕜 E F G f g = f.comp g := rfl
819
+
805
820
section multiplication_linear
806
821
variables (𝕜) (𝕜' : Type *) [normed_ring 𝕜'] [normed_algebra 𝕜 𝕜']
807
822
808
- /-- Left-multiplication in a normed algebra, considered as a continuous linear map. -/
809
- def lmul_left : 𝕜' → (𝕜' →L[𝕜] 𝕜') :=
810
- λ x, (algebra.lmul_left 𝕜 x).mk_continuous ∥x∥
811
- (λ y, by {rw algebra.lmul_left_apply, exact norm_mul_le x y})
823
+ /-- Left multiplication in a normed algebra as a linear isometry to the space of
824
+ continuous linear maps. -/
825
+ def lmulₗᵢ : 𝕜' →ₗᵢ[𝕜] 𝕜' →L[𝕜] 𝕜' :=
826
+ { to_linear_map := (algebra.lmul 𝕜 𝕜').to_linear_map.mk_continuous₂ 1 $
827
+ λ x y, by simpa using norm_mul_le x y,
828
+ norm_map' := λ x, le_antisymm
829
+ (op_norm_le_bound _ (norm_nonneg x) (norm_mul_le x))
830
+ (by { convert ratio_le_op_norm _ (1 : 𝕜'), simp [normed_algebra.norm_one 𝕜 𝕜'] }) }
831
+
832
+ /-- Left multiplication in a normed algebra as a continuous bilinear map. -/
833
+ def lmul : 𝕜' →L[𝕜] 𝕜' →L[𝕜] 𝕜' :=
834
+ (lmulₗᵢ 𝕜 𝕜').to_continuous_linear_map
835
+
836
+ @[simp] lemma lmul_apply (x y : 𝕜') : lmul 𝕜 𝕜' x y = x * y := rfl
837
+
838
+ @[simp] lemma coe_lmulₗᵢ : ⇑(lmulₗᵢ 𝕜 𝕜') = lmul 𝕜 𝕜' := rfl
839
+
840
+ @[simp] lemma op_norm_lmul_apply (x : 𝕜') : ∥lmul 𝕜 𝕜' x∥ = ∥x∥ :=
841
+ (lmulₗᵢ 𝕜 𝕜').norm_map x
842
+
843
+ @[simp] lemma op_norm_lmul : ∥lmul 𝕜 𝕜'∥ = 1 :=
844
+ by haveI := normed_algebra.nontrivial 𝕜 𝕜'; exact (lmulₗᵢ 𝕜 𝕜').norm_to_continuous_linear_map
812
845
813
846
/-- Right-multiplication in a normed algebra, considered as a continuous linear map. -/
814
- def lmul_right : 𝕜' → (𝕜' →L[𝕜] 𝕜') :=
815
- λ x, (algebra.lmul_right 𝕜 x).mk_continuous ∥x∥
816
- (λ y, by {rw [algebra.lmul_right_apply, mul_comm], exact norm_mul_le y x})
847
+ def lmul_right : 𝕜' →L[𝕜] 𝕜' →L[𝕜] 𝕜' := (lmul 𝕜 𝕜').flip
848
+
849
+ @[simp] lemma lmul_right_apply (x y : 𝕜') : lmul_right 𝕜 𝕜' x y = y * x := rfl
850
+
851
+ @[simp] lemma op_norm_lmul_right_apply (x : 𝕜') : ∥lmul_right 𝕜 𝕜' x∥ = ∥x∥ :=
852
+ le_antisymm
853
+ (op_norm_le_bound _ (norm_nonneg x) (λ y, (norm_mul_le y x).trans_eq (mul_comm _ _)))
854
+ (by { convert ratio_le_op_norm _ (1 : 𝕜'), simp [normed_algebra.norm_one 𝕜 𝕜'] })
855
+
856
+ @[simp] lemma op_norm_lmul_right : ∥lmul_right 𝕜 𝕜'∥ = 1 :=
857
+ (op_norm_flip (lmul 𝕜 𝕜')).trans $ op_norm_lmul _ _
858
+
859
+ /-- Right-multiplication in a normed algebra, considered as a linear isometry to the space of
860
+ continuous linear maps. -/
861
+ def lmul_rightₗᵢ : 𝕜' →ₗᵢ[𝕜] 𝕜' →L[𝕜] 𝕜' :=
862
+ { to_linear_map := lmul_right 𝕜 𝕜',
863
+ norm_map' := op_norm_lmul_right_apply 𝕜 𝕜' }
864
+
865
+ @[simp] lemma coe_lmul_rightₗᵢ : ⇑(lmul_rightₗᵢ 𝕜 𝕜') = lmul_right 𝕜 𝕜' := rfl
817
866
818
867
/-- Simultaneous left- and right-multiplication in a normed algebra, considered as a continuous
819
- linear map. -/
820
- def lmul_left_right (vw : 𝕜' × 𝕜') : 𝕜' →L[𝕜] 𝕜' :=
821
- (lmul_right 𝕜 𝕜' vw. 2 ).comp (lmul_left 𝕜 𝕜' vw. 1 )
868
+ trilinear map. -/
869
+ def lmul_left_right : 𝕜' →L[𝕜] 𝕜' →L[𝕜] 𝕜' →L[𝕜] 𝕜' :=
870
+ ((compL 𝕜 𝕜' 𝕜' 𝕜' ).comp (lmul_right 𝕜 𝕜')).flip.comp (lmul 𝕜 𝕜' )
822
871
823
- @[simp] lemma lmul_left_apply (x y : 𝕜') : lmul_left 𝕜 𝕜' x y = x * y := rfl
824
- @[simp] lemma lmul_right_apply (x y : 𝕜') : lmul_right 𝕜 𝕜' x y = y * x := rfl
825
- @[simp] lemma lmul_left_right_apply (vw : 𝕜' × 𝕜') (x : 𝕜') :
826
- lmul_left_right 𝕜 𝕜' vw x = vw.1 * x * vw.2 := rfl
872
+ @[simp] lemma lmul_left_right_apply (x y z : 𝕜') :
873
+ lmul_left_right 𝕜 𝕜' x y z = x * z * y := rfl
874
+
875
+ lemma op_norm_lmul_left_right_apply_apply_le (x y : 𝕜') :
876
+ ∥lmul_left_right 𝕜 𝕜' x y∥ ≤ ∥x∥ * ∥y∥ :=
877
+ (op_norm_comp_le _ _).trans_eq $ by simp [mul_comm]
878
+
879
+ lemma op_norm_lmul_left_right_apply_le (x : 𝕜') :
880
+ ∥lmul_left_right 𝕜 𝕜' x∥ ≤ ∥x∥ :=
881
+ op_norm_le_bound _ (norm_nonneg x) (op_norm_lmul_left_right_apply_apply_le 𝕜 𝕜' x)
882
+
883
+ lemma op_norm_lmul_left_right_le :
884
+ ∥lmul_left_right 𝕜 𝕜'∥ ≤ 1 :=
885
+ op_norm_le_bound _ zero_le_one (λ x, (one_mul ∥x∥).symm ▸ op_norm_lmul_left_right_apply_le 𝕜 𝕜' x)
827
886
828
887
end multiplication_linear
829
888
889
+ section smul_linear
890
+
891
+ variables (𝕜) (𝕜' : Type *) [normed_field 𝕜'] [normed_algebra 𝕜 𝕜']
892
+ [normed_space 𝕜' E] [is_scalar_tower 𝕜 𝕜' E]
893
+
894
+ /-- Scalar multiplication as a continuous bilinear map. -/
895
+ def lsmul : 𝕜' →L[𝕜] E →L[𝕜] E :=
896
+ ((algebra.lsmul 𝕜 E).to_linear_map : 𝕜' →ₗ[𝕜] E →ₗ[𝕜] E).mk_continuous₂ 1 $
897
+ λ c x, by simpa only [one_mul] using (norm_smul c x).le
898
+
899
+ end smul_linear
900
+
830
901
section restrict_scalars
831
902
832
903
variables {𝕜' : Type *} [nondiscrete_normed_field 𝕜'] [normed_algebra 𝕜' 𝕜]
@@ -1004,23 +1075,23 @@ begin
1004
1075
rw [← mul_assoc, inv_mul_cancel (ne_of_lt ha).symm, one_mul],
1005
1076
end
1006
1077
1007
- variable (𝕜)
1008
-
1009
1078
/-- A linear equivalence which is a homothety is a continuous linear equivalence. -/
1010
1079
def of_homothety (f : E ≃ₗ[𝕜] F) (a : ℝ) (ha : 0 < a) (hf : ∀x, ∥f x∥ = a * ∥x∥) : E ≃L[𝕜] F :=
1011
1080
{ to_linear_equiv := f,
1012
1081
continuous_to_fun := f.to_linear_map.continuous_of_bound a (λ x, le_of_eq (hf x)),
1013
1082
continuous_inv_fun := f.symm.to_linear_map.continuous_of_bound a⁻¹
1014
1083
(λ x, le_of_eq (homothety_inverse a ha f hf x)) }
1015
1084
1085
+ variable (𝕜)
1086
+
1016
1087
lemma to_span_nonzero_singleton_homothety (x : E) (h : x ≠ 0 ) (c : 𝕜) :
1017
1088
∥linear_equiv.to_span_nonzero_singleton 𝕜 E x h c∥ = ∥x∥ * ∥c∥ :=
1018
1089
continuous_linear_map.to_span_singleton_homothety _ _ _
1019
1090
1020
1091
/-- Given a nonzero element `x` of a normed space `E` over a field `𝕜`, the natural
1021
1092
continuous linear equivalence from `E` to the span of `x`.-/
1022
1093
def to_span_nonzero_singleton (x : E) (h : x ≠ 0 ) : 𝕜 ≃L[𝕜] (𝕜 ∙ x) :=
1023
- of_homothety 𝕜
1094
+ of_homothety
1024
1095
(linear_equiv.to_span_nonzero_singleton 𝕜 E x h)
1025
1096
∥x∥
1026
1097
(norm_pos_iff.mpr h)
@@ -1073,22 +1144,29 @@ def linear_equiv.to_continuous_linear_equiv_of_bounds (e : E ≃ₗ[𝕜] F) (C_
1073
1144
namespace continuous_linear_map
1074
1145
variables (𝕜) (𝕜' : Type *) [normed_ring 𝕜'] [normed_algebra 𝕜 𝕜']
1075
1146
1076
- @[simp] lemma lmul_left_norm (v : 𝕜') : ∥lmul_left 𝕜 𝕜' v∥ = ∥v∥ :=
1077
- begin
1078
- refine le_antisymm _ _,
1079
- { exact linear_map.mk_continuous_norm_le _ (norm_nonneg v) _ },
1080
- { simpa [normed_algebra.norm_one 𝕜 𝕜'] using le_op_norm (lmul_left 𝕜 𝕜' v) (1 :𝕜') }
1081
- end
1147
+ variables {𝕜}
1082
1148
1083
- @[simp] lemma lmul_right_norm (v : 𝕜') : ∥lmul_right 𝕜 𝕜' v∥ = ∥v∥ :=
1084
- begin
1085
- refine le_antisymm _ _,
1086
- { exact linear_map.mk_continuous_norm_le _ (norm_nonneg v) _ },
1087
- { simpa [normed_algebra.norm_one 𝕜 𝕜'] using le_op_norm (lmul_right 𝕜 𝕜' v) (1 :𝕜') }
1088
- end
1149
+ variables {E' F' : Type *} [normed_group E'] [normed_group F'] [normed_space 𝕜 E'] [normed_space 𝕜 F']
1150
+
1151
+ /-- Compose a bilinear map `E →L[𝕜] F →L[𝕜] G` with two linear maps `E' →L[𝕜] E` and `F' →L[𝕜] F`. -/
1152
+ def bilinear_comp (f : E →L[𝕜] F →L[𝕜] G) (gE : E' →L[𝕜] E) (gF : F' →L[𝕜] F) : E' →L[𝕜] F' →L[𝕜] G :=
1153
+ ((f.comp gE).flip.comp gF).flip
1154
+
1155
+ @[simp] lemma bilinear_comp_apply (f : E →L[𝕜] F →L[𝕜] G) (gE : E' →L[𝕜] E) (gF : F' →L[𝕜] F)
1156
+ (x : E') (y : F') :
1157
+ f.bilinear_comp gE gF x y = f (gE x) (gF y) :=
1158
+ rfl
1159
+
1160
+ /-- Derivative of a continuous bilinear map `f : E →L[𝕜] F →L[𝕜] G` interpreted as a map `E × F → G`
1161
+ at point `p : E × F` evaluated at `q : E × F`, as a continuous bilinear map. -/
1162
+ def deriv₂ (f : E →L[𝕜] F →L[𝕜] G) : (E × F) →L[𝕜] (E × F) →L[𝕜] G :=
1163
+ f.bilinear_comp (fst _ _ _) (snd _ _ _) + f.flip.bilinear_comp (snd _ _ _) (fst _ _ _)
1164
+
1165
+ @[simp] lemma coe_deriv₂ (f : E →L[𝕜] F →L[𝕜] G) (p : E × F) :
1166
+ ⇑(f.deriv₂ p) = λ q : E × F, f p.1 q.2 + f q.1 p.2 := rfl
1089
1167
1090
- lemma lmul_left_right_norm_le (vw : 𝕜' × 𝕜' ) :
1091
- ∥lmul_left_right 𝕜 𝕜' vw∥ ≤ ∥vw. 1 ∥ * ∥vw. 2 ∥ :=
1092
- by simpa [mul_comm] using op_norm_comp_le (lmul_right 𝕜 𝕜' vw. 2 ) (lmul_left 𝕜 𝕜' vw. 1 )
1168
+ lemma map_add₂ (f : E →L[𝕜] F →L[𝕜] G) (x x' : E) (y y' : F ) :
1169
+ f (x + x') (y + y') = f x y + f.deriv₂ (x, y) (x', y') + f x' y' :=
1170
+ by simp only [map_add, add_apply, coe_deriv₂, add_assoc]
1093
1171
1094
1172
end continuous_linear_map
0 commit comments