Documentation

Mathlib.AlgebraicTopology.SimplicialSet.HomotopyCat

The homotopy category of a simplicial set #

The homotopy category of a simplicial set is defined as a quotient of the free category on its underlying reflexive quiver (equivalently its one truncation). The quotient imposes an additional hom relation on this free category, asserting that f ≫ g = h whenever f, g, and h are respectively the 2nd, 0th, and 1st faces of a 2-simplex.

In fact, the associated functor

SSet.hoFunctor : SSet.{u} ⥤ Cat.{u, u} := SSet.truncation 2 ⋙ SSet.hoFunctor₂

is defined by first restricting from simplicial sets to 2-truncated simplicial sets (throwing away the data that is not used for the construction of the homotopy category) and then composing with an analogously defined SSet.hoFunctor₂ : SSet.Truncated.{u} 2 ⥤ Cat.{u,u} implemented relative to the syntax of the 2-truncated simplex category.

In the file Mathlib/AlgebraicTopology/SimplicialSet/NerveAdjunction.lean we show the functor SSet.hoFunctor to be left adjoint to the nerve by providing an analogous decomposition of the nerve functor, made by possible by the fact that nerves of categories are 2-coskeletal, and then composing a pair of adjunctions, which factor through the category of 2-truncated simplicial sets.

A 2-truncated simplicial set S has an underlying refl quiver with S _⦋0⦌₂ as its underlying type.

Instances For
    @[deprecated SSet.Truncated.Edge (since := "2025-11-01")]

    Alias of SSet.Truncated.Edge.

    Instances For
      @[implicit_reducible]

      A 2-truncated simplicial set S has an underlying refl quiver SSet.OneTruncation₂ S.

      theorem SSet.OneTruncation₂.reflQuiver_Hom (S : Truncated 2) (x₀ x₁ : S.obj (Opposite.op { obj := SimplexCategory.mk 0, property := Truncated.Edge._proof_1 })) :
      (x₀ x₁) = Truncated.Edge x₀ x₁
      theorem SSet.OneTruncation₂.hom_ext {S : Truncated 2} {x y : OneTruncation₂ S} {f g : x y} (h : f.edge = g.edge) :
      f = g
      theorem SSet.OneTruncation₂.hom_ext_iff {S : Truncated 2} {x y : OneTruncation₂ S} {f g : x y} :
      f = g f.edge = g.edge

      The prefunctor on refl quivers OneTruncation₂ induced by a morphism of 2-truncated simplicial sets.

      Instances For
        @[simp]
        theorem SSet.OneTruncation₂.map_obj {S T : Truncated 2} (f : S T) (x : OneTruncation₂ S) :
        (map f).obj x = f.app (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_1 }) x
        @[simp]
        theorem SSet.OneTruncation₂.map_map {S T : Truncated 2} (f : S T) {X✝ Y✝ : OneTruncation₂ S} (e : X✝ Y✝) :

        The functor that carries a 2-truncated simplicial set to its underlying refl quiver.

        Instances For
          @[simp]
          theorem SSet.OneTruncation₂.homOfEq_edge {X : Truncated 2} {x₁ y₁ x₂ y₂ : OneTruncation₂ X} (f : x₁ y₁) (hx : x₁ = x₂) (hy : y₁ = y₂) :
          (Quiver.homOfEq f hx hy).edge = f.edge

          An equivalence between the type of objects underlying a category and the type of 0-simplices in the 2-truncated nerve.

          Instances For

            The refl quiver underlying a nerve is isomorphic to the refl quiver underlying the category.

            Instances For
              @[deprecated SSet.OneTruncation₂.nerve_hom_ext (since := "2025-11-06")]

              Alias of SSet.OneTruncation₂.nerve_hom_ext.

              The refl quiver underlying a nerve is naturally isomorphic to the refl quiver underlying the category.

              Instances For
                @[simp]
                theorem SSet.OneTruncation₂.ofNerve₂.natIso_inv_app_obj_map (X : CategoryTheory.Cat) (a : X) {X✝ Y✝ : Fin 1} (x✝ : X✝ Y✝) :
                @[simp]
                theorem SSet.OneTruncation₂.ofNerve₂.natIso_inv_app_obj_obj (X : CategoryTheory.Cat) (a : X) (x✝ : Fin 1) :
                ((natIso.inv.app X).obj a).obj x✝ = a

                The map that picks up the initial vertex of a 2-simplex, as a morphism in the 2-truncated simplex category.

                Instances For

                  The map that picks up the middle vertex of a 2-simplex, as a morphism in the 2-truncated simplex category.

                  Instances For

                    The map that picks up the final vertex of a 2-simplex, as a morphism in the 2-truncated simplex category.

                    Instances For

                      The initial vertex of a 2-simplex in a 2-truncated simplicial set.

                      Instances For

                        The middle vertex of a 2-simplex in a 2-truncated simplicial set.

                        Instances For

                          The final vertex of a 2-simplex in a 2-truncated simplicial set.

                          Instances For

                            The 0th face of a 2-simplex, as a morphism in the 2-truncated simplex category.

                            Instances For

                              The 1st face of a 2-simplex, as a morphism in the 2-truncated simplex category.

                              Instances For

                                The 2nd face of a 2-simplex, as a morphism in the 2-truncated simplex category.

                                Instances For

                                  The arrow in the ReflQuiver OneTruncation₂ V of a 2-truncated simplicial set arising from the 0th face of a 2-simplex.

                                  Instances For

                                    The arrow in the ReflQuiver OneTruncation₂ V of a 2-truncated simplicial set arising from the 1st face of a 2-simplex.

                                    Instances For

                                      The arrow in the ReflQuiver OneTruncation₂ V of a 2-truncated simplicial set arising from the 2nd face of a 2-simplex.

                                      Instances For

                                        The 2-simplices in a 2-truncated simplicial set V generate a hom relation on the free category on the underlying refl quiver of V.

                                        Instances For
                                          @[deprecated "HoRel₂.of_compStruct" (since := "2025-11-06")]

                                          The type underlying the homotopy category of a 2-truncated simplicial set V.

                                          Instances For

                                            A canonical functor from the free category on the refl quiver underlying a 2-truncated simplicial set V to its homotopy category.

                                            Instances For

                                              Constructor for objects of the homotopy category of a 2-truncated simplicial set.

                                              Instances For
                                                theorem SSet.Truncated.HomotopyCategory.ext {V : Truncated 2} {x y : V.HomotopyCategory} (h : x.as.as = y.as.as) :
                                                x = y
                                                theorem SSet.Truncated.HomotopyCategory.cases_on {V : Truncated 2} {motive : V.HomotopyCategoryProp} (h : ∀ (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })), motive (mk x)) (x : V.HomotopyCategory) :
                                                motive x
                                                def SSet.Truncated.HomotopyCategory.homMk {V : Truncated 2} {x₀ x₁ : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} (e : Edge x₀ x₁) :
                                                mk x₀ mk x₁

                                                The morphism in the homotopy category of a 2-truncated simplicial set that is induced by an edge.

                                                Instances For
                                                  theorem SSet.Truncated.HomotopyCategory.homMk_comp_homMk {V : Truncated 2} {x₀ x₁ x₂ : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (h : e₀₁.CompStruct e₁₂ e₀₂) :
                                                  CategoryTheory.CategoryStruct.comp (homMk e₀₁) (homMk e₁₂) = homMk e₀₂
                                                  theorem SSet.Truncated.HomotopyCategory.homMk_comp_homMk_assoc {V : Truncated 2} {x₀ x₁ x₂ : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (h : e₀₁.CompStruct e₁₂ e₀₂) {Z : V.HomotopyCategory} (h✝ : mk x₂ Z) :

                                                  If V is a 2-truncated simplicial sets, this is the family of morphisms in V.HomotopyCategory corresponding to the edges of V. (Any morphism in V.HomotopyCategory is in the multiplicative closure of this family of morphisms, see multiplicativeClosure_morphismPropertyHomMk.)

                                                  Instances For
                                                    def SSet.Truncated.HomotopyCategory.lift {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] (obj : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })D) (map : {x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} → Edge x y → (obj x obj y)) (map_id : ∀ (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })), map (Edge.id x) = CategoryTheory.CategoryStruct.id (obj x)) (map_comp : ∀ {x₀ x₁ x₂ : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (x : e₀₁.CompStruct e₁₂ e₀₂), CategoryTheory.CategoryStruct.comp (map e₀₁) (map e₁₂) = map e₀₂) :

                                                    Constructor for functors from the homotopy category.

                                                    Instances For
                                                      @[simp]
                                                      theorem SSet.Truncated.HomotopyCategory.lift_obj_mk {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] (obj : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })D) (map : {x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} → Edge x y → (obj x obj y)) (map_id : ∀ (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })), map (Edge.id x) = CategoryTheory.CategoryStruct.id (obj x)) (map_comp : ∀ {x₀ x₁ x₂ : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (x : e₀₁.CompStruct e₁₂ e₀₂), CategoryTheory.CategoryStruct.comp (map e₀₁) (map e₁₂) = map e₀₂) (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) :
                                                      (lift obj (fun {x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} => map) map_id ).obj (mk x) = obj x
                                                      @[simp]
                                                      theorem SSet.Truncated.HomotopyCategory.lift_map_homMk {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] (obj : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })D) (map : {x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} → Edge x y → (obj x obj y)) (map_id : ∀ (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })), map (Edge.id x) = CategoryTheory.CategoryStruct.id (obj x)) (map_comp : ∀ {x₀ x₁ x₂ : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (x : e₀₁.CompStruct e₁₂ e₀₂), CategoryTheory.CategoryStruct.comp (map e₀₁) (map e₁₂) = map e₀₂) {x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} (e : Edge x y) :
                                                      (lift obj (fun {x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })} => map) map_id ).map (homMk e) = map e
                                                      def SSet.Truncated.HomotopyCategory.mkNatTrans {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] {F G : CategoryTheory.Functor V.HomotopyCategory D} (φ : (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) → F.obj (mk x) G.obj (mk x)) ( : ∀ ⦃x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })⦄ (e : Edge x y), CategoryTheory.CategoryStruct.comp (F.map (homMk e)) (φ y) = CategoryTheory.CategoryStruct.comp (φ x) (G.map (homMk e)) := by cat_disch) :
                                                      F G

                                                      Constructor for natural transformations between functors from V.HomotopyCategory.

                                                      Instances For
                                                        @[simp]
                                                        theorem SSet.Truncated.HomotopyCategory.mkNatTrans_app_mk {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] {F G : CategoryTheory.Functor V.HomotopyCategory D} (φ : (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) → F.obj (mk x) G.obj (mk x)) ( : ∀ ⦃x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })⦄ (e : Edge x y), CategoryTheory.CategoryStruct.comp (F.map (homMk e)) (φ y) = CategoryTheory.CategoryStruct.comp (φ x) (G.map (homMk e)) := by cat_disch) (v : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) :
                                                        (mkNatTrans φ ).app (mk v) = φ v
                                                        def SSet.Truncated.HomotopyCategory.mkNatIso {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] {F G : CategoryTheory.Functor V.HomotopyCategory D} (iso : (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) → F.obj (mk x) G.obj (mk x)) (hiso : ∀ ⦃x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })⦄ (e : Edge x y), CategoryTheory.CategoryStruct.comp (F.map (homMk e)) (iso y).hom = CategoryTheory.CategoryStruct.comp (iso x).hom (G.map (homMk e)) := by cat_disch) :
                                                        F G

                                                        Constructor for natural isomorphisms between functors from V.HomotopyCategory.

                                                        Instances For
                                                          @[simp]
                                                          theorem SSet.Truncated.HomotopyCategory.mkNatIso_hom_app_mk {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] {F G : CategoryTheory.Functor V.HomotopyCategory D} (iso : (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) → F.obj (mk x) G.obj (mk x)) (hiso : ∀ ⦃x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })⦄ (e : Edge x y), CategoryTheory.CategoryStruct.comp (F.map (homMk e)) (iso y).hom = CategoryTheory.CategoryStruct.comp (iso x).hom (G.map (homMk e)) := by cat_disch) (v : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) :
                                                          (mkNatIso iso hiso).hom.app (mk v) = (iso v).hom
                                                          @[simp]
                                                          theorem SSet.Truncated.HomotopyCategory.mkNatIso_inv_app_mk {V : Truncated 2} {D : Type u_1} [CategoryTheory.Category.{v_1, u_1} D] {F G : CategoryTheory.Functor V.HomotopyCategory D} (iso : (x : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) → F.obj (mk x) G.obj (mk x)) (hiso : ∀ ⦃x y : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })⦄ (e : Edge x y), CategoryTheory.CategoryStruct.comp (F.map (homMk e)) (iso y).hom = CategoryTheory.CategoryStruct.comp (iso x).hom (G.map (homMk e)) := by cat_disch) (v : V.obj (Opposite.op { obj := SimplexCategory.mk 0, property := OneTruncation₂._proof_1 })) :
                                                          (mkNatIso iso hiso).inv.app (mk v) = (iso v).inv

                                                          If X : Truncated 2 has a unique 0-simplex and (at most) one 1-simplex, then X.HomotopyCategory is a terminal object in Cat.

                                                          Instances For

                                                            A map of 2-truncated simplicial sets induces a functor between homotopy categories.

                                                            Instances For

                                                              The functor that takes a 2-truncated simplicial set to its homotopy category.

                                                              Instances For

                                                                By Quotient.lift_unique' (not Quotient.lift) we have that quotientFunctor V is an epimorphism.

                                                                The functor that takes a simplicial set to its homotopy category by passing through the 2-truncation.

                                                                Instances For

                                                                  For a simplicial set X, the underlying type of hoFunctor.obj X is equivalent to X _⦋0⦌.

                                                                  Instances For
                                                                    @[implicit_reducible]

                                                                    Since ⦋0⦌ : SimplexCategory is terminal, Δ[0] has a unique point and thus OneTruncation₂ ((truncation 2).obj Δ[0]) has a unique inhabitant.

                                                                    @[implicit_reducible]

                                                                    Since ⦋0⦌ : SimplexCategory is terminal, Δ[0] has a unique edge and thus the homs of OneTruncation₂ ((truncation 2).obj Δ[0]) have unique inhabitants.

                                                                    The homotopy category functor preserves generic terminal objects.

                                                                    Instances For