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.

Equations
    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.

      Equations
        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) :
          @[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

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

          Equations
            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
              @[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)