Zulip Chat Archive
Stream: Is there code for X?
Topic: Chosen finite products and internal homs
Adam Topaz (Feb 26 2024 at 20:56):
We have docs#CategoryTheory.CartesianClosed which uses the (noncomputable) categorical products as an assumption. On the other hand, we have docs#CategoryTheory.monoidalOfChosenFiniteProducts which lets us construct a (cartesian) monoidal structure by explicitly specifying a terminal object and binary products. However, we don't have any real API for cartesian monoidal categories. E.g. there is no lift
which takes and and gives .
For a personal project I'm working on, I would like to be able to talk about explicit cartesian (closed) structures on categories, where there is an explicitly chosen product and terminal object (and internal hom for the closed case). The approach I'm currently taking is this:
class ChosenFiniteProducts (C : Type u) [Category.{v} C] where
product : (X Y : C) → Limits.LimitCone (Limits.pair X Y)
terminal : Limits.LimitCone (Functor.empty C)
and providing a monoidal instance based on that. I then use the notation from the monoidal categories API to work with the chosen product and terminal object.
Does anyone see a more convenient approach to accomplishing the same thing, using what's currently in mathlib?
Adam Topaz (Mar 08 2024 at 17:54):
I have opened a PR here: #11248
Adam Topaz (Mar 08 2024 at 18:02):
One potential issue I see with this is that there are categories which have a natural monoidal structure and a natural Cartesian structure which don’t agree (e.g. modules). In such cases introducing an instance of this new class will cause diamond issues. A potential fix is to introduce custom notation for the explicit product and terminal object that doesn’t go through the monoidal instance, and to make that instance a def. Anyone have any thought about this?
Adam Topaz (Mar 08 2024 at 18:02):
@Kevin Buzzard Jujian Zhang @Amelia Livingston
Kevin Buzzard (Mar 08 2024 at 18:18):
@Edison Xie might also be interested in this
Edison Xie (Mar 08 2024 at 18:23):
Kevin Buzzard said:
Edison Xie might also be interested in this
yes jujian has sent me a paragraph of codes written by Adam to bypass the proof of category over a monoid object being monoidal
Jujian Zhang (Mar 08 2024 at 18:26):
Am I missing something here. My understanding is that this is a solution to put a monoidal structure where we have good definition equality on a category whose natural monoidal structure is Cartesian product. So can we just manually avoid using ChosenFiniteProducts
on category of modules etc whose monoidal structure and Cartesian product diverges. For example, we don’t mark monoidalOfChosenFiniteProducts
and monoidalOfFiniteProducts
as instance
so that monoidal instance from ChosenFiniteProducts
and FiniteProducts
should be written manually and maybe with help of type alias, could diamonds be eliminated?
Jujian Zhang (Mar 08 2024 at 18:36):
If we worry that our version of carefully chosen Cartesian product might get confused with the product object by axiom of choice, we can use the tensorObj
notation.
Adam Topaz (Mar 08 2024 at 18:45):
Yeah you don’t have to introduce an instance of this class. But then using the explicit product of modules (whose underlying type is the type theoretic product) is not so convenient when doing category theory
Last updated: May 02 2025 at 03:31 UTC