@@ -5,6 +5,7 @@ Authors: Monica Omar
55-/
66import Mathlib.Algebra.Algebra.Bilinear
77import Mathlib.Algebra.Star.SelfAdjoint
8+ import Mathlib.Algebra.Star.TensorProduct
89
910/-!
1011# Intrinsic star operation on `E →ₗ[R] F`
@@ -52,10 +53,12 @@ def intrinsicStarAddMonoid : StarAddMonoid (E →ₗ[R] F) where
5253
5354scoped [IntrinsicStar] attribute [instance] LinearMap.intrinsicStarAddMonoid
5455
56+ /-- A linear map is self-adjoint (with respect to the intrinsic star) iff it is star-preserving. -/
5557theorem isSelfAdjoint_iff_map_star (f : E →ₗ[R] F) :
5658 IsSelfAdjoint f ↔ ∀ x, f (star x) = star (f x) := by
5759 simp_rw [IsSelfAdjoint, LinearMap.ext_iff, intrinsicStar_apply, star_eq_iff_star_eq, eq_comm]
5860
61+ /-- A star-preserving linear map is self-adjoint (with respect to the intrinsic star). -/
5962@[simp]
6063protected theorem _root_.StarHomClass.isSelfAdjoint {S : Type *} [FunLike S E F]
6164 [LinearMapClass S R E F] [StarHomClass S E F] {f : S} : IsSelfAdjoint (f : E →ₗ[R] F) :=
@@ -71,25 +74,44 @@ theorem intrinsicStar_comp (f : E →ₗ[R] F) (g : G →ₗ[R] E) :
7174@[simp] theorem intrinsicStar_zero : star (0 : E →ₗ[R] F) = 0 := by ext; simp
7275
7376section NonUnitalNonAssocSemiring
74- variable {E : Type *} [NonUnitalNonAssocSemiring E] [StarRing E] [Module R E]
75- [StarModule R E] [SMulCommClass R E E] [IsScalarTower R E E]
77+ variable {R' E : Type *} [CommSemiring R'] [StarRing R']
78+ [NonUnitalNonAssocSemiring E] [StarRing E] [Module R E] [Module R' E]
79+ [StarModule R E] [StarModule R' E] [SMulCommClass R E E] [IsScalarTower R E E]
7680
7781theorem intrinsicStar_mulLeft (x : E) : star (mulLeft R x) = mulRight R (star x) := by ext; simp
7882
7983theorem intrinsicStar_mulRight (x : E) : star (mulRight R x) = mulLeft R (star x) := by
8084 rw [star_eq_iff_star_eq, intrinsicStar_mulLeft, star_star]
8185
82- -- TODO: when we have `Star (E ⊗[R] F)` (PR #27290), we can do these two :
83- -- ` star (mul' R E) = mul' R E ∘ₗ TensorProduct.comm R E E`
84- -- `star (f ⊗ₘ g) = star f ⊗ₘ star g`
86+ theorem intrinsicStar_mul' [SMulCommClass R' E E] [IsScalarTower R' E E] :
87+ star (mul' R' E) = mul' R' E ∘ₗ TensorProduct.comm R' E E :=
88+ TensorProduct.ext' fun _ _ ↦ by simp
8589
8690end NonUnitalNonAssocSemiring
8791
88- variable [SMulCommClass R R F]
89-
92+ variable [SMulCommClass R R F] in
9093lemma intrinsicStarModule : StarModule R (E →ₗ[R] F) where
9194 star_smul _ _ := by ext; simp
9295
9396scoped [IntrinsicStar] attribute [instance] LinearMap.intrinsicStarModule
9497
98+ section TensorProduct
99+ variable {R E F G H : Type *} [CommSemiring R] [StarRing R]
100+ [AddCommMonoid E] [StarAddMonoid E] [Module R E] [StarModule R E]
101+ [AddCommMonoid F] [StarAddMonoid F] [Module R F] [StarModule R F]
102+ [AddCommMonoid G] [StarAddMonoid G] [Module R G] [StarModule R G]
103+ [AddCommMonoid H] [StarAddMonoid H] [Module R H] [StarModule R H]
104+
105+ theorem _root_.TensorProduct.intrinsicStar_map (f : E →ₗ[R] F) (g : G →ₗ[R] H) :
106+ star (TensorProduct.map f g) = TensorProduct.map (star f) (star g) :=
107+ TensorProduct.ext' fun _ _ ↦ by simp
108+
109+ theorem intrinsicStar_lTensor (f : F →ₗ[R] G) : star (lTensor E f) = lTensor E (star f) := by
110+ simp [lTensor, TensorProduct.intrinsicStar_map]
111+
112+ theorem intrinsicStar_rTensor (f : E →ₗ[R] F) : star (rTensor G f) = rTensor G (star f) := by
113+ simp [rTensor, TensorProduct.intrinsicStar_map]
114+
115+ end TensorProduct
116+
95117end LinearMap
0 commit comments