The natural monoidal structure on any category with finite (co)products.
A category with a monoidal structure provided in this way is sometimes called a (co)cartesian category, although this is also sometimes used to mean a finitely complete category. (See https://ncatlab.org/nlab/show/cartesian+category.)
As this works with either products or coproducts, and sometimes we want to think of a different monoidal structure entirely, we don't set up either construct as an instance.
Implementation
For the sake of nicer definitional properties,
we rely on has_terminal
and has_binary_products
instead of has_finite_products
,
so that if a particular category provides customised instances of these
we pick those up instead.
The braiding isomorphism which swaps a binary product.
The braiding isomorphism can be passed through a map by swapping the order.
The braiding isomorphism is symmetric.
The associator isomorphism for binary products.
Equations
- category_theory.limits.prod.associator P Q R = {hom := category_theory.limits.prod.lift (category_theory.limits.prod.fst ≫ category_theory.limits.prod.fst) (category_theory.limits.prod.lift (category_theory.limits.prod.fst ≫ category_theory.limits.prod.snd) category_theory.limits.prod.snd), inv := category_theory.limits.prod.lift (category_theory.limits.prod.lift category_theory.limits.prod.fst (category_theory.limits.prod.snd ≫ category_theory.limits.prod.fst)) (category_theory.limits.prod.snd ≫ category_theory.limits.prod.snd), hom_inv_id' := _, inv_hom_id' := _}
The product functor can be decomposed.
The left unitor isomorphism for binary products with the terminal object.
Equations
- category_theory.limits.prod.left_unitor P = {hom := category_theory.limits.prod.snd (category_theory.limits.has_limit_of_has_limits_of_shape (category_theory.limits.pair (⊤_C) P)), inv := category_theory.limits.prod.lift (category_theory.limits.terminal.from P) (𝟙 P), hom_inv_id' := _, inv_hom_id' := _}
The right unitor isomorphism for binary products with the terminal object.
Equations
- category_theory.limits.prod.right_unitor P = {hom := category_theory.limits.prod.fst (category_theory.limits.has_limit_of_has_limits_of_shape (category_theory.limits.pair P (⊤_C))), inv := category_theory.limits.prod.lift (𝟙 P) (category_theory.limits.terminal.from P), hom_inv_id' := _, inv_hom_id' := _}
The braiding isomorphism which swaps a binary coproduct.
Equations
- category_theory.limits.coprod.braiding P Q = {hom := category_theory.limits.coprod.desc category_theory.limits.coprod.inr category_theory.limits.coprod.inl, inv := category_theory.limits.coprod.desc category_theory.limits.coprod.inr category_theory.limits.coprod.inl, hom_inv_id' := _, inv_hom_id' := _}
The braiding isomorphism is symmetric.
The associator isomorphism for binary coproducts.
Equations
- category_theory.limits.coprod.associator P Q R = {hom := category_theory.limits.coprod.desc (category_theory.limits.coprod.desc category_theory.limits.coprod.inl (category_theory.limits.coprod.inl ≫ category_theory.limits.coprod.inr)) (category_theory.limits.coprod.inr ≫ category_theory.limits.coprod.inr), inv := category_theory.limits.coprod.desc (category_theory.limits.coprod.inl ≫ category_theory.limits.coprod.inl) (category_theory.limits.coprod.desc (category_theory.limits.coprod.inr ≫ category_theory.limits.coprod.inl) category_theory.limits.coprod.inr), hom_inv_id' := _, inv_hom_id' := _}
The left unitor isomorphism for binary coproducts with the initial object.
Equations
- category_theory.limits.coprod.left_unitor P = {hom := category_theory.limits.coprod.desc (category_theory.limits.initial.to P) (𝟙 P), inv := category_theory.limits.coprod.inr (category_theory.limits.has_colimit_of_has_colimits_of_shape (category_theory.limits.pair (⊥_C) P)), hom_inv_id' := _, inv_hom_id' := _}
The right unitor isomorphism for binary coproducts with the initial object.
Equations
- category_theory.limits.coprod.right_unitor P = {hom := category_theory.limits.coprod.desc (𝟙 P) (category_theory.limits.initial.to P), inv := category_theory.limits.coprod.inl (category_theory.limits.has_colimit_of_has_colimits_of_shape (category_theory.limits.pair P (⊥_C))), hom_inv_id' := _, inv_hom_id' := _}
A category with a terminal object and binary products has a natural monoidal structure.
Equations
- category_theory.monoidal_of_has_finite_products C = {tensor_obj := λ (X Y : C), X ⨯ Y, tensor_hom := λ (_x _x_1 _x_2 _x_3 : C) (f : _x ⟶ _x_1) (g : _x_2 ⟶ _x_3), category_theory.limits.prod.map f g, tensor_id' := _, tensor_comp' := _, tensor_unit := ⊤_C, associator := category_theory.limits.prod.associator _inst_3, associator_naturality' := _, left_unitor := category_theory.limits.prod.left_unitor _inst_2, left_unitor_naturality' := _, right_unitor := category_theory.limits.prod.right_unitor _inst_2, right_unitor_naturality' := _, pentagon' := _, triangle' := _}
The monoidal structure coming from finite products is symmetric.
Equations
- category_theory.symmetric_of_has_finite_products C = {to_braided_category := {braiding := category_theory.limits.prod.braiding _inst_3, braiding_naturality' := _, hexagon_forward' := _, hexagon_reverse' := _}, symmetry' := _}
A category with an initial object and binary coproducts has a natural monoidal structure.
Equations
- category_theory.monoidal_of_has_finite_coproducts C = {tensor_obj := λ (X Y : C), X ⨿ Y, tensor_hom := λ (_x _x_1 _x_2 _x_3 : C) (f : _x ⟶ _x_1) (g : _x_2 ⟶ _x_3), category_theory.limits.coprod.map f g, tensor_id' := _, tensor_comp' := _, tensor_unit := ⊥_C, associator := category_theory.limits.coprod.associator _inst_3, associator_naturality' := _, left_unitor := category_theory.limits.coprod.left_unitor _inst_2, left_unitor_naturality' := _, right_unitor := category_theory.limits.coprod.right_unitor _inst_2, right_unitor_naturality' := _, pentagon' := _, triangle' := _}
The monoidal structure coming from finite coproducts is symmetric.
Equations
- category_theory.symmetric_of_has_finite_coproducts C = {to_braided_category := {braiding := category_theory.limits.coprod.braiding _inst_3, braiding_naturality' := _, hexagon_forward' := _, hexagon_reverse' := _}, symmetry' := _}