Documentation

Mathlib.Algebra.Category.ModuleCat.Monoidal.Basic

The monoidal category structure on R-modules #

Mostly this uses existing machinery in LinearAlgebra.TensorProduct. We just need to provide a few small missing pieces to build the MonoidalCategory instance. The SymmetricCategory instance is in Algebra.Category.ModuleCat.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 construct the monoidal closed structure on ModuleCat R in Algebra.Category.ModuleCat.Monoidal.Closed.

If you're happy using the bundled ModuleCat R, it may be possible to mostly use this as an interface and not need to interact much with the implementation details.

(implementation) tensor product of R-modules

Equations
    Instances For
      def SemimoduleCat.MonoidalCategory.tensorHom {R : Type u} [CommSemiring R] {M N : SemimoduleCat R} {M' N' : SemimoduleCat R} (f : M N) (g : M' N') :

      (implementation) tensor product of morphisms R-modules

      Equations
        Instances For
          def SemimoduleCat.MonoidalCategory.whiskerLeft {R : Type u} [CommSemiring R] (M : SemimoduleCat R) {N₁ N₂ : SemimoduleCat R} (f : N₁ N₂) :
          tensorObj M N₁ tensorObj M N₂

          (implementation) left whiskering for R-modules

          Equations
            Instances For
              def SemimoduleCat.MonoidalCategory.whiskerRight {R : Type u} [CommSemiring R] {M₁ M₂ : SemimoduleCat R} (f : M₁ M₂) (N : SemimoduleCat R) :
              tensorObj M₁ N tensorObj M₂ N

              (implementation) right whiskering for R-modules

              Equations
                Instances For
                  theorem SemimoduleCat.MonoidalCategory.tensorHom_comp_tensorHom {R : Type u} [CommSemiring R] {X₁ Y₁ Z₁ : SemimoduleCat R} {X₂ Y₂ Z₂ : SemimoduleCat R} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (g₁ : Y₁ Z₁) (g₂ : Y₂ Z₂) :

                  (implementation) the associator for R-modules

                  Equations
                    Instances For

                      (implementation) the left unitor for R-modules

                      Equations
                        Instances For

                          (implementation) the right unitor for R-modules

                          Equations
                            Instances For
                              theorem SemimoduleCat.MonoidalCategory.tensorHom_def {R : Type u} [CommSemiring R] {X₁✝ Y₁✝ X₂✝ Y₂✝ : SemimoduleCat R} (f : X₁✝ Y₁✝) (g : X₂✝ Y₂✝) :
                              theorem SemimoduleCat.MonoidalCategory.associator_naturality {R : Type u} [CommSemiring R] {X₁ : SemimoduleCat R} {X₂ : SemimoduleCat R} {X₃ : SemimoduleCat R} {Y₁ : SemimoduleCat R} {Y₂ : SemimoduleCat R} {Y₃ : SemimoduleCat R} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (f₃ : X₃ Y₃) :

                              Remind ourselves that the monoidal unit, being just R, is still a commutative semiring.

                              Equations
                                def SemimoduleCat.MonoidalCategory.tensorLift {R : Type u} [CommSemiring R] {M₁ M₂ M₃ : SemimoduleCat R} (f : M₁M₂M₃) (h₁ : ∀ (m₁ m₂ : M₁) (n : M₂), f (m₁ + m₂) n = f m₁ n + f m₂ n) (h₂ : ∀ (a : R) (m : M₁) (n : M₂), f (a m) n = a f m n) (h₃ : ∀ (m : M₁) (n₁ n₂ : M₂), f m (n₁ + n₂) = f m n₁ + f m n₂) (h₄ : ∀ (a : R) (m : M₁) (n : M₂), f m (a n) = a f m n) :

                                Construct for morphisms from the tensor product of two objects in SemimoduleCat.

                                Equations
                                  Instances For
                                    @[simp]
                                    theorem SemimoduleCat.MonoidalCategory.tensorLift_tmul {R : Type u} [CommSemiring R] {M₁ M₂ M₃ : SemimoduleCat R} (f : M₁M₂M₃) (h₁ : ∀ (m₁ m₂ : M₁) (n : M₂), f (m₁ + m₂) n = f m₁ n + f m₂ n) (h₂ : ∀ (a : R) (m : M₁) (n : M₂), f (a m) n = a f m n) (h₃ : ∀ (m : M₁) (n₁ n₂ : M₂), f m (n₁ + n₂) = f m n₁ + f m n₂) (h₄ : ∀ (a : R) (m : M₁) (n : M₂), f m (a n) = a f m n) (m : M₁) (n : M₂) :
                                    (CategoryTheory.ConcreteCategory.hom (tensorLift f h₁ h₂ h₃ h₄)) (m ⊗ₜ[R] n) = f m n
                                    theorem SemimoduleCat.MonoidalCategory.tensor_ext {R : Type u} [CommSemiring R] {M₁ M₂ M₃ : SemimoduleCat R} {f g : CategoryTheory.MonoidalCategoryStruct.tensorObj M₁ M₂ M₃} (h : ∀ (m : M₁) (n : M₂), (Hom.hom f) (m ⊗ₜ[R] n) = (Hom.hom g) (m ⊗ₜ[R] n)) :
                                    f = g
                                    theorem SemimoduleCat.MonoidalCategory.tensor_ext₃' {R : Type u} [CommSemiring R] {M₁ M₂ M₃ M₄ : SemimoduleCat R} {f g : CategoryTheory.MonoidalCategoryStruct.tensorObj (CategoryTheory.MonoidalCategoryStruct.tensorObj M₁ M₂) M₃ M₄} (h : ∀ (m₁ : M₁) (m₂ : M₂) (m₃ : M₃), (CategoryTheory.ConcreteCategory.hom f) (m₁ ⊗ₜ[R] m₂ ⊗ₜ[R] m₃) = (CategoryTheory.ConcreteCategory.hom g) (m₁ ⊗ₜ[R] m₂ ⊗ₜ[R] m₃)) :
                                    f = g

                                    Extensionality lemma for morphisms from a module of the form (M₁ ⊗ M₂) ⊗ M₃.

                                    theorem SemimoduleCat.MonoidalCategory.tensor_ext₃ {R : Type u} [CommSemiring R] {M₁ M₂ M₃ M₄ : SemimoduleCat R} {f g : CategoryTheory.MonoidalCategoryStruct.tensorObj M₁ (CategoryTheory.MonoidalCategoryStruct.tensorObj M₂ M₃) M₄} (h : ∀ (m₁ : M₁) (m₂ : M₂) (m₃ : M₃), (CategoryTheory.ConcreteCategory.hom f) (m₁ ⊗ₜ[R] (m₂ ⊗ₜ[R] m₃)) = (CategoryTheory.ConcreteCategory.hom g) (m₁ ⊗ₜ[R] (m₂ ⊗ₜ[R] m₃))) :
                                    f = g

                                    Extensionality lemma for morphisms from a module of the form M₁ ⊗ (M₂ ⊗ M₃).

                                    theorem ModuleCat.MonoidalCategory.tensorHom_def {R : Type u} [CommRing R] {X₁✝ Y₁✝ X₂✝ Y₂✝ : ModuleCat R} (f : X₁✝ Y₁✝) (g : X₂✝ Y₂✝) :

                                    Remind ourselves that the monoidal unit, being just R, is still a commutative ring.

                                    Equations
                                      @[deprecated ModuleCat.MonoidalCategory.tensorObj_carrier (since := "2025-10-29")]

                                      Alias of ModuleCat.MonoidalCategory.tensorObj_carrier.

                                      @[deprecated ModuleCat.MonoidalCategory.tensorObj_carrier (since := "2025-10-29")]

                                      Alias of ModuleCat.MonoidalCategory.tensorObj_carrier.

                                      def ModuleCat.MonoidalCategory.tensorLift {R : Type u} [CommRing R] {M₁ M₂ M₃ : ModuleCat R} (f : M₁M₂M₃) (h₁ : ∀ (m₁ m₂ : M₁) (n : M₂), f (m₁ + m₂) n = f m₁ n + f m₂ n) (h₂ : ∀ (a : R) (m : M₁) (n : M₂), f (a m) n = a f m n) (h₃ : ∀ (m : M₁) (n₁ n₂ : M₂), f m (n₁ + n₂) = f m n₁ + f m n₂) (h₄ : ∀ (a : R) (m : M₁) (n : M₂), f m (a n) = a f m n) :

                                      Construct for morphisms from the tensor product of two objects in ModuleCat.

                                      Equations
                                        Instances For
                                          @[simp]
                                          theorem ModuleCat.MonoidalCategory.tensorLift_tmul {R : Type u} [CommRing R] {M₁ M₂ M₃ : ModuleCat R} (f : M₁M₂M₃) (h₁ : ∀ (m₁ m₂ : M₁) (n : M₂), f (m₁ + m₂) n = f m₁ n + f m₂ n) (h₂ : ∀ (a : R) (m : M₁) (n : M₂), f (a m) n = a f m n) (h₃ : ∀ (m : M₁) (n₁ n₂ : M₂), f m (n₁ + n₂) = f m n₁ + f m n₂) (h₄ : ∀ (a : R) (m : M₁) (n : M₂), f m (a n) = a f m n) (m : M₁) (n : M₂) :
                                          (CategoryTheory.ConcreteCategory.hom (tensorLift f h₁ h₂ h₃ h₄)) (m ⊗ₜ[R] n) = f m n
                                          theorem ModuleCat.MonoidalCategory.tensor_ext {R : Type u} [CommRing R] {M₁ M₂ M₃ : ModuleCat R} {f g : CategoryTheory.MonoidalCategoryStruct.tensorObj M₁ M₂ M₃} (h : ∀ (m : M₁) (n : M₂), (Hom.hom f) (m ⊗ₜ[R] n) = (Hom.hom g) (m ⊗ₜ[R] n)) :
                                          f = g
                                          theorem ModuleCat.MonoidalCategory.tensor_ext₃' {R : Type u} [CommRing R] {M₁ M₂ M₃ M₄ : ModuleCat R} {f g : CategoryTheory.MonoidalCategoryStruct.tensorObj (CategoryTheory.MonoidalCategoryStruct.tensorObj M₁ M₂) M₃ M₄} (h : ∀ (m₁ : M₁) (m₂ : M₂) (m₃ : M₃), (CategoryTheory.ConcreteCategory.hom f) (m₁ ⊗ₜ[R] m₂ ⊗ₜ[R] m₃) = (CategoryTheory.ConcreteCategory.hom g) (m₁ ⊗ₜ[R] m₂ ⊗ₜ[R] m₃)) :
                                          f = g

                                          Extensionality lemma for morphisms from a module of the form (M₁ ⊗ M₂) ⊗ M₃.

                                          theorem ModuleCat.MonoidalCategory.tensor_ext₃ {R : Type u} [CommRing R] {M₁ M₂ M₃ M₄ : ModuleCat R} {f g : CategoryTheory.MonoidalCategoryStruct.tensorObj M₁ (CategoryTheory.MonoidalCategoryStruct.tensorObj M₂ M₃) M₄} (h : ∀ (m₁ : M₁) (m₂ : M₂) (m₃ : M₃), (CategoryTheory.ConcreteCategory.hom f) (m₁ ⊗ₜ[R] (m₂ ⊗ₜ[R] m₃)) = (CategoryTheory.ConcreteCategory.hom g) (m₁ ⊗ₜ[R] (m₂ ⊗ₜ[R] m₃))) :
                                          f = g

                                          Extensionality lemma for morphisms from a module of the form M₁ ⊗ (M₂ ⊗ M₃).