Closed monoidal categories #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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 of this typeclass
Instances of other typeclasses for category_theory.closed
- category_theory.closed.has_sizeof_inst
- closed' : Π (X : C), category_theory.closed X
A monoidal category C
is (right) monoidal closed if every object is (right) closed.
Instances of this typeclass
- Module.category_theory.monoidal_closed
- category_theory.functor.monoidal_closed
- Rep.category_theory.monoidal_closed
- category_theory.monoidal_category.full_monoidal_closed_subcategory
- fgModule.category_theory.monoidal_closed
- category_theory.sort.cartesian_closed
- category_theory.functor.cartesian_closed
Instances of other typeclasses for category_theory.monoidal_closed
- category_theory.monoidal_closed.has_sizeof_inst
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
- category_theory.tensor_closed hX hY = {is_adj := category_theory.adjunction.left_adjoint_of_nat_iso (category_theory.monoidal_category.tensor_left_tensor X Y).symm (category_theory.adjunction.left_adjoint_of_comp (category_theory.monoidal_category.tensor_left Y) (category_theory.monoidal_category.tensor_left X))}
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
- category_theory.unit_closed = {is_adj := {right := 𝟭 C _inst_1, adj := category_theory.adjunction.mk_of_hom_equiv {hom_equiv := λ (X _x : C), {to_fun := λ (a : (category_theory.monoidal_category.tensor_left (𝟙_ C)).obj X ⟶ _x), (λ_ X).inv ≫ a, inv_fun := λ (a : X ⟶ (𝟭 C).obj _x), (λ_ X).hom ≫ a, left_inv := _, right_inv := _}, hom_equiv_naturality_left_symm' := _, hom_equiv_naturality_right' := _}}}
This is the internal hom A ⟶[C] -
.
The adjunction between A ⊗ -
and A ⟹ -
.
The evaluation natural transformation.
Equations
The coevaluation natural transformation.
Equations
Currying in a monoidal closed category.
Equations
Uncurrying in a monoidal closed category.
Equations
Pre-compose an internal hom with an external hom.
The internal hom functor given by the monoidal closed structure.
Equations
- category_theory.monoidal_closed.internal_hom = {obj := λ (X : Cᵒᵖ), category_theory.ihom (opposite.unop X), map := λ (X Y : Cᵒᵖ) (f : X ⟶ Y), category_theory.monoidal_closed.pre f.unop, map_id' := _, map_comp' := _}
Transport the property of being monoidal closed across a monoidal equivalence of categories
Equations
- category_theory.monoidal_closed.of_equiv F = {closed' := λ (X : C), {is_adj := category_theory.adjunction.left_adjoint_of_nat_iso (category_theory.comp_inv_iso (F.comm_tensor_left X)) (category_theory.adjunction.left_adjoint_of_comp (F.to_lax_monoidal_functor.to_functor ⋙ category_theory.monoidal_category.tensor_left (F.to_lax_monoidal_functor.to_functor.obj X)) F.to_lax_monoidal_functor.to_functor.inv)}}
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.
)
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.
)