@@ -48,7 +48,7 @@ def contractRight : M ⊗[R] Module.Dual R M →ₗ[R] R :=
4848/-- The natural map associating a linear map to the tensor product of two modules. -/
4949def dualTensorHom : Module.Dual R M ⊗[R] N →ₗ[R] M →ₗ[R] N :=
5050 let M' := Module.Dual R M
51- (uncurry R M' N (M →ₗ[R] N) : _ → M' ⊗ N →ₗ[R] M →ₗ[R] N) LinearMap.smulRightₗ
51+ (uncurry (.id R) M' N (M →ₗ[R] N) : _ → M' ⊗ N →ₗ[R] M →ₗ[R] N) LinearMap.smulRightₗ
5252
5353variable {R M N P Q}
5454
@@ -91,12 +91,13 @@ theorem zero_prodMap_dualTensorHom (g : Module.Dual R N) (q : Q) :
9191 simp only [coe_comp, coe_inr, Function.comp_apply, prodMap_apply, dualTensorHom_apply,
9292 snd_apply, Prod.smul_mk, LinearMap.zero_apply, smul_zero]
9393
94+ attribute [-ext] AlgebraTensorModule.curry_injective in
9495theorem map_dualTensorHom (f : Module.Dual R M) (p : P) (g : Module.Dual R N) (q : Q) :
9596 TensorProduct.map (dualTensorHom R M P (f ⊗ₜ[R] p)) (dualTensorHom R N Q (g ⊗ₜ[R] q)) =
9697 dualTensorHom R (M ⊗[R] N) (P ⊗[R] Q) (dualDistrib R M N (f ⊗ₜ g) ⊗ₜ[R] (p ⊗ₜ[R] q)) := by
9798 ext m n
98- simp only [compr₂_apply , mk_apply, map_tmul, dualTensorHom_apply, dualDistrib_apply, ←
99- smul_tmul_smul]
99+ simp only [compr₂ₛₗ_apply , mk_apply, map_tmul, dualTensorHom_apply, dualDistrib_apply,
100+ ← smul_tmul_smul]
100101
101102@[simp]
102103theorem comp_dualTensorHom (f : Module.Dual R M) (n : N) (g : Module.Dual R N) (p : P) :
@@ -118,6 +119,7 @@ theorem toMatrix_dualTensorHom {m : Type*} {n : Type*} [Fintype m] [Finite n] [D
118119 rw [and_iff_not_or_not, Classical.not_not] at hij
119120 rcases hij with hij | hij <;> simp [hij]
120121
122+ attribute [-ext] AlgebraTensorModule.curry_injective in
121123/-- If `M` is free, the natural linear map $M^* ⊗ N → Hom(M, N)$ is an equivalence. This function
122124provides this equivalence in return for a basis of `M`. -/
123125-- We manually create simp-lemmas because `@[simps]` generates a malformed lemma
@@ -132,7 +134,7 @@ noncomputable def dualTensorHomEquivOfBasis : Module.Dual R M ⊗[R] N ≃ₗ[R]
132134 (by
133135 ext f m
134136 simp only [applyₗ_apply_apply, coeFn_sum, dualTensorHom_apply, mk_apply, id_coe, _root_.id,
135- Fintype.sum_apply, Function.comp_apply, Basis.coe_dualBasis, coe_comp, compr₂_apply ,
137+ Fintype.sum_apply, Function.comp_apply, Basis.coe_dualBasis, coe_comp, compr₂ₛₗ_apply ,
136138 tmul_smul, smul_tmul', ← sum_tmul, Basis.sum_dual_apply_smul_coord])
137139
138140@[simp]
@@ -198,26 +200,28 @@ noncomputable def rTensorHomEquivHomRTensor : (M →ₗ[R] P) ⊗[R] Q ≃ₗ[R]
198200 congr (dualTensorHomEquiv R M P).symm (LinearEquiv.refl R Q) ≪≫ₗ TensorProduct.assoc R _ P Q ≪≫ₗ
199201 dualTensorHomEquiv R M _
200202
203+ attribute [-ext] AlgebraTensorModule.curry_injective in
201204@[simp]
202205theorem lTensorHomEquivHomLTensor_toLinearMap :
203- (lTensorHomEquivHomLTensor R M P Q).toLinearMap = lTensorHomToHomLTensor R M P Q := by
206+ (lTensorHomEquivHomLTensor R M P Q).toLinearMap = lTensorHomToHomLTensor (.id R) M P Q := by
204207 let e := congr (LinearEquiv.refl R P) (dualTensorHomEquiv R M Q)
205208 have h : Function.Surjective e.toLinearMap := e.surjective
206209 refine (cancel_right h).1 ?_
207210 ext f q m
208- simp only [e, lTensorHomEquivHomLTensor, dualTensorHomEquiv, LinearEquiv.comp_coe, compr₂_apply ,
211+ simp only [e, lTensorHomEquivHomLTensor, dualTensorHomEquiv, LinearEquiv.comp_coe, compr₂ₛₗ_apply ,
209212 mk_apply, LinearEquiv.coe_coe, LinearEquiv.trans_apply, congr_tmul, LinearEquiv.refl_apply,
210213 dualTensorHomEquivOfBasis_apply, dualTensorHomEquivOfBasis_symm_cancel_left, leftComm_tmul,
211214 dualTensorHom_apply, coe_comp, Function.comp_apply, lTensorHomToHomLTensor_apply, tmul_smul]
212215
216+ attribute [-ext] AlgebraTensorModule.curry_injective in
213217@[simp]
214218theorem rTensorHomEquivHomRTensor_toLinearMap :
215- (rTensorHomEquivHomRTensor R M P Q).toLinearMap = rTensorHomToHomRTensor R M P Q := by
219+ (rTensorHomEquivHomRTensor R M P Q).toLinearMap = rTensorHomToHomRTensor (.id R) M P Q := by
216220 let e := congr (dualTensorHomEquiv R M P) (LinearEquiv.refl R Q)
217221 have h : Function.Surjective e.toLinearMap := e.surjective
218222 refine (cancel_right h).1 ?_
219223 ext f p q m
220- simp only [e, rTensorHomEquivHomRTensor, dualTensorHomEquiv, compr₂_apply , mk_apply, coe_comp,
224+ simp only [e, rTensorHomEquivHomRTensor, dualTensorHomEquiv, compr₂ₛₗ_apply , mk_apply, coe_comp,
221225 LinearEquiv.coe_toLinearMap, Function.comp_apply,
222226 dualTensorHomEquivOfBasis_apply, LinearEquiv.trans_apply, congr_tmul,
223227 dualTensorHomEquivOfBasis_symm_cancel_left, LinearEquiv.refl_apply, assoc_tmul,
@@ -227,12 +231,12 @@ variable {R M N P Q}
227231
228232@[simp]
229233theorem lTensorHomEquivHomLTensor_apply (x : P ⊗[R] (M →ₗ[R] Q)) :
230- lTensorHomEquivHomLTensor R M P Q x = lTensorHomToHomLTensor R M P Q x := by
234+ lTensorHomEquivHomLTensor R M P Q x = lTensorHomToHomLTensor (.id R) M P Q x := by
231235 rw [← LinearEquiv.coe_toLinearMap, lTensorHomEquivHomLTensor_toLinearMap]
232236
233237@[simp]
234238theorem rTensorHomEquivHomRTensor_apply (x : (M →ₗ[R] P) ⊗[R] Q) :
235- rTensorHomEquivHomRTensor R M P Q x = rTensorHomToHomRTensor R M P Q x := by
239+ rTensorHomEquivHomRTensor R M P Q x = rTensorHomToHomRTensor (.id R) M P Q x := by
236240 rw [← LinearEquiv.coe_toLinearMap, rTensorHomEquivHomRTensor_toLinearMap]
237241
238242variable (R M N P Q)
@@ -244,13 +248,14 @@ between the two is given by `homTensorHomEquiv_toLinearMap` and `homTensorHomEqu
244248noncomputable def homTensorHomEquiv : (M →ₗ[R] P) ⊗[R] (N →ₗ[R] Q) ≃ₗ[R] M ⊗[R] N →ₗ[R] P ⊗[R] Q :=
245249 rTensorHomEquivHomRTensor R M P _ ≪≫ₗ
246250 (LinearEquiv.refl R M).arrowCongr (lTensorHomEquivHomLTensor R N _ Q) ≪≫ₗ
247- lift.equiv R M N _
251+ lift.equiv _ M N _
248252
253+ attribute [-ext] AlgebraTensorModule.curry_injective in
249254@[simp]
250255theorem homTensorHomEquiv_toLinearMap :
251- (homTensorHomEquiv R M N P Q).toLinearMap = homTensorHomMap R M N P Q := by
256+ (homTensorHomEquiv R M N P Q).toLinearMap = homTensorHomMap (.id R) M N P Q := by
252257 ext m n
253- simp only [homTensorHomEquiv, compr₂_apply , mk_apply, LinearEquiv.coe_toLinearMap,
258+ simp only [homTensorHomEquiv, compr₂ₛₗ_apply , mk_apply, LinearEquiv.coe_toLinearMap,
254259 LinearEquiv.trans_apply, lift.equiv_apply, LinearEquiv.arrowCongr_apply, LinearEquiv.refl_symm,
255260 LinearEquiv.refl_apply, rTensorHomEquivHomRTensor_apply, lTensorHomEquivHomLTensor_apply,
256261 lTensorHomToHomLTensor_apply, rTensorHomToHomRTensor_apply, homTensorHomMap_apply,
@@ -260,7 +265,7 @@ variable {R M N P Q}
260265
261266@[simp]
262267theorem homTensorHomEquiv_apply (x : (M →ₗ[R] P) ⊗[R] (N →ₗ[R] Q)) :
263- homTensorHomEquiv R M N P Q x = homTensorHomMap R M N P Q x := by
268+ homTensorHomEquiv R M N P Q x = homTensorHomMap (.id R) M N P Q x := by
264269 rw [← LinearEquiv.coe_toLinearMap, homTensorHomEquiv_toLinearMap]
265270
266271end CommSemiring
0 commit comments