Skip to content

Commit

Permalink
Merge pull request #149 from gap-packages/issues
Browse files Browse the repository at this point in the history
changed examples of induced crossed modules
  • Loading branch information
cdwensley authored Jan 3, 2025
2 parents ee8d4ba + 7e1c510 commit d2d3fa1
Show file tree
Hide file tree
Showing 8 changed files with 217 additions and 142 deletions.
3 changes: 2 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions PackageInfo.g
Original file line number Diff line number Diff line change
Expand Up @@ -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 := [
Expand Down Expand Up @@ -127,7 +127,7 @@ Keywords := ["crossed module", "cat1-group", "derivation", "section",
AutoDoc := rec(
TitlePage := rec(
Copyright := Concatenation(
"&copyright; 1996-2024, Chris Wensley et al. <P/>\n",
"© 1996-2025, Chris Wensley et al. <P/>\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; ",
Expand Down
11 changes: 5 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -45,16 +45,15 @@ Once these prerequisites are in place, proceed as follows:

* Unpack `xmod-<version_number>.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: `[email protected]`
* email: <mailto:[email protected]>
* or report an issue at: <https://github.com/gap-packages/xmod/issues/new>
156 changes: 97 additions & 59 deletions doc/gp2ind.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<!-- -->
<!-- gp2ind.xml XMod documentation Chris Wensley -->
<!-- & Murat Alp -->
<!-- Copyright (C) 2001-2024, Chris Wensley et al, -->
<!-- Copyright (C) 2001-2025, Chris Wensley et al, -->
<!-- School of Computer Science, Bangor University, U.K. -->
<!-- -->
<!-- ------------------------------------------------------------------- -->
Expand Down Expand Up @@ -166,81 +166,121 @@ These constructions use Tietze transformation routines in
the library file <C>tietze.gi</C>.
<P/>
As a first, surjective example, we take for <M>\calX</M>
the normal inclusion crossed module of <C>a4</C> in <C>s4</C>,
and for <M>\iota</M> the surjection from <C>s4</C> to <C>s3</C>
with kernel <C>k4</C>.
The induced crossed module is isomorphic to <C>X3 = [c3->s3]</C>.
a central extension crossed module of dihedral groups,
<M>(d_{24} \to d_{12})</M>,
and for <M>\iota</M> a surjection <M>d_{12} \to s_3</M>
with kernel <M>c_2</M>.
The induced crossed module is isomorphic to <M>(d_{12} \to s_3)</M>.
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
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]]
]]>
</Example>

For a second, injective example we take for <M>\calX</M>
the automorphism crossed module <C>XAq8</C> of <Ref Oper="CoproductXMod"/>,
and for <M>\iota</M> an inclusion of <C>s4b</C> in <C>s5</C>.
The resulting source group is <C>SL(2,5)</C>.
the result <C>iX24</C> of the previous example
and for <M>\iota</M> an inclusion of <M>s_3</M> in <M>s_4</M>.
The resulting source group has size <M>96</M>.
<P/>
<Example>
<![CDATA[
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" ]
]]>
</Example>

For a third example we use the version <C>InducedXMod(Q,R,S)</C>
of this global function, with <M>Q \geqslant R \unrhd S</M>.
We take the identity mapping on <C>s3c</C> as boundary,
and the inclusion of <C>s3c</C> in <C>s4</C> as <M>\iota</M>.
The induced group is a general linear group <C>GL(2,3)</C>.
For a third example we combine the previous two examples by
taking for <M>\iota</M> the more general case <C>alpha = theta*iota</C>.
The resulting <C>jX24</C> is isomorphic to,
but not identical to, <C>iiX24</C>.
<P/>
<Example>
<![CDATA[
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" ]
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" ]
]]>
</Example>

For a fourth example we use the version <C>InducedXMod(Q,R,S)</C>
of this global function, with a normal inclusion crossed module
<M>(S \to R)</M> and an inclusion mapping <M>R \to Q</M>.
We take <M>(c_6 \to d_{12})</M> as <M>\calX</M>
and the inclusion of <M>d_{12}</M> in <M>d_{24}</M> as <M>\iota</M>.
<P/>
<Example>
<![CDATA[
## 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) ]
#]]>
</Example>

<ManSection>
<Oper Name="AllInducedXMods"
Arg="Q" />
Expand All @@ -254,13 +294,11 @@ and <C>S</C> runs over all non-trivial normal subgroups of <C>R</C>.
<Example>
<![CDATA[
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 -> 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" ]
]]>
</Example>

Expand Down
9 changes: 7 additions & 2 deletions doc/gp3xsq.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<!-- -->
<!-- gp3xsq.xml XMod documentation Chris Wensley -->
<!-- -->
<!-- Copyright (C) 1996-2022, Chris Wensley et al, -->
<!-- Copyright (C) 1996-2024, Chris Wensley et al, -->
<!-- School of Computer Science, Bangor University, U.K. -->
<!-- -->
<!-- ------------------------------------------------------------------- -->
Expand Down Expand Up @@ -360,7 +360,12 @@ The crossed pairing is given by
<Display>
\boxtimes \;:\; R \times W \,\to\, S, \quad (r,\chi) \,\mapsto\, \chi r~.
</Display>
This is implemented as <C>ActorCrossedSquare(X0);</C>.
This is implemented as <C>ActorCrossedSquare(X0)</C>.
<P/>
The example constructs <C>XSact</C>, the actor crossed square
of the crossed module <C>X20</C>.
This crossed square is converted to a cat<M>^2</M>-group <C>C2act</C>
in section <Ref Sect="cat2-xsq"/>.
</Description>
</ManSection>
<P/>
Expand Down
21 changes: 12 additions & 9 deletions lib/gp2ind.gd
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -37,7 +37,7 @@

#############################################################################
##
## #A InducedXModData( <IX> )
#A InducedXModData( <IX> )
##
## DeclareAttribute( "InducedXModData", Is2DimensionalDomain, "mutable" );

Expand Down Expand Up @@ -73,17 +73,20 @@ DeclareAttribute( "MorphismOfInducedXMod", IsInducedXMod );
#O InducedXModFromTrivialRange( <xmod>, <hom> )
##
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",
[ IsXMod, IsGroupHomomorphism ] );
DeclareOperation( "InducedXModFromTrivialRange",
[ IsXMod, IsGroupHomomorphism ] );

##############################################################################
#############################################################################
##
#F InducedCat1Group( <args> )
#O InducedCat1Data( <grp>, <hom>, <trans> )
Expand All @@ -94,7 +97,7 @@ DeclareOperation( "InducedCat1Data",
[ IsCat1Group, IsGroupHomomorphism, IsList ] );
DeclareOperation( "InducedCat1GroupByFreeProduct", [ IsList ] );

##############################################################################
#############################################################################
##
#O AllInducedXMods( <grp> )
#O AllInducedCat1Groups( <grp> )
Expand Down
Loading

0 comments on commit d2d3fa1

Please sign in to comment.