Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

1035325 views
1
2
11 Polyhedral Morse theory
3
4
In this chapter we present some useful functions dealing with polyhedral
5
Morse theory. See Section 2.5 for a very short introduction to the field,
6
see [K{\95] for more information. Note: this is not to be confused with
7
Robin Forman's discrete Morse theory for cell complexes which is described
8
in Chapter 12.
9
10
If M is a combinatorial d-manifold with n-vertices a rsl-function will be
11
represented as an ordering on the set of vertices, i. e. a list of length n
12
containing all vertex labels of the corresponding simplicial complex.
13
14
15
11.1 Polyhedral Morse theory related functions
16
17
11.1-1 SCIsTight
18
19
SCIsTight( complex )  method
20
Returns: true or false upon success, fail otherwise.
21
22
Checks whether a simplicial complex complex (complex must satisfy the weak
23
pseudomanifold property and must be closed) is a tight triangulation (with
24
respect to the field with two elements) or not. A simplicial complex with n
25
vertices is said to be a tight triangulation if it can be tightly embedded
26
into the (n-1)-simplex. See Section 2.7 for a short introduction to the
27
field of tightness.
28
29
First, if complex is a (k+1)-neighborly 2k-manifold (cf. [K{\95], Corollary
30
4.7), or complex is of dimension d≥ 4, 2-neighborly and all its vertex links
31
are stacked spheres (i.e. the complex is in Walkup's class K(d), see
32
[Eff11b]) true is returned as the complex is a tight triangulation in these
33
cases. If complex is of dimension d = 3, true is returned if and only if
34
complex is 2-neighborly and stacked (i.e. tight-neighbourly, see [BDSS15]),
35
otherwise false is returned, see [BDS16].
36
37
Note that, for dimension d ≥ 4, it is not computed whether or not complex is
38
a combinatorial manifold as this computation might take a long time. Hence,
39
only if the manifold flag of the complex is set (this can be achieved by
40
calling SCIsManifold (12.1-17) and the complex indeed is a combinatorial
41
manifold) these checks are performed.
42
43
In a second step, the algorithm first checks certain rsl-functions allowing
44
slicings between minimal non faces and the rest of the complex. In most
45
cases where complex is not tight at least one of these rsl-functions is not
46
perfect and thus false is returned as the complex is not a tight
47
triangulation.
48
49
If the complex passed all checks so far, the remaining rsl-functions are
50
checked for being perfect functions. As there are ``only'' 2^n different
51
multiplicity vectors, but n! different rsl-functions, a lookup table
52
containing all possible multiplicity vectors is computed first. Note that
53
nonetheless the complexity of this algorithm is O(n!).
54
55
In order to reduce the number of rsl-functions that need to be checked, the
56
automorphism group of complex is computed first using SCAutomorphismGroup
57
(6.9-2). In case it is k-transitive, the complexity is reduced by the factor
58
of n ⋅ (n-1) ⋅ dots ⋅ (n-k+1).
59
60
 Example 
61
 gap> list:=SCLib.SearchByName("S^2~S^1 (VT)"){[1..9]};
62
 [ [ 12, "S^2~S^1 (VT)" ], [ 27, "S^2~S^1 (VT)" ], [ 28, "S^2~S^1 (VT)" ], 
63
 [ 43, "S^2~S^1 (VT)" ], [ 47, "S^2~S^1 (VT)" ], [ 49, "S^2~S^1 (VT)" ], 
64
 [ 89, "S^2~S^1 (VT)" ], [ 90, "S^2~S^1 (VT)" ], [ 111, "S^2~S^1 (VT)" ] ]
65
 gap> s2s1:=SCLib.Load(list[1][1]);
66
 [SimplicialComplex
67
 
68
 Properties known: AltshulerSteinberg, AutomorphismGroup, 
69
 AutomorphismGroupSize, AutomorphismGroupStructure, 
70
 AutomorphismGroupTransitivity, ConnectedComponents, 
71
 Dim, DualGraph, EulerCharacteristic, FVector, 
72
 FacetsEx, GVector, GeneratorsEx, HVector, 
73
 HasBoundary, HasInterior, Homology, Interior, 
74
 IsCentrallySymmetric, IsConnected, 
75
 IsEulerianManifold, IsManifold, IsOrientable, 
76
 IsPseudoManifold, IsPure, IsStronglyConnected, 
77
 MinimalNonFacesEx, Name, Neighborliness, 
78
 NumFaces[], Orientation, Reference, SkelExs[], 
79
 Vertices.
80
 
81
 Name="S^2~S^1 (VT)"
82
 Dim=3
83
 AltshulerSteinberg=250838208
84
 AutomorphismGroupSize=18
85
 AutomorphismGroupStructure="D18"
86
 AutomorphismGroupTransitivity=1
87
 EulerCharacteristic=0
88
 FVector=[ 9, 36, 54, 27 ]
89
 GVector=[ 4, 10 ]
90
 HVector=[ 5, 15, 5, 1 ]
91
 HasBoundary=false
92
 HasInterior=true
93
 Homology=[ [ 0, [ ] ], [ 1, [ ] ], [ 0, [ 2 ] ], [ 0, [ ] ] ]
94
 IsCentrallySymmetric=false
95
 IsConnected=true
96
 IsEulerianManifold=true
97
 IsOrientable=false
98
 IsPseudoManifold=true
99
 IsPure=true
100
 IsStronglyConnected=true
101
 Neighborliness=2
102
 
103
 /SimplicialComplex]
104
 gap> SCInfoLevel(2); # print information while running
105
 true
106
 gap> SCIsTight(s2s1); time;
107
 #I SCIsTight: complex is 3-dimensional and tight neighbourly, and thus tight.
108
 true
109
 4
110
 
111

112
113
 Example 
114
 gap> SCLib.SearchByAttribute("F[1] = 120");
115
 [ [ 7647, "Bd(600-cell)" ] ]
116
 gap> id:=last[1][1];;
117
 gap> c:=SCLib.Load(id);;
118
 gap> SCIsTight(c); time;
119
 #I SCIsTight: complex is connected but not 2-neighbourly, and thus not tight.
120
 false
121
 12
122
 
123

124
125
 Example 
126
 gap> SCInfoLevel(0);
127
 true
128
 gap> SCLib.SearchByName("K3"); 
129
 [ [ 7648, "K3_16" ], [ 7649, "K3_17" ] ]
130
 gap> c:=SCLib.Load(last[1][1]);;
131
 gap> SCIsManifold(c);
132
 true
133
 gap> SCInfoLevel(1);
134
 true
135
 gap> c.IsTight; 
136
 #I SCIsTight: complex is (k+1)-neighborly 2k-manifold and thus tight.
137
 true
138
 
139

140
141
 Example 
142
 gap> SCInfoLevel(1);
143
 true
144
 gap> dc:=[ [ 1, 1, 1, 1, 45 ], [ 1, 2, 1, 27, 18 ], [ 1, 27, 9, 9, 3 ], 
145
 > [ 4, 7, 20, 9, 9 ], [ 9, 9, 11, 9, 11 ], [ 6, 9, 9, 17, 8 ], 
146
 > [ 6, 10, 8, 17, 8 ], [ 8, 8, 8, 8, 17 ], [ 5, 6, 9, 9, 20 ] ];;
147
 gap> c:=SCBoundary(SCFromDifferenceCycles(dc));;
148
 gap> SCAutomorphismGroup(c);;
149
 gap> SCIsTight(c);
150
 true
151
 
152

153
154
 Example 
155
 gap> list:=SCLib.SearchByName("S^3xS^1");
156
 [ [ 55, "S^3xS^1 (VT)" ], [ 128, "S^3xS^1 (VT)" ], [ 399, "S^3xS^1 (VT)" ], 
157
 [ 459, "S^3xS^1 (VT)" ], [ 460, "S^3xS^1 (VT)" ], [ 461, "S^3xS^1 (VT)" ], 
158
 [ 462, "S^3xS^1 (VT)" ], [ 588, "S^3xS^1 (VT)" ], [ 612, "S^3xS^1 (VT)" ], 
159
 [ 699, "S^3xS^1 (VT)" ], [ 700, "S^3xS^1 (VT)" ], [ 701, "S^3xS^1 (VT)" ], 
160
 [ 703, "S^3xS^1 (VT)" ], [ 1078, "S^3xS^1 (VT)" ], [ 1080, "S^3xS^1 (VT)" ],
161
 [ 1081, "S^3xS^1 (VT)" ], [ 1082, "S^3xS^1 (VT)" ], 
162
 [ 1083, "S^3xS^1 (VT)" ], [ 1084, "S^3xS^1 (VT)" ], 
163
 [ 1085, "S^3xS^1 (VT)" ], [ 1086, "S^3xS^1 (VT)" ], 
164
 [ 1087, "S^3xS^1 (VT)" ], [ 1088, "S^3xS^1 (VT)" ], 
165
 [ 1089, "S^3xS^1 (VT)" ], [ 1091, "S^3xS^1 (VT)" ], 
166
 [ 2413, "S^3xS^1 (VT)" ], [ 2470, "S^3xS^1 (VT)" ], 
167
 [ 2471, "S^3xS^1 (VT)" ], [ 2472, "S^3xS^1 (VT)" ], 
168
 [ 2473, "S^3xS^1 (VT)" ], [ 2474, "S^3xS^1 (VT)" ], 
169
 [ 2475, "S^3xS^1 (VT)" ], [ 2476, "S^3xS^1 (VT)" ], 
170
 [ 3413, "S^3xS^1 (VT)" ], [ 3414, "S^3xS^1 (VT)" ], 
171
 [ 3415, "S^3xS^1 (VT)" ], [ 3416, "S^3xS^1 (VT)" ], 
172
 [ 3417, "S^3xS^1 (VT)" ], [ 3418, "S^3xS^1 (VT)" ], 
173
 [ 3419, "S^3xS^1 (VT)" ], [ 3420, "S^3xS^1 (VT)" ], 
174
 [ 3421, "S^3xS^1 (VT)" ], [ 3422, "S^3xS^1 (VT)" ], 
175
 [ 3423, "S^3xS^1 (VT)" ], [ 3424, "S^3xS^1 (VT)" ], 
176
 [ 3425, "S^3xS^1 (VT)" ], [ 3426, "S^3xS^1 (VT)" ], 
177
 [ 3427, "S^3xS^1 (VT)" ], [ 3428, "S^3xS^1 (VT)" ], 
178
 [ 3429, "S^3xS^1 (VT)" ], [ 3430, "S^3xS^1 (VT)" ], 
179
 [ 3431, "S^3xS^1 (VT)" ], [ 3432, "S^3xS^1 (VT)" ], 
180
 [ 3433, "S^3xS^1 (VT)" ], [ 3434, "S^3xS^1 (VT)" ] ]
181
 gap> c:=SCLib.Load(list[1][1]); 
182
 [SimplicialComplex
183
 
184
 Properties known: AltshulerSteinberg, AutomorphismGroup, 
185
 AutomorphismGroupSize, AutomorphismGroupStructure, 
186
 AutomorphismGroupTransitivity, ConnectedComponents, 
187
 Dim, DualGraph, EulerCharacteristic, FVector, 
188
 FacetsEx, GVector, GeneratorsEx, HVector, 
189
 HasBoundary, HasInterior, Homology, Interior, 
190
 IsCentrallySymmetric, IsConnected, 
191
 IsEulerianManifold, IsManifold, IsOrientable, 
192
 IsPseudoManifold, IsPure, IsStronglyConnected, 
193
 MinimalNonFacesEx, Name, Neighborliness, 
194
 NumFaces[], Orientation, Reference, SkelExs[], 
195
 Vertices.
196
 
197
 Name="S^3xS^1 (VT)"
198
 Dim=4
199
 AltshulerSteinberg=737125273600
200
 AutomorphismGroupSize=22
201
 AutomorphismGroupStructure="D22"
202
 AutomorphismGroupTransitivity=1
203
 EulerCharacteristic=0
204
 FVector=[ 11, 55, 110, 110, 44 ]
205
 GVector=[ 5, 15, -20 ]
206
 HVector=[ 6, 21, 1, 16, -1 ]
207
 HasBoundary=false
208
 HasInterior=true
209
 Homology=[ [ 0, [ ] ], [ 1, [ ] ], [ 0, [ ] ], [ 1, [ ] ], [ 1, [ ] ] ]
210
 IsCentrallySymmetric=false
211
 IsConnected=true
212
 IsEulerianManifold=true
213
 IsOrientable=true
214
 IsPseudoManifold=true
215
 IsPure=true
216
 IsStronglyConnected=true
217
 Neighborliness=2
218
 
219
 /SimplicialComplex]
220
 gap> SCInfoLevel(0);
221
 true
222
 gap> SCIsManifold(c);
223
 true
224
 gap> SCInfoLevel(2); 
225
 true
226
 gap> c.IsTight; 
227
 #I SCIsInKd: complex has transitive automorphism group, only checking one link.
228
 #I SCIsInKd: checking link 1/1
229
 #I SCIsKStackedSphere: checking if complex is a 1-stacked sphere...
230
 #I SCIsKStackedSphere: try 1/1
231
 #I round 0
232
 Reduced complex, F: [ 9, 26, 34, 17 ]
233
 #I round 1
234
 Reduced complex, F: [ 8, 22, 28, 14 ]
235
 #I round 2
236
 Reduced complex, F: [ 7, 18, 22, 11 ]
237
 #I round 3
238
 Reduced complex, F: [ 6, 14, 16, 8 ]
239
 #I round 4
240
 Reduced complex, F: [ 5, 10, 10, 5 ]
241
 #I SCReduceComplexEx: computed locally minimal complex after 5 rounds.
242
 #I SCIsKStackedSphere: complex is a 1-stacked sphere.
243
 #I SCIsInKd: complex has transitive automorphism group, all links are 1-stacked.
244
 #I SCIsTight: complex is in class K(1) and 2-neighborly, thus tight.
245
 true
246
 
247

248
249
11.1-2 SCMorseIsPerfect
250
251
SCMorseIsPerfect( c, f )  method
252
Returns: true or false upon success, fail otherwise.
253
254
Checks whether the rsl-function f is perfect on the simplicial complex c or
255
not. A rsl-function is said to be perfect, if it has the minimum number of
256
critical points, i. e. if the sum of its critical points equals the sum of
257
the Betti numbers of c.
258
259
 Example 
260
 gap> c:=SCBdCyclicPolytope(4,6);;
261
 gap> SCMinimalNonFaces(c);
262
 [ [ ], [ ], [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] ]
263
 gap> SCMorseIsPerfect(c,[1..6]);
264
 true
265
 gap> SCMorseIsPerfect(c,[1,3,5,2,4,6]); 
266
 false
267
 
268

269
270
11.1-3 SCSlicing
271
272
SCSlicing( complex, slicing )  method
273
Returns: a facet list of a polyhedral complex or a SCNormalSurface object
274
upon success, fail otherwise.
275
276
Returns the pre-image f^-1 (α ) of a rsl-function f on the simplicial
277
complex complex where f is given in the second argument slicing by a
278
partition of the set of vertices slicing=[ V_1 , V_2 ] such that f(v_1)
279
(f(v_2)) is smaller (greater) than α for all v_1 ∈ V_1 (v_2 ∈ V_2).
280
281
If complex is of dimension 3, a GAP object of type SCNormalSurface is
282
returned. Otherwise only the facet list is returned. See also SCNSSlicing
283
(7.1-4).
284
285
The vertex labels of the returned slicing are of the form (v_1 , v_2) where
286
v_1 ∈ V_1 and v_2 ∈ V_2. They represent the center points of the edges ⟩ v_1
287
, v_2 ⟨ defined by the intersection of slicing with complex.
288
289
 Example 
290
 gap> c:=SCBdCyclicPolytope(4,6);;
291
 gap> v:=SCVertices(c);
292
 [ 1, 2, 3, 4, 5, 6 ]
293
 gap> SCMinimalNonFaces(c);
294
 [ [ ], [ ], [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] ]
295
 gap> ns:=SCSlicing(c,[v{[1,3,5]},v{[2,4,6]}]); 
296
 [NormalSurface
297
 
298
 Properties known: ConnectedComponents, Dim, EulerCharacteristic, FVector, Fac\
299
 etsEx, Genus, IsConnected, IsOrientable, NSTriangulation, Name, TopologicalTyp\
300
 e, Vertices.
301
 
302
 Name="slicing [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] of Bd(C_4(6))"
303
 Dim=2
304
 FVector=[ 9, 18, 0, 9 ]
305
 EulerCharacteristic=0
306
 IsOrientable=true
307
 TopologicalType="T^2"
308
 
309
 /NormalSurface]
310
 
311

312
313
 Example 
314
 gap> c:=SCBdSimplex(5);;
315
 gap> v:=SCVertices(c);
316
 [ 1, 2, 3, 4, 5, 6 ]
317
 gap> slicing:=SCSlicing(c,[v{[1,3,5]},v{[2,4,6]}]);
318
 [ [ [ 1, 2 ], [ 1, 4 ], [ 3, 2 ], [ 3, 4 ], [ 5, 2 ], [ 5, 4 ] ], 
319
 [ [ 1, 2 ], [ 1, 4 ], [ 1, 6 ], [ 3, 2 ], [ 3, 4 ], [ 3, 6 ] ], 
320
 [ [ 1, 2 ], [ 1, 6 ], [ 3, 2 ], [ 3, 6 ], [ 5, 2 ], [ 5, 6 ] ], 
321
 [ [ 1, 2 ], [ 1, 4 ], [ 1, 6 ], [ 5, 2 ], [ 5, 4 ], [ 5, 6 ] ], 
322
 [ [ 1, 4 ], [ 1, 6 ], [ 3, 4 ], [ 3, 6 ], [ 5, 4 ], [ 5, 6 ] ], 
323
 [ [ 3, 2 ], [ 3, 4 ], [ 3, 6 ], [ 5, 2 ], [ 5, 4 ], [ 5, 6 ] ] ]
324
 
325

326
327
11.1-4 SCMorseMultiplicityVector
328
329
SCMorseMultiplicityVector( c, f )  method
330
Returns: a list of (d+1)-tuples if c is a d-dimensional simplicial complex
331
upon success, fail otherwise.
332
333
Computes all multiplicity vectors of a rsl-function f on a simplicial
334
complex c. f is given as an ordered list (v_1 , ... v_n) of all vertices of
335
c where f is defined by f(v_i) = fraci-1n-1. The i-th entry of the returned
336
list denotes the multiplicity vector of vertex v_i.
337
338
 Example 
339
 gap> SCLib.SearchByName("K3"); 
340
 [ [ 7648, "K3_16" ], [ 7649, "K3_17" ] ]
341
 gap> c:=SCLib.Load(last[1][1]);; 
342
 gap> f:=SCVertices(c); 
343
 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]
344
 gap> SCMorseMultiplicityVector(c,f);
345
 [ [ 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0 ], 
346
 [ 0, 0, 2, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 4, 0, 0 ], [ 0, 0, 3, 0, 0 ], 
347
 [ 0, 0, 3, 0, 0 ], [ 0, 0, 4, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 2, 0, 0 ], 
348
 [ 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 1 ] ]
349
 
350

351
352
11.1-5 SCMorseNumberOfCriticalPoints
353
354
SCMorseNumberOfCriticalPoints( c, f )  method
355
Returns: an integer and a list upon success, fail otherwise.
356
357
Computes the number of critical points of each index of a rsl-function f on
358
a simplicial complex c as well as the total number of critical points.
359
360
 Example 
361
 gap> SCLib.SearchByName("K3"); 
362
 [ [ 7648, "K3_16" ], [ 7649, "K3_17" ] ]
363
 gap> c:=SCLib.Load(last[1][1]);; 
364
 gap> f:=SCVertices(c); 
365
 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]
366
 gap> SCMorseNumberOfCriticalPoints(c,f);
367
 [ 24, [ 1, 0, 22, 0, 1 ] ]
368
 
369

370
371
372