Documentation

Mathlib.AlgebraicTopology.SimplicialSet.NerveAdjunction

The adjunction between the nerve and the homotopy category functor #

We define an adjunction nerveAdjunction : hoFunctor ⊣ nerveFunctor between the functor that takes a simplicial set to its homotopy category and the functor that takes a category to its nerve.

Up to natural isomorphism, this is constructed as the composite of two other adjunctions, namely nerve₂Adj : hoFunctor₂ ⊣ nerveFunctor₂ between analogously-defined functors involving the category of 2-truncated simplicial sets and coskAdj 2 : truncation 2 ⊣ Truncated.cosk 2. The aforementioned natural isomorphism

cosk₂Iso : nerveFunctor ≅ nerveFunctor₂ ⋙ Truncated.cosk 2

exists because nerves of categories are 2-coskeletal.

We also prove that nerveFunctor is fully faithful, demonstrating that nerveAdjunction is reflective. Since the category of simplicial sets is cocomplete, we conclude in Mathlib/CategoryTheory/Category/Cat/Colimit.lean that the category of categories has colimits.

Finally we show that hoFunctor : SSet.{u} ⥤ Cat.{u, u} preserves finite cartesian products; note that it fails to preserve infinite products.

The goal of this section is to define SSet.Truncated.liftOfStrictSegal which allows to construct of morphism X ⟶ Y of 2-truncated simplicial sets from the data of maps on 0- and 1-simplices when Y is strict Segal.

Auxiliary definition for SSet.Truncated.liftOfStrictSegal.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem SSet.Truncated.liftOfStrictSegal.hδ'₁ {X Y : Truncated 2} (f₀ : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝¹ })) (f₁ : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹ })) (hδ₁ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝² })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝² _proof_13✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝³ _proof_13✝¹).op (f₁ x)) (hδ₀ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝³ })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁴ _proof_13✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁵ _proof_13✝³).op (f₁ x)) (H : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝ })) (y : Y.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝¹ })), f₁ (X.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁴ _proof_15✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁵ _proof_15✝¹).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁶ _proof_15✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁷ _proof_15✝³).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁸ _proof_15✝⁴).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁹ _proof_15✝⁵).op y) (hY : Y.StrictSegal) (x : X.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝² })) :
    theorem SSet.Truncated.liftOfStrictSegal.hσ'₀ {X Y : Truncated 2} (f₀ : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝¹ })) (f₁ : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹ })) (hδ₁ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝² })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝² _proof_13✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝³ _proof_13✝¹).op (f₁ x)) (hδ₀ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝³ })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁴ _proof_13✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁵ _proof_13✝³).op (f₁ x)) ( : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝⁶ })), f₁ (X.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁴ _proof_11✝⁷).op x) = Y.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁵ _proof_11✝⁸).op (f₀ x)) (hY : Y.StrictSegal) (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝⁴ })) :
    theorem SSet.Truncated.liftOfStrictSegal.hσ'₁ {X Y : Truncated 2} (f₀ : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝¹ })) (f₁ : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹ })) (hδ₁ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝² })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝² _proof_13✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝³ _proof_13✝¹).op (f₁ x)) (hδ₀ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝³ })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁴ _proof_13✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁵ _proof_13✝³).op (f₁ x)) ( : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝⁶ })), f₁ (X.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁴ _proof_11✝⁷).op x) = Y.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁵ _proof_11✝⁸).op (f₀ x)) (hY : Y.StrictSegal) (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝⁴ })) :

    Auxiliary definition for SSet.Truncated.liftOfStrictSegal.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem SSet.Truncated.liftOfStrictSegal.naturalityProperty_eq_top {X Y : Truncated 2} (f₀ : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝¹ })) (f₁ : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹ })) (hδ₁ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝² })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝² _proof_13✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝³ _proof_13✝¹).op (f₁ x)) (hδ₀ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝³ })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁴ _proof_13✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁵ _proof_13✝³).op (f₁ x)) (H : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝ })) (y : Y.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝¹ })), f₁ (X.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁴ _proof_15✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁵ _proof_15✝¹).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁶ _proof_15✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁷ _proof_15✝³).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁸ _proof_15✝⁴).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁹ _proof_15✝⁵).op y) ( : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝⁶ })), f₁ (X.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁴ _proof_11✝⁷).op x) = Y.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁵ _proof_11✝⁸).op (f₀ x)) (hY : Y.StrictSegal) :
      naturalityProperty f₀ f₁ hδ₁ hδ₀ hY =
      def SSet.Truncated.liftOfStrictSegal {X Y : Truncated 2} (f₀ : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝¹ })) (f₁ : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹ })) (hδ₁ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝² })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝² _proof_13✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝³ _proof_13✝¹).op (f₁ x)) (hδ₀ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝³ })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁴ _proof_13✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁵ _proof_13✝³).op (f₁ x)) (H : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝ })) (y : Y.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝¹ })), f₁ (X.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁴ _proof_15✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁵ _proof_15✝¹).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁶ _proof_15✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁷ _proof_15✝³).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁸ _proof_15✝⁴).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁹ _proof_15✝⁵).op y) ( : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝⁶ })), f₁ (X.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁴ _proof_11✝⁷).op x) = Y.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁵ _proof_11✝⁸).op (f₀ x)) (hY : Y.StrictSegal) :
      X Y

      Constructor for morphisms X ⟶ Y between 2-truncated simplicial sets from the data of maps on 0- and 1-simplices when Y is strict Segal.

      Equations
      Instances For
        @[simp]
        theorem SSet.Truncated.liftOfStrictSegal_app_0 {X Y : Truncated 2} (f₀ : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝¹ })) (f₁ : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹ })) (hδ₁ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝² })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝² _proof_13✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝³ _proof_13✝¹).op (f₁ x)) (hδ₀ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝³ })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁴ _proof_13✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁵ _proof_13✝³).op (f₁ x)) (H : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝ })) (y : Y.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝¹ })), f₁ (X.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁴ _proof_15✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁵ _proof_15✝¹).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁶ _proof_15✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁷ _proof_15✝³).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁸ _proof_15✝⁴).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁹ _proof_15✝⁵).op y) ( : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝⁶ })), f₁ (X.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁴ _proof_11✝⁷).op x) = Y.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁵ _proof_11✝⁸).op (f₀ x)) (hY : Y.StrictSegal) :
        (liftOfStrictSegal f₀ f₁ hδ₁ hδ₀ H hY).app (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝⁹ }) = f₀
        @[simp]
        theorem SSet.Truncated.liftOfStrictSegal_app_1 {X Y : Truncated 2} (f₀ : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝¹ })) (f₁ : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝ })Y.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹ })) (hδ₁ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝² })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝² _proof_13✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_11✝³ _proof_13✝¹).op (f₁ x)) (hδ₀ : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝³ })), f₀ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁴ _proof_13✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_11✝⁵ _proof_13✝³).op (f₁ x)) (H : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝ })) (y : Y.obj (Opposite.op { obj := SimplexCategory.mk 2, property := _proof_14✝¹ })), f₁ (X.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁴ _proof_15✝).op x) = Y.map (SimplexCategory.Truncated.δ₂ 2 _proof_12✝⁵ _proof_15✝¹).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁶ _proof_15✝²).op x) = Y.map (SimplexCategory.Truncated.δ₂ 0 _proof_12✝⁷ _proof_15✝³).op yf₁ (X.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁸ _proof_15✝⁴).op x) = Y.map (SimplexCategory.Truncated.δ₂ 1 _proof_12✝⁹ _proof_15✝⁵).op y) ( : ∀ (x : X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := _proof_11✝⁶ })), f₁ (X.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁴ _proof_11✝⁷).op x) = Y.map (SimplexCategory.Truncated.σ₂ 0 _proof_13✝⁵ _proof_11✝⁸).op (f₀ x)) (hY : Y.StrictSegal) :
        (liftOfStrictSegal f₀ f₁ hδ₁ hδ₀ H hY).app (Opposite.op { obj := SimplexCategory.mk 1, property := _proof_12✝¹⁰ }) = f₁

        Given a 2-truncated simplicial set X and a category C, this is the functor X.HomotopyCategory ⥤ C corresponding to a morphism X ⟶ (truncation 2).obj (nerve C).

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Given a 2-truncated simplicial set X and a category C, this is the morphism X ⟶ (truncation 2).obj (nerve C) corresponding to a functor X.HomotopyCategory ⥤ C.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            Given a 2-truncated simplicial set X and a category C, this is the bijection between morphism X.HomotopyCategory ⥤ C and X ⟶ (truncation 2).obj (nerve C) which is part of the adjunction SSet.Truncated.nerve₂Adj.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              The adjunction between the 2-truncated homotopy category functor and the 2-truncated nerve functor.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                The functor C ⥤ D that is reconstructed for a morphism between the 2-truncated nerves.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  The 2-truncated nerve functor is fully faithful.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    Equations
                    • One or more equations did not get rendered due to their size.

                    The adjunction between the nerve functor and the homotopy category functor is, up to isomorphism, the composite of the adjunctions SSet.coskAdj 2 and nerve₂Adj.

                    Equations
                    Instances For

                      Repleteness exists for full and faithful functors but not fully faithful functors, which is why we do this inefficiently.

                      Equations
                      • One or more equations did not get rendered due to their size.

                      The functor hoFunctor : SSet ⥤ Cat preserves binary products of simplicial sets X and Y.

                      The functor hoFunctor : SSet ⥤ Cat preserves limits of functors out of Discrete WalkingPair.

                      The functor hoFunctor : SSet ⥤ Cat preserves finite products of simplicial sets.

                      The homotopy category functor hoFunctor : SSet.{u} ⥤ Cat.{u, u} is (cartesian) monoidal.

                      Equations