7 Functions and operations for SCNormalSurface 7.1 Creating an SCNormalSurface object This 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]. 7.1-1 SCNSEmpty 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.  Example   gap> SCNSEmpty();  [NormalSurface    Properties known: Dim, FacetsEx, Name, Vertices.    Name="empty normal surface"  Dim=-1    /NormalSurface]    7.1-2 SCNSFromFacets 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.  Example   gap> sl:=SCNSFromFacets([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]);  [NormalSurface    Properties known: Dim, FacetsEx, Name, Vertices.    Name="unnamed complex 86"  Dim=2    /NormalSurface]    7.1-3 SCNS SCNS( facets )  method Returns: discrete normal surface of type SCNormalSurface upon success, fail otherwise. Internally calls SCNSFromFacets (7.1-2).  Example   gap> sl:=SCNS([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]);  [NormalSurface    Properties known: Dim, FacetsEx, Name, Vertices.    Name="unnamed complex 87"  Dim=2    /NormalSurface]    7.1-4 SCNSSlicing 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.  Example   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    Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\  etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\  e, Vertices.    Name="slicing [ [ 1, 2, 3, 4, 5 ], [ 6, 7, 8, 9, 10 ] ] of S^3 (VT)"  Dim=2  FVector=[ 17, 36, 12, 9 ]  EulerCharacteristic=2  IsOrientable=true  TopologicalType="S^2"    /NormalSurface]  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    Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\  etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\  e, Vertices.    Name="slicing [ [ 1, 3, 5, 7, 9 ], [ 2, 4, 6, 8, 10 ] ] of S^3 (VT)"  Dim=2  FVector=[ 25, 50, 0, 25 ]  EulerCharacteristic=0  IsOrientable=true  TopologicalType="T^2"    /NormalSurface]  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 ] ] ]    7.2 Generating new objects from discrete normal surfaces 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. 7.2-1 SCCopy SCCopy( complex )  method Returns: discrete normal surface of type SCNormalSurface upon success, fail otherwise. Copies a GAP object of type SCNormalSurface (cf. SCCopy).  Example   gap> sl:=SCNSSlicing(SCBdSimplex(4),[[1],[2..5]]);  [NormalSurface    Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\  etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\  e, Vertices.    Name="slicing [ [ 1 ], [ 2, 3, 4, 5 ] ] of S^3_5"  Dim=2  FVector=[ 4, 6, 4 ]  EulerCharacteristic=2  IsOrientable=true  TopologicalType="S^2"    /NormalSurface]  gap> sl_2:=SCCopy(sl);   [NormalSurface    Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\  etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\  e, Vertices.    Name="slicing [ [ 1 ], [ 2, 3, 4, 5 ] ] of S^3_5"  Dim=2  FVector=[ 4, 6, 4 ]  EulerCharacteristic=2  IsOrientable=true  TopologicalType="S^2"    /NormalSurface]  gap> IsIdenticalObj(sl,sl_2);   false    7.2-2 SCNSTriangulation 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.  Example   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 ]    7.3 Properties of SCNormalSurface objects Although 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. 7.3-1 SCConnectedComponents 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.  Example   gap> sl:=SCNSSlicing(SCBdCrossPolytope(4),[[1,2],[3..8]]);  [NormalSurface    Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\  etsEx, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalType, Vert\  ices.    Name="slicing [ [ 1, 2 ], [ 3, 4, 5, 6, 7, 8 ] ] of Bd(\beta^4)"  Dim=2  FVector=[ 12, 24, 16 ]  EulerCharacteristic=4  IsOrientable=true  TopologicalType="S^2 U S^2"    /NormalSurface]  gap> cc:=SCConnectedComponents(sl);  [ [NormalSurface    Properties known: Dim, EulerCharacteristic, FVector, FacetsEx, Genus, IsC\  onnected, IsOrientable, NSTriangulation, Name, TopologicalType, Vertices.    Name="unnamed complex 302_cc_#1"  Dim=2  FVector=[ 6, 12, 8 ]  EulerCharacteristic=2  IsOrientable=true  TopologicalType="S^2"    /NormalSurface], [NormalSurface    Properties known: Dim, EulerCharacteristic, FVector, FacetsEx, Genus, IsC\  onnected, IsOrientable, NSTriangulation, Name, TopologicalType, Vertices.    Name="unnamed complex 302_cc_#2"  Dim=2  FVector=[ 6, 12, 8 ]  EulerCharacteristic=2  IsOrientable=true  TopologicalType="S^2"    /NormalSurface] ]    7.3-2 SCDim 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).  Example   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    7.3-3 SCEulerCharacteristic SCEulerCharacteristic( sl )  method Returns: an integer upon success, fail otherwise. Computes the Euler characteristic of a discrete normal surface sl, cf. SCEulerCharacteristic.  Example   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    7.3-4 SCFVector 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.  Example   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 ]    7.3-5 SCFaceLattice 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)).  Example   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 ]    7.3-6 SCFaceLatticeEx 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)).  Example   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 ]    7.3-7 SCFpBettiNumbers 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.  Example   gap> SCLib.SearchByName("(S^2xS^1)#20");   [ [ 7617, "(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 ]    7.3-8 SCGenus SCGenus( sl )  method Returns: a non-negative integer upon success, fail otherwise. Computes the genus of a discrete normal surface sl.  Example   gap> SCLib.SearchByName("(S^2xS^1)#20");  [ [ 7617, "(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    7.3-9 SCHomology 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.  Example   gap> SCLib.SearchByName("(S^2xS^1)#20");   [ [ 7617, "(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, [ ] ] ]    7.3-10 SCIsConnected SCIsConnected( complex )  method Returns: true or false upon success, fail otherwise. Checks if a normal surface complex is connected.  Example   gap> list:=SCLib.SearchByAttribute("Dim=3 and F[1]=10");;  gap> c:=SCLib.Load(list[1][1]);  [SimplicialComplex    Properties known: AltshulerSteinberg, AutomorphismGroup,   AutomorphismGroupSize, AutomorphismGroupStructure,   AutomorphismGroupTransitivity, ConnectedComponents,   Dim, DualGraph, EulerCharacteristic, FVector,   FacetsEx, GVector, GeneratorsEx, HVector,   HasBoundary, HasInterior, Homology, Interior,   IsCentrallySymmetric, IsConnected,   IsEulerianManifold, IsManifold, IsOrientable,   IsPseudoManifold, IsPure, IsStronglyConnected,   MinimalNonFacesEx, Name, Neighborliness,   NumFaces[], Orientation, Reference, SkelExs[],   Vertices.    Name="S^3 (VT)"  Dim=3  AltshulerSteinberg=0  AutomorphismGroupSize=200  AutomorphismGroupStructure="(D10 x D10) : C2"  AutomorphismGroupTransitivity=1  EulerCharacteristic=0  FVector=[ 10, 35, 50, 25 ]  GVector=[ 5, 5 ]  HVector=[ 6, 11, 6, 1 ]  HasBoundary=false  HasInterior=true  Homology=[ [ 0, [ ] ], [ 0, [ ] ], [ 0, [ ] ], [ 1, [ ] ] ]  IsCentrallySymmetric=false  IsConnected=true  IsEulerianManifold=true  IsOrientable=true  IsPseudoManifold=true  IsPure=true  IsStronglyConnected=true  Neighborliness=1    /SimplicialComplex]  gap> sl:=SCNSSlicing(c,[[1..5],[6..10]]);  [NormalSurface    Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\  etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\  e, Vertices.    Name="slicing [ [ 1, 2, 3, 4, 5 ], [ 6, 7, 8, 9, 10 ] ] of S^3 (VT)"  Dim=2  FVector=[ 17, 36, 12, 9 ]  EulerCharacteristic=2  IsOrientable=true  TopologicalType="S^2"    /NormalSurface]  gap> SCIsConnected(sl);  true    7.3-11 SCIsEmpty 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.  Example   gap> sl:=SCNS([]);;  gap> SCIsEmpty(sl);  true    7.3-12 SCIsOrientable SCIsOrientable( sl )  method Returns: true or false upon success, fail otherwise. Checks if a discrete normal surface sl is orientable.  Example   gap> c:=SCBdSimplex(4);;  gap> sl:=SCNSSlicing(c,[[1,2],[3,4,5]]);  [NormalSurface    Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\  etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\  e, Vertices.    Name="slicing [ [ 1, 2 ], [ 3, 4, 5 ] ] of S^3_5"  Dim=2  FVector=[ 6, 9, 2, 3 ]  EulerCharacteristic=2  IsOrientable=true  TopologicalType="S^2"    /NormalSurface]  gap> SCIsOrientable(sl);  true    7.3-13 SCSkel 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.  Example   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 ] ] ]     Example   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 ] ]    7.3-14 SCSkelEx 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.  Example   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 ] ]     Example   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 ] ]    7.3-15 SCTopologicalType 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.  Example   gap> SCLib.SearchByName("(S^2xS^1)#20");   [ [ 7617, "(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    7.3-16 SCUnion 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.  Example   gap> list:=SCLib.SearchByAttribute("Dim=3 and F[1]=10");;  gap> c:=SCLib.Load(list[1][1]);  [SimplicialComplex    Properties known: AltshulerSteinberg, AutomorphismGroup,   AutomorphismGroupSize, AutomorphismGroupStructure,   AutomorphismGroupTransitivity, ConnectedComponents,   Dim, DualGraph, EulerCharacteristic, FVector,   FacetsEx, GVector, GeneratorsEx, HVector,   HasBoundary, HasInterior, Homology, Interior,   IsCentrallySymmetric, IsConnected,   IsEulerianManifold, IsManifold, IsOrientable,   IsPseudoManifold, IsPure, IsStronglyConnected,   MinimalNonFacesEx, Name, Neighborliness,   NumFaces[], Orientation, Reference, SkelExs[],   Vertices.    Name="S^3 (VT)"  Dim=3  AltshulerSteinberg=0  AutomorphismGroupSize=200  AutomorphismGroupStructure="(D10 x D10) : C2"  AutomorphismGroupTransitivity=1  EulerCharacteristic=0  FVector=[ 10, 35, 50, 25 ]  GVector=[ 5, 5 ]  HVector=[ 6, 11, 6, 1 ]  HasBoundary=false  HasInterior=true  Homology=[ [ 0, [ ] ], [ 0, [ ] ], [ 0, [ ] ], [ 1, [ ] ] ]  IsCentrallySymmetric=false  IsConnected=true  IsEulerianManifold=true  IsOrientable=true  IsPseudoManifold=true  IsPure=true  IsStronglyConnected=true  Neighborliness=1    /SimplicialComplex]  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"