# mathlibdocumentation

category_theory.skeletal

# 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.

def category_theory.skeletal (C : Type u₁)  :
Prop

A category is skeletal if isomorphic objects are equal.

Equations
• = ∀ ⦃X Y : C⦄, X = Y
structure category_theory.is_skeleton_of (C : Type u₁) (D : Type u₂)  :
D CType (max u₁ u₂ v₁ v₂)
• skel :
• eqv :

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.

theorem category_theory.functor.eq_of_iso {C : Type u₁} {D : Type u₂} {F₁ F₂ : D C} [∀ (X Y : C), subsingleton (X Y)] :
(F₁ F₂)F₁ = F₂

If C is thin and skeletal, then any naturally isomorphic functors to C are equal.

theorem category_theory.functor_skeletal {C : Type u₁} {D : Type u₂} [∀ (X Y : C), subsingleton (X Y)] :

If C is thin and skeletal, D ⥤ C is skeletal. category_theory.functor_thin shows it is thin also.

def category_theory.thin_skeleton (C : Type u₁)  :
Type u₁

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
@[instance]

Equations
@[instance]
def category_theory.thin_skeleton.preorder (C : Type u₁)  :

Equations
def category_theory.to_thin_skeleton (C : Type u₁)  :

The functor from a category to its thin skeleton.

Equations
@[simp]
theorem category_theory.to_thin_skeleton_map (C : Type u₁) (X Y : C) (f : X Y) :

@[simp]
theorem category_theory.to_thin_skeleton_obj (C : Type u₁) (a : C) :

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.

@[instance]

The thin skeleton is thin.

@[simp]
theorem category_theory.thin_skeleton.map_obj {C : Type u₁} {D : Type u₂} (F : C D)  :
= _ a

@[simp]
theorem category_theory.thin_skeleton.map_map {C : Type u₁} {D : Type u₂} (F : C D) (X Y : category_theory.thin_skeleton C) :
= (λ (x y : C) (k : x y),

def category_theory.thin_skeleton.map {C : Type u₁} {D : Type u₂}  :

A functor C ⥤ D computably lowers to a functor thin_skeleton C ⥤ thin_skeleton D.

Equations
theorem category_theory.thin_skeleton.comp_to_thin_skeleton {C : Type u₁} {D : Type u₂} (F : C D) :

def category_theory.thin_skeleton.map_nat_trans {C : Type u₁} {D : Type u₂} {F₁ F₂ : C D} :
(F₁ F₂)

Given a natural transformation F₁ ⟶ F₂, induce a natural transformation map F₁ ⟶ map F₂.

Equations
@[simp]
theorem category_theory.thin_skeleton.map₂_obj_obj {C : Type u₁} {D : Type u₂} {E : Type u₃} (F : C D E)  :
.obj y = quotient.map₂ (λ (X : C) (Y : D), (F.obj X).obj Y) _ x y

@[simp]
theorem category_theory.thin_skeleton.map₂_obj_map {C : Type u₁} {D : Type u₂} {E : Type u₃} (F : C D E) (y₁ y₂ : category_theory.thin_skeleton D) :
.map = (λ (X : C), (λ (Y₁ Y₂ : D) (hY : Y₁ Y₂),

@[simp]
theorem category_theory.thin_skeleton.map₂_map {C : Type u₁} {D : Type u₂} {E : Type u₃} (F : C D E) (x₁ x₂ : category_theory.thin_skeleton C) :
= (λ (X₁ X₂ : C) (f : X₁ X₂), {app := λ (y : , (λ (Y : D), , naturality' := _})

def category_theory.thin_skeleton.map₂ {C : Type u₁} {D : Type u₂} {E : Type u₃}  :

A functor C ⥤ D ⥤ E computably lowers to a functor thin_skeleton C ⥤ thin_skeleton D ⥤ thin_skeleton E

Equations
@[instance]
def category_theory.thin_skeleton.to_thin_skeleton_faithful (C : Type u₁) [∀ (X Y : C), subsingleton (X Y)] :

@[simp]
theorem category_theory.thin_skeleton.from_thin_skeleton_map (C : Type u₁) [∀ (X Y : C), subsingleton (X Y)] (x y : category_theory.thin_skeleton C) :
= (λ (X Y : C) (f : X Y), .hom .inv)

def category_theory.thin_skeleton.from_thin_skeleton (C : Type u₁) [∀ (X Y : C), subsingleton (X Y)] :

Use quotient.out to create a functor out of the thin skeleton.

Equations
@[simp]
theorem category_theory.thin_skeleton.from_thin_skeleton_obj (C : Type u₁) [∀ (X Y : C), subsingleton (X Y)]  :

@[instance]
def category_theory.thin_skeleton.from_thin_skeleton_equivalence (C : Type u₁) [∀ (X Y : C), subsingleton (X Y)] :

Equations
theorem category_theory.thin_skeleton.equiv_of_both_ways {C : Type u₁} [∀ (X Y : C), subsingleton (X Y)] {X Y : C} :
(X Y)(Y X)X Y

@[instance]
def category_theory.thin_skeleton.thin_skeleton_partial_order {C : Type u₁} [∀ (X Y : C), subsingleton (X Y)] :

Equations
theorem category_theory.thin_skeleton.skeletal {C : Type u₁} [∀ (X Y : C), subsingleton (X Y)] :

theorem category_theory.thin_skeleton.map_comp_eq {C : Type u₁} {D : Type u₂} {E : Type u₃} [∀ (X Y : C), subsingleton (X Y)] (F : E D) (G : D C) :

theorem category_theory.thin_skeleton.map_id_eq {C : Type u₁} [∀ (X Y : C), subsingleton (X Y)] :

theorem category_theory.thin_skeleton.map_iso_eq {C : Type u₁} {D : Type u₂} [∀ (X Y : C), subsingleton (X Y)] {F₁ F₂ : D C} :
(F₁ F₂)

def category_theory.thin_skeleton.thin_skeleton_is_skeleton {C : Type u₁} [∀ (X Y : C), subsingleton (X Y)] :

from_thin_skeleton C exhibits the thin skeleton as a skeleton.

Equations
@[instance]
def category_theory.thin_skeleton.is_skeleton_of_inhabited {C : Type u₁} [∀ (X Y : C), subsingleton (X Y)] :

Equations