Documentation

Mathlib.CategoryTheory.Skeletal

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.

A category is skeletal if isomorphic objects are equal.

Instances For

    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 : Skeletal D

      The category D has isomorphic objects equal

    • The functor F is an equivalence

    Instances For
      theorem CategoryTheory.Functor.eq_of_iso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F₁ F₂ : Functor D C} [Quiver.IsThin C] (hC : Skeletal C) (hF : F₁ F₂) :
      F₁ = F₂

      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. CategoryTheory.functor_thin shows it is thin also.

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

      Instances For
        @[implicit_reducible]
        @[implicit_reducible]
        noncomputable instance CategoryTheory.instInhabitedSkeleton (C : Type u_1) [Category.{u_2, u_1} C] [Inhabited C] :
        Inhabited (Skeleton C)
        @[implicit_reducible]
        noncomputable instance CategoryTheory.instCoeSortSkeleton (C : Type u_1) [Category.{u_3, u_1} C] (α : Sort u_2) [CoeSort C α] :
        CoeSort (Skeleton C) α

        The functor from the skeleton of C to C.

        Instances For
          @[simp]
          theorem CategoryTheory.fromSkeleton_map (C : Type u₁) [Category.{v₁, u₁} C] {X✝ Y✝ : InducedCategory C Quotient.out} (f : X✝ Y✝) :
          (fromSkeleton C).map f = f.hom
          @[simp]
          theorem CategoryTheory.fromSkeleton_obj (C : Type u₁) [Category.{v₁, u₁} C] (a✝ : _root_.Quotient (isIsomorphicSetoid C)) :
          (fromSkeleton C).obj a✝ = a✝.out
          @[reducible, inline]

          The class of an object in the skeleton.

          Instances For

            The isomorphism between ⟦X⟧.out and X.

            Instances For
              @[deprecated CategoryTheory.fromSkeletonToSkeletonIso (since := "2025-12-18")]

              Alias of CategoryTheory.fromSkeletonToSkeletonIso.


              The isomorphism between ⟦X⟧.out and X.

              Instances For

                An inverse to fromSkeleton C that forms an equivalence with it.

                Instances For

                  The equivalence between the skeleton and the category itself.

                  Instances For

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

                    noncomputable def CategoryTheory.Skeleton.isoOfEq {C : Type u₁} [Category.{v₁, u₁} C] {X Y : C} (h : toSkeleton X = toSkeleton Y) :
                    X Y

                    Provides a (noncomputable) isomorphism X ≅ Y given that toSkeleton X = toSkeleton Y.

                    Instances For
                      theorem CategoryTheory.toSkeleton_eq_iff {C : Type u₁} [Category.{v₁, u₁} C] {X : C} {Y : Skeleton C} :
                      toSkeleton X = Y Nonempty (X (fromSkeleton C).obj Y)

                      From a functor C ⥤ D, construct a map of skeletons Skeleton C → Skeleton D.

                      Instances For

                        A natural isomorphism between X ↦ ⟦X⟧ ↦ ⟦FX⟧ and X ↦ FX ↦ ⟦FX⟧. On the level of categories, these are C ⥤ Skeleton C ⥤ Skeleton D and C ⥤ D ⥤ Skeleton D. So this says that the square formed by these 4 objects and 4 functors commutes.

                        Instances For

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

                          Instances For

                            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.

                            Instances For
                              @[reducible, inline]

                              Convenience constructor for ThinSkeleton.

                              Instances For
                                @[implicit_reducible]
                                instance CategoryTheory.inhabitedThinSkeleton (C : Type u₁) [Category.{v₁, u₁} C] [Inhabited C] :
                                Inhabited (ThinSkeleton C)

                                The functor from a category to its thin skeleton.

                                Instances For
                                  @[simp]
                                  theorem CategoryTheory.toThinSkeleton_map (C : Type u₁) [Category.{v₁, u₁} C] {X✝ Y✝ : C} (f : X✝ Y✝) :

                                  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.

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

                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.ThinSkeleton.map_obj {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) (a✝ : _root_.Quotient (isIsomorphicSetoid C)) :
                                    (map F).obj a✝ = Quotient.map F.obj a✝
                                    @[simp]
                                    theorem CategoryTheory.ThinSkeleton.map_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) {X Y : ThinSkeleton C} (a✝ : X Y) :
                                    (map F).map a✝ = Quotient.recOnSubsingleton₂ (motive := fun (x x_1 : ThinSkeleton C) => (x x_1) → (Quotient.map F.obj x Quotient.map F.obj x_1)) X Y (fun (x x_1 : C) (k : x x_1) => homOfLE ) a✝
                                    def CategoryTheory.ThinSkeleton.mapNatTrans {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F₁ F₂ : Functor C D} (k : F₁ F₂) :
                                    map F₁ map F₂

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

                                    Instances For

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

                                      Instances For

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

                                        Instances For
                                          def CategoryTheory.ThinSkeleton.map₂NatTrans {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C (Functor D E)) {x₁ x₂ : ThinSkeleton C} :
                                          (x₁ x₂) → (map₂Functor F x₁ map₂Functor F x₂)

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

                                          Instances For

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

                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.ThinSkeleton.map₂_map {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C (Functor D E)) {X✝ Y✝ : ThinSkeleton C} (a✝ : X✝ Y✝) :
                                              (map₂ F).map a✝ = map₂NatTrans F a✝

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

                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.ThinSkeleton.fromThinSkeleton_map (C : Type u₁) [Category.{v₁, u₁} C] [Quiver.IsThin C] {x y : ThinSkeleton C} (a✝ : x y) :
                                                (fromThinSkeleton C).map a✝ = Quotient.recOnSubsingleton₂ (motive := fun (x x_1 : ThinSkeleton C) => (x x_1) → (Quotient.out x Quotient.out x_1)) x y (fun (X Y : C) (f : X Y) => CategoryStruct.comp (Nonempty.some ).hom (CategoryStruct.comp (Nonempty.some ) (Nonempty.some ).inv)) a✝

                                                The equivalence between the thin skeleton and the category itself.

                                                Instances For
                                                  theorem CategoryTheory.ThinSkeleton.equiv_of_both_ways {C : Type u₁} [Category.{v₁, u₁} C] [Quiver.IsThin C] {X Y : C} (f : X Y) (g : Y X) :
                                                  X Y
                                                  theorem CategoryTheory.ThinSkeleton.map_iso_eq {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] [Quiver.IsThin C] {F₁ F₂ : Functor D C} (h : F₁ F₂) :
                                                  map F₁ = map F₂

                                                  Applying fromThinSkeleton, F and then toThinSkeleton is isomorphic to applying map F.

                                                  Instances For

                                                    Applying map F and then fromThinSkeleton is isomorphic to first applying fromThinSkeleton and then applying F.

                                                    Instances For

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

                                                      Instances For

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

                                                        Instances For