Over and under categories
Over (and under) categories are special cases of comma categories.
- If
L
is the identity functor andR
is a constant functor, thencomma L R
is the "slice" or "over" category over the objectR
maps to. - Conversely, if
L
is a constant functor andR
is the identity functor, thencomma L R
is the "coslice" or "under" category under the objectL
maps to.
Tags
comma, slice, coslice, over, under
The over category has as objects arrows in T
with codomain X
and as morphisms commutative
triangles.
Equations
Equations
- category_theory.over.inhabited = {default := {left := inhabited.default T _inst_2, right := punit.star, hom := 𝟙 ((𝟭 T).obj (inhabited.default T))}}
To give an object in the over category, it suffices to give a morphism with codomain X
.
Equations
- category_theory.over.mk f = {left := Y, right := punit.star, hom := f}
We can set up a coercion from arrows with codomain X
to over X
. This most likely should not
be a global instance, but it is sometimes useful.
Equations
To give a morphism in the over category, it suffices to give an arrow fitting in a commutative triangle.
Construct an isomorphism in the over category given isomorphisms of the objects whose forward direction gives a commutative triangle.
Equations
- category_theory.over.iso_mk hl hw = category_theory.comma.iso_mk hl (category_theory.eq_to_iso category_theory.over.iso_mk._proof_1) _
The forgetful functor mapping an arrow to its domain.
Equations
A morphism f : X ⟶ Y
induces a functor over X ⥤ over Y
in the obvious way.
Equations
Mapping by the identity morphism is just the identity functor.
Equations
- category_theory.over.map_id = category_theory.nat_iso.of_components (λ (X : category_theory.over Y), category_theory.over.iso_mk (category_theory.iso.refl ((category_theory.over.map (𝟙 Y)).obj X).left) _) category_theory.over.map_id._proof_2
Mapping by the composite morphism f ≫ g
is the same as mapping by f
then by g
.
Equations
- category_theory.over.map_comp f g = category_theory.nat_iso.of_components (λ (X_1 : category_theory.over X), category_theory.over.iso_mk (category_theory.iso.refl ((category_theory.over.map (f ≫ g)).obj X_1).left) _) _
Equations
- category_theory.over.forget_reflects_iso = {reflects := λ (X_1 Y : category_theory.over X) (f : X_1 ⟶ Y) (t : category_theory.is_iso (category_theory.over.forget.map f)), {inv := category_theory.over.hom_mk (category_theory.is_iso.inv (category_theory.over.forget.map f)) _, hom_inv_id' := _, inv_hom_id' := _}}
Given f : Y ⟶ X, this is the obvious functor from (T/X)/f to T/Y
Equations
- f.iterated_slice_forward = {obj := λ (α : category_theory.over f), category_theory.over.mk α.hom.left, map := λ (α β : category_theory.over f) (κ : α ⟶ β), category_theory.over.hom_mk κ.left.left _, map_id' := _, map_comp' := _}
Given f : Y ⟶ X, this is the obvious functor from T/Y to (T/X)/f
Equations
- f.iterated_slice_backward = {obj := λ (g : category_theory.over f.left), category_theory.over.mk (category_theory.over.hom_mk g.hom _), map := λ (g h : category_theory.over f.left) (α : g ⟶ h), category_theory.over.hom_mk (category_theory.over.hom_mk α.left _) _, map_id' := _, map_comp' := _}
Given f : Y ⟶ X, we have an equivalence between (T/X)/f and T/Y
Equations
- f.iterated_slice_equiv = {functor := f.iterated_slice_forward, inverse := f.iterated_slice_backward, unit_iso := category_theory.nat_iso.of_components (λ (g : category_theory.over f), category_theory.over.iso_mk (category_theory.over.iso_mk (category_theory.iso.refl ((𝟭 (category_theory.over f)).obj g).left.left) _) _) _, counit_iso := category_theory.nat_iso.of_components (λ (g : category_theory.over f.left), category_theory.over.iso_mk (category_theory.iso.refl ((f.iterated_slice_backward ⋙ f.iterated_slice_forward).obj g).left) _) _, functor_unit_iso_comp' := _}
A functor F : T ⥤ D
induces a functor over X ⥤ over (F.obj X)
in the obvious way.
Equations
- category_theory.over.post F = {obj := λ (Y : category_theory.over X), category_theory.over.mk (F.map Y.hom), map := λ (Y₁ Y₂ : category_theory.over X) (f : Y₁ ⟶ Y₂), {left := F.map f.left, right := id (λ (F : T ⥤ D) (Y₁ Y₂ : category_theory.over X) (f : Y₁ ⟶ Y₂), {down := category_theory.over.post._proof_1.mpr {down := _}}) F Y₁ Y₂ f, w' := _}, map_id' := _, map_comp' := _}
The under category has as objects arrows with domain X
and as morphisms commutative
triangles.
Equations
Equations
- category_theory.under.inhabited = {default := {left := punit.star, right := inhabited.default T _inst_2, hom := 𝟙 ((category_theory.functor.from_punit (inhabited.default T)).obj punit.star)}}
To give an object in the under category, it suffices to give an arrow with domain X
.
Equations
- category_theory.under.mk f = {left := punit.star, right := Y, hom := f}
To give a morphism in the under category, it suffices to give a morphism fitting in a commutative triangle.
Construct an isomorphism in the over category given isomorphisms of the objects whose forward direction gives a commutative triangle.
Equations
- category_theory.under.iso_mk hr hw = category_theory.comma.iso_mk (category_theory.eq_to_iso category_theory.under.iso_mk._proof_1) hr _
The forgetful functor mapping an arrow to its domain.
A morphism X ⟶ Y
induces a functor under Y ⥤ under X
in the obvious way.
Equations
Mapping by the identity morphism is just the identity functor.
Equations
- category_theory.under.map_id = category_theory.nat_iso.of_components (λ (X : category_theory.under Y), category_theory.under.iso_mk (category_theory.iso.refl ((category_theory.under.map (𝟙 Y)).obj X).right) _) category_theory.under.map_id._proof_2
Mapping by the composite morphism f ≫ g
is the same as mapping by f
then by g
.
Equations
- category_theory.under.map_comp f g = category_theory.nat_iso.of_components (λ (X_1 : category_theory.under Z), category_theory.under.iso_mk (category_theory.iso.refl ((category_theory.under.map (f ≫ g)).obj X_1).right) _) _
A functor F : T ⥤ D
induces a functor under X ⥤ under (F.obj X)
in the obvious way.
Equations
- category_theory.under.post F = {obj := λ (Y : category_theory.under X), category_theory.under.mk (F.map Y.hom), map := λ (Y₁ Y₂ : category_theory.under X) (f : Y₁ ⟶ Y₂), {left := id (λ {X : T} (F : T ⥤ D) (Y₁ Y₂ : category_theory.under X) (f : Y₁ ⟶ Y₂), {down := category_theory.under.post._proof_1.mpr {down := _}}) F Y₁ Y₂ f, right := F.map f.right, w' := _}, map_id' := _, map_comp' := _}