Examples of simplicial sets. - Topology

Skip to content
Back to top
View this page
Edit this page

# Examples of simplicial sets.

These are accessible via `simplicial_sets.Sphere(3)`, `simplicial_sets.Torus()`, etc. Type `simplicial_sets.[TAB]` to see a complete list.

AUTHORS:

- John H. Palmieri (2016-07)

- Miguel Marco (2022-12)

sage.topology.simplicial_set_examples.ClassifyingSpace(group)

  Return the classifying space of `group`, as a simplicial set.

  INPUT:

  - `group` – a finite group or finite monoid

  See `sage.categories.finite_monoids.FiniteMonoids.ParentMethods.nerve()` for more details and more examples.

  EXAMPLES:

  Sage

      sage: # needs sage.groups
      sage: C2 = groups.misc.MultiplicativeAbelian([2])
      sage: BC2 = simplicial_sets.ClassifyingSpace(C2)
      sage: H = BC2.homology(range(9), base_ring=GF(2))                               # needs sage.modules
      sage: [H[i].dimension() for i in range(9)]                                      # needs sage.modules
      [0, 1, 1, 1, 1, 1, 1, 1, 1]

      sage: Klein4 = groups.misc.MultiplicativeAbelian([2, 2])                        # needs sage.groups
      sage: BK = simplicial_sets.ClassifyingSpace(Klein4); BK                         # needs sage.groups
      Classifying space of Multiplicative Abelian group isomorphic to C2 x C2
      sage: BK.homology(range(5), base_ring=GF(2))    # long time (1 second)          # needs sage.groups sage.modules
      {0: Vector space of dimension 0 over Finite Field of size 2,
       1: Vector space of dimension 2 over Finite Field of size 2,
       2: Vector space of dimension 3 over Finite Field of size 2,
       3: Vector space of dimension 4 over Finite Field of size 2,
       4: Vector space of dimension 5 over Finite Field of size 2}

  Python

      >>> from sage.all import *
      >>> # needs sage.groups
      >>> C2 = groups.misc.MultiplicativeAbelian([Integer(2)])
      >>> BC2 = simplicial_sets.ClassifyingSpace(C2)
      >>> H = BC2.homology(range(Integer(9)), base_ring=GF(Integer(2)))                               # needs sage.modules
      >>> [H[i].dimension() for i in range(Integer(9))]                                      # needs sage.modules
      [0, 1, 1, 1, 1, 1, 1, 1, 1]

      >>> Klein4 = groups.misc.MultiplicativeAbelian([Integer(2), Integer(2)])                        # needs sage.groups
      >>> BK = simplicial_sets.ClassifyingSpace(Klein4); BK                         # needs sage.groups
      Classifying space of Multiplicative Abelian group isomorphic to C2 x C2
      >>> BK.homology(range(Integer(5)), base_ring=GF(Integer(2)))    # long time (1 second)          # needs sage.groups sage.modules
      {0: Vector space of dimension 0 over Finite Field of size 2,
       1: Vector space of dimension 2 over Finite Field of size 2,
       2: Vector space of dimension 3 over Finite Field of size 2,
       3: Vector space of dimension 4 over Finite Field of size 2,
       4: Vector space of dimension 5 over Finite Field of size 2}

sage.topology.simplicial_set_examples.ComplexProjectiveSpace(n)

  Return complex \(n\)-dimensional projective space, as a simplicial set.

  This is only defined when \(n\) is at most 4. It is constructed using the simplicial set decomposition provided by Kenzo, as described by Sergeraert [Ser2010]

  EXAMPLES:

  Sage

      sage: simplicial_sets.ComplexProjectiveSpace(2).homology(reduced=False)         # needs sage.modules
      {0: Z, 1: 0, 2: Z, 3: 0, 4: Z}
      sage: CP3 = simplicial_sets.ComplexProjectiveSpace(3); CP3                      # needs pyparsing
      CP^3
      sage: latex(CP3)                                                                # needs pyparsing
      CP^{3}
      sage: CP3.f_vector()                                                            # needs pyparsing
      [1, 0, 3, 10, 25, 30, 15]

      sage: # long time, needs pyparsing sage.modules
      sage: K = CP3.suspension()              # long time (1 second)
      sage: R = K.cohomology_ring(GF(2))
      sage: R.gens()
      (h^{0,0}, h^{3,0}, h^{5,0}, h^{7,0})
      sage: x = R.gens()[1]
      sage: x.Sq(2)
      h^{5,0}

      sage: simplicial_sets.ComplexProjectiveSpace(4).f_vector()                      # needs pyparsing
      [1, 0, 4, 22, 97, 255, 390, 315, 105]

      sage: simplicial_sets.ComplexProjectiveSpace(5)
      Traceback (most recent call last):
      ...
      ValueError: complex projective spaces are only available in dimensions between 0 and 4

  Python

      >>> from sage.all import *
      >>> simplicial_sets.ComplexProjectiveSpace(Integer(2)).homology(reduced=False)         # needs sage.modules
      {0: Z, 1: 0, 2: Z, 3: 0, 4: Z}
      >>> CP3 = simplicial_sets.ComplexProjectiveSpace(Integer(3)); CP3                      # needs pyparsing
      CP^3
      >>> latex(CP3)                                                                # needs pyparsing
      CP^{3}
      >>> CP3.f_vector()                                                            # needs pyparsing
      [1, 0, 3, 10, 25, 30, 15]

      >>> # long time, needs pyparsing sage.modules
      >>> K = CP3.suspension()              # long time (1 second)
      >>> R = K.cohomology_ring(GF(Integer(2)))
      >>> R.gens()
      (h^{0,0}, h^{3,0}, h^{5,0}, h^{7,0})
      >>> x = R.gens()[Integer(1)]
      >>> x.Sq(Integer(2))
      h^{5,0}

      >>> simplicial_sets.ComplexProjectiveSpace(Integer(4)).f_vector()                      # needs pyparsing
      [1, 0, 4, 22, 97, 255, 390, 315, 105]

      >>> simplicial_sets.ComplexProjectiveSpace(Integer(5))
      Traceback (most recent call last):
      ...
      ValueError: complex projective spaces are only available in dimensions between 0 and 4

sage.topology.simplicial_set_examples.Empty()

  Return the empty simplicial set.

  This should return the same simplicial set each time it is called.

  EXAMPLES:

  Sage

      sage: from sage.topology.simplicial_set_examples import Empty
      sage: E = Empty()
      sage: E
      Empty simplicial set
      sage: E.nondegenerate_simplices()
      []
      sage: E is Empty()
      True

  Python

      >>> from sage.all import *
      >>> from sage.topology.simplicial_set_examples import Empty
      >>> E = Empty()
      >>> E
      Empty simplicial set
      >>> E.nondegenerate_simplices()
      []
      >>> E is Empty()
      True

sage.topology.simplicial_set_examples.HopfMap()

  Return a simplicial model of the Hopf map \(S^3 \to S^2\).

  This is taken from Exemple II.1.19 in the thesis of Clemens Berger [Ber1991].

  The Hopf map is a fibration \(S^3 \to S^2\). If it is viewed as attaching a 4-cell to the 2-sphere, the resulting adjunction space is 2-dimensional complex projective space. The resulting model is a bit larger than the one obtained from `simplicial_sets.ComplexProjectiveSpace(2)`.

  EXAMPLES:

  Sage

      sage: g = simplicial_sets.HopfMap()
      sage: g.domain()
      Simplicial set with 20 non-degenerate simplices
      sage: g.codomain()
      S^2

  Python

      >>> from sage.all import *
      >>> g = simplicial_sets.HopfMap()
      >>> g.domain()
      Simplicial set with 20 non-degenerate simplices
      >>> g.codomain()
      S^2

  Using the Hopf map to attach a cell:

  Sage

      sage: X = g.mapping_cone()
      sage: CP2 = simplicial_sets.ComplexProjectiveSpace(2)
      sage: X.homology() == CP2.homology()                                            # needs sage.modules
      True

      sage: X.f_vector()
      [1, 0, 5, 9, 6]
      sage: CP2.f_vector()
      [1, 0, 2, 3, 3]

  [Python]

      >>> from sage.all import *
      >>> X = g.mapping_cone()
      >>> CP2 = simplicial_sets.ComplexProjectiveSpace(Integer(2))
      >>> X.homology() == CP2.homology()                                            # needs sage.modules
      True

      >>> X.f_vector()
      [1, 0, 5, 9, 6]
      >>> CP2.f_vector()
      [1, 0, 2, 3, 3]

sage.topology.simplicial_set_examples.Horn(n, k)

  Return the horn \(\Lambda^n_k\).

  This is the subsimplicial set of the \(n\)-simplex obtained by removing its \(k\)-th face.

  EXAMPLES:

  Sage

      sage: L = simplicial_sets.Horn(3, 0)
      sage: L
      (3, 0)-Horn
      sage: L.n_cells(3)
      []
      sage: L.n_cells(2)
      [(0, 1, 2), (0, 1, 3), (0, 2, 3)]

      sage: L20 = simplicial_sets.Horn(2, 0)
      sage: latex(L20)
      \Lambda^{2}_{0}
      sage: L20.inclusion_map()
      Simplicial set morphism:
        From: (2, 0)-Horn
        To:   2-simplex
        Defn: [(0,), (1,), (2,), (0, 1), (0, 2)] --> [(0,), (1,), (2,), (0, 1), (0, 2)]

  Python

      >>> from sage.all import *
      >>> L = simplicial_sets.Horn(Integer(3), Integer(0))
      >>> L
      (3, 0)-Horn
      >>> L.n_cells(Integer(3))
      []
      >>> L.n_cells(Integer(2))
      [(0, 1, 2), (0, 1, 3), (0, 2, 3)]

      >>> L20 = simplicial_sets.Horn(Integer(2), Integer(0))
      >>> latex(L20)
      \Lambda^{2}_{0}
      >>> L20.inclusion_map()
      Simplicial set morphism:
        From: (2, 0)-Horn
        To:   2-simplex
        Defn: [(0,), (1,), (2,), (0, 1), (0, 2)] --> [(0,), (1,), (2,), (0, 1), (0, 2)]

sage.topology.simplicial_set_examples.KleinBottle()

  Return the Klein bottle as a simplicial set.

  This converts the \(\Delta\)-complex version to a simplicial set. It has one 0-simplex, three 1-simplices, and two 2-simplices.

  EXAMPLES:

  Sage

      sage: K = simplicial_sets.KleinBottle()
      sage: K.f_vector()
      [1, 3, 2]
      sage: K.homology(reduced=False)                                                 # needs sage.modules
      {0: Z, 1: Z x C2, 2: 0}
      sage: K
      Klein bottle

  Python

      >>> from sage.all import *
      >>> K = simplicial_sets.KleinBottle()
      >>> K.f_vector()
      [1, 3, 2]
      >>> K.homology(reduced=False)                                                 # needs sage.modules
      {0: Z, 1: Z x C2, 2: 0}
      >>> K
      Klein bottle

class sage.topology.simplicial_set_examples.Nerve(monoid)

  Bases: `SimplicialSet_arbitrary`

  The nerve of a multiplicative monoid.

  INPUT:

  - `monoid` – a multiplicative monoid

  See `sage.categories.finite_monoids.FiniteMonoids.ParentMethods.nerve()` for full documentation.

  EXAMPLES:

  Sage

      sage: M = FiniteMonoids().example()
      sage: M
      An example of a finite multiplicative monoid: the integers modulo 12
      sage: X = M.nerve()
      sage: list(M)
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
      sage: X.n_cells(0)
      [1]
      sage: X.n_cells(1)
      [0, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9]

  Python

      >>> from sage.all import *
      >>> M = FiniteMonoids().example()
      >>> M
      An example of a finite multiplicative monoid: the integers modulo 12
      >>> X = M.nerve()
      >>> list(M)
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
      >>> X.n_cells(Integer(0))
      [1]
      >>> X.n_cells(Integer(1))
      [0, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9]

  n_skeleton(n)

    Return the \(n\)-skeleton of this simplicial set.

    That is, the simplicial set generated by all nondegenerate simplices of dimension at most \(n\).

    INPUT:

    - `n` – the dimension

    EXAMPLES:

    Sage

        sage: # needs sage.groups
        sage: K4 = groups.misc.MultiplicativeAbelian([2,2])
        sage: BK4 = simplicial_sets.ClassifyingSpace(K4)
        sage: BK4.n_skeleton(3)
        Simplicial set with 40 non-degenerate simplices
        sage: BK4.n_cells(1) == BK4.n_skeleton(3).n_cells(1)
        True
        sage: BK4.n_cells(3) == BK4.n_skeleton(1).n_cells(3)
        False

    Python

        >>> from sage.all import *
        >>> # needs sage.groups
        >>> K4 = groups.misc.MultiplicativeAbelian([Integer(2),Integer(2)])
        >>> BK4 = simplicial_sets.ClassifyingSpace(K4)
        >>> BK4.n_skeleton(Integer(3))
        Simplicial set with 40 non-degenerate simplices
        >>> BK4.n_cells(Integer(1)) == BK4.n_skeleton(Integer(3)).n_cells(Integer(1))
        True
        >>> BK4.n_cells(Integer(3)) == BK4.n_skeleton(Integer(1)).n_cells(Integer(3))
        False

sage.topology.simplicial_set_examples.Point()

  Return a single point called “*” as a simplicial set.

  This should return the same simplicial set each time it is called.

  EXAMPLES:

  Sage

      sage: P = simplicial_sets.Point()
      sage: P.is_pointed()
      True
      sage: P.nondegenerate_simplices()
      [*]

      sage: Q = simplicial_sets.Point()
      sage: P is Q
      True
      sage: P == Q
      True

  Python

      >>> from sage.all import *
      >>> P = simplicial_sets.Point()
      >>> P.is_pointed()
      True
      >>> P.nondegenerate_simplices()
      [*]

      >>> Q = simplicial_sets.Point()
      >>> P is Q
      True
      >>> P == Q
      True

sage.topology.simplicial_set_examples.PresentationComplex(G)

  Return a simplicial set constructed from a group presentation. The result is a subdivision of the presentation complex.

  The presentation complex has a single vertex and it has one edge for each generator. Then triangles (and eventually new edges to glue them) are added to realize the relations.

  INPUT:

  - `G` – a finitely presented group

  EXAMPLES:

  Sage

      sage: # needs sage.groups
      sage: G = SymmetricGroup(2).as_finitely_presented_group(); G
      Finitely presented group < a | a^2 >
      sage: S = simplicial_sets.PresentationComplex(G); S
      Simplicial set with 5 non-degenerate simplices
      sage: S.face_data()
      {Delta^0: None,
       a: (Delta^0, Delta^0),
       a^-1: (Delta^0, Delta^0),
       Ta: (a, s_0 Delta^0, a^-1),
       a^2: (a, s_0 Delta^0, a)}
      sage: S.fundamental_group()
      Finitely presented group < e0 | e0^2 >

  Python

      >>> from sage.all import *
      >>> # needs sage.groups
      >>> G = SymmetricGroup(Integer(2)).as_finitely_presented_group(); G
      Finitely presented group < a | a^2 >
      >>> S = simplicial_sets.PresentationComplex(G); S
      Simplicial set with 5 non-degenerate simplices
      >>> S.face_data()
      {Delta^0: None,
       a: (Delta^0, Delta^0),
       a^-1: (Delta^0, Delta^0),
       Ta: (a, s_0 Delta^0, a^-1),
       a^2: (a, s_0 Delta^0, a)}
      >>> S.fundamental_group()
      Finitely presented group < e0 | e0^2 >

sage.topology.simplicial_set_examples.RealProjectiveSpace(n)

  Return real \(n\)-dimensional projective space, as a simplicial set.

  This is constructed as the \(n\)-skeleton of the nerve of the group of order 2, and therefore has a single non-degenerate simplex in each dimension up to \(n\).

  EXAMPLES:

  Sage

      sage: # needs sage.groups
      sage: simplicial_sets.RealProjectiveSpace(7)
      RP^7
      sage: RP5 = simplicial_sets.RealProjectiveSpace(5)
      sage: RP5.homology()
      {0: 0, 1: C2, 2: 0, 3: C2, 4: 0, 5: Z}
      sage: RP5
      RP^5
      sage: latex(RP5)
      RP^{5}

      sage: BC2 = simplicial_sets.RealProjectiveSpace(Infinity)                       # needs sage.groups
      sage: latex(BC2)                                                                # needs sage.groups
      RP^{\infty}

  Python

      >>> from sage.all import *
      >>> # needs sage.groups
      >>> simplicial_sets.RealProjectiveSpace(Integer(7))
      RP^7
      >>> RP5 = simplicial_sets.RealProjectiveSpace(Integer(5))
      >>> RP5.homology()
      {0: 0, 1: C2, 2: 0, 3: C2, 4: 0, 5: Z}
      >>> RP5
      RP^5
      >>> latex(RP5)
      RP^{5}

      >>> BC2 = simplicial_sets.RealProjectiveSpace(Infinity)                       # needs sage.groups
      >>> latex(BC2)                                                                # needs sage.groups
      RP^{\infty}

sage.topology.simplicial_set_examples.Simplex(n)

  Return the \(n\)-simplex as a simplicial set.

  EXAMPLES:

  Sage

      sage: K = simplicial_sets.Simplex(2)
      sage: K
      2-simplex
      sage: latex(K)
      \Delta^{2}
      sage: K.n_cells(0)
      [(0,), (1,), (2,)]
      sage: K.n_cells(1)
      [(0, 1), (0, 2), (1, 2)]
      sage: K.n_cells(2)
      [(0, 1, 2)]

  Python

      >>> from sage.all import *
      >>> K = simplicial_sets.Simplex(Integer(2))
      >>> K
      2-simplex
      >>> latex(K)
      \Delta^{2}
      >>> K.n_cells(Integer(0))
      [(0,), (1,), (2,)]
      >>> K.n_cells(Integer(1))
      [(0, 1), (0, 2), (1, 2)]
      >>> K.n_cells(Integer(2))
      [(0, 1, 2)]

sage.topology.simplicial_set_examples.Sphere(n)

  Return the \(n\)-sphere as a simplicial set.

  It is constructed with two non-degenerate simplices: a vertex \(v_0\) (which is the base point) and an \(n\)-simplex \(\sigma_n\).

  INPUT:

  - `n` – integer

  EXAMPLES:

  Sage

      sage: S0 = simplicial_sets.Sphere(0)
      sage: S0
      S^0
      sage: S0.nondegenerate_simplices()
      [v_0, w_0]
      sage: S0.is_pointed()
      True
      sage: simplicial_sets.Sphere(4)
      S^4
      sage: latex(simplicial_sets.Sphere(4))
      S^{4}
      sage: simplicial_sets.Sphere(4).nondegenerate_simplices()
      [v_0, sigma_4]

  Python

      >>> from sage.all import *
      >>> S0 = simplicial_sets.Sphere(Integer(0))
      >>> S0
      S^0
      >>> S0.nondegenerate_simplices()
      [v_0, w_0]
      >>> S0.is_pointed()
      True
      >>> simplicial_sets.Sphere(Integer(4))
      S^4
      >>> latex(simplicial_sets.Sphere(Integer(4)))
      S^{4}
      >>> simplicial_sets.Sphere(Integer(4)).nondegenerate_simplices()
      [v_0, sigma_4]

sage.topology.simplicial_set_examples.Torus()

  Return the torus as a simplicial set.

  This computes the product of the circle with itself, where the circle is represented using a single 0-simplex and a single 1-simplex. Thus it has one 0-simplex, three 1-simplices, and two 2-simplices.

  EXAMPLES:

  Sage

      sage: T = simplicial_sets.Torus()
      sage: T.f_vector()
      [1, 3, 2]
      sage: T.homology(reduced=False)                                                 # needs sage.modules
      {0: Z, 1: Z x Z, 2: Z}

  Python

      >>> from sage.all import *
      >>> T = simplicial_sets.Torus()
      >>> T.f_vector()
      [1, 3, 2]
      >>> T.homology(reduced=False)                                                 # needs sage.modules
      {0: Z, 1: Z x Z, 2: Z}

sage.topology.simplicial_set_examples.simplicial_data_from_kenzo_output(filename)

  Return data to construct a simplicial set, given Kenzo output.

  INPUT:

  - `filename` – name of file containing the output from Kenzo’s `show-structure()` function

  OUTPUT: data to construct a simplicial set from the Kenzo output

  Several files with Kenzo output are in the directory `SAGE_EXTCODE/kenzo/`.

  EXAMPLES:

  Sage

      sage: from sage.topology.simplicial_set_examples import simplicial_data_from_kenzo_output
      sage: from sage.topology.simplicial_set import SimplicialSet
      sage: from pathlib import Path
      sage: sphere = Path(SAGE_ENV['SAGE_EXTCODE']) / 'kenzo' /'S4.txt'
      sage: S4 = SimplicialSet(simplicial_data_from_kenzo_output(sphere))             # needs pyparsing
      sage: S4.homology(reduced=False)                                                # needs pyparsing
      {0: Z, 1: 0, 2: 0, 3: 0, 4: Z}

  Python

      >>> from sage.all import *
      >>> from sage.topology.simplicial_set_examples import simplicial_data_from_kenzo_output
      >>> from sage.topology.simplicial_set import SimplicialSet
      >>> from pathlib import Path
      >>> sphere = Path(SAGE_ENV['SAGE_EXTCODE']) / 'kenzo' /'S4.txt'
      >>> S4 = SimplicialSet(simplicial_data_from_kenzo_output(sphere))             # needs pyparsing
      >>> S4.homology(reduced=False)                                                # needs pyparsing
      {0: Z, 1: 0, 2: 0, 3: 0, 4: Z}