Skeleton of a category
Define skeletal categories as categories in which any two isomorphic objects are equal.
Construct the skeleton of a thin category as a partial ordering, and (noncomputably) show it is a skeleton of the original category. The advantage of this special case being handled separately is that lemmas and definitions about orderings can be used directly, for example for the subobject lattice (TODO). In addition, some of the commutative diagrams about the functors commute definitionally on the nose which is convenient in practice.
(TODO): Construct the skeleton of a general category using choice, and show it is a skeleton.
A category is skeletal if isomorphic objects are equal.
Equations
- category_theory.skeletal C = ∀ ⦃X Y : C⦄, category_theory.is_isomorphic X Y → X = Y
- skel : category_theory.skeletal D
- eqv : category_theory.is_equivalence F
is_skeleton_of C D F
says that F : D ⥤ C
exhibits D
as a skeletal full subcategory of C
,
in particular F
is a (strong) equivalence and D
is skeletal.
If C
is thin and skeletal, then any naturally isomorphic functors to C
are equal.
If C
is thin and skeletal, D ⥤ C
is skeletal.
category_theory.functor_thin
shows it is thin also.
Construct the skeleton category by taking the quotient of objects. This construction gives a preorder with nice definitional properties, but is only really appropriate for thin categories.
Equations
Equations
- category_theory.thin_skeleton.preorder C = {le := quotient.lift₂ (λ (X Y : C), nonempty (X ⟶ Y)) _, lt := λ (a b : category_theory.thin_skeleton C), quotient.lift₂ (λ (X Y : C), nonempty (X ⟶ Y)) _ a b ∧ ¬quotient.lift₂ (λ (X Y : C), nonempty (X ⟶ Y)) _ b a, le_refl := _, le_trans := _, lt_iff_le_not_le := _}
The functor from a category to its thin skeleton.
Equations
- category_theory.to_thin_skeleton C = {obj := quotient.mk (category_theory.is_isomorphic_setoid C), map := λ (X Y : C) (f : X ⟶ Y), category_theory.hom_of_le _, map_id' := _, map_comp' := _}
The constructions here are intended to be used when the category C
is thin, even though
some of the statements can be shown without this assumption.
The thin skeleton is thin.
A functor C ⥤ D
computably lowers to a functor thin_skeleton C ⥤ thin_skeleton D
.
Equations
- category_theory.thin_skeleton.map F = {obj := quotient.map F.obj _, map := λ (X Y : category_theory.thin_skeleton C), quotient.rec_on_subsingleton₂ X Y (λ (x y : C) (k : ⟦x⟧ ⟶ ⟦y⟧), category_theory.hom_of_le _), map_id' := _, map_comp' := _}
Given a natural transformation F₁ ⟶ F₂
, induce a natural transformation map F₁ ⟶ map F₂
.
Equations
- category_theory.thin_skeleton.map_nat_trans k = {app := λ (X : category_theory.thin_skeleton C), quotient.rec_on_subsingleton X (λ (x : C), {down := {down := _}}), naturality' := _}
A functor C ⥤ D ⥤ E
computably lowers to a functor
thin_skeleton C ⥤ thin_skeleton D ⥤ thin_skeleton E
Equations
- category_theory.thin_skeleton.map₂ F = {obj := λ (x : category_theory.thin_skeleton C), {obj := λ (y : category_theory.thin_skeleton D), quotient.map₂ (λ (X : C) (Y : D), (F.obj X).obj Y) _ x y, map := λ (y₁ y₂ : category_theory.thin_skeleton D), quotient.rec_on_subsingleton x (λ (X : C), quotient.rec_on_subsingleton₂ y₁ y₂ (λ (Y₁ Y₂ : D) (hY : ⟦Y₁⟧ ⟶ ⟦Y₂⟧), category_theory.hom_of_le _)), map_id' := _, map_comp' := _}, map := λ (x₁ x₂ : category_theory.thin_skeleton C), quotient.rec_on_subsingleton₂ x₁ x₂ (λ (X₁ X₂ : C) (f : ⟦X₁⟧ ⟶ ⟦X₂⟧), {app := λ (y : category_theory.thin_skeleton D), quotient.rec_on_subsingleton y (λ (Y : D), category_theory.hom_of_le _), naturality' := _}), map_id' := _, map_comp' := _}
Use quotient.out
to create a functor out of the thin skeleton.
Equations
- category_theory.thin_skeleton.from_thin_skeleton C = {obj := quotient.out (category_theory.is_isomorphic_setoid C), map := λ (x y : category_theory.thin_skeleton C), quotient.rec_on_subsingleton₂ x y (λ (X Y : C) (f : ⟦X⟧ ⟶ ⟦Y⟧), (nonempty.some _).hom ≫ nonempty.some _ ≫ (nonempty.some _).inv), map_id' := _, map_comp' := _}
Equations
- category_theory.thin_skeleton.from_thin_skeleton_equivalence C = {inverse := category_theory.to_thin_skeleton C _inst_1, unit_iso := category_theory.nat_iso.of_components (λ (x : category_theory.thin_skeleton C), quotient.rec_on_subsingleton x (λ (X : C), category_theory.eq_to_iso _)) _, counit_iso := category_theory.nat_iso.of_components (λ (X : C), nonempty.some _) _, functor_unit_iso_comp' := _}
Equations
- category_theory.thin_skeleton.thin_skeleton_partial_order = {le := preorder.le (category_theory.thin_skeleton.preorder C), lt := preorder.lt (category_theory.thin_skeleton.preorder C), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _}
from_thin_skeleton C
exhibits the thin skeleton as a skeleton.
Equations
- category_theory.thin_skeleton.thin_skeleton_is_skeleton = {skel := _, eqv := category_theory.thin_skeleton.from_thin_skeleton_equivalence C category_theory.thin_skeleton.thin_skeleton_is_skeleton._proof_4}
Equations
- category_theory.thin_skeleton.is_skeleton_of_inhabited = {default := category_theory.thin_skeleton.thin_skeleton_is_skeleton category_theory.thin_skeleton.is_skeleton_of_inhabited._proof_3}