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