Documentation

Mathlib.CategoryTheory.Functor.FunctorHom

Internal hom in functor categories #

Given functors F G : C ⥤ D, define a functor functorHom F G from C to Type max v' v u, which is a proxy for the "internal hom" functor Hom(F ⊗ coyoneda(-), G). This is used to show that the functor category C ⥤ D is enriched over C ⥤ Type max v' v u. This is also useful for showing that C ⥤ Type max w v u is monoidal closed.

See Mathlib/CategoryTheory/Closed/FunctorToTypes.lean.

structure CategoryTheory.Functor.HomObj {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] (F G : Functor C D) (A : Functor C (Type w)) :
Type (max (max u v') w)

Given functors F G : C ⥤ D, HomObj F G A is a proxy for the type of "morphisms" F ⊗ A ⟶ G, where A : C ⥤ Type w (w an arbitrary universe).

theorem CategoryTheory.Functor.HomObj.ext {C : Type u} {inst✝ : Category.{v, u} C} {D : Type u'} {inst✝¹ : Category.{v', u'} D} {F G : Functor C D} {A : Functor C (Type w)} {x y : F.HomObj G A} (app : x.app = y.app) :
x = y
theorem CategoryTheory.Functor.HomObj.ext_iff {C : Type u} {inst✝ : Category.{v, u} C} {D : Type u'} {inst✝¹ : Category.{v', u'} D} {F G : Functor C D} {A : Functor C (Type w)} {x y : F.HomObj G A} :
x = y x.app = y.app

When F, G, and A are all functors C ⥤ Type w, then HomObj F G A is in bijection with F ⊗ A ⟶ G.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Functor.homObjEquiv_apply_app {C : Type u} [Category.{v, u} C] (F G A : Functor C (Type w)) (a : F.HomObj G A) (X : C) (x✝ : (MonoidalCategoryStruct.tensorObj F A).obj X) :
((F.homObjEquiv G A) a).app X x✝ = match x✝ with | (x, y) => a.app X y x
@[simp]
theorem CategoryTheory.Functor.homObjEquiv_symm_apply_app {C : Type u} [Category.{v, u} C] (F G A : Functor C (Type w)) (a : MonoidalCategoryStruct.tensorObj F A G) (X : C) (y : A.obj X) (x : F.obj X) :
((F.homObjEquiv G A).symm a).app X y x = a.app X (x, y)
@[simp]
theorem CategoryTheory.Functor.HomObj.naturality_assoc {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A : Functor C (Type w)} (self : F.HomObj G A) {c d : C} (f : c d) (a : A.obj c) {Z : D} (h : G.obj d Z) :
theorem CategoryTheory.Functor.HomObj.congr_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A : Functor C (Type w)} {f g : F.HomObj G A} (h : f = g) (X : C) (a : A.obj X) :
f.app X a = g.app X a
def CategoryTheory.Functor.HomObj.ofNatTrans {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A : Functor C (Type w)} (f : F G) :
F.HomObj G A

Given a natural transformation F ⟶ G, get a term of HomObj F G A by "ignoring" A.

Equations
@[simp]
theorem CategoryTheory.Functor.HomObj.ofNatTrans_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A : Functor C (Type w)} (f : F G) (X : C) (x✝ : A.obj X) :
(ofNatTrans f).app X x✝ = f.app X
@[simp]
theorem CategoryTheory.Functor.HomObj.id_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F : Functor C D} (A : Functor C (Type w)) (X : C) (x✝ : A.obj X) :
(id A).app X x✝ = CategoryStruct.id (F.obj X)
def CategoryTheory.Functor.HomObj.comp {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A : Functor C (Type w)} {M : Functor C D} (f : F.HomObj G A) (g : G.HomObj M A) :
F.HomObj M A

Composition of f : HomObj F G A with g : HomObj G M A.

Equations
@[simp]
theorem CategoryTheory.Functor.HomObj.comp_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A : Functor C (Type w)} {M : Functor C D} (f : F.HomObj G A) (g : G.HomObj M A) (X : C) (a : A.obj X) :
(f.comp g).app X a = CategoryStruct.comp (f.app X a) (g.app X a)
def CategoryTheory.Functor.HomObj.map {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A A' : Functor C (Type w)} (f : A' A) (x : F.HomObj G A) :
F.HomObj G A'

Given a morphism A' ⟶ A, send a term of HomObj F G A to a term of HomObj F G A'.

Equations
@[simp]
theorem CategoryTheory.Functor.HomObj.map_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {A A' : Functor C (Type w)} (f : A' A) (x : F.HomObj G A) (Δ : C) (a : A'.obj Δ) :
(map f x).app Δ a = x.app Δ (f.app Δ a)

The contravariant functor taking A : C ⥤ Type w to HomObj F G A, i.e. Hom(F ⊗ -, G).

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Functor.homObjFunctor_map_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] (F G : Functor C D) {A A' : (Functor C (Type w))ᵒᵖ} (f : A A') (x : F.HomObj G (Opposite.unop A)) (X : C) (a : (Opposite.unop A').obj X) :
((F.homObjFunctor G).map f x).app X a = x.app X (f.unop.app X a)
def CategoryTheory.Functor.functorHom {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] (F G : Functor C D) :
Functor C (Type (max v' v u))

Composition of homObjFunctor with the co-Yoneda embedding, i.e. Hom(F ⊗ coyoneda(-), G). When F G : C ⥤ Type max v' v u, this is the internal hom of F and G: see Mathlib/CategoryTheory/Closed/FunctorToTypes.lean.

Equations
theorem CategoryTheory.Functor.functorHom_ext {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {X : C} {x y : (F.functorHom G).obj X} (h : ∀ (Y : C) (f : X Y), x.app Y f = y.app Y f) :
x = y
theorem CategoryTheory.Functor.functorHom_ext_iff {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} {X : C} {x y : (F.functorHom G).obj X} :
x = y ∀ (Y : C) (f : X Y), x.app Y f = y.app Y f
def CategoryTheory.Functor.functorHomEquiv {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] (F G : Functor C D) (A : Functor C (Type (max u v v'))) :
(A F.functorHom G) F.HomObj G A

The equivalence (A ⟶ F.functorHom G) ≃ HomObj F G A.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Functor.functorHomEquiv_symm_apply_app_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] (F G : Functor C D) (A : Functor C (Type (max u v v'))) (x : F.HomObj G A) (X : C) (a : A.obj X) (Y : C) (f : (Opposite.unop (coyoneda.rightOp.obj X)).obj Y) :
(((F.functorHomEquiv G A).symm x).app X a).app Y f = x.app Y (A.map f a)
@[simp]
theorem CategoryTheory.Functor.functorHomEquiv_apply_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] (F G : Functor C D) (A : Functor C (Type (max u v v'))) (φ : A F.functorHom G) (X : C) (a : A.obj X) :

Morphisms (𝟙_ (C ⥤ Type max v' v u) ⟶ F.functorHom G) are in bijection with morphisms F ⟶ G.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Functor.natTransEquiv_symm_apply_app {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] {F G : Functor C D} (f : F G) (x✝ : C) (x✝¹ : (MonoidalCategoryStruct.tensorUnit (Functor C (Type (max v' v u)))).obj x✝) :
@[simp]
theorem CategoryTheory.Enriched.Functor.natTransEquiv_symm_app_app_apply {C : Type u} [Category.{v, u} C] {D : Type u'} [Category.{v', u'} D] (F G : Functor C D) (f : F G) {X : C} {a : (MonoidalCategoryStruct.tensorUnit (Functor C (Type (max v' v u)))).obj X} (Y : C) {φ : X Y} :
((Functor.natTransEquiv.symm f).app X a).app Y φ = f.app Y
Equations
  • One or more equations did not get rendered due to their size.