# Skeleton of a category #

Define skeletal categories as categories in which any two isomorphic objects are equal.

Construct the skeleton of an arbitrary category by taking isomorphism classes, and show it is a skeleton of the original category.

In addition, 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. In addition, some of the commutative diagrams about the functors commute definitionally on the nose which is convenient in practice.

def CategoryTheory.Skeletal (C : Type u₁) [] :

A category is skeletal if isomorphic objects are equal.

Equations
• = ∀ ⦃X Y : C⦄, X = Y
Instances For
structure CategoryTheory.IsSkeletonOf (C : Type u₁) [] (D : Type u₂) [] (F : ) :

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

• skel :

The category D has isomorphic objects equal

• eqv : F.IsEquivalence

The functor F is an equivalence

Instances For
theorem CategoryTheory.IsSkeletonOf.skel {C : Type u₁} [] {D : Type u₂} [] {F : } (self : ) :

The category D has isomorphic objects equal

theorem CategoryTheory.IsSkeletonOf.eqv {C : Type u₁} [] {D : Type u₂} [] {F : } (self : ) :
F.IsEquivalence

The functor F is an equivalence

theorem CategoryTheory.Functor.eq_of_iso {C : Type u₁} [] {D : Type u₂} [] {F₁ : } {F₂ : } [] (hC : ) (hF : F₁ F₂) :
F₁ = F₂

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

theorem CategoryTheory.functor_skeletal {C : Type u₁} [] {D : Type u₂} [] [] (hC : ) :

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

def CategoryTheory.Skeleton (C : Type u₁) [] :
Type u₁

Construct the skeleton category as the induced category on the isomorphism classes, and derive its category structure.

Equations
Instances For
instance CategoryTheory.instInhabitedSkeleton (C : Type u₁) [] [] :
Equations
• = { default := default }
noncomputable instance CategoryTheory.instCategorySkeleton (C : Type u₁) [] :
Equations
@[simp]
theorem CategoryTheory.fromSkeleton_obj (C : Type u₁) [] :
∀ (a : ), .obj a = a.out
@[simp]
theorem CategoryTheory.fromSkeleton_map (C : Type u₁) [] :
∀ {X Y : CategoryTheory.InducedCategory C Quotient.out} (f : X Y), .map f = f
noncomputable def CategoryTheory.fromSkeleton (C : Type u₁) [] :

The functor from the skeleton of C to C.

Equations
Instances For
noncomputable instance CategoryTheory.instFullSkeletonFromSkeleton (C : Type u₁) [] :
.Full
Equations
• =
noncomputable instance CategoryTheory.instFaithfulSkeletonFromSkeleton (C : Type u₁) [] :
.Faithful
Equations
• =
instance CategoryTheory.instEssSurjSkeletonFromSkeleton (C : Type u₁) [] :
.EssSurj
Equations
• =
noncomputable instance CategoryTheory.fromSkeleton.isEquivalence (C : Type u₁) [] :
.IsEquivalence
Equations
• =
noncomputable def CategoryTheory.skeletonEquivalence (C : Type u₁) [] :

The equivalence between the skeleton and the category itself.

Equations
• = .asEquivalence
Instances For

The skeleton of C given by choice is a skeleton of C.

noncomputable def CategoryTheory.Equivalence.skeletonEquiv {C : Type u₁} [] {D : Type u₂} [] (e : C D) :

Two categories which are categorically equivalent have skeletons with equivalent objects.

Equations
• One or more equations did not get rendered due to their size.
Instances For
def CategoryTheory.ThinSkeleton (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. If your original category is not thin, you probably want to be using skeleton instead of this.

Equations
Instances For
instance CategoryTheory.inhabitedThinSkeleton (C : Type u₁) [] [] :
Equations
Equations
@[simp]
theorem CategoryTheory.toThinSkeleton_map (C : Type u₁) [] :
∀ {X Y : C} (f : X Y),
@[simp]
theorem CategoryTheory.toThinSkeleton_obj (C : Type u₁) [] (a : C) :
.obj a =

The functor from a category to its thin skeleton.

Equations
• = { obj := Quotient.mk', map := fun {X Y : C} (f : X Y) => , map_id := , map_comp := }
Instances For

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 CategoryTheory.ThinSkeleton.thin (C : Type u₁) [] :

The thin skeleton is thin.

Equations
• =
@[simp]
theorem CategoryTheory.ThinSkeleton.map_obj {C : Type u₁} [] {D : Type u₂} [] (F : ) :
∀ (a : ), .obj a = Quotient.map F.obj a
@[simp]
theorem CategoryTheory.ThinSkeleton.map_map {C : Type u₁} [] {D : Type u₂} [] (F : ) {X : } {Y : } :
∀ (a : X Y), .map a = Quotient.recOnSubsingleton₂ (motive := fun (x x_1 : ) => (x x_1)(Quotient.map F.obj x Quotient.map F.obj x_1)) X Y (fun (x y : C) (k : x y) => ) a
def CategoryTheory.ThinSkeleton.map {C : Type u₁} [] {D : Type u₂} [] (F : ) :

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

Equations
• One or more equations did not get rendered due to their size.
Instances For
theorem CategoryTheory.ThinSkeleton.comp_toThinSkeleton {C : Type u₁} [] {D : Type u₂} [] (F : ) :
F.comp =
def CategoryTheory.ThinSkeleton.mapNatTrans {C : Type u₁} [] {D : Type u₂} [] {F₁ : } {F₂ : } (k : F₁ F₂) :

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

Equations
• One or more equations did not get rendered due to their size.
Instances For
def CategoryTheory.ThinSkeleton.map₂ObjMap {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] (F : ) :

Given a bifunctor, we descend to a function on objects of ThinSkeleton

Equations
Instances For
def CategoryTheory.ThinSkeleton.map₂Functor {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] (F : ) :

For each x : ThinSkeleton C, we promote map₂ObjMap F x to a functor

Equations
• One or more equations did not get rendered due to their size.
Instances For
def CategoryTheory.ThinSkeleton.map₂NatTrans {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] (F : ) {x₁ : } {x₂ : } :
(x₁ x₂)

This provides natural transformations map₂Functor F x₁ ⟶ map₂Functor F x₂ given x₁ ⟶ x₂

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem CategoryTheory.ThinSkeleton.map₂_obj {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] (F : ) :
∀ (a : ),
@[simp]
theorem CategoryTheory.ThinSkeleton.map₂_map {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] (F : ) :
∀ {X Y : } (a : X Y),
def CategoryTheory.ThinSkeleton.map₂ {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] (F : ) :

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

Equations
• One or more equations did not get rendered due to their size.
Instances For
instance CategoryTheory.ThinSkeleton.toThinSkeleton_faithful (C : Type u₁) [] [] :
.Faithful
Equations
• =
@[simp]
theorem CategoryTheory.ThinSkeleton.fromThinSkeleton_map (C : Type u₁) [] [] {x : } {y : } :
∀ (a : x y), = Quotient.recOnSubsingleton₂ (motive := fun (x x_1 : ) => (x x_1)()) x y (fun (X Y : C) (f : X Y) => ) a
@[simp]
theorem CategoryTheory.ThinSkeleton.fromThinSkeleton_obj (C : Type u₁) [] [] :
∀ (a : ), = a.out
noncomputable def CategoryTheory.ThinSkeleton.fromThinSkeleton (C : Type u₁) [] [] :

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

Equations
• One or more equations did not get rendered due to their size.
Instances For
noncomputable def CategoryTheory.ThinSkeleton.equivalence (C : Type u₁) [] [] :

The equivalence between the thin skeleton and the category itself.

Equations
• One or more equations did not get rendered due to their size.
Instances For
noncomputable instance CategoryTheory.ThinSkeleton.fromThinSkeleton_isEquivalence (C : Type u₁) [] [] :
.IsEquivalence
Equations
• =
theorem CategoryTheory.ThinSkeleton.equiv_of_both_ways {C : Type u₁} [] [] {X : C} {Y : C} (f : X Y) (g : Y X) :
X Y
Equations
• CategoryTheory.ThinSkeleton.thinSkeletonPartialOrder = let __src := ;
theorem CategoryTheory.ThinSkeleton.map_comp_eq {C : Type u₁} [] {D : Type u₂} [] {E : Type u₃} [] [] (F : ) (G : ) :
theorem CategoryTheory.ThinSkeleton.map_iso_eq {C : Type u₁} [] {D : Type u₂} [] [] {F₁ : } {F₂ : } (h : F₁ F₂) :

fromThinSkeleton C exhibits the thin skeleton as a skeleton.

Equations
• CategoryTheory.ThinSkeleton.isSkeletonOfInhabited = { default := }
def CategoryTheory.ThinSkeleton.lowerAdjunction {C : Type u₁} [] {D : Type u₂} [] (R : ) (L : ) (h : L R) :

An adjunction between thin categories gives an adjunction between their thin skeletons.

Equations
• One or more equations did not get rendered due to their size.
Instances For
noncomputable def CategoryTheory.Equivalence.thinSkeletonOrderIso {C : Type u₁} [] {α : Type u_1} [] [] (e : C α) :

When e : C ≌ α is a categorical equivalence from a thin category C to some partial order α, the ThinSkeleton C is order isomorphic to α.

Equations
• e.thinSkeletonOrderIso = (.trans e).toOrderIso
Instances For