Documentation

Mathlib.CategoryTheory.Filtered.Final

Final functors with filtered (co)domain #

If C is a filtered category, then the usual equivalent conditions for a functor F : C ⥤ D to be final can be restated. We show:

References #

If StructuredArrow d F is filtered for any d : D, then F : C ⥤ D is final. This is simply because filtered categories are connected. More profoundly, the converse is also true if C is filtered, see final_iff_isFiltered_structuredArrow.

If CostructuredArrow F d is filtered for any d : D, then F : C ⥤ D is initial. This is simply because cofiltered categories are connectged. More profoundly, the converse is also true if C is cofiltered, see initial_iff_isCofiltered_costructuredArrow.

theorem CategoryTheory.Functor.final_of_exists_of_isFiltered {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (F : CategoryTheory.Functor C D) [CategoryTheory.IsFilteredOrEmpty C] (h₁ : ∀ (d : D), ∃ (c : C), Nonempty (d F.obj c)) (h₂ : ∀ {d : D} {c : C} (s s' : d F.obj c), ∃ (c' : C) (t : c c'), CategoryTheory.CategoryStruct.comp s (F.map t) = CategoryTheory.CategoryStruct.comp s' (F.map t)) :
F.Final

If C is filtered, then we can give an explicit condition for a functor F : C ⥤ D to be final. The converse is also true, see final_iff_of_isFiltered.

theorem CategoryTheory.Functor.initial_of_exists_of_isCofiltered {C : Type u₁} [CategoryTheory.Category.{v₁, u₁} C] {D : Type u₂} [CategoryTheory.Category.{v₂, u₂} D] (F : CategoryTheory.Functor C D) [CategoryTheory.IsCofilteredOrEmpty C] (h₁ : ∀ (d : D), ∃ (c : C), Nonempty (F.obj c d)) (h₂ : ∀ {d : D} {c : C} (s s' : F.obj c d), ∃ (c' : C) (t : c' c), CategoryTheory.CategoryStruct.comp (F.map t) s = CategoryTheory.CategoryStruct.comp (F.map t) s') :
F.Initial

If C is cofiltered, then we can give an explicit condition for a functor F : C ⥤ D to be final. The converse is also true, see initial_iff_of_isCofiltered.

Any under category on a filtered or empty category is filtered. (Note that under categories are always cofiltered since they have an initial object.)

Equations
  • =

Any over category on a cofiltered or empty category is cofiltered. (Note that over categories are always filtered since they have a terminal object.)

Equations
  • =

The forgetful functor of the under category on any filtered or empty category is final.

Equations
  • =

The forgetful functor of the over category on any cofiltered or empty category is initial.

Equations
  • =
theorem CategoryTheory.Functor.final_iff_of_isFiltered {C : Type v₁} [CategoryTheory.Category.{v₁, v₁} C] {D : Type u₂} [CategoryTheory.Category.{v₁, u₂} D] (F : CategoryTheory.Functor C D) [CategoryTheory.IsFilteredOrEmpty C] :
F.Final (∀ (d : D), ∃ (c : C), Nonempty (d F.obj c)) ∀ {d : D} {c : C} (s s' : d F.obj c), ∃ (c' : C) (t : c c'), CategoryTheory.CategoryStruct.comp s (F.map t) = CategoryTheory.CategoryStruct.comp s' (F.map t)

If C is filtered, then we can give an explicit condition for a functor F : C ⥤ D to be final.

theorem CategoryTheory.Functor.initial_iff_of_isCofiltered {C : Type v₁} [CategoryTheory.Category.{v₁, v₁} C] {D : Type u₂} [CategoryTheory.Category.{v₁, u₂} D] (F : CategoryTheory.Functor C D) [CategoryTheory.IsCofilteredOrEmpty C] :
F.Initial (∀ (d : D), ∃ (c : C), Nonempty (F.obj c d)) ∀ {d : D} {c : C} (s s' : F.obj c d), ∃ (c' : C) (t : c' c), CategoryTheory.CategoryStruct.comp (F.map t) s = CategoryTheory.CategoryStruct.comp (F.map t) s'

If C is cofiltered, then we can give an explicit condition for a functor F : C ⥤ D to be initial.

theorem CategoryTheory.Functor.Final.exists_coeq {C : Type v₁} [CategoryTheory.Category.{v₁, v₁} C] {D : Type u₂} [CategoryTheory.Category.{v₁, u₂} D] (F : CategoryTheory.Functor C D) [CategoryTheory.IsFilteredOrEmpty C] [F.Final] {d : D} {c : C} (s : d F.obj c) (s' : d F.obj c) :
∃ (c' : C) (t : c c'), CategoryTheory.CategoryStruct.comp s (F.map t) = CategoryTheory.CategoryStruct.comp s' (F.map t)
theorem CategoryTheory.Functor.Initial.exists_eq {C : Type v₁} [CategoryTheory.Category.{v₁, v₁} C] {D : Type u₂} [CategoryTheory.Category.{v₁, u₂} D] (F : CategoryTheory.Functor C D) [CategoryTheory.IsCofilteredOrEmpty C] [F.Initial] {d : D} {c : C} (s : F.obj c d) (s' : F.obj c d) :
∃ (c' : C) (t : c' c), CategoryTheory.CategoryStruct.comp (F.map t) s = CategoryTheory.CategoryStruct.comp (F.map t) s'

If C is filtered, then F : C ⥤ D is final if and only if StructuredArrow d F is filtered for all d : D.

If C is cofiltered, then F : C ⥤ D is initial if and only if CostructuredArrow F d is cofiltered for all d : D.

If C is filtered, then the structured arrow category on the diagonal functor C ⥤ C × C is filtered as well.

Equations
  • =

The diagonal functor on any filtered category is final.

Equations
  • =

If C is cofiltered, then the costructured arrow category on the diagonal functor C ⥤ C × C is cofiltered as well.

Equations
  • =

The diagonal functor on any cofiltered category is initial.

Equations
  • =

The functor StructuredArrow.proj : StructuredArrow Y T ⥤ C is final if T : C ⥤ D is final and C is filtered.

Equations
  • =

The functor CostructuredArrow.proj : CostructuredArrow Y T ⥤ C is initial if T : C ⥤ D is initial and C is cofiltered.

Equations
  • =