  
  [1X4 Derivations and Sections[0X
  
  
  [1X4.1 Whitehead Multiplication[0X
  
  [1X4.1-1 IsDerivation[0m
  
  [2X> IsDerivation( [0X[3Xmap[0X[2X ) ______________________________________________[0Xproperty
  [2X> IsSection( [0X[3Xmap[0X[2X ) _________________________________________________[0Xproperty
  [2X> IsUp2dMapping( [0X[3Xmap[0X[2X ) _____________________________________________[0Xproperty
  
  The  Whitehead monoid Der(mathcalX) of mathcalX was defined in [Whi48] to be
  the monoid of all [13Xderivations[0m from R to S, that is the set of all maps chi :
  R -> S, with [13XWhitehead multiplication[0m star (on the [13Xright[0m) satisfying:
  
  
       {\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).
  
  
  The  zero  map  is the identity for this composition. Invertible elements in
  the  monoid are called [13Xregular[0m. The Whitehead group of mathcalX is the group
  of  regular  derivations in Der(mathcalX ). In the next chapter the [13Xactor[0m of
  mathcalX  is  defined  as  a  crossed  module  whose  source  and  range are
  permutation  representations  of  the  Whitehead  group and the automorphism
  group of mathcalX.
  
  The  construction  for cat1-groups equivalent to the derivation of a crossed
  module is the [13Xsection[0m. The monoid of sections of mathcalC = (e;t,h : G -> R)
  is the set of group homomorphisms xi : R -> G, with Whitehead multiplication
  star, (on the [13Xright[0m) satisfying:
  
  
       {\bf Sect\ 1}: t \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).
  
  
  The  embedding e is the identity for this composition, and h(xi_1 star xi_2)
  =  (h  xi_1)(h xi_2). A section is [13Xregular[0m when h xi is an automorphism, and
  the group of regular sections is isomorphic to the Whitehead group.
  
  If  epsilon denotes the inclusion of S = ker t in G then partial = h epsilon
  : S -> R and
  
  
       \xi r ~=~ (e r)(e \chi r) ~=~ (r, \chi r)
  
  
  determines a section xi of mathcalC in terms of the corresponding derivation
  chi of mathcalX, and conversely.
  
  [1X4.1-2 DerivationByImages[0m
  
  [2X> DerivationByImages( [0X[3XX0, ims[0X[2X ) ___________________________________[0Xoperation
  [2X> Object2d( [0X[3Xchi[0X[2X ) _________________________________________________[0Xattribute
  [2X> GeneratorImages( [0X[3Xchi[0X[2X ) __________________________________________[0Xattribute
  
  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 {\bf Der\ 1}. The function [10XIsDerivation[0m is automatically called
  to check that this procedure is well-defined.
  
  In  the  following example a cat1-group [10XC3[0m and the associated crossed module
  [10XX3[0m  are  constructed,  where [10XX3[0m is isomorphic to the inclusion of the normal
  cyclic group [10Xc3[0m in the symmetric group [10Xs3[0m.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X[0X
    [4Xgap> g18 := Group( (1,2,3), (4,5,6), (2,3)(5,6) );;[0X
    [4Xgap> SetName( g18, "g18" );[0X
    [4Xgap> gen18 := GeneratorsOfGroup( g18 );;[0X
    [4Xgap> g1 := gen18[1];;  g2 := gen18[2];;  g3 := gen18[3];;[0X
    [4Xgap> s3 := Subgroup( g18, gen18{[2..3]} );;[0X
    [4Xgap> SetName( s3, "s3" );;[0X
    [4Xgap> t := GroupHomomorphismByImages( g18, s3, gen18, [g2,g2,g3] );;[0X
    [4Xgap> h := GroupHomomorphismByImages( g18, s3, gen18, [(),g2,g3] );;[0X
    [4Xgap> e := GroupHomomorphismByImages( s3, g18, [g2,g3], [g2,g3] );;[0X
    [4Xgap> C3 := Cat1( t, h, e );[0X
    [4X[g18=>s3][0X
    [4Xgap> SetName( Kernel(t), "c3" );;[0X
    [4Xgap> X3 := XModOfCat1( C3 );;[0X
    [4Xgap> Display( X3 );[0X
    [4XCrossed module [c3->s3] :-[0X
    [4X: Source group has generators:[0X
    [4X  [ ( 1, 2, 3)( 4, 6, 5) ][0X
    [4X: Range group has generators:[0X
    [4X  [ (4,5,6), (2,3)(5,6) ][0X
    [4X: Boundary homomorphism maps source generators to:[0X
    [4X  [ (4,6,5) ][0X
    [4X: Action homomorphism maps range generators to automorphisms:[0X
    [4X  (4,5,6) --> { source gens --> [ (1,2,3)(4,6,5) ] }[0X
    [4X  (2,3)(5,6) --> { source gens --> [ (1,3,2)(4,5,6) ] }[0X
    [4X  These 2 automorphisms generate the group of automorphisms.[0X
    [4X: associated cat1-group is [g18=>s3][0X
    [4X[0X
    [4Xgap> imchi := [ (1,2,3)(4,6,5), (1,2,3)(4,6,5) ];;[0X
    [4Xgap> chi := DerivationByImages( X3, imchi );[0X
    [4XDerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ],[0X
    [4X[ (1,2,3)(4,6,5), (1,2,3)(4,6,5) ] )[0X
    [4X[0X
  [4X------------------------------------------------------------------[0X
  
  [1X4.1-3 SectionByImages[0m
  
  [2X> SectionByImages( [0X[3XC, ims[0X[2X ) _______________________________________[0Xoperation
  [2X> SectionByDerivation( [0X[3Xchi[0X[2X ) ______________________________________[0Xoperation
  [2X> DerivationBySection( [0X[3Xxi[0X[2X ) _______________________________________[0Xoperation
  
  Sections  [13Xare[0m  group homomorphisms, so do not need a special representation.
  Operations  [10XSectionByDerivation[0m  and [10XDerivationBySection[0m convert derivations
  to   sections,   and   vice-versa,   calling   [10XCat1OfXMod[0m   and   [10XXModOfCat1[0m
  automatically.
  
  Two strategies for calculating derivations and sections are implemented, see
  [AW00].  The default method for [10XAllDerivations[0m 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 the [5XGAP[0m3 version of this
  package,  the  default  method  for  [10XAllSections(  <C>  )[0m was to compute all
  endomorphisms on the range group [10XR[0m of [10XC[0m as possibilities for the composite h
  xi. 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
  [10XSectionByDerivation[0m.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X[0X
    [4Xgap> xi := SectionByDerivation( chi );[0X
    [4X[ (4,5,6), (2,3)(5,6) ] -> [ (1,2,3), (1,2)(4,6) ][0X
    [4X[0X
  [4X------------------------------------------------------------------[0X
  
  
  [1X4.2 Whitehead Groups and Monoids[0X
  
  [1X4.2-1 RegularDerivations[0m
  
  [2X> RegularDerivations( [0X[3XX0[0X[2X ) ________________________________________[0Xattribute
  [2X> AllDerivations( [0X[3XX0[0X[2X ) ____________________________________________[0Xattribute
  [2X> RegularSections( [0X[3XC0[0X[2X ) ___________________________________________[0Xattribute
  [2X> AllSections( [0X[3XC0[0X[2X ) _______________________________________________[0Xattribute
  [2X> ImagesList( [0X[3Xobj[0X[2X ) _______________________________________________[0Xattribute
  [2X> ImagesTable( [0X[3Xobj[0X[2X ) ______________________________________________[0Xattribute
  
  There are two functions to determine the elements of the Whitehead group and
  the   Whitehead   monoid   of   mathcalX0,   namely  [10XRegularDerivations[0m  and
  [10XAllDerivations[0m.  (The  functions  [10XRegularSections[0m  and  [10XAllSections[0m  perform
  corresponding tasks for a cat1-group.)
  
  Using  our  example  [10XX3[0m we find that there are just nine derivations, six of
  them regular, and the associated group is isomorphic to [10Xs3[0m.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X[0X
    [4Xgap> all3 := AllDerivations( X3 );;[0X
    [4Xgap> imall3 := ImagesList( all3 );; Display( imall3 );[0X
    [4X[ [ (), () ],[0X
    [4X  [ (), ( 1, 2, 3)( 4, 6, 5) ],[0X
    [4X  [ (), ( 1, 3, 2)( 4, 5, 6) ],[0X
    [4X  [ ( 1, 2, 3)( 4, 6, 5), () ],[0X
    [4X  [ ( 1, 2, 3)( 4, 6, 5), ( 1, 2, 3)( 4, 6, 5) ],[0X
    [4X  [ ( 1, 2, 3)( 4, 6, 5), ( 1, 3, 2)( 4, 5, 6) ],[0X
    [4X  [ ( 1, 3, 2)( 4, 5, 6), () ],[0X
    [4X  [ ( 1, 3, 2)( 4, 5, 6), ( 1, 2, 3)( 4, 6, 5) ],[0X
    [4X  [ ( 1, 3, 2)( 4, 5, 6), ( 1, 3, 2)( 4, 5, 6) ][0X
    [4X  ][0X
    [4Xgap> KnownAttributesOfObject( all3 );[0X
    [4X[ "Object2d", "ImagesList", "AllOrRegular", "ImagesTable" ][0X
    [4Xgap> Display( ImagesTable( all3 ) );[0X
    [4X[ [  1,  1,  1,  1,  1,  1 ],[0X
    [4X  [  1,  1,  1,  2,  2,  2 ],[0X
    [4X  [  1,  1,  1,  3,  3,  3 ],[0X
    [4X  [  1,  2,  3,  1,  2,  3 ],[0X
    [4X  [  1,  2,  3,  2,  3,  1 ],[0X
    [4X  [  1,  2,  3,  3,  1,  2 ],[0X
    [4X  [  1,  3,  2,  1,  3,  2 ],[0X
    [4X  [  1,  3,  2,  2,  1,  3 ],[0X
    [4X  [  1,  3,  2,  3,  2,  1 ] ][0X
    [4X[0X
  [4X------------------------------------------------------------------[0X
  
  [1X4.2-2 CompositeDerivation[0m
  
  [2X> CompositeDerivation( [0X[3Xchi1, chi2[0X[2X ) _______________________________[0Xoperation
  [2X> ImagePositions( [0X[3Xchi[0X[2X ) ___________________________________________[0Xattribute
  [2X> CompositeSection( [0X[3Xxi1, xi2[0X[2X ) ____________________________________[0Xoperation
  
  The    Whitehead    product    chi_1    star   chi_2   is   implemented   as
  [10XCompositeDerivation( <chi1>, <chi2> )[0m. The composite of two sections is just
  the composite of homomorphisms.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X[0X
    [4Xgap> reg3 := RegularDerivations( X3 );;[0X
    [4Xgap> imder3 := ImagesList( reg3 );;[0X
    [4Xgap> chi4 := DerivationByImages( X3, imder3[4] );[0X
    [4XDerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], [0X
    [4X[ ( 1, 3, 2)( 4, 5, 6), () ] )[0X
    [4Xgap> chi5 := DerivationByImages( X3, imder3[5] );[0X
    [4XDerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], [0X
    [4X[ ( 1, 3, 2)( 4, 5, 6), ( 1, 2, 3)( 4, 6, 5) ] )[0X
    [4Xgap> im4 := ImagePositions( chi4 );[0X
    [4X[ 1, 3, 2, 1, 3, 2 ] [0X
    [4Xgap> im5 := ImagePositions( chi5 );[0X
    [4X[ 1, 3, 2, 2, 1, 3 ] [0X
    [4Xgap> chi45 := chi4 * chi5;[0X
    [4XDerivationByImages( s3, c3, [ (4,5,6), (2,3)(5,6) ], [0X
    [4X[ (), ( 1, 2, 3)( 4, 6, 5) ] )[0X
    [4Xgap> im45 := ImagePositions( chi45 );[0X
    [4X[ 1, 1, 1, 2, 2, 2 ]  [0X
    [4Xgap> pos := Position( imder3, GeneratorImages( chi45 ) );[0X
    [4X2[0X
    [4X[0X
  [4X------------------------------------------------------------------[0X
  
  [1X4.2-3 WhiteheadGroupTable[0m
  
  [2X> WhiteheadGroupTable( [0X[3XX0[0X[2X ) _______________________________________[0Xattribute
  [2X> WhiteheadMonoidTable( [0X[3XX0[0X[2X ) ______________________________________[0Xattribute
  [2X> WhiteheadPermGroup( [0X[3XX0[0X[2X ) ________________________________________[0Xattribute
  [2X> WhiteheadTransMonoid( [0X[3XX0[0X[2X ) ______________________________________[0Xattribute
  
  Multiplication   tables  for  the  Whitehead  group  or  monoid  enable  the
  construction of permutation or transformation representations.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4X[0X
    [4Xgap> wgt3 := WhiteheadGroupTable( X3 );; Display( wgt3 );[0X
    [4X[ [  1,  2,  3,  4,  5,  6 ],[0X
    [4X  [  2,  3,  1,  5,  6,  4 ],[0X
    [4X  [  3,  1,  2,  6,  4,  5 ],[0X
    [4X  [  4,  6,  5,  1,  3,  2 ],[0X
    [4X  [  5,  4,  6,  2,  1,  3 ],[0X
    [4X  [  6,  5,  4,  3,  2,  1 ] ][0X
    [4Xgap> wpg3 := WhiteheadPermGroup( X3 );[0X
    [4XGroup([ (1,2,3)(4,5,6), (1,4)(2,6)(3,5) ])[0X
    [4Xgap> wmt3 := WhiteheadMonoidTable( X3 );; Display( wmt3 );[0X
    [4X[ [  1,  2,  3,  4,  5,  6,  7,  8,  9 ],[0X
    [4X  [  2,  3,  1,  5,  6,  4,  8,  9,  7 ],[0X
    [4X  [  3,  1,  2,  6,  4,  5,  9,  7,  8 ],[0X
    [4X  [  4,  4,  4,  4,  4,  4,  4,  4,  4 ],[0X
    [4X  [  5,  5,  5,  5,  5,  5,  5,  5,  5 ],[0X
    [4X  [  6,  6,  6,  6,  6,  6,  6,  6,  6 ],[0X
    [4X  [  7,  9,  8,  4,  6,  5,  1,  3,  2 ],[0X
    [4X  [  8,  7,  9,  5,  4,  6,  2,  1,  3 ],[0X
    [4X  [  9,  8,  7,  6,  5,  4,  3,  2,  1 ] ][0X
    [4Xgap> wtm3 := WhiteheadTransMonoid( X3 );[0X
    [4XMonoid( [ Transformation( [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ),[0X
    [4X  Transformation( [ 2, 3, 1, 5, 6, 4, 8, 9, 7 ] ),[0X
    [4X  Transformation( [ 3, 1, 2, 6, 4, 5, 9, 7, 8 ] ),[0X
    [4X  Transformation( [ 4, 4, 4, 4, 4, 4, 4, 4, 4 ] ),[0X
    [4X  Transformation( [ 5, 5, 5, 5, 5, 5, 5, 5, 5 ] ),[0X
    [4X  Transformation( [ 6, 6, 6, 6, 6, 6, 6, 6, 6 ] ),[0X
    [4X  Transformation( [ 7, 9, 8, 4, 6, 5, 1, 3, 2 ] ),[0X
    [4X  Transformation( [ 8, 7, 9, 5, 4, 6, 2, 1, 3 ] ),[0X
    [4X  Transformation( [ 9, 8, 7, 6, 5, 4, 3, 2, 1 ] ) ], ... )[0X
    [4X[0X
  [4X------------------------------------------------------------------[0X
  
