## expt/q8.txt ## part 1 : construct permutation groups and homomorphisms: p := (1,2,3,4)(5,8,7,6); q := (1,5,3,7)(2,6,4,8); q8 := Group( p, q ); SetName( q8, "q8" ); a := p; b := q; c := p^2; c4a := Subgroup( q8, [a] ); SetName( c4a, "c4a" ); c4b := Subgroup( q8, [b] ); SetName( c4b, "c4b" ); c2c := Subgroup( q8, [c] ); SetName( c2c, "c2c" ); fu := GroupHomomorphismByImages( c2c, c4a, [c], [c] ); fl := GroupHomomorphismByImages( c2c, c4b, [c], [c] ); fd := GroupHomomorphismByImages( c4b, q8, [b], [b] ); fr := GroupHomomorphismByImages( c4a, q8, [a], [a] ); autc4a := AutomorphismGroup( c4a ); imq8a := List( [p,q], g -> ConjugatorAutomorphism( c4a, g ) ); actq8a := GroupHomomorphismByImages( q8, autc4a, [p,q], imq8a ); c4aq8 := SemidirectProduct( q8, actq8a, c4a ); SetName( c4aq8, "c4a:q8" ); prc4aq8 := Projection( c4aq8 ); Print( "prc4aq8: ", MappingGeneratorsImages(prc4aq8), "\n" ); embq8 := Embedding( c4aq8, 1 ); p2 := ImageElm( embq8, p ); q2 := ImageElm( embq8, q ); Print( "[p2,q2] = ", [p2,q2], "\n" ); embc4a := Embedding( c4aq8, 2 ); a2 := ImageElm( embc4a, a ); Print( "a2 = ", a2, "\n" ); autc2c := AutomorphismGroup( c2c ); imc4b := List( [b], g -> ConjugatorAutomorphism( c2c, g ) ); actc4b := GroupHomomorphismByImages( c4b, autc2c, [b], imc4b ); c2c4b := SemidirectProduct( c4b, actc4b, c2c ); SetName( c2c4b, "c2c:c4b" ); prc2c4b := Projection( c2c4b ); Print( "prc2c4b: ", MappingGeneratorsImages(prc2c4b), "\n" ); embc4b := Embedding( c2c4b, 1 ); b2 := ImageElm( embc4b, b ); Print( "b2 = ", b2, "\n" ); embc2c := Embedding( c2c4b, 2 ); c2 := ImageElm( embc2c, c ); Print( "c2 = ", c2, "\n" ); ## boundary map is the inclusion of c2c4b in c4aq8 isc2c := ImagesSource( embc2c ); imbdy := [0,0]; imbdy[1] := ImageElm( embc4a, ImageElm( fu, c ) ); imbdy[2] := ImageElm( embq8, ImageElm( fd, b ) ); bdy := GroupHomomorphismByImages( c2c4b, c4aq8, [c2,b2], imbdy ); Print( "bdy = ", MappingGeneratorsImages(bdy), "\n" ); ## action of c4aq8 on c2c4b autc2c4b := AutomorphismGroup( c2c4b ); imact := [0,0,0]; ima := [0,0]; ima[1] := ImageElm( embc2c, c^a ); ima[2] := b2 * ImageElm( embc2c, Comm(b,a) ); imact[1] := GroupHomomorphismByImages( c2c4b, c2c4b, [c2,b2], ima ); ima[1] := ImageElm( embc2c, c^p ); ima[2] := ImageElm( embc4b, b^p ); imact[2] := GroupHomomorphismByImages( c2c4b, c2c4b, [c2,b2], ima ); ima[1] := ImageElm( embc2c, c^q ); ima[2] := ImageElm( embc4b, b^q ); imact[3] := GroupHomomorphismByImages( c2c4b, c2c4b, [c2,b2], ima ); if not ForAll( imact, f -> IsBijective(f) ) then Error( "imact homs not all bijective" ); fi; act := GroupHomomorphismByImages( c4aq8, autc2c4b, [a2,p2,q2], imact ); G := SemidirectProduct( c4aq8, act, c2c4b ); SetName( G, "G" ); prG := Projection( G ); Print( "prG: ", MappingGeneratorsImages(prG), "\n" ); embc4aq8 := Embedding( G, 1 ); a3 := ImageElm( embc4aq8, a2 ); p3 := ImageElm( embc4aq8, p2 ); q3 := ImageElm( embc4aq8, q2 ); embc2c4b := Embedding( G, 2 ); c3 := ImageElm( embc2c4b, c2 ); b3 := ImageElm( embc2c4b, b2 ); genG := [ c3, b3, a3, p3, q3 ]; Print( "genG = ", genG, "\n" ); ## cat1-embedding e := embc4aq8; ## tail map id := One( c4aq8 ); imt := [ id, id, a2, p2, q2 ]; t := GroupHomomorphismByImages( G, c4aq8, genG, imt ); Print( "t*e*t = t ? ", t*e*t = t, "\n" ); ## head map imh := Concatenation( imbdy, [a2,p2,q2] ); Print( "imh = ", imh, "\n" ); ## h := GroupHomomorphismByImages( G, c4aq8, genG, imh ); h := GroupGeneralMappingByImages( G, c4aq8, genG, imh ); ok := IsSingleValued( h ); Print( "h is single valued? ", ok, "\n\n" ); ## part 2 : construct isomorphic pc-groups and homomorphisms Q8 := SmallGroup( 8, 4 ); SetName( Q8, "Q8" ); P := Q8.1; Q := Q8.2; if not ( ( Order(P) = 4 ) and ( Order(Q) = 4) ) then Error( "orders" ); fi; A := P; B := Q; C := P^2; C4A := Subgroup( Q8, [A] ); SetName( C4A, "C4A" ); C4B := Subgroup( Q8, [B] ); SetName( C4B, "C4B" ); C2C := Subgroup( Q8, [A^2] ); SetName( C2C, "C2C" ); FU := GroupHomomorphismByImages( C2C, C4A, [C], [C] ); FL := GroupHomomorphismByImages( C2C, C4B, [C], [C] ); FD := GroupHomomorphismByImages( C4B, Q8, [B], [B] ); FR := GroupHomomorphismByImages( C4A, Q8, [A], [A] ); autC4A := AutomorphismGroup( C4A ); imQ8a := List( [P,Q], g -> ConjugatorAutomorphism( C4A, g ) ); actQ8a := GroupHomomorphismByImages( Q8, autC4A, [P,Q], imQ8a ); C4AQ8 := SemidirectProduct( Q8, actQ8a, C4A ); SetName( C4AQ8, "C4A:Q8" ); prC4AQ8 := Projection( C4AQ8 ); Print( "prC4AQ8: ", MappingGeneratorsImages(prC4AQ8), "\n" ); embQ8 := Embedding( C4AQ8, 1 ); P2 := ImageElm( embQ8, P ); Q2 := ImageElm( embQ8, Q ); Print( "[P2,Q2] = ", [P2,Q2], "\n" ); embC4A := Embedding( C4AQ8, 2 ); A2 := ImageElm( embC4A, A ); Print( "A2 = ", A2, "\n" ); autC2C := AutomorphismGroup( C2C ); imC4B := List( [B], g -> ConjugatorAutomorphism( C2C, g ) ); actC4B := GroupHomomorphismByImages( C4B, autC2C, [B], imC4B ); C2C4B := SemidirectProduct( C4B, actC4B, C2C ); SetName( C2C4B, "C2C:C4B" ); prC2C4B := Projection( C2C4B ); Print( "prC2C4B: ", MappingGeneratorsImages(prC2C4B), "\n" ); embC4B := Embedding( C2C4B, 1 ); B2 := ImageElm( embC4B, B ); Print( "B2 = ", B2, "\n" ); embC2C := Embedding( C2C4B, 2 ); C2 := ImageElm( embC2C, C ); Print( "C2 = ", C2, "\n" ); ## boundary map is the inclusion of C2C4B in C4AQ8 isC2C := ImagesSource( embC2C ); imBdy := [0,0]; imBdy[1] := ImageElm( embC4A, ImageElm( FU, C ) ); imBdy[2] := ImageElm( embQ8, ImageElm( FD, B ) ); Bdy := GroupHomomorphismByImages( C2C4B, C4AQ8, [C2,B2], imBdy ); Print( "Bdy = ", MappingGeneratorsImages(Bdy), "\n" ); ## action of C4AQ8 on C2C4B autC2C4B := AutomorphismGroup( C2C4B ); imAct := [0,0,0]; imA := [0,0]; imA[1] := ImageElm( embC2C, C^A ); imA[2] := B2 * ImageElm( embC2C, Comm(B,A) ); imAct[1] := GroupHomomorphismByImages( C2C4B, C2C4B, [C2,B2], imA ); imA[1] := ImageElm( embC2C, C^P ); imA[2] := ImageElm( embC4B, B^P ); imAct[2] := GroupHomomorphismByImages( C2C4B, C2C4B, [C2,B2], imA ); imA[1] := ImageElm( embC2C, C^Q ); imA[2] := ImageElm( embC4B, B^Q ); imAct[3] := GroupHomomorphismByImages( C2C4B, C2C4B, [C2,B2], imA ); if not ForAll( imAct, f -> IsBijective(f) ) then Error( "imAct homs not all bijective" ); fi; Act := GroupHomomorphismByImages( C4AQ8, autC2C4B, [A2,P2,Q2], imAct ); PCG := SemidirectProduct( C4AQ8, Act, C2C4B ); SetName( PCG, "PCG" ); prPCG := Projection( PCG ); Print( "prPCG: ", MappingGeneratorsImages(prPCG), "\n" ); embC4AQ8 := Embedding( PCG, 1 ); A3 := ImageElm( embC4AQ8, A2 ); P3 := ImageElm( embC4AQ8, P2 ); Q3 := ImageElm( embC4AQ8, Q2 ); embC2C4B := Embedding( PCG, 2 ); C3 := ImageElm( embC2C4B, C2 ); B3 := ImageElm( embC2C4B, B2 ); genPCG := [ C3, B3, A3, P3, Q3 ]; Print( "genPCG = ", genPCG, "\n" ); ## cat1-embedding pce := embC4AQ8; ## tail map Id := One( C4AQ8 ); imT := [ Id, Id, A2, P2, Q2 ]; T := GroupHomomorphismByImages( PCG, C4AQ8, genPCG, imT ); Print( "T*pce*T = T ? ", T*pce*T = T, "\n" ); ## head map imH := Concatenation( imBdy, [A2,P2,Q2] ); Print( "imH = ", imH, "\n" ); ## H := GroupHomomorphismByImages( PCG, C4AQ8, genPCG, imH ); H := GroupGeneralMappingByImages( PCG, C4AQ8, genPCG, imH ); OK := IsSingleValued( H ); Print( "H is single valued? ", OK, "\n" ); Print( "H is a group hom? ", IsGroupHomomorphism( H ), "\n" ); ## part 3 : check that isomorphisms commute with embeddings Print( "\nisomorphisms from a perm group to a pc-group:\n" ); isoq8 := GroupHomomorphismByImages( q8, Q8, [p,q], [P,Q] ); ok := IsBijective( isoq8 ); Print( " q8 -> Q8? ", ok, "\n" ); isoc4aq8 := GroupHomomorphismByImages( c4aq8, C4AQ8, [a2,p2,q2], [A2,P2,Q2] ); ok := IsBijective( isoc4aq8 ); Print( "c4aq8 -> C4AQ8? ", ok, "\n" ); isoc2c4b := GroupHomomorphismByImages( c2c4b, C2C4B, [c2,b2], [C2,B2] ); ok := IsBijective( isoc2c4b ); Print( "c2c4b -> C2C4B? ", ok, "\n" ); ## isoG := GroupHomomorphismByImages( G, PCG, [c3,b3,a3,p3,q3], [C3,B3,A3,P3,Q3] ); isoG := GroupGeneralMappingByImages( G, PCG, [c3,b3,a3,p3,q3], [C3,B3,A3,P3,Q3] ); ok := IsBijective( isoG ); Print( " G -> PCG? ", ok, "\n" ); ok := IsSingleValued( isoG ); Print( "G -> PCG single valued? ", ok, "\n" ); Print( "\ncomposites of isomorphisms and embeddings:\n" ); ok := isoq8 * embQ8 = embq8 * isoc4aq8; Print( " isoq8 * embQ8 = embq8 * isoc4aq8? ", ok, "\n" ); ok := prc4aq8 * isoq8 = isoc4aq8 * prC4AQ8; Print( " prc4aq8 * isoq8 = isoc4aq8 * prC4AQ8? ", ok, "\n" ); ok := isoc4aq8 * embC4AQ8 = embc4aq8 * isoG; Print( "isoc4aq8 * embC4AQ8 = embc4aq8 * isoG? ", ok, "\n" );