Goto Chapter: | Top | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Bib | Ind

### 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>

Top of Book | Previous Chapter | Next Chapter

Goto Chapter: | Top | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Bib | Ind

generated by GAPDoc2HTML