HepLean Documentation

Mathlib.CategoryTheory.Closed.Monoidal

Closed monoidal categories #

Define (right) closed objects and (right) closed monoidal categories.

TODO #

Some of the theorems proved about cartesian closed categories should be generalised and moved to this file.

An object X is (right) closed if (X ⊗ -) is a left adjoint.

Instances

    A monoidal category C is (right) monoidal closed if every object is (right) closed.

    Instances

      If X and Y are closed then X ⊗ Y is. This isn't an instance because it's not usually how we want to construct internal homs, we'll usually prove all objects are closed uniformly.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        The unit object is always closed. This isn't an instance because most of the time we'll prove closedness for all objects at once, rather than just for this one.

        Equations
        Instances For

          A ⟶[C] B denotes the internal hom from A to B

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            Currying in a monoidal closed category.

            Equations
            Instances For

              Uncurrying in a monoidal closed category.

              Equations
              Instances For

                The internal hom out of the unit is naturally isomorphic to the identity functor.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  Pre-compose an internal hom with an external hom.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For

                    The internal hom functor given by the monoidal closed structure.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      Transport the property of being monoidal closed across a monoidal equivalence of categories

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem CategoryTheory.MonoidalClosed.ofEquiv_curry_def {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.MonoidalCategory C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] [CategoryTheory.MonoidalCategory D] (F : CategoryTheory.MonoidalFunctor C D) {G : CategoryTheory.Functor D C} (adj : F.toFunctor G) [F.IsEquivalence] [CategoryTheory.MonoidalClosed D] {X : C} {Y : C} {Z : C} (f : CategoryTheory.MonoidalCategory.tensorObj X Y Z) :
                        CategoryTheory.MonoidalClosed.curry f = (adj.homEquiv Y ((CategoryTheory.ihom (F.obj X)).obj (F.obj Z))) (CategoryTheory.MonoidalClosed.curry ((adj.toEquivalence.symm.toAdjunction.homEquiv (CategoryTheory.MonoidalCategory.tensorObj (F.obj X) (F.obj Y)) Z) (CategoryTheory.CategoryStruct.comp ((F.commTensorLeft X).compInverseIso.hom.app Y) f)))

                        Suppose we have a monoidal equivalence F : C ≌ D, with D monoidal closed. We can pull the monoidal closed instance back along the equivalence. For X, Y, Z : C, this lemma describes the resulting currying map Hom(X ⊗ Y, Z) → Hom(Y, (X ⟶[C] Z)). (X ⟶[C] Z is defined to be F⁻¹(F(X) ⟶[D] F(Z)), so currying in C is given by essentially conjugating currying in D by F.)

                        theorem CategoryTheory.MonoidalClosed.ofEquiv_uncurry_def {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.MonoidalCategory C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] [CategoryTheory.MonoidalCategory D] (F : CategoryTheory.MonoidalFunctor C D) {G : CategoryTheory.Functor D C} (adj : F.toFunctor G) [F.IsEquivalence] [CategoryTheory.MonoidalClosed D] {X : C} {Y : C} {Z : C} (f : Y (CategoryTheory.ihom X).obj Z) :
                        CategoryTheory.MonoidalClosed.uncurry f = CategoryTheory.CategoryStruct.comp ((F.commTensorLeft X).compInverseIso.inv.app Y) ((adj.toEquivalence.symm.toAdjunction.homEquiv ((F.comp (CategoryTheory.MonoidalCategory.tensorLeft (F.obj X))).obj Y) Z).symm (CategoryTheory.MonoidalClosed.uncurry ((adj.homEquiv Y ((CategoryTheory.ihom (F.obj X)).obj (adj.toEquivalence.symm.inverse.obj Z))).symm f)))

                        Suppose we have a monoidal equivalence F : C ≌ D, with D monoidal closed. We can pull the monoidal closed instance back along the equivalence. For X, Y, Z : C, this lemma describes the resulting uncurrying map Hom(Y, (X ⟶[C] Z)) → Hom(X ⊗ Y ⟶ Z). (X ⟶[C] Z is defined to be F⁻¹(F(X) ⟶[D] F(Z)), so uncurrying in C is given by essentially conjugating uncurrying in D by F.)

                        The C-identity morphism 𝟙_ C ⟶ hom(x, x) used to equip C with the structure of a C-category

                        Equations
                        Instances For

                          The uncurried composition morphism x ⊗ (hom(x, y) ⊗ hom(y, z)) ⟶ (x ⊗ hom(x, y)) ⊗ hom(y, z) ⟶ y ⊗ hom(y, z) ⟶ z. The C-composition morphism will be defined as the adjoint transpose of this map.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For

                            The C-composition morphism hom(x, y) ⊗ hom(y, z) ⟶ hom(x, z) used to equip C with the structure of a C-category

                            Equations
                            Instances For

                              The proofs of associativity and unitality use the following outline:

                              1. Take adjoint transpose on each side of the equality (uncurry_injective)
                              2. Do whatever rewrites/simps are necessary to apply uncurry_curry
                              3. Conclude with simp