Skip to content

Commit 4851ebd

Browse files
committed
feat(Analysis/InnerProductSpace/TensorProduct): continuous version of TensorProduct.mk (#40340)
and isometric version of `TensorProduct.rid`.
1 parent f0c0e38 commit 4851ebd

2 files changed

Lines changed: 62 additions & 9 deletions

File tree

Mathlib/Analysis/InnerProductSpace/TensorProduct.lean

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,19 @@ theorem ext_iff_inner_left_threefold {x y : E ⊗[𝕜] F ⊗[𝕜] G} :
197197
simpa only [← inner_conj_symm x, ← inner_conj_symm y, starRingEnd_apply, star_inj] using
198198
ext_iff_inner_right_threefold (x := x) (y := y)
199199

200+
variable (𝕜 E F) in
201+
/-- The canonical continuous bilinear map `E → F → E ⊗ F`. This is the continuous version of
202+
`mk`. -/
203+
noncomputable def mkL : E →L[𝕜] F →L[𝕜] E ⊗[𝕜] F := (mk 𝕜 E F).mkContinuous₂ 1 fun _ _ ↦ by simp
204+
205+
@[simp] lemma coe_mkL_apply (x : E) : ⇑(mkL 𝕜 E F x) = mk 𝕜 E F x := rfl
206+
@[simp] lemma toLinearMap₁₂_mkL : (mkL 𝕜 E F).toLinearMap₁₂ = mk 𝕜 E F := rfl
207+
@[simp] lemma toLinearMap_mkL_apply (x : E) : (mkL 𝕜 E F x).toLinearMap = mk 𝕜 E F x := rfl
208+
lemma mkL_apply_apply (x : E) (y : F) : mkL 𝕜 E F x y = x ⊗ₜ y := rfl
209+
210+
@[fun_prop] lemma continuous_tmul : Continuous fun x : E × F ↦ x.1 ⊗ₜ[𝕜] x.2 :=
211+
(mkL 𝕜 E F).continuous₂
212+
200213
section isometry
201214

202215
/-- The tensor product map of two linear isometries is a linear isometry. In particular, this is
@@ -360,21 +373,53 @@ variable (𝕜 E) in
360373
noncomputable def lidIsometry : 𝕜 ⊗[𝕜] E ≃ₗᵢ[𝕜] E :=
361374
TensorProduct.lid 𝕜 E |>.isometryOfInner inner_lid_lid
362375

363-
@[simp] lemma lidIsometry_apply (x : 𝕜 ⊗[𝕜] E) :
364-
lidIsometry 𝕜 E x = TensorProduct.lid 𝕜 E x := rfl
365-
@[simp] lemma lidIsometry_symm_apply (x : E) :
366-
(lidIsometry 𝕜 E).symm x = 1 ⊗ₜ x := rfl
367-
368376
@[simp] lemma toLinearEquiv_lidIsometry :
369377
(lidIsometry 𝕜 E).toLinearEquiv = TensorProduct.lid 𝕜 E := rfl
370378

371-
@[simp] lemma norm_lid (x : 𝕜 ⊗[𝕜] E) :
372-
‖TensorProduct.lid 𝕜 E x‖ = ‖x‖ := lidIsometry 𝕜 E |>.norm_map x
373-
@[simp] lemma nnnorm_lid (x : 𝕜 ⊗[𝕜] E) :
374-
‖TensorProduct.lid 𝕜 E x‖₊ = ‖x‖₊ := lidIsometry 𝕜 E |>.nnnorm_map x
379+
lemma toContinuousLinearMap_symm_lidIsometry :
380+
(lidIsometry 𝕜 E).symm.toContinuousLinearEquiv.toContinuousLinearMap = mkL 𝕜 𝕜 E 1 := rfl
381+
382+
@[simp] lemma lidIsometry_apply (x : 𝕜 ⊗[𝕜] E) : lidIsometry 𝕜 E x = TensorProduct.lid 𝕜 E x := rfl
383+
@[simp] lemma lidIsometry_symm_apply (x : E) : (lidIsometry 𝕜 E).symm x = 1 ⊗ₜ x := rfl
384+
385+
@[simp] lemma norm_lid (x) : ‖TensorProduct.lid 𝕜 E x‖ = ‖x‖ := (lidIsometry 𝕜 E).norm_map x
386+
@[simp] lemma nnnorm_lid (x) : ‖TensorProduct.lid 𝕜 E x‖₊ = ‖x‖₊ := lidIsometry 𝕜 E |>.nnnorm_map x
387+
375388
@[simp] lemma enorm_lid (x : 𝕜 ⊗[𝕜] E) :
376389
‖TensorProduct.lid 𝕜 E x‖ₑ = ‖x‖ₑ := lidIsometry 𝕜 E |>.toLinearIsometry.enorm_map x
377390

391+
@[simp] theorem inner_rid_rid (x y : E ⊗[𝕜] 𝕜) :
392+
inner 𝕜 (TensorProduct.rid 𝕜 E x) (TensorProduct.rid 𝕜 E y) = inner 𝕜 x y := by
393+
simp [← lid_comm]
394+
395+
variable (𝕜 E) in
396+
/-- The linear isometry equivalence version of `TensorProduct.rid`. -/
397+
noncomputable def ridIsometry : E ⊗[𝕜] 𝕜 ≃ₗᵢ[𝕜] E :=
398+
TensorProduct.rid 𝕜 E |>.isometryOfInner inner_rid_rid
399+
400+
@[simp] lemma toLinearEquiv_ridIsometry :
401+
(ridIsometry 𝕜 E).toLinearEquiv = TensorProduct.rid 𝕜 E := rfl
402+
403+
lemma toContinuousLinearMap_symm_ridIsometry :
404+
(ridIsometry 𝕜 E).symm.toContinuousLinearEquiv.toContinuousLinearMap = (mkL 𝕜 E 𝕜).flip 1 := rfl
405+
406+
@[simp] lemma ridIsometry_apply (x) : ridIsometry 𝕜 E x = TensorProduct.rid 𝕜 E x := rfl
407+
@[simp] lemma symm_ridIsometry_apply (x) : (ridIsometry 𝕜 E).symm x = x ⊗ₜ 1 := rfl
408+
409+
lemma lidIsometry_eq_ridIsometry : lidIsometry 𝕜 𝕜 = ridIsometry 𝕜 𝕜 := by ext; simp [lid_eq_rid]
410+
411+
@[simp] lemma norm_rid (x) : ‖TensorProduct.rid 𝕜 E x‖ = ‖x‖ := (ridIsometry 𝕜 E).norm_map x
412+
@[simp] lemma nnnorm_rid (x) : ‖TensorProduct.rid 𝕜 E x‖₊ = ‖x‖₊ := by simp [← NNReal.coe_inj]
413+
414+
@[simp] lemma enorm_rid (x) : ‖TensorProduct.rid 𝕜 E x‖ₑ = ‖x‖ₑ :=
415+
ridIsometry 𝕜 E |>.toLinearIsometry.enorm_map x
416+
417+
@[simp] lemma commIsometry_trans_lidIsometry :
418+
(commIsometry 𝕜 E 𝕜).trans (lidIsometry 𝕜 E) = ridIsometry 𝕜 E := by ext; simp
419+
420+
@[simp] lemma commIsometry_trans_ridIsometry :
421+
(commIsometry 𝕜 𝕜 E).trans (ridIsometry 𝕜 E) = lidIsometry 𝕜 E := by ext; simp
422+
378423
@[simp] theorem inner_assoc_assoc (x y : E ⊗[𝕜] F ⊗[𝕜] G) :
379424
inner 𝕜 (TensorProduct.assoc 𝕜 E F G x) (TensorProduct.assoc 𝕜 E F G y) = inner 𝕜 x y :=
380425
x.induction_on (by simp) (fun a _ =>

Mathlib/LinearAlgebra/TensorProduct/Associator.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,19 @@ theorem comm_trans_lid :
9292
TensorProduct.comm R M R ≪≫ₗ TensorProduct.lid R M = TensorProduct.rid R M :=
9393
LinearEquiv.toLinearMap_injective (ext (by ext; rfl))
9494

95+
@[simp] lemma lid_comm (x) :
96+
TensorProduct.lid R M (TensorProduct.comm R M R x) = TensorProduct.rid R M x :=
97+
congr($comm_trans_lid _)
98+
9599
@[simp]
96100
theorem comm_trans_rid :
97101
TensorProduct.comm R R M ≪≫ₗ TensorProduct.rid R M = TensorProduct.lid R M :=
98102
LinearEquiv.toLinearMap_injective (ext (by ext; rfl))
99103

104+
@[simp] lemma rid_comm (x) :
105+
TensorProduct.rid R M (TensorProduct.comm R R M x) = TensorProduct.lid R M x :=
106+
congr($comm_trans_rid _)
107+
100108
variable (R) in
101109
theorem lid_eq_rid : TensorProduct.lid R R = TensorProduct.rid R R :=
102110
LinearEquiv.toLinearMap_injective <| ext' mul_comm

0 commit comments

Comments
 (0)