# Documentation

Mathlib.CategoryTheory.Monoidal.OfChosenFiniteProducts.Basic

# The monoidal structure on a category with chosen finite products. #

This is a variant of the development in CategoryTheory.Monoidal.OfHasFiniteProducts, which uses specified choices of the terminal object and binary product, enabling the construction of a cartesian category with specific definitions of the tensor unit and tensor product.

(Because the construction in CategoryTheory.Monoidal.OfHasFiniteProducts uses HasLimit classes, the actual definitions there are opaque behind Classical.choice.)

We use this in CategoryTheory.Monoidal.TypeCat to construct the monoidal category of types so that the tensor product is the usual cartesian product of types.

For now we only do the construction from products, and not from coproducts, which seems less often useful.

def CategoryTheory.Limits.BinaryFan.swap {C : Type u} {P : C} {Q : C} (t : ) :

Swap the two sides of a BinaryFan.

Instances For
@[simp]
theorem CategoryTheory.Limits.BinaryFan.swap_fst {C : Type u} {P : C} {Q : C} (t : ) :
@[simp]
theorem CategoryTheory.Limits.BinaryFan.swap_snd {C : Type u} {P : C} {Q : C} (t : ) :
@[simp]
theorem CategoryTheory.Limits.IsLimit.swapBinaryFan_lift {C : Type u} {P : C} {Q : C} {t : } :
def CategoryTheory.Limits.IsLimit.swapBinaryFan {C : Type u} {P : C} {Q : C} {t : } :

If a binary fan t over P Q is a limit cone, then t.swap is a limit cone over Q P.

Instances For
theorem CategoryTheory.Limits.HasBinaryProduct.swap {C : Type u} (P : C) (Q : C) :

Construct HasBinaryProduct Q P from HasBinaryProduct P Q. This can't be an instance, as it would cause a loop in typeclass search.

def CategoryTheory.Limits.BinaryFan.braiding {C : Type u} {X : C} {Y : C} {s : } {t : } :
s.pt t.pt

Given a limit cone over X and Y, and another limit cone over Y and X, we can construct an isomorphism between the cone points. Relative to some fixed choice of limits cones for every pair, these isomorphisms constitute a braiding.

Instances For
def CategoryTheory.Limits.BinaryFan.assoc {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } {sYZ : } (Q : ) (s : ) :

Given binary fans sXY over X Y, and sYZ over Y Z, and s over sXY.X Z, if sYZ is a limit cone we can construct a binary fan over X sYZ.X.

This is an ingredient of building the associator for a cartesian category.

Instances For
@[simp]
theorem CategoryTheory.Limits.BinaryFan.assoc_fst {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } {sYZ : } (Q : ) (s : ) :
@[simp]
theorem CategoryTheory.Limits.BinaryFan.assoc_snd {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } {sYZ : } (Q : ) (s : ) :
def CategoryTheory.Limits.BinaryFan.assocInv {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } (P : ) {sYZ : } (s : ) :

Given binary fans sXY over X Y, and sYZ over Y Z, and s over X sYZ.X, if sYZ is a limit cone we can construct a binary fan over sXY.X Z.

This is an ingredient of building the associator for a cartesian category.

Instances For
@[simp]
theorem CategoryTheory.Limits.BinaryFan.assocInv_fst {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } (P : ) {sYZ : } (s : ) :
@[simp]
theorem CategoryTheory.Limits.BinaryFan.assocInv_snd {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } (P : ) {sYZ : } (s : ) :
@[simp]
theorem CategoryTheory.Limits.IsLimit.assoc_lift {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } (P : ) {sYZ : } (Q : ) {s : } (t : ) :
def CategoryTheory.Limits.IsLimit.assoc {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } (P : ) {sYZ : } (Q : ) {s : } :

If all the binary fans involved a limit cones, BinaryFan.assoc produces another limit cone.

Instances For
@[reducible]
def CategoryTheory.Limits.BinaryFan.associator {C : Type u} {X : C} {Y : C} {Z : C} {sXY : } (P : ) {sYZ : } (Q : ) {s : } {t : } :
s.pt t.pt

Given two pairs of limit cones corresponding to the parenthesisations of X × Y × Z, we obtain an isomorphism between the cone points.

Instances For
@[reducible]
def CategoryTheory.Limits.BinaryFan.associatorOfLimitCone {C : Type u} (L : (X Y : C) → ) (X : C) (Y : C) (Z : C) :
(L (L X Y).cone.pt Z).cone.pt (L X (L Y Z).cone.pt).cone.pt

Given a fixed family of limit data for every pair X Y, we obtain an associator.

Instances For
@[simp]
theorem CategoryTheory.Limits.BinaryFan.leftUnitor_hom {C : Type u} {X : C} {t : } :
@[simp]
theorem CategoryTheory.Limits.BinaryFan.leftUnitor_inv {C : Type u} {X : C} {t : } :
= CategoryTheory.Limits.IsLimit.lift Q (CategoryTheory.Limits.BinaryFan.mk (CategoryTheory.Limits.IsLimit.lift P { pt := X, π := CategoryTheory.NatTrans.mk fun x => CategoryTheory.Discrete.rec (fun x => PEmpty.rec (fun x => (x : PEmpty.{v + 1} ) → ().obj { as := x } ().obj { as := x }) x x) x }) ())
def CategoryTheory.Limits.BinaryFan.leftUnitor {C : Type u} {X : C} {t : } :
t.pt X

Construct a left unitor from specified limit cones.

Instances For
@[simp]
theorem CategoryTheory.Limits.BinaryFan.rightUnitor_inv {C : Type u} {X : C} {t : } :
= CategoryTheory.Limits.IsLimit.lift Q (CategoryTheory.Limits.BinaryFan.mk () (CategoryTheory.Limits.IsLimit.lift P { pt := X, π := CategoryTheory.NatTrans.mk fun x => CategoryTheory.Discrete.rec (fun x => PEmpty.rec (fun x => (x : PEmpty.{v + 1} ) → ().obj { as := x } ().obj { as := x }) x x) x }))
@[simp]
theorem CategoryTheory.Limits.BinaryFan.rightUnitor_hom {C : Type u} {X : C} {t : } :
def CategoryTheory.Limits.BinaryFan.rightUnitor {C : Type u} {X : C} {t : } :
t.pt X

Construct a right unitor from specified limit cones.

Instances For
@[reducible]
def CategoryTheory.MonoidalOfChosenFiniteProducts.tensorObj {C : Type u} (ℬ : (X Y : C) → ) (X : C) (Y : C) :
C

Implementation of the tensor product for MonoidalOfChosenFiniteProducts.

Instances For
@[reducible]
def CategoryTheory.MonoidalOfChosenFiniteProducts.tensorHom {C : Type u} (ℬ : (X Y : C) → ) {W : C} {X : C} {Y : C} {Z : C} (f : W X) (g : Y Z) :

Implementation of the tensor product of morphisms for MonoidalOfChosenFiniteProducts.

Instances For
theorem CategoryTheory.MonoidalOfChosenFiniteProducts.tensor_id {C : Type u} (ℬ : (X Y : C) → ) (X₁ : C) (X₂ : C) :
theorem CategoryTheory.MonoidalOfChosenFiniteProducts.tensor_comp {C : Type u} (ℬ : (X Y : C) → ) {X₁ : C} {Y₁ : C} {Z₁ : C} {X₂ : C} {Y₂ : C} {Z₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (g₁ : Y₁ Z₁) (g₂ : Y₂ Z₂) :
theorem CategoryTheory.MonoidalOfChosenFiniteProducts.pentagon {C : Type u} (ℬ : (X Y : C) → ) (W : C) (X : C) (Y : C) (Z : C) :
theorem CategoryTheory.MonoidalOfChosenFiniteProducts.leftUnitor_naturality {C : Type u} (ℬ : (X Y : C) → ) {X₁ : C} {X₂ : C} (f : X₁ X₂) :
CategoryTheory.CategoryStruct.comp () (CategoryTheory.Limits.BinaryFan.leftUnitor 𝒯.isLimit ( 𝒯.cone.pt X₂).isLimit).hom = CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.BinaryFan.leftUnitor 𝒯.isLimit ( 𝒯.cone.pt X₁).isLimit).hom f
theorem CategoryTheory.MonoidalOfChosenFiniteProducts.rightUnitor_naturality {C : Type u} (ℬ : (X Y : C) → ) {X₁ : C} {X₂ : C} (f : X₁ X₂) :
CategoryTheory.CategoryStruct.comp () (CategoryTheory.Limits.BinaryFan.rightUnitor 𝒯.isLimit ( X₂ 𝒯.cone.pt).isLimit).hom = CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.BinaryFan.rightUnitor 𝒯.isLimit ( X₁ 𝒯.cone.pt).isLimit).hom f
theorem CategoryTheory.MonoidalOfChosenFiniteProducts.associator_naturality {C : Type u} (ℬ : (X Y : C) → ) {X₁ : C} {X₂ : C} {X₃ : C} {Y₁ : C} {Y₂ : C} {Y₃ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (f₃ : X₃ Y₃) :
def CategoryTheory.monoidalOfChosenFiniteProducts {C : Type u} (ℬ : (X Y : C) → ) :

A category with a terminal object and binary products has a natural monoidal structure.

Instances For

A type synonym for C carrying a monoidal category structure corresponding to a fixed choice of limit data for the empty functor, and for pair X Y for every X Y : C.

This is an implementation detail for SymmetricOfChosenFiniteProducts.

Instances For