Simplicial Complexes
Introduction
Abstract simplicial complexes provide a combinatorial way to define topological spaces. By no means every topological space arises in this way, but this is a (most) natural choice in a computational setup.
A simplicial complex $K$ on a vertex set $V$ is a nonempty subset of $2^V$ such that for each $\sigma \in K$ and $\tau \subset\sigma$ we have $\tau\in K$. Here $V$ is usually $[n] = \{1,2,\dots,n\}$ for some $n\geq 0$.
General textbooks offering details on the theory include:
Construction
SimplicialComplex — MethodSimplicialComplex(generators::Union{Vector{Vector{Int}}, Vector{Set{Int}}})Construct an abstract simplicial complex from a set of faces. While arbitrary nonnegative integers are allowed as vertices, they will be relabeled to consecutive integers starting at 1.
Examples
julia> K = SimplicialComplex([[1,2,3],[2,3,4]])
Abstract simplicial complex of dimension 2 on 4 verticesSimplicial complex comprising the empty set only:
julia> empty = SimplicialComplex(Vector{Set{Int}}([]))
Abstract simplicial complex of dimension -1 on 0 verticesThe original vertices can be recovered:
julia> L = SimplicialComplex([[0,2,17],[2,17,90]]);
julia> facets(L)
2-element Vector{Set{Int64}}:
Set([2, 3, 1])
Set([4, 2, 3])
julia> vertexindices(L)
4-element Vector{Int64}:
0
2
17
90Subcomplexes
star_subcomplex — Methodstar_subcomplex(K::SimplicialComplex, sigma::Union{Vector{Int}, Set{Int}})Return the star of the face sigma in the abstract simplicial complex K.
Examples
julia> K = SimplicialComplex([[1,2,3],[2,3,4]]);
julia> star_subcomplex(K,[1])
Abstract simplicial complex of dimension 2 on 3 verticeslink_subcomplex — Methodlink_subcomplex(K::SimplicialComplex, sigma::Union{Vector{Int}, Set{Int}})Return the link of the face sigma in the abstract simplicial complex K.
Examples
julia> K = SimplicialComplex([[1,2,3],[2,3,4]]);
julia> link_subcomplex(K,[2,3])
Abstract simplicial complex of dimension 0 on 2 verticesSurface examples
torus — Methodtorus()Construct Möbius' (vertex-minimal) 7-vertex triangulation of the torus (surface).
klein_bottle — Methodklein_bottle()Construct a 9-vertex triangulation of the Klein bottle.
real_projective_plane — Methodreal_projective_plane()Construct the (vertex-minimal) 6-vertex triangulation of the real projective plane.
Other examples
complex_projective_plane — Methodcomplex_projective_plane()Construct the (vertex-minimal) 9-vertex triangulation of the complex projective plane.
Basic properties
nvertices — Methodnvertices(K::SimplicialComplex)Return the number of vertices of the abstract simplicial complex K.
Examples
julia> nvertices(torus())
7dim — Methoddim(K::SimplicialComplex)Return the dimension of the abstract simplicial complex K.
f_vector — Methodf_vector(K::SimplicialComplex)Return the face vector (number of faces per dimension) of the abstract simplicial complex K.
Examples
julia> f_vector(torus())
3-element Vector{Int64}:
7
21
14h_vector — Methodh_vector(K::SimplicialComplex)Return the h-vector of the abstract simplicial complex K.
Examples
julia> h_vector(torus())
4-element Vector{Int64}:
1
4
10
-1euler_characteristic — Methodeuler_characteristic(K::SimplicialComplex)Return the reduced Euler characteristic of the abstract simplicial complex K.
Examples
julia> euler_characteristic(complex_projective_plane())
2Homology and cohomology
homology — Methodhomology(K::SimplicialComplex, i::Int)Return i-th reduced integral homology group of K. Recall that the 0-th homology group is trivial if and only if K is connected.
Examples
julia> [ homology(real_projective_plane(), i) for i in [0,1,2] ]
3-element Vector{GrpAbFinGen}:
GrpAb: Z/1
GrpAb: Z/2
GrpAb: Z/1betti_numbers — Methodbetti_numbers(K::SimplicialComplex)Return the reduced rational Betti numbers of the abstract simplicial complex K.
Examples
julia> betti_numbers(klein_bottle())
3-element Vector{Int64}:
0
1
0cohomology — Methodcohomology(K::SimplicialComplex, i::Int)Return i-th reduced integral cohomology group of K.
Examples
julia> K = SimplicialComplex([[0,1],[1,2],[0,2]]);
julia> cohomology(K,1)
GrpAb: ZFundamental group
fundamental_group — Methodfundamental_group(K::SimplicialComplex)Return the fundamental group of the abstract simplicial complex K.
Examples
julia> pi_1 = fundamental_group(torus());
julia> describe(pi_1)
"Z x Z"Connection to commutative algebra
The complements of the minimal non-faces form the facets of the Alexander dual.
minimal_nonfaces — Methodminimal_nonfaces(K::SimplicialComplex)Return the minimal non-faces of the abstract simplicial complex K.
Examples
julia> K = SimplicialComplex([[1,2,3],[2,3,4]]);
julia> minimal_nonfaces(K)
1-element Vector{Set{Int64}}:
Set([4, 1])alexander_dual — Methodalexander_dual(K::SimplicialComplex)Return the Alexander dual of the abstract simplicial complex K.
Examples
julia> K = SimplicialComplex([[1,2,3],[2,3,4]]);
julia> alexander_dual(K)
Abstract simplicial complex of dimension 1 on 2 verticesLet $K$ be a simplicial complex on $n$ vertices. The minimal non-faces of $K$ generate a square-free monomial ideal, known as the Stanley-Reisner ideal of $K$. The quotient of the polynomial ring (in $n$ variables, with integer coefficients) modulo that ideal is the Stanley-Reisner ring. For details see Chapter 5 of Winfried Bruns, Jürgen Herzog (2009).
stanley_reisner_ideal — Methodstanley_reisner_ideal(K::SimplicialComplex)Return the Stanley-Reisner ideal of the abstract simplicial complex K.
Examples
julia> stanley_reisner_ideal(real_projective_plane())
ideal(x1*x2*x3, x1*x2*x4, x1*x5*x6, x2*x5*x6, x1*x3*x6, x1*x4*x5, x3*x4*x5, x3*x4*x6, x2*x3*x5, x2*x4*x6)stanley_reisner_ideal — Methodstanley_reisner_ideal(R::MPolyRing, K::SimplicialComplex)Return the Stanley-Reisner ideal of the abstract simplicial complex K, in the given ring R.
Examples
julia> R, _ = QQ["a","b","c","d","e","f"];
julia> stanley_reisner_ideal(R, real_projective_plane())
ideal(a*b*c, a*b*d, a*e*f, b*e*f, a*c*f, a*d*e, c*d*e, c*d*f, b*c*e, b*d*f)stanley_reisner_ring — Methodstanley_reisner_ring(K::SimplicialComplex)Return the Stanley-Reisner ring of the abstract simplicial complex K.
Examples
julia> K = SimplicialComplex([[1,2,3],[2,3,4]]);
julia> stanley_reisner_ring(K)
(Quotient of multivariate polynomial ring by ideal with 1 generator, Map from
Multivariate polynomial ring in 4 variables over QQ to Quotient of multivariate polynomial ring by ideal with 1 generator defined by a julia-function with inverse)stanley_reisner_ring — Methodstanley_reisner_ring(R::MPolyRing, K::SimplicialComplex)Return the Stanley-Reisner ring of the abstract simplicial complex K, as a quotient of a given ring R.
Examples
julia> R, _ = ZZ["a","b","c","d","e","f"];
julia> stanley_reisner_ring(R, real_projective_plane())
(Quotient of multivariate polynomial ring by ideal with 10 generators, Map from
Multivariate polynomial ring in 6 variables over ZZ to Quotient of multivariate polynomial ring by ideal with 10 generators defined by a julia-function with inverse)Saving and loading
Objects of type SimplicialComplex can be saved to a file and loaded with the two methods save and load. The file is in JSON format and contains the underlying polymake object. In particular, such a file can be read by both polymake and OSCAR.