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

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

<Chapter Label="chap-gp2up">
<Heading>Whitehead group of a crossed module</Heading>
<Index>up 2d-mapping of 2d-group</Index>

<Section Label="sect-whitehead-mult">
<Heading>Derivations and Sections</Heading>

<Index>derivation, of crossed module</Index>
<Index>Whitehead monoid</Index>
The Whitehead monoid  <M>{\rm Der}(\calX)</M> of <M>\calX</M> 
was defined in <Cite Key="W2" /> to be the monoid of all <E>derivations</E> 
from <M>R</M> to <M>S</M>, that is the set of all maps  
<M>\chi : R \to S</M>,  with <E>Whitehead multiplication</E>  
<M>\star</M> (on the <E>right</E>) satisfying: 
<Display>
{\bf Der\ 1}:  \chi(qr) ~=~ (\chi q)^{r} \; (\chi r),
\qquad
{\bf Der\ 2}: (\chi_1 \star \chi_2)(r) 
    ~=~ (\chi_2 r)(\chi_1 r)(\chi_2 \partial \chi_1 r).
</Display>
The zero map is the identity for this composition.
<Index>regular derivation</Index>
Invertible elements in the monoid are called <E>regular</E>.
<Index>Whitehead group</Index>
The Whitehead group of <M>\calX</M> 
is the group of regular derivations in <M>{\rm Der}(\calX )</M>. 
In the next chapter the <E>actor</E> of <M>\calX</M> 
is defined as a crossed module whose source and range are permutation 
representations of the Whitehead group and the automorphism group of 
<M>\calX</M>.
<P/>
<Index>section, of cat1-group</Index>
The construction for cat1-groups equivalent to the derivation of a
crossed module is the <E>section</E>. 
<Index>Whitehead multiplication</Index>
The monoid of sections of  <M>\calC = (e;t,h : G \to R)</M>  
is the set of group homomorphisms
<M>\xi : R \to G</M>, with Whitehead multiplication  <M>\star</M>  
(on the <E>right</E>) satisfying:
<Display>
{\bf Sect\ 1}: t \circ \xi ~=~ {\rm id}_R,
\quad
{\bf Sect\ 2}: (\xi_1 \star \xi_2)(r) 
                ~=~ (\xi_1 r)(e h \xi_1 r)^{-1}(\xi_2 h \xi_1 r)  
                ~=~ (\xi_2 h \xi_1 r)(e h \xi_1 r)^{-1}(\xi_1 r).
</Display>
The embedding  <M>e</M>  is the identity for this composition,
and  <M>h(\xi_1 \star \xi_2) = (h \xi_1)(h \xi_2)</M>.
A section is  <E>regular</E>  when  <M>h \xi</M>  is an automorphism, and 
the group of regular sections is isomorphic to the Whitehead group.
<P/>
If  <M>\epsilon</M> denotes the inclusion of  
<M>S = \ker\ t</M>  in  <M>G</M>
then  <M>\partial = h \epsilon : S \to R</M> and 
<Display>
\xi r ~=~ (e r)(e \chi r), 
\quad\mbox{which equals}\quad  
(r, \chi r) ~\in~ R \ltimes S, 
</Display>
determines a section  <M>\xi</M>  of  <M>\calC</M>  
in terms of the corresponding derivation  <M>\chi</M>  of
<M>\calX</M>, and conversely. 

<ManSection>
   <Oper Name="DerivationByImages"
         Arg="X0 ims" />
   <Prop Name="IsDerivation"
         Arg="map" />
   <Prop Name="IsUp2DimensionalMapping"
         Arg="map" />
   <Attr Name="UpImagePositions"
         Arg="chi" />
   <Attr Name="UpGeneratorImages"
         Arg="chi" />
<Description>
Derivations are stored like group homomorphisms by specifying the images
of a generating set.  
Images of the remaining elements may then be obtained using axiom 
<M>{\bf Der\ 1}</M>.  
The function <C>IsDerivation</C> is automatically called to 
check that this procedure is well-defined.
<P/>
In the following example a cat1-group <C>C3</C> and the associated 
crossed module  <C>X3</C>  are constructed, 
where <C>X3</C> is isomorphic to the inclusion of the normal
cyclic group <C>c3</C> in the symmetric group <C>s3</C>.
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> g18 := Group( (1,2,3), (4,5,6), (2,3)(5,6) );;
gap> SetName( g18, "g18" );
gap> gen18 := GeneratorsOfGroup( g18 );;
gap> g1 := gen18[1];;  g2 := gen18[2];;  g3 := gen18[3];;
gap> s3 := Subgroup( g18, gen18{[2..3]} );;
gap> SetName( s3, "s3" );;
gap> t := GroupHomomorphismByImages( g18, s3, gen18, [g2,g2,g3] );;
gap> h := GroupHomomorphismByImages( g18, s3, gen18, [(),g2,g3] );;
gap> e := GroupHomomorphismByImages( s3, g18, [g2,g3], [g2,g3] );;
gap> C3 := Cat1Group( t, h, e );
[g18=>s3]
gap> SetName( Kernel(t), "c3" );;
gap> X3 := XModOfCat1Group( C3 );
[c3->s3]
gap> imchi1 := [ (), (1,2,3)(4,6,5) ];;
gap> chi1 := DerivationByImages( X3, imchi1 );
DerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], 
[ (), (1,2,3)(4,6,5) ] )
gap> [ IsUp2DimensionalMapping( chi1 ), IsDerivation( chi1 ) ];
[ true, true ]
gap> UpImagePositions( chi1 );
[ 1, 1, 1, 2, 2, 2 ]
gap> UpGeneratorImages( chi1 ); 
[ (), (1,2,3)(4,6,5) ]
]]>
</Example>

<ManSection>
   <Oper Name="PrincipalDerivation" 
         Arg="X0 s" />
<Description>
The <E>principal derivation</E> determined by <M>s \in S</M> 
is the derivation <M>\eta_s : R \to S,\; r \mapsto (s^{-1})^rs</M>.  
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> eta := PrincipalDerivation( X3, (1,2,3)(4,6,5) );
DerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], [ (), (1,3,2)(4,5,6) ] )
]]>
</Example>

<ManSection>
   <Oper Name="SectionByHomomorphism"
         Arg="C hom" />
   <Prop Name="IsSection"
         Arg="hom" />
   <Oper Name="SectionByDerivation"
         Arg="chi" />
   <Oper Name="DerivationBySection"
         Arg="xi" />
<Description>
Sections <E>are</E> group homomorphisms, 
so do not need a special representation.
Operations <C>SectionByDerivation</C> and <C>DerivationBySection</C> 
convert derivations to sections, and vice-versa, 
calling <Ref Oper="Cat1GroupOfXMod"/> and <Ref Oper="XModOfCat1Group"/> 
automatically.
<P/>
Two strategies for calculating derivations and sections are implemented,
see <Cite Key="AW1" />.
The default method for <Ref Attr="AllDerivations"/> 
is to search for all possible sets of images using a backtracking procedure, 
and when all the derivations are found it is not known which are regular.
In early versions of this package, the default method for 
<C>AllSections( &lt;C&gt; )</C> was to compute all endomorphisms
on the range group <C>R</C> of <C>C</C> as possibilities 
for the composite <M>h \xi</M>.
A backtrack method then found possible images for such a section.
In the current version the derivations of the associated crossed module
are calculated, and these are all converted to sections 
using <Ref Oper="SectionByDerivation"/>. 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> hom2 := GroupHomomorphismByImages( s3, g18, [ (4,5,6), (2,3)(5,6) ], 
> [ (1,3,2)(4,6,5), (1,2)(4,6) ] );;
gap> xi2 := SectionByHomomorphism( C3, hom2 );                                 
SectionByHomomorphism( s3, g18, [ (4,5,6), (2,3)(5,6) ], 
[ (1,3,2)(4,6,5), (1,2)(4,6) ] )
gap> [ IsUp2DimensionalMapping( xi2 ), IsSection( xi2 ) ];
[ true, true ]
gap> chi2 := DerivationBySection( xi2 );
DerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], 
[ (1,3,2)(4,5,6), (1,2,3)(4,6,5) ] )
gap> xi1 := SectionByDerivation( chi1 );
SectionByHomomorphism( s3, g18, [ (4,5,6), (2,3)(5,6) ], 
[ (1,2,3), (1,2)(4,6) ] )
]]>
</Example>

<ManSection>
   <Attr Name="IdentityDerivation"
         Arg="X0" />
   <Attr Name="IdentitySection"
         Arg="C0" />
<Description>
The identity derivation maps the range group to the identity subgroup 
of the source, while the identity section is just the range embedding 
considered as a section. 
</Description>
</ManSection>
<P/>

<Example>
<![CDATA[
gap> IdentityDerivation( X3 ); 
DerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], [ (), () ] )
gap> IdentitySection(C3);     
SectionByHomomorphism( s3, g18, [ (4,5,6), (2,3)(5,6) ], 
[ (4,5,6), (2,3)(5,6) ] )
]]>
</Example>

<ManSection>
   <Oper Name="WhiteheadProduct"
         Arg="chi1 chi2" />
   <Oper Name="WhiteheadOrder"
         Arg="chi" />
<Description>
The <C>WhiteheadProduct</C> may be applied 
to two derivations to form <M>\chi_1 \star \chi_2</M>,  
or to two sections to form <M>\xi_1 \star \xi_2</M>. 
The <C>WhiteheadOrder</C> of a regular derivation <M>\chi</M> 
is the smallest power of <M>\chi</M>, using this product, 
equal to the <Ref Oper="IdentityDerivation"/>. 
</Description>
</ManSection>
<P/>

<Example>
<![CDATA[
gap> chi12 := WhiteheadProduct( chi1, chi2 );
DerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], [ (1,2,3)(4,6,5), () ] )
gap> xi12 := WhiteheadProduct( xi1, xi2 );
SectionByHomomorphism( s3, g18, [ (4,5,6), (2,3)(5,6) ], 
[ (1,2,3), (2,3)(5,6) ] )
gap> xi12 = SectionByDerivation( chi12 ); 
true 
gap> [ WhiteheadOrder( chi2 ), WhiteheadOrder( xi2 ) ];
[ 2, 2 ]
]]>
</Example>

</Section>



<Section Label="sect-whitehead-monoids">
<Heading>Whitehead Groups and Monoids</Heading>

As mentioned at the beginning of this chapter, 
the Whitehead monoid  <M>{\rm Der}(\calX)</M> of <M>\calX</M> 
is the monoid of all derivations from <M>R</M> to <M>S</M>. 
Monoids of derivations have representation 
<C>IsMonoidOfUp2DimensionalMappingsObj</C>. 
<Index>IsMonoidOfUp2DimensionalMappingsObj</Index> 
Multiplication tables for Whitehead monoids
enable the construction of transformation representations.

<ManSection>
   <Attr Name="AllDerivations"
         Arg="X0" />
   <Attr Name="ImagesTable"
         Arg="obj" />
   <Attr Name="DerivationClass"
         Arg="mon" />
   <Attr Name="WhiteheadMonoidTable"
         Arg="X0" />
   <Attr Name="WhiteheadTransformationMonoid"
         Arg="X0" />
<Description>
Using our example  <C>X3</C> 
we find that there are just nine derivations. 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> all3 := AllDerivations( X3 );
monoid of derivations with images list:
[ (), () ]
[ (), (1,3,2)(4,5,6) ]
[ (), (1,2,3)(4,6,5) ]
[ (1,3,2)(4,5,6), () ]
[ (1,3,2)(4,5,6), (1,3,2)(4,5,6) ]
[ (1,3,2)(4,5,6), (1,2,3)(4,6,5) ]
[ (1,2,3)(4,6,5), () ]
[ (1,2,3)(4,6,5), (1,3,2)(4,5,6) ]
[ (1,2,3)(4,6,5), (1,2,3)(4,6,5) ]
gap> DerivationClass( all3 );
"all"
gap> Perform( ImagesTable( all3 ), Display );
[ 1, 1, 1, 1, 1, 1 ]
[ 1, 1, 1, 3, 3, 3 ]
[ 1, 1, 1, 2, 2, 2 ]
[ 1, 3, 2, 1, 3, 2 ]
[ 1, 3, 2, 3, 2, 1 ]
[ 1, 3, 2, 2, 1, 3 ]
[ 1, 2, 3, 1, 2, 3 ]
[ 1, 2, 3, 3, 1, 2 ]
[ 1, 2, 3, 2, 3, 1 ]
gap> wmt3 := WhiteheadMonoidTable( X3 );; 
gap> Perform( wmt3, Display );
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
[ 2, 3, 1, 5, 6, 4, 8, 9, 7 ]
[ 3, 1, 2, 6, 4, 5, 9, 7, 8 ]
[ 4, 6, 5, 1, 3, 2, 7, 9, 8 ]
[ 5, 4, 6, 2, 1, 3, 8, 7, 9 ]
[ 6, 5, 4, 3, 2, 1, 9, 8, 7 ]
[ 7, 7, 7, 7, 7, 7, 7, 7, 7 ]
[ 8, 8, 8, 8, 8, 8, 8, 8, 8 ]
[ 9, 9, 9, 9, 9, 9, 9, 9, 9 ]
gap> wtm3 := WhiteheadTransformationMonoid( X3 );
<transformation monoid of degree 9 with 3 generators>
gap> GeneratorsOfMonoid( wtm3 ); 
[ Transformation( [ 2, 3, 1, 5, 6, 4, 8, 9, 7 ] ), 
  Transformation( [ 4, 6, 5, 1, 3, 2, 7, 9, 8 ] ), 
  Transformation( [ 7, 7, 7, 7, 7, 7, 7, 7, 7 ] ) ]
]]>
</Example>

<ManSection>
   <Attr Name="RegularDerivations"
         Arg="X0" />
   <Attr Name="ImagesList"
         Arg="obj" />
   <Attr Name="WhiteheadGroupTable"
         Arg="X0" />
   <Attr Name="WhiteheadPermGroup"
         Arg="X0" />
<Description>
<C>RegularDerivations</C> are those derivations which are invertible 
in the monoid. 
Multiplication tables for the Whitehead group 
enable the construction of permutation representations.
<P/>
Of the nine derivations of <C>X3</C> just six are regular.  
The associated group is isomorphic to the symmetric group <C>s3</C>. 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> reg3 := RegularDerivations( X3 );
monoid of derivations with images list:
[ (), () ]
[ (), (1,3,2)(4,5,6) ]
[ (), (1,2,3)(4,6,5) ]
[ (1,3,2)(4,5,6), () ]
[ (1,3,2)(4,5,6), (1,3,2)(4,5,6) ]
[ (1,3,2)(4,5,6), (1,2,3)(4,6,5) ]
gap> wgt3 := WhiteheadGroupTable( X3 );; 
gap> Perform( wgt3, Display );
[ [ 1, 2, 3, 4, 5, 6 ],
  [ 2, 3, 1, 5, 6, 4 ],
  [ 3, 1, 2, 6, 4, 5 ],
  [ 4, 6, 5, 1, 3, 2 ],
  [ 5, 4, 6, 2, 1, 3 ],
  [ 6, 5, 4, 3, 2, 1 ] ]
gap> wpg3 := WhiteheadPermGroup( X3 );
Group([ (1,2,3)(4,5,6), (1,4)(2,6)(3,5) ])
]]>
</Example>

<ManSection>
   <Attr Name="PrincipalDerivations" 
         Arg="X0" /> 
<Description>
The principal derivations form a subgroup of the Whitehead group. 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> PDX3 := PrincipalDerivations( X3 );
monoid of derivations with images list:
[ (), () ]
[ (), (1,3,2)(4,5,6) ]
[ (), (1,2,3)(4,6,5) ]
]]>
</Example>

<ManSection>
   <Attr Name="AllSections"
         Arg="C0" />
   <Attr Name="RegularSections"
         Arg="C0" />
<Description> 
These operations have been declared but are not yet implemented. 
The interested user should, instead, work with the corresponding derivations. 
</Description>
</ManSection>

</Section>

</Chapter>
