Before describing general functions for computing induced structures,
we consider coproducts of crossed modules which provide induced
crossed modules in certain cases.
<Section><Heading>Coproducts of crossed modules</Heading>
Need to add here a reference (or two) for coproducts.
<ManSection>
<Oper Name="CoproductXMod"
Arg="X1, X2" />
<Attr Name="CoproductInfo"
Arg="X0" />
<Description>
This function calculates the coproduct crossed module of two or more
crossed modules which have a common range <M>R</M>.
The standard method applies to
<M>\calX_1 = (\partial_1 : S_1 \to R)</M>
and <M>\calX_2 = (\partial_2 : S_2 \to R)</M>.
See below for the case of three or more crossed modules.
<P/>
The source <M>S_2</M> of <M>\calX_2</M> acts on <M>S_1</M>
via <M>\partial_2</M> and the action of <M>\calX_1</M>,
so we can form a precrossed module
<M>(\partial' : S_1 \ltimes S_2 \to R)
where <M>\partial'(s_1,s_2) = (\partial_1 s_1)(\partial_2 s_2).
The action of this precrossed module is the diagonal action
<M>(s_1,s_2)^r = (s_1^r,s_2^r)</M>.
Factoring out by the Peiffer subgroup, we obtain the coproduct
crossed module <M>\calX_1 \circ \calX_2</M>.
<P/>
In the example the structure descriptions of the precrossed module,
the Peiffer subgroup, and the resulting coproduct are printed out
when <C>InfoLevel(InfoXMod)</C> is at least <M>1</M>.
The coproduct comes supplied with attribute <C>CoproductInfo</C>,
which includes the embedding morphisms of the two factors.
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> q8 := Group( (1,2,3,4)(5,8,7,6), (1,5,3,7)(2,6,4,8) );;
gap> XAq8 := XModByAutomorphismGroup( q8 );;
gap> s4b := Range( XAq8 );;
gap> SetName( q8, "q8" ); SetName( s4b, "s4b" );
gap> a := q8.1;; b := q8.2;;
gap> alpha := GroupHomomorphismByImages( q8, q8, [a,b], [a^-1,b] );;
gap> beta := GroupHomomorphismByImages( q8, q8, [a,b], [a,b^-1] );;
gap> k4b := Subgroup( s4b, [ alpha, beta ] );; SetName( k4b, "k4b" );
gap> Z8 := XModByNormalSubgroup( s4b, k4b );;
gap> SetName( XAq8, "XAq8" ); SetName( Z8, "Z8" );
gap> SetInfoLevel( InfoXMod, 1 );
gap> XZ8 := CoproductXMod( XAq8, Z8 );
#I prexmod is [ [ 32, 47 ], [ 24, 12 ] ]
#I peiffer subgroup is C2, [ 2, 1 ]
#I the coproduct is [ "C2 x C2 x C2 x C2", "S4" ], [ [ 16, 14 ], [ 24, 12 ] ]
[Group( [ f1, f2, f3, f4 ] )->s4b]
gap> SetName( XZ8, "XZ8" );
gap> info := CoproductInfo( XZ8 );
rec( embeddings := [ [XAq8 => XZ8], [Z8 => XZ8] ], xmods := [ XAq8, Z8 ] )
gap> SetInfoLevel( InfoXMod, 0 );
]]>
</Example>
Given a list of more than two crossed modules with a common range <M>R</M>,
then an iterated coproduct is formed:
<Display>
\bigcirc~\left[ \calX_1,\calX_2,\ldots,\calX_n\right]
~=~ \calX_1 \circ (\calX_2 \circ ( \ldots
(\calX_{n-1} \circ \calX_n) \ldots ) ).
</Display>
The <C>embeddings</C> field of the <C>CoproductInfo</C> of the resulting
crossed module <M>\calY</M> contains the <M>n</M> morphisms
<M>\epsilon_i : \calX_i \to \calY (1 \leqslant i \leqslant n)</M>.
<P/>
<Example>
<![CDATA[
gap> Y := CoproductXMod( [ XAq8, XAq8, Z8, Z8 ] );
[Group( [ f1, f2, f3, f4, f5, f6, f7, f8 ] )->s4b]
gap> StructureDescription( Y );
[ "C2 x C2 x C2 x C2 x C2 x C2 x C2 x C2", "S4" ]
gap> CoproductInfo( Y );
rec(
embeddings :=
[ [XAq8 => [Group( [ f1, f2, f3, f4, f5, f6, f7, f8 ] ) -> s4b]],
[XAq8 => [Group( [ f1, f2, f3, f4, f5, f6, f7, f8 ] ) -> s4b]],
[Z8 => [Group( [ f1, f2, f3, f4, f5, f6, f7, f8 ] ) -> s4b]],
[Z8 => [Group( [ f1, f2, f3, f4, f5, f6, f7, f8 ] ) -> s4b]] ],
xmods := [ XAq8, XAq8, Z8, Z8 ] )
]]>
</Example>
<ManSection>
<Func Name="InducedXMod"
Arg="args" />
<Prop Name="IsInducedXMod"
Arg="xmod" />
<Oper Name="InducedXModBySurjection"
Arg="xmod, hom" />
<Oper Name="InducedXModByCopower"
Arg="xmod, hom, list" />
<Attr Name="MorphismOfInducedXMod"
Arg="xmod" />
<Description>
A morphism of crossed modules
<M>(\sigma, \rho) : \calX_1 \to \calX_2</M>
factors uniquely through an induced crossed module
<M>\rho_{\ast} \calX_1 = (\delta : \rho_{\ast} S_1 \to R_2)</M>.
Similarly, a morphism of cat<M>^1</M>-groups
factors through an induced cat<M>^1</M>-group.
Calculation of induced crossed modules of <M>\calX</M> also
provides an algebraic means of determining the homotopy <M>2</M>-type
of homotopy pushouts of the classifying space of <M>\calX</M>.
For more background from algebraic topology see references in
<Cite Key="BH1" />, <Cite Key="BW1" />, <Cite Key="BW2" />.
Induced crossed modules and induced cat<M>^1</M>-groups also provide the
building blocks for constructing pushouts in the categories
<E>XMod</E> and <E>Cat1</E>.
<P/>
Data for the cases of algebraic interest is provided by a
crossed module <M>\calX = (\partial : S \to R)</M>
and a homomorphism <M>\iota : R \to Q</M>.
The output from the calculation is a crossed module
<M>\iota_{\ast}\calX = (\delta : \iota_{\ast}S \to Q)</M>
together with a morphism of crossed modules
<M>\calX \to \iota_{\ast}\calX</M>.
When <M>\iota</M> is a surjection with kernel <M>K</M> then
<M>\iota_{\ast}S = S/[K,S]</M> where <M>[K,S]</M>
is the subgroup of <M>S</M> generated by elements of the form
<M>s^{-1}s^k, s \in S, k \in K</M>
(see <Cite Key="BH1" />, Prop.9).
(For many years, up until June 2018, this manual has stated the result to be
<M>[K,S]</M>, though the correct quotient had been calculated.)
When <M>\iota</M> is an inclusion the induced crossed module may be
calculated using a copower construction <Cite Key="BW1" /> or,
in the case when <M>R</M> is normal in <M>Q</M>,
as a coproduct of crossed modules
(<Cite Key="BW2" />, but not yet implemented).
When <M>\iota</M> is neither a surjection nor an inclusion, <M>\iota</M>
is factored as the composite of the surjection onto the image
and the inclusion of the image in <M>Q</M>, and then the composite induced
crossed module is constructed.
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>
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> 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:
[ (13,14,15), (14,15) ]
: Action homomorphism maps range generators to automorphisms:
(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> morX24 := MorphismOfInducedXMod( iX24 );
[[d24->d12] => [d24/ker->s3]]
]]>
</Example>
For a second, injective example we take for <M>\calX</M>
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> 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 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> 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" />
<Description>
This function calculates all the induced crossed modules
<C>InducedXMod(Q,R,S)</C>,
where <C>R</C> runs over all conjugacy classes of subgroups of <C>Q</C>
and <C>S</C> runs over all non-trivial normal subgroups of <C>R</C>.
</Description>
</ManSection>
<Example>
<![CDATA[
gap> all := AllInducedXMods( q8 );;
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>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.