Documentation

Mathlib.AlgebraicTopology.SimplicialSet.Path

Paths in simplicial sets #

A path in a simplicial set X of length n is a directed path comprised of n + 1 0-simplices and n 1-simplices, together with identifications between 0-simplices and the sources and targets of the 1-simplices. We define this construction first for truncated simplicial sets in SSet.Truncated.Path. A path in a simplicial set X is then defined as a 1-truncated path in the 1-truncation of X.

An n-simplex has a maximal path, the spine of the simplex, which is a path of length n.

structure SSet.Truncated.Path₁ (X : Truncated 1) (n : ) :

A path of length n in a 1-truncated simplicial set X is a directed path of n edges.

Instances For
    theorem SSet.Truncated.Path₁.ext_iff {X : Truncated 1} {n : } {x y : X.Path₁ n} :
    theorem SSet.Truncated.Path₁.ext {X : Truncated 1} {n : } {x y : X.Path₁ n} (vertex : x.vertex = y.vertex) (arrow : x.arrow = y.arrow) :
    x = y
    def SSet.Truncated.Path {n : } (X : Truncated (n + 1)) (m : ) :

    A path of length m in an n + 1-truncated simplicial set X is given by the data of a Path₁ structure on the further 1-truncation of X.

    Equations
    Instances For
      @[reducible, inline]
      abbrev SSet.Truncated.Path.vertex {n : } {X : Truncated (n + 1)} {m : } (f : X.Path m) (i : Fin (m + 1)) :
      X.obj (Opposite.op { obj := SimplexCategory.mk 0, property := })

      A path includes the data of n + 1 0-simplices in X.

      Equations
      Instances For
        @[reducible, inline]
        abbrev SSet.Truncated.Path.arrow {n : } {X : Truncated (n + 1)} {m : } (f : X.Path m) (i : Fin m) :
        X.obj (Opposite.op { obj := SimplexCategory.mk 1, property := })

        A path includes the data of n 1-simplices in X.

        Equations
        Instances For
          theorem SSet.Truncated.Path.arrow_src {n : } {X : Truncated (n + 1)} {m : } (f : X.Path m) (i : Fin m) :

          The source of a 1-simplex in a path is identified with the source vertex.

          theorem SSet.Truncated.Path.arrow_tgt {n : } {X : Truncated (n + 1)} {m : } (f : X.Path m) (i : Fin m) :

          The target of a 1-simplex in a path is identified with the target vertex.

          theorem SSet.Truncated.Path.ext {n : } {X : Truncated (n + 1)} {m : } {f g : X.Path m} (hᵥ : f.vertex = g.vertex) (hₐ : f.arrow = g.arrow) :
          f = g
          theorem SSet.Truncated.Path.ext_iff {n : } {X : Truncated (n + 1)} {m : } {f g : X.Path m} :
          theorem SSet.Truncated.Path.ext' {n : } {X : Truncated (n + 1)} {m : } {f g : X.Path (m + 1)} (h : ∀ (i : Fin (m + 1)), f.arrow i = g.arrow i) :
          f = g

          To show two paths equal it suffices to show that they have the same edges.

          theorem SSet.Truncated.Path.ext'_iff {n : } {X : Truncated (n + 1)} {m : } {f g : X.Path (m + 1)} :
          f = g ∀ (i : Fin (m + 1)), f.arrow i = g.arrow i
          def SSet.Truncated.Path.mk₂ {n : } {X : Truncated (n + 1)} (p q : X.Path 1) (h : p.vertex 1 = q.vertex 0) :
          X.Path 2

          Constructor for paths of length 2 from two paths of length 1.

          Equations
          Instances For
            @[simp]
            theorem SSet.Truncated.Path.mk₂_arrow {n : } {X : Truncated (n + 1)} (p q : X.Path 1) (h : p.vertex 1 = q.vertex 0) (a✝ : Fin (Nat.succ 1)) :
            (p.mk₂ q h).arrow a✝ = ![p.arrow 0, q.arrow 0] a✝
            @[simp]
            theorem SSet.Truncated.Path.mk₂_vertex {n : } {X : Truncated (n + 1)} (p q : X.Path 1) (h : p.vertex 1 = q.vertex 0) (a✝ : Fin (Nat.succ 2)) :
            (p.mk₂ q h).vertex a✝ = ![p.vertex 0, p.vertex 1, q.vertex 1] a✝
            def SSet.Truncated.Path.interval {n : } {X : Truncated (n + 1)} {m : } (f : X.Path m) (j l : ) (h : j + l m := by omega) :
            X.Path l

            For j + l ≤ m, a path of length m restricts to a path of length l, namely the subpath spanned by the vertices j ≤ i ≤ j + l and edges j ≤ i < j + l.

            Equations
            Instances For
              def SSet.Truncated.Path.map {n : } {X Y : Truncated (n + 1)} {m : } (f : X.Path m) (σ : X Y) :
              Y.Path m

              Maps of n + 1-truncated simplicial sets induce maps of paths.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[simp]
                theorem SSet.Truncated.Path.map_vertex {n : } {X Y : Truncated (n + 1)} {m : } (f : X.Path m) (σ : X Y) (i : Fin (m + 1)) :
                (f.map σ).vertex i = σ.app (Opposite.op { obj := SimplexCategory.mk 0, property := }) (f.vertex i)
                @[simp]
                theorem SSet.Truncated.Path.map_arrow {n : } {X Y : Truncated (n + 1)} {m : } (f : X.Path m) (σ : X Y) (i : Fin m) :
                (f.map σ).arrow i = σ.app (Opposite.op { obj := SimplexCategory.mk 1, property := }) (f.arrow i)
                theorem SSet.Truncated.Path.map_interval {n : } {X Y : Truncated (n + 1)} {m : } (f : X.Path m) (σ : X Y) (j l : ) (h : j + l m) :
                (f.map σ).interval j l h = (f.interval j l h).map σ
                def SSet.Truncated.spine {n : } (X : Truncated (n + 1)) (m : ) (h : m n + 1 := by omega) (Δ : X.obj (Opposite.op { obj := SimplexCategory.mk m, property := h })) :
                X.Path m

                The spine of an m-simplex in X is the path of edges of length m formed by traversing in order through its vertices.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem SSet.Truncated.trunc_spine {n : } (X : Truncated (n + 1)) (k m : ) (h : m k + 1) (hₙ : k n) :
                  ((trunc (n + 1) (k + 1) ).obj X).spine m h = X.spine m

                  Further truncating X above m does not change the m-spine.

                  @[simp]
                  theorem SSet.Truncated.spine_vertex {n : } (X : Truncated (n + 1)) (m : ) (hₘ : m n + 1) (Δ : X.obj (Opposite.op { obj := SimplexCategory.mk m, property := hₘ })) (i : Fin (m + 1)) :
                  @[simp]
                  theorem SSet.Truncated.spine_arrow {n : } (X : Truncated (n + 1)) (m : ) (hₘ : m n + 1) (Δ : X.obj (Opposite.op { obj := SimplexCategory.mk m, property := hₘ })) (i : Fin m) :
                  theorem SSet.Truncated.spine_map_vertex {n : } (X : Truncated (n + 1)) (m : ) (hₘ : m n + 1) (Δ : X.obj (Opposite.op { obj := SimplexCategory.mk m, property := hₘ })) (a : ) (hₐ : a n + 1) (φ : { obj := SimplexCategory.mk a, property := hₐ } { obj := SimplexCategory.mk m, property := hₘ }) (i : Fin (a + 1)) :
                  (X.spine a hₐ (X.map φ.op Δ)).vertex i = (X.spine m hₘ Δ).vertex ((SimplexCategory.Hom.toOrderHom φ.hom) i)
                  theorem SSet.Truncated.spine_map_subinterval {n : } (X : Truncated (n + 1)) (m : ) (hₘ : m n + 1) (j l : ) (h : j + l m) (Δ : X.obj (Opposite.op { obj := SimplexCategory.mk m, property := hₘ })) :
                  X.spine l (X.map (SimplexCategory.Truncated.Hom.tr (SimplexCategory.subinterval j l h) hₘ).op Δ) = (X.spine m hₘ Δ).interval j l h
                  @[reducible, inline]
                  abbrev SSet.Path (X : SSet) (n : ) :

                  A path of length n in a simplicial set X is defined as a 1-truncated path in the 1-truncation of X.

                  Equations
                  Instances For
                    @[reducible, inline]
                    abbrev SSet.Path.vertex {X : SSet} {n : } (f : X.Path n) (i : Fin (n + 1)) :

                    A path includes the data of n + 1 0-simplices in X.

                    Equations
                    Instances For
                      @[reducible, inline]
                      abbrev SSet.Path.arrow {X : SSet} {n : } (f : X.Path n) (i : Fin n) :

                      A path includes the data of n 1-simplices in X.

                      Equations
                      Instances For
                        theorem SSet.Path.congr_vertex {X : SSet} {n : } {f g : X.Path n} (h : f = g) (i : Fin (n + 1)) :
                        f.vertex i = g.vertex i
                        theorem SSet.Path.congr_arrow {X : SSet} {n : } {f g : X.Path n} (h : f = g) (i : Fin n) :
                        f.arrow i = g.arrow i
                        theorem SSet.Path.arrow_src {X : SSet} {n : } (f : X.Path n) (i : Fin n) :

                        The source of a 1-simplex in a path is identified with the source vertex.

                        theorem SSet.Path.arrow_tgt {X : SSet} {n : } (f : X.Path n) (i : Fin n) :

                        The target of a 1-simplex in a path is identified with the target vertex.

                        theorem SSet.Path.ext {X : SSet} {n : } {f g : X.Path n} (hᵥ : f.vertex = g.vertex) (hₐ : f.arrow = g.arrow) :
                        f = g
                        theorem SSet.Path.ext_iff {X : SSet} {n : } {f g : X.Path n} :
                        theorem SSet.Path.ext' {X : SSet} {n : } {f g : X.Path (n + 1)} (h : ∀ (i : Fin (n + 1)), f.arrow i = g.arrow i) :
                        f = g

                        To show two paths equal it suffices to show that they have the same edges.

                        theorem SSet.Path.ext'_iff {X : SSet} {n : } {f g : X.Path (n + 1)} :
                        f = g ∀ (i : Fin (n + 1)), f.arrow i = g.arrow i
                        theorem SSet.Path.ext₀ {X : SSet} {f g : X.Path 0} (h : f.vertex 0 = g.vertex 0) :
                        f = g
                        theorem SSet.Path.ext₀_iff {X : SSet} {f g : X.Path 0} :
                        f = g f.vertex 0 = g.vertex 0
                        def SSet.Path.interval {X : SSet} {n : } (f : X.Path n) (j l : ) (h : j + l n := by grind) :
                        X.Path l

                        For j + l ≤ n, a path of length n restricts to a path of length l, namely the subpath spanned by the vertices j ≤ i ≤ j + l and edges j ≤ i < j + l.

                        Equations
                        Instances For
                          theorem SSet.Path.arrow_interval {X : SSet} {n : } (f : X.Path n) (j l : ) (k' : Fin l) (k : Fin n) (h : j + l n := by lia) (hkk' : j + k' = k := by grind) :
                          (f.interval j l h).arrow k' = f.arrow k
                          def SSet.Path.map {X Y : SSet} {n : } (f : X.Path n) (σ : X Y) :
                          Y.Path n

                          Maps of simplicial sets induce maps of paths in a simplicial set.

                          Equations
                          Instances For
                            @[simp]
                            theorem SSet.Path.map_vertex {X Y : SSet} {n : } (f : X.Path n) (σ : X Y) (i : Fin (n + 1)) :
                            @[simp]
                            theorem SSet.Path.map_arrow {X Y : SSet} {n : } (f : X.Path n) (σ : X Y) (i : Fin n) :
                            theorem SSet.Path.map_interval {X Y : SSet} {n : } (f : X.Path n) (σ : X Y) (j l : ) (h : j + l n) :
                            (f.map σ).interval j l h = (f.interval j l h).map σ

                            Path.map respects subintervals of paths.

                            def SSet.spine (X : SSet) (n : ) :

                            The spine of an n-simplex in X is the path of edges of length n formed by traversing in order through the vertices of X _⦋n⦌ₙ₊₁.

                            Equations
                            Instances For
                              @[simp]
                              theorem SSet.spine_vertex (X : SSet) (n : ) (Δ : X.obj (Opposite.op (SimplexCategory.mk n))) (i : Fin (n + 1)) :
                              @[simp]
                              theorem SSet.spine_arrow (X : SSet) (n : ) (Δ : X.obj (Opposite.op (SimplexCategory.mk n))) (i : Fin n) :
                              theorem SSet.spine_δ₀ (X : SSet) {m : } (x : X.obj (Opposite.op (SimplexCategory.mk (m + 1)))) :
                              X.spine m (CategoryTheory.SimplicialObject.δ X 0 x) = (X.spine (m + 1) x).interval 1 m
                              theorem SSet.truncation_spine (X : SSet) (n m : ) (h : m n + 1) :
                              ((truncation (n + 1)).obj X).spine m h = X.spine m

                              For m ≤ n + 1, the m-spine of X factors through the n + 1-truncation of X.

                              theorem SSet.spine_map_vertex (X : SSet) (n : ) (Δ : X.obj (Opposite.op (SimplexCategory.mk n))) {m : } (φ : SimplexCategory.mk m SimplexCategory.mk n) (i : Fin (m + 1)) :
                              (X.spine m (X.map φ.op Δ)).vertex i = (X.spine n Δ).vertex ((SimplexCategory.Hom.toOrderHom φ) i)
                              theorem SSet.spine_map_subinterval (X : SSet) (n j l : ) (h : j + l n) (Δ : X.obj (Opposite.op (SimplexCategory.mk n))) :
                              X.spine l (X.map (SimplexCategory.subinterval j l h).op Δ) = (X.spine n Δ).interval j l h

                              The spine of the unique non-degenerate n-simplex in Δ[n].

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                @[simp]
                                @[simp]
                                @[simp]
                                def SSet.Subcomplex.liftPath {X : SSet} (A : X.Subcomplex) {n : } (p : X.Path n) (hp₀ : ∀ (j : Fin (n + 1)), p.vertex j A.obj (Opposite.op (SimplexCategory.mk 0))) (hp₁ : ∀ (j : Fin n), p.arrow j A.obj (Opposite.op (SimplexCategory.mk 1))) :

                                A path of a simplicial set can be lifted to a subcomplex if the vertices and arrows belong to this subcomplex.

                                Equations
                                Instances For
                                  @[simp]
                                  theorem SSet.Subcomplex.liftPath_vertex_coe {X : SSet} (A : X.Subcomplex) {n : } (p : X.Path n) (hp₀ : ∀ (j : Fin (n + 1)), p.vertex j A.obj (Opposite.op (SimplexCategory.mk 0))) (hp₁ : ∀ (j : Fin n), p.arrow j A.obj (Opposite.op (SimplexCategory.mk 1))) (j : Fin (n + 1)) :
                                  ((A.liftPath p hp₀ hp₁).vertex j) = p.vertex j
                                  @[simp]
                                  theorem SSet.Subcomplex.liftPath_arrow_coe {X : SSet} (A : X.Subcomplex) {n : } (p : X.Path n) (hp₀ : ∀ (j : Fin (n + 1)), p.vertex j A.obj (Opposite.op (SimplexCategory.mk 0))) (hp₁ : ∀ (j : Fin n), p.arrow j A.obj (Opposite.op (SimplexCategory.mk 1))) (j : Fin n) :
                                  ((A.liftPath p hp₀ hp₁).arrow j) = p.arrow j
                                  @[simp]
                                  theorem SSet.Subcomplex.map_ι_liftPath {X : SSet} (A : X.Subcomplex) {n : } (p : X.Path n) (hp₀ : ∀ (j : Fin (n + 1)), p.vertex j A.obj (Opposite.op (SimplexCategory.mk 0))) (hp₁ : ∀ (j : Fin n), p.arrow j A.obj (Opposite.op (SimplexCategory.mk 1))) :
                                  (A.liftPath p hp₀ hp₁).map A.ι = p
                                  def SSet.horn.spineId {n : } (i : Fin (n + 3)) (h₀ : 0 < i) (hₙ : i < Fin.last (n + 2)) :
                                  (horn (n + 2) i).toSSet.Path (n + 2)

                                  Any inner horn contains the spine of the unique non-degenerate n-simplex in Δ[n].

                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem SSet.horn.spineId_vertex_coe {n : } (i : Fin (n + 3)) (h₀ : 0 < i) (hₙ : i < Fin.last (n + 2)) (j : Fin (n + 2 + 1)) :
                                    ((spineId i h₀ hₙ).vertex j) = stdSimplex.const (n + 2) j (Opposite.op (SimplexCategory.mk 0))
                                    @[simp]
                                    theorem SSet.horn.spineId_arrow_coe {n : } (i : Fin (n + 3)) (h₀ : 0 < i) (hₙ : i < Fin.last (n + 2)) (j : Fin (n + 2)) :
                                    ((spineId i h₀ hₙ).arrow j) = (stdSimplex.spineId (n + 2)).arrow j
                                    @[simp]
                                    theorem SSet.horn.spineId_map_hornInclusion {n : } (i : Fin (n + 3)) (h₀ : 0 < i) (hₙ : i < Fin.last (n + 2)) :
                                    (spineId i h₀ hₙ).map (horn (n + 2) i).ι = stdSimplex.spineId (n + 2)