Over and under categories #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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.
See https://stacks.math.columbia.edu/tag/001G.
Equations
Instances for category_theory.over
Equations
- category_theory.over.inhabited = {default := {left := inhabited.default _inst_2, right := inhabited.default category_theory.discrete.inhabited, hom := 𝟙 ((𝟭 T).obj inhabited.default)}}
To give an object in the over category, it suffices to give a morphism with codomain X
.
Equations
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.
Equations
Construct an isomorphism in the over category given isomorphisms of the objects whose forward direction gives a commutative triangle.
Equations
The forgetful functor mapping an arrow to its domain.
See https://stacks.math.columbia.edu/tag/001G.
Equations
Instances for category_theory.over.forget
The natural cocone over the forgetful functor over X ⥤ T
with cocone point X
.
Equations
- category_theory.over.forget_cocone X = {X := X, ι := {app := category_theory.comma.hom (category_theory.functor.from_punit X), naturality' := _}}
A morphism f : X ⟶ Y
induces a functor over X ⥤ over Y
in the obvious way.
See https://stacks.math.columbia.edu/tag/001G.
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) _) _
If k.left
is an epimorphism, then k
is an epimorphism. In other words, over.forget X
reflects
epimorphisms.
The converse does not hold without additional assumptions on the underlying category, see
category_theory.over.epi_left_of_epi
.
If k.left
is a monomorphism, then k
is a monomorphism. In other words, over.forget X
reflects
monomorphisms.
The converse of category_theory.over.mono_left_of_mono
.
This lemma is not an instance, to avoid loops in type class inference.
If k
is a monomorphism, then k.left
is a monomorphism. In other words, over.forget X
preserves
monomorphisms.
The converse of category_theory.over.mono_of_mono_left
.
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₂), category_theory.over.hom_mk (F.map f.left) _, map_id' := _, map_comp' := _}
The under category has as objects arrows with domain X
and as morphisms commutative
triangles.
Equations
Instances for category_theory.under
Equations
To give an object in the under category, it suffices to give an arrow with domain X
.
Equations
To give a morphism in the under category, it suffices to give a morphism fitting in a commutative triangle.
Equations
Construct an isomorphism in the over category given isomorphisms of the objects whose forward direction gives a commutative triangle.
Equations
The forgetful functor mapping an arrow to its domain.
Equations
Instances for category_theory.under.forget
The natural cone over the forgetful functor under X ⥤ T
with cone point X
.
Equations
- category_theory.under.forget_cone X = {X := X, π := {app := category_theory.comma.hom (𝟭 T), naturality' := _}}
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) _) _
If k.right
is a monomorphism, then k
is a monomorphism. In other words, under.forget X
reflects epimorphisms.
The converse does not hold without additional assumptions on the underlying category, see
category_theory.under.mono_right_of_mono
.
If k.right
is a epimorphism, then k
is a epimorphism. In other words, under.forget X
reflects
epimorphisms.
The converse of category_theory.under.epi_right_of_epi
.
This lemma is not an instance, to avoid loops in type class inference.
If k
is a epimorphism, then k.right
is a epimorphism. In other words, under.forget X
preserves
epimorphisms.
The converse of category_theory.under.epi_of_epi_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₂), category_theory.under.hom_mk (F.map f.right) _, map_id' := _, map_comp' := _}