File: chap6.html

package info (click to toggle)
gap-hap 1.70%2Bds-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 56,612 kB
  • sloc: xml: 16,139; sh: 216; javascript: 155; makefile: 126; ansic: 47; perl: 36
file content (655 lines) | stat: -rw-r--r-- 51,090 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (HAP commands) - Chapter 6: Group theoretic computations</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap6"  onload="jscontent()">


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chap15.html">15</a>  <a href="chap16.html">16</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<div class="chlinkprevnexttop">&nbsp;<a href="chap0.html">[Top of Book]</a>&nbsp;  <a href="chap0.html#contents">[Contents]</a>&nbsp;  &nbsp;<a href="chap5.html">[Previous Chapter]</a>&nbsp;  &nbsp;<a href="chap7.html">[Next Chapter]</a>&nbsp;  </div>

<p id="mathjaxlink" class="pcenter"><a href="chap6_mj.html">[MathJax on]</a></p>
<p><a id="X7C07F4BD8466991A" name="X7C07F4BD8466991A"></a></p>
<div class="ChapSects"><a href="chap6.html#X7C07F4BD8466991A">6 <span class="Heading">Group theoretic computations</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X86D7FBBD7E5287C9">6.1 <span class="Heading">Third homotopy group of a supsension of an Eilenberg-MacLane space </span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X803FDFFE78A08446">6.2 <span class="Heading">Representations of knot quandles</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X7E4EFB987DA22017">6.3 <span class="Heading">Identifying knots</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X8664E986873195E6">6.4 <span class="Heading">Aspherical <span class="SimpleMath">2</span>-complexes</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X84C0CB8B7C21E179">6.5 <span class="Heading">Group presentations and homotopical syzygies</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X7F719758856A443D">6.6 <span class="Heading">Bogomolov multiplier</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X8333413B838D787D">6.7 <span class="Heading">Second group cohomology and group extensions</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X7F04FA5E81FFA848">6.8 <span class="Heading">Cocyclic groups: a convenient way of representing  certain groups</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X863080FE8270468D">6.9 <span class="Heading">Effective group presentations</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X7C60E2B578074532">6.10 <span class="Heading">Second group cohomology and cocyclic Hadamard matrices</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap6.html#X78040D8580D35D53">6.11 <span class="Heading">Third group cohomology and homotopy <span class="SimpleMath">2</span>-types</span></a>
</span>
</div>
</div>

<h3>6 <span class="Heading">Group theoretic computations</span></h3>

<p><a id="X86D7FBBD7E5287C9" name="X86D7FBBD7E5287C9"></a></p>

<h4>6.1 <span class="Heading">Third homotopy group of a supsension of an Eilenberg-MacLane space </span></h4>

<p>The following example uses the nonabelian tensor square of groups to compute the third homotopy group</p>

<p><span class="SimpleMath">π_3(S(K(G,1))) = Z^30</span></p>

<p>of the suspension of the Eigenberg-MacLane space <span class="SimpleMath">K(G,1)</span> for <span class="SimpleMath">G</span> the free nilpotent group of class <span class="SimpleMath">2</span> on four generators.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">F:=FreeGroup(4);;G:=NilpotentQuotient(F,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">ThirdHomotopyGroupOfSuspensionB(G);</span>
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
  0, 0, 0, 0, 0, 0, 0, 0 ]

</pre></div>

<p><a id="X803FDFFE78A08446" name="X803FDFFE78A08446"></a></p>

<h4>6.2 <span class="Heading">Representations of knot quandles</span></h4>

<p>The following example constructs the finitely presented quandles associated to the granny knot and square knot, and then computes the number of quandle homomorphisms from these two finitely prresented quandles to the <span class="SimpleMath">17</span>-th quandle in <strong class="button">HAP</strong>'s library of connected quandles of order <span class="SimpleMath">24</span>. The number of homomorphisms differs between the two cases. The computation therefore establishes that the complement in <span class="SimpleMath">R^3</span> of the granny knot is not homeomorphic to the complement of the square knot.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Q:=ConnectedQuandle(24,17,"import");;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=PureCubicalKnot(3,1);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">L:=ReflectedCubicalKnot(K);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">square:=KnotSum(K,L);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">granny:=KnotSum(K,K);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">gcsquare:=GaussCodeOfPureCubicalKnot(square);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">gcgranny:=GaussCodeOfPureCubicalKnot(granny);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Qsquare:=PresentationKnotQuandle(gcsquare);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Qgranny:=PresentationKnotQuandle(gcgranny);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">NumberOfHomomorphisms(Qsquare,Q);</span>
408
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">NumberOfHomomorphisms(Qgranny,Q);</span>
24

</pre></div>

<p>The following commands compute a knot quandle directly from a pdf file containing the following hand-drawn image of the knot.</p>

<p><img src="images/myknot.png" align="center" height="160" alt="hand-drawn image of the trefoil knot"/></p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput"> gc:=ReadLinkImageAsGaussCode("myknot.pdf");</span>
[ [ [ -2, 4, -1, 3, -3, 2, -4, 1 ] ], [ -1, -1, 1, -1 ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Q:=PresentationKnotQuandle(gc);</span>
Quandle presentation of 4 generators and 4 relators.

</pre></div>

<p><a id="X7E4EFB987DA22017" name="X7E4EFB987DA22017"></a></p>

<h4>6.3 <span class="Heading">Identifying knots</span></h4>

<p>Low index subgrops of the knot group can be used to identify knots with few crossings. For instance, the following commands read in the following image of a knot and identify it as a sum of two trefoils. The commands determine the prime components only up to reflection, and so they don't distinguish between the granny and square knots.</p>

<p><img src="images/myknot2.png" align="center" height="160" alt="hand-drawn image of a knot"/></p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">gc:=ReadLinkImageAsGaussCode("myknot2.png");</span>
[ [ [ -4, 7, -5, 4, -7, 5, -3, 6, -2, 3, 8, -8, -6, 2, 1, -1 ] ], 
  [ 1, -1, -1, -1, -1, -1, -1, 1 ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">IdentifyKnot(gc);;</span>
PrimeKnot(3,1) + PrimeKnot(3,1)    modulo reflections of components. 

</pre></div>

<p><a id="X8664E986873195E6" name="X8664E986873195E6"></a></p>

<h4>6.4 <span class="Heading">Aspherical <span class="SimpleMath">2</span>-complexes</span></h4>

<p>The following example uses Polymake's linear programming routines to establish that the <span class="SimpleMath">2</span>-complex associated to the group presentation <span class="SimpleMath">&lt;x,y,z : xyx=yxy, yzy=zyz, xzx=zxz&gt;</span> is aspherical (that is, has contractible universal cover). The presentation is Tietze equivalent to the presentation used in the computer code, and the associated <span class="SimpleMath">2</span>-complexes are thus homotopy equivalent.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">F:=FreeGroup(6);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">x:=F.1;;y:=F.2;;z:=F.3;;a:=F.4;;b:=F.5;;c:=F.6;;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">rels:=[a^-1*x*y, b^-1*y*z, c^-1*z*x, a*x*(y*a)^-1,</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">   b*y*(z*b)^-1, c*z*(x*c)^-1];;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Print(IsAspherical(F,rels),"\n");</span>
Presentation is aspherical.

true

</pre></div>

<p><a id="X84C0CB8B7C21E179" name="X84C0CB8B7C21E179"></a></p>

<h4>6.5 <span class="Heading">Group presentations and homotopical syzygies</span></h4>

<p>Free resolutons for a group <span class="SimpleMath">G</span> are constructed in <strong class="button">HAP</strong> as the cellular chain complex <span class="SimpleMath">R_∗=C_∗(tilde X)</span> of the universal cover of some CW-complex <span class="SimpleMath">X=K(G,1)</span>. The <span class="SimpleMath">2</span>-skeleton of <span class="SimpleMath">X</span> gives rise to a free presentation for the group <span class="SimpleMath">G</span>. This presentation depends on a choice of maximal tree in the <span class="SimpleMath">1</span>-skeleton of <span class="SimpleMath">X</span> in cases where <span class="SimpleMath">X</span> has more than one <span class="SimpleMath">0</span>-cell. The attaching maps of <span class="SimpleMath">3</span>-cells in <span class="SimpleMath">X</span> can be regarded as <em>homotopical syzygies</em> or van Kampen diagrams over the group presentation whose boundaries spell the trivial word.</p>

<p>The following example constructs four terms of a resolution for the free abelian group <span class="SimpleMath">G</span> on <span class="SimpleMath">n=3</span> generators, and then extracts the group presentation from the resolution as well as the unique homotopical syzygy. The syzygy is visualized in terms of its graph of edges, directed edges being coloured according to the corresponding group generator. (In this example the CW-complex <span class="SimpleMath">tilde X</span> is regular, but in cases where it is not the visualization may be a quotient of the <span class="SimpleMath">1</span>-skeleton of the syzygy.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">n:=3;;c:=1;;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=Image(NqEpimorphismNilpotentQuotient(FreeGroup(n),c));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionNilpotentGroup(G,4);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=PresentationOfResolution(R);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.freeGroup;</span>
&lt;free group on the generators [ x, y, z ]&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.relators;</span>
[ y^-1*x^-1*y*x, z^-1*x^-1*z*x, z^-1*y^-1*z*y ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">IdentityAmongRelatorsDisplay(R,1);</span>

</pre></div>

<p><img src="images/syzfab.gif" align="center" height="160" alt="Homotopical syzygy for the free abelian group on three generators"/></p>

<p>This homotopical syzygy represents a relationship between the three relators <span class="SimpleMath">[x,y]</span>, <span class="SimpleMath">[x,z]</span> and <span class="SimpleMath">[y,z]</span> where <span class="SimpleMath">[x,y]=xyx^-1y^-1</span>. The syzygy can be thought of as a geometric relationship between commutators corresponding to the well-known Hall-Witt identity:</p>

<p><span class="SimpleMath">[ [x,y], ^yz ] [ [y,z], ^zx ] [ [z,x], ^xy ] = 1 .</span></p>

<p>The homotopical syzygy is special since in this example the edge directions and labels can be understood as specifying three homeomorphisms between pairs of faces. Viewing the syzygy as the boundary of the <span class="SimpleMath">3</span>-ball, by using the homeomorphisms to identify the faces in each face pair we obtain a quotient CW-complex <span class="SimpleMath">M</span> involving one vertex, three edges, three <span class="SimpleMath">2</span>-cells and one <span class="SimpleMath">3</span>-cell. The cell structure on the quotient exists because, under the restrictions of homomorphisms to the edges, any cycle of edges retricts to the identity map on any given edge. The following result tells us that <span class="SimpleMath">M</span> is in fact a closed oriented compact <span class="SimpleMath">3</span>-manifold.</p>

<p><strong class="button">Theorem.</strong> [Seifert u. Threlfall, Topologie, p.208] <em>Let <span class="SimpleMath">S^2</span> denote the boundary of the <span class="SimpleMath">3</span>-ball <span class="SimpleMath">B^3</span> and suppose that the sphere <span class="SimpleMath">S^2</span> is given a regular CW-structure in which the faces are partitioned into a collection of face pairs. Suppose that for each face pair there is an orientation reversing homeomorphism between the two faces that sends edges to edges and vertices to vertices. Suppose that by using these homeomorphisms to identity face pairs we obtain a (not necessarily regular) CW-structure on the quotient <span class="SimpleMath">M</span>. Then <span class="SimpleMath">M</span> is a closed compact orientable manifold if and only if its Euler characteristic is <span class="SimpleMath">χ(M)=0</span>.</em></p>

<p>The next commands construct a presentation and associated unique homotopical syzygy for the free nilpotent group of class <span class="SimpleMath">c=2</span> on <span class="SimpleMath">n=2</span> generators.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">n:=2;;c:=2;;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=Image(NqEpimorphismNilpotentQuotient(FreeGroup(n),c));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionNilpotentGroup(G,4);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=PresentationOfResolution(R);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.freeGroup;</span>
&lt;free group on the generators [ x, y, z ]&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.relators;</span>
[ z*x*y*x^-1*y^-1, z*x*z^-1*x^-1, z*y*z^-1*y^-1 ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">IdentityAmongRelatorsDisplay(R,1);</span>

</pre></div>

<p><img src="images/syznil.gif" align="center" height="160" alt="Homotopical syzygy for the free nilpotent group of class two on two generators"/></p>

<p>The syzygy represents the following relationship between commutators (in a free group).</p>

<p><span class="SimpleMath">[ [x^-1,y][x,y] , [y,x][y^-1,x]y^-1 ] [ [y,x][y^-1,x] , x^-1 ] = 1</span></p>

<p>Again, using the theorem of Seifert and Threlfall we see that the free nilpotent group of class two on two generators arises as the fundamental group of a closed compact orientable <span class="SimpleMath">3</span>-manifold <span class="SimpleMath">M</span>.</p>

<p><a id="X7F719758856A443D" name="X7F719758856A443D"></a></p>

<h4>6.6 <span class="Heading">Bogomolov multiplier</span></h4>

<p>The Bogomolov multiplier of a group is an isoclinism invariant. Using this property, the following example shows that there are precisely three groups of order <span class="SimpleMath">243</span> with non-trivial Bogomolov multiplier. The groups in question are numbered 28, 29 and 30 in <strong class="button">GAP</strong>'s library of small groups of order <span class="SimpleMath">243</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">L:=AllSmallGroups(3^5);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=IsoclinismClasses(L);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">for c in C do</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">if Length(BogomolovMultiplier(c[1]))&gt;0 then</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">Print(List(c,g-&gt;IdGroup(g)),"\n\n\n"); fi;</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">od;</span>
[ [ 243, 28 ], [ 243, 29 ], [ 243, 30 ] ]

</pre></div>

<p><a id="X8333413B838D787D" name="X8333413B838D787D"></a></p>

<h4>6.7 <span class="Heading">Second group cohomology and group extensions</span></h4>

<p>Any group extension <span class="SimpleMath">N↣ E ↠ G</span> gives rise to:</p>


<ul>
<li><p>an outer action <span class="SimpleMath">α: G→ Out(N)</span> of <span class="SimpleMath">G</span> on <span class="SimpleMath">N</span>.</p>

</li>
<li><p>an action <span class="SimpleMath">G→ Aut(Z(N))</span> of <span class="SimpleMath">G</span> on the centre of <span class="SimpleMath">N</span>, uniquely induced by the outer action <span class="SimpleMath">α</span> and the canonical action of <span class="SimpleMath">Out(N)</span> on <span class="SimpleMath">Z(N)</span>.</p>

</li>
<li><p>a "<span class="SimpleMath">2</span>-cocycle" <span class="SimpleMath">f: G× G→ N</span>.</p>

</li>
</ul>
<p>Any outer homomorphism <span class="SimpleMath">α: G→ Out(N)</span> gives rise to a cohomology class <span class="SimpleMath">k</span> in <span class="SimpleMath">H^3(G,Z(N))</span>. It was shown by Eilenberg and Mac<span class="SimpleMath"></span>Lane that the class <span class="SimpleMath">k</span> is trivial if and only if the outer action <span class="SimpleMath">α</span> arises from some group extension <span class="SimpleMath">N↣ E↠ G</span>. If <span class="SimpleMath">k</span> is trivial then there is a (non-canonical) bijection between the second cohomology group <span class="SimpleMath">H^2(G,Z(N))</span> and Yoneda equivalence classes of extensions of <span class="SimpleMath">G</span> by <span class="SimpleMath">N</span> that are compatible with <span class="SimpleMath">α</span>.</p>

<p><strong class="button">First Example.</strong></p>

<p>Consider the group <span class="SimpleMath">H=SmallGroup(64,134)</span>. Consider the normal subgroup <span class="SimpleMath">N=NormalSubgroups(G)[15]</span> and quotient group <span class="SimpleMath">G=H/N</span>. We have <span class="SimpleMath">N=C_2× D_4</span>, <span class="SimpleMath">A=Z(N)=C_2× C_2</span> and <span class="SimpleMath">G=C_2× C_2</span>.</p>

<p>Suppose we wish to classify all extensions <span class="SimpleMath">C_2× D_4 ↣ E ↠ C_2× C_2</span> that induce the given outer action of <span class="SimpleMath">G</span> on <span class="SimpleMath">N</span>. The following commands show that, up to Yoneda equivalence, there are two such extensions.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">H:=SmallGroup(64,134);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">N:=NormalSubgroups(H)[15];;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">A:=Centre(GOuterGroup(H,N));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=ActingGroup(A);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionFiniteGroup(G,3);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=HomToGModule(R,A);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Cohomology(C,2);</span>
[ 2 ]

</pre></div>

<p>The following additional commands return a standard <span class="SimpleMath">2</span>-cocycle <span class="SimpleMath">f:G× G→ A =C_2× C_2</span> corresponding to the non-trivial element in <span class="SimpleMath">H^2(G,A)</span>. The value <span class="SimpleMath">f(g,h)</span> of the <span class="SimpleMath">2</span>-cocycle is calculated for all <span class="SimpleMath">16</span> pairs <span class="SimpleMath">g,h ∈ G</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">CH:=CohomologyModule(C,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Elts:=Elements(ActedGroup(CH));</span>
[ &lt;identity&gt; of ..., f1 ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">x:=Elts[2];;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">c:=CH!.representativeCocycle(x);</span>
Standard 2-cocycle 

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">f:=Mapping(c);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">for g in G do for h in G do</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">Print(f(g,h),"\n");</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">od;</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">od;</span>
&lt;identity&gt; of ...
&lt;identity&gt; of ...
&lt;identity&gt; of ...
&lt;identity&gt; of ...
&lt;identity&gt; of ...
f6
&lt;identity&gt; of ...
f6
&lt;identity&gt; of ...
&lt;identity&gt; of ...
&lt;identity&gt; of ...
&lt;identity&gt; of ...
&lt;identity&gt; of ...
f6
&lt;identity&gt; of ...
f6

</pre></div>

<p>The following commands will then construct and identify all extensions of <span class="SimpleMath">N</span> by <span class="SimpleMath">G</span> corresponding to the given outer action of <span class="SimpleMath">G</span> on <span class="SimpleMath">N</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">H := SmallGroup(64,134);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">N := NormalSubgroups(H)[15];;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">ON := GOuterGroup(H,N);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">A := Centre(ON);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=ActingGroup(A);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionFiniteGroup(G,3);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=HomToGModule(R,A);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">CH:=CohomologyModule(C,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Elts:=Elements(ActedGroup(CH));;</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">lst := List(Elts{[1..Length(Elts)]},x-&gt;CH!.representativeCocycle(x));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">ccgrps := List(lst, x-&gt;CcGroup(ON, x));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#So ccgrps is a list of groups, each being an extension of G by N, corresponding</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#to the two elements in H^2(G,A).</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#The following command produces the GAP identification number for each group.</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">L:=List(ccgrps,IdGroup);</span>
[ [ 64, 134 ], [ 64, 135 ] ]

</pre></div>

<p><strong class="button">Second Example</strong></p>

<p>The following example illustrates how to construct a cohomology class <span class="SimpleMath">k</span> in <span class="SimpleMath">H^2(G, A)</span> from a cocycle <span class="SimpleMath">f:G × G → A</span>, where <span class="SimpleMath">G=SL_2( Z_4)</span> and <span class="SimpleMath">A= Z_8</span> with trivial action.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#We'll construct G=SL(2,Z_4) as a permutation group.</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=SL(2,ZmodnZ(4));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=Image(IsomorphismPermGroup(G));;</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#We'll construct Z_8=Z/8Z as a G-outer group</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">z_8:=Group((1,2,3,4,5,6,7,8));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Z_8:=TrivialGModuleAsGOuterGroup(G,z_8);;</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#We'll compute the group h=H^2(G,Z_8)</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionFiniteGroup(G,3);;  #R is a free resolution</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=HomToGModule(R,Z_8);; # C is a chain complex</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">H:=CohomologyModule(C,2);; #H is the second cohomology H^2(G,Z_8)</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">h:=ActedGroup(H);; #h is the underlying group of H</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#We'll compute  cocycles c2, c5 for the second and fifth cohomology classs</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">c2:=H!.representativeCocycle(Elements(h)[2]);</span>
Standard 2-cocycle 

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">c5:=H!.representativeCocycle(Elements(h)[5]);</span>
Standard 2-cocycle 

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#Now we'll construct the cohomology classes C2, C5 in the group h corresponding to the cocycles c2, c5.</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C2:=CohomologyClass(H,c2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C5:=CohomologyClass(H,c5);;</span>
 
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#Finally, we'll show that C2, C5 are distinct cohomology classes, both of order 4.</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C2=C5;</span>
false
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Order(C2);</span>
4
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Order(C5);</span>
4

</pre></div>

<p><a id="X7F04FA5E81FFA848" name="X7F04FA5E81FFA848"></a></p>

<h4>6.8 <span class="Heading">Cocyclic groups: a convenient way of representing  certain groups</span></h4>

<p><strong class="button">GAP</strong> offers a number of data types for representing groups, including those of fp-groups (<em>finitely presented groups</em>), pc-groups (<em>power-conjugate presentated groups</em> for finite polycyclic groups), pcp-groups (<em>polycyclically presented groups</em> for finite and infinite polycyclic groups), permutation groups (for finite groups), and matrix groups over a field or ring. Each data type has its advantages and limitations.</p>

<p>Based on the definitions and examples in Section <a href="chap6.html#X8333413B838D787D"><span class="RefLink">6.7</span></a> the additional data type of a cc-group (<em>cocyclic group</em>) is provided in <strong class="button">HAP</strong>. This can be used for a group <span class="SimpleMath">E</span> arising as a group extension <span class="SimpleMath">N↣ E ↠ G</span> and is a component object involving:</p>


<ul>
<li><p><code class="code">E!.Base</code> consisting of some representation of a group <span class="SimpleMath">G</span>.</p>

</li>
<li><p><code class="code">E!.Fibre</code> consisting of some representation of a group <span class="SimpleMath">N</span>.</p>

</li>
<li><p><code class="code">E!.OuterGroup</code> consisting of an outer action <span class="SimpleMath">α: G→ Out(N)</span> of <span class="SimpleMath">G</span> on <span class="SimpleMath">N</span>.</p>

</li>
<li><p><code class="code">E!.Cocycle</code> consisting of a "<span class="SimpleMath">2</span>-cocycle" <span class="SimpleMath">f: G× G→ N</span>.</p>

</li>
</ul>
<p>The first example in Section <a href="chap6.html#X8333413B838D787D"><span class="RefLink">6.7</span></a> illustrates the construction of cc-groups for which both the base <span class="SimpleMath">G</span> and fibre <span class="SimpleMath">N</span> are finite pc-groups. That example extends to any scenario in which the base <span class="SimpleMath">G</span> is a group for which:</p>

<ol>
<li><p>we can construct the first 3 degrees of a free <span class="SimpleMath">ZG</span>-resolution <span class="SimpleMath">C_∗ X</span>.</p>

</li>
<li><p>we can construct the first 2 terms of a contracting homotopy <span class="SimpleMath">h_i: C_nX→ C_n+1X</span> for <span class="SimpleMath">i=0,1</span>.</p>

</li>
<li><p><span class="SimpleMath">N</span> is a group in which we can multiply elements effectively and for which we can determine the centre <span class="SimpleMath">Z(N)</span> and outer automorphism group <span class="SimpleMath">Out(N)</span>.</p>

</li>
</ol>
<p>As an illustration where the base group is a non-solvable finite group and the fibre is the infinite cyclic group, with base group acting trivially on the fibre, the following commands list up to Yoneda equivalence all central extensions <span class="SimpleMath">Z ↣ E ↠ G</span> for <span class="SimpleMath">G=A_5:C_16</span>. The base group is a non-solvable semi-direct product of order <span class="SimpleMath">960</span> and thus none of the <span class="SimpleMath">16</span> extensions are polycyclic. The commands classify the extensions according to their integral homology in degrees <span class="SimpleMath">≤ 2</span>, showing that there are precisely 5 such equivalence classes of extensions. Thus, there are at least 5 distinct isomorphism types among the <span class="SimpleMath">16</span> extensions. A presentation is constructed for the group corresponding to the sixteenth extension. The final command lists the orders of the 16 cohomology group elements corresponding to the 16 extensions. The 16th element has order 1, meaning that the sixteenth extension is the direct product <span class="SimpleMath">C_∞ × A_5:C_16</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=SmallGroup(960,637);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">StructureDescription(G);</span>
"A5 : C16"

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">N:=AbelianPcpGroup([0]);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">N:=TrivialGModuleAsGOuterGroup(G,N);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionFiniteGroup(G,3);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=HomToGModule(R,N);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">CH:=CohomologyModule(C,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Elts:=Elements(ActedGroup(CH));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">lst := List(Elts{[1..Length(Elts)]},x-&gt;CH!.representativeCocycle(x));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">ccgrps := List(lst, x-&gt;CcGroup(N, x));;</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">inv:=function(gg)</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">local T;</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">T:=ResolutionInfiniteCcGroup(gg,3);</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">return List([1..2],i-&gt;Homology(TensorWithIntegers(T),i));</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">end;;</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">EquivClasses:=Classify(ccgrps,inv);</span>
 [ &lt;Cc-group of Size infinity&gt;, &lt;Cc-group of Size infinity&gt;, 
      &lt;Cc-group of Size infinity&gt;, &lt;Cc-group of Size infinity&gt;, 
      &lt;Cc-group of Size infinity&gt;, &lt;Cc-group of Size infinity&gt;, 
      &lt;Cc-group of Size infinity&gt;, &lt;Cc-group of Size infinity&gt; ], 
  [ &lt;Cc-group of Size infinity&gt;, &lt;Cc-group of Size infinity&gt;, 
      &lt;Cc-group of Size infinity&gt;, &lt;Cc-group of Size infinity&gt; ], 
  [ &lt;Cc-group of Size infinity&gt;, &lt;Cc-group of Size infinity&gt; ], 
  [ &lt;Cc-group of Size infinity&gt; ], [ &lt;Cc-group of Size infinity&gt; ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List(EquivClasses,Size);</span>
[ 8, 4, 2, 1, 1 ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">F16:=Image(IsomorphismFpGroup(ccgrps[16]));</span>
&lt;fp group on the generators [ x, y, z, w, v ]&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">RelatorsOfFpGroup(F16);</span>
[ (x^2*y*z*w*z*y)^3*x^2*(y*x*w*y^2*z*x*y*z*y)^3*y*x*w*y^2*z*x*y^2*z*w*y^2*z*y,
  x*y^-2*w^-1*z^-1*y^-1*x^-1*y, x*z^-1*y^-1*z^-1*w^-1*z^-1*y^-1*x^-1*z, 
  x*y^-2*z^-1*w^-1*z^-1*y^-1*x^-1*w, z^-2, w^-2, y^-3, w*y^-1*w^-1*y^-1, 
  w*z*w^-1*z^-1*w^-1*z, z*y^2*(z^-1*y^-1)^2, v^-1*x^-1*v*x, v*y*v^-1*y^-1, 
  v*z*v^-1*z^-1, v*w*v^-1*w^-1 ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List(Elts,Order);</span>
[ 16, 16, 16, 16, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 2, 1 ]

</pre></div>

<p><a id="X863080FE8270468D" name="X863080FE8270468D"></a></p>

<h4>6.9 <span class="Heading">Effective group presentations</span></h4>

<p>For any free <span class="SimpleMath">ZG</span>-resolution <span class="SimpleMath">R_∗=C_∗ X</span> arising as the cellular chain complex of a contractible CW-complex, the terms in degrees <span class="SimpleMath">≤ 2</span> correspond to a free presentation for the group <span class="SimpleMath">G</span>. The following example accesses this presentation for the group <span class="SimpleMath">PGL_3( Z[sqrt-1])</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=ContractibleGcomplex("PGL(3,Z[i])");;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=PresentationOfResolution(R);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=P.freeGroup/P.relators;</span>
&lt;fp group on the generators [ v, w, x, y, z ]&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.relators;</span>
[ v^2, w^-1*v*w*v^-1, w^-1*v^-1*w^-1, (x^-1*w)^3, (y^-1*w)^3, (z^-1*w)^4, 
  y^-1*v^-1*z*y^-1*x, y^-1*v*x*v^-1*x*v, v^-1*z*v^-1*x*y, v^-1*x*v*y*v*x*v*y, 
  x^3, x*z*y, y^-1*v^-1*y^2*v*y^-1, (v*y)^4, z^-1*y*v*z^-1, (v*y*z)^2, 
  v^-1*(z*v)^2*z ]

</pre></div>

<p>The homomorphism <span class="SimpleMath">h_0: R_0 → R_1</span> of a contracting homotopy provides a unique expression for each element of <span class="SimpleMath">G</span> as a word in the free generators. To illustrate this, we consider the Sylow <span class="SimpleMath">2</span>-subgroup <span class="SimpleMath">H=Syl_2(M_24)</span> of the Mathieu group <span class="SimpleMath">M_24</span>. We obtain a resolution <span class="SimpleMath">R_∗</span> for <span class="SimpleMath">H</span> by recursively applying perturbation techniques to a composition series for <span class="SimpleMath">H</span>. Such a resolution will yield a "kind of" power-conjugate presentation for <span class="SimpleMath">H</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">H:=SylowSubgroup(MathieuGroup(24),2);</span>
&lt;permutation group of size 1024 with 10 generators&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Order(H);</span>
1024
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=CompositionSeries(H);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionSubnormalSeries(C,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=PresentationOfResolution(R);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.freeGroup/P.relators;</span>
&lt;fp group on the generators [ q, r, s, t, u, v, w, x, y, z ]&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.relators;</span>
[ q^-2*z*y*x*w*v, q*r^-1*q^-1*y*u*r, s*q*s^-1*q^-1, t*q*t^-1*q^-1, 
  q*u^-1*q^-1*y*v*u, y*q*v^-1*q^-1, q*w^-1*q^-1*z*x, w*q*x^-1*q^-1, 
  q*y^-1*q^-1*z*v, z*q*z^-1*q^-1, r^-2, t*r*s^-1*r^-1, s*r*t^-1*r^-1, 
  u*r*u^-1*r^-1, v*r*v^-1*r^-1, r*w^-1*r^-1*y*w*u, r*x^-1*r^-1*y*x*u, 
  y*r*y^-1*r^-1, z*r*z^-1*r^-1, s^-2, t*s*t^-1*s^-1, x*s*u^-1*s^-1, 
  s*v^-1*s^-1*z*y*w*u, s*w^-1*s^-1*y*v*u, u*s*x^-1*s^-1, s*y^-1*s^-1*y*x*u, 
  z*s*z^-1*s^-1, t^-2, t*u^-1*t^-1*y*x*u, t*v^-1*t^-1*z*w, t*w^-1*t^-1*z*v, 
  y*t*x^-1*t^-1, x*t*y^-1*t^-1, z*t*z^-1*t^-1, u^-2, v*u*v^-1*u^-1, 
  u*w^-1*u^-1*z*w, x*u*x^-1*u^-1, y*u*y^-1*u^-1, z*u*z^-1*u^-1, v^-2, 
  w*v*w^-1*v^-1, v*x^-1*v^-1*z*x, y*v*y^-1*v^-1, z*v*z^-1*v^-1, w^-2, 
  x*w*x^-1*w^-1, w*y^-1*w^-1*z*y, z*w*z^-1*w^-1, x^-2, y*x*y^-1*x^-1, 
  z*x*z^-1*x^-1, y^-2, z*y*z^-1*y^-1, z^-2 ]

</pre></div>

<p>The following additional commands use the contracting homotopy homomorphism <span class="SimpleMath">h_0: R_0→ R_1</span> to express some random elements of <span class="SimpleMath">H</span> as words in the free generators.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">g:=Random(H);</span>
(1,6)(2,3)(4,9)(5,16)(7,10)(8,21)(11,18)(12,17)(13,19)(14,20)(15,22)(23,24)
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.wordInFreeGenerators(g);</span>
q^-1*t^-1*x^-1*y^-1
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput"></span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">g:=Random(H);</span>
(1,6)(2,23,10,18)(3,22,19,24)(4,11,15,9)(7,8,21,13)(12,14)
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.wordInFreeGenerators(g);</span>
q^-1*u^-1*w^-1*x^-1*z^-1
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput"></span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">g:=Random(H);</span>
(1,14,5,17)(2,7,9,19)(3,11,4,22)(6,12,16,20)(8,18,24,15)(10,23,13,21)
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.wordInFreeGenerators(g);</span>
q^-1*r^-1*t^-1*v^-1*x^-1*z^-1
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput"></span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">g:=Random(H);</span>
(1,14,5,17)(2,21)(3,9)(4,24)(6,12,16,20)(7,11,15,13)(8,23)(10,18,22,19)
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P.wordInFreeGenerators(g);</span>
q^-1*r^-1*t^-1*v^-1*w^-1*z^-1

</pre></div>

<p>Because the resolution <span class="SimpleMath">R_∗</span> was obtained from a composition series, the unique word associated to an element <span class="SimpleMath">g∈ H</span> always has the form <span class="SimpleMath">q^ϵ_1 r^ϵ_2 s^ϵ_3 t^ϵ_4 u^ϵ_5 v^ϵ_6 w^ϵ_7 x^ϵ_8 y^ϵ_9 z^ϵ_10}</span> determined by the exponent vector <span class="SimpleMath">(ϵ_1,⋯,ϵ_10) ∈ ( Z_2)^10</span>.</p>

<p><a id="X7C60E2B578074532" name="X7C60E2B578074532"></a></p>

<h4>6.10 <span class="Heading">Second group cohomology and cocyclic Hadamard matrices</span></h4>

<p>An <em>Hadamard matrix</em> is a square <span class="SimpleMath">n× n</span> matrix <span class="SimpleMath">H</span> whose entries are either <span class="SimpleMath">+1</span> or <span class="SimpleMath">-1</span> and whose rows are mutually orthogonal, that is <span class="SimpleMath">H H^t = nI_n</span> where <span class="SimpleMath">H^t</span> denotes the transpose and <span class="SimpleMath">I_n</span> denotes the <span class="SimpleMath">n× n</span> identity matrix.</p>

<p>Given a group <span class="SimpleMath">G={g_1,g_2,...,g_n}</span> of order <span class="SimpleMath">n</span> and the abelian group <span class="SimpleMath">A={1,-1}</span> of square roots of unity, any <span class="SimpleMath">2</span>-cocycle <span class="SimpleMath">f: G× G→ A</span> corresponds to an <span class="SimpleMath">n× n</span> matrix <span class="SimpleMath">F=(f(g_i,g_j))_1≤ i,j≤ n</span> whose entries are <span class="SimpleMath">± 1</span>. If <span class="SimpleMath">F</span> is Hadamard it is called a <em>cocyclic Hadamard matrix</em> corresponding to <span class="SimpleMath">G</span>.</p>

<p>The following commands compute all <span class="SimpleMath">192</span> of the cocyclic Hadamard matrices for the abelian group <span class="SimpleMath">G= Z_4⊕ Z_4</span> of order <span class="SimpleMath">n=16</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=AbelianGroup([4,4]);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">F:=CocyclicHadamardMatrices(G);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Length(F);</span>
192

</pre></div>

<p><a id="X78040D8580D35D53" name="X78040D8580D35D53"></a></p>

<h4>6.11 <span class="Heading">Third group cohomology and homotopy <span class="SimpleMath">2</span>-types</span></h4>

<p><strong class="button">Homotopy 2-types</strong></p>

<p>The third cohomology <span class="SimpleMath">H^3(G,A)</span> of a group <span class="SimpleMath">G</span> with coefficients in a <span class="SimpleMath">G</span>-module <span class="SimpleMath">A</span>, together with the corresponding <span class="SimpleMath">3</span>-cocycles, can be used to classify homotopy <span class="SimpleMath">2</span>-types. A <em>homotopy 2-type</em> is a CW-complex whose homotopy groups are trivial in dimensions <span class="SimpleMath">n=0</span> and <span class="SimpleMath">n&gt;2</span>. There is an equivalence between the two categories</p>

<ol>
<li><p>(Homotopy category of connected CW-complexes <span class="SimpleMath">X</span> with trivial homotopy groups <span class="SimpleMath">π_n(X)</span> for <span class="SimpleMath">n&gt;2</span>)</p>

</li>
<li><p>(Localization of the category of simplicial groups with Moore complex of length <span class="SimpleMath">1</span>, where localization is with respect to homomorphisms inducing isomorphisms on homotopy groups)</p>

</li>
</ol>
<p>which reduces the homotopy theory of <span class="SimpleMath">2</span>-types to a 'computable' algebraic theory. Furthermore, a simplicial group with Moore complex of length <span class="SimpleMath">1</span> can be represented by a group <span class="SimpleMath">H</span> endowed with two endomorphisms <span class="SimpleMath">s: H→ H</span> and <span class="SimpleMath">t: H→ H</span> satisfying the axioms</p>


<ul>
<li><p><span class="SimpleMath">ss=s</span>, <span class="SimpleMath">ts=s</span>,</p>

</li>
<li><p><span class="SimpleMath">tt=t</span>, <span class="SimpleMath">st=t</span>,</p>

</li>
<li><p><span class="SimpleMath">[ker s, ker t] = 1</span>.</p>

</li>
</ul>
<p>Ths triple <span class="SimpleMath">(H,s,t)</span> was termed a <em>cat<span class="SimpleMath">^1</span>-group</em> by J.-L. Loday since it can be regarded as a group <span class="SimpleMath">H</span> endowed with one compatible category structure.</p>

<p>The <em>homotopy groups</em> of a cat<span class="SimpleMath">^1</span>-group <span class="SimpleMath">H</span> are defined as: <span class="SimpleMath">π_1(H) = image(s)/t(ker(s))</span>; <span class="SimpleMath">π_2(H)=ker(s) ∩ ker(t)</span>; <span class="SimpleMath">π_n(H)=0</span> for <span class="SimpleMath">n&gt; 2</span> or <span class="SimpleMath">n=0</span>. Note that <span class="SimpleMath">π_2(H)</span> is a <span class="SimpleMath">π_1(H)</span>-module where the action is induced by conjugation in <span class="SimpleMath">H</span>.</p>

<p>A homotopy <span class="SimpleMath">2</span>-type <span class="SimpleMath">X</span> can be represented by a cat<span class="SimpleMath">^1</span>-group <span class="SimpleMath">H</span> or by the homotopy groups <span class="SimpleMath">π_1X=π_1H</span>, <span class="SimpleMath">π_2X=π_2H</span> and a cohomology class <span class="SimpleMath">k∈ H^3(π_1X,π_2X)</span>. This class <span class="SimpleMath">k</span> is the <em>Postnikov invariant</em>.</p>

<p><strong class="button">Relation to Group Theory</strong></p>

<p>A number of standard group-theoretic constructions can be viewed naturally as a cat<span class="SimpleMath">^1</span>-group.</p>

<ol>
<li><p>A <span class="SimpleMath">ZG</span>-module <span class="SimpleMath">A</span> can be viewed as a cat<span class="SimpleMath">^1</span>-group <span class="SimpleMath">(H,s,t)</span> where <span class="SimpleMath">H</span> is the semi-direct product <span class="SimpleMath">A⋊ G</span> and <span class="SimpleMath">s(a,g)=(1,g)</span>, <span class="SimpleMath">t(a,g)=(1,g)</span>. Here <span class="SimpleMath">π_1(H)=G</span> and <span class="SimpleMath">π_2(H)=A</span>.</p>

</li>
<li><p>A group <span class="SimpleMath">G</span> with normal subgroup <span class="SimpleMath">N</span> can be viewed as a cat<span class="SimpleMath">^1</span>-group <span class="SimpleMath">(H,s,t)</span> where <span class="SimpleMath">H</span> is the semi-direct product <span class="SimpleMath">N⋊ G</span> and <span class="SimpleMath">s(n,g)=(1,g)</span>, <span class="SimpleMath">t(n,g)=(1,ng)</span>. Here <span class="SimpleMath">π_1(H)=G/N</span> and <span class="SimpleMath">π_2(H)=0</span>.</p>

</li>
<li><p>The homomorphism <span class="SimpleMath">ι : G→ Aut(G)</span> which sends elements of a group <span class="SimpleMath">G</span> to the corresponding inner automorphism can be viewed as a cat<span class="SimpleMath">^1</span>-group <span class="SimpleMath">(H,s,t)</span> where <span class="SimpleMath">H</span> is the semi-direct product <span class="SimpleMath">G⋊ Aut(G)</span> and <span class="SimpleMath">s(g,a)=(1,a)</span>, <span class="SimpleMath">t(g,a)=(1,ι (g)a)</span>. Here <span class="SimpleMath">π_1(H)=Out(G)</span> is the outer automorphism group of <span class="SimpleMath">G</span> and <span class="SimpleMath">π_2(H)=Z(G)</span> is the centre of <span class="SimpleMath">G</span>.</p>

</li>
</ol>
<p>These three constructions are implemented in <strong class="button">HAP</strong>.</p>

<p><strong class="button">Example</strong></p>

<p>The following commands begin by constructing the cat<span class="SimpleMath">^1</span>-group <span class="SimpleMath">H</span> of Construction 3 for the group <span class="SimpleMath">G=SmallGroup(64,134)</span>. They then construct the fundamental group of <span class="SimpleMath">H</span> and the second homotopy group of as a <span class="SimpleMath">π_1</span>-module. These homotopy groups have orders <span class="SimpleMath">8</span> and <span class="SimpleMath">2</span> respectively.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=SmallGroup(64,134);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">H:=AutomorphismGroupAsCatOneGroup(G);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">pi_1:=HomotopyGroup(H,1);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">pi_2:=HomotopyModule(H,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Order(pi_1);</span>
8
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Order(ActedGroup(pi_2));</span>
2

</pre></div>

<p>The following additional commands show that there are <span class="SimpleMath">1024</span> Yoneda equivalence classes of cat<span class="SimpleMath">^1</span>-groups with fundamental group <span class="SimpleMath">π_1</span> and <span class="SimpleMath">π_1</span>- module equal to <span class="SimpleMath">π_2</span> in our example.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=ResolutionFiniteGroup(pi_1,4);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=HomToGModule(R,pi_2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">CH:=CohomologyModule(C,3);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">AbelianInvariants(ActedGroup(CH));</span>
[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]

</pre></div>

<p>A <span class="SimpleMath">3</span>-cocycle <span class="SimpleMath">f : π_1 × π_1 × π_1 → π_2</span> corresponding to a random cohomology class <span class="SimpleMath">k∈ H^3(π_1,π_2)</span> can be produced using the following command.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">x:=Random(Elements(ActedGroup(CH)));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">f:=CH!.representativeCocycle(x);</span>
Standard 3-cocycle 

</pre></div>

<p>The <span class="SimpleMath">3</span>-cocycle corresponding to the Postnikov invariant of <span class="SimpleMath">H</span> itself can be easily constructed directly from its definition in terms of a set-theoretic 'section' of the crossed module corresponding to <span class="SimpleMath">H</span>.</p>


<div class="chlinkprevnextbot">&nbsp;<a href="chap0.html">[Top of Book]</a>&nbsp;  <a href="chap0.html#contents">[Contents]</a>&nbsp;  &nbsp;<a href="chap5.html">[Previous Chapter]</a>&nbsp;  &nbsp;<a href="chap7.html">[Next Chapter]</a>&nbsp;  </div>


<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chap15.html">15</a>  <a href="chap16.html">16</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>