1#############################################################################
2##
3#W  gp2obj.tst                    XMOD test file                Chris Wensley
4#W                                                                & Murat Alp
5#Y  Copyright (C) 2001-2019, Chris Wensley et al,
6#Y  School of Computer Science, Bangor University, U.K.
7##
8gap> START_TEST( "XMod package: gp2obj.tst" );
9gap> saved_infolevel_xmod := InfoLevel( InfoXMod );;
10gap> SetInfoLevel( InfoXMod, 0 );
11gap> saved_infolevel_groupoids := InfoLevel( InfoGroupoids );;
12gap> SetInfoLevel( InfoGroupoids, 0 );;
13
14## Chapter 2,  Section 2.1.2
15gap> c5 := Group( (5,6,7,8,9) );;
16gap> SetName( c5, "c5" );
17gap> id5 := IdentityMapping( c5 );;
18gap> ac5 := AutomorphismGroup( c5 );;
19gap> act := MappingToOne( c5, ac5 );;
20gap> XMod( id5, act ) = XModByBoundaryAndAction( id5, act );
21true
22
23## Section 2.1.3
24gap> q8 := QuaternionGroup( IsPermGroup, 8 );
25Group([ (1,5,3,7)(2,8,4,6), (1,2,3,4)(5,6,7,8) ])
26gap> SetName( q8, "q8" );
27gap> c2 := Centre( q8 );
28Group([ (1,3)(2,4)(5,7)(6,8) ])
29gap> SetName( c2, "<-1>" );
30gap> bdy := InclusionMappingGroups( q8, c2 );;
31gap> X8a := XModByTrivialAction( bdy );
32[<-1>->q8]
33gap> c4 := Subgroup( q8, [q8.1] );;
34gap> SetName( c4, "<i>" );
35gap> X8b := XModByNormalSubgroup( q8, c4 );
36[<i>->q8]
37gap> Display(X8b);
38
39Crossed module [<i>->q8] :-
40: Source group has generators:
41  [ (1,5,3,7)(2,8,4,6) ]
42: Range group q8 has generators:
43  [ (1,5,3,7)(2,8,4,6), (1,2,3,4)(5,6,7,8) ]
44: Boundary homomorphism maps source generators to:
45  [ (1,5,3,7)(2,8,4,6) ]
46: Action homomorphism maps range generators to automorphisms:
47  (1,5,3,7)(2,8,4,6) --> { source gens --> [ (1,5,3,7)(2,8,4,6) ] }
48  (1,2,3,4)(5,6,7,8) --> { source gens --> [ (1,7,3,5)(2,6,4,8) ] }
49  These 2 automorphisms generate the group of automorphisms.
50
51## Section 2.1.4
52gap> X5 := XModByAutomorphismGroup( c5 );
53[c5->Aut(c5)]
54gap> Display( X5 );
55
56Crossed module [c5->Aut(c5)] :-
57: Source group c5 has generators:
58  [ (5,6,7,8,9) ]
59: Range group Aut(c5) has generators:
60  [ GroupHomomorphismByImages( c5, c5, [ (5,6,7,8,9) ], [ (5,7,9,6,8) ] ) ]
61: Boundary homomorphism maps source generators to:
62  [ IdentityMapping( c5 ) ]
63: Action homomorphism maps range generators to automorphisms:
64  GroupHomomorphismByImages( c5, c5, [ (5,6,7,8,9) ],
65[ (5,7,9,6,8) ] ) --> { source gens --> [ (5,7,9,6,8) ] }
66  This automorphism generates the group of automorphisms.
67
68## Section 2.1.5
69gap> gen12 := [ (1,2,3,4,5,6), (2,6)(3,5) ];;
70gap> d12 := Group( gen12 );;
71gap> gen6 := [ (7,8,9), (8,9) ];;
72gap> s3 := Group( gen6 );;
73gap> pr12 := GroupHomomorphismByImages( d12, s3, gen12, gen6 );;
74gap> Kernel( pr12 ) = Centre( d12 );
75true
76gap> X12 := XModByCentralExtension( pr12 );;
77gap> Display( X12 );
78
79Crossed module :-
80: Source group has generators:
81  [ (1,2,3,4,5,6), (2,6)(3,5) ]
82: Range group has generators:
83  [ (7,8,9), (8,9) ]
84: Boundary homomorphism maps source generators to:
85  [ (7,8,9), (8,9) ]
86: Action homomorphism maps range generators to automorphisms:
87  (7,8,9) --> { source gens --> [ (1,2,3,4,5,6), (1,3)(4,6) ] }
88  (8,9) --> { source gens --> [ (1,6,5,4,3,2), (2,6)(3,5) ] }
89  These 2 automorphisms generate the group of automorphisms.
90
91## Section 2.1.6
92gap> gens4 := [ (11,12), (12,13), (13,14) ];;
93gap> s4 := Group( gens4 );;
94gap> theta := GroupHomomorphismByImages( s4, s3, gens4, [(7,8),(8,9),(7,8)] );;
95gap> X1 := XModByPullback( X12, theta );;
96gap> StructureDescription( Source( X1 ) );
97"C2 x S4"
98gap> info := PullbackInfo( Source( X1 ) );;
99gap> info!.directProduct;
100Group([ (1,2,3,4,5,6), (2,6)(3,5), (7,8), (8,9), (9,10) ])
101gap> info!.projections[1];
102[ (7,8)(9,10), (7,9)(8,10), (2,6)(3,5)(8,9), (1,5,3)(2,6,4)(8,10,9),
103  (1,6,5,4,3,2)(8,9,10) ] -> [ (), (), (2,6)(3,5), (1,5,3)(2,6,4),
104  (1,6,5,4,3,2) ]
105gap> info!.projections[2];
106[ (7,8)(9,10), (7,9)(8,10), (2,6)(3,5)(8,9), (1,5,3)(2,6,4)(8,10,9),
107  (1,6,5,4,3,2)(8,9,10) ] -> [ (11,12)(13,14), (11,13)(12,14), (12,13),
108  (12,14,13), (12,13,14) ]
109
110## Section 2.1.8
111gap> DirectProductOp( [X8a,X8b], X8a );
112[<-1>x<i>->q8xq8]
113
114## Section 2.1.9
115gap> Source( X12 );
116Group([ (1,2,3,4,5,6), (2,6)(3,5) ])
117gap> Range( X12 );
118Group([ (7,8,9), (8,9) ])
119gap> Boundary( X12 );
120[ (1,2,3,4,5,6), (2,6)(3,5) ] -> [ (7,8,9), (8,9) ]
121gap> XModAction( X12 );
122[ (7,8,9), (8,9) ] ->
123[ [ (1,2,3,4,5,6), (2,6)(3,5) ] -> [ (1,2,3,4,5,6), (1,3)(4,6) ],
124  [ (1,2,3,4,5,6), (2,6)(3,5) ] -> [ (1,6,5,4,3,2), (2,6)(3,5) ] ]
125
126## Section 2.1.11
127gap> Size( X5 );
128[ 5, 4 ]
129gap> IdGroup( X5 );
130[ [ 5, 1 ], [ 4, 1 ] ]
131gap> ext := ExternalSetXMod( X5 );
132<xset:[ (), (5,6,7,8,9), (5,7,9,6,8), (5,8,6,9,7), (5,9,8,7,6) ]>
133gap> Orbits( ext );
134[ [ () ], [ (5,6,7,8,9), (5,7,9,6,8), (5,9,8,7,6), (5,8,6,9,7) ] ]
135gap> a := GeneratorsOfGroup( Range( X5 ) )[1]^2;
136[ (5,6,7,8,9) ] -> [ (5,9,8,7,6) ]
137gap> ImageElmXModAction( X5, (5,7,9,6,8), a );
138(5,8,6,9,7)
139gap> Print( RepresentationsOfObject(X5), "\n" );
140[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ]
141gap> Print( KnownAttributesOfObject(X5), "\n" );
142[ "Name", "Size", "Range", "Source", "IdGroup", "Boundary", "XModAction",
143  "ExternalSetXMod" ]
144
145## Section 2.2.1
146gap> kpoX5 := KnownPropertiesOfObject(X5);;
147gap> ForAll( [ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite",
148>  "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",
149>  "IsGeneratorsOfSemigroup", "IsPreXModDomain", "IsPreXMod", "IsXMod",
150>  "IsAutomorphismGroup2DimensionalGroup" ],
151>  s -> s in kpoX5 );
152true
153
154## Section 2.2.2
155gap> s4 := Group( (1,2), (2,3), (3,4) );;
156gap> a4 := Subgroup( s4, [ (1,2,3), (2,3,4) ] );;
157gap> k4 := Subgroup( a4, [ (1,2)(3,4), (1,3)(2,4) ] );;
158gap> SetName(s4,"s4");  SetName(a4,"a4");  SetName(k4,"k4");
159gap> X4 := XModByNormalSubgroup( s4, a4 );
160[a4->s4]
161gap> Y4 := SubXMod( X4, k4, a4 );
162[k4->a4]
163gap> IsNormal( X4, Y4 );
164true
165gap> NX4 := NormalSubXMods( X4 );;
166gap> Length( NX4 );
1675
168
169## Section 2.2.2
170gap> d8d8 := Group( (1,2,3,4), (1,3), (5,6,7,8), (5,7) );;
171gap> X88 := XModByAutomorphismGroup( d8d8 );;
172gap> Size( X88 );
173[ 64, 2048 ]
174gap> Y88 := KernelCokernelXMod( X88 );;
175gap> IdGroup(Y88);
176[ [ 4, 2 ], [ 128, 928 ] ]
177
178## Section 2.3.1
179gap> b1 := (11,12,13,14,15,16,17,18);;  b2 := (12,18)(13,17)(14,16);;
180gap> d16 := Group( b1, b2 );;
181gap> sk4 := Subgroup( d16, [ b1^4, b2 ] );;
182gap> SetName( d16, "d16" );  SetName( sk4, "sk4" );
183gap> bdy16 := GroupHomomorphismByImages( d16, sk4, [b1,b2], [b1^4*b2,b2] );;
184gap> aut1 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1^5,b2] );;
185gap> aut2 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1,b1^4*b2] );;
186gap> aut16 := Group( [ aut1, aut2 ] );;
187gap> act16 := GroupHomomorphismByImages( sk4, aut16, [b1^4,b2], [aut1,aut2] );;
188gap> P16 := PreXModByBoundaryAndAction( bdy16, act16 );
189[d16->sk4]
190gap> IsXMod( P16 );
191false
192
193## Section 2.3.2
194gap> P := PeifferSubgroup( P16 );
195Group([ (11,15)(12,16)(13,17)(14,18), (11,13,15,17)(12,14,16,18) ])
196gap> X16 := XModByPeifferQuotient( P16 );
197Peiffer([d16->sk4])
198gap> Display( X16 );
199
200Crossed module Peiffer([d16->sk4]) :-
201: Source group has generators:
202  [ f1, f2 ]
203: Range group has generators:
204  [ (11,15)(12,16)(13,17)(14,18), (12,18)(13,17)(14,16) ]
205: Boundary homomorphism maps source generators to:
206  [ (12,18)(13,17)(14,16), (11,15)(12,14)(16,18) ]
207  The automorphism group is trivial
208
209gap> iso16 := IsomorphismPermGroup( Source( X16 ) );;
210gap> S16 := Image( iso16 );
211Group([ (1,2), (3,4) ])
212
213## Section 2.4.1
214gap> g18gens := [ (1,2,3), (4,5,6), (2,3)(5,6) ];;
215gap> s3agens := [ (7,8,9), (8,9) ];;
216gap> g18 := Group( g18gens );;  SetName( g18, "g18" );
217gap> s3a := Group( s3agens );;  SetName( s3a, "s3a" );
218gap> t1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(),(8,9)]);
219[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]
220gap> h1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(7,8,9),(8,9)]);
221[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]
222gap> e1 := GroupHomomorphismByImages(s3a,g18,s3agens,[(1,2,3),(2,3)(5,6)]);
223[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]
224gap> C18 := Cat1Group( t1, h1, e1 );
225[g18=>s3a]
226
227## Section 2.4.2
228gap> Source( C18 );
229g18
230gap> Range( C18 );
231s3a
232gap> TailMap( C18 );
233[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]
234gap> HeadMap( C18 );
235[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]
236gap> RangeEmbedding( C18 );
237[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]
238gap> Kernel( C18 );
239Group([ (4,5,6) ])
240gap> KernelEmbedding( C18 );
241[ (4,5,6) ] -> [ (4,5,6) ]
242gap> Name( C18 );
243"[g18=>s3a]"
244gap> Size( C18 );
245[ 18, 6 ]
246gap> StructureDescription( C18 );
247[ "(C3 x C3) : C2", "S3" ]
248
249## Section 2.4.3
250gap> G4 := Group( (1,2,3,4), (3,4), (5,6,7,8), (7,8) );;
251gap> R4 := Group( (9,10,11,12), (11,12) );;
252gap> SetName( G4, "s4s4" );  SetName( R4, "s4d" );
253gap> G4gens := GeneratorsOfGroup( G4 );;
254gap> R4gens := GeneratorsOfGroup( R4 );;
255gap> t := GroupHomomorphismByImages( G4, R4, G4gens,
256>            Concatenation( R4gens, [ (), () ] ) );;
257gap> h := GroupHomomorphismByImages( G4, R4, G4gens,
258>            Concatenation( [ (), () ], R4gens ) );;
259gap> e := GroupHomomorphismByImages( R4, G4, R4gens,
260>            [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ] );;
261gap> C4 := PreCat1GroupByTailHeadEmbedding( t, h, e );
262[s4s4=>s4d]
263gap> Display( C4 );
264
265Cat1-group [s4s4=>s4d] :-
266: Source group s4s4 has generators:
267  [ (1,2,3,4), (3,4), (5,6,7,8), (7,8) ]
268: Range group s4d has generators:
269  [ ( 9,10,11,12), (11,12) ]
270: tail homomorphism maps source generators to:
271  [ ( 9,10,11,12), (11,12), (), () ]
272: head homomorphism maps source generators to:
273  [ (), (), ( 9,10,11,12), (11,12) ]
274: range embedding maps range generators to:
275  [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ]
276: kernel has generators:
277  [ (5,6,7,8), (7,8) ]
278: boundary homomorphism maps generators of kernel to:
279  [ ( 9,10,11,12), (11,12) ]
280: kernel embedding maps generators of kernel to:
281  [ (5,6,7,8), (7,8) ]
282
283## Section 2.4.4
284gap> R4 := ReverseCat1Group( C4 );
285[s4s4=>s4d]
286gap> Boundary( R4 );
287[ (3,4), (2,3), (1,2,3,4) ] -> [ (11,12), (10,11), (9,10,11,12) ]
288gap> TailMap( R4 ) = HeadMap( C4 );
289true
290
291## Section 2.4.5
292gap> s4:=Group( (1,2,3), (3,4) );;  SetName( s4, "s4" );
293gap> k4 := Subgroup( s4, [ (1,2)(3,4), (1,3)(2,4) ] );;
294gap> h := GroupHomomorphismByImages( s4, s4, [(1,2,3),(3,4)], [(),(3,4)] );;
295gap> c2 := Image( h );;  SetName( c2, "c2" );
296gap> C := PreCat1Group( h, h );
297[s4=>c2]
298gap> P := PeifferSubgroupPreCat1Group( C );;
299gap> P = k4;
300true
301gap> C2 := Cat1GroupByPeifferQuotient( C );
302[Group( [ f1, f2 ] )=>c2]
303gap> StructureDescription( C2 );
304[ "S3", "C2" ]
305gap> XC := PreXModOfPreCat1Group( C );;
306gap> StructureDescription( XC );
307[ "A4", "C2" ]
308gap> XC2 := XModByPeifferQuotient( XC );;
309gap> StructureDescription( XC2 );
310[ "C3", "C2" ]
311gap> CXC2 := Cat1GroupOfXMod( XC2 );;
312gap> StructureDescription( CXC2 );
313[ "S3", "C2" ]
314gap> IsomorphismCat1Groups( C2, CXC2 );
315[[..] => [(..|X..)=>c2]]
316
317## Section 2.5.1
318gap> G2 := SmallGroup( 288, 956 );  SetName( G2, "G2" );
319<pc group of size 288 with 7 generators>
320gap> d12 := DihedralGroup( 12 );  SetName( d12, "d12" );
321<pc group of size 12 with 3 generators>
322gap> a1 := d12.1;;  a2 := d12.2;;  a3 := d12.3;;  a0 := One( d12 );;
323gap> gensG2 := GeneratorsOfGroup( G2 );;
324gap> t2 := GroupHomomorphismByImages( G2, d12, gensG2,
325>           [ a0, a1*a3, a2*a3, a0, a0, a3, a0 ] );;
326gap> h2 := GroupHomomorphismByImages( G2, d12, gensG2,
327>           [ a1*a2*a3, a0, a0, a2*a3, a0, a0, a3^2 ] );;
328gap> e2 := GroupHomomorphismByImages( d12, G2, [a1,a2,a3],
329>        [ G2.1*G2.2*G2.4*G2.6^2, G2.3*G2.4*G2.6^2*G2.7, G2.6*G2.7^2 ] );;
330gap> C2 := PreCat1GroupByTailHeadEmbedding( t2, h2, e2 );
331[G2=>d12]
332gap> IsCat1Group( C2 );
333true
334gap> Display(C2);
335
336Cat1-group [G2=>d12] :-
337: Source group G2 has generators:
338  [ f1, f2, f3, f4, f5, f6, f7 ]
339: Range group d12 has generators:
340  [ f1, f2, f3 ]
341: tail homomorphism maps source generators to:
342  [ <identity> of ..., f1*f3, f2*f3, <identity> of ..., <identity> of ...,
343  f3, <identity> of ... ]
344: head homomorphism maps source generators to:
345  [ f1*f2*f3, <identity> of ..., <identity> of ..., f2*f3, <identity> of ...,
346  <identity> of ..., f3^2 ]
347: range embedding maps range generators to:
348  [ f1*f2*f4*f6^2, f3*f4*f6^2*f7, f6*f7^2 ]
349: kernel has generators:
350  [ f1, f4, f5, f7 ]
351: boundary homomorphism maps generators of kernel to:
352  [ f1*f2*f3, f2*f3, <identity> of ..., f3^2 ]
353: kernel embedding maps generators of kernel to:
354  [ f1, f4, f5, f7 ]
355
356gap> IsCat1Group( C2 );
357   true
358gap> EC4 := EndomorphismPreCat1Group( C4 );
359   [s4s4=>Group( [ (1,2,3,4)(5,6,7,8), (3,4)(7,8), (), () ] )]
360
361## Section 2.5.2
362gap> X2 := XModOfCat1Group( C2 );;
363gap> Display( X2 );
364
365Crossed module xmod([G2=>d12]) :-
366: Source group has generators:
367  [ f1, f4, f5, f7 ]
368: Range group d12 has generators:
369  [ f1, f2, f3 ]
370: Boundary homomorphism maps source generators to:
371  [ f1*f2*f3, f2*f3, <identity> of ..., f3^2 ]
372: Action homomorphism maps range generators to automorphisms:
373  f1 --> { source gens --> [ f1*f5, f4*f5, f5, f7^2 ] }
374  f2 --> { source gens --> [ f1*f5*f7^2, f4, f5, f7 ] }
375  f3 --> { source gens --> [ f1*f7, f4, f5, f7 ] }
376  These 3 automorphisms generate the group of automorphisms.
377: associated cat1-group is [G2=>d12]
378
379gap> StructureDescription( X2 );
380[ "D24", "D12" ]
381
382## Section 2.6.1
383gap> d12 := DihedralGroup( IsPermGroup, 12 );  SetName( d12, "d12" );
384Group([ (1,2,3,4,5,6), (2,6)(3,5) ])
385gap> c2 := Subgroup( d12, [ (1,6)(2,5)(3,4) ] );;
386gap> AllCat1GroupsWithImageNumber( d12, c2 );
3871
388gap> L12 := AllCat1GroupsWithImage( d12, c2 );
389[ [d12=>Group( [ (), (1,6)(2,5)(3,4) ] )] ]
390
391## Section 2.6.2
392gap> iter := AllCat1GroupsIterator( d12 );;
393gap> AllCat1GroupsNumber( d12 );
39412
395gap> iso12 := AllCat1GroupsUpToIsomorphism( d12 );
396[ [d12=>Group( [ (), (2,6)(3,5) ] )],
397  [d12=>Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )],
398  [d12=>Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )],
399  [d12=>Group( [ (1,2,3,4,5,6), (2,6)(3,5) ] )] ]
400
401## Section 2.6.3
402gap> CatnGroupNumbers( d12 );
403rec( cat1 := 12, idem := 21, iso1 := 4 )
404
405## Section 2.7.1
406gap> L18 := Cat1Select( 18 );
407Usage:  Cat1Select( size, gpnum, num );
408[ "D18", "C18", "C3 x S3", "(C3 x C3) : C2", "C6 x C3" ]
409gap> L18_4 := Cat1Select( 18, 4 );
410Usage:  Cat1Select( size, gpnum, num );
411There are 4 cat1-structures for the group (C3 x C3) : C2.
412Using small generating set [ f1, f2, f2*f3 ] for source of homs.
413[ [range gens], [tail genimages], [head genimages] ] :-
414(1)  [ [ f1 ], [ f1, <identity> of ..., <identity> of ... ],
415  [ f1, <identity> of ..., <identity> of ... ] ]
416(2)  [ [ f1, f3 ], [ f1, <identity> of ..., f3 ],
417  [ f1, <identity> of ..., f3 ] ]
418(3)  [ [ f1, f3 ], [ f1, <identity> of ..., f3 ],
419  [ f1, f3^2, <identity> of ... ] ]
420(4)  [ [ f1, f2, f2*f3 ],  tail = head = identity mapping ]
4214
422gap> C18 := Cat1Select( 18, 4, 3 );
423[(C3 x C3) : C2=>Group( [ f1, <identity> of ..., f3 ] )]
424gap> iso18 := IsomorphismPermObject( C18 );;
425gap> PC18 := Image( iso18 );
426[Group( [ (2,3)(5,6), (4,5,6), (1,2,3) ] )=>Group( [ (2,3)(5,6), (), (1,2,3)
427 ] )]
428gap> X18 := XModOfCat1Group( PC18 );
429[Group( [ (4,5,6) ] )->Group( [ (2,3)(5,6), (), (1,2,3) ] )]
430
431## Section 2.7.2
432gap> gp := SmallGroup( 102, 2 );
433<pc group of size 102 with 3 generators>
434gap> StructureDescription( gp );
435"C3 x D34"
436gap> all := AllCat1DataGroupsBasic( gp );
437#I Edit last line of .../xmod/lib/nn.kk.out to end with ] ] ] ] ]
438[ [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., <identity> of ...
439     ] )], [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, <identity> of ... ] )],
440  [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., f3 ] )],
441  [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, f3 ] )] ]
442
443## Section 2.8.1
444gap> IdGroup( X2 );
445[ [ 24, 6 ], [ 12, 4 ] ]
446gap> IdGroup( C2 );
447[ [ 288, 956 ], [ 12, 4 ] ]
448
449## Section 2.9.1
450gap> s3 := Group( (11,12), (12,13) );;
451gap> c3c3 := Group( [ (14,15,16), (17,18,19) ] );;
452gap> bdy := GroupHomomorphismByImages( c3c3, s3,
453>        [(14,15,16),(17,18,19)], [(11,12,13),(11,12,13)] );;
454gap> a := GroupHomomorphismByImages( c3c3, c3c3,
455>        [(14,15,16),(17,18,19)], [(14,16,15),(17,19,18)] );;
456gap> aut := Group( [a] );;
457gap> act := GroupHomomorphismByImages( s3, aut, [(11,12),(12,13)], [a,a] );;
458gap> X33 := XModByBoundaryAndAction( bdy, act );;
459gap> C33 := Cat1GroupOfXMod( X33 );;
460gap> G33 := Source( C33 );;
461gap> gpd33 := GroupGroupoid( C33 );
462#I  default `IsGeneratorsOfMagmaWithInverses' method returns `true' for [ ()>-\
463( 4, 5, 6)( 7, 9, 8)->() ]
464#I  default `IsGeneratorsOfMagmaWithInverses' method returns `true' for [ (12,\
46513)>-( 2, 3)( 4, 6)( 7, 8)->(12,13) ]
466groupoid with 2 pieces:
4671:  single piece groupoid with rays: < Group( [ ()>-( 4, 5, 6)( 7, 9, 8)->()
468 ] ), [ (), (11,12,13), (11,13,12) ], [ ()>-()->(), ()>-(7,8,9)->(11,12,13),
469  ()>-(7,9,8)->(11,13,12) ] >
4702:  single piece groupoid with rays: < Group(
471[ (12,13)>-( 2, 3)( 4, 6)( 7, 8)->(12,13) ] ), [ (12,13), (11,12), (11,13) ],
472[ (12,13)>-(2,3)(5,6)(8,9)->(12,13), (12,13)>-(2,3)(5,6)(7,9)->(11,13),
473  (12,13)>-(2,3)(5,6)(7,8)->(11,12) ] >
474
475## Section 2.9.2
476gap> piece2 := Pieces( gpd33 )[2];;
477gap> obs2 := piece2!.objects;
478[ (12,13), (11,12), (11,13) ]
479gap> RaysOfGroupoid( piece2 );
480[ (12,13)>-(2,3)(5,6)(8,9)->(12,13), (12,13)>-(2,3)(5,6)(7,9)->(11,13),
481  (12,13)>-(2,3)(5,6)(7,8)->(11,12) ]
482gap> g1 := (1,2)(5,6)(7,9);;
483gap> g2 := (2,3)(4,5)(7,8);;
484gap> g1 * g2;
485(1,3,2)(4,5,6)(7,9,8)
486gap> e1 := GroupGroupoidElement( C33, (12,13), g1 );
487(11,12)>-(1,2)(5,6)(7,9)->(12,13)
488gap> e2 := GroupGroupoidElement( C33, (12,13), g2 );
489(12,13)>-(2,3)(4,5)(7,8)->(11,13)
490gap> e1*e2;
491(11,12)>-(1,2)(4,5)(8,9)->(11,13)
492gap> e2^-1;
493(11,13)>-(1,3)(4,6)(7,9)->(12,13)
494gap> obgp := ObjectGroup( gpd33, (11,12) );
495<group with 1 generators>
496gap> GeneratorsOfGroup( obgp )[1];
497(11,13)>-( 1, 3)( 4, 6)( 7, 8)->(11,13)
498gap> Homset( gpd33, (11,12), (11,13) );
499<homset (11,12) -> (11,13) with head group Group(
500[ (11,12)>-( 1, 2)( 4, 6)( 7, 8)->(11,12) ] )>
501
502gap> SetInfoLevel( InfoXMod, saved_infolevel_xmod );;
503gap> SetInfoLevel( InfoGroupoids, saved_infolevel_groupoids );;
504gap> STOP_TEST( "gp2obj.tst", 10000 );
505