Documentation

Mathlib.AlgebraicTopology.Quasicategory.TwoTruncated

2-truncated quasicategories and homotopy relations #

We define 2-truncated quasicategories Quasicategory₂ by three horn-filling properties, and the left and right homotopy relations HomotopicL and HomotopicR on the edges in a 2-truncated simplicial set.

We prove that for 2-truncated quasicategories, both homotopy relations are equivalence relations, and that the left and right homotopy relations coincide.

For a 2-truncated quasicategory X, we define a category HomotopyCategory₂ X whose morphisms are given by (left) homotopy classes of edges. The construction of this category is different from HomotopyCategory X in AlgebraicTopology.SimplicialSet.HomotopyCat:

The two constructions agree for 2-truncated quasicategories (TODO: handled by future PR).

Implementation notes #

Throughout this file, we make use of Edge and CompStruct to conveniently deal with edges and triangles in a 2-truncated simplicial set.

A 2-truncated quasicategory is a 2-truncated simplicial set with the properties:

  • (2, 1)-filling: given two consecutive Edges e₀₁ and e₁₂, there exists a CompStruct with (0, 1)-edge e₀₁ and (0, 2)-edge e₁₂.
  • (3, 1)-filling: given three CompStructs f₃, f₀ and f₂ which form a (3, 1)-horn, there exists a fourth CompStruct such that the four faces form the boundary ∂Δ[3] of a 3-simplex.
  • (3, 2)-filling: given three CompStructs f₃, f₀ and f₁ which form a (3, 2)-horn, there exists a fourth CompStruct such that the four faces form the boundary ∂Δ[3] of a 3-simplex.
Instances
    @[reducible, inline]
    abbrev SSet.Truncated.Edge.HomotopyL {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (f g : Edge x₀ x₁) :
    Type u_1

    A left homotopy between two edges f and g is a CompStruct f (id _) g. (See HomotopicL for the Prop-valued version.)

    Equations
    Instances For
      @[reducible, inline]
      abbrev SSet.Truncated.Edge.HomotopyR {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (f g : Edge x₀ x₁) :
      Type u_1

      A right homotopy between two edges f and g is a CompStruct (id _) f g. (See HomotopicL for the Prop-valued version.)

      Equations
      Instances For
        @[reducible, inline]
        abbrev SSet.Truncated.HomotopicL {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (f g : Edge x₀ x₁) :

        Two edges f and g are left homotopic if there is a CompStruct with (0, 1)-edge f, (1, 2)-edge Edge.id and (0, 2)-edge g. We use Nonempty to have a Prop valued HomotopicL.

        Equations
        Instances For
          @[reducible, inline]
          abbrev SSet.Truncated.HomotopicR {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (f g : Edge x₀ x₁) :

          Two edges f and g are right homotopic if there is a CompStruct with (0, 1)-edge Edge.id, (1, 2)-edge f, and (0, 2)-edge g. We use Nonempty to have a Prop valued HomotopicR.

          Equations
          Instances For
            @[reducible, inline]
            abbrev SSet.Truncated.Edge.HomotopyL.refl {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (f : Edge x₀ x₁) :

            The left homotopy relation on the edges of a 2-truncated simplicial set is reflexive.

            Equations
            Instances For
              @[reducible, inline]
              abbrev SSet.Truncated.Edge.HomotopyR.refl {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (f : Edge x₀ x₁) :

              The right homotopy relation on the edges of a 2-truncated simplicial set is reflexive.

              Equations
              Instances For
                noncomputable def SSet.Truncated.Edge.assoc {X : Truncated 2} {x₀ x₁ x₂ x₃ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₂₃ : Edge x₂ x₃} {e₀₂ : Edge x₀ x₂} {e₁₃ : Edge x₁ x₃} {e₀₃ : Edge x₀ x₃} (h₀₂ : e₀₁.CompStruct e₁₂ e₀₂) (h₁₃ : e₁₂.CompStruct e₂₃ e₁₃) (h : e₀₁.CompStruct e₁₃ e₀₃) :
                e₀₂.CompStruct e₂₃ e₀₃

                The associativity of the composition in a 2-truncated quasicategory.

                Equations
                Instances For
                  noncomputable def SSet.Truncated.Edge.assoc' {X : Truncated 2} {x₀ x₁ x₂ x₃ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₂₃ : Edge x₂ x₃} {e₀₂ : Edge x₀ x₂} {e₁₃ : Edge x₁ x₃} {e₀₃ : Edge x₀ x₃} (h₀₂ : e₀₁.CompStruct e₁₂ e₀₂) (h₁₃ : e₁₂.CompStruct e₂₃ e₁₃) (h : e₀₂.CompStruct e₂₃ e₀₃) :
                  e₀₁.CompStruct e₁₃ e₀₃

                  The associativity of the composition in a 2-truncated quasicategory.

                  Equations
                  Instances For
                    noncomputable def SSet.Truncated.Edge.HomotopyL.symm {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} (h : f.HomotopyL g) :

                    In a 2-truncated quasicategory, the left homotopy relation on edges is symmetric.

                    Equations
                    Instances For
                      noncomputable def SSet.Truncated.Edge.HomotopyR.symm {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} (h : f.HomotopyR g) :

                      In a 2-truncated quasicategory, the right homotopy relation on edges is symmetric.

                      Equations
                      Instances For
                        noncomputable def SSet.Truncated.Edge.HomotopyL.trans {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g h : Edge x₀ x₁} (h₁ : f.HomotopyL g) (h₂ : g.HomotopyL h) :

                        In a 2-truncated quasicategory, the left homotopy relation on edges is transitive.

                        Equations
                        Instances For
                          noncomputable def SSet.Truncated.Edge.HomotopyR.trans {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g h : Edge x₀ x₁} (h₁ : f.HomotopyR g) (h₂ : g.HomotopyR h) :

                          In a 2-truncated quasicategory, the right homotopy relation on edges is transitive.

                          Equations
                          Instances For
                            noncomputable def SSet.Truncated.Edge.HomotopyL.homotopyR {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} (h : f.HomotopyL g) :

                            In a 2-truncated quasicategory, two left homotopic edges are also right homotopic.

                            Equations
                            Instances For
                              noncomputable def SSet.Truncated.Edge.HomotopyR.homotopyL {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} (h : f.HomotopyR g) :

                              In a 2-truncated quasicategory, two right homotopic edges are also left homotopic.

                              Equations
                              Instances For
                                theorem SSet.Truncated.HomotopicL.refl {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} {f : Edge x₀ x₁} :

                                The left homotopy relation is reflexive.

                                theorem SSet.Truncated.HomotopicL.symm {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} (hfg : HomotopicL f g) :

                                The left homotopy relation is symmetric.

                                theorem SSet.Truncated.HomotopicL.trans {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g h : Edge x₀ x₁} (hfg : HomotopicL f g) (hgh : HomotopicL g h) :

                                The left homotopy relation is transitive.

                                theorem SSet.Truncated.HomotopicR.refl {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} {f : Edge x₀ x₁} :

                                The right homotopy relation is reflexive.

                                theorem SSet.Truncated.HomotopicR.symm {X : Truncated 2} [X.Quasicategory₂] {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} {f g : Edge x₀ x₁} (hfg : HomotopicR f g) :

                                The right homotopy relation is symmetric.

                                theorem SSet.Truncated.HomotopicR.trans {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g h : Edge x₀ x₁} (hfg : HomotopicR f g) (hgh : HomotopicR g h) :

                                The right homotopy relation is transitive.

                                theorem SSet.Truncated.HomotopicL.homotopicR {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} (h : HomotopicL f g) :

                                In a 2-truncated quasicategory, left homotopy implies right homotopy.

                                theorem SSet.Truncated.HomotopicR.homotopicL {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} (h : HomotopicR f g) :

                                In a 2-truncated quasicategory, right homotopy implies left homotopy.

                                theorem SSet.Truncated.homotopicL_iff_homotopicR {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} :

                                In a 2-truncated quasicategory, the right and left homotopy relations coincide.

                                noncomputable def SSet.Truncated.Edge.CompStruct.unique {X : Truncated 2} {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f f' : Edge x₀ x₁} {g g' : Edge x₁ x₂} {h h' : Edge x₀ x₂} (s : f.CompStruct g h) (s' : f'.CompStruct g' h') (hf : f.HomotopyL f') (hg : g.HomotopyL g') :

                                Assume we have structures CompStruct f g h and CompStruct f' g' h'. If f and f' are left homotopic, and g and g' are left homotopic, then h and h' are left homotopic.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  theorem SSet.Truncated.Edge.CompStruct.comp_unique {X : Truncated 2} {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f f' : Edge x₀ x₁} {g g' : Edge x₁ x₂} {h h' : Edge x₀ x₂} (s : f.CompStruct g h) (s' : f'.CompStruct g' h') (hf : HomotopicL f f') (hg : HomotopicL g g') :

                                  Given CompStruct f g h and CompStruct f' g' h' with the same vertices and edges such that f ≃ f' and g ≃ g', then the long diagonal edges h and h' are also homotopic.

                                  noncomputable def SSet.Truncated.Edge.comp {X : Truncated 2} {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] (f : Edge x₀ x₁) (g : Edge x₁ x₂) :
                                  Edge x₀ x₂

                                  Given two consecutive edges f, g in a 2-truncated quasicategory, nonconstructively choose an edge that is the diagonal of a 2-simplex with spine given by f and g. The CompStruct witnessing this property is given by Edge.compStruct.

                                  Equations
                                  Instances For
                                    noncomputable def SSet.Truncated.Edge.compStruct {X : Truncated 2} {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] (f : Edge x₀ x₁) (g : Edge x₁ x₂) :
                                    f.CompStruct g (f.comp g)

                                    See Edge.comp

                                    Equations
                                    Instances For

                                      The homotopy category of a 2-truncated quasicategory X has as objects the vertices of X

                                      Instances For
                                        @[instance_reducible]
                                        instance SSet.Truncated.instSetoidEdge {X : Truncated 2} [X.Quasicategory₂] (x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })) :
                                        Setoid (Edge x y)

                                        Left homotopy is an equivalence relation on the edges of X. Remark: We could have equivalently chosen right homotopy, as shown by homotopicL_iff_homotopicR.

                                        Equations

                                        The morphisms between two vertices x, y in HomotopyCategory₂ X are homotopy classes of edges between x and y.

                                        Equations
                                        Instances For
                                          @[instance_reducible]

                                          Composition of morphisms in HomotopyCategory₂ X is given by lifting the edge chosen by composeEdges.

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

                                          The function HomotopyCategory₂.mk taking a vertex of A and sending it to the corresponding object of HomotopyCategory₂ A is surjective.

                                          def SSet.Truncated.HomotopyCategory₂.homMk {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] (f : Edge x₀ x₁) :
                                          { pt := x₀ } ⟶ { pt := x₁ }

                                          Any edge in the 2-truncated simplicial set X defines a morphism in the homotopy category by taking its equivalence class.

                                          Equations
                                          Instances For

                                            Every morphism in the homotopy category HomotopyCategory₂ X is the equivalence class of an edge of A.

                                            theorem SSet.Truncated.HomotopyCategory₂.homMk_eq_iff_homotopicL {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} :
                                            theorem SSet.Truncated.HomotopyCategory₂.homMk_eq_iff_homotopicR {X : Truncated 2} {x₀ x₁ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f g : Edge x₀ x₁} :
                                            @[simp]

                                            The trivial (degenerate) edge at a vertex x is a representative for the identity morphism x ⟶ x.

                                            Left homotopic edges represent the same morphism in the homotopy category.

                                            Right homotopic edges represent the same morphism in the homotopy category.

                                            A CompStruct f g h is a witness for the fact that the morphisms represented by f and g compose to the morphism represented by h.

                                            noncomputable def SSet.Truncated.Edge.CompStruct.ofHomotopyCategory₂Fac {X : Truncated 2} {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} [X.Quasicategory₂] {f : Edge x₀ x₁} {g : Edge x₁ x₂} {h : Edge x₀ x₂} (fac : CategoryTheory.CategoryStruct.comp (HomotopyCategory₂.homMk f) (HomotopyCategory₂.homMk g) = HomotopyCategory₂.homMk h) :

                                            If we have a factorization homMk f ≫ homMk g = homMk h, this is the choice of a structure CompStruct f g h.

                                            Equations
                                            Instances For

                                              Given edges f, g and h of a 2-truncated quasicategory, there exists a structure CompStruct f g h iff homMk f ≫ homMk g = homMk h holds in the homotopy category.

                                              def SSet.Truncated.HomotopyCategory₂.descMap {X : Truncated 2} [X.Quasicategory₂] {D : Type u_1} [CategoryTheory.Category.{u_3, u_1} D] (obj : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 }) → D) (map : {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} → Edge x y → (obj x ⟶ obj y)) (map_id : ∀ (x : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })), map (Edge.id x) = CategoryTheory.CategoryStruct.id (obj x)) (map_comp : ∀ {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (a : e₀₁.CompStruct e₁₂ e₀₂), CategoryTheory.CategoryStruct.comp (map e₀₁) (map e₁₂) = map e₀₂) {x y : X.HomotopyCategory₂} (f : x ⟶ y) :
                                              obj x.pt ⟶ obj y.pt

                                              Auxiliary definition for SSet.Truncated.HomotopyCategory₂.desc.

                                              Equations
                                              Instances For
                                                @[simp]
                                                theorem SSet.Truncated.HomotopyCategory₂.descMap_homMk {X : Truncated 2} [X.Quasicategory₂] {D : Type u_1} [CategoryTheory.Category.{u_3, u_1} D] (obj : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 }) → D) (map : {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} → Edge x y → (obj x ⟶ obj y)) (map_id : ∀ (x : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })), map (Edge.id x) = CategoryTheory.CategoryStruct.id (obj x)) (map_comp : ∀ {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (a : e₀₁.CompStruct e₁₂ e₀₂), CategoryTheory.CategoryStruct.comp (map e₀₁) (map e₁₂) = map e₀₂) {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (e : Edge x y) :
                                                descMap obj (fun {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} => map) map_id ⋯ (homMk e) = map e
                                                @[implicit_reducible]
                                                def SSet.Truncated.HomotopyCategory₂.desc {X : Truncated 2} [X.Quasicategory₂] {D : Type u_1} [CategoryTheory.Category.{u_3, u_1} D] (obj : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 }) → D) (map : {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} → Edge x y → (obj x ⟶ obj y)) (map_id : ∀ (x : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })), map (Edge.id x) = CategoryTheory.CategoryStruct.id (obj x)) (map_comp : ∀ {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (a : e₀₁.CompStruct e₁₂ e₀₂), CategoryTheory.CategoryStruct.comp (map e₀₁) (map e₁₂) = map e₀₂) :

                                                Constructor for functors from SSet.Truncated.HomotopyCategory₂.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  @[simp]
                                                  theorem SSet.Truncated.HomotopyCategory₂.desc_map_homMk {X : Truncated 2} [X.Quasicategory₂] {D : Type u_1} [CategoryTheory.Category.{u_3, u_1} D] (obj : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 }) → D) (map : {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} → Edge x y → (obj x ⟶ obj y)) (map_id : ∀ (x : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })), map (Edge.id x) = CategoryTheory.CategoryStruct.id (obj x)) (map_comp : ∀ {x₀ x₁ x₂ : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} {e₀₁ : Edge x₀ x₁} {e₁₂ : Edge x₁ x₂} {e₀₂ : Edge x₀ x₂} (a : e₀₁.CompStruct e₁₂ e₀₂), CategoryTheory.CategoryStruct.comp (map e₀₁) (map e₁₂) = map e₀₂) {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (e : Edge x y) :
                                                  (desc obj (fun {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} => map) map_id ⋯).map (homMk e) = map e
                                                  theorem SSet.Truncated.HomotopyCategory₂.functor_ext {X : Truncated 2} [X.Quasicategory₂] {D : Type u_1} [CategoryTheory.Category.{u_3, u_1} D] {F G : CategoryTheory.Functor X.HomotopyCategory₂ D} (h₁ : ∀ (x : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })), F.obj { pt := x } = G.obj { pt := x } := by cat_disch) (h₂ : ∀ {x y : X.obj (Opposite.op { obj := { len := 0 }, property := Quasicategory₂._proof_1 })} (e : Edge x y), F.map (homMk e) = CategoryTheory.CategoryStruct.comp (CategoryTheory.eqToHom ⋯) (CategoryTheory.CategoryStruct.comp (G.map (homMk e)) (CategoryTheory.eqToHom ⋯)) := by cat_disch) :
                                                  F = G