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
<!-- -->
3
<!-- gp2obj.xml XMod documentation Chris Wensley -->
4
<!-- & Murat Alp -->
5
<!-- Copyright (C) 2001-2017, Chris Wensley et al, -->
6
<!-- School of Computer Science, Bangor University, U.K. -->
7
<!-- -->
8
<!-- ------------------------------------------------------------------- -->
9
10
<?xml version="1.0" encoding="UTF-8"?>
11
12
<Chapter Label="chap-gp2obj">
13
14
<Heading>2d-groups : crossed modules and cat1-groups</Heading>
15
16
<Index>2d-domain</Index>
17
<Index>2d-group</Index>
18
The term <E>2d-group</E> refers to a set of equivalent categories
19
of which the most common are the categories of
20
<E>crossed modules</E>; <E>cat1-groups</E>; and <E>group-groupoids</E>,
21
all of which involve a pair of groups.
22
23
<Section Label="sect-constructions">
24
<Heading>Constructions for crossed modules</Heading>
25
26
<Index>crossed module</Index>
27
A crossed module (of groups) <M>\mathcal{X} = (\partial : S \to R )</M>
28
consists of a group homomorphism <M>\partial </M>,
29
called the <E>boundary</E> of <M>\mathcal{X}</M>,
30
with <E>source</E> <M>S</M> and <E>range</E> <M>R</M>.
31
The group <M>R</M> acts on itself by conjugation, and on <M>S</M> by an action
32
<M>\alpha : R \to {\rm Aut}(S)</M> such that,
33
for all <M>s,s_1,s_2 \in S</M> and <M>r \in R</M>,
34
<Display>
35
{\bf XMod\ 1} : \partial(s^r)
36
= r^{-1} (\partial s) r
37
= (\partial s)^r,
38
\qquad
39
{\bf XMod\ 2} : s_1^{\partial s_2}
40
= s_2^{-1}s_1 s_2
41
= {s_1}^{s_2}.
42
</Display>
43
When only the first of these axioms is satisfied, the resulting structure is
44
a <E>pre-crossed module</E>
45
(see section <Ref Sect="sect-precrossed-modules" />).
46
(Much of the literature on crossed modules uses left actions,
47
but we have chosen to use right actions in this package
48
since that is the standard choice for group actions in &GAP;.)
49
<P/>
50
The kernel of <M>\partial</M> is abelian.
51
<P/>
52
There are a variety of constructors for crossed modules:
53
54
<ManSection>
55
<Func Name="XMod"
56
Arg="args" />
57
<Oper Name="XModByBoundaryAndAction"
58
Arg="bdy act" />
59
<Oper Name="XModByTrivialAction"
60
Arg="bdy" />
61
<Oper Name="XModByNormalSubgroup"
62
Arg="G N" />
63
<Oper Name="XModByCentralExtension"
64
Arg="bdy" />
65
<Oper Name="XModByAutomorphismGroup"
66
Arg="grp" />
67
<Oper Name="XModByInnerAutomorphismGroup"
68
Arg="grp" />
69
<Oper Name="XModByGroupOfAutomorphisms"
70
Arg="G A" />
71
<Oper Name="XModByAbelianModule"
72
Arg="abmod" />
73
<Oper Name="DirectProductOp"
74
Arg="L X1" />
75
<Description>
76
The global function <C>XMod</C> implements one of the following
77
standard constructions:
78
<List>
79
<Item>
80
A <E>trivial action crossed module</E> <M>(\partial : S \to R)</M>
81
has <M>s^r = s</M> for all <M>s \in S, \; r \in R</M>,
82
the source is abelian and the image lies in the centre of the range.
83
</Item>
84
<Item>
85
A <E>conjugation crossed module</E> is the inclusion of a normal subgroup
86
<M>S \unlhd R</M>, where <M>R</M> acts on <M>S</M> by conjugation.
87
</Item>
88
<Item>
89
A <E>central extension crossed module</E> has as boundary a surjection
90
<M>\partial : S \to R</M>, with central kernel,
91
where <M>r \in R</M> acts on <M>S</M> by conjugation
92
with <M>\partial^{-1}r</M>.
93
</Item>
94
<Item>
95
An <E>automorphism crossed module</E> has as range a subgroup <M>R</M>
96
of the automorphism group Aut<M>(S)</M> of <M>S</M>
97
which contains the inner automorphism group of <M>S</M>.
98
The boundary maps <M>s \in S</M> to the inner automorphism of <M>S</M>
99
by <M>s</M>.
100
</Item>
101
<Item>
102
A <E>crossed abelian module</E> has an abelian module as source
103
and the zero map as boundary.
104
</Item>
105
<Item>
106
The direct product <M>\mathcal{X}_{1} \times \mathcal{X}_{2}</M>
107
of two crossed modules has source <M>S_1 \times S_2</M>,
108
range <M>R_1 \times R_2</M> and boundary
109
<M>\partial_1 \times \partial_2</M>, with <M>R_1,\ R_2</M> acting
110
trivially on <M>S_2,\ S_1</M> respectively.
111
<P/>
112
Since <C>DirectProduct</C> is a global function which only accepts groups,
113
it is necessary to provide an "other method" for operation
114
<C>DirectProductOp</C> which, as usual, takes as parameters a list of
115
crossed modules, followed by the first of these:
116
<C>DirectProductOp([X1,X2],X1);</C>
117
</Item>
118
</List>
119
</Description>
120
</ManSection>
121
122
<ManSection>
123
<Attr Name="Source"
124
Arg="X0" />
125
<Attr Name="Range"
126
Arg="X0" />
127
<Attr Name="Boundary"
128
Arg="X0" />
129
<Attr Name="XModAction"
130
Arg="X0" />
131
<Description>
132
The following attributes are used in the construction of
133
a crossed module <C>X0</C>.
134
<List>
135
<Item>
136
<C>Source(X0)</C> and <C>Range(X0)</C> are the source <M>S</M>
137
and range <M>R</M> of <M>\partial</M>, the boundary <C>Boundary(X0)</C>;
138
</Item>
139
<Item>
140
<C>XModAction(X0)</C> is a homomorphism from <M>R</M>
141
to a group of automorphisms of <C>X0</C>.
142
</Item>
143
</List>
144
<Index>AutoGroup</Index>
145
(Up until version 2.63 there was an additional attribute <C>AutoGroup</C>,
146
the range of <C>XModAction(X0)</C>.)
147
</Description>
148
</ManSection>
149
150
<ManSection>
151
<Oper Name="ImageElmXModAction"
152
Arg="X0, s, r" />
153
<Description>
154
This function returns the element <M>s^r</M> given by <C>XModAction(X0)</C>.
155
</Description>
156
</ManSection>
157
158
<ManSection>
159
<Attr Name="Size"
160
Arg="X0" />
161
<Attr Name="Name"
162
Arg="X0" />
163
<Attr Name="IdGroup"
164
Arg="X0" />
165
<Attr Name="ExternalSetXMod"
166
Arg="X0" />
167
<Description>
168
More familiar attributes are <C>Name</C>, <C>Size</C> and <C>IdGroup</C>.
169
The name is formed by concatenating the names of the source and range
170
(if these exist).
171
<C>Size</C> and <C>IdGroup</C> return two-element lists.
172
<P/>
173
The <C>ExternalSetXMod</C> for a crossed module is the source group considered as a G-set of the range group using the crossed module action.
174
<P/>
175
<Index>display a 2d-group</Index>
176
The <C>Display</C> function is used to print details of 2d-groups.
177
</Description>
178
</ManSection>
179
180
In the simple example below, <Code>X1</Code> is an automorphism crossed module,
181
using a cyclic group of size five.
182
The <C>Print</C> statements at the end list the &GAP; representations,
183
properties and attributes of <Code>X1</Code>.
184
<P/>
185
<Example>
186
<![CDATA[
187
gap> c5 := Group( (5,6,7,8,9) );;
188
gap> SetName( c5, "c5" );
189
gap> X1 := XModByAutomorphismGroup( c5 );
190
[c5 -> PAut(c5)]
191
gap> Display( X1 );
192
Crossed module [c5 -> PAut(c5)] :-
193
: Source group c5 has generators:
194
[ (5,6,7,8,9) ]
195
: Range group PAut(c5) has generators:
196
[ (1,2,3,4) ]
197
: Boundary homomorphism maps source generators to:
198
[ () ]
199
: Action homomorphism maps range generators to automorphisms:
200
(1,2,3,4) --> { source gens --> [ (5,7,9,6,8) ] }
201
This automorphism generates the group of automorphisms.
202
gap> Size( X1 ); IdGroup( X1 );
203
[ 5, 4 ]
204
[ [ 5, 1 ], [ 4, 1 ] ]
205
gap> ext := ExternalSetXMod( X1 );
206
<xset:[ (), (5,6,7,8,9), (5,7,9,6,8), (5,8,6,9,7), (5,9,8,7,6) ]>
207
gap> Orbits( ext );
208
[ [ () ], [ (5,6,7,8,9), (5,7,9,6,8), (5,9,8,7,6), (5,8,6,9,7) ] ]
209
gap> ImageElmXModAction( X1, (5,6,7,8,9), (1,2,3,4) );
210
(5,7,9,6,8)
211
gap> RepresentationsOfObject( X1 );
212
[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ]
213
gap> KnownAttributesOfObject( X1);
214
[ "Name", "Size", "Range", "Source", "IdGroup", "Boundary", "XModAction",
215
"ExternalSetXMod" ]
216
]]>
217
</Example>
218
219
</Section>
220
221
222
<Section Label="sect-properties-xmod">
223
<Heading>Properties of crossed modules</Heading>
224
225
226
<Index>Is2DimensionalDomain</Index>
227
<Index>Is2DimensionalGroup</Index>
228
<Index>IsTrivialAction2DimensionalGroup</Index>
229
<Index>IsNormalSubgroup2DimensionalGroup</Index>
230
<Index>IsCentralExtension2DimensionalGroup</Index>
231
<Index>IsAutomorphismGroup2DimensionalGroup</Index>
232
<Index>IsAbelianModule2DimensionalGroup</Index>
233
234
The underlying category structures for the objects constructed in this
235
chapter follow the sequence <C>Is2DimensionalDomain</C>;
236
<C>Is2DimensionalMagma</C>; <C>Is2DimensionalMagmaWithOne</C>;
237
<C>Is2DimensionalMagmaWithInverses</C>,
238
mirroring the situation for (one-dimensional) groups.
239
From these we construct <C>Is2DimensionalSemigroup</C>,
240
<C>Is2DimensionalMonoid</C> and <C>Is2DimensionalGroup</C>.
241
<P/>
242
There are then a variety of properties associated with crossed modules,
243
starting with <C>IsPreXMod</C> and <C>IsXMod</C>.
244
<P/>
245
<ManSection>
246
<Prop Name="IsXMod"
247
Arg="X0" />
248
<Prop Name="IsPreXMod"
249
Arg="X0" />
250
<Prop Name="IsPerm2DimensionalGroup"
251
Arg="X0" />
252
<Prop Name="IsPc2DimensionalGroup"
253
Arg="X0" />
254
<Prop Name="IsFp2DimensionalGroup"
255
Arg="X0" />
256
<Description>
257
A structure which has <C>IsPerm2DimensionalGroup</C> is a precrossed module
258
or a pre-cat1-group (see section <Ref Sect="sect-cat1" />)
259
whose source and range are both permutation groups.
260
The properties <C>IsPc2DimensionalGroup</C>, <C>IsFp2DimensionalGroup</C>
261
are defined similarly.
262
In the example below we see that <Code>X1</Code> has
263
<C>IsPreXMod</C>, <C>IsXMod</C> and <C>IsPerm2DimensionalGroup</C>.
264
There are also properties corresponding to the various construction methods
265
listed in section <Ref Sect="sect-constructions" />:
266
<C>IsTrivialAction2DimensionalGroup</C>;
267
<C>IsNormalSubgroup2DimensionalGroup</C>;
268
<C>IsCentralExtension2DimensionalGroup</C>; <C>IsAutomorphismGroup2DimensionalGroup</C>;
269
<C>IsAbelianModule2DimensionalGroup</C>.
270
</Description>
271
</ManSection>
272
273
<Example>
274
<![CDATA[
275
gap> KnownPropertiesOfObject( X1 );
276
[ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite",
277
"CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",
278
"IsGeneratorsOfSemigroup", "IsPreXModDomain", "IsPerm2DimensionalGroup",
279
"IsPreXMod", "IsXMod", "IsAutomorphismGroup2DimensionalGroup" ]
280
]]>
281
</Example>
282
283
<Index>IsNormal for crossed modules</Index>
284
<ManSection>
285
<Oper Name="SubXMod"
286
Arg="X0 src rng" />
287
<Attr Name="TrivialSubXMod"
288
Arg="X0" />
289
<Attr Name="NormalSubXMods"
290
Arg="X0" />
291
<Description>
292
With the standard crossed module constructors listed above as building blocks,
293
sub-crossed modules, normal sub-crossed modules
294
<M>\mathcal{N} \lhd \mathcal{X}</M>,
295
and also quotients <M>\mathcal{X}/\mathcal{N}</M> may be constructed.
296
A sub-crossed module <M>\mathcal{S} = (\delta : N \to M)</M>
297
is <E>normal</E> in <M>\mathcal{X} = (\partial : S \to R)</M> if
298
<List>
299
<Item>
300
<M>N,M</M> are normal subgroups of <M>S,R</M> respectively,
301
</Item>
302
<Item>
303
<M>\delta</M> is the restriction of <M>\partial</M>,
304
</Item>
305
<Item>
306
<M>n^r \in N</M> for all <M>n \in N,~r \in R</M>,
307
</Item>
308
<Item>
309
<M>(s^{-1})^ms \in N</M> for all <M>m \in M,~s \in S</M>.
310
</Item>
311
</List>
312
These conditions ensure that <M>M \ltimes N</M> is normal in
313
the semidirect product <M>R \ltimes S</M>.
314
(Note that <M>\langle s,m \rangle = (s^{-1})^ms</M>
315
is a displacement: see <Ref Func="Displacement" />.)
316
<P/>
317
A method for <C>IsNormal</C> for precrossed modules is provided.
318
See section <Ref Sect="sect-more-xmod-ops"/> for factor crossed modules
319
and their natural morphisms.
320
<P/>
321
The five normal subcrossed modules of <C>X4</C> found in the following
322
example are <C>[id,id], [k4,k4], [k4,a4], [a4,a4]</C>
323
and <C>X4</C> itself.
324
</Description>
325
</ManSection>
326
<P/>
327
<Example>
328
<![CDATA[
329
gap> s4 := Group( (1,2), (2,3), (3,4) );;
330
gap> a4 := Subgroup( s4, [ (1,2,3), (2,3,4) ] );;
331
gap> k4 := Subgroup( a4, [ (1,2)(3,4), (1,3)(2,4) ] );;
332
gap> SetName(s4,"s4"); SetName(a4,"a4"); SetName(k4,"k4");
333
gap> X4 := XModByNormalSubgroup( s4, a4 );
334
[a4->s4]
335
gap> Y4 := SubXMod( X4, k4, a4 );
336
[k4->a4]
337
gap> IsNormal(X4,Y4);
338
true
339
gap> NX4 := NormalSubXMods( X4 );;
340
gap> Length( NX4 );
341
5
342
]]>
343
</Example>
344
345
</Section>
346
347
348
<Section Label="sect-precrossed-modules">
349
<Heading>Pre-crossed modules</Heading>
350
351
<Index>pre-crossed module</Index>
352
<ManSection>
353
<Oper Name="PreXModByBoundaryAndAction"
354
Arg="bdy act" />
355
<Oper Name="SubPreXMod"
356
Arg="X0 src rng" />
357
<Description>
358
If axiom <M>{\bf XMod\ 2}</M> is <E>not</E> satisfied,
359
the corresponding structure is known as a <E>pre-crossed module</E>.
360
</Description>
361
</ManSection>
362
<P/>
363
<Example>
364
<![CDATA[
365
gap> b1 := (11,12,13,14,15,16,17,18);; b2 := (12,18)(13,17)(14,16);;
366
gap> d16 := Group( b1, b2 );;
367
gap> sk4 := Subgroup( d16, [ b1^4, b2 ] );;
368
gap> SetName( d16, "d16" ); SetName( sk4, "sk4" );
369
gap> bdy16 := GroupHomomorphismByImages( d16, sk4, [b1,b2], [b1^4,b2] );;
370
gap> aut1 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1^5,b2] );;
371
gap> aut2 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1,b2^4*b2] );;
372
gap> aut16 := Group( [ aut1, aut2 ] );;
373
gap> act16 := GroupHomomorphismByImages( sk4, aut16, [b1^4,b2], [aut1,aut2] );;
374
gap> P16 := PreXModByBoundaryAndAction( bdy16, act16 );
375
[d16->sk4]
376
gap> IsXMod(P16);
377
false
378
]]>
379
</Example>
380
381
<Index>Peiffer subgroup</Index>
382
<ManSection>
383
<Attr Name="PeifferSubgroup"
384
Arg="X0" />
385
<Attr Name="XModByPeifferQuotient"
386
Arg="prexmod" />
387
<Description>
388
The <E>Peiffer subgroup</E> <M>P</M> of a pre-crossed module
389
<M>{\mathcal X}</M> is the subgroup of <M>{\rm ker}(\partial)</M>
390
generated by <E>Peiffer commutators</E>
391
<Display>
392
\lfloor s_1,s_2 \rfloor ~=~
393
(s_1^{-1})^{\partial s_2}~s_2^{-1}~s_1~s_2 ~=~
394
\langle \partial s_2, s_1 \rangle\ [s_1,s_2]~.
395
</Display>
396
Then <M>\mathcal{P} = (0 : P \to \{1_R\})</M>
397
is a normal sub-pre-crossed module of <M>\mathcal{X}</M>
398
and <M>\mathcal{X}/\mathcal{P} = (\partial : S/P \to R)</M>
399
is a crossed module.
400
<P/>
401
In the following example the Peiffer subgroup is cyclic of size <M>4</M>.
402
</Description>
403
</ManSection>
404
<P/>
405
<Example>
406
<![CDATA[
407
gap> P := PeifferSubgroup( P16 );
408
Group( [ (11,15)(12,16)(13,17)(14,18), (11,17,15,13)(12,18,16,14) ] )
409
gap> X16 := XModByPeifferQuotient( P16 );
410
Peiffer([d16->sk4])
411
gap> Display( X16 );
412
Crossed module Peiffer([d16->sk4]) :-
413
: Source group has generators:
414
[ f1, f2 ]
415
: Range group has generators:
416
[ (11,15)(12,16)(13,17)(14,18), (12,18)(13,17)(14,16) ]
417
: Boundary homomorphism maps source generators to:
418
[ (12,18)(13,17)(14,16), (11,15)(12,16)(13,17)(14,18) ]
419
The automorphism group is trivial
420
gap> iso16 := IsomorphismPermGroup( Source( X16 ) );;
421
gap> S16 := Image( iso16 );
422
Group([ (1,2), (3,4) ])
423
]]>
424
</Example>
425
426
</Section>
427
428
429
<Section Label="sect-cat1">
430
<Heading>Cat1-groups and pre-cat1-groups</Heading>
431
<Index>cat1-group</Index>
432
433
In <Cite Key="L1" />, Loday reformulated the notion of a
434
crossed module as a cat1-group,
435
namely a group <M>G</M> with a pair of endomorphisms <M>t,h : G \to G</M>
436
having a common image <M>R</M> and satisfying certain axioms.
437
We find it computationally convenient to define a cat1-group
438
<M>\mathcal{C} = (e;t,h : G \to R )</M> as having source group <M>G</M>,
439
range group <M>R</M>, and three homomorphisms: two surjections
440
<M>t,h : G \to R</M> and an embedding <M>e : R \to G</M> satisfying:
441
<Display>
442
{\bf Cat\ 1} : ~t \circ e ~=~ h \circ e = {\rm id}_R,
443
\qquad
444
{\bf Cat\ 2} : ~[\ker t, \ker h] ~=~ \{ 1_G \}.
445
</Display>
446
It follows that
447
<M>\;t \circ e \circ h = h,~ h \circ e \circ t = t,~
448
t \circ e \circ t = t~</M>
449
and <M>~h \circ e \circ h = h</M>.
450
(See section <Ref Sect="sect-properties-cat1"/> for the case when
451
<M>t,h</M> are endomorphisms.)
452
453
<ManSection Label="mansect-cat1">
454
<Func Name="Cat1Group"
455
Arg="args" />
456
<Func Name="PreCat1Group"
457
Arg="args" />
458
<Oper Name="PreCat1GroupByTailHeadEmbedding"
459
Arg="t h e" />
460
<Oper Name="PreCat1GroupByEndomorphisms"
461
Arg="t h" />
462
<Description>
463
The global functions <C>Cat1Group</C> and <C>PreCat1Group</C>
464
can be called in various ways.
465
<List>
466
<Item>
467
as <C>Cat1Group(t,h,e);</C> when <M>t,h,e</M> are three homomorphisms,
468
which is equivalent to <C>PreCat1GroupByTailHeadEmbedding(t,h,e);</C>
469
</Item>
470
<Item>
471
as <C>Cat1Group(t,h);</C> when <M>t,h</M> are two endomorphisms,
472
which is equivalent to <C>PreCat1GroupByEndomorphisms(t,h);</C>
473
</Item>
474
<Item>
475
as <C>Cat1Group(t);</C> when <M>t=h</M> is an endomorphism,
476
which is equivalent to <C>PreCat1GroupByEndomorphisms(t,t);</C>
477
</Item>
478
<Item>
479
as <C>Cat1Group(t,e);</C> when <M>t=h</M> and <M>e</M> are homomorphisms,
480
which is equivalent to <C>PreCat1GroupByTailHeadEmbedding(t,t,e);</C>
481
</Item>
482
<Item>
483
as <C>Cat1Group(i,j,k);</C> when <M>i,j,k</M> are integers,
484
which is equivalent to <C>Cat1Select(i,j,k);</C>
485
as described in section <Ref Sect="sect-cat1select"/>.
486
</Item>
487
</List>
488
</Description>
489
</ManSection>
490
<P/>
491
<Example>
492
<![CDATA[
493
gap> g18gens := [ (1,2,3), (4,5,6), (2,3)(5,6) ];;
494
gap> s3agens := [ (7,8,9), (8,9) ];;
495
gap> g18 := Group( g18gens );; SetName( g18, "g18" );
496
gap> s3a := Group( s3agens );; SetName( s3a, "s3a" );
497
gap> t1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(),(8,9)]);
498
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]
499
gap> h1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(7,8,9),(8,9)]);
500
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]
501
gap> e1 := GroupHomomorphismByImages(s3a,g18,s3agens,[(1,2,3),(2,3)(5,6)]);
502
[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]
503
gap> C18 := Cat1Group( t1, h1, e1 );
504
[g18=>s3a]
505
]]>
506
</Example>
507
508
<ManSection>
509
<Attr Name="Source"
510
Arg="C" />
511
<Attr Name="Range"
512
Arg="C" />
513
<Attr Name="TailMap"
514
Arg="C" />
515
<Attr Name="HeadMap"
516
Arg="C" />
517
<Attr Name="RangeEmbedding"
518
Arg="C" />
519
<Attr Name="KernelEmbedding"
520
Arg="C" />
521
<Attr Name="Boundary"
522
Arg="C" />
523
<Attr Name="Name"
524
Arg="C" />
525
<Attr Name="Size"
526
Arg="C" />
527
<Description>
528
These are the attributes of a cat1-group <M>\mathcal{C}</M>
529
in this implementation.
530
<P/>
531
The maps <M>t,h</M> are often referred to as the
532
<E>source</E> and <E>target</E>,
533
but we choose to call them the
534
<E>tail</E> and <E>head</E> of <M>\mathcal{C}</M>,
535
because <E>source</E> is the &GAP; term for the domain of a function.
536
The <C>RangeEmbedding</C> is the embedding of <C>R</C> in <C>G</C>,
537
the <C>KernelEmbedding</C> is the inclusion of
538
the kernel of <C>t</C> in <C>G</C>,
539
and the <C>Boundary</C> is the restriction of <C>h</C>
540
to the kernel of <C>t</C>.
541
It is frequently the case that <M>t=h</M>,
542
but not in the example <C>C18</C> above.
543
</Description>
544
</ManSection>
545
<Example>
546
<![CDATA[
547
gap> Source( C18 );
548
g18
549
gap> Range( C18 );
550
s3a
551
gap> TailMap( C18 );
552
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]
553
gap> HeadMap( C18 );
554
[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]
555
gap> RangeEmbedding( C18 );
556
[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]
557
gap> Kernel( C18 );
558
Group([ (4,5,6) ])
559
gap> KernelEmbedding( C18 );
560
[ (4,5,6) ] -> [ (4,5,6) ]
561
gap> Name( C18 );
562
"[g18=>s3a]"
563
gap> Size( C18 );
564
[ 18, 6 ]
565
gap> StructureDescription( C18 );
566
[ "(C3 x C3) : C2", "S3" ]
567
]]>
568
</Example>
569
570
<ManSection>
571
<Oper Name="DiagonalCat1Group"
572
Arg="gen1" />
573
<Oper Name="PreCat1GroupByNormalSubgroup"
574
Arg="G N" />
575
<Oper Name="Cat1GroupByPeifferQuotient"
576
Arg="P" />
577
<Attr Name="ReverseCat1Group"
578
Arg="C0" />
579
<Description>
580
These are some more constructors for cat1-groups.
581
The following listing shows an example of a permutation cat1-group
582
of size <M>[576,24]</M> with source group <M>S_4 \times S_4</M>,
583
range group a third <M>S_4</M>, and <M>t \neq h</M>.
584
A similar example may be reproduced using the command
585
<Code>C := DiagonalCat1Group([(1,2,3,4),(3,4)]);</Code>.
586
</Description>
587
</ManSection>
588
<P/>
589
<Example>
590
<![CDATA[
591
gap> G4 := Group( (1,2,3,4), (3,4), (5,6,7,8), (7,8) );;
592
gap> R4 := Group( (9,10,11,12), (11,12) );;
593
gap> SetName( G4, "s4s4" ); SetName( R4, "s4d" );
594
gap> G4gens := GeneratorsOfGroup( G4 );;
595
gap> R4gens := GeneratorsOfGroup( R4 );;
596
gap> t := GroupHomomorphismByImages( G4, R4, G4gens,
597
> Concatenation( R4gens, [ (), () ] ) );;
598
gap> h := GroupHomomorphismByImages( G4, R4, G4gens,
599
> Concatenation( [ (), () ], R4gens ) );;
600
gap> e := GroupHomomorphismByImages( R4, G4, R4gens,
601
> [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ] );;
602
gap> C4 := PreCat1GroupByTailHeadEmbedding( t, h, e );;
603
gap> Display(C4);
604
Cat1-group [s4s4=>s4d] :-
605
: Source group s4s4 has generators:
606
[ (1,2,3,4), (3,4), (5,6,7,8), (7,8) ]
607
: Range group s4d has generators:
608
[ ( 9,10,11,12), (11,12) ]
609
: tail homomorphism maps source generators to:
610
[ ( 9,10,11,12), (11,12), (), () ]
611
: head homomorphism maps source generators to:
612
[ (), (), ( 9,10,11,12), (11,12) ]
613
: range embedding maps range generators to:
614
[ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ]
615
: kernel has generators:
616
[ (5,6,7,8), (7,8) ]
617
: boundary homomorphism maps generators of kernel to:
618
[ ( 9,10,11,12), (11,12) ]
619
: kernel embedding maps generators of kernel to:
620
[ (5,6,7,8), (7,8) ]
621
]]>
622
</Example>
623
624
</Section>
625
626
<Section Label="sect-properties-cat1">
627
<Heading>Properties of cat1-groups and pre-cat1-groups</Heading>
628
629
Many of the properties listed in section <Ref Sect="sect-properties-xmod"/>
630
apply to pre-cat1-groups and to cat1-groups since these are also 2d-groups.
631
There are also more specific properties.
632
633
<ManSection>
634
<Prop Name="IsCat1Group"
635
Arg="C0" />
636
<Prop Name="IsPreXCat1Group"
637
Arg="C0" />
638
<Prop Name="IsIdentityCat1Group"
639
Arg="C0" />
640
<Prop Name="IsEndomorphismPreCat1Group"
641
Arg="C0" />
642
<Attr Name="EndomorphismPreCat1Group"
643
Arg="C0" />
644
<Description>
645
<C>IsIdentityCat1Group(C0)</C> is true when the head and tail maps of <C>C0</C>
646
are identity mappings.
647
<C>IsEndomorphismPreCat1Group(C0)</C> is true when the range of <C>C0</C>
648
is a subgroup of the source.
649
When this is not the case, replacing <M>t,h,e</M> by <M>t*e,h*e</M>
650
and the inclusion mapping of the image of <M>e</M> gives an isomorphic
651
cat1-group for which <C>IsEndomorphismPreCat1Group</C> is true.
652
</Description>
653
</ManSection>
654
<P/>
655
<Example>
656
<![CDATA[
657
gap> G2 := SmallGroup( 288, 956 ); SetName( G2, "G2" );
658
<pc group of size 288 with 7 generators>
659
gap> d12 := DihedralGroup( 12 ); SetName( d12, "d12" );
660
<pc group of size 12 with 3 generators>
661
gap> a1 := d12.1;; a2 := d12.2;; a3 := d12.3;; a0 := One( d12 );;
662
gap> gensG2 := GeneratorsOfGroup( G2 );;
663
gap> t2 := GroupHomomorphismByImages( G2, d12, gensG2,
664
> [ a0, a1*a3, a2*a3, a0, a0, a3, a0 ] );;
665
gap> h2 := GroupHomomorphismByImages( G2, d12, gensG2,
666
> [ a1*a2*a3, a0, a0, a2*a3, a0, a0, a3^2 ] );;
667
gap> e2 := GroupHomomorphismByImages( d12, G2, [a1,a2,a3],
668
> [ G2.1*G2.2*G2.4*G2.6^2, G2.3*G2.4*G2.6^2*G2.7, G2.6*G2.7^2 ] );
669
[ f1, f2, f3 ] -> [ f1*f2*f4*f6^2, f3*f4*f6^2*f7, f6*f7^2 ]
670
gap> C2 := PreCat1GroupByTailHeadEmbedding( t2, h2, e2 );
671
[G2=>d12]
672
gap> IsCat1Group( C2 );
673
true
674
gap> KnownPropertiesOfObject( C2 );
675
[ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",
676
"IsGeneratorsOfSemigroup", "IsPreCat1Domain", "IsPerm2DimensionalGroup",
677
"IsPreCat1Group", "IsCat1Group", "IsEndomorphismPreCat1Group" ]
678
gap> IsEndomorphismPreCat1Group( C2 );
679
false
680
gap> EC4 := EndomorphismPreCat1Group( C4 );
681
[s4s4=>Group( [ (1,2,3,4)(5,6,7,8), (3,4)(7,8), (), () ] )]
682
]]>
683
</Example>
684
685
686
687
<ManSection>
688
<Attr Name="Cat1GroupOfXMod"
689
Arg="X0" />
690
<Attr Name="XModOfCat1Group"
691
Arg="C0" />
692
<Attr Name="PreCat1GroupOfPreXMod"
693
Arg="P0" />
694
<Attr Name="PreXModOfPreCat1Group"
695
Arg="P0" />
696
<Description>
697
The category of crossed modules is equivalent to the category of cat1-groups,
698
and the functors between these two categories may be described as follows.
699
700
Starting with the crossed module
701
<M>\mathcal{X} = (\partial : S \to R)</M> the group <M>G</M> is defined
702
as the semidirect product <M>G = R \ltimes S</M>
703
using the action from <M>\mathcal{X}</M>,
704
with multiplication rule
705
<Display>
706
(r_1,s_1)(r_2,s_2) ~=~ (r_1r_2,{s_1}^{r_2}s_2).
707
</Display>
708
The structural morphisms are given by
709
<Display>
710
t(r,s) = r, \quad h(r,s) = r (\partial s), \quad er = (r,1).
711
</Display>
712
On the other hand, starting with a cat1-group
713
<M> \mathcal{C} = (e;t,h : G \to R)</M>, we define
714
<M> S = \ker t</M>, the range <M>R</M> is unchanged, and
715
<M> \partial = h\!\mid_S </M>.
716
The action of <M>R</M> on <M>S</M> is conjugation in <M>G</M> via the embedding
717
of <M>R</M> in <M>G</M>.
718
</Description>
719
</ManSection>
720
<P/>
721
<Example>
722
<![CDATA[
723
gap> X2 := XModOfCat1Group( C2 );;
724
gap> Display( X2 );
725
726
Crossed module X([G2=>d12]) :-
727
: Source group has generators:
728
[ f1, f4, f5, f7 ]
729
: Range group d12 has generators:
730
[ f1, f2, f3 ]
731
: Boundary homomorphism maps source generators to:
732
[ f1*f2*f3, f2*f3, <identity> of ..., f3^2 ]
733
: Action homomorphism maps range generators to automorphisms:
734
f1 --> { source gens --> [ f1*f5, f4*f5, f5, f7^2 ] }
735
f2 --> { source gens --> [ f1*f5*f7^2, f4, f5, f7 ] }
736
f3 --> { source gens --> [ f1*f7, f4, f5, f7 ] }
737
These 3 automorphisms generate the group of automorphisms.
738
: associated cat1-group is [G2=>d12]
739
740
gap> StructureDescription(X2);
741
[ "D24", "D12" ]
742
743
]]>
744
</Example>
745
</Section>
746
747
748
<Section Label="sect-cat1select">
749
<Heading>Selection of a small cat1-group</Heading>
750
<Index>selection of a small cat1-group</Index>
751
752
The <C>Cat1Group</C> function may also be used to select a cat1-group
753
from a data file.
754
All cat1-structures on groups of size up to <M>70</M>
755
(ordered according to the &GAP; 4 numbering of small groups)
756
are stored in a list in file <F>cat1data.g</F>.
757
Global variables <C>CAT1&uscore;LIST&uscore;MAX&uscore;SIZE := 70</C> and
758
<C>CAT1&uscore;LIST&uscore;CLASS&uscore;SIZES</C> are also stored.
759
The data is read into the list <C>CAT1&uscore;LIST</C>
760
only when this function is called.
761
762
<ManSection>
763
<Attr Name="Cat1Select"
764
Arg="size gpnum num" />
765
<Description>
766
The function <C>Cat1Select</C> may be used in three ways.
767
<C>Cat1Select( size )</C> returns the names of the groups with this size,
768
while <C>Cat1Select( size, gpnum )</C> prints a list of cat1-structures
769
for this chosen group.
770
<C>Cat1Select( size, gpnum, num )</C> returns the chosen cat1-group.
771
<P/>
772
The example below is the first case in which <M>t \neq h</M>
773
and the associated conjugation crossed module
774
is given by the normal subgroup <C>c3</C> of <C>s3</C>.
775
</Description>
776
</ManSection>
777
<P/>
778
<Example>
779
<![CDATA[
780
gap> ## check the number of groups of size 18
781
gap> L18 := Cat1Select( 18 );
782
Usage: Cat1Select( size, gpnum, num );
783
[ "D18", "C18", "C3 x S3", "(C3 x C3) : C2", "C6 x C3" ]
784
gap> ## check the number of cat1-structures on the fourth of these
785
gap> Cat1Select( 18, 4 );
786
Usage: Cat1Select( size, gpnum, num );
787
There are 4 cat1-structures for the group (C3 x C3) : C2.
788
Using small generating set [ f1, f2, f2*f3 ] for source of homs.
789
[ [range gens], [tail genimages], [head genimages] ] :-
790
(1) [ [ f1 ], [ f1, <identity> of ..., <identity> of ... ],
791
[ f1, <identity> of ..., <identity> of ... ] ]
792
(2) [ [ f1, f3 ], [ f1, <identity> of ..., f3 ],
793
[ f1, <identity> of ..., f3 ] ]
794
(3) [ [ f1, f3 ], [ f1, <identity> of ..., f3 ],
795
[ f1, f3^2, <identity> of ... ] ]
796
(4) [ [ f1, f2, f2*f3 ], tail = head = identity mapping ]
797
4
798
gap> ## select the third of these cat1-structures
799
gap> C18 := Cat1Group( 18, 4, 3 );
800
[(C3 x C3) : C2=>Group( [ f1, <identity> of ..., f3 ] )]
801
gap> ## convert from a pc-cat1-group to a permutation cat1-group
802
gap> iso18 := IsomorphismPermObject( C18 );;
803
gap> PC18 := Image( iso18 );;
804
gap> Display( PC18 );
805
Cat1-group :-
806
: Source group has generators:
807
[ (2,3)(5,6), (4,5,6), (1,2,3) ]
808
: Range group has generators:
809
[ (2,3), (), (1,2,3) ]
810
: tail homomorphism maps source generators to:
811
[ (2,3), (), (1,2,3) ]
812
: head homomorphism maps source generators to:
813
[ (2,3), (1,3,2), (1,2,3) ]
814
: range embedding maps range generators to:
815
[ (2,3)(5,6), (), (1,2,3) ]
816
: kernel has generators:
817
[ (4,5,6) ]
818
: boundary homomorphism maps generators of kernel to:
819
[ (1,3,2) ]
820
: kernel embedding maps generators of kernel to:
821
[ (4,5,6) ]
822
gap> convert the result to the associated permutation crossed module
823
gap> X18 := XModOfCat1Group( PC18 );;
824
gap> Display( X18 );
825
Crossed module:-
826
: Source group has generators:
827
[ (4,5,6) ]
828
: Range group has generators:
829
[ (2,3), (), (1,2,3) ]
830
: Boundary homomorphism maps source generators to:
831
[ (1,3,2) ]
832
: Action homomorphism maps range generators to automorphisms:
833
(2,3) --> { source gens --> [ (4,6,5) ] }
834
() --> { source gens --> [ (4,5,6) ] }
835
(1,2,3) --> { source gens --> [ (4,5,6) ] }
836
These 3 automorphisms generate the group of automorphisms.
837
: associated cat1-group is [..=>..]
838
]]>
839
</Example>
840
841
<ManSection>
842
<Oper Name="AllCat1DataGroupsBasic"
843
Arg="gp" />
844
<Description>
845
For a group <M>G</M> of size greater than <M>70</M> which is reasonably
846
straightforward this function may be used to construct a list of all
847
cat1-group structures on <M>G</M>.
848
The operation also attempts to write output to a file in the folder
849
<F>xmod/lib</F>.
850
(Other operations in the file <F>cat1data.gi</F> have been used to deal
851
with the more complicated groups of size up to <M>70</M>,
852
but these are not described here.)
853
<P/>
854
Van Luyen Le has a more efficient algorithm, extending the data
855
up to groups of size 171, which is expected to appear in a future
856
release of <Package>HAP</Package>.
857
</Description>
858
</ManSection>
859
<P/>
860
<Example>
861
<![CDATA[
862
gap> gp := SmallGroup( 102, 2 );
863
<pc group of size 102 with 3 generators>
864
gap> StructureDescription( gp );
865
"C3 x D34"
866
gap> all := AllCat1DataGroupsBasic( gp );
867
#I Edit last line of .../xmod/lib/nn.kk.out to end with ] ] ] ] ]
868
[ [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., <identity> of ...
869
] )], [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, <identity> of ... ] )],
870
[Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., f3 ] )],
871
[Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, f3 ] )] ]
872
]]>
873
</Example>
874
875
</Section>
876
877
878
<Section Label="sect-extra-fns">
879
<Heading>More functions for crossed modules and cat1-groups</Heading>
880
881
Chapter <Ref Chap="chap-isclnc" /> contains functions for quotient
882
crossed modules; centre of a crossed module;
883
commutator and derived subcrossed modules; etc.
884
<P/>
885
Here we mention two functions for groups which have been extended to the
886
two-dimensional case.
887
<ManSection>
888
<Oper Name="IdGroup"
889
Arg="2DimensionalGroup" />
890
<Oper Name="StructureDescription"
891
Arg="2DimensionalGroup" />
892
<Description>
893
These functions return two-element lists formed by applying the function
894
to the source and range of the 2d-group.
895
</Description>
896
</ManSection>
897
<P/>
898
<Example>
899
<![CDATA[
900
gap> IdGroup( X2 );
901
[ [ 24, 6 ], [ 12, 4 ] ]
902
gap> StructureDescription( C2 );
903
[ "(S3 x D24) : C2", "D12" ]
904
]]>
905
</Example>
906
907
908
</Section>
909
910
911
912
913
</Chapter>
914
915