1##############################################################################
2##
3#W  induced.tst                 GAP4 package `XMod'              Chris Wensley
4##
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: induced.tst" );
9gap> saved_infolevel_xmod := InfoLevel( InfoXMod );;
10gap> SetInfoLevel( InfoXMod, 0 );;
11gap>
12gap> c4a := Group( (5,6,7,8) );;
13gap> SetName( c4a, "c4a" );
14gap> AX4 := XModByAutomorphismGroup( c4a );;
15gap> isoX4 := IsomorphismPerm2DimensionalGroup( AX4 );;
16gap> X4 := Range( isoX4 );;
17gap> Display( X4 );
18
19Crossed module [c4a->PAut(c4a)] :-
20: Source group c4a has generators:
21  [ (5,6,7,8) ]
22: Range group PAut(c4a) has generators:
23  [ (1,2) ]
24: Boundary homomorphism maps source generators to:
25  [ () ]
26: Action homomorphism maps range generators to automorphisms:
27  (1,2) --> { source gens --> [ (5,8,7,6) ] }
28  This automorphism generates the group of automorphisms.
29
30gap> c2 := Range( X4 );;
31gap> SetName( c2, "c2" );
32gap> c2dash := Group( (3,4) );;
33gap> dash := GroupHomomorphismByImages( c2, c2dash, [(1,2)], [(3,4)] );;
34gap> X4dash := InducedXMod( X4, dash );
35i*([c4a->PAut(c4a)])
36
37gap> c6 := Group( (11,12,13,14,15,16) );;
38gap> SetName( c6, "c6" );
39gap> iota := GroupHomomorphismByImages( c2, c6,
40>                [ (1,2) ], [ (11,14)(12,15)(13,16) ] );;
41gap> indc4c2c6 := InducedXModByCopower( X4, iota, [ ] );;
42gap> StructureDescription( indc4c2c6 );
43[ "C4 x C4 x C4", "C6" ]
44gap> Size( indc4c2c6 );
45[ 64, 6 ]
46gap> indsrc := Source( indc4c2c6 );;
47gap> gensrc := GeneratorsOfGroup( indsrc );;
48gap> genc4c4c4 := [ (1,2,3,4), (5,6,7,8), (9,10,11,12) ];;
49gap> c4c4c4 := Group( genc4c4c4 );;
50gap> isosrc := GroupHomomorphismByImages( indsrc, c4c4c4, gensrc, genc4c4c4 );;
51gap> idindrng := IdentityMapping( Range( indc4c2c6 ) );;
52gap> isoind := IsomorphismByIsomorphisms( indc4c2c6, [ isosrc, idindrng ] );;
53gap> indc4c2c6i := Range( isoind );;
54gap> SetName( indc4c2c6i, Name( indc4c2c6 ) );
55gap> Display( indc4c2c6i );
56
57Crossed module i*([c4a->PAut(c4a)]) :-
58: Source group has generators:
59  [ ( 1, 2, 3, 4), ( 5, 6, 7, 8), ( 9,10,11,12) ]
60: Range group c6 has generators:
61  [ (11,12,13,14,15,16) ]
62: Boundary homomorphism maps source generators to:
63  [ (), (), () ]
64: Action homomorphism maps range generators to automorphisms:
65  (11,12,13,14,15,16) --> { source gens --> [ ( 9,10,11,12), ( 1, 4, 3, 2),
66  ( 5, 6, 7, 8) ] }
67  This automorphism generates the group of automorphisms.
68
69gap> q8 := Group( (1,2,3,4)(5,8,7,6), (1,5,3,7)(2,6,4,8) );;
70gap> AX8 := XModByAutomorphismGroup( q8 );;
71gap> s4a := Range( AX8 );;
72gap> gens4b := [ (11,12), (12,13), (13,14) ];;
73gap> s4b := Group( gens4b );;
74gap> SetName( s4b, "s4b" );
75gap> iso8 := IsomorphismGroups( s4a, s4b );;
76gap> s3b := Group( (5,6), (6,7) );;
77gap> SetName( s3b, "s3b" );
78gap> surj4 := GroupHomomorphismByImages( s4b, s3b, gens4b,
79>                 [ (5,6), (6,7), (5,6) ] );;
80gap> iota8 := iso8 * surj4;;
81gap> ind8 := InducedXModBySurjection( AX8, iota8 );;
82gap> StructureDescription( ind8 );
83[ "C2 x C2", "S3" ]
84gap> Size( ind8 );
85[ 4, 6 ]
86gap> n := 5;;
87gap> c2n := CyclicGroup( 2*n );;
88gap> SetName( c2n, "c2n" );
89gap> X2n := XModByNormalSubgroup( c2n, c2n );;
90gap> g := GeneratorsOfGroup( c2n )[1];;
91gap> cn := Subgroup( c2n, [g^2] );;
92gap> SetName( cn, "cn" );
93gap> surj := GroupHomomorphismByImages( c2n, cn, [g], [g^2] );;
94gap> ind1 := InducedXModBySurjection( X2n, surj );;
95gap> ok := IsCentralExtension2DimensionalGroup( ind1 );
96true
97gap> StructureDescription( ind1 );
98[ "C10", "C5" ]
99gap> inc := GroupHomomorphismByImages( cn, c2n, [g^2], [g^2] );;
100gap> ind2 := InducedXModByCopower( ind1, inc, [ ] );;
101gap> StructureDescription( ind2 );
102[ "C10 x C10", "C10" ]
103gap> indsrc2 := Source( ind2 );;
104gap> gensrc2 := GeneratorsOfGroup( indsrc2 );;
105gap> genc10c10 := [ (1,2)(5,6,7,8,9), (3,4)(10,11,12,13,14) ];;
106gap> c10c10 := Group( genc10c10 );;
107gap> isosrc2 := GroupHomomorphismByImages( indsrc2,c10c10,gensrc2,genc10c10 );;
108gap> idindrng2 := IdentityMapping( Range( ind2 ) );;
109gap> isoind2 := IsomorphismByIsomorphisms( ind2, [ isosrc2, idindrng2 ] );;
110gap> ind2i := Range( isoind2 );;
111gap> SetName( ind2i, Name( ind2 ) );
112gap> Display( ind2i );
113
114Crossed module i*([c2n/ker->cn]) :-
115: Source group has generators:
116  [ ( 1, 2)( 5, 6, 7, 8, 9), ( 3, 4)(10,11,12,13,14) ]
117: Range group c2n has generators:
118  [ f1, f2 ]
119: Boundary homomorphism maps source generators to:
120  [ f2, f2 ]
121: Action homomorphism maps range generators to automorphisms:
122  f1 --> { source gens --> [ ( 3, 4)(10,11,12,13,14), ( 1, 2)( 5, 6, 7, 8, 9)
123 ] }
124  f2 --> { source gens --> [ ( 1, 2)( 5, 6, 7, 8, 9), ( 3, 4)(10,11,12,13,14)
125 ] }
126  These 2 automorphisms generate the group of automorphisms.
127
128gap> c5 := Group( (1,2,3,4,5) );;
129gap> SetName( c5, "c5" );
130gap> c4b := Group( (4,5,6,7) );;
131gap> SetName( c4b, "c4b" );
132gap> bdy54 := GroupHomomorphismByImages( c5, c4b, [ (1,2,3,4,5) ], [ () ] );;
133gap> X54 := XModByTrivialAction( bdy54 );;
134gap> Display( X54 );
135
136Crossed module [c5->c4b] :-
137: Source group c5 has generators:
138  [ (1,2,3,4,5) ]
139: Range group c4b has generators:
140  [ (4,5,6,7) ]
141: Boundary homomorphism maps source generators to:
142  [ () ]
143  The automorphism group is trivial
144
145gap> c2 := Group( (8,9) );;
146gap> SetName( c2, "c2" );
147gap> surj := GroupHomomorphismByImages( c4b, c2, [ (4,5,6,7) ], [ (8,9) ] );;
148gap> K := Kernel( surj );;
149gap> SetName( K, "ker(surj)" );
150gap> D := DisplacementGroup( X54, K, c5 );;
151gap> SetName( D, "D" );
152gap> Size( D ) = 1;
153true
154gap> ind2 := InducedXMod( X54, surj );;
155gap> Display( ind2 );
156
157Crossed module i*([c5->c4b]) :-
158: Source group c5/ker has generators:
159  [ (1,5,4,3,2) ]
160: Range group c2 has generators:
161  [ (8,9) ]
162: Boundary homomorphism maps source generators to:
163  [ () ]
164  The automorphism group is trivial
165
166gap> c := (1,2,3,4,5,6);;
167gap> c6 := Group( c );;
168gap> SetName( c6, "c6" );
169gap> monoc6 := GroupHomomorphismByImages( c2, c6, [(8,9)], [(1,4)(2,5)(3,6)] );;
170gap> indc6 := InducedXMod( ind2, monoc6 );;
171gap> StructureDescription( indc6 );
172[ "C5 x C5 x C5", "C6" ]
173gap> indsrc6 := Source( indc6 );;
174gap> gensrc6 := GeneratorsOfGroup( indsrc6 );;
175gap> genc5c5c5 := [ (1,2,3,4,5), (6,7,8,9,10), (11,12,13,14,15) ];;
176gap> c5c5c5 := Group( genc5c5c5 );;
177gap> isosrc6 := GroupHomomorphismByImages( indsrc6,c5c5c5,gensrc6,genc5c5c5 );;
178gap> idindrng6 := IdentityMapping( Range( indc6 ) );;
179gap> isoind6 := IsomorphismByIsomorphisms( indc6, [ isosrc6, idindrng6 ] );;
180gap> indc6i := Range( isoind6 );;
181gap> SetName( indc6i, Name( indc6 ) );
182gap> Display( indc6i );
183
184Crossed module i*(i*([c5->c4b])) :-
185: Source group has generators:
186  [ ( 1, 2, 3, 4, 5), ( 6, 7, 8, 9,10), (11,12,13,14,15) ]
187: Range group c6 has generators:
188  [ (1,2,3,4,5,6) ]
189: Boundary homomorphism maps source generators to:
190  [ (), (), () ]
191: Action homomorphism maps range generators to automorphisms:
192  (1,2,3,4,5,6) --> { source gens --> [ (11,12,13,14,15), ( 1, 2, 3, 4, 5),
193  ( 6, 7, 8, 9,10) ] }
194  This automorphism generates the group of automorphisms.
195
196gap> s3 := Group( (11,12),(12,13) );;
197gap> SetName( s3, "s3" );
198gap> monos3 := GroupHomomorphismByImages( c2, s3, [ (8,9) ], [ (11,13) ] );;
199gap> inds3 := InducedXMod( ind2, monos3 );;
200gap> StructureDescription( inds3 );
201[ "C5 x C5 x C5", "S3" ]
202gap> indsrc3 := Source( inds3 );;
203gap> gensrc3 := GeneratorsOfGroup( indsrc3 );;
204gap> isosrc3 := GroupHomomorphismByImages( indsrc3,c5c5c5,gensrc3,genc5c5c5 );;
205gap> idindrng3 := IdentityMapping( Range( inds3 ) );;
206gap> isoind3 := IsomorphismByIsomorphisms( inds3, [ isosrc3, idindrng3 ] );;
207gap> inds3i := Range( isoind3 );;
208gap> SetName( inds3i, Name( inds3 ) );
209gap> Display( inds3i );
210
211Crossed module i*(i*([c5->c4b])) :-
212: Source group has generators:
213  [ ( 1, 2, 3, 4, 5), ( 6, 7, 8, 9,10), (11,12,13,14,15) ]
214: Range group s3 has generators:
215  [ (11,12), (12,13) ]
216: Boundary homomorphism maps source generators to:
217  [ (), (), () ]
218: Action homomorphism maps range generators to automorphisms:
219  (11,12) --> { source gens --> [ ( 6, 7, 8, 9,10), ( 1, 2, 3, 4, 5),
220  (11,12,13,14,15) ] }
221  (12,13) --> { source gens --> [ (11,12,13,14,15), ( 6, 7, 8, 9,10),
222  ( 1, 2, 3, 4, 5) ] }
223  These 2 automorphisms generate the group of automorphisms.
224
225gap> c3 := Subgroup( c6, [ c^2 ] );;
226gap> SetName( c3, "c3" );
227gap> surj6 := GroupHomomorphismByImages( c6, c3, [c], [c^2] );;
228gap> X6 := XModByCentralExtension( surj6 );
229[c6->c3]
230gap> a4 := Group( (1,2,3), (2,3,4) );;
231gap> SetName( a4, "a4" );
232gap> monoa4 := GroupHomomorphismByImages( c3, a4, [c^2], [(2,3,4)] );;
233gap> ind4 := InducedXMod( X6, monoa4, [ ] );;
234gap> Size( ind4 );
235[ 48, 12 ]
236gap> StructureDescription( ind4 );
237[ "C2 x SL(2,3)", "A4" ]
238gap> triv := Group( () );;
239gap> SetName( triv, "triv" );
240gap> zero := GroupHomomorphismByImages( c6, triv, [c], [()] );;
241gap> X0 := XModByTrivialAction( zero );;
242gap> mono0 := GroupHomomorphismByImages( triv, s3, [()], [()] );;
243gap> ind0 := InducedXModFromTrivialRange( X0, mono0 );;
244gap> Display( ind0 );
245
246Crossed module [c6^6->s3] :-
247: Source group c6^6 has generators:
248  [ (1,2,3,4,5,6), ( 7, 8, 9,10,11,12), (13,14,15,16,17,18),
249  (19,20,21,22,23,24), (25,26,27,28,29,30), (31,32,33,34,35,36) ]
250: Range group s3 has generators:
251  [ (11,12), (12,13) ]
252: Boundary homomorphism maps source generators to:
253  [ (), (), (), (), (), () ]
254: Action homomorphism maps range generators to automorphisms:
255  (11,12) --> { source gens --> [ (13,14,15,16,17,18), (19,20,21,22,23,24),
256  ( 1, 2, 3, 4, 5, 6), ( 7, 8, 9,10,11,12), (31,32,33,34,35,36),
257  (25,26,27,28,29,30) ] }
258  (12,13) --> { source gens --> [ ( 7, 8, 9,10,11,12), ( 1, 2, 3, 4, 5, 6),
259  (25,26,27,28,29,30), (31,32,33,34,35,36), (13,14,15,16,17,18),
260  (19,20,21,22,23,24) ] }
261  These 2 automorphisms generate the group of automorphisms.
262
263gap> ## this example used to be in tst/gp2ind.tst
264gap> b1 := (11,12,13,14,15,16,17,18);;
265gap> b2 := (12,18)(13,17)(14,16);;
266gap> d16 := Group( b1, b2 );;
267gap> SetName( d16, "d16" );
268gap> d8 := Subgroup( d16, [ b1^2, b2 ] );  SetName( d8, "d8" );
269Group([ (11,13,15,17)(12,14,16,18), (12,18)(13,17)(14,16) ])
270gap> c4c := Subgroup( d8, [ b1^2 ] );  SetName( c4c, "c4c" );
271Group([ (11,13,15,17)(12,14,16,18) ])
272gap> Y16 := XModByNormalSubgroup( d16, d8 );
273[d8->d16]
274gap> Y8 := SubXMod( Y16, c4c, d8 );
275[c4c->d8]
276gap> inc8 := InclusionMorphism2DimensionalDomains( Y16, Y8 );
277[[c4c->d8] => [d8->d16]]
278gap> incd8 := RangeHom( inc8 );;
279gap> indY8 := InducedXMod( Y8, incd8 );
280i*([c4c->d8])
281gap> StructureDescription( indY8 );
282[ "C4 x C4", "D16" ]
283gap> morY8 := MorphismOfInducedXMod( indY8 );
284[[c4c->d8] => i*([c4c->d8])]
285gap> s4 := Group( (1,2), (2,3), (3,4) );;
286gap> s3c := Subgroup( s4, [ (2,3), (3,4) ] );;
287gap> SetName( s3c, "s3c" );
288gap> indXs3c := InducedXMod( s4, s3c, s3c );
289i*([s3c->s3c])
290gap> StructureDescription( indXs3c );
291[ "GL(2,3)", "S4" ]
292
293gap> SetInfoLevel( InfoXMod, saved_infolevel_xmod );;
294gap> STOP_TEST( "induced.tst", 10000 );
295
296##############################################################################
297##
298#E  induced.tst . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
299