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

1034945 views
1
2
12 Forman's discrete Morse theory
3
4
In this chapter a framework is provided to use Forman's discrete Morse
5
theory [For95] within simpcomp. See Section 2.6 for a brief introduction.
6
7
Note: this is not to be confused with Banchoff and Kühnel's theory of
8
regular simplexwise linear functions which is described in Chapter 11.
9
10
11
12.1 Functions using discrete Morse theory
12
13
12.1-1 SCCollapseGreedy
14
15
SCCollapseGreedy( complex )  method
16
Returns: simplicial complex of type SCSimplicialComplex upon success, fail
17
otherwise.
18
19
Employs a greedy collapsing algorithm to collapse the simplicial complex
20
complex. See also SCCollapseLex (12.1-2) and SCCollapseRevLex (12.1-3).
21
22
 Example 
23
 gap> SCLib.SearchByName("T^2"){[1..6]}; 
24
 [ [ 4, "T^2 (VT)" ], [ 5, "T^2 (VT)" ], [ 9, "T^2 (VT)" ], [ 10, "T^2 (VT)" ],
25
 [ 18, "T^2 (VT)" ], [ 20, "(T^2)#2" ] ]
26
 gap> torus:=SCLib.Load(last[1][1]);;
27
 gap> bdtorus:=SCDifference(torus,SC([torus.Facets[1]]));;
28
 gap> coll:=SCCollapseGreedy(bdtorus);
29
 [SimplicialComplex
30
 
31
 Properties known: Dim, FacetsEx, Name, Vertices.
32
 
33
 Name="collapsed version of T^2 (VT) \ unnamed complex 8"
34
 Dim=1
35
 
36
 /SimplicialComplex]
37
 gap> coll.Facets;
38
 [ [ 2, 5 ], [ 2, 6 ], [ 2, 7 ], [ 5, 6 ], [ 5, 7 ] ]
39
 gap> sphere:=SCBdSimplex(4);; 
40
 gap> bdsphere:=SCDifference(sphere,SC([sphere.Facets[1]]));;
41
 gap> coll:=SCCollapseGreedy(bdsphere);
42
 [SimplicialComplex
43
 
44
 Properties known: Dim, FVector, FacetsEx, IsPure, Name, NumFaces[], 
45
 SkelExs[], Vertices.
46
 
47
 Name="collapsed version of S^3_5 \ unnamed complex 12"
48
 Dim=0
49
 FVector=[ 1 ]
50
 IsPure=true
51
 
52
 /SimplicialComplex]
53
 gap> coll.Facets; 
54
 [ [ 2 ] ]
55
 
56

57
58
12.1-2 SCCollapseLex
59
60
SCCollapseLex( complex )  method
61
Returns: simplicial complex of type SCSimplicialComplex upon success, fail
62
otherwise.
63
64
Employs a greedy collapsing algorithm in lexicographical order to collapse
65
the simplicial complex complex. See also SCCollapseGreedy (12.1-1) and
66
SCCollapseRevLex (12.1-3).
67
68
 Example 
69
 gap> s:=SCSurface(1,true);;
70
 gap> s:=SCDifference(s,SC([SCFacets(s)[1]]));;
71
 gap> coll:=SCCollapseGreedy(s);
72
 [SimplicialComplex
73
 
74
 Properties known: Dim, FacetsEx, Name, Vertices.
75
 
76
 Name="collapsed version of T^2 \ unnamed complex 18"
77
 Dim=1
78
 
79
 /SimplicialComplex]
80
 gap> coll.Facets;
81
 [ [ 1, 6 ], [ 1, 7 ], [ 2, 5 ], [ 2, 7 ], [ 5, 7 ], [ 6, 7 ] ]
82
 gap> sphere:=SCBdSimplex(4);; 
83
 gap> ball:=SCDifference(sphere,SC([sphere.Facets[1]]));;
84
 gap> coll:=SCCollapseLex(ball);
85
 [SimplicialComplex
86
 
87
 Properties known: Dim, FVector, FacetsEx, IsPure, Name, NumFaces[], 
88
 SkelExs[], Vertices.
89
 
90
 Name="collapsed version of S^3_5 \ unnamed complex 22"
91
 Dim=0
92
 FVector=[ 1 ]
93
 IsPure=true
94
 
95
 /SimplicialComplex]
96
 gap> coll.Facets; 
97
 [ [ 5 ] ]
98
 
99

100
101
12.1-3 SCCollapseRevLex
102
103
SCCollapseRevLex( complex )  method
104
Returns: simplicial complex of type SCSimplicialComplex upon success, fail
105
otherwise.
106
107
Employs a greedy collapsing algorithm in reverse lexicographical order to
108
collapse the simplicial complex complex. See also SCCollapseGreedy (12.1-1)
109
and SCCollapseLex (12.1-2).
110
111
 Example 
112
 gap> s:=SCSurface(1,true);;
113
 gap> s:=SCDifference(s,SC([SCFacets(s)[1]]));;
114
 gap> coll:=SCCollapseGreedy(s);
115
 [SimplicialComplex
116
 
117
 Properties known: Dim, FacetsEx, Name, Vertices.
118
 
119
 Name="collapsed version of T^2 \ unnamed complex 28"
120
 Dim=1
121
 
122
 /SimplicialComplex]
123
 gap> coll.Facets;
124
 [ [ 1, 3 ], [ 1, 7 ], [ 3, 4 ], [ 3, 5 ], [ 4, 7 ], [ 5, 7 ] ]
125
 gap> sphere:=SCBdSimplex(4);; 
126
 gap> ball:=SCDifference(sphere,SC([sphere.Facets[1]]));;
127
 gap> coll:=SCCollapseRevLex(ball);
128
 [SimplicialComplex
129
 
130
 Properties known: Dim, FVector, FacetsEx, IsPure, Name, NumFaces[], 
131
 SkelExs[], Vertices.
132
 
133
 Name="collapsed version of S^3_5 \ unnamed complex 32"
134
 Dim=0
135
 FVector=[ 1 ]
136
 IsPure=true
137
 
138
 /SimplicialComplex]
139
 gap> coll.Facets; 
140
 [ [ 1 ] ]
141
 
142

143
144
12.1-4 SCHasseDiagram
145
146
SCHasseDiagram( c )  function
147
Returns: two lists of lists upon success, fail otherweise.
148
149
Computes the Hasse diagram of SCSimplicialComplex object c. The Hasse
150
diagram is returned as two sets of lists. The first set of lists contains
151
the upward part of the Hasse diagram, the second set of lists contains the
152
downward part of the Hasse diagram.
153
154
The i-th list of each set of lists represents the incidences between the
155
(i-1)-faces and the i-faces. The faces are given by their indices of the
156
face lattice.
157
158
 Example 
159
 gap> c:=SCBdSimplex(3);;
160
 gap> HD:=SCHasseDiagram(c);
161
 [ [ [ [ 1, 2, 3 ], [ 1, 4, 5 ], [ 2, 4, 6 ], [ 3, 5, 6 ] ], 
162
 [ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 1, 4 ], [ 2, 4 ], [ 3, 4 ] ] ], 
163
 [ [ [ 2, 1 ], [ 3, 1 ], [ 4, 1 ], [ 3, 2 ], [ 4, 2 ], [ 4, 3 ] ], 
164
 [ [ 4, 2, 1 ], [ 5, 3, 1 ], [ 6, 3, 2 ], [ 6, 5, 4 ] ] ] ]
165
 
166

167
168
12.1-5 SCMorseEngstroem
169
170
SCMorseEngstroem( complex )  function
171
Returns: two lists of small integer lists upon success, fail otherweise.
172
173
Builds a discrete Morse function following the Engstroem method by reducing
174
the input complex to smaller complexes defined by minimal link and deletion
175
operations. See [Eng09] for details.
176
177
 Example 
178
 gap> c:=SCBdSimplex(3);;
179
 gap> f:=SCMorseEngstroem(c);
180
 [ [ [ 2 ], [ 2, 3 ], [ 2, 4 ], [ 2 .. 4 ], [ ], [ 3 ], [ 4 ], [ 3, 4 ], 
181
 [ 1, 3 ], [ 1, 3, 4 ], [ 1 ], [ 1, 4 ], [ 1, 2, 4 ], [ 1, 2 ], 
182
 [ 1 .. 3 ] ], [ [ 2 ], [ 1 .. 3 ] ] ]
183
 
184

185
186
12.1-6 SCMorseRandom
187
188
SCMorseRandom( complex )  function
189
Returns: two lists of small integer lists upon success, fail otherweise.
190
191
Builds a discrete Morse function following Lutz and Benedetti's random
192
discrete Morse theory approach: Faces are paired with free co-dimension one
193
faces until now free faces remain. Then a critical face is removed at
194
random. See [BL14a] for details.
195
196
 Example 
197
 gap> c:=SCBdSimplex(3);;
198
 gap> f:=SCMorseRandom(c);;
199
 gap> Size(f[2]);
200
 2
201
 
202

203
204
12.1-7 SCMorseRandomLex
205
206
SCMorseRandomLex( complex )  function
207
Returns: two lists of small integer lists upon success, fail otherweise.
208
209
Builds a discrete Morse function following Adiprasito, Benedetti and Lutz'
210
lexicographic random discrete Morse theory approach. See [BL14a], [BL14b]
211
for details.
212
213
 Example 
214
 gap> c := SCSurface(3,true);;
215
 gap> f:=SCMorseRandomLex(c);;
216
 gap> Size(f[2]);
217
 8
218
 
219

220
221
12.1-8 SCMorseRandomRevLex
222
223
SCMorseRandomRevLex( complex )  function
224
Returns: two lists of small integer lists upon success, fail otherweise.
225
226
Builds a discrete Morse function following Adiprasito, Benedetti and Lutz'
227
reverse lexicographic random discrete Morse theory approach. See [BL14a],
228
[BL14b] for details.
229
230
 Example 
231
 gap> c := SCSurface(5,false);;
232
 gap> f:=SCMorseRandomRevLex(c);;
233
 gap> Size(f[2]);
234
 7
235
 
236

237
238
12.1-9 SCMorseSpec
239
240
SCMorseSpec( complex, iter[, morsefunc] )  function
241
Returns: a list upon success, fail otherweise.
242
243
Computes iter versions of a discrete Morse function of complex using a
244
randomised method specified by morsefunc (default choice is SCMorseRandom
245
(12.1-6), other randomised methods available are SCMorseRandomLex (12.1-7)
246
SCMorseRandomRevLex (12.1-8), and SCMorseUST (12.1-10)). The result is
247
referred to by the Morse spectrum of complex and is returned in form of a
248
list containing all Morse vectors sorted by number of critical points
249
together with the actual vector of critical points and how often they
250
ocurred (see [BL14a] for details).
251
252
 Example 
253
 gap> c:=SCSeriesTorus(2);;
254
 gap> f:=SCMorseSpec(c,30);
255
 [ [ 4, [ 1, 2, 1 ], 30 ] ]
256
 
257

258
259
 Example 
260
 gap> c:=SCSeriesHomologySphere(2,3,5);;
261
 gap> f:=SCMorseSpec(c,30,SCMorseRandom);
262
 [ [ 6, [ 1, 2, 2, 1 ], 25 ], [ 8, [ 1, 3, 3, 1 ], 5 ] ]
263
 gap> f:=SCMorseSpec(c,30,SCMorseRandomLex);
264
 [ [ 6, [ 1, 2, 2, 1 ], 30 ] ]
265
 gap> f:=SCMorseSpec(c,30,SCMorseRandomRevLex);
266
 [ [ 6, [ 1, 2, 2, 1 ], 7 ], [ 8, [ 1, 3, 3, 1 ], 13 ], 
267
 [ 10, [ 1, 4, 4, 1 ], 9 ], [ 10, [ 2, 4, 3, 1 ], 1 ] ]
268
 gap> f:=SCMorseSpec(c,30,SCMorseUST);
269
 [ [ 6, [ 1, 2, 2, 1 ], 18 ], [ 8, [ 1, 3, 3, 1 ], 8 ], 
270
 [ 10, [ 1, 4, 4, 1 ], 4 ] ]
271
 
272

273
274
12.1-10 SCMorseUST
275
276
SCMorseUST( complex )  function
277
Returns: a random Morse function of a simplicial complex and a list of
278
critical faces.
279
280
Builds a random Morse function by removing a uniformly sampled spanning tree
281
from the dual 1-skeleton followed by a collapsing approach. complex needs to
282
be a closed weak pseudomanifold for this to work. For details of the
283
algorithm, see [PS15].
284
285
 Example 
286
 gap> c:=SCBdSimplex(3);;
287
 gap> f:=SCMorseUST(c);;
288
 gap> Size(f[2]);
289
 2
290
 
291

292
293
12.1-11 SCSpanningTreeRandom
294
295
SCSpanningTreeRandom( HD, top )  function
296
Returns: a list of edges upon success, fail otherweise.
297
298
Computes a uniformly sampled spanning tree of the complex belonging to the
299
Hasse diagram HD using Wilson's algorithm (see [Wil96]). If top = true the
300
output is a spanning tree of the dual graph of the underlying complex. If
301
top = false the output is a spanning tree of the primal graph (i.e., the
302
1-skeleton.
303
304
 Example 
305
 gap> c:=SCSurface(1,false);;
306
 gap> HD:=SCHasseDiagram(c);;
307
 gap> stTop:=SCSpanningTreeRandom(HD,true);
308
 [ 15, 2, 6, 12, 7, 8, 1, 3, 11 ]
309
 gap> stBot:=SCSpanningTreeRandom(HD,false);
310
 [ 9, 5, 3, 6, 11 ]
311
 
312

313
314
12.1-12 SCHomology
315
316
SCHomology( complex )  method
317
Returns: a list of pairs of the form [ integer, list ] upon success
318
319
Computes the homology groups of a given simplicial complex complex using
320
SCMorseRandom (12.1-6) to obtain a Morse function and
321
SmithNormalFormIntegerMat. Use SCHomologyEx (12.1-13) to use alternative
322
methods to compute discrete Morse functions (such as SCMorseEngstroem
323
(12.1-5), or SCMorseUST (12.1-10)) or the Smith normal form.
324
325
The output is a list of homology groups of the form [H_0,....,H_d], where d
326
is the dimension of complex. The format of the homology groups H_i is given
327
in terms of their maximal cyclic subgroups, i.e. a homology group H_i≅ Z^f +
328
Z / t_1 Z × dots × Z / t_n Z is returned in form of a list [ f,
329
[t_1,...,t_n] ], where f is the (integer) free part of H_i and t_i denotes
330
the torsion parts of H_i ordered in weakly increasing size.
331
332
 Example 
333
 gap> c:=SCSeriesTorus(2);;
334
 gap> f:=SCHomology(c);
335
 [ [ 0, [ ] ], [ 2, [ ] ], [ 1, [ ] ] ]
336
 
337

338
339
12.1-13 SCHomologyEx
340
341
SCHomologyEx( c, morsechoice, smithchoice )  method
342
Returns: a list of pairs of the form [ integer, list ] upon success, fail
343
otherwise.
344
345
Computes the homology groups of a given simplicial complex c using the
346
function morsechoice for discrete Morse function computations and
347
smithchoice for Smith normal form computations.
348
349
The output is a list of homology groups of the form [H_0,....,H_d], where d
350
is the dimension of complex. The format of the homology groups H_i is given
351
in terms of their maximal cyclic subgroups, i.e. a homology group H_i≅ Z^f +
352
Z / t_1 Z × dots × Z / t_n Z is returned in form of a list [ f,
353
[t_1,...,t_n] ], where f is the (integer) free part of H_i and t_i denotes
354
the torsion parts of H_i ordered in weakly increasing size.
355
356
 Example 
357
 gap> c:=SCSeriesTorus(2);;
358
 gap> f:=SCHomology(c);
359
 [ [ 0, [ ] ], [ 2, [ ] ], [ 1, [ ] ] ]
360
 
361

362
363
 Example 
364
 gap> c := SCSeriesHomologySphere(2,3,5);;
365
 gap> SCHomologyEx(c,SCMorseRandom,SmithNormalFormIntegerMat); time;
366
 [ [ 0, [ ] ], [ 0, [ ] ], [ 0, [ ] ], [ 1, [ ] ] ]
367
 40
368
 gap> c := SCSeriesHomologySphere(2,3,5);;
369
 gap> SCHomologyEx(c,SCMorseRandomLex,SmithNormalFormIntegerMat); time;
370
 [ [ 0, [ ] ], [ 0, [ ] ], [ 0, [ ] ], [ 1, [ ] ] ]
371
 40
372
 gap> c := SCSeriesHomologySphere(2,3,5);;
373
 gap> SCHomologyEx(c,SCMorseRandomRevLex,SmithNormalFormIntegerMat); time;
374
 [ [ 0, [ ] ], [ 0, [ ] ], [ 0, [ ] ], [ 1, [ ] ] ]
375
 44
376
 gap> c := SCSeriesHomologySphere(2,3,5);;
377
 gap> SCHomologyEx(c,SCMorseEngstroem,SmithNormalFormIntegerMat); time;
378
 [ [ 0, [ ] ], [ 0, [ ] ], [ 0, [ ] ], [ 1, [ ] ] ]
379
 92
380
 gap> c := SCSeriesHomologySphere(2,3,5);;
381
 gap> SCHomologyEx(c,SCMorseUST,SmithNormalFormIntegerMat); time;
382
 [ [ 0, [ ] ], [ 0, [ ] ], [ 0, [ ] ], [ 1, [ ] ] ]
383
 92
384
 
385

386
387
12.1-14 SCIsSimplyConnected
388
389
SCIsSimplyConnected( c )  function
390
Returns: a boolean value upon success, fail otherweise.
391
392
Computes if the SCSimplicialComplex object c is simply connected. The
393
algorithm is a heuristic method and is described in [PS15]. Internally calls
394
SCIsSimplyConnectedEx (12.1-15).
395
396
 Example 
397
 gap> rp2:=SCSurface(1,false);;
398
 gap> SCIsSimplyConnected(rp2);
399
 false
400
 gap> c:=SCBdCyclicPolytope(8,18);;
401
 gap> SCIsSimplyConnected(c);
402
 true
403
 
404

405
406
12.1-15 SCIsSimplyConnectedEx
407
408
SCIsSimplyConnectedEx( c[, top, tries] )  function
409
Returns: a boolean value upon success, fail otherweise.
410
411
Computes if the SCSimplicialComplex object c is simply connected. The
412
optional boolean argument top determines whether a spanning graph in the
413
dual or the primal graph of c will be used for a collapsing sequence. The
414
optional positive integer argument tries determines the number of times the
415
algorithm will try to find a collapsing sequence. The algorithm is a
416
heuristic method and is described in [PS15].
417
418
 Example 
419
 gap> rp2:=SCSurface(1,false);;
420
 gap> SCIsSimplyConnectedEx(rp2);
421
 false
422
 gap> c:=SCBdCyclicPolytope(8,18);;
423
 gap> SCIsSimplyConnectedEx(c);
424
 true
425
 
426

427
428
12.1-16 SCIsSphere
429
430
SCIsSphere( c )  function
431
Returns: a boolean value upon success, fail otherweise.
432
433
Determines whether the SCSimplicialComplex object c is a topological sphere.
434
In dimension ≠ 4 the algorithm determines whether c is PL-homeomorphic to
435
the standard sphere. In dimension 4 the PL type is not specified. The
436
algorithm uses a result due to [KS77] stating that, in dimension ≠ 4, any
437
simply connected homology sphere with PL structure is a standard PL sphere.
438
The function calls SCIsSimplyConnected (12.1-14) which uses a heuristic
439
method described in [PS15].
440
441
 Example 
442
 gap> c:=SCBdCyclicPolytope(4,20);;
443
 gap> SCIsSphere(c);
444
 true
445
 gap> c:=SCSurface(1,true);;
446
 gap> SCIsSphere(c);
447
 false
448
 
449

450
451
12.1-17 SCIsManifold
452
453
SCIsManifold( c )  function
454
Returns: a boolean value upon success, fail otherweise.
455
456
The algorithm is a heuristic method and is described in [PS15] in more
457
detail. Internally calls SCIsManifoldEx (12.1-18).
458
459
 Example 
460
 gap> c:=SCBdCyclicPolytope(4,20);;
461
 gap> SCIsManifold(c);
462
 true
463
 
464

465
466
12.1-18 SCIsManifoldEx
467
468
SCIsManifoldEx( c[, aut, quasi] )  function
469
Returns: a boolean value upon success, fail otherweise.
470
471
If the boolean argument aut is true the automorphism group is computed and
472
only one link per orbit is checked to be a sphere. If aut is not provided
473
symmetry information is only used if the automorphism group is already
474
known. If the boolean argument quasi is false the algorithm returns whether
475
or not c is a combinatorial manifold. If quasi is true the 4-dimensional
476
links are not verified to be standard PL 4-spheres and c is a combinatorial
477
manifold modulo the smooth Poincare conjecture. By default quasi is set to
478
false. The algorithm is a heuristic method and is described in [PS15] in
479
more detail.
480
481
See SCBistellarIsManifold (9.2-6) for an alternative method for manifold
482
verification.
483
484
 Example 
485
 gap> c:=SCBdCyclicPolytope(4,20);;
486
 gap> SCIsManifold(c);
487
 true
488
 
489

490
491
492