7. Functions for normal surfaces

7.1 Creating an SCNormalSurface object

This section contains functions to construct normal surfaces from facet lists or combinatorial 3-manifolds.

7.1-1 SCNSEmpty
> SCNSEmpty( )( function )

Returns: normal surface with empty facet list upon success, fail otherwise.

Generates an empty complex (of dimension -1).


 gap> SCNSEmpty();
 [NormalSurface
 
  Properties known: Dim, Faces, Facets, Name, VertexLabels.
 
  Name="empty normal surface"
  Dim=-1
 
 /NormalSurface]
 gap> 
 

7.1-2 SCNSFromFacets
> SCNSFromFacets( facets )( function )

Returns: A new object of type SCNormalSurface upon success, fail otherwise.

Constructor of a normal surface from a facet list, see SCFromFacets (4.1-1) for details.


 gap> ns:=SCNSFromFacets([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]);
 [NormalSurface
 
  Properties known: Dim, Facets, Name, VertexLabels.
 
  Name="unnamed normal surface n"
  Dim=2
 
 /NormalSurface]
 gap> 
 

7.1-3 SCNS
> SCNS( facets )( function )

Returns: A new object of type SCNormalSurface upon success, fail otherwise.

Internally calls SCNSFromFacets (7.1-2).


 gap> ns:=SCNS([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]);
 [NormalSurface
 
  Properties known: Dim, Facets, Name, VertexLabels.
 
  Name="unnamed normal surface n"
  Dim=2
 
 /NormalSurface]
 gap> 
 

7.1-4 SCNSSlicing
> SCNSSlicing( complex, slicing )( function )

Returns: a normal surface upon success, fail otherwise.

Computes a slicing defined by a partition slicing of the set of vertices of the 3-dimensional combinatorial pseudo manifold complex. slicing has to be of size 2.


 gap> SCLib.SearchByAttribute("F=[6,15,18,9]");
 [ [ 4, "S^3 (VT)" ] ]
 gap> c:=SCLib.Load(4);;                       
 gap> ns:=SCNSSlicing(c,[[1,2,3],[4,5,6]]);    
 [NormalSurface
 
  Properties known: Chi, ConnectedComponents, Dim, F, Facets, Genus, IsConnect\
 ed, Name, Oriented, Subdivision, TopologicalType, VertexLabels, Vertices.
 
  Name="slicing [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] of S^3 (VT)"
  Dim=2
  Chi=2
  F=[ 9, 16, 4, 5 ]
  IsConnected=true
  TopologicalType="S^2"
 
 /NormalSurface]
 gap> ns.Facets;
 [ [ [ 1, 4 ], [ 2, 4 ], [ 3, 4 ] ], 
   [ [ 1, 6 ], [ 2, 6 ], [ 3, 6 ] ], 
   [ [ 1, 4 ], [ 1, 5 ], [ 2, 4 ], [ 2, 5 ] ], 
   [ [ 1, 5 ], [ 1, 6 ], [ 2, 5 ], [ 2, 6 ] ], 
   [ [ 1, 4 ], [ 1, 6 ], [ 3, 4 ], [ 3, 6 ] ], 
   [ [ 1, 4 ], [ 1, 5 ], [ 1, 6 ] ], 
   [ [ 2, 4 ], [ 2, 5 ], [ 3, 4 ], [ 3, 5 ] ], 
   [ [ 2, 5 ], [ 2, 6 ], [ 3, 5 ], [ 3, 6 ] ], 
   [ [ 3, 4 ], [ 3, 5 ], [ 3, 6 ] ] ]
 gap> ns:=SCNSSlicing(c,[[1,3,5],[2,4,6]]);    
 [NormalSurface
 
  Properties known: Chi, ConnectedComponents, Dim, F, Facets, Genus, IsConnect\
 ed, Name, Oriented, Subdivision, TopologicalType, VertexLabels, Vertices.
 
  Name="slicing [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] of S^3 (VT)"
  Dim=2
  Chi=0
  F=[ 9, 18, 0, 9 ]
  IsConnected=true
  TopologicalType="T^2"
 
 /NormalSurface]
 gap> ns.Facets;                           
 [ [ [ 1, 2 ], [ 1, 4 ], [ 3, 2 ], [ 3, 4 ] ], 
   [ [ 1, 2 ], [ 1, 6 ], [ 3, 2 ], [ 3, 6 ] ], 
   [ [ 1, 2 ], [ 1, 4 ], [ 5, 2 ], [ 5, 4 ] ], 
   [ [ 1, 2 ], [ 1, 6 ], [ 5, 2 ], [ 5, 6 ] ], 
   [ [ 1, 4 ], [ 1, 6 ], [ 3, 4 ], [ 3, 6 ] ], 
   [ [ 1, 4 ], [ 1, 6 ], [ 5, 4 ], [ 5, 6 ] ], 
   [ [ 3, 2 ], [ 3, 4 ], [ 5, 2 ], [ 5, 4 ] ], 
   [ [ 3, 2 ], [ 3, 6 ], [ 5, 2 ], [ 5, 6 ] ], 
   [ [ 3, 4 ], [ 3, 6 ], [ 5, 4 ], [ 5, 6 ] ] ]
 gap> 
 

7.2 Generating new objects from 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 SCNSCopy
> SCNSCopy( complex )( function )

Returns: a normal surface upon success, fail otherwise.

Copies a GAP object of type SCNormalSurface (cf. SCCopy (3.1-2)).


 gap> sl:=SCNSSlicing(SCBdSimplex(4),[[1],[2..5]]);
 [NormalSurface
 
  Properties known: Chi, ConnectedComponents, Dim, F, Facets, Genus, IsConnect\
 ed, Name, Oriented, Subdivision, TopologicalType, VertexLabels, Vertices.
 
  Name="slicing [ [ 1 ], [ 2, 3, 4, 5 ] ] of S^3_5"
  Dim=2
  Chi=2
  F=[ 4, 6, 4 ]
  IsConnected=true
  TopologicalType="S^2"
 
 /NormalSurface]
 gap> sl_2:=SCNSCopy(sl);                          
 [NormalSurface
 
  Properties known: Chi, ConnectedComponents, Dim, F, Facets, Genus, IsConnect\
 ed, Name, Oriented, Subdivision, TopologicalType, VertexLabels, Vertices.
 
  Name="slicing [ [ 1 ], [ 2, 3, 4, 5 ] ] of S^3_5"
  Dim=2
  Chi=2
  F=[ 4, 6, 4 ]
  IsConnected=true
  TopologicalType="S^2"
 
 /NormalSurface]
 gap> IsIdenticalObj(sl,sl_2);                     
 false
 gap> 
 

7.2-2 SCNSSubdivision
> SCNSSubdivision( normalsurface )( function )

Returns: a simplicial complex upon success, fail otherwise.

Computes a simplicial subdivision of normalsurface without introducing new vertices. The subdivision is stored as a property of normalsurface. Note, that symmetry may be lost during the process of subdividing.


 gap> SCLib.SearchByAttribute("F=[6,15,18,9]");
 [ [ 4, "S^3 (VT)" ] ]
 gap> c:=SCLib.Load(4);;
 gap> ns:=SCNSSlicing(c,[[1,3,5],[2,4,6]]);;
 gap> ns.F; 
 [ 9, 18, 0, 9 ]
 gap> sc:=SCNSSubdivision(ns);;
 gap> sc.F;
 [ 9, 27, 18 ]
 gap> 
 

7.3 Properties of SCNormalSurface objects

Although some properties of a 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 SCNSDim
> SCNSDim( normalsurface )( function )

Returns: 2 if normalsurface is not empty, -1 otherwise.

Computes the dimension of a normal surface (which is always 2 in the non-empty case.


 gap> ns:=SCNSEmpty();;                                                    
 gap> SCNSDim(ns);                                                         
 -1
 gap> ns:=SCNSFromFacets([[1,2,3],[1,2,4,5],[1,3,4,6],[2,3,5,6],[4,5,6]]);;
 gap> SCNSDim(ns);                                                         
 2
 gap> 
 

7.3-2 SCNSEulerCharacteristic
> SCNSEulerCharacteristic( normalsurface )( function )

Returns: an integer upon success, fail otherwise.

Computes the Euler characteristic of a normal surface.


 gap> SCLib.SearchByName("S^2xS^1");  
 [ [ 24, "S^2xS^1 (VT)" ], [ 33, "S^2xS^1 (VT)" ], [ 68, "S^2xS^1 (VT)" ], 
 [ 81, "S^2xS^1 (VT)" ], [ 82, "S^2xS^1 (VT)" ], [ 83, "S^2xS^1 (VT)" ], ... 
 ]
 gap> c:=SCLib.Load(24);;             
 gap> ns:=c.Slicing([[1..5],[6..10]]);;
 gap> SCNSEulerCharacteristic(ns);                 
 4
 gap> 
 

7.3-3 SCNSFVector
> SCNSFVector( normalsurface )( function )

Returns: a 1, 3 or 4 tuple of (non-negative) integer values upon success, fail otherwise.

Computes the f-vector of a normal surface, i. e. the number of vertices, edges, triangles and quadrilaterals of normalsurface.


 gap> SCLib.SearchByName("S^2xS^1");  
 [ [ 24, "S^2xS^1 (VT)" ], [ 33, "S^2xS^1 (VT)" ], [ 68, "S^2xS^1 (VT)" ], 
 [ 81, "S^2xS^1 (VT)" ], [ 82, "S^2xS^1 (VT)" ], [ 83, "S^2xS^1 (VT)" ], ... 
 ]
 gap> c:=SCLib.Load(24);;             
 gap> ns:=c.Slicing([[1..5],[6..10]]);;
 gap> SCNSFVector(ns);                 
 [ 20, 40, 16, 8 ]
 gap> 
 

7.3-4 SCNSFaceLattice
> SCNSFaceLattice( complex )( function )

Returns: a list of facet lists upon success, fail otherwise.

Computes the face lattice of a normal surface in original labeling. Triangles and quadrilaterals are stored separately (cf. SCNSSkel (7.3-9)).


 gap> c:=SCBdSimplex(4);;              
 gap> ns:=SCNSSlicing(c,[[1,2],[3..5]]);;
 gap> SCNSFaceLattice(ns);                            
 [ [ [ [ 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> ns.F;
 [ 6, 9, 2, 3 ]
 gap> 
 

7.3-5 SCNSFaceLatticeEx
> SCNSFaceLatticeEx( complex )( function )

Returns: a list of facet lists upon success, fail otherwise.

Computes the face lattice of a normal surface in standard labeling. Triangles and quadrilaterals are stored separately (cf. SCNSSkelEx (7.3-10)).


 gap> c:=SCBdSimplex(4);;              
 gap> ns:=SCNSSlicing(c,[[1,2],[3..5]]);;
 gap> SCNSFaceLatticeEx(ns);                            
 [ [ [ 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> ns.F;
 [ 6, 9, 2, 3 ]
 gap> 
 

7.3-6 SCNSFpBettiNumbers
> SCNSFpBettiNumbers( normalsurface, p )( function )

Returns: a list of non-negative integers upon success, fail otherwise

Computes the Betti numbers modulo p of normalsurface. Internally, normalsurface is subdivided and the Betti numbers are computed on the subdivision (cf. SCNSSubdivision (7.2-2)).


 gap> SCLib.SearchByName("(S^2xS^1)#20");       
 [ [ 688, "(S^2xS^1)#20" ] ]
 gap> c:=SCLib.Load(688);;
 gap> c.F;
 [ 27, 298, 542, 271 ]
 gap> ns:=c.Slicing([[1..13],[14..27]]);;
 gap> SCNSFpBettiNumbers(ns,2);
 [ 2, 14, 2 ]
 gap>
 

7.3-7 SCNSGenus
> SCNSGenus( normalsurface )( function )

Returns: a non-negative integer upon success, fail otherwise.

Computes the genus of a normal surface.


 gap> SCLib.SearchByName("(S^2xS^1)#20");
 [ [ 688, "(S^2xS^1)#20" ] ]
 gap> c:=SCLib.Load(688);;               
 gap> c.F;                               
 [ 27, 298, 542, 271 ]
 gap> ns:=c.Slicing([[1..12],[13..27]]);;
 gap> SCIsConnected(ns);
 true
 gap> SCNSGenus(ns);                     
 7
 gap> 
 

7.3-8 SCNSHomology
> SCNSHomology( normalsurface )( function )

Returns: a list of homology groups upon success, fail otherwise

Computes the homology of normalsurface. Internally, normalsurface is subdivided and simplicial homology is computed on the subdivision (cf. SCNSSubdivision (7.2-2)).


 gap> SCLib.SearchByName("(S^2xS^1)#20");       
 [ [ 688, "(S^2xS^1)#20" ] ]
 gap> c:=SCLib.Load(688);;
 gap> c.F;
 [ 27, 298, 542, 271 ]
 gap> ns:=c.Slicing([[1..12],[13..27]]);;   
 gap> ns.Homology;
 [ [ 0, [  ] ], [ 14, [  ] ], [ 1, [  ] ] ]
 gap> ns:=c.Slicing([[1..13],[14..27]]);;
 gap> ns.Homology;                       
 [ [ 1, [  ] ], [ 14, [  ] ], [ 2, [  ] ] ]
 gap> 
 

7.3-9 SCNSSkel
> SCNSSkel( normalsurface, dim )( function )

Returns: a facet list of dimension dim upon success, fail otherwise.

Computes all faces of one type in original labeling: dim = 0 computes the vertices, dim = 1 computes the edges, dim = 2 computes the triangles, dim = 3 computes the quadrilaterals,


 gap> c:=SCBdSimplex(4);;              
 gap> ns:=SCNSSlicing(c,[[1],[2..5]]);;
 gap> SCNSSkel(ns,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> 
 

 gap> c:=SCBdSimplex(4);;              
 gap> ns:=SCNSSlicing(c,[[1],[2..5]]);;
 gap> SCNSSkel(ns,3);                            
 [ ]
 gap> ns:=SCNSSlicing(c,[[1,2],[3..5]]);;
 gap> SCNSSkelEx(ns,3);                            
 [ [ [ 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> 
 

7.3-10 SCNSSkelEx
> SCNSSkelEx( normalsurface, dim )( function )

Returns: a facet list of dimension dim upon success, fail otherwise.

Computes all faces of one type in standard labeling: dim = 0 computes the vertices, dim = 1 computes the edges, dim = 2 computes the triangles, dim = 3 computes the quadrilaterals,


 gap> c:=SCBdSimplex(4);;              
 gap> ns:=SCNSSlicing(c,[[1],[2..5]]);;
 gap> SCNSSkelEx(ns,1);                            
 [ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 2, 3 ], [ 2, 4 ], [ 3, 4 ] ]
 gap> 
 

 gap> c:=SCBdSimplex(4);;              
 gap> ns:=SCNSSlicing(c,[[1],[2..5]]);;
 gap> SCNSSkelEx(ns,3);                            
 [ ]
 gap> ns:=SCNSSlicing(c,[[1,2],[3..5]]);;
 gap> SCNSSkelEx(ns,3);                            
 [ [ 1, 2, 4, 5 ], [ 1, 3, 4, 6 ], [ 2, 3, 5, 6 ] ]
 gap> 
 

7.3-11 SCNSTopologicalType
> SCNSTopologicalType( ns )( function )

Returns: a string upon success, fail otherwise.

Determines the topological type of ns via the classification theorem for closed surfaces. If ns is not connected, the topological type of each connected component is computed.


 gap> SCLib.SearchByName("(S^2xS^1)#20");      
 [ [ 688, "(S^2xS^1)#20" ] ]
 gap> c:=SCLib.Load(688);;
 gap> c.F;
 [ 27, 298, 542, 271 ]
 gap> for i in [1..26] do 
 > ns:=SCNSSlicing(c,[[1..i],[i+1..27]]); 
 > Print(ns.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
 gap> 
 



generated by GAPDoc2HTML