SCNormalSurface
SCNormalSurface
objects
SCNormalSurface
SCNormalSurface
objectThis section contains functions to construct discrete normal surfaces that are slicings from a list of \(2\)-dimensional facets (triangles and quadrilaterals) or combinatorial \(3\)-manifolds.
For a very short introduction to the theory of discrete normal surfaces and slicings see Section 2.4 and Section 2.5, for an introduction to the GAP object type SCNormalSurface
see 5.4, for more information see the article [Spr11b].
‣ SCNSEmpty ( ) | ( function ) |
Returns: discrete normal surface of type SCNormalSurface
upon success, fail
otherwise.
Generates an empty complex (of dimension \(-1\)), i. e. an object of type SCNormalSurface
with empty facet list.
gap> SCNSEmpty(); <NormalSurface: empty normal surface | dim = -1>
‣ SCNSFromFacets ( facets ) | ( method ) |
Returns: discrete normal surface of type SCNormalSurface
upon success, fail
otherwise.
Constructor for a discrete normal surface from a facet list, see SCFromFacets
(6.1-1) for details.
gap> sl:=SCNSFromFacets([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]); <NormalSurface: unnamed complex 114 | dim = 2>
‣ SCNS ( facets ) | ( method ) |
Returns: discrete normal surface of type SCNormalSurface
upon success, fail
otherwise.
Internally calls SCNSFromFacets
(7.1-2).
gap> sl:=SCNS([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]); <NormalSurface: unnamed complex 115 | dim = 2>
‣ SCNSSlicing ( complex, slicing ) | ( function ) |
Returns: discrete normal surface of type SCNormalSurface
upon success, fail
otherwise.
Computes a slicing defined by a partition slicing of the set of vertices of the \(3\)-dimensional combinatorial pseudomanifold complex. In particular, slicing has to be a pair of lists of vertex labels and has to contain all vertex labels of complex.
gap> SCLib.SearchByAttribute("F=[ 10, 35, 50, 25 ]"); [ [ 19, "S^3 (VT)" ] ] gap> c:=SCLib.Load(last[1][1]);; gap> sl:=SCNSSlicing(c,[[1..5],[6..10]]); <NormalSurface: slicing [ [ 1, 2, 3, 4, 5 ], [ 6, 7, 8, 9, 10 ] ] of S^3 (VT) \ | dim = 2> gap> sl.Facets; [ [ [ 1, 6 ], [ 1, 8 ], [ 1, 9 ] ], [ [ 1, 6 ], [ 1, 8 ], [ 3, 6 ], [ 3, 8 ] ] , [ [ 1, 6 ], [ 1, 9 ], [ 4, 6 ], [ 4, 9 ] ], [ [ 1, 6 ], [ 3, 6 ], [ 4, 6 ] ], [ [ 1, 8 ], [ 1, 9 ], [ 1, 10 ] ], [ [ 1, 8 ], [ 1, 10 ], [ 3, 8 ], [ 3, 10 ] ], [ [ 1, 9 ], [ 1, 10 ], [ 2, 9 ], [ 2, 10 ] ], [ [ 1, 9 ], [ 2, 9 ], [ 4, 9 ] ], [ [ 1, 10 ], [ 2, 10 ], [ 3, 10 ] ], [ [ 2, 7 ], [ 2, 9 ], [ 2, 10 ] ], [ [ 2, 7 ], [ 2, 9 ], [ 4, 7 ], [ 4, 9 ] ], [ [ 2, 7 ], [ 2, 10 ], [ 5, 7 ], [ 5, 10 ] ], [ [ 2, 7 ], [ 4, 7 ], [ 5, 7 ] ], [ [ 2, 10 ], [ 3, 10 ], [ 5, 10 ] ], [ [ 3, 6 ], [ 3, 8 ], [ 5, 6 ], [ 5, 8 ] ], [ [ 3, 6 ], [ 4, 6 ], [ 5, 6 ] ] , [ [ 3, 8 ], [ 3, 10 ], [ 5, 8 ], [ 5, 10 ] ], [ [ 4, 6 ], [ 4, 7 ], [ 4, 9 ] ], [ [ 4, 6 ], [ 4, 7 ], [ 5, 6 ], [ 5, 7 ] ] , [ [ 5, 6 ], [ 5, 7 ], [ 5, 8 ] ], [ [ 5, 7 ], [ 5, 8 ], [ 5, 10 ] ] ] gap> sl:=SCNSSlicing(c,[[1,3,5,7,9],[2,4,6,8,10]]); <NormalSurface: slicing [ [ 1, 3, 5, 7, 9 ], [ 2, 4, 6, 8, 10 ] ] of S^3 (VT) \ | dim = 2> gap> sl.Facets; [ [ [ 1, 2 ], [ 1, 4 ], [ 3, 2 ], [ 3, 4 ] ], [ [ 1, 2 ], [ 1, 4 ], [ 9, 2 ], [ 9, 4 ] ], [ [ 1, 2 ], [ 1, 10 ], [ 3, 2 ], [ 3, 10 ] ], [ [ 1, 2 ], [ 1, 10 ], [ 9, 2 ], [ 9, 10 ] ], [ [ 1, 4 ], [ 1, 6 ], [ 3, 4 ], [ 3, 6 ] ], [ [ 1, 4 ], [ 1, 6 ], [ 9, 4 ], [ 9, 6 ] ], [ [ 1, 6 ], [ 1, 8 ], [ 3, 6 ], [ 3, 8 ] ], [ [ 1, 6 ], [ 1, 8 ], [ 9, 6 ], [ 9, 8 ] ], [ [ 1, 8 ], [ 1, 10 ], [ 3, 8 ], [ 3, 10 ] ], [ [ 1, 8 ], [ 1, 10 ], [ 9, 8 ], [ 9, 10 ] ], [ [ 3, 2 ], [ 3, 4 ], [ 5, 2 ], [ 5, 4 ] ], [ [ 3, 2 ], [ 3, 10 ], [ 5, 2 ], [ 5, 10 ] ], [ [ 3, 4 ], [ 3, 6 ], [ 5, 4 ], [ 5, 6 ] ], [ [ 3, 6 ], [ 3, 8 ], [ 5, 6 ], [ 5, 8 ] ], [ [ 3, 8 ], [ 3, 10 ], [ 5, 8 ], [ 5, 10 ] ], [ [ 5, 2 ], [ 5, 4 ], [ 7, 2 ], [ 7, 4 ] ], [ [ 5, 2 ], [ 5, 10 ], [ 7, 2 ], [ 7, 10 ] ], [ [ 5, 4 ], [ 5, 6 ], [ 7, 4 ], [ 7, 6 ] ], [ [ 5, 6 ], [ 5, 8 ], [ 7, 6 ], [ 7, 8 ] ], [ [ 5, 8 ], [ 5, 10 ], [ 7, 8 ], [ 7, 10 ] ], [ [ 7, 2 ], [ 7, 4 ], [ 9, 2 ], [ 9, 4 ] ], [ [ 7, 2 ], [ 7, 10 ], [ 9, 2 ], [ 9, 10 ] ], [ [ 7, 4 ], [ 7, 6 ], [ 9, 4 ], [ 9, 6 ] ], [ [ 7, 6 ], [ 7, 8 ], [ 9, 6 ], [ 9, 8 ] ], [ [ 7, 8 ], [ 7, 10 ], [ 9, 8 ], [ 9, 10 ] ] ]
simpcomp provides the possibility to copy and / or triangulate normal surfaces. Note that other constructions like the connected sum or the cartesian product do not make sense for (embedded) normal surfaces in general.
‣ SCCopy ( complex ) | ( method ) |
Returns: discrete normal surface of type SCNormalSurface
upon success, fail
otherwise.
Copies a GAP object of type SCNormalSurface
(cf. SCCopy
).
gap> sl:=SCNSSlicing(SCBdSimplex(4),[[1],[2..5]]); <NormalSurface: slicing [ [ 1 ], [ 2, 3, 4, 5 ] ] of S^3_5 | dim = 2> gap> sl_2:=SCCopy(sl); <NormalSurface: slicing [ [ 1 ], [ 2, 3, 4, 5 ] ] of S^3_5 | dim = 2> gap> IsIdenticalObj(sl,sl_2); false
‣ SCNSTriangulation ( sl ) | ( method ) |
Returns: simplicial complex of type SCSimplicialComplex
upon success, fail
otherwise.
Computes a simplicial subdivision of a slicing sl without introducing new vertices. The subdivision is stored as a property of sl and thus is returned as an immutable object. Note that symmetry may be lost during the computation.
gap> SCLib.SearchByAttribute("F=[ 10, 35, 50, 25 ]"); [ [ 19, "S^3 (VT)" ] ] gap> c:=SCLib.Load(last[1][1]);; gap> sl:=SCNSSlicing(c,[[1,3,5,7,9],[2,4,6,8,10]]);; gap> sl.F; [ 25, 50, 0, 25 ] gap> sc:=SCNSTriangulation(sl);; gap> sc.F; [ 25, 75, 50 ]
SCNormalSurface
objectsAlthough some properties of a discrete normal surface can be computed by using the functions for simplicial complexes, there is a variety of properties needing specially designed functions. See below for a list.
‣ SCConnectedComponents ( complex ) | ( method ) |
Returns: a list of simplicial complexes of type SCNormalSurface
upon success, fail
otherwise.
Computes all connected components of an arbitrary normal surface.
gap> sl:=SCNSSlicing(SCBdCrossPolytope(4),[[1,2],[3..8]]); <NormalSurface: slicing [ [ 1, 2 ], [ 3, 4, 5, 6, 7, 8 ] ] of Bd(\beta^4) | di\ m = 2> gap> cc:=SCConnectedComponents(sl); [ <NormalSurface: Connected component #1 of slicing [ [ 1, 2 ], [ 3, 4, 5, 6, \ 7, 8 ] ] of Bd(\beta^4) | dim = 2>, <NormalSurface: Connected component #2 of slicing [ [ 1, 2 ], [ 3, 4, 5, 6, \ 7, 8 ] ] of Bd(\beta^4) | dim = 2> ]
‣ SCDim ( sl ) | ( method ) |
Returns: an integer upon success, fail
otherwise.
Computes the dimension of a discrete normal surface (which is always \(2\) if the slicing sl is not empty).
gap> sl:=SCNSEmpty();; gap> SCDim(sl); -1 gap> sl:=SCNSFromFacets([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]);; gap> SCDim(sl); 2
‣ SCEulerCharacteristic ( sl ) | ( method ) |
Returns: an integer upon success, fail
otherwise.
Computes the Euler characteristic of a discrete normal surface sl, cf. SCEulerCharacteristic
.
gap> list:=SCLib.SearchByName("S^2xS^1");; gap> c:=SCLib.Load(list[1][1]);; gap> sl:=SCNSSlicing(c,[[1..5],[6..10]]);; gap> SCEulerCharacteristic(sl); 4
‣ SCFVector ( sl ) | ( method ) |
Returns: a \(1\), \(3\) or \(4\) tuple of (non-negative) integer values upon success, fail
otherwise.
Computes the \(f\)-vector of a discrete normal surface, i. e. the number of vertices, edges, triangles and quadrilaterals of sl, cf. SCFVector
.
gap> list:=SCLib.SearchByName("S^2xS^1");; gap> c:=SCLib.Load(list[1][1]);; gap> sl:=SCNSSlicing(c,[[1..5],[6..10]]);; gap> SCFVector(sl); [ 20, 40, 16, 8 ]
‣ SCFaceLattice ( complex ) | ( method ) |
Returns: a list of facet lists upon success, fail
otherwise.
Computes the face lattice of a discrete normal surface sl in the original labeling. Triangles and quadrilaterals are stored separately (cf. SCSkel
(6.9-54)).
gap> c:=SCBdSimplex(4);; gap> sl:=SCNSSlicing(c,[[1,2],[3..5]]);; gap> SCFaceLattice(sl); [ [ [ [ 1, 3 ] ], [ [ 1, 4 ] ], [ [ 1, 5 ] ], [ [ 2, 3 ] ], [ [ 2, 4 ] ], [ [ 2, 5 ] ] ], [ [ [ 1, 3 ], [ 1, 4 ] ], [ [ 1, 3 ], [ 1, 5 ] ], [ [ 1, 3 ], [ 2, 3 ] ], [ [ 1, 4 ], [ 1, 5 ] ], [ [ 1, 4 ], [ 2, 4 ] ], [ [ 1, 5 ], [ 2, 5 ] ], [ [ 2, 3 ], [ 2, 4 ] ], [ [ 2, 3 ], [ 2, 5 ] ], [ [ 2, 4 ], [ 2, 5 ] ] ] , [ [ [ 1, 3 ], [ 1, 4 ], [ 1, 5 ] ], [ [ 2, 3 ], [ 2, 4 ], [ 2, 5 ] ] ], [ [ [ 1, 3 ], [ 1, 4 ], [ 2, 3 ], [ 2, 4 ] ], [ [ 1, 3 ], [ 1, 5 ], [ 2, 3 ], [ 2, 5 ] ], [ [ 1, 4 ], [ 1, 5 ], [ 2, 4 ], [ 2, 5 ] ] ] ] gap> sl.F; [ 6, 9, 2, 3 ]
‣ SCFaceLatticeEx ( complex ) | ( method ) |
Returns: a list of face lists upon success, fail
otherwise.
Computes the face lattice of a discrete normal surface sl in the standard labeling. Triangles and quadrilaterals are stored separately (cf. SCSkelEx
(6.9-55)).
gap> c:=SCBdSimplex(4);; gap> sl:=SCNSSlicing(c,[[1,2],[3..5]]);; gap> SCFaceLatticeEx(sl); [ [ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ], [ 6 ] ], [ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 2, 3 ], [ 2, 5 ], [ 3, 6 ], [ 4, 5 ], [ 4, 6 ], [ 5, 6 ] ], [ [ 1, 2, 3 ], [ 4, 5, 6 ] ], [ [ 1, 2, 4, 5 ], [ 1, 3, 4, 6 ], [ 2, 3, 5, 6 ] ] ] gap> sl.F; [ 6, 9, 2, 3 ]
‣ SCFpBettiNumbers ( sl, p ) | ( method ) |
Returns: a list of non-negative integers upon success, fail
otherwise.
Computes the Betti numbers modulo p of a slicing sl. Internally, sl is triangulated (using SCNSTriangulation
(7.2-2)) and the Betti numbers are computed via SCFpBettiNumbers
using the triangulation.
gap> SCLib.SearchByName("(S^2xS^1)#20"); [ [ 633, "(S^2xS^1)#20" ] ] gap> c:=SCLib.Load(last[1][1]);; gap> c.F; [ 27, 298, 542, 271 ] gap> sl:=SCNSSlicing(c,[[1..13],[14..27]]);; gap> SCFpBettiNumbers(sl,2); [ 2, 14, 2 ]
‣ SCGenus ( sl ) | ( method ) |
Returns: a non-negative integer upon success, fail
otherwise.
Computes the genus of a discrete normal surface sl.
gap> SCLib.SearchByName("(S^2xS^1)#20"); [ [ 633, "(S^2xS^1)#20" ] ] gap> c:=SCLib.Load(last[1][1]);; gap> c.F; [ 27, 298, 542, 271 ] gap> sl:=SCNSSlicing(c,[[1..12],[13..27]]);; gap> SCIsConnected(sl); true gap> SCGenus(sl); 7
‣ SCHomology ( sl ) | ( method ) |
Returns: a list of homology groups upon success, fail
otherwise.
Computes the homology of a slicing sl. Internally, sl is triangulated (cf. SCNSTriangulation
(7.2-2)) and simplicial homology is computed via SCHomology
using the triangulation.
gap> SCLib.SearchByName("(S^2xS^1)#20"); [ [ 633, "(S^2xS^1)#20" ] ] gap> c:=SCLib.Load(last[1][1]);; gap> c.F; [ 27, 298, 542, 271 ] gap> sl:=SCNSSlicing(c,[[1..12],[13..27]]);; gap> sl.Homology; [ [ 0, [ ] ], [ 14, [ ] ], [ 1, [ ] ] ] gap> sl:=SCNSSlicing(c,[[1..13],[14..27]]);; gap> sl.Homology; [ [ 1, [ ] ], [ 14, [ ] ], [ 2, [ ] ] ]
‣ SCIsConnected ( complex ) | ( method ) |
Returns: true
or false
upon success, fail
otherwise.
Checks if a normal surface complex is connected.
gap> list:=SCLib.SearchByAttribute("Dim=3 and F[1]=10");; gap> c:=SCLib.Load(list[1][1]); <SimplicialComplex: S^3 (VT) | dim = 3 | n = 10> gap> sl:=SCNSSlicing(c,[[1..5],[6..10]]); <NormalSurface: slicing [ [ 1, 2, 3, 4, 5 ], [ 6, 7, 8, 9, 10 ] ] of S^3 (VT) \ | dim = 2> gap> SCIsConnected(sl); true
‣ SCIsEmpty ( complex ) | ( method ) |
Returns: true
or false
upon success, fail
otherwise.
Checks if a normal surface complex is the empty complex, i. e. a SCNormalSurface
object with empty facet list.
gap> sl:=SCNS([]);; gap> SCIsEmpty(sl); true
‣ SCIsOrientable ( sl ) | ( method ) |
Returns: true
or false
upon success, fail
otherwise.
Checks if a discrete normal surface sl is orientable.
gap> c:=SCBdSimplex(4);; gap> sl:=SCNSSlicing(c,[[1,2],[3,4,5]]); <NormalSurface: slicing [ [ 1, 2 ], [ 3, 4, 5 ] ] of S^3_5 | dim = 2> gap> SCIsOrientable(sl); true
‣ SCSkel ( sl, k ) | ( method ) |
Returns: a face list (of k+1tuples) or a list of face lists upon success, fail
otherwise.
Computes all faces of cardinality k+1 in the original labeling: k \(= 0\) computes the vertices, k \(= 1\) computes the edges, k \(= 2\) computes the triangles, k \(= 3\) computes the quadrilaterals.
If k is a list (necessarily a sublist of [ 0,1,2,3 ]
) all faces of all cardinalities contained in k are computed.
gap> c:=SCBdSimplex(4);; gap> sl:=SCNSSlicing(c,[[1],[2..5]]);; gap> SCSkel(sl,1); [ [ [ 1, 2 ], [ 1, 3 ] ], [ [ 1, 2 ], [ 1, 4 ] ], [ [ 1, 2 ], [ 1, 5 ] ], [ [ 1, 3 ], [ 1, 4 ] ], [ [ 1, 3 ], [ 1, 5 ] ], [ [ 1, 4 ], [ 1, 5 ] ] ]
gap> c:=SCBdSimplex(4);; gap> sl:=SCNSSlicing(c,[[1],[2..5]]);; gap> SCSkel(sl,3); [ ] gap> sl:=SCNSSlicing(c,[[1,2],[3..5]]);; gap> SCSkelEx(sl,3); [ [ 1, 2, 4, 5 ], [ 1, 3, 4, 6 ], [ 2, 3, 5, 6 ] ]
‣ SCSkelEx ( sl, k ) | ( method ) |
Returns: a face list (of k+1tuples) or a list of face lists upon success, fail
otherwise.
Computes all faces of cardinality k+1 in the standard labeling: k \(= 0\) computes the vertices, k \(= 1\) computes the edges, k \(= 2\) computes the triangles, k \(= 3\) computes the quadrilaterals.
If k is a list (necessarily a sublist of [ 0,1,2,3 ]
) all faces of all cardinalities contained in k are computed.
gap> c:=SCBdSimplex(4);; gap> sl:=SCNSSlicing(c,[[1],[2..5]]);; gap> SCSkelEx(sl,1); [ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 2, 3 ], [ 2, 4 ], [ 3, 4 ] ]
gap> c:=SCBdSimplex(4);; gap> sl:=SCNSSlicing(c,[[1],[2..5]]);; gap> SCSkelEx(sl,3); [ ] gap> sl:=SCNSSlicing(c,[[1,2],[3..5]]);; gap> SCSkelEx(sl,3); [ [ 1, 2, 4, 5 ], [ 1, 3, 4, 6 ], [ 2, 3, 5, 6 ] ]
‣ SCTopologicalType ( sl ) | ( method ) |
Returns: a string upon success, fail
otherwise.
Determines the topological type of sl via the classification theorem for closed compact surfaces. If sl is not connected, the topological type of each connected component is computed.
gap> SCLib.SearchByName("(S^2xS^1)#20"); [ [ 633, "(S^2xS^1)#20" ] ] gap> c:=SCLib.Load(last[1][1]);; gap> c.F; [ 27, 298, 542, 271 ] gap> for i in [1..26] do sl:=SCNSSlicing(c,[[1..i],[i+1..27]]); Print(sl.TopologicalType,"\n"); od; S^2 S^2 S^2 S^2 S^2 U S^2 S^2 U S^2 S^2 (T^2)#3 (T^2)#5 (T^2)#4 (T^2)#3 (T^2)#7 (T^2)#7 U S^2 (T^2)#7 U S^2 (T^2)#7 U S^2 (T^2)#8 U S^2 (T^2)#7 U S^2 (T^2)#8 (T^2)#6 (T^2)#6 (T^2)#5 (T^2)#3 (T^2)#2 T^2 S^2 S^2
‣ SCUnion ( complex1, complex2 ) | ( method ) |
Returns: normal surface of type SCNormalSurface
upon success, fail
otherwise.
Forms the union of two normal surfaces complex1 and complex2 as the normal surface formed by the union of their facet sets. The two arguments are not altered. Note: for the union process the vertex labelings of the complexes are taken into account, see also Operation Union (SCNormalSurface, SCNormalSurface)
(5.6-1). Facets occurring in both arguments are treated as one facet in the new complex.
gap> list:=SCLib.SearchByAttribute("Dim=3 and F[1]=10");; gap> c:=SCLib.Load(list[1][1]); <SimplicialComplex: S^3 (VT) | dim = 3 | n = 10> gap> sl1:=SCNSSlicing(c,[[1..5],[6..10]]);; gap> sl2:=sl1+10;; gap> sl3:=SCUnion(sl1,sl2);; gap> SCTopologicalType(sl3); "S^2 U S^2"
generated by GAPDoc2HTML