<!-- ------------------------------------------------------------------- -->
<!--                                                                     -->
<!--  gp2ind.xml            XMod documentation            Chris Wensley  -->
<!--                                                        & Murat Alp  -->
<!--  Copyright (C) 2001-2018, Chris Wensley et al,                      --> 
<!--  School of Computer Science, Bangor University, U.K.                --> 
<!--                                                                     -->
<!-- ------------------------------------------------------------------- -->

<?xml version="1.0" encoding="UTF-8"?>

<Chapter Label="chap-gp2ind">
<Heading>Induced constructions</Heading>

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
crossed modules <M>{\mathcal X}_1 = (\partial_1 : S_1 \to R)</M> 
and <M>{\mathcal X}_2 = (\partial_2 : S_2 \to R)</M> 
which have a common range <M>R</M>. 
The source <M>S_2</M> of <M>{\mathcal X}_2</M> acts on <M>S_1</M> 
via <M>\partial_2</M> and the action of <M>{\mathcal X}_1</M>, 
so we can form a precrossed module 
<M>(\partial' : S_1 \ltimes S_2 \to R)</M> 
where <M>\partial'(s_1,s_2) = (\partial_1 s_1)(\partial_2 s_2)</M>. 
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>{\mathcal X}_1 \circ {\mathcal X}_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> X8 := XModByAutomorphismGroup( q8 );;
gap> s4b := Range( X8 );; 
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( X8, "X8" );  SetName( Z8, "Z8" );  
gap> SetInfoLevel( InfoXMod, 1 ); 
gap> XZ8 := CoproductXMod( X8, 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 := [ [X8 => XZ8], [Z8 => XZ8] ], xmods := [ X8, Z8 ] )
gap> SetInfoLevel( InfoXMod, 0 ); 
]]>
</Example>

</Section>


<Section><Heading>Induced crossed modules</Heading>
<Index>induced crossed module</Index>

<ManSection>
   <Func Name="InducedXMod"
         Arg="args" />
   <Prop Name="IsInducedXMod"
         Arg="xmod" />
   <Oper Name="SurjectiveInducedXMod"
         Arg="xmod, hom" />
   <Oper Name="InclusionInducedXModByCopower"
         Arg="xmod, hom, list" />
   <Attr Name="MorphismOfInducedXMod"
         Arg="xmod" />
<Description>
A morphism of crossed modules
<M>(\sigma, \rho) : {\mathcal X}_1 \to {\mathcal X}_2</M>
factors uniquely through an induced crossed module
<M>\rho_{\ast} {\mathcal X}_1 = (\delta  :  \rho_{\ast} S_1 \to R_2)</M>.
Similarly, a morphism of cat1-groups factors through an induced cat1-group.
Calculation of induced crossed modules of <M>{\mathcal X}</M> also
provides an algebraic means of determining the homotopy <M>2</M>-type
of homotopy pushouts of the classifying space of <M>{\mathcal X}</M>.
For more background from algebraic topology see references in
<Cite Key="BH1" />, <Cite Key="BW1" />, <Cite Key="BW2" />.
Induced crossed modules and induced cat1-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 conjugation
crossed module  <M>{\mathcal X} = (\partial  :  S \to R)</M>
and a homomorphism  <M>\iota</M>  from  <M>R</M>  to a third group  <M>Q</M>. 
(It is hoped to implement more general cases in due course.) 
The output from the calculation is a crossed module
<M>\iota_{\ast}{\mathcal X} = (\delta  :  \iota_{\ast}S \to Q)</M>
together with a morphism of crossed modules
<M>{\mathcal X} \to \iota_{\ast}{\mathcal X}</M>.
When <M>\iota</M> is a surjection with kernel <M>K</M> then
<M>\iota_{\ast}S = S/[K,S]</M> (see <Cite Key="BH1" />). 
(For many years, up until June 2018, this manual has stated the result to be 
<M>[K,S]</M>, though the correct quotient has 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>{\mathcal X}</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</C>.
</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 := SurjectiveInducedXMod( 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) ]
: Boundary homomorphism maps source generators to:
  [ (5,6,7), (5,7,6) ]
: 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) ] }
  These 2 automorphisms generate the group of automorphisms.

gap> morX4 := MorphismOfInducedXMod( indX4 );
[[a4->s4] => [a4/ker->s3b]]
]]>
</Example>

For a second, injective example we take for <M>{\mathcal X}</M> 
a conjugation crossed module. 
<P/>
<Example>
<![CDATA[
gap> d8 := Subgroup( d16, [ b1^2, b2 ] );  SetName( d8, "d8" ); 
Group([ (11,13,15,17)(12,14,16,18), (12,18)(13,17)(14,16) ])
gap> c4 := Subgroup( d8, [ b1^2 ] );  SetName( c4, "c4" ); 
Group([ (11,13,15,17)(12,14,16,18) ])
gap> Y16 := XModByNormalSubgroup( d16, d8 );                   
[d8->d16]
gap> Y8 := SubXMod( Y16, c4, d8 );            
[c4->d8]
gap> inc8 := InclusionMorphism2DimensionalDomains( Y16, Y8 ); 
[[c4->d8] => [d8->d16]]
gap> incd8 := RangeHom( inc8 );;
gap> indY8 := InducedXMod( Y8, incd8 );
i*([c4->d8])
gap> StructureDescription( indY8 );
[ "C4 x C4", "D16" ]
gap> morY8 := MorphismOfInducedXMod( indY8 );
[[c4->d8] => i*([c4->d8])]
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" ]
]]>
</Example>

For a third example we use the version <C>InducedXMod(Q,R,S)</C> 
of this global function. 
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>.
<P/>
<Example>
<![CDATA[
gap> s3c := Subgroup( s4, [ (2,3), (3,4) ] );;  
gap> SetName( s3c, "s3c" );
gap> indXs3c := InducedXMod( s4, s3c, s3c );
#I induced group has Size: 48
i*([s3c->s3c])
gap> StructureDescription( indXs3c );
[ "GL(2,3)", "S4" ]
]]>
</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 subgroups of <C>R</C>.
</Description>
</ManSection>
<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 ] ] ]
]]>
</Example>

</Section>

<Section><Heading>Induced cat<M>^1</M>-groups</Heading>
<Index>induced cat1-groups</Index>

<ManSection>
   <Func Name="InducedCat1Group"
         Arg="args" />
   <Prop Name="InducedCat1GroupByFreeProduct"
         Arg="grp, hom" />
<Description>
This area awaits development. 
</Description>
</ManSection>

</Section>

</Chapter>
