CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

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

Views: 418346
1
2
2 2d-groups : crossed modules and cat1-groups
3
4
The term 2d-group refers to a set of equivalent categories of which the most
5
common are the categories of crossed modules; cat1-groups; and
6
group-groupoids, all of which involve a pair of groups.
7
8
9
2.1 Constructions for crossed modules
10
11
A crossed module (of groups) mathcalX = (∂ : S -> R ) consists of a group
12
homomorphism ∂, called the boundary of mathcalX, with source S and range R.
13
The group R acts on itself by conjugation, and on S by an action α : R ->
14
Aut(S) such that, for all s,s_1,s_2 ∈ S and r ∈ R,
15
16
17
{\bf XMod\ 1} : \partial(s^r) = r^{-1} (\partial s) r = (\partial s)^r,
18
\qquad {\bf XMod\ 2} : s_1^{\partial s_2} = s_2^{-1}s_1 s_2 = {s_1}^{s_2}.
19
20

21
22
When only the first of these axioms is satisfied, the resulting structure is
23
a pre-crossed module (see section 2.3). (Much of the literature on crossed
24
modules uses left actions, but we have chosen to use right actions in this
25
package since that is the standard choice for group actions in GAP.)
26
27
The kernel of ∂ is abelian.
28
29
There are a variety of constructors for crossed modules:
30
31
2.1-1 XMod
32
33
XMod( args )  function
34
XModByBoundaryAndAction( bdy, act )  operation
35
XModByTrivialAction( bdy )  operation
36
XModByNormalSubgroup( G, N )  operation
37
XModByCentralExtension( bdy )  operation
38
XModByAutomorphismGroup( grp )  operation
39
XModByInnerAutomorphismGroup( grp )  operation
40
XModByGroupOfAutomorphisms( G, A )  operation
41
XModByAbelianModule( abmod )  operation
42
DirectProductOp( L, X1 )  operation
43
44
The global function XMod implements one of the following standard
45
constructions:
46
47
 A trivial action crossed module (∂ : S -> R) has s^r = s for all s ∈
48
S, r ∈ R, the source is abelian and the image lies in the centre of
49
the range.
50
51
 A conjugation crossed module is the inclusion of a normal subgroup S ⊴
52
R, where R acts on S by conjugation.
53
54
 A central extension crossed module has as boundary a surjection ∂ : S
55
-> R, with central kernel, where r ∈ R acts on S by conjugation with
56
∂^-1r.
57
58
 An automorphism crossed module has as range a subgroup R of the
59
automorphism group Aut(S) of S which contains the inner automorphism
60
group of S. The boundary maps s ∈ S to the inner automorphism of S by
61
s.
62
63
 A crossed abelian module has an abelian module as source and the zero
64
map as boundary.
65
66
 The direct product mathcalX_1 × mathcalX_2 of two crossed modules has
67
source S_1 × S_2, range R_1 × R_2 and boundary ∂_1 × ∂_2, with R_1,
68
R_2 acting trivially on S_2, S_1 respectively.
69
70
Since DirectProduct is a global function which only accepts groups, it
71
is necessary to provide an "other method" for operation
72
DirectProductOp which, as usual, takes as parameters a list of crossed
73
modules, followed by the first of these: DirectProductOp([X1,X2],X1);
74
75
2.1-2 Source
76
77
Source( X0 )  attribute
78
Range( X0 )  attribute
79
Boundary( X0 )  attribute
80
XModAction( X0 )  attribute
81
82
The following attributes are used in the construction of a crossed module
83
X0.
84
85
 Source(X0) and Range(X0) are the source S and range R of ∂, the
86
boundary Boundary(X0);
87
88
 XModAction(X0) is a homomorphism from R to a group of automorphisms of
89
X0.
90
91
(Up until version 2.63 there was an additional attribute AutoGroup, the
92
range of XModAction(X0).)
93
94
2.1-3 ImageElmXModAction
95
96
ImageElmXModAction( X0, s, r )  operation
97
98
This function returns the element s^r given by XModAction(X0).
99
100
2.1-4 Size
101
102
Size( X0 )  attribute
103
Name( X0 )  attribute
104
IdGroup( X0 )  attribute
105
ExternalSetXMod( X0 )  attribute
106
107
More familiar attributes are Name, Size and IdGroup. The name is formed by
108
concatenating the names of the source and range (if these exist). Size and
109
IdGroup return two-element lists.
110
111
The ExternalSetXMod for a crossed module is the source group considered as a
112
G-set of the range group using the crossed module action.
113
114
The Display function is used to print details of 2d-groups.
115
116
In the simple example below, X1 is an automorphism crossed module, using a
117
cyclic group of size five. The Print statements at the end list the GAP
118
representations, properties and attributes of X1.
119
120
 Example 
121

122
gap> c5 := Group( (5,6,7,8,9) );;
123
gap> SetName( c5, "c5" );
124
gap> X1 := XModByAutomorphismGroup( c5 );
125
[c5 -> PAut(c5)] 
126
gap> Display( X1 );
127
Crossed module [c5 -> PAut(c5)] :-
128
: Source group c5 has generators:
129
 [ (5,6,7,8,9) ]
130
: Range group PAut(c5) has generators:
131
 [ (1,2,3,4) ]
132
: Boundary homomorphism maps source generators to:
133
 [ () ]
134
: Action homomorphism maps range generators to automorphisms:
135
 (1,2,3,4) --> { source gens --> [ (5,7,9,6,8) ] }
136
 This automorphism generates the group of automorphisms.
137
gap> Size( X1 ); IdGroup( X1 ); 
138
[ 5, 4 ]
139
[ [ 5, 1 ], [ 4, 1 ] ]
140
gap> ext := ExternalSetXMod( X1 ); 
141
<xset:[ (), (5,6,7,8,9), (5,7,9,6,8), (5,8,6,9,7), (5,9,8,7,6) ]>
142
gap> Orbits( ext );
143
[ [ () ], [ (5,6,7,8,9), (5,7,9,6,8), (5,9,8,7,6), (5,8,6,9,7) ] ]
144
gap> ImageElmXModAction( X1, (5,6,7,8,9), (1,2,3,4) );
145
(5,7,9,6,8)
146
gap> RepresentationsOfObject( X1 );
147
[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ]
148
gap> KnownAttributesOfObject( X1);
149
[ "Name", "Size", "Range", "Source", "IdGroup", "Boundary", "XModAction", 
150
 "ExternalSetXMod" ]
151

152

153
154
155
2.2 Properties of crossed modules
156
157
The underlying category structures for the objects constructed in this
158
chapter follow the sequence Is2DimensionalDomain; Is2DimensionalMagma;
159
Is2DimensionalMagmaWithOne; Is2DimensionalMagmaWithInverses, mirroring the
160
situation for (one-dimensional) groups. From these we construct
161
Is2DimensionalSemigroup, Is2DimensionalMonoid and Is2DimensionalGroup.
162
163
There are then a variety of properties associated with crossed modules,
164
starting with IsPreXMod and IsXMod.
165
166
2.2-1 IsXMod
167
168
IsXMod( X0 )  property
169
IsPreXMod( X0 )  property
170
IsPerm2DimensionalGroup( X0 )  property
171
IsPc2DimensionalGroup( X0 )  property
172
IsFp2DimensionalGroup( X0 )  property
173
174
A structure which has IsPerm2DimensionalGroup is a precrossed module or a
175
pre-cat1-group (see section 2.4) whose source and range are both permutation
176
groups. The properties IsPc2DimensionalGroup, IsFp2DimensionalGroup are
177
defined similarly. In the example below we see that X1 has IsPreXMod, IsXMod
178
and IsPerm2DimensionalGroup. There are also properties corresponding to the
179
various construction methods listed in section 2.1:
180
IsTrivialAction2DimensionalGroup; IsNormalSubgroup2DimensionalGroup;
181
IsCentralExtension2DimensionalGroup; IsAutomorphismGroup2DimensionalGroup;
182
IsAbelianModule2DimensionalGroup.
183
184
 Example 
185

186
gap> KnownPropertiesOfObject( X1 );
187
[ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite", 
188
 "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree", 
189
 "IsGeneratorsOfSemigroup", "IsPreXModDomain", "IsPerm2DimensionalGroup", 
190
 "IsPreXMod", "IsXMod", "IsAutomorphismGroup2DimensionalGroup" ]
191

192

193
194
2.2-2 SubXMod
195
196
SubXMod( X0, src, rng )  operation
197
TrivialSubXMod( X0 )  attribute
198
NormalSubXMods( X0 )  attribute
199
200
With the standard crossed module constructors listed above as building
201
blocks, sub-crossed modules, normal sub-crossed modules mathcalN ⊲ mathcalX,
202
and also quotients mathcalX/mathcalN may be constructed. A sub-crossed
203
module mathcalS = (δ : N -> M) is normal in mathcalX = (∂ : S -> R) if
204
205
 N,M are normal subgroups of S,R respectively,
206
207
 δ is the restriction of ∂,
208
209
 n^r ∈ N for all n ∈ N,~r ∈ R,
210
211
 (s^-1)^ms ∈ N for all m ∈ M,~s ∈ S.
212
213
These conditions ensure that M ⋉ N is normal in the semidirect product R ⋉
214
S. (Note that ⟨ s,m ⟩ = (s^-1)^ms is a displacement: see Displacement
215
(4.1-3).)
216
217
A method for IsNormal for precrossed modules is provided. See section 4.1
218
for factor crossed modules and their natural morphisms.
219
220
The five normal subcrossed modules of X4 found in the following example are
221
[id,id], [k4,k4], [k4,a4], [a4,a4] and X4 itself.
222
223
 Example 
224

225
gap> s4 := Group( (1,2), (2,3), (3,4) );; 
226
gap> a4 := Subgroup( s4, [ (1,2,3), (2,3,4) ] );; 
227
gap> k4 := Subgroup( a4, [ (1,2)(3,4), (1,3)(2,4) ] );; 
228
gap> SetName(s4,"s4"); SetName(a4,"a4"); SetName(k4,"k4"); 
229
gap> X4 := XModByNormalSubgroup( s4, a4 );
230
[a4->s4]
231
gap> Y4 := SubXMod( X4, k4, a4 ); 
232
[k4->a4]
233
gap> IsNormal(X4,Y4);
234
true
235
gap> NX4 := NormalSubXMods( X4 );;
236
gap> Length( NX4 ); 
237
5
238

239

240
241
242
2.3 Pre-crossed modules
243
244
2.3-1 PreXModByBoundaryAndAction
245
246
PreXModByBoundaryAndAction( bdy, act )  operation
247
SubPreXMod( X0, src, rng )  operation
248
249
If axiom XMod 2 is not satisfied, the corresponding structure is known as a
250
pre-crossed module.
251
252
 Example 
253

254
gap> b1 := (11,12,13,14,15,16,17,18);; b2 := (12,18)(13,17)(14,16);;
255
gap> d16 := Group( b1, b2 );;
256
gap> sk4 := Subgroup( d16, [ b1^4, b2 ] );;
257
gap> SetName( d16, "d16" ); SetName( sk4, "sk4" );
258
gap> bdy16 := GroupHomomorphismByImages( d16, sk4, [b1,b2], [b1^4,b2] );;
259
gap> aut1 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1^5,b2] );;
260
gap> aut2 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1,b2^4*b2] );;
261
gap> aut16 := Group( [ aut1, aut2 ] );;
262
gap> act16 := GroupHomomorphismByImages( sk4, aut16, [b1^4,b2], [aut1,aut2] );;
263
gap> P16 := PreXModByBoundaryAndAction( bdy16, act16 );
264
[d16->sk4]
265
gap> IsXMod(P16);
266
false
267

268

269
270
2.3-2 PeifferSubgroup
271
272
PeifferSubgroup( X0 )  attribute
273
XModByPeifferQuotient( prexmod )  attribute
274
275
The Peiffer subgroup P of a pre-crossed module mathcal X is the subgroup of
276
ker(∂) generated by Peiffer commutators
277
278
279
\lfloor s_1,s_2 \rfloor ~=~ (s_1^{-1})^{\partial s_2}~s_2^{-1}~s_1~s_2 ~=~
280
\langle \partial s_2, s_1 \rangle\ [s_1,s_2]~.
281
282

283
284
Then mathcalP = (0 : P -> {1_R}) is a normal sub-pre-crossed module of
285
mathcalX and mathcalX/mathcalP = (∂ : S/P -> R) is a crossed module.
286
287
In the following example the Peiffer subgroup is cyclic of size 4.
288
289
 Example 
290

291
gap> P := PeifferSubgroup( P16 );
292
Group( [ (11,15)(12,16)(13,17)(14,18), (11,17,15,13)(12,18,16,14) ] )
293
gap> X16 := XModByPeifferQuotient( P16 );
294
Peiffer([d16->sk4])
295
gap> Display( X16 );
296
Crossed module Peiffer([d16->sk4]) :-
297
: Source group has generators:
298
 [ f1, f2 ]
299
: Range group has generators:
300
 [ (11,15)(12,16)(13,17)(14,18), (12,18)(13,17)(14,16) ]
301
: Boundary homomorphism maps source generators to:
302
 [ (12,18)(13,17)(14,16), (11,15)(12,16)(13,17)(14,18) ]
303
 The automorphism group is trivial
304
gap> iso16 := IsomorphismPermGroup( Source( X16 ) );;
305
gap> S16 := Image( iso16 );
306
Group([ (1,2), (3,4) ]) 
307

308

309
310
311
2.4 Cat1-groups and pre-cat1-groups
312
313
In [Lod82], Loday reformulated the notion of a crossed module as a
314
cat1-group, namely a group G with a pair of endomorphisms t,h : G -> G
315
having a common image R and satisfying certain axioms. We find it
316
computationally convenient to define a cat1-group mathcalC = (e;t,h : G -> R
317
) as having source group G, range group R, and three homomorphisms: two
318
surjections t,h : G -> R and an embedding e : R -> G satisfying:
319
320
321
{\bf Cat\ 1} : ~t \circ e ~=~ h \circ e = {\rm id}_R, \qquad {\bf Cat\ 2} :
322
~[\ker t, \ker h] ~=~ \{ 1_G \}.
323
324

325
326
It follows that t ∘ e ∘ h = h,~ h ∘ e ∘ t = t,~ t ∘ e ∘ t = t~ and ~h ∘ e ∘
327
h = h. (See section 2.5 for the case when t,h are endomorphisms.)
328
329
2.4-1 Cat1Group
330
331
Cat1Group( args )  function
332
PreCat1Group( args )  function
333
PreCat1GroupByTailHeadEmbedding( t, h, e )  operation
334
PreCat1GroupByEndomorphisms( t, h )  operation
335
336
The global functions Cat1Group and PreCat1Group can be called in various
337
ways.
338
339
 as Cat1Group(t,h,e); when t,h,e are three homomorphisms, which is
340
equivalent to PreCat1GroupByTailHeadEmbedding(t,h,e);
341
342
 as Cat1Group(t,h); when t,h are two endomorphisms, which is equivalent
343
to PreCat1GroupByEndomorphisms(t,h);
344
345
 as Cat1Group(t); when t=h is an endomorphism, which is equivalent to
346
PreCat1GroupByEndomorphisms(t,t);
347
348
 as Cat1Group(t,e); when t=h and e are homomorphisms, which is
349
equivalent to PreCat1GroupByTailHeadEmbedding(t,t,e);
350
351
 as Cat1Group(i,j,k); when i,j,k are integers, which is equivalent to
352
Cat1Select(i,j,k); as described in section 2.6.
353
354
 Example 
355

356
gap> g18gens := [ (1,2,3), (4,5,6), (2,3)(5,6) ];; 
357
gap> s3agens := [ (7,8,9), (8,9) ];; 
358
gap> g18 := Group( g18gens );; SetName( g18, "g18" ); 
359
gap> s3a := Group( s3agens );; SetName( s3a, "s3a" );
360
gap> t1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(),(8,9)]); 
361
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]
362
gap> h1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(7,8,9),(8,9)]);
363
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]
364
gap> e1 := GroupHomomorphismByImages(s3a,g18,s3agens,[(1,2,3),(2,3)(5,6)]); 
365
[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]
366
gap> C18 := Cat1Group( t1, h1, e1 );
367
[g18=>s3a]
368

369

370
371
2.4-2 Source
372
373
Source( C )  attribute
374
Range( C )  attribute
375
TailMap( C )  attribute
376
HeadMap( C )  attribute
377
RangeEmbedding( C )  attribute
378
KernelEmbedding( C )  attribute
379
Boundary( C )  attribute
380
Name( C )  attribute
381
Size( C )  attribute
382
383
These are the attributes of a cat1-group mathcalC in this implementation.
384
385
The maps t,h are often referred to as the source and target, but we choose
386
to call them the tail and head of mathcalC, because source is the GAP term
387
for the domain of a function. The RangeEmbedding is the embedding of R in G,
388
the KernelEmbedding is the inclusion of the kernel of t in G, and the
389
Boundary is the restriction of h to the kernel of t. It is frequently the
390
case that t=h, but not in the example C18 above.
391
392
 Example 
393

394
gap> Source( C18 );
395
g18
396
gap> Range( C18 );
397
s3a
398
gap> TailMap( C18 );
399
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]
400
gap> HeadMap( C18 );
401
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]
402
gap> RangeEmbedding( C18 );
403
[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]
404
gap> Kernel( C18 );
405
Group([ (4,5,6) ])
406
gap> KernelEmbedding( C18 );
407
[ (4,5,6) ] -> [ (4,5,6) ]
408
gap> Name( C18 );
409
"[g18=>s3a]"
410
gap> Size( C18 );
411
[ 18, 6 ]
412
gap> StructureDescription( C18 );
413
[ "(C3 x C3) : C2", "S3" ]
414

415

416
417
2.4-3 DiagonalCat1Group
418
419
DiagonalCat1Group( gen1 )  operation
420
PreCat1GroupByNormalSubgroup( G, N )  operation
421
Cat1GroupByPeifferQuotient( P )  operation
422
ReverseCat1Group( C0 )  attribute
423
424
These are some more constructors for cat1-groups. The following listing
425
shows an example of a permutation cat1-group of size [576,24] with source
426
group S_4 × S_4, range group a third S_4, and t ≠ h. A similar example may
427
be reproduced using the command C := DiagonalCat1Group([(1,2,3,4),(3,4)]);.
428
429
 Example 
430

431
gap> G4 := Group( (1,2,3,4), (3,4), (5,6,7,8), (7,8) );; 
432
gap> R4 := Group( (9,10,11,12), (11,12) );;
433
gap> SetName( G4, "s4s4" ); SetName( R4, "s4d" ); 
434
gap> G4gens := GeneratorsOfGroup( G4 );; 
435
gap> R4gens := GeneratorsOfGroup( R4 );; 
436
gap> t := GroupHomomorphismByImages( G4, R4, G4gens, 
437
>  Concatenation( R4gens, [ (), () ] ) );; 
438
gap> h := GroupHomomorphismByImages( G4, R4, G4gens, 
439
>  Concatenation( [ (), () ], R4gens ) );; 
440
gap> e := GroupHomomorphismByImages( R4, G4, R4gens, 
441
>  [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ] );; 
442
gap> C4 := PreCat1GroupByTailHeadEmbedding( t, h, e );; 
443
gap> Display(C4);
444
Cat1-group [s4s4=>s4d] :- 
445
: Source group s4s4 has generators:
446
 [ (1,2,3,4), (3,4), (5,6,7,8), (7,8) ]
447
: Range group s4d has generators:
448
 [ ( 9,10,11,12), (11,12) ]
449
: tail homomorphism maps source generators to:
450
 [ ( 9,10,11,12), (11,12), (), () ]
451
: head homomorphism maps source generators to:
452
 [ (), (), ( 9,10,11,12), (11,12) ]
453
: range embedding maps range generators to:
454
 [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ]
455
: kernel has generators:
456
 [ (5,6,7,8), (7,8) ]
457
: boundary homomorphism maps generators of kernel to:
458
 [ ( 9,10,11,12), (11,12) ]
459
: kernel embedding maps generators of kernel to:
460
 [ (5,6,7,8), (7,8) ]
461

462

463
464
465
2.5 Properties of cat1-groups and pre-cat1-groups
466
467
Many of the properties listed in section 2.2 apply to pre-cat1-groups and to
468
cat1-groups since these are also 2d-groups. There are also more specific
469
properties.
470
471
2.5-1 IsCat1Group
472
473
IsCat1Group( C0 )  property
474
IsPreXCat1Group( C0 )  property
475
IsIdentityCat1Group( C0 )  property
476
IsEndomorphismPreCat1Group( C0 )  property
477
EndomorphismPreCat1Group( C0 )  attribute
478
479
IsIdentityCat1Group(C0) is true when the head and tail maps of C0 are
480
identity mappings. IsEndomorphismPreCat1Group(C0) is true when the range of
481
C0 is a subgroup of the source. When this is not the case, replacing t,h,e
482
by t*e,h*e and the inclusion mapping of the image of e gives an isomorphic
483
cat1-group for which IsEndomorphismPreCat1Group is true.
484
485
 Example 
486

487
gap> G2 := SmallGroup( 288, 956 ); SetName( G2, "G2" );
488
<pc group of size 288 with 7 generators>
489
gap> d12 := DihedralGroup( 12 ); SetName( d12, "d12" );
490
<pc group of size 12 with 3 generators>
491
gap> a1 := d12.1;; a2 := d12.2;; a3 := d12.3;; a0 := One( d12 );;
492
gap> gensG2 := GeneratorsOfGroup( G2 );;
493
gap> t2 := GroupHomomorphismByImages( G2, d12, gensG2,
494
>  [ a0, a1*a3, a2*a3, a0, a0, a3, a0 ] );;
495
gap> h2 := GroupHomomorphismByImages( G2, d12, gensG2,
496
>  [ a1*a2*a3, a0, a0, a2*a3, a0, a0, a3^2 ] );; 
497
gap> e2 := GroupHomomorphismByImages( d12, G2, [a1,a2,a3],
498
>  [ G2.1*G2.2*G2.4*G2.6^2, G2.3*G2.4*G2.6^2*G2.7, G2.6*G2.7^2 ] );
499
[ f1, f2, f3 ] -> [ f1*f2*f4*f6^2, f3*f4*f6^2*f7, f6*f7^2 ]
500
gap> C2 := PreCat1GroupByTailHeadEmbedding( t2, h2, e2 );
501
[G2=>d12]
502
gap> IsCat1Group( C2 );
503
true
504
gap> KnownPropertiesOfObject( C2 );
505
[ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree", 
506
 "IsGeneratorsOfSemigroup", "IsPreCat1Domain", "IsPerm2DimensionalGroup", 
507
 "IsPreCat1Group", "IsCat1Group", "IsEndomorphismPreCat1Group" ]
508
gap> IsEndomorphismPreCat1Group( C2 );
509
false
510
gap> EC4 := EndomorphismPreCat1Group( C4 );
511
[s4s4=>Group( [ (1,2,3,4)(5,6,7,8), (3,4)(7,8), (), () ] )]
512

513

514
515
2.5-2 Cat1GroupOfXMod
516
517
Cat1GroupOfXMod( X0 )  attribute
518
XModOfCat1Group( C0 )  attribute
519
PreCat1GroupOfPreXMod( P0 )  attribute
520
PreXModOfPreCat1Group( P0 )  attribute
521
522
The category of crossed modules is equivalent to the category of
523
cat1-groups, and the functors between these two categories may be described
524
as follows. Starting with the crossed module mathcalX = (∂ : S -> R) the
525
group G is defined as the semidirect product G = R ⋉ S using the action from
526
mathcalX, with multiplication rule
527
528
529
(r_1,s_1)(r_2,s_2) ~=~ (r_1r_2,{s_1}^{r_2}s_2).
530
531

532
533
The structural morphisms are given by
534
535
536
t(r,s) = r, \quad h(r,s) = r (\partial s), \quad er = (r,1).
537
538

539
540
On the other hand, starting with a cat1-group mathcalC = (e;t,h : G -> R),
541
we define S = ker t, the range R is unchanged, and ∂ = h∣_S. The action of R
542
on S is conjugation in G via the embedding of R in G.
543
544
 Example 
545

546
gap> X2 := XModOfCat1Group( C2 );;
547
gap> Display( X2 );
548

549
Crossed module X([G2=>d12]) :- 
550
: Source group has generators:
551
 [ f1, f4, f5, f7 ]
552
: Range group d12 has generators:
553
 [ f1, f2, f3 ]
554
: Boundary homomorphism maps source generators to:
555
 [ f1*f2*f3, f2*f3, <identity> of ..., f3^2 ]
556
: Action homomorphism maps range generators to automorphisms:
557
 f1 --> { source gens --> [ f1*f5, f4*f5, f5, f7^2 ] }
558
 f2 --> { source gens --> [ f1*f5*f7^2, f4, f5, f7 ] }
559
 f3 --> { source gens --> [ f1*f7, f4, f5, f7 ] }
560
 These 3 automorphisms generate the group of automorphisms.
561
: associated cat1-group is [G2=>d12]
562

563
gap> StructureDescription(X2);
564
[ "D24", "D12" ]
565

566

567

568
569
570
2.6 Selection of a small cat1-group
571
572
The Cat1Group function may also be used to select a cat1-group from a data
573
file. All cat1-structures on groups of size up to 70 (ordered according to
574
the GAP 4 numbering of small groups) are stored in a list in file
575
cat1data.g. Global variables CAT1_LIST_MAX_SIZE := 70 and
576
CAT1_LIST_CLASS_SIZES are also stored. The data is read into the list
577
CAT1_LIST only when this function is called.
578
579
2.6-1 Cat1Select
580
581
Cat1Select( size, gpnum, num )  attribute
582
583
The function Cat1Select may be used in three ways. Cat1Select( size )
584
returns the names of the groups with this size, while Cat1Select( size,
585
gpnum ) prints a list of cat1-structures for this chosen group. Cat1Select(
586
size, gpnum, num ) returns the chosen cat1-group.
587
588
The example below is the first case in which t ≠ h and the associated
589
conjugation crossed module is given by the normal subgroup c3 of s3.
590
591
 Example 
592

593
gap> ## check the number of groups of size 18
594
gap> L18 := Cat1Select( 18 ); 
595
Usage: Cat1Select( size, gpnum, num );
596
[ "D18", "C18", "C3 x S3", "(C3 x C3) : C2", "C6 x C3" ]
597
gap> ## check the number of cat1-structures on the fourth of these
598
gap> Cat1Select( 18, 4 );
599
Usage: Cat1Select( size, gpnum, num );
600
There are 4 cat1-structures for the group (C3 x C3) : C2.
601
Using small generating set [ f1, f2, f2*f3 ] for source of homs.
602
[ [range gens], [tail genimages], [head genimages] ] :-
603
(1) [ [ f1 ], [ f1, <identity> of ..., <identity> of ... ], 
604
 [ f1, <identity> of ..., <identity> of ... ] ]
605
(2) [ [ f1, f3 ], [ f1, <identity> of ..., f3 ], 
606
 [ f1, <identity> of ..., f3 ] ]
607
(3) [ [ f1, f3 ], [ f1, <identity> of ..., f3 ], 
608
 [ f1, f3^2, <identity> of ... ] ]
609
(4) [ [ f1, f2, f2*f3 ], tail = head = identity mapping ]
610
4
611
gap> ## select the third of these cat1-structures 
612
gap> C18 := Cat1Group( 18, 4, 3 );
613
[(C3 x C3) : C2=>Group( [ f1, <identity> of ..., f3 ] )]
614
gap> ## convert from a pc-cat1-group to a permutation cat1-group
615
gap> iso18 := IsomorphismPermObject( C18 );;
616
gap> PC18 := Image( iso18 );;
617
gap> Display( PC18 );
618
Cat1-group :- 
619
: Source group has generators:
620
 [ (2,3)(5,6), (4,5,6), (1,2,3) ]
621
: Range group has generators:
622
 [ (2,3), (), (1,2,3) ]
623
: tail homomorphism maps source generators to:
624
 [ (2,3), (), (1,2,3) ]
625
: head homomorphism maps source generators to:
626
 [ (2,3), (1,3,2), (1,2,3) ]
627
: range embedding maps range generators to:
628
 [ (2,3)(5,6), (), (1,2,3) ]
629
: kernel has generators:
630
 [ (4,5,6) ]
631
: boundary homomorphism maps generators of kernel to:
632
 [ (1,3,2) ]
633
: kernel embedding maps generators of kernel to:
634
 [ (4,5,6) ]
635
gap> convert the result to the associated permutation crossed module 
636
gap> X18 := XModOfCat1Group( PC18 );; 
637
gap> Display( X18 ); 
638
Crossed module:- 
639
: Source group has generators:
640
 [ (4,5,6) ]
641
: Range group has generators:
642
 [ (2,3), (), (1,2,3) ]
643
: Boundary homomorphism maps source generators to:
644
 [ (1,3,2) ]
645
: Action homomorphism maps range generators to automorphisms:
646
 (2,3) --> { source gens --> [ (4,6,5) ] }
647
 () --> { source gens --> [ (4,5,6) ] }
648
 (1,2,3) --> { source gens --> [ (4,5,6) ] }
649
 These 3 automorphisms generate the group of automorphisms.
650
: associated cat1-group is [..=>..]
651

652

653
654
2.6-2 AllCat1DataGroupsBasic
655
656
AllCat1DataGroupsBasic( gp )  operation
657
658
For a group G of size greater than 70 which is reasonably straightforward
659
this function may be used to construct a list of all cat1-group structures
660
on G. The operation also attempts to write output to a file in the folder
661
xmod/lib. (Other operations in the file cat1data.gi have been used to deal
662
with the more complicated groups of size up to 70, but these are not
663
described here.)
664
665
Van Luyen Le has a more efficient algorithm, extending the data up to groups
666
of size 171, which is expected to appear in a future release of HAP.
667
668
 Example 
669

670
gap> gp := SmallGroup( 102, 2 ); 
671
<pc group of size 102 with 3 generators>
672
gap> StructureDescription( gp ); 
673
"C3 x D34"
674
gap> all := AllCat1DataGroupsBasic( gp );
675
#I Edit last line of .../xmod/lib/nn.kk.out to end with ] ] ] ] ]
676
[ [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., <identity> of ... 
677
 ] )], [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, <identity> of ... ] )], 
678
 [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., f3 ] )], 
679
 [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, f3 ] )] ]
680

681

682
683
684
2.7 More functions for crossed modules and cat1-groups
685
686
Chapter 4 contains functions for quotient crossed modules; centre of a
687
crossed module; commutator and derived subcrossed modules; etc.
688
689
Here we mention two functions for groups which have been extended to the
690
two-dimensional case.
691
692
2.7-1 IdGroup
693
694
IdGroup( 2DimensionalGroup )  operation
695
StructureDescription( 2DimensionalGroup )  operation
696
697
These functions return two-element lists formed by applying the function to
698
the source and range of the 2d-group.
699
700
 Example 
701

702
gap> IdGroup( X2 );
703
[ [ 24, 6 ], [ 12, 4 ] ]
704
gap> StructureDescription( C2 );
705
[ "(S3 x D24) : C2", "D12" ]
706

707

708
709
710