  
  [1X11 [33X[0;0YPolyhedral Morse theory[133X[101X
  
  [33X[0;0YIn  this  chapter  we  present some useful functions dealing with polyhedral
  Morse  theory.  See  Section [14X2.5[114X for a very short introduction to the field,
  see  [K{\95]  for  more  information.  Note: this is not to be confused with
  Robin Forman's discrete Morse theory for cell complexes [For95].[133X
  
  [33X[0;0YIf  [22XM[122X  is  a combinatorial [22Xd[122X-manifold with [22Xn[122X-vertices a rsl-function will be
  represented  as an ordering on the set of vertices, i. e. a list of length [22Xn[122X
  containing all vertex labels of the corresponding simplicial complex.[133X
  
  
  [1X11.1 [33X[0;0YPolyhedral Morse theory related functions[133X[101X
  
  [1X11.1-1 SCIsTight[101X
  
  [29X[2XSCIsTight[102X( [3Xcomplex[103X ) [32X method
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X upon success, [9Xfail[109X otherwise.[133X
  
  [33X[0;0YChecks whether a simplicial complex [10Xcomplex[110X is a tight triangulation or not.
  A  simplicial complex with [22Xn[122X vertices is said to be a tight triangulation if
  it  can  be  tightly  embedded into the [22X(n-1)[122X-simplex. See Section [14X2.6[114X for a
  short introduction to the field of tightness.[133X
  
  [33X[0;0YFirst,  if [10Xcomplex[110X is a [22X(k+1)[122X-neighborly [22X2k[122X-manifold (cf. [K{\95], Corollary
  4.7)  or  if  [10Xcomplex[110X  is of dimension [22Xd≥ 4[122X, [22X2[122X-neighborly and all its vertex
  links  are  stacked spheres (i.e. the complex is in Walkup's class [22XK(d)[122X, see
  [Eff11b]), [9Xtrue[109X is returned as the complex is a tight triangulation in these
  cases.   Note  that  it  is  not  computed  whether  or  not  [10Xcomplex[110X  is  a
  combinatorial  manifold  as  this computation might take a long time. Hence,
  only  if  the  manifold  flag of the complex is set (this can be achieved by
  calling  [2XSCIsManifold[102X  ([14X9.2-6[114X)  and  the  complex  indeed is a combinatorial
  manifold)  these checks are performed. In a second step, the algorithm first
  checks certain rsl-functions allowing slicings between minimal non faces and
  the  rest  of the complex. In most cases where [10Xcomplex[110X is not tight at least
  one  of these rsl-functions is not perfect and thus [10Xfalse[110X is returned as the
  complex is not a tight triangulation.[133X
  
  [33X[0;0YIf  the  complex  passed  all checks so far, the remaining rsl-functions are
  checked  for  being  perfect  functions. As there are ``only'' [22X2^n[122X different
  multiplicity  vectors,  but  [22Xn![122X  different  rsl-functions,  a  lookup  table
  containing  all  possible  multiplicity vectors is computed first. Note that
  nonetheless the complexity of this algorithm is [22XO(n!)[122X.[133X
  
  [33X[0;0YIn  order to reduce the number of rsl-functions that need to be checked, the
  automorphism  group  of  [10Xcomplex[110X is computed first using [2XSCAutomorphismGroup[102X
  ([14X6.9-2[114X). In case it is [22Xk[122X-transitive, the complexity is reduced by the factor
  of [22Xn ⋅ (n-1) ⋅ dots ⋅ (n-k+1)[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> list:=SCLib.SearchByName("S^2~S^1 (VT)");
[128X[104X
    [4X[28X [ [ 12, "S^2~S^1 (VT)" ], [ 27, "S^2~S^1 (VT)" ], [ 28, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 43, "S^2~S^1 (VT)" ], [ 47, "S^2~S^1 (VT)" ], [ 49, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 89, "S^2~S^1 (VT)" ], [ 90, "S^2~S^1 (VT)" ], [ 111, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 140, "S^2~S^1 (VT)" ], [ 146, "S^2~S^1 (VT)" ], [ 147, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 148, "S^2~S^1 (VT)" ], [ 149, "S^2~S^1 (VT)" ], [ 150, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 156, "S^2~S^1 (VT)" ], [ 157, "S^2~S^1 (VT)" ], [ 391, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 393, "S^2~S^1 (VT)" ], [ 394, "S^2~S^1 (VT)" ], [ 396, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 407, "S^2~S^1 (VT)" ], [ 408, "S^2~S^1 (VT)" ], [ 410, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 412, "S^2~S^1 (VT)" ], [ 413, "S^2~S^1 (VT)" ], [ 578, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 579, "S^2~S^1 (VT)" ], [ 582, "S^2~S^1 (VT)" ], [ 596, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 597, "S^2~S^1 (VT)" ], [ 598, "S^2~S^1 (VT)" ], [ 640, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 642, "S^2~S^1 (VT)" ], [ 644, "S^2~S^1 (VT)" ], [ 645, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 769, "S^2~S^1 (VT)" ], [ 770, "S^2~S^1 (VT)" ], [ 774, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 775, "S^2~S^1 (VT)" ], [ 776, "S^2~S^1 (VT)" ], [ 2401, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2409, "S^2~S^1 (VT)" ], [ 2410, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2411, "S^2~S^1 (VT)" ], [ 2428, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2429, "S^2~S^1 (VT)" ], [ 2430, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2431, "S^2~S^1 (VT)" ], [ 2432, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2433, "S^2~S^1 (VT)" ], [ 2434, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2435, "S^2~S^1 (VT)" ], [ 2500, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2501, "S^2~S^1 (VT)" ], [ 2504, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2505, "S^2~S^1 (VT)" ], [ 2506, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2510, "S^2~S^1 (VT)" ], [ 2511, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2512, "S^2~S^1 (VT)" ], [ 2513, "S^2~S^1 (VT)" ], [128X[104X
    [4X[28X   [ 2514, "S^2~S^1 (VT)" ], [ 2515, "S^2~S^1 (VT)" ] ][128X[104X
    [4X[28X gap> s2s1:=SCLib.Load(list[1][1]);
[128X[104X
    [4X[28X [SimplicialComplex[128X[104X
    [4X[28X [128X[104X
    [4X[28X  Properties known: AltshulerSteinberg, AutomorphismGroup, [128X[104X
    [4X[28X                    AutomorphismGroupSize, AutomorphismGroupStructure, [128X[104X
    [4X[28X                    AutomorphismGroupTransitivity, ConnectedComponents, [128X[104X
    [4X[28X                    Dim, DualGraph, EulerCharacteristic, FVector, [128X[104X
    [4X[28X                    FacetsEx, GVector, GeneratorsEx, HVector, [128X[104X
    [4X[28X                    HasBoundary, HasInterior, Homology, Interior, [128X[104X
    [4X[28X                    IsCentrallySymmetric, IsConnected, [128X[104X
    [4X[28X                    IsEulerianManifold, IsManifold, IsOrientable, [128X[104X
    [4X[28X                    IsPseudoManifold, IsPure, IsStronglyConnected, [128X[104X
    [4X[28X                    MinimalNonFacesEx, Name, Neighborliness, [128X[104X
    [4X[28X                    NumFaces[], Orientation, Reference, SkelExs[], [128X[104X
    [4X[28X                    Vertices.[128X[104X
    [4X[28X [128X[104X
    [4X[28X  Name="S^2~S^1 (VT)"[128X[104X
    [4X[28X  Dim=3[128X[104X
    [4X[28X  AltshulerSteinberg=250838208[128X[104X
    [4X[28X  AutomorphismGroupSize=18[128X[104X
    [4X[28X  AutomorphismGroupStructure="D18"[128X[104X
    [4X[28X  AutomorphismGroupTransitivity=1[128X[104X
    [4X[28X  EulerCharacteristic=0[128X[104X
    [4X[28X  FVector=[ 9, 36, 54, 27 ][128X[104X
    [4X[28X  GVector=[ 4, 10 ][128X[104X
    [4X[28X  HVector=[ 5, 15, 5, 1 ][128X[104X
    [4X[28X  HasBoundary=false[128X[104X
    [4X[28X  HasInterior=true[128X[104X
    [4X[28X  Homology=[ [ 0, [ ] ], [ 1, [ ] ], [ 0, [ 2 ] ], [ 0, [ ] ] ][128X[104X
    [4X[28X  IsCentrallySymmetric=false[128X[104X
    [4X[28X  IsConnected=true[128X[104X
    [4X[28X  IsEulerianManifold=true[128X[104X
    [4X[28X  IsOrientable=false[128X[104X
    [4X[28X  IsPseudoManifold=true[128X[104X
    [4X[28X  IsPure=true[128X[104X
    [4X[28X  IsStronglyConnected=true[128X[104X
    [4X[28X  Neighborliness=2[128X[104X
    [4X[28X [128X[104X
    [4X[28X /SimplicialComplex][128X[104X
    [4X[28X gap> SCInfoLevel(2); # print information while running
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> SCIsTight(s2s1); time;
[128X[104X
    [4X[28X #I  SCIsTight: checking non faces...[128X[104X
    [4X[28X #I  SCIsTight: found no contradiction so far.[128X[104X
    [4X[28X #I  SCIsTight: generating lookup table...[128X[104X
    [4X[28X #I  SCIsTight: lookup table done, size = 2304.[128X[104X
    [4X[28X #I  SCIsTight: computing automorphism group...[128X[104X
    [4X[28X #I  SCIsTight: automorphism group done, transitivity = 1.[128X[104X
    [4X[28X #I  SCIsTight: checking rsl-functions...[128X[104X
    [4X[28X #I  SCIsTight: processed 10000 of 40320 rsl-functions so far, all perfect.[128X[104X
    [4X[28X #I  SCIsTight: processed 20000 of 40320 rsl-functions so far, all perfect.[128X[104X
    [4X[28X #I  SCIsTight: processed 30000 of 40320 rsl-functions so far, all perfect.[128X[104X
    [4X[28X #I  SCIsTight: processed 40000 of 40320 rsl-functions so far, all perfect.[128X[104X
    [4X[28X true[128X[104X
    [4X[28X 5628[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> SCLib.SearchByAttribute("F[1] = 120");
[128X[104X
    [4X[28X [ [ 7647, "Bd(600-cell)" ] ][128X[104X
    [4X[28X gap> id:=last[1][1];;
[128X[104X
    [4X[28X gap> c:=SCLib.Load(id);;
[128X[104X
    [4X[28X gap> SCIsTight(c); time;
[128X[104X
    [4X[28X #I  SCIsTight: checking non faces...[128X[104X
    [4X[28X #I  SCIsTight: found non perfect rsl-function: [ 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, [128X[104X
    [4X[28X   22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, [128X[104X
    [4X[28X   41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, [128X[104X
    [4X[28X   60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, [128X[104X
    [4X[28X   79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, [128X[104X
    [4X[28X   98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, [128X[104X
    [4X[28X   113, 114, 115, 116, 117, 118, 119, 120 ], complex not tight.[128X[104X
    [4X[28X false[128X[104X
    [4X[28X 0[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> SCInfoLevel(0);
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> SCLib.SearchByName("K3");  
[128X[104X
    [4X[28X [ [ 7648, "K3_16" ], [ 7649, "K3_17" ] ][128X[104X
    [4X[28X gap> c:=SCLib.Load(last[1][1]);;
[128X[104X
    [4X[28X gap> SCIsManifold(c);
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> SCInfoLevel(2);
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> c.IsTight;                 
[128X[104X
    [4X[28X #I  SCIsTight: complex is (k+1)-neighborly 2k-manifold and thus tight.[128X[104X
    [4X[28X true[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> list:=SCLib.SearchByName("S^3xS^1");
[128X[104X
    [4X[28X [ [ 55, "S^3xS^1 (VT)" ], [ 128, "S^3xS^1 (VT)" ], [ 399, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 459, "S^3xS^1 (VT)" ], [ 460, "S^3xS^1 (VT)" ], [ 461, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 462, "S^3xS^1 (VT)" ], [ 588, "S^3xS^1 (VT)" ], [ 612, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 699, "S^3xS^1 (VT)" ], [ 700, "S^3xS^1 (VT)" ], [ 701, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 703, "S^3xS^1 (VT)" ], [ 1078, "S^3xS^1 (VT)" ], [ 1080, "S^3xS^1 (VT)" ],[128X[104X
    [4X[28X   [ 1081, "S^3xS^1 (VT)" ], [ 1082, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 1083, "S^3xS^1 (VT)" ], [ 1084, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 1085, "S^3xS^1 (VT)" ], [ 1086, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 1087, "S^3xS^1 (VT)" ], [ 1088, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 1089, "S^3xS^1 (VT)" ], [ 1091, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 2413, "S^3xS^1 (VT)" ], [ 2470, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 2471, "S^3xS^1 (VT)" ], [ 2472, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 2473, "S^3xS^1 (VT)" ], [ 2474, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 2475, "S^3xS^1 (VT)" ], [ 2476, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3413, "S^3xS^1 (VT)" ], [ 3414, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3415, "S^3xS^1 (VT)" ], [ 3416, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3417, "S^3xS^1 (VT)" ], [ 3418, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3419, "S^3xS^1 (VT)" ], [ 3420, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3421, "S^3xS^1 (VT)" ], [ 3422, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3423, "S^3xS^1 (VT)" ], [ 3424, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3425, "S^3xS^1 (VT)" ], [ 3426, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3427, "S^3xS^1 (VT)" ], [ 3428, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3429, "S^3xS^1 (VT)" ], [ 3430, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3431, "S^3xS^1 (VT)" ], [ 3432, "S^3xS^1 (VT)" ], [128X[104X
    [4X[28X   [ 3433, "S^3xS^1 (VT)" ], [ 3434, "S^3xS^1 (VT)" ] ][128X[104X
    [4X[28X gap> c:=SCLib.Load(list[1][1]);           
[128X[104X
    [4X[28X [SimplicialComplex[128X[104X
    [4X[28X [128X[104X
    [4X[28X  Properties known: AltshulerSteinberg, AutomorphismGroup, [128X[104X
    [4X[28X                    AutomorphismGroupSize, AutomorphismGroupStructure, [128X[104X
    [4X[28X                    AutomorphismGroupTransitivity, ConnectedComponents, [128X[104X
    [4X[28X                    Dim, DualGraph, EulerCharacteristic, FVector, [128X[104X
    [4X[28X                    FacetsEx, GVector, GeneratorsEx, HVector, [128X[104X
    [4X[28X                    HasBoundary, HasInterior, Homology, Interior, [128X[104X
    [4X[28X                    IsCentrallySymmetric, IsConnected, [128X[104X
    [4X[28X                    IsEulerianManifold, IsManifold, IsOrientable, [128X[104X
    [4X[28X                    IsPseudoManifold, IsPure, IsStronglyConnected, [128X[104X
    [4X[28X                    MinimalNonFacesEx, Name, Neighborliness, [128X[104X
    [4X[28X                    NumFaces[], Orientation, Reference, SkelExs[], [128X[104X
    [4X[28X                    Vertices.[128X[104X
    [4X[28X [128X[104X
    [4X[28X  Name="S^3xS^1 (VT)"[128X[104X
    [4X[28X  Dim=4[128X[104X
    [4X[28X  AltshulerSteinberg=737125273600[128X[104X
    [4X[28X  AutomorphismGroupSize=22[128X[104X
    [4X[28X  AutomorphismGroupStructure="D22"[128X[104X
    [4X[28X  AutomorphismGroupTransitivity=1[128X[104X
    [4X[28X  EulerCharacteristic=0[128X[104X
    [4X[28X  FVector=[ 11, 55, 110, 110, 44 ][128X[104X
    [4X[28X  GVector=[ 5, 15, -20 ][128X[104X
    [4X[28X  HVector=[ 6, 21, 1, 16, -1 ][128X[104X
    [4X[28X  HasBoundary=false[128X[104X
    [4X[28X  HasInterior=true[128X[104X
    [4X[28X  Homology=[ [ 0, [ ] ], [ 1, [ ] ], [ 0, [ ] ], [ 1, [ ] ], [ 1, [ ] ] ][128X[104X
    [4X[28X  IsCentrallySymmetric=false[128X[104X
    [4X[28X  IsConnected=true[128X[104X
    [4X[28X  IsEulerianManifold=true[128X[104X
    [4X[28X  IsOrientable=true[128X[104X
    [4X[28X  IsPseudoManifold=true[128X[104X
    [4X[28X  IsPure=true[128X[104X
    [4X[28X  IsStronglyConnected=true[128X[104X
    [4X[28X  Neighborliness=2[128X[104X
    [4X[28X [128X[104X
    [4X[28X /SimplicialComplex][128X[104X
    [4X[28X gap> SCInfoLevel(0);
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> SCIsManifold(c);
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> SCInfoLevel(2); 
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> c.IsTight;                
[128X[104X
    [4X[28X #I  SCIsInKd: complex has transitive automorphism group, only checking one link.[128X[104X
    [4X[28X #I  SCIsInKd: checking link 1/1[128X[104X
    [4X[28X #I  SCIsKStackedSphere: checking if complex is a 1-stacked sphere...[128X[104X
    [4X[28X #I  SCIsKStackedSphere: try 1/50[128X[104X
    [4X[28X #I  round 0[128X[104X
    [4X[28X Reduced complex, F: [ 9, 26, 34, 17 ][128X[104X
    [4X[28X #I  round 1[128X[104X
    [4X[28X Reduced complex, F: [ 8, 22, 28, 14 ][128X[104X
    [4X[28X #I  round 2[128X[104X
    [4X[28X Reduced complex, F: [ 7, 18, 22, 11 ][128X[104X
    [4X[28X #I  round 3[128X[104X
    [4X[28X Reduced complex, F: [ 6, 14, 16, 8 ][128X[104X
    [4X[28X #I  round 4[128X[104X
    [4X[28X Reduced complex, F: [ 5, 10, 10, 5 ][128X[104X
    [4X[28X #I  SCReduceComplexEx: computed locally minimal complex after 5 rounds.[128X[104X
    [4X[28X #I  SCIsKStackedSphere: complex is a 1-stacked sphere.[128X[104X
    [4X[28X #I  SCIsInKd: complex has transitive automorphism group, all links are 1-stacked.[128X[104X
    [4X[28X #I  SCIsTight: complex is in class K(1) and 2-neighborly, thus tight.[128X[104X
    [4X[28X true[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X11.1-2 SCMorseIsPerfect[101X
  
  [29X[2XSCMorseIsPerfect[102X( [3Xc[103X, [3Xf[103X ) [32X method
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X upon success, [9Xfail[109X otherwise.[133X
  
  [33X[0;0YChecks  whether the rsl-function [10Xf[110X is perfect on the simplicial complex [10Xc[110X or
  not.  A  rsl-function is said to be perfect, if it has the minimum number of
  critical  points,  i. e. if the sum of its critical points equals the sum of
  the Betti numbers of [10Xc[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> c:=SCBdCyclicPolytope(4,6);;
[128X[104X
    [4X[28X gap> SCMinimalNonFaces(c);
[128X[104X
    [4X[28X [ [  ], [  ], [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] ][128X[104X
    [4X[28X gap> SCMorseIsPerfect(c,[1..6]);
[128X[104X
    [4X[28X true[128X[104X
    [4X[28X gap> SCMorseIsPerfect(c,[1,3,5,2,4,6]);   
[128X[104X
    [4X[28X false[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X11.1-3 SCSlicing[101X
  
  [29X[2XSCSlicing[102X( [3Xcomplex[103X, [3Xslicing[103X ) [32X method
  [6XReturns:[106X  [33X[0;10Ya  facet  list of a polyhedral complex or a [10XSCNormalSurface[110X object
            upon success, [9Xfail[109X otherwise.[133X
  
  [33X[0;0YReturns  the  pre-image  [22Xf^-1  (α  )[122X  of  a rsl-function [22Xf[122X on the simplicial
  complex  [3Xcomplex[103X  where  [22Xf[122X  is  given  in  the  second argument [3Xslicing[103X by a
  partition  of  the  set  of  vertices [3Xslicing[103X[22X=[ V_1 , V_2 ][122X such that [22Xf(v_1)[122X
  ([22Xf(v_2)[122X) is smaller (greater) than [22Xα[122X for all [22Xv_1 ∈ V_1[122X ([22Xv_2 ∈ V_2[122X).[133X
  
  [33X[0;0YIf  [3Xcomplex[103X  is  of  dimension  [22X3[122X,  a  [5XGAP[105X object of type [10XSCNormalSurface[110X is
  returned.  Otherwise  only  the facet list is returned. See also [2XSCNSSlicing[102X
  ([14X7.1-4[114X).[133X
  
  [33X[0;0YThe  vertex labels of the returned slicing are of the form [22X(v_1 , v_2)[122X where
  [22Xv_1 ∈ V_1[122X and [22Xv_2 ∈ V_2[122X. They represent the center points of the edges [22X⟩ v_1
  , v_2 ⟨[122X defined by the intersection of [3Xslicing[103X with [3Xcomplex[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> c:=SCBdCyclicPolytope(4,6);;
[128X[104X
    [4X[28X gap> v:=SCVertices(c);
[128X[104X
    [4X[28X [ 1, 2, 3, 4, 5, 6 ][128X[104X
    [4X[28X gap> SCMinimalNonFaces(c);
[128X[104X
    [4X[28X [ [  ], [  ], [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] ][128X[104X
    [4X[28X gap> ns:=SCSlicing(c,[v{[1,3,5]},v{[2,4,6]}]);     
[128X[104X
    [4X[28X [NormalSurface[128X[104X
    [4X[28X [128X[104X
    [4X[28X  Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\[128X[104X
    [4X[28X etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\[128X[104X
    [4X[28X e, Vertices.[128X[104X
    [4X[28X [128X[104X
    [4X[28X  Name="slicing [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] of Bd(C_4(6))"[128X[104X
    [4X[28X  Dim=2[128X[104X
    [4X[28X  FVector=[ 9, 18, 0, 9 ][128X[104X
    [4X[28X  EulerCharacteristic=0[128X[104X
    [4X[28X  IsOrientable=true[128X[104X
    [4X[28X  TopologicalType="T^2"[128X[104X
    [4X[28X [128X[104X
    [4X[28X /NormalSurface][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> c:=SCBdSimplex(5);;
[128X[104X
    [4X[28X gap> v:=SCVertices(c);
[128X[104X
    [4X[28X [ 1, 2, 3, 4, 5, 6 ][128X[104X
    [4X[28X gap> slicing:=SCSlicing(c,[v{[1,3,5]},v{[2,4,6]}]);
[128X[104X
    [4X[28X [ [ [ 1, 2 ], [ 1, 4 ], [ 3, 2 ], [ 3, 4 ], [ 5, 2 ], [ 5, 4 ] ], [128X[104X
    [4X[28X   [ [ 1, 2 ], [ 1, 4 ], [ 1, 6 ], [ 3, 2 ], [ 3, 4 ], [ 3, 6 ] ], [128X[104X
    [4X[28X   [ [ 1, 2 ], [ 1, 6 ], [ 3, 2 ], [ 3, 6 ], [ 5, 2 ], [ 5, 6 ] ], [128X[104X
    [4X[28X   [ [ 1, 2 ], [ 1, 4 ], [ 1, 6 ], [ 5, 2 ], [ 5, 4 ], [ 5, 6 ] ], [128X[104X
    [4X[28X   [ [ 1, 4 ], [ 1, 6 ], [ 3, 4 ], [ 3, 6 ], [ 5, 4 ], [ 5, 6 ] ], [128X[104X
    [4X[28X   [ [ 3, 2 ], [ 3, 4 ], [ 3, 6 ], [ 5, 2 ], [ 5, 4 ], [ 5, 6 ] ] ][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X11.1-4 SCMorseMultiplicityVector[101X
  
  [29X[2XSCMorseMultiplicityVector[102X( [3Xc[103X, [3Xf[103X ) [32X method
  [6XReturns:[106X  [33X[0;10Ya  list of [22X(d+1)[122X-tuples if [10Xc[110X is a [22Xd[122X-dimensional simplicial complex
            upon success, [9Xfail[109X otherwise.[133X
  
  [33X[0;0YComputes  all  multiplicity  vectors  of  a  rsl-function  [10Xf[110X on a simplicial
  complex  [10Xc[110X. [10Xf[110X is given as an ordered list [22X(v_1 , ... v_n)[122X of all vertices of
  [10Xc[110X  where [10Xf[110X is defined by [10Xf[110X[22X(v_i) = fraci-1n-1[122X. The [22Xi[122X-th entry of the returned
  list denotes the multiplicity vector of vertex [22Xv_i[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> SCLib.SearchByName("K3");      
[128X[104X
    [4X[28X [ [ 7648, "K3_16" ], [ 7649, "K3_17" ] ][128X[104X
    [4X[28X gap> c:=SCLib.Load(last[1][1]);;    
[128X[104X
    [4X[28X gap> f:=SCVertices(c);              
[128X[104X
    [4X[28X [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ][128X[104X
    [4X[28X gap> SCMorseMultiplicityVector(c,f);
[128X[104X
    [4X[28X [ [ 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0 ], [128X[104X
    [4X[28X   [ 0, 0, 2, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 4, 0, 0 ], [ 0, 0, 3, 0, 0 ], [128X[104X
    [4X[28X   [ 0, 0, 3, 0, 0 ], [ 0, 0, 4, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 2, 0, 0 ], [128X[104X
    [4X[28X   [ 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 1 ] ][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X11.1-5 SCMorseNumberOfCriticalPoints[101X
  
  [29X[2XSCMorseNumberOfCriticalPoints[102X( [3Xc[103X, [3Xf[103X ) [32X method
  [6XReturns:[106X  [33X[0;10Yan integer and a list upon success, [9Xfail[109X otherwise.[133X
  
  [33X[0;0YComputes  the number of critical points of each index of a rsl-function [10Xf[110X on
  a simplicial complex [10Xc[110X as well as the total number of critical points.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X gap> SCLib.SearchByName("K3");      
[128X[104X
    [4X[28X [ [ 7648, "K3_16" ], [ 7649, "K3_17" ] ][128X[104X
    [4X[28X gap> c:=SCLib.Load(last[1][1]);;    
[128X[104X
    [4X[28X gap> f:=SCVertices(c);              
[128X[104X
    [4X[28X [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ][128X[104X
    [4X[28X gap> SCMorseNumberOfCriticalPoints(c,f);
[128X[104X
    [4X[28X [ 24, [ 1, 0, 22, 0, 1 ] ][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
