From 58a43eb2a41df4bab61e1bfac4ae07b4f9d4196b Mon Sep 17 00:00:00 2001 From: cdwensley Date: Fri, 3 Jan 2025 09:38:12 +0000 Subject: [PATCH 1/2] changed examples of induced crossed modules --- CHANGES.md | 3 +- PackageInfo.g | 4 +- README.md | 11 ++- doc/gp2ind.xml | 154 ++++++++++++++++++++++++++---------------- doc/gp3xsq.xml | 9 ++- lib/gp2ind.gd | 21 +++--- lib/gp2ind.gi | 31 +++++---- tst/manual/gp2ind.tst | 122 ++++++++++++++++++++------------- 8 files changed, 213 insertions(+), 142 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 91ab688..c3900e3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,7 @@ # CHANGES to the 'XMod' package -## 2.92 -> 2.92dev (17/12/2024) +## 2.92 -> 2.92dev (03/01/2025) + * (20/12/24) changed the examples of induced crossed modules in section 7.2 * (17/12/24) implemented (Inner)ActorCat1Group, fixing issue #144 * (20/11/24) added AutomorphismPermGroup method for cat1-groups renamed PermAutomorphismAsXModMorphism as diff --git a/PackageInfo.g b/PackageInfo.g index 85c0b6c..ae8ed79 100644 --- a/PackageInfo.g +++ b/PackageInfo.g @@ -8,7 +8,7 @@ SetPackageInfo( rec( PackageName := "XMod", Subtitle := "Crossed Modules and Cat1-Groups", Version := "2.92dev", -Date := "17/12/2024", # dd/mm/yyyy format +Date := "03/01/2025", # dd/mm/yyyy format License := "GPL-2.0-or-later", Persons := [ @@ -127,7 +127,7 @@ Keywords := ["crossed module", "cat1-group", "derivation", "section", AutoDoc := rec( TitlePage := rec( Copyright := Concatenation( - "©right; 1996-2024, Chris Wensley et al.

\n", + "© 1996-2025, Chris Wensley et al.

\n", "The &XMod; package is free software; you can redistribute it ", "and/or modify it under the terms of the GNU General ", "Public License as published by the Free Software Foundation; ", diff --git a/README.md b/README.md index e5b3529..849df34 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Functions for crossed squares and cat2-groups have been added during 2019/20. ## Copyright -The 'XMod' package is Copyright {\copyright} Chris Wensley et al, 1997--2024. +The 'XMod' package is Copyright © Chris Wensley et al, 1997--2025. 'XMod' is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,16 +45,15 @@ Once these prerequisites are in place, proceed as follows: * Unpack `xmod-.tar.gz` in the `pkg` subdirectory of the GAP root directory. * From within GAP load the package with: - + ``` gap> LoadPackage( "xmod" ); - true - - * The file manual.pdf is in the `doc' subdirectory. + ``` + * The file manual.pdf is in the `doc` subdirectory. * To run the test file read `testall.g` from the `tst` subdirectory. ## Contact If you have a question relating to 'XMod', encounter any problems, or have a suggestion for extending the package in any way, please - * email: `cdwensley.maths@btinternet.com` + * email: * or report an issue at: diff --git a/doc/gp2ind.xml b/doc/gp2ind.xml index ac82142..cbb6331 100644 --- a/doc/gp2ind.xml +++ b/doc/gp2ind.xml @@ -2,7 +2,7 @@ - + @@ -166,81 +166,121 @@ These constructions use Tietze transformation routines in the library file tietze.gi.

As a first, surjective example, we take for \calX -the normal inclusion crossed module of a4 in s4, -and for \iota the surjection from s4 to s3 -with kernel k4. -The induced crossed module is isomorphic to X3 = [c3->s3]. +a central extension crossed module of dihedral groups, +(d_{24} \to d_{12}), +and for \iota a surjection d_{12} \to s_3 +with kernel c_2. +The induced crossed module is isomorphic to (d_{12} \to s_3).

s4gens := GeneratorsOfGroup( s4 ); -[ (1,2), (2,3), (3,4) ] -gap> a4gens := GeneratorsOfGroup( a4 ); -[ (1,2,3), (2,3,4) ] -gap> s3b := Group( (5,6),(6,7) );; SetName( s3b, "s3b" ); -gap> epi := GroupHomomorphismByImages( s4, s3b, s4gens, [(5,6),(6,7),(5,6)] );; -gap> X4 := XModByNormalSubgroup( s4, a4 );; -gap> indX4 := InducedXModBySurjection( X4, epi ); -[a4/ker->s3b] -gap> Display( indX4 ); - -Crossed module [a4/ker->s3b] :- -: Source group a4/ker has generators: - [ (1,3,2), (1,2,3) ] -: Range group s3b has generators: - [ (5,6), (6,7) ] +gap> a := (6,7,8,9)(10,11,12);; b := (7,9)(11,12);; +gap> d24 := Group( [ a, b ] );; +gap> SetName( d24, "d24" ); +gap> c := (1,2)(3,4,5);; d := (4,5);; +gap> d12 := Group( [ c, d ] );; +gap> SetName( d12, "d12" ); +gap> bdy := GroupHomomorphismByImages( d24, d12, [a,b], [c,d] );; +gap> X24 := XModByCentralExtension( bdy ); +[d24->d12] +gap> e := (13,14,15);; f := (14,15);; +gap> s3 := Group( [ e, f ] );; +gap> SetName( s3, "s3" );; +gap> epi := GroupHomomorphismByImages( d12, s3, [c,d], [e,f] );; +gap> iX24 := InducedXModBySurjection( X24, epi ); +[d24/ker->s3] +gap> Display( iX24 ); +Crossed module [d24/ker->s3] :- +: Source group d24/ker has generators: + [ ( 1,11, 5, 4,10, 8)( 2,12, 6, 3, 9, 7), + ( 1, 2)( 3, 4)( 5, 9)( 6,10)( 7,11)( 8,12) ] +: Range group s3 has generators: + [ (13,14,15), (14,15) ] : Boundary homomorphism maps source generators to: - [ (5,6,7), (5,7,6) ] + [ (13,14,15), (14,15) ] : Action homomorphism maps range generators to automorphisms: - (5,6) --> { source gens --> [ (1,2,3), (1,3,2) ] } - (6,7) --> { source gens --> [ (1,2,3), (1,3,2) ] } + (13,14,15) --> { source gens --> [ ( 1,11, 5, 4,10, 8)( 2,12, 6, 3, 9, 7), + ( 1, 6)( 2, 5)( 3, 8)( 4, 7)( 9,10)(11,12) ] } + (14,15) --> { source gens --> [ ( 1, 8,10, 4, 5,11)( 2, 7, 9, 3, 6,12), + ( 1, 2)( 3, 4)( 5, 9)( 6,10)( 7,11)( 8,12) ] } These 2 automorphisms generate the group of automorphisms. - -gap> morX4 := MorphismOfInducedXMod( indX4 ); -[[a4->s4] => [a4/ker->s3b]] +gap> morX24 := MorphismOfInducedXMod( iX24 ); +[[d24->d12] => [d24/ker->s3]] ]]> For a second, injective example we take for \calX -the automorphism crossed module XAq8 of , -and for \iota an inclusion of s4b in s5. -The resulting source group is SL(2,5). +the result iX24 of the previous example +and for \iota an inclusion of s_3 in s_4. +The resulting source group has size 96.

iso4 := IsomorphismGroups( s4b, s4 );; -gap> s5 := Group( (1,2,3,4,5), (4,5) );; -gap> SetName( s5, "s5" ); -gap> inc45 := InclusionMappingGroups( s5, s4 );; -gap> iota45 := iso4 * inc45;; -gap> indXAq8 := InducedXMod( XAq8, iota45 ); -i*(XAq8) -gap> Size2d( indXAq8 ); -[ 120, 120 ] -gap> StructureDescription( indXAq8 ); -[ "SL(2,5)", "S5" ] +gap> g := (16,17,18);; h := (16,17,18,19);; +gap> s4 := Group( [ g, h ] );; +gap> SetName( s4, "s4" );; +gap> iota := GroupHomomorphismByImages( s3, s4, [e,f], [g^2*h^2,g*h^-1] ); +[ (13,14,15), (14,15) ] -> [ (17,18,19), (18,19) ] +gap> iiX24 := InducedXModByCopower( iX24, iota, [ ] ); +i*([d24/ker->s3]) +gap> Size2d( iiX24 ); +[ 96, 24 ] +gap> StructureDescription( iiX24 ); +[ "C2 x GL(2,3)", "S4" ] ]]> -For a third example we use the version InducedXMod(Q,R,S) -of this global function, with Q \geqslant R \unrhd S. -We take the identity mapping on s3c as boundary, -and the inclusion of s3c in s4 as \iota. -The induced group is a general linear group GL(2,3). +For a third example we combine the previous two examples by +taking for \iota the more general case alpha = theta*iota. +The resulting jX24 is isomorphic to, +but not identical to, iiX24.

s3c := Subgroup( s4, [ (2,3), (3,4) ] );; -gap> SetName( s3c, "s3c" ); -gap> indXs3c := InducedXMod( s4, s3c, s3c ); -i*([s3c->s3c]) -gap> StructureDescription( indXs3c ); -[ "GL(2,3)", "S4" ] +gap> alpha := CompositionMapping( iota, epi ); +[ (1,2)(3,4,5), (4,5) ] -> [ (17,18,19), (18,19) ] +gap> jX24 := InducedXMod( X24, alpha );; +gap> StructureDescription( jX24 ); +[ "C2 x GL(2,3)", "S4" ] ]]> +For a fourth example we use the version InducedXMod(Q,R,S) +of this global function, with a normal inclusion crossed module +(S \to R) and an inclusion mapping R \to Q. +We take (c_6 \to d_{12}) as \calX +and the inclusion of d_{12} in d_{24} as \iota. +

+ + d12b := Subgroup( d24, [ a^2, b ] );; +gap> SetName( d12b, "d12b" ); +gap> c6b := Subgroup( d12b, [ a^2 ] );; +gap> SetName( c6b, "c6b" ); +gap> X12 := InducedXMod( d24, d12b, c6b ); +i*([c6b->d12b]) +gap> StructureDescription( X12 ); +[ "C6 x C6", "D24" ] +gap> Display( MorphismOfInducedXMod( X12 ) ); +Morphism of crossed modules :- +: Source = [c6b->d12b] with generating sets: + [ ( 6, 8)( 7, 9)(10,12,11) ] + [ ( 6, 8)( 7, 9)(10,12,11), ( 7, 9)(11,12) ] +: Range = i*([c6b->d12b]) with generating sets: + [ ( 4, 5)( 6, 7)( 8, 9)(10,11)(12,13)(14,15), + ( 4, 6, 8)( 5, 7, 9)(10,12,14)(11,13,15), + ( 4,10)( 5,11)( 6,12)( 7,13)( 8,14)( 9,15), (1,2,3) ] + [ ( 6, 7, 8, 9)(10,11,12), ( 7, 9)(11,12) ] +: Source Homomorphism maps source generators to: + [ ( 4, 9, 6, 5, 8, 7)(10,15,12,11,14,13) ] +: Range Homomorphism maps range generators to: + [ ( 6, 8)( 7, 9)(10,12,11), ( 7, 9)(11,12) ] +#]]> + + @@ -254,13 +294,9 @@ and S runs over all non-trivial normal subgroups of R. all := AllInducedXMods( q8 );; -gap> ids := List( all, x -> IdGroup(x) );; -gap> Sort( ids ); -gap> ids; -[ [ [ 1, 1 ], [ 8, 4 ] ], [ [ 1, 1 ], [ 8, 4 ] ], [ [ 1, 1 ], [ 8, 4 ] ], - [ [ 1, 1 ], [ 8, 4 ] ], [ [ 4, 2 ], [ 8, 4 ] ], [ [ 4, 2 ], [ 8, 4 ] ], - [ [ 4, 2 ], [ 8, 4 ] ], [ [ 16, 2 ], [ 8, 4 ] ], [ [ 16, 2 ], [ 8, 4 ] ], - [ [ 16, 2 ], [ 8, 4 ] ], [ [ 16, 14 ], [ 8, 4 ] ] ] +gap> L := List( all, x -> StructureDescription( Source( x ) ) ); +[ "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", + "1", "C2 x C2 x C2 x C2", "1" ] ]]> diff --git a/doc/gp3xsq.xml b/doc/gp3xsq.xml index fdb9dd8..63432ae 100644 --- a/doc/gp3xsq.xml +++ b/doc/gp3xsq.xml @@ -2,7 +2,7 @@ - + @@ -360,7 +360,12 @@ The crossed pairing is given by \boxtimes \;:\; R \times W \,\to\, S, \quad (r,\chi) \,\mapsto\, \chi r~. -This is implemented as ActorCrossedSquare(X0);. +This is implemented as ActorCrossedSquare(X0). +

+The example constructs XSact, the actor crossed square +of the crossed module X20. +This crossed square is converted to a cat^2-group C2act +in section .

diff --git a/lib/gp2ind.gd b/lib/gp2ind.gd index d1e66a0..d5aebc5 100644 --- a/lib/gp2ind.gd +++ b/lib/gp2ind.gd @@ -1,8 +1,8 @@ -############################################################################### +############################################################################## ## -#W gp2ind.gd GAP4 package `XMod' Chris Wensley +#W gp2ind.gd GAP4 package `XMod' Chris Wensley ## -#Y Copyright (C) 2001-2020, Chris Wensley et al, +#Y Copyright (C) 2001-2024, Chris Wensley et al, #Y School of Computer Science, Bangor University, U.K. ## ## This file declares functions for induced crossed modules. @@ -37,7 +37,7 @@ ############################################################################# ## -## #A InducedXModData( ) +#A InducedXModData( ) ## ## DeclareAttribute( "InducedXModData", Is2DimensionalDomain, "mutable" ); @@ -73,9 +73,12 @@ DeclareAttribute( "MorphismOfInducedXMod", IsInducedXMod ); #O InducedXModFromTrivialRange( , ) ## DeclareGlobalFunction( "InducedXMod" ); -DeclareOperation( "InducedXModBySurjection", [ IsXMod, IsGroupHomomorphism ] ); -DeclareOperation( "InducedXModByCoproduct", [ IsXMod, IsGroupHomomorphism ] ); -DeclareOperation( "InducedXModByBijection", [ IsXMod, IsGroupHomomorphism ] ); +DeclareOperation( "InducedXModBySurjection", + [ IsXMod, IsGroupHomomorphism ] ); +DeclareOperation( "InducedXModByCoproduct", + [ IsXMod, IsGroupHomomorphism ] ); +DeclareOperation( "InducedXModByBijection", + [ IsXMod, IsGroupHomomorphism ] ); DeclareOperation( "InducedXModByCopower", [ IsXMod, IsGroupHomomorphism, IsList ] ); DeclareOperation( "InducedXModFromTrivialSource", @@ -83,7 +86,7 @@ DeclareOperation( "InducedXModFromTrivialSource", DeclareOperation( "InducedXModFromTrivialRange", [ IsXMod, IsGroupHomomorphism ] ); -############################################################################## +############################################################################# ## #F InducedCat1Group( ) #O InducedCat1Data( , , ) @@ -94,7 +97,7 @@ DeclareOperation( "InducedCat1Data", [ IsCat1Group, IsGroupHomomorphism, IsList ] ); DeclareOperation( "InducedCat1GroupByFreeProduct", [ IsList ] ); -############################################################################## +############################################################################# ## #O AllInducedXMods( ) #O AllInducedCat1Groups( ) diff --git a/lib/gp2ind.gi b/lib/gp2ind.gi index bafe417..1ba40ee 100644 --- a/lib/gp2ind.gi +++ b/lib/gp2ind.gi @@ -158,10 +158,10 @@ function( LX ) return C2; end ); -############################################################################# +############################################################################ ## -#F InducedXMod( , [, ] ) crossed module induced -#F InducedXMod( , , [, ] ) by group homomorphism +#F InducedXMod( , [, ] ) crossed module induced +#F InducedXMod( , , [, ] ) by group homomorphism ## InstallGlobalFunction( InducedXMod, function( arg ) @@ -171,7 +171,7 @@ InstallGlobalFunction( InducedXMod, function( arg ) Print("\nUsage: InducedXMod( X, iota [, T] );"); Print("\n where X is a crossed module and iota is a homomorphism"); Print("\n or: InducedXMod( Q, P, M [, T] );"); - Print("\n where Q >= P |>= M and T is a transversal for Q/P\n\n"); + Print("\n where Q >= P |>= M and T is a transversal for Q/P\n\n"); end; nargs := Length( arg ); if ( ( nargs < 2 ) or ( nargs > 4 ) ) then @@ -240,12 +240,13 @@ InstallGlobalFunction( InducedXMod, function( arg ) if HasName( X0 ) then SetName( IX, Concatenation( "i*(", Name( X0 ), ")" ) ); elif HasName(M) and HasName(P) and HasName(Q) then - SetName( IX, Concatenation( "i*(", [Name(Q),Name(P),Name(M)], ")" ) ); + SetName( IX, + Concatenation( "i*(", [Name(Q),Name(P),Name(M)], ")" ) ); fi; return IX; end ); -############################################################################# +############################################################################ ## #M InducedXModFromTrivialSource( , ) . . . . . . . induced xmod ## @@ -281,9 +282,9 @@ function( X0, iota ) return IX; end ); -############################################################################# +############################################################################ ## -#M InducedXModFromTrivialRange( , ) . . . . . . . . induced xmod +#M InducedXModFromTrivialRange( , ) . . . . . . . induced xmod ## InstallMethod( InducedXModFromTrivialRange, "for an xmod and a monomorphism", true, [ IsXMod, IsGroupHomomorphism ], 0, @@ -351,9 +352,9 @@ function( X0, iota ) return IX; end ); -############################################################################# +############################################################################ ## -#M InducedXModByCopower( , , ) . . . . . . . induced xmod +#M InducedXModByCopower( , , ) . . . . . . induced xmod ## InstallMethod( InducedXModByCopower, "for an xmod, an inclusion, and a transversal", true, @@ -1351,9 +1352,9 @@ function( info ) return IC; end ); -############################################################################# +############################################################################ ## -#F InducedCat1Group( ) . . . . . . . . . . . . . . . induced cat1-groups +#F InducedCat1Group( ) . . . . . . . . . . . . . induced cat1-groups ## InstallGlobalFunction( InducedCat1Group, function( arg ) @@ -1363,9 +1364,9 @@ InstallGlobalFunction( InducedCat1Group, function( arg ) if ( nargs > 2 ) then return false; fi; - if not IsRecord( arg[1] ) then - return false; - fi; +## if not IsRecord( arg[1] ) then +## return false; +## fi; if IsGroup( arg[1] ) then if ( ( nargs < 3 ) or not IsNormal( arg[2], arg[1] ) ) then return false; diff --git a/tst/manual/gp2ind.tst b/tst/manual/gp2ind.tst index ea6af06..40f4b68 100644 --- a/tst/manual/gp2ind.tst +++ b/tst/manual/gp2ind.tst @@ -2,7 +2,7 @@ ## #W gp2ind.tst XMOD test file Chris Wensley #W & Murat Alp -#Y Copyright (C) 2001-2023, Chris Wensley et al, +#Y Copyright (C) 2001-2025, Chris Wensley et al, #Y School of Computer Science, Bangor University, U.K. ## gap> START_TEST( "XMod package: gp2ind.tst" ); @@ -57,62 +57,88 @@ rec( xmods := [ XAq8, XAq8, Z8, Z8 ] ) ## Section 7.2.1 : Example 1 -gap> s4gens := GeneratorsOfGroup( s4 ); -[ (1,2), (2,3), (3,4) ] -gap> a4gens := GeneratorsOfGroup( a4 ); -[ (1,2,3), (2,3,4) ] -gap> s3b := Group( (5,6),(6,7) );; SetName( s3b, "s3b" ); -gap> epi := GroupHomomorphismByImages( s4, s3b, s4gens, [(5,6),(6,7),(5,6)] );; -gap> X4 := XModByNormalSubgroup( s4, a4 );; -gap> indX4 := InducedXModBySurjection( X4, epi ); -[a4/ker->s3b] -gap> Display( indX4 ); - -Crossed module [a4/ker->s3b] :- -: Source group a4/ker has generators: - [ (1,3,2), (1,2,3) ] -: Range group s3b has generators: - [ (5,6), (6,7) ] +gap> a := (6,7,8,9)(10,11,12);; b := (7,9)(11,12);; +gap> d24 := Group( [ a, b ] );; +gap> SetName( d24, "d24" ); +gap> c := (1,2)(3,4,5);; d := (4,5);; +gap> d12 := Group( [ c, d ] );; +gap> SetName( d12, "d12" ); +gap> bdy := GroupHomomorphismByImages( d24, d12, [a,b], [c,d] );; +gap> X24 := XModByCentralExtension( bdy ); +[d24->d12] +gap> e := (13,14,15);; f := (14,15);; +gap> s3 := Group( [ e, f ] );; +gap> SetName( s3, "s3" );; +gap> epi := GroupHomomorphismByImages( d12, s3, [c,d], [e,f] );; +gap> iX24 := InducedXModBySurjection( X24, epi ); +[d24/ker->s3] +gap> Display( iX24 ); +Crossed module [d24/ker->s3] :- +: Source group d24/ker has generators: + [ ( 1,11, 5, 4,10, 8)( 2,12, 6, 3, 9, 7), + ( 1, 2)( 3, 4)( 5, 9)( 6,10)( 7,11)( 8,12) ] +: Range group s3 has generators: + [ (13,14,15), (14,15) ] : Boundary homomorphism maps source generators to: - [ (5,6,7), (5,7,6) ] + [ (13,14,15), (14,15) ] : Action homomorphism maps range generators to automorphisms: - (5,6) --> { source gens --> [ (1,2,3), (1,3,2) ] } - (6,7) --> { source gens --> [ (1,2,3), (1,3,2) ] } + (13,14,15) --> { source gens --> [ ( 1,11, 5, 4,10, 8)( 2,12, 6, 3, 9, 7), + ( 1, 6)( 2, 5)( 3, 8)( 4, 7)( 9,10)(11,12) ] } + (14,15) --> { source gens --> [ ( 1, 8,10, 4, 5,11)( 2, 7, 9, 3, 6,12), + ( 1, 2)( 3, 4)( 5, 9)( 6,10)( 7,11)( 8,12) ] } These 2 automorphisms generate the group of automorphisms. - -gap> morX4 := MorphismOfInducedXMod( indX4 ); -[[a4->s4] => [a4/ker->s3b]] +gap> morX24 := MorphismOfInducedXMod( iX24 ); +[[d24->d12] => [d24/ker->s3]] ## Section 7.2.1 : Example 2 -gap> iso4 := IsomorphismGroups( s4b, s4 );; -gap> s5 := Group( (1,2,3,4,5), (4,5) );; -gap> SetName( s5, "s5" ); -gap> inc45 := InclusionMappingGroups( s5, s4 );; -gap> iota45 := iso4 * inc45;; -gap> indXAq8 := InducedXMod( XAq8, iota45 ); -i*(XAq8) -gap> Size2d( indXAq8 ); -[ 120, 120 ] -gap> StructureDescription( indXAq8 ); -[ "SL(2,5)", "S5" ] +gap> g := (16,17,18);; h := (16,17,18,19);; +gap> s4 := Group( [ g, h ] );; +gap> SetName( s4, "s4" );; +gap> iota := GroupHomomorphismByImages( s3, s4, [e,f], [g^2*h^2,g*h^-1] ); +[ (13,14,15), (14,15) ] -> [ (17,18,19), (18,19) ] +gap> iiX24 := InducedXModByCopower( iX24, iota, [ ] ); +i*([d24/ker->s3]) +gap> Size2d( iiX24 ); +[ 96, 24 ] +gap> StructureDescription( iiX24 ); +[ "C2 x GL(2,3)", "S4" ] -## Section 7.2.1 : Example 2 -gap> s3c := Subgroup( s4, [ (2,3), (3,4) ] );; -gap> SetName( s3c, "s3c" ); -gap> indXs3c := InducedXMod( s4, s3c, s3c ); -i*([s3c->s3c]) -gap> StructureDescription( indXs3c ); -[ "GL(2,3)", "S4" ] +## Section 7.2.1 : Example 3 +gap> alpha := CompositionMapping( iota, epi ); +[ (1,2)(3,4,5), (4,5) ] -> [ (17,18,19), (18,19) ] +gap> jX24 := InducedXMod( X24, alpha );; +gap> StructureDescription( jX24 ); +[ "C2 x GL(2,3)", "S4" ] + +## Section 7.2.1 : Example 4 +gap> d12b := Subgroup( d24, [ a^2, b ] );; +gap> SetName( d12b, "d12b" ); +gap> c6b := Subgroup( d12b, [ a^2 ] );; +gap> SetName( c6b, "c6b" ); +gap> X12 := InducedXMod( d24, d12b, c6b ); +i*([c6b->d12b]) +gap> StructureDescription( X12 ); +[ "C6 x C6", "D24" ] +gap> Display( MorphismOfInducedXMod( X12 ) ); +Morphism of crossed modules :- +: Source = [c6b->d12b] with generating sets: + [ ( 6, 8)( 7, 9)(10,12,11) ] + [ ( 6, 8)( 7, 9)(10,12,11), ( 7, 9)(11,12) ] +: Range = i*([c6b->d12b]) with generating sets: + [ ( 4, 5)( 6, 7)( 8, 9)(10,11)(12,13)(14,15), + ( 4, 6, 8)( 5, 7, 9)(10,12,14)(11,13,15), + ( 4,10)( 5,11)( 6,12)( 7,13)( 8,14)( 9,15), (1,2,3) ] + [ ( 6, 7, 8, 9)(10,11,12), ( 7, 9)(11,12) ] +: Source Homomorphism maps source generators to: + [ ( 4, 9, 6, 5, 8, 7)(10,15,12,11,14,13) ] +: Range Homomorphism maps range generators to: + [ ( 6, 8)( 7, 9)(10,12,11), ( 7, 9)(11,12) ] ## Section 7.2.2 gap> all := AllInducedXMods( q8 );; -gap> ids := List( all, x -> IdGroup(x) );; -gap> Sort( ids ); -gap> ids; -[ [ [ 1, 1 ], [ 8, 4 ] ], [ [ 1, 1 ], [ 8, 4 ] ], [ [ 1, 1 ], [ 8, 4 ] ], - [ [ 1, 1 ], [ 8, 4 ] ], [ [ 4, 2 ], [ 8, 4 ] ], [ [ 4, 2 ], [ 8, 4 ] ], - [ [ 4, 2 ], [ 8, 4 ] ], [ [ 16, 2 ], [ 8, 4 ] ], [ [ 16, 2 ], [ 8, 4 ] ], - [ [ 16, 2 ], [ 8, 4 ] ], [ [ 16, 14 ], [ 8, 4 ] ] ] +gap> L := List( all, x -> StructureDescription( Source( x ) ) ); +[ "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", + "1", "C2 x C2 x C2 x C2", "1" ] gap> SetInfoLevel( InfoXMod, saved_infolevel_xmod );; gap> SetInfoLevel( InfoGroupoids, saved_infolevel_groupoids );; From 7e1c510028022c37cf8514e073f9919343a6e610 Mon Sep 17 00:00:00 2001 From: cdwensley Date: Fri, 3 Jan 2025 12:05:57 +0000 Subject: [PATCH 2/2] sort the list all --- doc/gp2ind.xml | 8 +++++--- tst/manual/gp2ind.tst | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/doc/gp2ind.xml b/doc/gp2ind.xml index cbb6331..6eec53b 100644 --- a/doc/gp2ind.xml +++ b/doc/gp2ind.xml @@ -294,9 +294,11 @@ and S runs over all non-trivial normal subgroups of R. all := AllInducedXMods( q8 );; -gap> L := List( all, x -> StructureDescription( Source( x ) ) ); -[ "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", - "1", "C2 x C2 x C2 x C2", "1" ] +gap> L := List( all, x -> Source( x ) );; +gap> Sort( L, function(g,h) return Size(g) < Size(h); end );; +gap> List( L, x -> StructureDescription( x ) ); +[ "1", "1", "1", "1", "C2 x C2", "C2 x C2", "C2 x C2", "C4 x C4", "C4 x C4", + "C4 x C4", "C2 x C2 x C2 x C2" ] ]]> diff --git a/tst/manual/gp2ind.tst b/tst/manual/gp2ind.tst index 40f4b68..4b2ada4 100644 --- a/tst/manual/gp2ind.tst +++ b/tst/manual/gp2ind.tst @@ -136,9 +136,11 @@ Morphism of crossed modules :- ## Section 7.2.2 gap> all := AllInducedXMods( q8 );; -gap> L := List( all, x -> StructureDescription( Source( x ) ) ); -[ "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", "1", "C4 x C4", "C2 x C2", - "1", "C2 x C2 x C2 x C2", "1" ] +gap> L := List( all, x -> Source( x ) );; +gap> Sort( L, function(g,h) return Size(g) < Size(h); end );; +gap> List( L, x -> StructureDescription( x ) ); +[ "1", "1", "1", "1", "C2 x C2", "C2 x C2", "C2 x C2", "C4 x C4", "C4 x C4", + "C4 x C4", "C2 x C2 x C2 x C2" ] gap> SetInfoLevel( InfoXMod, saved_infolevel_xmod );; gap> SetInfoLevel( InfoGroupoids, saved_infolevel_groupoids );;