Documentation

Mathlib.CategoryTheory.Category.Cat.CartesianClosed

Cartesian closed structure on Cat #

The category of small categories is Cartesian closed, with the exponential at a category C defined by the functor category mapping out of C.

Adjoint transposition is defined by currying and uncurrying.

TODO: It would be useful to investigate and formalize further compatibilities along the lines of Cat.ihom_obj and Cat.ihom_map, relating currying of functors with currying in monoidal closed categories and precomposition with left whiskering. These may not be definitional equalities but may have to be phrased using eqToIso.

A category C induces a functor from Cat to itself defined by forming the category of functors out of C.

Instances For
    @[simp]
    theorem CategoryTheory.Cat.exp_obj (C : Type u) [Category.{v, u} C] (D : Cat) :
    (exp C).obj D = of (Functor C ↑D)
    @[simp]
    theorem CategoryTheory.Cat.exp_map (C : Type u) [Category.{v, u} C] {Xāœ Yāœ : Cat} (F : Xāœ ⟶ Yāœ) :
    (exp C).map F = ((Functor.whiskeringRight C ↑Xāœ ↑Yāœ).obj F.toFunctor).toCatHom

    The isomorphism of categories of bifunctors given by currying.

    Instances For
      @[simp]
      theorem CategoryTheory.curryingIso_inv_toFunctor_obj_obj_map {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor (C Ɨ D) E) (X : C) {Xāœ Yāœ : D} (g : Xāœ ⟶ Yāœ) :
      @[simp]
      theorem CategoryTheory.curryingIso_inv_toFunctor_obj_map_app {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor (C Ɨ D) E) {Xāœ Yāœ : C} (f : Xāœ ⟶ Yāœ) (Y : D) :
      @[simp]
      theorem CategoryTheory.curryingIso_inv_toFunctor_map_app_app {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] {Xāœ Yāœ : Functor (C Ɨ D) E} (T : Xāœ ⟶ Yāœ) (X : C) (Y : D) :
      ((curryingIso.inv.toFunctor.map T).app X).app Y = T.app (X, Y)
      @[simp]
      theorem CategoryTheory.curryingIso_hom_toFunctor_map_app {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] {Xāœ Yāœ : Functor C (Functor D E)} (T : Xāœ ⟶ Yāœ) (X : C Ɨ D) :
      (curryingIso.hom.toFunctor.map T).app X = (T.app X.1).app X.2
      @[simp]
      theorem CategoryTheory.curryingIso_inv_toFunctor_obj_obj_obj {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor (C Ɨ D) E) (X : C) (Y : D) :
      ((curryingIso.inv.toFunctor.obj F).obj X).obj Y = F.obj (X, Y)
      @[simp]
      theorem CategoryTheory.curryingIso_hom_toFunctor_obj_map {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor C (Functor D E)) {X Y : C Ɨ D} (f : X ⟶ Y) :
      (curryingIso.hom.toFunctor.obj F).map f = CategoryStruct.comp ((F.map f.1).app X.2) ((F.obj Y.1).map f.2)

      The isomorphism of categories of bifunctors given by flipping the arguments.

      Instances For
        @[simp]
        theorem CategoryTheory.flippingIso_inv_toFunctor_map_app_app {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] {F₁ Fā‚‚ : Functor D (Functor C E)} (φ : F₁ ⟶ Fā‚‚) (Y : C) (X : D) :
        ((flippingIso.inv.toFunctor.map φ).app Y).app X = (φ.app X).app Y
        @[simp]
        theorem CategoryTheory.flippingIso_inv_toFunctor_obj_obj_map {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor D (Functor C E)) (k : C) {Xāœ Yāœ : D} (f : Xāœ ⟶ Yāœ) :
        ((flippingIso.inv.toFunctor.obj F).obj k).map f = (F.map f).app k
        @[simp]
        theorem CategoryTheory.flippingIso_hom_toFunctor_obj_obj_map {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor C (Functor D E)) (k : D) {Xāœ Yāœ : C} (f : Xāœ ⟶ Yāœ) :
        ((flippingIso.hom.toFunctor.obj F).obj k).map f = (F.map f).app k
        @[simp]
        theorem CategoryTheory.flippingIso_hom_toFunctor_obj_map_app {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor C (Functor D E)) {Xāœ Yāœ : D} (f : Xāœ ⟶ Yāœ) (j : C) :
        ((flippingIso.hom.toFunctor.obj F).map f).app j = (F.obj j).map f
        @[simp]
        theorem CategoryTheory.flippingIso_inv_toFunctor_obj_map_app {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] (F : Functor D (Functor C E)) {Xāœ Yāœ : C} (f : Xāœ ⟶ Yāœ) (j : D) :
        ((flippingIso.inv.toFunctor.obj F).map f).app j = (F.obj j).map f
        @[simp]
        theorem CategoryTheory.flippingIso_hom_toFunctor_map_app_app {C : Type uā‚‚} [Category.{vā‚‚, uā‚‚} C] {D : Type uā‚ƒ} [Category.{vā‚ƒ, uā‚ƒ} D] {E : Type uā‚„} [Category.{vā‚„, uā‚„} E] {F₁ Fā‚‚ : Functor C (Functor D E)} (φ : F₁ ⟶ Fā‚‚) (Y : D) (X : C) :
        ((flippingIso.hom.toFunctor.map φ).app Y).app X = (φ.app X).app Y
        @[implicit_reducible]
        @[simp]
        theorem CategoryTheory.Cat.ihom_obj (C : Type u) [Category.{u, u} C] (D : Type u) [Category.{u, u} D] :
        (of C ⟹ of D) = of (Functor C D)