algebra.category.Module.monoidal.basic
⟷
Mathlib.Algebra.Category.ModuleCat.Monoidal.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
-/
-import Algebra.Category.Module.Basic
-import LinearAlgebra.TensorProduct
+import Algebra.Category.ModuleCat.Basic
+import LinearAlgebra.TensorProduct.Basic
import CategoryTheory.Linear.Yoneda
import CategoryTheory.Monoidal.Linear
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -183,7 +183,7 @@ theorem triangle (M N : ModuleCat.{u} R) :
by
apply TensorProduct.ext_threefold
intro x y z
- change R at y
+ change R at y
dsimp [tensor_hom, associator]
erw [TensorProduct.lid_tmul, TensorProduct.rid_tmul]
exact (TensorProduct.smul_tmul _ _ _).symm
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
-/
-import Mathbin.Algebra.Category.Module.Basic
-import Mathbin.LinearAlgebra.TensorProduct
-import Mathbin.CategoryTheory.Linear.Yoneda
-import Mathbin.CategoryTheory.Monoidal.Linear
+import Algebra.Category.Module.Basic
+import LinearAlgebra.TensorProduct
+import CategoryTheory.Linear.Yoneda
+import CategoryTheory.Monoidal.Linear
#align_import algebra.category.Module.monoidal.basic from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
-
-! This file was ported from Lean 3 source module algebra.category.Module.monoidal.basic
-! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Category.Module.Basic
import Mathbin.LinearAlgebra.TensorProduct
import Mathbin.CategoryTheory.Linear.Yoneda
import Mathbin.CategoryTheory.Monoidal.Linear
+#align_import algebra.category.Module.monoidal.basic from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
+
/-!
# The monoidal category structure on R-modules
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -154,7 +154,7 @@ def leftUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (R ⊗[R] M) ≅ M :=
theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom (𝟙 (ModuleCat.of R R)) f ≫ (leftUnitor N).Hom = (leftUnitor M).Hom ≫ f :=
by
- ext (x y); dsimp
+ ext x y; dsimp
erw [TensorProduct.lid_tmul, TensorProduct.lid_tmul]
rw [LinearMap.map_smul]
rfl
@@ -172,7 +172,7 @@ def rightUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (M ⊗[R] R) ≅ M :=
theorem rightUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom f (𝟙 (ModuleCat.of R R)) ≫ (rightUnitor N).Hom = (rightUnitor M).Hom ≫ f :=
by
- ext (x y); dsimp
+ ext x y; dsimp
erw [TensorProduct.rid_tmul, TensorProduct.rid_tmul]
rw [LinearMap.map_smul]
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -69,14 +69,18 @@ def tensorHom {M N M' N' : ModuleCat R} (f : M ⟶ N) (g : M' ⟶ N') :
#align Module.monoidal_category.tensor_hom ModuleCat.MonoidalCategory.tensorHom
-/
+#print ModuleCat.MonoidalCategory.tensor_id /-
theorem tensor_id (M N : ModuleCat R) : tensorHom (𝟙 M) (𝟙 N) = 𝟙 (ModuleCat.of R (M ⊗ N)) := by
ext1; rfl
#align Module.monoidal_category.tensor_id ModuleCat.MonoidalCategory.tensor_id
+-/
+#print ModuleCat.MonoidalCategory.tensor_comp /-
theorem tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (g₁ : Y₁ ⟶ Z₁)
(g₂ : Y₂ ⟶ Z₂) : tensorHom (f₁ ≫ g₁) (f₂ ≫ g₂) = tensorHom f₁ f₂ ≫ tensorHom g₁ g₂ := by ext1;
rfl
#align Module.monoidal_category.tensor_comp ModuleCat.MonoidalCategory.tensor_comp
+-/
#print ModuleCat.MonoidalCategory.associator /-
/-- (implementation) the associator for R-modules -/
@@ -121,24 +125,30 @@ private theorem pentagon_aux (W X Y Z : Type _) [AddCommMonoid W] [AddCommMonoid
end
+#print ModuleCat.MonoidalCategory.associator_naturality /-
theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂)
(f₃ : X₃ ⟶ Y₃) :
tensorHom (tensorHom f₁ f₂) f₃ ≫ (associator Y₁ Y₂ Y₃).Hom =
(associator X₁ X₂ X₃).Hom ≫ tensorHom f₁ (tensorHom f₂ f₃) :=
by convert associator_naturality_aux f₁ f₂ f₃ using 1
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
+-/
+#print ModuleCat.MonoidalCategory.pentagon /-
theorem pentagon (W X Y Z : ModuleCat R) :
tensorHom (associator W X Y).Hom (𝟙 Z) ≫
(associator W (tensorObj X Y) Z).Hom ≫ tensorHom (𝟙 W) (associator X Y Z).Hom =
(associator (tensorObj W X) Y Z).Hom ≫ (associator W X (tensorObj Y Z)).Hom :=
by convert pentagon_aux R W X Y Z using 1
#align Module.monoidal_category.pentagon ModuleCat.MonoidalCategory.pentagon
+-/
+#print ModuleCat.MonoidalCategory.leftUnitor /-
/-- (implementation) the left unitor for R-modules -/
def leftUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (R ⊗[R] M) ≅ M :=
(LinearEquiv.toModuleIso (TensorProduct.lid R M) : of R (R ⊗ M) ≅ of R M).trans (ofSelfIso M)
#align Module.monoidal_category.left_unitor ModuleCat.MonoidalCategory.leftUnitor
+-/
#print ModuleCat.MonoidalCategory.leftUnitor_naturality /-
theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
@@ -151,10 +161,12 @@ theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
#align Module.monoidal_category.left_unitor_naturality ModuleCat.MonoidalCategory.leftUnitor_naturality
-/
+#print ModuleCat.MonoidalCategory.rightUnitor /-
/-- (implementation) the right unitor for R-modules -/
def rightUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (M ⊗[R] R) ≅ M :=
(LinearEquiv.toModuleIso (TensorProduct.rid R M) : of R (M ⊗ R) ≅ of R M).trans (ofSelfIso M)
#align Module.monoidal_category.right_unitor ModuleCat.MonoidalCategory.rightUnitor
+-/
#print ModuleCat.MonoidalCategory.rightUnitor_naturality /-
theorem rightUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
@@ -213,59 +225,73 @@ instance : CommRing ((𝟙_ (ModuleCat.{u} R) : ModuleCat.{u} R) : Type u) :=
namespace MonoidalCategory
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ModuleCat.MonoidalCategory.hom_apply /-
@[simp]
theorem hom_apply {K L M N : ModuleCat.{u} R} (f : K ⟶ L) (g : M ⟶ N) (k : K) (m : M) :
(f ⊗ g) (k ⊗ₜ m) = f k ⊗ₜ g m :=
rfl
#align Module.monoidal_category.hom_apply ModuleCat.MonoidalCategory.hom_apply
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ModuleCat.MonoidalCategory.leftUnitor_hom_apply /-
@[simp]
theorem leftUnitor_hom_apply {M : ModuleCat.{u} R} (r : R) (m : M) :
((λ_ M).Hom : 𝟙_ (ModuleCat R) ⊗ M ⟶ M) (r ⊗ₜ[R] m) = r • m :=
TensorProduct.lid_tmul m r
#align Module.monoidal_category.left_unitor_hom_apply ModuleCat.MonoidalCategory.leftUnitor_hom_apply
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ModuleCat.MonoidalCategory.leftUnitor_inv_apply /-
@[simp]
theorem leftUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
((λ_ M).inv : M ⟶ 𝟙_ (ModuleCat.{u} R) ⊗ M) m = 1 ⊗ₜ[R] m :=
TensorProduct.lid_symm_apply m
#align Module.monoidal_category.left_unitor_inv_apply ModuleCat.MonoidalCategory.leftUnitor_inv_apply
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ModuleCat.MonoidalCategory.rightUnitor_hom_apply /-
@[simp]
theorem rightUnitor_hom_apply {M : ModuleCat.{u} R} (m : M) (r : R) :
((ρ_ M).Hom : M ⊗ 𝟙_ (ModuleCat R) ⟶ M) (m ⊗ₜ r) = r • m :=
TensorProduct.rid_tmul m r
#align Module.monoidal_category.right_unitor_hom_apply ModuleCat.MonoidalCategory.rightUnitor_hom_apply
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ModuleCat.MonoidalCategory.rightUnitor_inv_apply /-
@[simp]
theorem rightUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
((ρ_ M).inv : M ⟶ M ⊗ 𝟙_ (ModuleCat.{u} R)) m = m ⊗ₜ[R] 1 :=
TensorProduct.rid_symm_apply m
#align Module.monoidal_category.right_unitor_inv_apply ModuleCat.MonoidalCategory.rightUnitor_inv_apply
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ModuleCat.MonoidalCategory.associator_hom_apply /-
@[simp]
theorem associator_hom_apply {M N K : ModuleCat.{u} R} (m : M) (n : N) (k : K) :
((α_ M N K).Hom : (M ⊗ N) ⊗ K ⟶ M ⊗ N ⊗ K) (m ⊗ₜ n ⊗ₜ k) = m ⊗ₜ (n ⊗ₜ k) :=
rfl
#align Module.monoidal_category.associator_hom_apply ModuleCat.MonoidalCategory.associator_hom_apply
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print ModuleCat.MonoidalCategory.associator_inv_apply /-
@[simp]
theorem associator_inv_apply {M N K : ModuleCat.{u} R} (m : M) (n : N) (k : K) :
((α_ M N K).inv : M ⊗ N ⊗ K ⟶ (M ⊗ N) ⊗ K) (m ⊗ₜ (n ⊗ₜ k)) = m ⊗ₜ n ⊗ₜ k :=
rfl
#align Module.monoidal_category.associator_inv_apply ModuleCat.MonoidalCategory.associator_inv_apply
+-/
end MonoidalCategory
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -174,7 +174,7 @@ theorem triangle (M N : ModuleCat.{u} R) :
by
apply TensorProduct.ext_threefold
intro x y z
- change R at y
+ change R at y
dsimp [tensor_hom, associator]
erw [TensorProduct.lid_tmul, TensorProduct.rid_tmul]
exact (TensorProduct.smul_tmul _ _ _).symm
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
! This file was ported from Lean 3 source module algebra.category.Module.monoidal.basic
-! leanprover-community/mathlib commit 74403a3b2551b0970855e14ef5e8fd0d6af1bfc2
+! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.CategoryTheory.Monoidal.Linear
/-!
# The monoidal category structure on R-modules
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Mostly this uses existing machinery in `linear_algebra.tensor_product`.
We just need to provide a few small missing pieces to build the
`monoidal_category` instance.
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -47,7 +47,7 @@ namespace MonoidalCategory
-- The definitions inside this namespace are essentially private.
-- After we build the `monoidal_category (Module R)` instance,
-- you should use that API.
-open TensorProduct
+open scoped TensorProduct
attribute [local ext] TensorProduct.ext
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -66,22 +66,10 @@ def tensorHom {M N M' N' : ModuleCat R} (f : M ⟶ N) (g : M' ⟶ N') :
#align Module.monoidal_category.tensor_hom ModuleCat.MonoidalCategory.tensorHom
-/
-/- warning: Module.monoidal_category.tensor_id -> ModuleCat.MonoidalCategory.tensor_id is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (N : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)), Eq.{succ (max u2 u3)} (Quiver.Hom.{succ (max u2 u3), max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 M N) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 M N)) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 M M N N (CategoryTheory.CategoryStruct.id.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1))) M) (CategoryTheory.CategoryStruct.id.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1))) N)) (CategoryTheory.CategoryStruct.id.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1))) (ModuleCat.of.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u2, u3} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (AddCommGroup.toAddCommMonoid.{u2} (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u3} (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (ModuleCat.isAddCommGroup.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (ModuleCat.isModule.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isModule.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (TensorProduct.addCommGroup.{u1, u2, u3} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (ModuleCat.isAddCommGroup.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N) (ModuleCat.isModule.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isModule.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (TensorProduct.module.{u1, u2, u3} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (AddCommGroup.toAddCommMonoid.{u2} (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u3} (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (ModuleCat.isAddCommGroup.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (ModuleCat.isModule.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isModule.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N))))
-but is expected to have type
- forall {R : Type.{u3}} [_inst_1 : CommRing.{u3} R] (M : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (N : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 M N) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 M N)) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 M M N N (CategoryTheory.CategoryStruct.id.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1))) M) (CategoryTheory.CategoryStruct.id.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1))) N)) (CategoryTheory.CategoryStruct.id.{max u2 u1, max u3 (succ (max u1 u2))} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1))) (ModuleCat.of.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1) (TensorProduct.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (AddCommGroup.toAddCommMonoid.{u2} (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (TensorProduct.addCommGroup.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (AddCommGroup.toAddCommMonoid.{u2} (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N))))
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.tensor_id ModuleCat.MonoidalCategory.tensor_idₓ'. -/
theorem tensor_id (M N : ModuleCat R) : tensorHom (𝟙 M) (𝟙 N) = 𝟙 (ModuleCat.of R (M ⊗ N)) := by
ext1; rfl
#align Module.monoidal_category.tensor_id ModuleCat.MonoidalCategory.tensor_id
-/- warning: Module.monoidal_category.tensor_comp -> ModuleCat.MonoidalCategory.tensor_comp is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {X₁ : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)} {Y₁ : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)} {Z₁ : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)} {X₂ : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)} {Y₂ : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)} {Z₂ : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)} (f₁ : Quiver.Hom.{succ u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)))) X₁ Y₁) (f₂ : Quiver.Hom.{succ u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) X₂ Y₂) (g₁ : Quiver.Hom.{succ u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)))) Y₁ Z₁) (g₂ : Quiver.Hom.{succ u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) Y₂ Z₂), Eq.{succ (max u2 u3)} (Quiver.Hom.{succ (max u2 u3), max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 Z₁ Z₂)) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 X₁ Z₁ X₂ Z₂ (CategoryTheory.CategoryStruct.comp.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1))) X₁ Y₁ Z₁ f₁ g₁) (CategoryTheory.CategoryStruct.comp.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1))) X₂ Y₂ Z₂ f₂ g₂)) (CategoryTheory.CategoryStruct.comp.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1))) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 Y₁ Y₂) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 Z₁ Z₂) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 X₁ Y₁ X₂ Y₂ f₁ f₂) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 Y₁ Z₁ Y₂ Z₂ g₁ g₂))
-but is expected to have type
- forall {R : Type.{u3}} [_inst_1 : CommRing.{u3} R] {X₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {Y₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {Z₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {X₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} {Y₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} {Z₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} (f₁ : Quiver.Hom.{succ u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)))) X₁ Y₁) (f₂ : Quiver.Hom.{succ u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) X₂ Y₂) (g₁ : Quiver.Hom.{succ u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)))) Y₁ Z₁) (g₂ : Quiver.Hom.{succ u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) Y₂ Z₂), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Z₁ Z₂)) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 X₁ Z₁ X₂ Z₂ (CategoryTheory.CategoryStruct.comp.{u2, max (succ u2) u3} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max (succ u2) u3} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1))) X₁ Y₁ Z₁ f₁ g₁) (CategoryTheory.CategoryStruct.comp.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1))) X₂ Y₂ Z₂ f₂ g₂)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Y₁ Y₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Z₁ Z₂) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 X₁ Y₁ X₂ Y₂ f₁ f₂) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 Y₁ Z₁ Y₂ Z₂ g₁ g₂))
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.tensor_comp ModuleCat.MonoidalCategory.tensor_compₓ'. -/
theorem tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (g₁ : Y₁ ⟶ Z₁)
(g₂ : Y₂ ⟶ Z₂) : tensorHom (f₁ ≫ g₁) (f₂ ≫ g₂) = tensorHom f₁ f₂ ≫ tensorHom g₁ g₂ := by ext1;
rfl
@@ -130,9 +118,6 @@ private theorem pentagon_aux (W X Y Z : Type _) [AddCommMonoid W] [AddCommMonoid
end
-/- warning: Module.monoidal_category.associator_naturality -> ModuleCat.MonoidalCategory.associator_naturality is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturalityₓ'. -/
theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂)
(f₃ : X₃ ⟶ Y₃) :
tensorHom (tensorHom f₁ f₂) f₃ ≫ (associator Y₁ Y₂ Y₃).Hom =
@@ -140,9 +125,6 @@ theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f
by convert associator_naturality_aux f₁ f₂ f₃ using 1
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
-/- warning: Module.monoidal_category.pentagon -> ModuleCat.MonoidalCategory.pentagon is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.pentagon ModuleCat.MonoidalCategory.pentagonₓ'. -/
theorem pentagon (W X Y Z : ModuleCat R) :
tensorHom (associator W X Y).Hom (𝟙 Z) ≫
(associator W (tensorObj X Y) Z).Hom ≫ tensorHom (𝟙 W) (associator X Y Z).Hom =
@@ -150,12 +132,6 @@ theorem pentagon (W X Y Z : ModuleCat R) :
by convert pentagon_aux R W X Y Z using 1
#align Module.monoidal_category.pentagon ModuleCat.MonoidalCategory.pentagon
-/- warning: Module.monoidal_category.left_unitor -> ModuleCat.MonoidalCategory.leftUnitor is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.module.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M))) M
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Ring.toAddCommGroup.{u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M))) M
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.left_unitor ModuleCat.MonoidalCategory.leftUnitorₓ'. -/
/-- (implementation) the left unitor for R-modules -/
def leftUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (R ⊗[R] M) ≅ M :=
(LinearEquiv.toModuleIso (TensorProduct.lid R M) : of R (R ⊗ M) ≅ of R M).trans (ofSelfIso M)
@@ -172,12 +148,6 @@ theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
#align Module.monoidal_category.left_unitor_naturality ModuleCat.MonoidalCategory.leftUnitor_naturality
-/
-/- warning: Module.monoidal_category.right_unitor -> ModuleCat.MonoidalCategory.rightUnitor is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) R (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) R (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.module.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) R (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) M
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) R (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) R (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Ring.toAddCommGroup.{u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) R (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) M
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.right_unitor ModuleCat.MonoidalCategory.rightUnitorₓ'. -/
/-- (implementation) the right unitor for R-modules -/
def rightUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (M ⊗[R] R) ≅ M :=
(LinearEquiv.toModuleIso (TensorProduct.rid R M) : of R (M ⊗ R) ≅ of R M).trans (ofSelfIso M)
@@ -239,9 +209,6 @@ instance : CommRing ((𝟙_ (ModuleCat.{u} R) : ModuleCat.{u} R) : Type u) :=
namespace MonoidalCategory
-/- warning: Module.monoidal_category.hom_apply -> ModuleCat.MonoidalCategory.hom_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.hom_apply ModuleCat.MonoidalCategory.hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem hom_apply {K L M N : ModuleCat.{u} R} (f : K ⟶ L) (g : M ⟶ N) (k : K) (m : M) :
@@ -249,9 +216,6 @@ theorem hom_apply {K L M N : ModuleCat.{u} R} (f : K ⟶ L) (g : M ⟶ N) (k : K
rfl
#align Module.monoidal_category.hom_apply ModuleCat.MonoidalCategory.hom_apply
-/- warning: Module.monoidal_category.left_unitor_hom_apply -> ModuleCat.MonoidalCategory.leftUnitor_hom_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.left_unitor_hom_apply ModuleCat.MonoidalCategory.leftUnitor_hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem leftUnitor_hom_apply {M : ModuleCat.{u} R} (r : R) (m : M) :
@@ -259,9 +223,6 @@ theorem leftUnitor_hom_apply {M : ModuleCat.{u} R} (r : R) (m : M) :
TensorProduct.lid_tmul m r
#align Module.monoidal_category.left_unitor_hom_apply ModuleCat.MonoidalCategory.leftUnitor_hom_apply
-/- warning: Module.monoidal_category.left_unitor_inv_apply -> ModuleCat.MonoidalCategory.leftUnitor_inv_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.left_unitor_inv_apply ModuleCat.MonoidalCategory.leftUnitor_inv_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem leftUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
@@ -269,9 +230,6 @@ theorem leftUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
TensorProduct.lid_symm_apply m
#align Module.monoidal_category.left_unitor_inv_apply ModuleCat.MonoidalCategory.leftUnitor_inv_apply
-/- warning: Module.monoidal_category.right_unitor_hom_apply -> ModuleCat.MonoidalCategory.rightUnitor_hom_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.right_unitor_hom_apply ModuleCat.MonoidalCategory.rightUnitor_hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem rightUnitor_hom_apply {M : ModuleCat.{u} R} (m : M) (r : R) :
@@ -279,9 +237,6 @@ theorem rightUnitor_hom_apply {M : ModuleCat.{u} R} (m : M) (r : R) :
TensorProduct.rid_tmul m r
#align Module.monoidal_category.right_unitor_hom_apply ModuleCat.MonoidalCategory.rightUnitor_hom_apply
-/- warning: Module.monoidal_category.right_unitor_inv_apply -> ModuleCat.MonoidalCategory.rightUnitor_inv_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.right_unitor_inv_apply ModuleCat.MonoidalCategory.rightUnitor_inv_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem rightUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
@@ -289,9 +244,6 @@ theorem rightUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
TensorProduct.rid_symm_apply m
#align Module.monoidal_category.right_unitor_inv_apply ModuleCat.MonoidalCategory.rightUnitor_inv_apply
-/- warning: Module.monoidal_category.associator_hom_apply -> ModuleCat.MonoidalCategory.associator_hom_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.associator_hom_apply ModuleCat.MonoidalCategory.associator_hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -302,9 +254,6 @@ theorem associator_hom_apply {M N K : ModuleCat.{u} R} (m : M) (n : N) (k : K) :
rfl
#align Module.monoidal_category.associator_hom_apply ModuleCat.MonoidalCategory.associator_hom_apply
-/- warning: Module.monoidal_category.associator_inv_apply -> ModuleCat.MonoidalCategory.associator_inv_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.associator_inv_apply ModuleCat.MonoidalCategory.associator_inv_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -72,10 +72,8 @@ lean 3 declaration is
but is expected to have type
forall {R : Type.{u3}} [_inst_1 : CommRing.{u3} R] (M : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (N : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 M N) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 M N)) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 M M N N (CategoryTheory.CategoryStruct.id.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1))) M) (CategoryTheory.CategoryStruct.id.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1))) N)) (CategoryTheory.CategoryStruct.id.{max u2 u1, max u3 (succ (max u1 u2))} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1))) (ModuleCat.of.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1) (TensorProduct.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (AddCommGroup.toAddCommMonoid.{u2} (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (TensorProduct.addCommGroup.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (AddCommGroup.toAddCommMonoid.{u2} (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N))))
Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.tensor_id ModuleCat.MonoidalCategory.tensor_idₓ'. -/
-theorem tensor_id (M N : ModuleCat R) : tensorHom (𝟙 M) (𝟙 N) = 𝟙 (ModuleCat.of R (M ⊗ N)) :=
- by
- ext1
- rfl
+theorem tensor_id (M N : ModuleCat R) : tensorHom (𝟙 M) (𝟙 N) = 𝟙 (ModuleCat.of R (M ⊗ N)) := by
+ ext1; rfl
#align Module.monoidal_category.tensor_id ModuleCat.MonoidalCategory.tensor_id
/- warning: Module.monoidal_category.tensor_comp -> ModuleCat.MonoidalCategory.tensor_comp is a dubious translation:
@@ -85,9 +83,7 @@ but is expected to have type
forall {R : Type.{u3}} [_inst_1 : CommRing.{u3} R] {X₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {Y₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {Z₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {X₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} {Y₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} {Z₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} (f₁ : Quiver.Hom.{succ u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)))) X₁ Y₁) (f₂ : Quiver.Hom.{succ u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) X₂ Y₂) (g₁ : Quiver.Hom.{succ u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)))) Y₁ Z₁) (g₂ : Quiver.Hom.{succ u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) Y₂ Z₂), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Z₁ Z₂)) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 X₁ Z₁ X₂ Z₂ (CategoryTheory.CategoryStruct.comp.{u2, max (succ u2) u3} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max (succ u2) u3} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1))) X₁ Y₁ Z₁ f₁ g₁) (CategoryTheory.CategoryStruct.comp.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1))) X₂ Y₂ Z₂ f₂ g₂)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Y₁ Y₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Z₁ Z₂) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 X₁ Y₁ X₂ Y₂ f₁ f₂) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 Y₁ Z₁ Y₂ Z₂ g₁ g₂))
Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.tensor_comp ModuleCat.MonoidalCategory.tensor_compₓ'. -/
theorem tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (g₁ : Y₁ ⟶ Z₁)
- (g₂ : Y₂ ⟶ Z₂) : tensorHom (f₁ ≫ g₁) (f₂ ≫ g₂) = tensorHom f₁ f₂ ≫ tensorHom g₁ g₂ :=
- by
- ext1
+ (g₂ : Y₂ ⟶ Z₂) : tensorHom (f₁ ≫ g₁) (f₂ ≫ g₂) = tensorHom f₁ f₂ ≫ tensorHom g₁ g₂ := by ext1;
rfl
#align Module.monoidal_category.tensor_comp ModuleCat.MonoidalCategory.tensor_comp
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -51,23 +51,39 @@ open TensorProduct
attribute [local ext] TensorProduct.ext
+#print ModuleCat.MonoidalCategory.tensorObj /-
/-- (implementation) tensor product of R-modules -/
def tensorObj (M N : ModuleCat R) : ModuleCat R :=
ModuleCat.of R (M ⊗[R] N)
#align Module.monoidal_category.tensor_obj ModuleCat.MonoidalCategory.tensorObj
+-/
+#print ModuleCat.MonoidalCategory.tensorHom /-
/-- (implementation) tensor product of morphisms R-modules -/
def tensorHom {M N M' N' : ModuleCat R} (f : M ⟶ N) (g : M' ⟶ N') :
tensorObj M M' ⟶ tensorObj N N' :=
TensorProduct.map f g
#align Module.monoidal_category.tensor_hom ModuleCat.MonoidalCategory.tensorHom
+-/
+/- warning: Module.monoidal_category.tensor_id -> ModuleCat.MonoidalCategory.tensor_id is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (N : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)), Eq.{succ (max u2 u3)} (Quiver.Hom.{succ (max u2 u3), max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 M N) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 M N)) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 M M N N (CategoryTheory.CategoryStruct.id.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1))) M) (CategoryTheory.CategoryStruct.id.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1))) N)) (CategoryTheory.CategoryStruct.id.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1))) (ModuleCat.of.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u2, u3} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (AddCommGroup.toAddCommMonoid.{u2} (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u3} (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (ModuleCat.isAddCommGroup.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (ModuleCat.isModule.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isModule.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (TensorProduct.addCommGroup.{u1, u2, u3} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (ModuleCat.isAddCommGroup.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N) (ModuleCat.isModule.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isModule.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (TensorProduct.module.{u1, u2, u3} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (AddCommGroup.toAddCommMonoid.{u2} (coeSort.{max (succ u1) (succ (succ u2)), succ (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u2} (ModuleCat.hasCoeToSort.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u3} (coeSort.{max (succ u1) (succ (succ u3)), succ (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u3} (ModuleCat.hasCoeToSort.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) N) (ModuleCat.isAddCommGroup.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N)) (ModuleCat.isModule.{u2, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isModule.{u3, u1} R (CommRing.toRing.{u1} R _inst_1) N))))
+but is expected to have type
+ forall {R : Type.{u3}} [_inst_1 : CommRing.{u3} R] (M : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (N : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 M N) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 M N)) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 M M N N (CategoryTheory.CategoryStruct.id.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1))) M) (CategoryTheory.CategoryStruct.id.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1))) N)) (CategoryTheory.CategoryStruct.id.{max u2 u1, max u3 (succ (max u1 u2))} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1))) (ModuleCat.of.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1) (TensorProduct.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (AddCommGroup.toAddCommMonoid.{u2} (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (TensorProduct.addCommGroup.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u3, u2, u1} R (CommRing.toCommSemiring.{u3} R _inst_1) (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (AddCommGroup.toAddCommMonoid.{u2} (ModuleCat.carrier.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isAddCommGroup.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N) (ModuleCat.isAddCommGroup.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N)) (ModuleCat.isModule.{u2, u3} R (CommRing.toRing.{u3} R _inst_1) M) (ModuleCat.isModule.{u1, u3} R (CommRing.toRing.{u3} R _inst_1) N))))
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.tensor_id ModuleCat.MonoidalCategory.tensor_idₓ'. -/
theorem tensor_id (M N : ModuleCat R) : tensorHom (𝟙 M) (𝟙 N) = 𝟙 (ModuleCat.of R (M ⊗ N)) :=
by
ext1
rfl
#align Module.monoidal_category.tensor_id ModuleCat.MonoidalCategory.tensor_id
+/- warning: Module.monoidal_category.tensor_comp -> ModuleCat.MonoidalCategory.tensor_comp is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] {X₁ : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)} {Y₁ : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)} {Z₁ : ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)} {X₂ : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)} {Y₂ : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)} {Z₂ : ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)} (f₁ : Quiver.Hom.{succ u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)))) X₁ Y₁) (f₂ : Quiver.Hom.{succ u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) X₂ Y₂) (g₁ : Quiver.Hom.{succ u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)))) Y₁ Z₁) (g₂ : Quiver.Hom.{succ u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) Y₂ Z₂), Eq.{succ (max u2 u3)} (Quiver.Hom.{succ (max u2 u3), max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 Z₁ Z₂)) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 X₁ Z₁ X₂ Z₂ (CategoryTheory.CategoryStruct.comp.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u1 (succ u2)} (ModuleCat.{u2, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u2, u1} R (CommRing.toRing.{u1} R _inst_1))) X₁ Y₁ Z₁ f₁ g₁) (CategoryTheory.CategoryStruct.comp.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u3, max u1 (succ u3)} (ModuleCat.{u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u3, u1} R (CommRing.toRing.{u1} R _inst_1))) X₂ Y₂ Z₂ f₂ g₂)) (CategoryTheory.CategoryStruct.comp.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, max u1 (succ (max u2 u3))} (ModuleCat.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u3, u1} R (CommRing.toRing.{u1} R _inst_1))) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 Y₁ Y₂) (ModuleCat.MonoidalCategory.tensorObj.{u1, u2, u3} R _inst_1 Z₁ Z₂) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 X₁ Y₁ X₂ Y₂ f₁ f₂) (ModuleCat.MonoidalCategory.tensorHom.{u1, u2, u3} R _inst_1 Y₁ Z₁ Y₂ Z₂ g₁ g₂))
+but is expected to have type
+ forall {R : Type.{u3}} [_inst_1 : CommRing.{u3} R] {X₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {Y₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {Z₁ : ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)} {X₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} {Y₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} {Z₂ : ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)} (f₁ : Quiver.Hom.{succ u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)))) X₁ Y₁) (f₂ : Quiver.Hom.{succ u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) X₂ Y₂) (g₁ : Quiver.Hom.{succ u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max u3 (succ u2)} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)))) Y₁ Z₁) (g₂ : Quiver.Hom.{succ u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) Y₂ Z₂), Eq.{max (succ u2) (succ u1)} (Quiver.Hom.{max (succ u2) (succ u1), max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u2 u1, max (max u3 (succ u2)) (succ u1)} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u2 u1, u3} R (CommRing.toRing.{u3} R _inst_1)))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Z₁ Z₂)) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 X₁ Z₁ X₂ Z₂ (CategoryTheory.CategoryStruct.comp.{u2, max (succ u2) u3} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u2, max (succ u2) u3} (ModuleCat.{u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u2, u3} R (CommRing.toRing.{u3} R _inst_1))) X₁ Y₁ Z₁ f₁ g₁) (CategoryTheory.CategoryStruct.comp.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{u1, max u3 (succ u1)} (ModuleCat.{u1, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{u1, u3} R (CommRing.toRing.{u3} R _inst_1))) X₂ Y₂ Z₂ f₂ g₂)) (CategoryTheory.CategoryStruct.comp.{max u1 u2, max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, max (max (succ u1) (succ u2)) u3} (ModuleCat.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1)) (ModuleCat.moduleCategory.{max u1 u2, u3} R (CommRing.toRing.{u3} R _inst_1))) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 X₁ X₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Y₁ Y₂) (ModuleCat.MonoidalCategory.tensorObj.{u3, u2, u1} R _inst_1 Z₁ Z₂) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 X₁ Y₁ X₂ Y₂ f₁ f₂) (ModuleCat.MonoidalCategory.tensorHom.{u3, u2, u1} R _inst_1 Y₁ Z₁ Y₂ Z₂ g₁ g₂))
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.tensor_comp ModuleCat.MonoidalCategory.tensor_compₓ'. -/
theorem tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (g₁ : Y₁ ⟶ Z₁)
(g₂ : Y₂ ⟶ Z₂) : tensorHom (f₁ ≫ g₁) (f₂ ≫ g₂) = tensorHom f₁ f₂ ≫ tensorHom g₁ g₂ :=
by
@@ -75,11 +91,13 @@ theorem tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : ModuleCat R} (f₁ : X₁
rfl
#align Module.monoidal_category.tensor_comp ModuleCat.MonoidalCategory.tensor_comp
+#print ModuleCat.MonoidalCategory.associator /-
/-- (implementation) the associator for R-modules -/
def associator (M : ModuleCat.{v} R) (N : ModuleCat.{w} R) (K : ModuleCat.{x} R) :
tensorObj (tensorObj M N) K ≅ tensorObj M (tensorObj N K) :=
(TensorProduct.assoc R M N K).toModuleIso
#align Module.monoidal_category.associator ModuleCat.MonoidalCategory.associator
+-/
section
@@ -100,7 +118,6 @@ private theorem associator_naturality_aux {X₁ X₂ X₃ : Type _} [AddCommMono
apply TensorProduct.ext_threefold
intro x y z
rfl
-#align Module.monoidal_category.associator_naturality_aux Module.monoidal_category.associator_naturality_aux
variable (R)
@@ -114,10 +131,12 @@ private theorem pentagon_aux (W X Y Z : Type _) [AddCommMonoid W] [AddCommMonoid
apply TensorProduct.ext_fourfold
intro w x y z
rfl
-#align Module.monoidal_category.pentagon_aux Module.monoidal_category.pentagon_aux
end
+/- warning: Module.monoidal_category.associator_naturality -> ModuleCat.MonoidalCategory.associator_naturality is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturalityₓ'. -/
theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂)
(f₃ : X₃ ⟶ Y₃) :
tensorHom (tensorHom f₁ f₂) f₃ ≫ (associator Y₁ Y₂ Y₃).Hom =
@@ -125,6 +144,9 @@ theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f
by convert associator_naturality_aux f₁ f₂ f₃ using 1
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
+/- warning: Module.monoidal_category.pentagon -> ModuleCat.MonoidalCategory.pentagon is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.pentagon ModuleCat.MonoidalCategory.pentagonₓ'. -/
theorem pentagon (W X Y Z : ModuleCat R) :
tensorHom (associator W X Y).Hom (𝟙 Z) ≫
(associator W (tensorObj X Y) Z).Hom ≫ tensorHom (𝟙 W) (associator X Y Z).Hom =
@@ -132,11 +154,18 @@ theorem pentagon (W X Y Z : ModuleCat R) :
by convert pentagon_aux R W X Y Z using 1
#align Module.monoidal_category.pentagon ModuleCat.MonoidalCategory.pentagon
+/- warning: Module.monoidal_category.left_unitor -> ModuleCat.MonoidalCategory.leftUnitor is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.module.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M))) M
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Ring.toAddCommGroup.{u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) R (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M))) M
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.left_unitor ModuleCat.MonoidalCategory.leftUnitorₓ'. -/
/-- (implementation) the left unitor for R-modules -/
def leftUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (R ⊗[R] M) ≅ M :=
(LinearEquiv.toModuleIso (TensorProduct.lid R M) : of R (R ⊗ M) ≅ of R M).trans (ofSelfIso M)
#align Module.monoidal_category.left_unitor ModuleCat.MonoidalCategory.leftUnitor
+#print ModuleCat.MonoidalCategory.leftUnitor_naturality /-
theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom (𝟙 (ModuleCat.of R R)) f ≫ (leftUnitor N).Hom = (leftUnitor M).Hom ≫ f :=
by
@@ -145,12 +174,20 @@ theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
rw [LinearMap.map_smul]
rfl
#align Module.monoidal_category.left_unitor_naturality ModuleCat.MonoidalCategory.leftUnitor_naturality
+-/
+/- warning: Module.monoidal_category.right_unitor -> ModuleCat.MonoidalCategory.rightUnitor is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) R (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) R (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1)))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.module.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) R (AddCommGroup.toAddCommMonoid.{u1} (coeSort.{succ (succ u1), succ (succ u1)} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) Type.{u1} (ModuleCat.hasCoeToSort.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (AddCommGroup.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) M
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : CommRing.{u1} R] (M : ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)), CategoryTheory.Iso.{u1, succ u1} (ModuleCat.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.moduleCategory.{u1, u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.of.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) (TensorProduct.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) R (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.addCommGroup.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) R (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Ring.toAddCommGroup.{u1} R (CommRing.toRing.{u1} R _inst_1)) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1)))) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u1, u1, u1} R (CommRing.toCommSemiring.{u1} R _inst_1) (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) R (AddCommGroup.toAddCommMonoid.{u1} (ModuleCat.carrier.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (ModuleCat.isAddCommGroup.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_1))))) (ModuleCat.isModule.{u1, u1} R (CommRing.toRing.{u1} R _inst_1) M) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R (CommRing.toCommSemiring.{u1} R _inst_1))))) M
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.right_unitor ModuleCat.MonoidalCategory.rightUnitorₓ'. -/
/-- (implementation) the right unitor for R-modules -/
def rightUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (M ⊗[R] R) ≅ M :=
(LinearEquiv.toModuleIso (TensorProduct.rid R M) : of R (M ⊗ R) ≅ of R M).trans (ofSelfIso M)
#align Module.monoidal_category.right_unitor ModuleCat.MonoidalCategory.rightUnitor
+#print ModuleCat.MonoidalCategory.rightUnitor_naturality /-
theorem rightUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom f (𝟙 (ModuleCat.of R R)) ≫ (rightUnitor N).Hom = (rightUnitor M).Hom ≫ f :=
by
@@ -159,7 +196,9 @@ theorem rightUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
rw [LinearMap.map_smul]
rfl
#align Module.monoidal_category.right_unitor_naturality ModuleCat.MonoidalCategory.rightUnitor_naturality
+-/
+#print ModuleCat.MonoidalCategory.triangle /-
theorem triangle (M N : ModuleCat.{u} R) :
(associator M (ModuleCat.of R R) N).Hom ≫ tensorHom (𝟙 M) (leftUnitor N).Hom =
tensorHom (rightUnitor M).Hom (𝟙 N) :=
@@ -171,11 +210,13 @@ theorem triangle (M N : ModuleCat.{u} R) :
erw [TensorProduct.lid_tmul, TensorProduct.rid_tmul]
exact (TensorProduct.smul_tmul _ _ _).symm
#align Module.monoidal_category.triangle ModuleCat.MonoidalCategory.triangle
+-/
end MonoidalCategory
open MonoidalCategory
+#print ModuleCat.monoidalCategory /-
instance monoidalCategory : MonoidalCategory (ModuleCat.{u} R)
where
-- data
@@ -194,6 +235,7 @@ instance monoidalCategory : MonoidalCategory (ModuleCat.{u} R)
pentagon M N K L := pentagon M N K L
triangle M N := triangle M N
#align Module.monoidal_category ModuleCat.monoidalCategory
+-/
/-- Remind ourselves that the monoidal unit, being just `R`, is still a commutative ring. -/
instance : CommRing ((𝟙_ (ModuleCat.{u} R) : ModuleCat.{u} R) : Type u) :=
@@ -201,41 +243,59 @@ instance : CommRing ((𝟙_ (ModuleCat.{u} R) : ModuleCat.{u} R) : Type u) :=
namespace MonoidalCategory
+/- warning: Module.monoidal_category.hom_apply -> ModuleCat.MonoidalCategory.hom_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.hom_apply ModuleCat.MonoidalCategory.hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem hom_apply {K L M N : ModuleCat.{u} R} (f : K ⟶ L) (g : M ⟶ N) (k : K) (m : M) :
(f ⊗ g) (k ⊗ₜ m) = f k ⊗ₜ g m :=
rfl
-#align Module.monoidal_category.hom_apply ModuleCat.monoidalCategory.hom_apply
+#align Module.monoidal_category.hom_apply ModuleCat.MonoidalCategory.hom_apply
+/- warning: Module.monoidal_category.left_unitor_hom_apply -> ModuleCat.MonoidalCategory.leftUnitor_hom_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.left_unitor_hom_apply ModuleCat.MonoidalCategory.leftUnitor_hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem leftUnitor_hom_apply {M : ModuleCat.{u} R} (r : R) (m : M) :
((λ_ M).Hom : 𝟙_ (ModuleCat R) ⊗ M ⟶ M) (r ⊗ₜ[R] m) = r • m :=
TensorProduct.lid_tmul m r
-#align Module.monoidal_category.left_unitor_hom_apply ModuleCat.monoidalCategory.leftUnitor_hom_apply
+#align Module.monoidal_category.left_unitor_hom_apply ModuleCat.MonoidalCategory.leftUnitor_hom_apply
+/- warning: Module.monoidal_category.left_unitor_inv_apply -> ModuleCat.MonoidalCategory.leftUnitor_inv_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.left_unitor_inv_apply ModuleCat.MonoidalCategory.leftUnitor_inv_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem leftUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
((λ_ M).inv : M ⟶ 𝟙_ (ModuleCat.{u} R) ⊗ M) m = 1 ⊗ₜ[R] m :=
TensorProduct.lid_symm_apply m
-#align Module.monoidal_category.left_unitor_inv_apply ModuleCat.monoidalCategory.leftUnitor_inv_apply
+#align Module.monoidal_category.left_unitor_inv_apply ModuleCat.MonoidalCategory.leftUnitor_inv_apply
+/- warning: Module.monoidal_category.right_unitor_hom_apply -> ModuleCat.MonoidalCategory.rightUnitor_hom_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.right_unitor_hom_apply ModuleCat.MonoidalCategory.rightUnitor_hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem rightUnitor_hom_apply {M : ModuleCat.{u} R} (m : M) (r : R) :
((ρ_ M).Hom : M ⊗ 𝟙_ (ModuleCat R) ⟶ M) (m ⊗ₜ r) = r • m :=
TensorProduct.rid_tmul m r
-#align Module.monoidal_category.right_unitor_hom_apply ModuleCat.monoidalCategory.rightUnitor_hom_apply
+#align Module.monoidal_category.right_unitor_hom_apply ModuleCat.MonoidalCategory.rightUnitor_hom_apply
+/- warning: Module.monoidal_category.right_unitor_inv_apply -> ModuleCat.MonoidalCategory.rightUnitor_inv_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.right_unitor_inv_apply ModuleCat.MonoidalCategory.rightUnitor_inv_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem rightUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
((ρ_ M).inv : M ⟶ M ⊗ 𝟙_ (ModuleCat.{u} R)) m = m ⊗ₜ[R] 1 :=
TensorProduct.rid_symm_apply m
-#align Module.monoidal_category.right_unitor_inv_apply ModuleCat.monoidalCategory.rightUnitor_inv_apply
+#align Module.monoidal_category.right_unitor_inv_apply ModuleCat.MonoidalCategory.rightUnitor_inv_apply
+/- warning: Module.monoidal_category.associator_hom_apply -> ModuleCat.MonoidalCategory.associator_hom_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.associator_hom_apply ModuleCat.MonoidalCategory.associator_hom_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -244,8 +304,11 @@ theorem rightUnitor_inv_apply {M : ModuleCat.{u} R} (m : M) :
theorem associator_hom_apply {M N K : ModuleCat.{u} R} (m : M) (n : N) (k : K) :
((α_ M N K).Hom : (M ⊗ N) ⊗ K ⟶ M ⊗ N ⊗ K) (m ⊗ₜ n ⊗ₜ k) = m ⊗ₜ (n ⊗ₜ k) :=
rfl
-#align Module.monoidal_category.associator_hom_apply ModuleCat.monoidalCategory.associator_hom_apply
+#align Module.monoidal_category.associator_hom_apply ModuleCat.MonoidalCategory.associator_hom_apply
+/- warning: Module.monoidal_category.associator_inv_apply -> ModuleCat.MonoidalCategory.associator_inv_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Module.monoidal_category.associator_inv_apply ModuleCat.MonoidalCategory.associator_inv_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -254,7 +317,7 @@ theorem associator_hom_apply {M N K : ModuleCat.{u} R} (m : M) (n : N) (k : K) :
theorem associator_inv_apply {M N K : ModuleCat.{u} R} (m : M) (n : N) (k : K) :
((α_ M N K).inv : M ⊗ N ⊗ K ⟶ (M ⊗ N) ⊗ K) (m ⊗ₜ (n ⊗ₜ k)) = m ⊗ₜ n ⊗ₜ k :=
rfl
-#align Module.monoidal_category.associator_inv_apply ModuleCat.monoidalCategory.associator_inv_apply
+#align Module.monoidal_category.associator_inv_apply ModuleCat.MonoidalCategory.associator_inv_apply
end MonoidalCategory
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -3,30 +3,31 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
-! This file was ported from Lean 3 source module algebra.category.Module.monoidal
-! leanprover-community/mathlib commit 0caf3701139ef2e69c215717665361cda205a90b
+! This file was ported from Lean 3 source module algebra.category.Module.monoidal.basic
+! leanprover-community/mathlib commit 74403a3b2551b0970855e14ef5e8fd0d6af1bfc2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
-import Mathbin.CategoryTheory.Monoidal.Braided
-import Mathbin.CategoryTheory.Closed.Monoidal
import Mathbin.Algebra.Category.Module.Basic
import Mathbin.LinearAlgebra.TensorProduct
import Mathbin.CategoryTheory.Linear.Yoneda
import Mathbin.CategoryTheory.Monoidal.Linear
/-!
-# The symmetric monoidal category structure on R-modules
+# The monoidal category structure on R-modules
Mostly this uses existing machinery in `linear_algebra.tensor_product`.
We just need to provide a few small missing pieces to build the
-`monoidal_category` instance and then the `symmetric_category` instance.
+`monoidal_category` instance.
+The `symmetric_category` instance is in `algebra.category.Module.monoidal.symmetric`
+to reduce imports.
Note the universe level of the modules must be at least the universe level of the ring,
so that we have a monoidal unit.
For now, we simplify by insisting both universe levels are the same.
-We then construct the monoidal closed structure on `Module R`.
+We construct the monoidal closed structure on `Module R` in
+`algebra.category.Module.monoidal.closed`.
If you're happy using the bundled `Module R`, it may be possible to mostly
use this as an interface and not need to interact much with the implementation details.
@@ -190,8 +191,8 @@ instance monoidalCategory : MonoidalCategory (ModuleCat.{u} R)
associator_naturality' M N K M' N' K' f g h := associator_naturality f g h
leftUnitor_naturality' M N f := leftUnitor_naturality f
rightUnitor_naturality' M N f := rightUnitor_naturality f
- pentagon' M N K L := pentagon M N K L
- triangle' M N := triangle M N
+ pentagon M N K L := pentagon M N K L
+ triangle M N := triangle M N
#align Module.monoidal_category ModuleCat.monoidalCategory
/-- Remind ourselves that the monoidal unit, being just `R`, is still a commutative ring. -/
@@ -257,78 +258,6 @@ theorem associator_inv_apply {M N K : ModuleCat.{u} R} (m : M) (n : N) (k : K) :
end MonoidalCategory
-/-- (implementation) the braiding for R-modules -/
-def braiding (M N : ModuleCat R) : tensorObj M N ≅ tensorObj N M :=
- LinearEquiv.toModuleIso (TensorProduct.comm R M N)
-#align Module.braiding ModuleCat.braiding
-
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-@[simp]
-theorem braiding_naturality {X₁ X₂ Y₁ Y₂ : ModuleCat.{u} R} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂) :
- (f ⊗ g) ≫ (Y₁.braiding Y₂).Hom = (X₁.braiding X₂).Hom ≫ (g ⊗ f) :=
- by
- apply TensorProduct.ext'
- intro x y
- rfl
-#align Module.braiding_naturality ModuleCat.braiding_naturality
-
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-@[simp]
-theorem hexagon_forward (X Y Z : ModuleCat.{u} R) :
- (α_ X Y Z).Hom ≫ (braiding X _).Hom ≫ (α_ Y Z X).Hom =
- ((braiding X Y).Hom ⊗ 𝟙 Z) ≫ (α_ Y X Z).Hom ≫ (𝟙 Y ⊗ (braiding X Z).Hom) :=
- by
- apply TensorProduct.ext_threefold
- intro x y z
- rfl
-#align Module.hexagon_forward ModuleCat.hexagon_forward
-
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-@[simp]
-theorem hexagon_reverse (X Y Z : ModuleCat.{u} R) :
- (α_ X Y Z).inv ≫ (braiding _ Z).Hom ≫ (α_ Z X Y).inv =
- (𝟙 X ⊗ (Y.braiding Z).Hom) ≫ (α_ X Z Y).inv ≫ ((X.braiding Z).Hom ⊗ 𝟙 Y) :=
- by
- apply (cancel_epi (α_ X Y Z).Hom).1
- apply TensorProduct.ext_threefold
- intro x y z
- rfl
-#align Module.hexagon_reverse ModuleCat.hexagon_reverse
-
-attribute [local ext] TensorProduct.ext
-
-/-- The symmetric monoidal structure on `Module R`. -/
-instance symmetricCategory : SymmetricCategory (ModuleCat.{u} R)
- where
- braiding := braiding
- braiding_naturality' X₁ X₂ Y₁ Y₂ f g := braiding_naturality f g
- hexagon_forward' := hexagon_forward
- hexagon_reverse' := hexagon_reverse
-#align Module.symmetric_category ModuleCat.symmetricCategory
-
-namespace MonoidalCategory
-
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-@[simp]
-theorem braiding_hom_apply {M N : ModuleCat.{u} R} (m : M) (n : N) :
- ((β_ M N).Hom : M ⊗ N ⟶ N ⊗ M) (m ⊗ₜ n) = n ⊗ₜ m :=
- rfl
-#align Module.monoidal_category.braiding_hom_apply ModuleCat.monoidalCategory.braiding_hom_apply
-
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-@[simp]
-theorem braiding_inv_apply {M N : ModuleCat.{u} R} (m : M) (n : N) :
- ((β_ M N).inv : N ⊗ M ⟶ M ⊗ N) (n ⊗ₜ m) = m ⊗ₜ n :=
- rfl
-#align Module.monoidal_category.braiding_inv_apply ModuleCat.monoidalCategory.braiding_inv_apply
-
-end MonoidalCategory
-
open Opposite
instance : MonoidalPreadditive (ModuleCat.{u} R) := by
@@ -344,75 +273,5 @@ instance : MonoidalLinear R (ModuleCat.{u} R) := by
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply, monoidal_category.hom_apply,
LinearMap.smul_apply, TensorProduct.tmul_smul, TensorProduct.smul_tmul]
-/-- Auxiliary definition for the `monoidal_closed` instance on `Module R`.
-(This is only a separate definition in order to speed up typechecking. )
--/
-@[simps]
-def monoidalClosedHomEquiv (M N P : ModuleCat.{u} R) :
- ((MonoidalCategory.tensorLeft M).obj N ⟶ P) ≃
- (N ⟶ ((linearCoyoneda R (ModuleCat R)).obj (op M)).obj P)
- where
- toFun f := LinearMap.compr₂ (TensorProduct.mk R N M) ((β_ N M).Hom ≫ f)
- invFun f := (β_ M N).Hom ≫ TensorProduct.lift f
- left_inv f := by
- ext (m n)
- simp only [TensorProduct.mk_apply, TensorProduct.lift.tmul, LinearMap.compr₂_apply,
- Function.comp_apply, coe_comp, monoidal_category.braiding_hom_apply]
- right_inv f := by
- ext (m n)
- simp only [TensorProduct.mk_apply, TensorProduct.lift.tmul, LinearMap.compr₂_apply,
- symmetric_category.symmetry_assoc]
-#align Module.monoidal_closed_hom_equiv ModuleCat.monoidalClosedHomEquiv
-
-instance : MonoidalClosed (ModuleCat.{u} R)
- where closed' M :=
- {
- isAdj :=
- { right := (linearCoyoneda R (ModuleCat.{u} R)).obj (op M)
- adj := Adjunction.mkOfHomEquiv { homEquiv := fun N P => monoidalClosedHomEquiv M N P } } }
-
-theorem ihom_map_apply {M N P : ModuleCat.{u} R} (f : N ⟶ P) (g : ModuleCat.of R (M ⟶ N)) :
- (ihom M).map f g = g ≫ f :=
- rfl
-#align Module.ihom_map_apply ModuleCat.ihom_map_apply
-
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
--- I can't seem to express the function coercion here without writing `@coe_fn`.
-@[simp]
-theorem monoidalClosed_curry {M N P : ModuleCat.{u} R} (f : M ⊗ N ⟶ P) (x : M) (y : N) :
- @coeFn _ _ LinearMap.hasCoeToFun ((MonoidalClosed.curry f : N →ₗ[R] M →ₗ[R] P) y) x =
- f (x ⊗ₜ[R] y) :=
- rfl
-#align Module.monoidal_closed_curry ModuleCat.monoidalClosed_curry
-
-@[simp]
-theorem monoidalClosed_uncurry {M N P : ModuleCat.{u} R} (f : N ⟶ M ⟶[ModuleCat.{u} R] P) (x : M)
- (y : N) : MonoidalClosed.uncurry f (x ⊗ₜ[R] y) = (@coeFn _ _ LinearMap.hasCoeToFun (f y)) x :=
- rfl
-#align Module.monoidal_closed_uncurry ModuleCat.monoidalClosed_uncurry
-
-/-- Describes the counit of the adjunction `M ⊗ - ⊣ Hom(M, -)`. Given an `R`-module `N` this
-should give a map `M ⊗ Hom(M, N) ⟶ N`, so we flip the order of the arguments in the identity map
-`Hom(M, N) ⟶ (M ⟶ N)` and uncurry the resulting map `M ⟶ Hom(M, N) ⟶ N.` -/
-theorem ihom_ev_app (M N : ModuleCat.{u} R) :
- (ihom.ev M).app N = TensorProduct.uncurry _ _ _ _ LinearMap.id.flip :=
- by
- ext
- exact ModuleCat.monoidalClosed_uncurry _ _ _
-#align Module.ihom_ev_app ModuleCat.ihom_ev_app
-
-/-- Describes the unit of the adjunction `M ⊗ - ⊣ Hom(M, -)`. Given an `R`-module `N` this should
-define a map `N ⟶ Hom(M, M ⊗ N)`, which is given by flipping the arguments in the natural
-`R`-bilinear map `M ⟶ N ⟶ M ⊗ N`. -/
-theorem ihom_coev_app (M N : ModuleCat.{u} R) :
- (ihom.coev M).app N = (TensorProduct.mk _ _ _).flip :=
- rfl
-#align Module.ihom_coev_app ModuleCat.ihom_coev_app
-
-theorem monoidalClosed_pre_app {M N : ModuleCat.{u} R} (P : ModuleCat.{u} R) (f : N ⟶ M) :
- (MonoidalClosed.pre f).app P = LinearMap.lcomp R _ f :=
- rfl
-#align Module.monoidal_closed_pre_app ModuleCat.monoidalClosed_pre_app
-
end ModuleCat
LinearEquiv.(l|r)Tensor
(#11731)
LinearMap.(l|r)Tensor
and their propertiescongr_symm
, congr_refl_refl
, congr_trans
, congr_mul
, congr_pow
and congr_zpow
@@ -138,7 +138,7 @@ private theorem pentagon_aux (W X Y Z : Type*) [AddCommMonoid W] [AddCommMonoid
[AddCommMonoid Y] [AddCommMonoid Z] [Module R W] [Module R X] [Module R Y] [Module R Z] :
(((assoc R X Y Z).toLinearMap.lTensor W).comp
(assoc R W (X ⊗[R] Y) Z).toLinearMap).comp
- ((assoc R W X Y).rTensor Z) =
+ ((assoc R W X Y).toLinearMap.rTensor Z) =
(assoc R W X (Y ⊗[R] Z)).toLinearMap.comp (assoc R (W ⊗[R] X) Y Z).toLinearMap := by
apply TensorProduct.ext_fourfold
intro w x y z
Move:
Mathlib/Algebra/Module/DirectLimitAndTensorProduct.lean
to
LinearAlgebra/TensorProduct/DirectLimit.lean
Mathlib/LinearAlgebra/TensorProduct
to Mathlib/LinearAlgebra.TensorProduct.Basic.lean
Mathlib/RingTheory/TensorProduct
to Mathlib/RingTheory/TensorProduct/Basic.lean
.This follows suggestions 1, 2, 3 of
Co-authored-by: Antoine Chambert-Loir <antoine.chambert-loir@math.univ-paris-diderot.fr>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
-/
import Mathlib.Algebra.Category.ModuleCat.Basic
-import Mathlib.LinearAlgebra.TensorProduct
+import Mathlib.LinearAlgebra.TensorProduct.Basic
import Mathlib.CategoryTheory.Monoidal.Linear
#align_import algebra.category.Module.monoidal.basic from "leanprover-community/mathlib"@"74403a3b2551b0970855e14ef5e8fd0d6af1bfc2"
@@ -136,9 +136,9 @@ variable (R)
private theorem pentagon_aux (W X Y Z : Type*) [AddCommMonoid W] [AddCommMonoid X]
[AddCommMonoid Y] [AddCommMonoid Z] [Module R W] [Module R X] [Module R Y] [Module R Z] :
- ((map (1 : W →ₗ[R] W) (assoc R X Y Z).toLinearMap).comp
+ (((assoc R X Y Z).toLinearMap.lTensor W).comp
(assoc R W (X ⊗[R] Y) Z).toLinearMap).comp
- (map ↑(assoc R W X Y) (1 : Z →ₗ[R] Z)) =
+ ((assoc R W X Y).rTensor Z) =
(assoc R W X (Y ⊗[R] Z)).toLinearMap.comp (assoc R (W ⊗[R] X) Y Z).toLinearMap := by
apply TensorProduct.ext_fourfold
intro w x y z
@@ -156,8 +156,8 @@ theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
theorem pentagon (W X Y Z : ModuleCat R) :
- tensorHom (associator W X Y).hom (𝟙 Z) ≫
- (associator W (tensorObj X Y) Z).hom ≫ tensorHom (𝟙 W) (associator X Y Z).hom =
+ whiskerRight (associator W X Y).hom Z ≫
+ (associator W (tensorObj X Y) Z).hom ≫ whiskerLeft W (associator X Y Z).hom =
(associator (tensorObj W X) Y Z).hom ≫ (associator W X (tensorObj Y Z)).hom := by
convert pentagon_aux R W X Y Z using 1
#align Module.monoidal_category.pentagon ModuleCat.MonoidalCategory.pentagon
@@ -288,30 +288,30 @@ instance : MonoidalPreadditive (ModuleCat.{u} R) := by
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
rw [LinearMap.zero_apply]
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply]
+ erw [MonoidalCategory.whiskerLeft_apply]
rw [LinearMap.zero_apply, TensorProduct.tmul_zero]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
rw [LinearMap.zero_apply]
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply]
+ erw [MonoidalCategory.whiskerRight_apply]
rw [LinearMap.zero_apply, TensorProduct.zero_tmul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
rw [LinearMap.add_apply]
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
- erw [MonoidalCategory.hom_apply]
+ erw [MonoidalCategory.whiskerLeft_apply, MonoidalCategory.whiskerLeft_apply]
+ erw [MonoidalCategory.whiskerLeft_apply]
rw [LinearMap.add_apply, TensorProduct.tmul_add]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
rw [LinearMap.add_apply]
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
- erw [MonoidalCategory.hom_apply]
+ erw [MonoidalCategory.whiskerRight_apply, MonoidalCategory.whiskerRight_apply]
+ erw [MonoidalCategory.whiskerRight_apply]
rw [LinearMap.add_apply, TensorProduct.add_tmul]
-- Porting note: simp wasn't firing but rw was, annoying
@@ -322,14 +322,14 @@ instance : MonoidalLinear R (ModuleCat.{u} R) := by
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
rw [LinearMap.smul_apply]
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ erw [MonoidalCategory.whiskerLeft_apply, MonoidalCategory.whiskerLeft_apply]
rw [LinearMap.smul_apply, TensorProduct.tmul_smul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
rw [LinearMap.smul_apply]
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ erw [MonoidalCategory.whiskerRight_apply, MonoidalCategory.whiskerRight_apply]
rw [LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
end ModuleCat
@@ -164,7 +164,7 @@ theorem pentagon (W X Y Z : ModuleCat R) :
theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom (𝟙 (ModuleCat.of R R)) f ≫ (leftUnitor N).hom = (leftUnitor M).hom ≫ f := by
- -- Porting note: broken ext
+ -- Porting note (#11041): broken ext
apply TensorProduct.ext
apply LinearMap.ext_ring
apply LinearMap.ext; intro x
@@ -178,7 +178,7 @@ theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
theorem rightUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom f (𝟙 (ModuleCat.of R R)) ≫ (rightUnitor N).hom = (rightUnitor M).hom ≫ f := by
- -- Porting note: broken ext
+ -- Porting note (#11041): broken ext
apply TensorProduct.ext
apply LinearMap.ext; intro x
apply LinearMap.ext_ring
@@ -168,7 +168,7 @@ theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
apply TensorProduct.ext
apply LinearMap.ext_ring
apply LinearMap.ext; intro x
- -- Porting note: used to be dsimp
+ -- Porting note (#10934): used to be dsimp
change ((leftUnitor N).hom) ((tensorHom (𝟙 (of R R)) f) ((1 : R) ⊗ₜ[R] x)) =
f (((leftUnitor M).hom) (1 ⊗ₜ[R] x))
erw [TensorProduct.lid_tmul, TensorProduct.lid_tmul]
@@ -182,7 +182,7 @@ theorem rightUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
apply TensorProduct.ext
apply LinearMap.ext; intro x
apply LinearMap.ext_ring
- -- Porting note: used to be dsimp
+ -- Porting note (#10934): used to be dsimp
change ((rightUnitor N).hom) ((tensorHom f (𝟙 (of R R))) (x ⊗ₜ[R] (1 : R))) =
f (((rightUnitor M).hom) (x ⊗ₜ[R] 1))
erw [TensorProduct.rid_tmul, TensorProduct.rid_tmul]
@@ -196,7 +196,7 @@ theorem triangle (M N : ModuleCat.{u} R) :
apply TensorProduct.ext_threefold
intro x y z
change R at y
- -- Porting note: used to be dsimp [tensorHom, associator]
+ -- Porting note (#10934): used to be dsimp [tensorHom, associator]
change x ⊗ₜ[R] ((leftUnitor N).hom) (y ⊗ₜ[R] z) = ((rightUnitor M).hom) (x ⊗ₜ[R] y) ⊗ₜ[R] z
erw [TensorProduct.lid_tmul, TensorProduct.rid_tmul]
exact (TensorProduct.smul_tmul _ _ _).symm
With multiple changes, it is a good time to check if existing set_option maxHeartbeats
and set_option synthInstance.maxHeartbeats
remain necessary. This brings the number of files with such down from 23 to 9. Most are straight deletions though I did change one proof.
@@ -206,7 +206,6 @@ end MonoidalCategory
open MonoidalCategory
-set_option maxHeartbeats 400000 in
instance monoidalCategory : MonoidalCategory (ModuleCat.{u} R) := MonoidalCategory.ofTensorHom
(tensor_id := fun M N ↦ tensor_id M N)
(tensor_comp := fun f g h ↦ MonoidalCategory.tensor_comp f g h)
@@ -5,7 +5,6 @@ Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
-/
import Mathlib.Algebra.Category.ModuleCat.Basic
import Mathlib.LinearAlgebra.TensorProduct
-import Mathlib.CategoryTheory.Linear.Yoneda
import Mathlib.CategoryTheory.Monoidal.Linear
#align_import algebra.category.Module.monoidal.basic from "leanprover-community/mathlib"@"74403a3b2551b0970855e14ef5e8fd0d6af1bfc2"
@@ -233,13 +233,13 @@ theorem hom_apply {K L M N : ModuleCat.{u} R} (f : K ⟶ L) (g : M ⟶ N) (k : K
@[simp]
theorem whiskerLeft_apply (L : ModuleCat.{u} R) {M N : ModuleCat.{u} R} (f : M ⟶ N)
(l : L) (m : M) :
- (L ◁ f) (l ⊗ₜ m) = l ⊗ₜ f m :=
+ (L ◁ f) (l ⊗ₜ m) = l ⊗ₜ f m :=
rfl
@[simp]
theorem whiskerRight_apply {L M : ModuleCat.{u} R} (f : L ⟶ M) (N : ModuleCat.{u} R)
(l : L) (n : N) :
- (f ▷ N) (l ⊗ₜ n) = f l ⊗ₜ n :=
+ (f ▷ N) (l ⊗ₜ n) = f l ⊗ₜ n :=
rfl
@[simp]
@@ -152,8 +152,8 @@ end
theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂)
(f₃ : X₃ ⟶ Y₃) :
tensorHom (tensorHom f₁ f₂) f₃ ≫ (associator Y₁ Y₂ Y₃).hom =
- (associator X₁ X₂ X₃).hom ≫ tensorHom f₁ (tensorHom f₂ f₃) :=
- by convert associator_naturality_aux f₁ f₂ f₃ using 1
+ (associator X₁ X₂ X₃).hom ≫ tensorHom f₁ (tensorHom f₂ f₃) := by
+ convert associator_naturality_aux f₁ f₂ f₃ using 1
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
theorem pentagon (W X Y Z : ModuleCat R) :
Extracted from #6307 as suggested in https://github.com/leanprover-community/mathlib4/pull/6307#discussion_r1371849810 .
@@ -230,6 +230,18 @@ theorem hom_apply {K L M N : ModuleCat.{u} R} (f : K ⟶ L) (g : M ⟶ N) (k : K
rfl
#align Module.monoidal_category.hom_apply ModuleCat.MonoidalCategory.hom_apply
+@[simp]
+theorem whiskerLeft_apply (L : ModuleCat.{u} R) {M N : ModuleCat.{u} R} (f : M ⟶ N)
+ (l : L) (m : M) :
+ (L ◁ f) (l ⊗ₜ m) = l ⊗ₜ f m :=
+ rfl
+
+@[simp]
+theorem whiskerRight_apply {L M : ModuleCat.{u} R} (f : L ⟶ M) (N : ModuleCat.{u} R)
+ (l : L) (n : N) :
+ (f ▷ N) (l ⊗ₜ n) = f l ⊗ₜ n :=
+ rfl
+
@[simp]
theorem leftUnitor_hom_apply {M : ModuleCat.{u} R} (r : R) (m : M) :
((λ_ M).hom : 𝟙_ (ModuleCat R) ⊗ M ⟶ M) (r ⊗ₜ[R] m) = r • m :=
MonoidalCategory
into a Struct
class (#7279)
This matches the approach for CategoryStruct
, and allows us to use the notation within MonoidalCategory
.
It also makes it easier to induce the lawful structure along a faithful functor, as again it means by the time we are providing the proof fields, the notation is already available.
This also eliminates tensorUnit
vs tensorUnit'
, adding a custom pretty-printer to provide the unprimed version with appropriate notation.
@@ -92,6 +92,26 @@ def associator (M : ModuleCat.{v} R) (N : ModuleCat.{w} R) (K : ModuleCat.{x} R)
(TensorProduct.assoc R M N K).toModuleIso
#align Module.monoidal_category.associator ModuleCat.MonoidalCategory.associator
+/-- (implementation) the left unitor for R-modules -/
+def leftUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (R ⊗[R] M) ≅ M :=
+ (LinearEquiv.toModuleIso (TensorProduct.lid R M) : of R (R ⊗ M) ≅ of R M).trans (ofSelfIso M)
+#align Module.monoidal_category.left_unitor ModuleCat.MonoidalCategory.leftUnitor
+
+/-- (implementation) the right unitor for R-modules -/
+def rightUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (M ⊗[R] R) ≅ M :=
+ (LinearEquiv.toModuleIso (TensorProduct.rid R M) : of R (M ⊗ R) ≅ of R M).trans (ofSelfIso M)
+#align Module.monoidal_category.right_unitor ModuleCat.MonoidalCategory.rightUnitor
+
+instance : MonoidalCategoryStruct (ModuleCat.{u} R) where
+ tensorObj := tensorObj
+ whiskerLeft := whiskerLeft
+ whiskerRight := whiskerRight
+ tensorHom f g := TensorProduct.map f g
+ tensorUnit := ModuleCat.of R R
+ associator := associator
+ leftUnitor := leftUnitor
+ rightUnitor := rightUnitor
+
section
/-! The `associator_naturality` and `pentagon` lemmas below are very slow to elaborate.
@@ -143,11 +163,6 @@ theorem pentagon (W X Y Z : ModuleCat R) :
convert pentagon_aux R W X Y Z using 1
#align Module.monoidal_category.pentagon ModuleCat.MonoidalCategory.pentagon
-/-- (implementation) the left unitor for R-modules -/
-def leftUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (R ⊗[R] M) ≅ M :=
- (LinearEquiv.toModuleIso (TensorProduct.lid R M) : of R (R ⊗ M) ≅ of R M).trans (ofSelfIso M)
-#align Module.monoidal_category.left_unitor ModuleCat.MonoidalCategory.leftUnitor
-
theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom (𝟙 (ModuleCat.of R R)) f ≫ (leftUnitor N).hom = (leftUnitor M).hom ≫ f := by
-- Porting note: broken ext
@@ -162,11 +177,6 @@ theorem leftUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
rfl
#align Module.monoidal_category.left_unitor_naturality ModuleCat.MonoidalCategory.leftUnitor_naturality
-/-- (implementation) the right unitor for R-modules -/
-def rightUnitor (M : ModuleCat.{u} R) : ModuleCat.of R (M ⊗[R] R) ≅ M :=
- (LinearEquiv.toModuleIso (TensorProduct.rid R M) : of R (M ⊗ R) ≅ of R M).trans (ofSelfIso M)
-#align Module.monoidal_category.right_unitor ModuleCat.MonoidalCategory.rightUnitor
-
theorem rightUnitor_naturality {M N : ModuleCat R} (f : M ⟶ N) :
tensorHom f (𝟙 (ModuleCat.of R R)) ≫ (rightUnitor N).hom = (rightUnitor M).hom ≫ f := by
-- Porting note: broken ext
@@ -197,17 +207,8 @@ end MonoidalCategory
open MonoidalCategory
+set_option maxHeartbeats 400000 in
instance monoidalCategory : MonoidalCategory (ModuleCat.{u} R) := MonoidalCategory.ofTensorHom
- -- data
- (tensorObj := MonoidalCategory.tensorObj)
- (tensorHom := @tensorHom _ _)
- (whiskerLeft := @whiskerLeft _ _)
- (whiskerRight := @whiskerRight _ _)
- (tensorUnit' := ModuleCat.of R R)
- (associator := associator)
- (leftUnitor := leftUnitor)
- (rightUnitor := rightUnitor)
- -- properties
(tensor_id := fun M N ↦ tensor_id M N)
(tensor_comp := fun f g h ↦ MonoidalCategory.tensor_comp f g h)
(associator_naturality := fun f g h ↦ MonoidalCategory.associator_naturality f g h)
Due to recent changes in core we can reduce or remove many set_option maxHeartbeats
statements.
I have tried to be careful to not leave anything too close to the line, so don't be surprised if some of these can still be reduced further.
This reduces us from 96 maxHeartbeats
statements to 44
. (There are 10 false positives in meta or testing code.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -136,8 +136,6 @@ theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f
by convert associator_naturality_aux f₁ f₂ f₃ using 1
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
--- Porting note: very slow!
-set_option maxHeartbeats 1200000 in
theorem pentagon (W X Y Z : ModuleCat R) :
tensorHom (associator W X Y).hom (𝟙 Z) ≫
(associator W (tensorObj X Y) Z).hom ≫ tensorHom (𝟙 W) (associator X Y Z).hom =
@@ -277,23 +277,31 @@ instance : MonoidalPreadditive (ModuleCat.{u} R) := by
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.zero_apply, MonoidalCategory.hom_apply, LinearMap.zero_apply,
- TensorProduct.tmul_zero]
+ rw [LinearMap.zero_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply]
+ rw [LinearMap.zero_apply, TensorProduct.tmul_zero]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.zero_apply, MonoidalCategory.hom_apply, LinearMap.zero_apply,
- TensorProduct.zero_tmul]
+ rw [LinearMap.zero_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply]
+ rw [LinearMap.zero_apply, TensorProduct.zero_tmul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.add_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.add_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
erw [MonoidalCategory.hom_apply]
rw [LinearMap.add_apply, TensorProduct.tmul_add]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.add_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.add_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
erw [MonoidalCategory.hom_apply]
rw [LinearMap.add_apply, TensorProduct.add_tmul]
@@ -303,12 +311,16 @@ instance : MonoidalLinear R (ModuleCat.{u} R) := by
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.smul_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply,
- LinearMap.smul_apply, TensorProduct.tmul_smul]
+ rw [LinearMap.smul_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.smul_apply, TensorProduct.tmul_smul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.smul_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply,
- LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
+ rw [LinearMap.smul_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
end ModuleCat
@@ -277,31 +277,23 @@ instance : MonoidalPreadditive (ModuleCat.{u} R) := by
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.zero_apply]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply]
- rw [LinearMap.zero_apply, TensorProduct.tmul_zero]
+ rw [LinearMap.zero_apply, MonoidalCategory.hom_apply, LinearMap.zero_apply,
+ TensorProduct.tmul_zero]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.zero_apply]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply]
- rw [LinearMap.zero_apply, TensorProduct.zero_tmul]
+ rw [LinearMap.zero_apply, MonoidalCategory.hom_apply, LinearMap.zero_apply,
+ TensorProduct.zero_tmul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.add_apply]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.add_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
erw [MonoidalCategory.hom_apply]
rw [LinearMap.add_apply, TensorProduct.tmul_add]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.add_apply]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.add_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
erw [MonoidalCategory.hom_apply]
rw [LinearMap.add_apply, TensorProduct.add_tmul]
@@ -311,16 +303,12 @@ instance : MonoidalLinear R (ModuleCat.{u} R) := by
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.smul_apply]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
- rw [LinearMap.smul_apply, TensorProduct.tmul_smul]
+ rw [LinearMap.smul_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply,
+ LinearMap.smul_apply, TensorProduct.tmul_smul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.smul_apply]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
- rw [LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
+ rw [LinearMap.smul_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply,
+ LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
end ModuleCat
@@ -277,23 +277,31 @@ instance : MonoidalPreadditive (ModuleCat.{u} R) := by
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.zero_apply, MonoidalCategory.hom_apply, LinearMap.zero_apply,
- TensorProduct.tmul_zero]
+ rw [LinearMap.zero_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply]
+ rw [LinearMap.zero_apply, TensorProduct.tmul_zero]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.zero_apply, MonoidalCategory.hom_apply, LinearMap.zero_apply,
- TensorProduct.zero_tmul]
+ rw [LinearMap.zero_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply]
+ rw [LinearMap.zero_apply, TensorProduct.zero_tmul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.add_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.add_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
erw [MonoidalCategory.hom_apply]
rw [LinearMap.add_apply, TensorProduct.tmul_add]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.add_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.add_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
erw [MonoidalCategory.hom_apply]
rw [LinearMap.add_apply, TensorProduct.add_tmul]
@@ -303,12 +311,16 @@ instance : MonoidalLinear R (ModuleCat.{u} R) := by
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.smul_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply,
- LinearMap.smul_apply, TensorProduct.tmul_smul]
+ rw [LinearMap.smul_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.smul_apply, TensorProduct.tmul_smul]
· dsimp only [autoParam]; intros
refine' TensorProduct.ext (LinearMap.ext fun x => LinearMap.ext fun y => _)
simp only [LinearMap.compr₂_apply, TensorProduct.mk_apply]
- rw [LinearMap.smul_apply, MonoidalCategory.hom_apply, MonoidalCategory.hom_apply,
- LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
+ rw [LinearMap.smul_apply]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [MonoidalCategory.hom_apply, MonoidalCategory.hom_apply]
+ rw [LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
end ModuleCat
@@ -33,6 +33,8 @@ use this as an interface and not need to interact much with the implementation d
-- Porting note: Module
set_option linter.uppercaseLean3 false
+suppress_compilation
+
universe v w x u
open CategoryTheory
@@ -135,7 +135,7 @@ theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
-- Porting note: very slow!
-set_option maxHeartbeats 1600000 in
+set_option maxHeartbeats 1200000 in
theorem pentagon (W X Y Z : ModuleCat R) :
tensorHom (associator W X Y).hom (𝟙 Z) ≫
(associator W (tensorObj X Y) Z).hom ≫ tensorHom (𝟙 W) (associator X Y Z).hom =
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -100,8 +100,8 @@ We give them some help by expressing the lemmas first non-categorically, then us
open TensorProduct (assoc map)
-private theorem associator_naturality_aux {X₁ X₂ X₃ : Type _} [AddCommMonoid X₁] [AddCommMonoid X₂]
- [AddCommMonoid X₃] [Module R X₁] [Module R X₂] [Module R X₃] {Y₁ Y₂ Y₃ : Type _}
+private theorem associator_naturality_aux {X₁ X₂ X₃ : Type*} [AddCommMonoid X₁] [AddCommMonoid X₂]
+ [AddCommMonoid X₃] [Module R X₁] [Module R X₂] [Module R X₃] {Y₁ Y₂ Y₃ : Type*}
[AddCommMonoid Y₁] [AddCommMonoid Y₂] [AddCommMonoid Y₃] [Module R Y₁] [Module R Y₂]
[Module R Y₃] (f₁ : X₁ →ₗ[R] Y₁) (f₂ : X₂ →ₗ[R] Y₂) (f₃ : X₃ →ₗ[R] Y₃) :
↑(assoc R Y₁ Y₂ Y₃) ∘ₗ map (map f₁ f₂) f₃ = map f₁ (map f₂ f₃) ∘ₗ ↑(assoc R X₁ X₂ X₃) := by
@@ -113,7 +113,7 @@ private theorem associator_naturality_aux {X₁ X₂ X₃ : Type _} [AddCommMono
variable (R)
-private theorem pentagon_aux (W X Y Z : Type _) [AddCommMonoid W] [AddCommMonoid X]
+private theorem pentagon_aux (W X Y Z : Type*) [AddCommMonoid W] [AddCommMonoid X]
[AddCommMonoid Y] [AddCommMonoid Z] [Module R W] [Module R X] [Module R Y] [Module R Z] :
((map (1 : W →ₗ[R] W) (assoc R X Y Z).toLinearMap).comp
(assoc R W (X ⊗[R] Y) Z).toLinearMap).comp
@@ -61,6 +61,16 @@ def tensorHom {M N M' N' : ModuleCat R} (f : M ⟶ N) (g : M' ⟶ N') :
TensorProduct.map f g
#align Module.monoidal_category.tensor_hom ModuleCat.MonoidalCategory.tensorHom
+/-- (implementation) left whiskering for R-modules -/
+def whiskerLeft (M : ModuleCat R) {N₁ N₂ : ModuleCat R} (f : N₁ ⟶ N₂) :
+ tensorObj M N₁ ⟶ tensorObj M N₂ :=
+ f.lTensor M
+
+/-- (implementation) right whiskering for R-modules -/
+def whiskerRight {M₁ M₂ : ModuleCat R} (f : M₁ ⟶ M₂) (N : ModuleCat R) :
+ tensorObj M₁ N ⟶ tensorObj M₂ N :=
+ f.rTensor N
+
theorem tensor_id (M N : ModuleCat R) : tensorHom (𝟙 M) (𝟙 N) = 𝟙 (ModuleCat.of R (M ⊗ N)) := by
-- Porting note: even with high priority ext fails to find this
apply TensorProduct.ext
@@ -187,22 +197,24 @@ end MonoidalCategory
open MonoidalCategory
-instance monoidalCategory : MonoidalCategory (ModuleCat.{u} R) where
+instance monoidalCategory : MonoidalCategory (ModuleCat.{u} R) := MonoidalCategory.ofTensorHom
-- data
- tensorObj := tensorObj
- tensorHom := @tensorHom _ _
- tensorUnit' := ModuleCat.of R R
- associator := associator
- leftUnitor := leftUnitor
- rightUnitor := rightUnitor
+ (tensorObj := MonoidalCategory.tensorObj)
+ (tensorHom := @tensorHom _ _)
+ (whiskerLeft := @whiskerLeft _ _)
+ (whiskerRight := @whiskerRight _ _)
+ (tensorUnit' := ModuleCat.of R R)
+ (associator := associator)
+ (leftUnitor := leftUnitor)
+ (rightUnitor := rightUnitor)
-- properties
- tensor_id M N := tensor_id M N
- tensor_comp f g h := MonoidalCategory.tensor_comp f g h
- associator_naturality f g h := MonoidalCategory.associator_naturality f g h
- leftUnitor_naturality f := MonoidalCategory.leftUnitor_naturality f
- rightUnitor_naturality f := rightUnitor_naturality f
- pentagon M N K L := pentagon M N K L
- triangle M N := triangle M N
+ (tensor_id := fun M N ↦ tensor_id M N)
+ (tensor_comp := fun f g h ↦ MonoidalCategory.tensor_comp f g h)
+ (associator_naturality := fun f g h ↦ MonoidalCategory.associator_naturality f g h)
+ (leftUnitor_naturality := fun f ↦ MonoidalCategory.leftUnitor_naturality f)
+ (rightUnitor_naturality := fun f ↦ rightUnitor_naturality f)
+ (pentagon := fun M N K L ↦ pentagon M N K L)
+ (triangle := fun M N ↦ triangle M N)
#align Module.monoidal_category ModuleCat.monoidalCategory
/-- Remind ourselves that the monoidal unit, being just `R`, is still a commutative ring. -/
@@ -2,17 +2,14 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kevin Buzzard, Scott Morrison, Jakob von Raumer
-
-! This file was ported from Lean 3 source module algebra.category.Module.monoidal.basic
-! leanprover-community/mathlib commit 74403a3b2551b0970855e14ef5e8fd0d6af1bfc2
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Category.ModuleCat.Basic
import Mathlib.LinearAlgebra.TensorProduct
import Mathlib.CategoryTheory.Linear.Yoneda
import Mathlib.CategoryTheory.Monoidal.Linear
+#align_import algebra.category.Module.monoidal.basic from "leanprover-community/mathlib"@"74403a3b2551b0970855e14ef5e8fd0d6af1bfc2"
+
/-!
# The monoidal category structure on R-modules
Sets new records for set_option maxHeartbeats
. :-( I spent too long struggling with this one; if anyone would like to take another look please do.
Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -127,7 +127,8 @@ theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : ModuleCat R} (f
by convert associator_naturality_aux f₁ f₂ f₃ using 1
#align Module.monoidal_category.associator_naturality ModuleCat.MonoidalCategory.associator_naturality
-set_option maxHeartbeats 0 in
+-- Porting note: very slow!
+set_option maxHeartbeats 1600000 in
theorem pentagon (W X Y Z : ModuleCat R) :
tensorHom (associator W X Y).hom (𝟙 Z) ≫
(associator W (tensorObj X Y) Z).hom ≫ tensorHom (𝟙 W) (associator X Y Z).hom =
@@ -300,4 +301,3 @@ instance : MonoidalLinear R (ModuleCat.{u} R) := by
LinearMap.smul_apply, TensorProduct.smul_tmul, TensorProduct.tmul_smul]
end ModuleCat
-
The unported dependencies are