The Whitehead monoid Der(calX) of calX was defined in [Whi48] to be the monoid of all *derivations* from R to S, that is the set of all maps χ : R -> S, with *Whitehead multiplication* ⋆ (on the *right*) 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 *regular*. The Whitehead group of calX is the group of regular derivations in Der(calX ). In the next chapter the *actor* of calX is defined as a crossed module whose source and range are permutation representations of the Whitehead group and the automorphism group of calX.

The construction for cat1-groups equivalent to the derivation of a crossed module is the *section*. The monoid of sections of calC = (e;t,h : G -> R) is the set of group homomorphisms ξ : R -> G, with Whitehead multiplication ⋆ (on the *right*) satisfying:

{\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).

The embedding e is the identity for this composition, and h(ξ_1 ⋆ ξ_2) = (h ξ_1)(h ξ_2). A section is *regular* when h ξ is an automorphism, and the group of regular sections is isomorphic to the Whitehead group.

If ϵ denotes the inclusion of S = ker t in G then ∂ = h ϵ : S -> R and

\xi r ~=~ (e r)(e \chi r), \quad\mbox{which equals}\quad (r, \chi r) ~\in~ R \ltimes S,

determines a section ξ of calC in terms of the corresponding derivation χ of calX, and conversely.

`‣ DerivationByImages` ( X0, ims ) | ( operation ) |

`‣ IsDerivation` ( map ) | ( property ) |

`‣ IsUp2DimensionalMapping` ( map ) | ( property ) |

`‣ UpImagePositions` ( chi ) | ( attribute ) |

`‣ UpGeneratorImages` ( chi ) | ( attribute ) |

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 Der 1. The function `IsDerivation`

is automatically called to check that this procedure is well-defined.

In the following example a cat1-group `C3`

and the associated crossed module `X3`

are constructed, where `X3`

is isomorphic to the inclusion of the normal cyclic group `c3`

in the symmetric group `s3`

.

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) ]

`‣ PrincipalDerivation` ( X0, s ) | ( operation ) |

The *principal derivation* determined by s ∈ S is the derivation η_s : R -> S, r ↦ (s^-1)^rs.

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) ] )

`‣ SectionByHomomorphism` ( C, hom ) | ( operation ) |

`‣ IsSection` ( hom ) | ( property ) |

`‣ SectionByDerivation` ( chi ) | ( operation ) |

`‣ DerivationBySection` ( xi ) | ( operation ) |

Sections *are* group homomorphisms, so do not need a special representation. Operations `SectionByDerivation`

and `DerivationBySection`

convert derivations to sections, and vice-versa, calling `Cat1GroupOfXMod`

(2.5-2) and `XModOfCat1Group`

(2.5-2) automatically.

Two strategies for calculating derivations and sections are implemented, see [AW00]. The default method for `AllDerivations`

(5.2-1) 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 `AllSections( <C> )`

was to compute all endomorphisms on the range group `R`

of `C`

as possibilities for the composite h ξ. 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 `SectionByDerivation`

.

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) ] )

`‣ IdentityDerivation` ( X0 ) | ( attribute ) |

`‣ IdentitySection` ( C0 ) | ( attribute ) |

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.

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) ] )

`‣ WhiteheadProduct` ( chi1, chi2 ) | ( operation ) |

`‣ WhiteheadOrder` ( chi ) | ( operation ) |

The `WhiteheadProduct`

may be applied to two derivations to form χ_1 ⋆ χ_2, or to two sections to form ξ_1 ⋆ ξ_2. The `WhiteheadOrder`

of a regular derivation χ is the smallest power of χ, using this product, equal to the `IdentityDerivation`

(5.1-4).

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 ]

As mentioned at the beginning of this chapter, the Whitehead monoid Der(calX) of calX is the monoid of all derivations from R to S. Monoids of derivations have representation `IsMonoidOfUp2DimensionalMappingsObj`

. Multiplication tables for Whitehead monoids enable the construction of transformation representations.

`‣ AllDerivations` ( X0 ) | ( attribute ) |

`‣ ImagesTable` ( obj ) | ( attribute ) |

`‣ DerivationClass` ( mon ) | ( attribute ) |

`‣ WhiteheadMonoidTable` ( X0 ) | ( attribute ) |

`‣ WhiteheadTransformationMonoid` ( X0 ) | ( attribute ) |

Using our example `X3`

we find that there are just nine derivations.

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 ] ) ]

`‣ RegularDerivations` ( X0 ) | ( attribute ) |

`‣ ImagesList` ( obj ) | ( attribute ) |

`‣ WhiteheadGroupTable` ( X0 ) | ( attribute ) |

`‣ WhiteheadPermGroup` ( X0 ) | ( attribute ) |

`RegularDerivations`

are those derivations which are invertible in the monoid. Multiplication tables for the Whitehead group enable the construction of permutation representations.

Of the nine derivations of `X3`

just six are regular. The associated group is isomorphic to the symmetric group `s3`

.

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) ])

`‣ PrincipalDerivations` ( X0 ) | ( attribute ) |

The principal derivations form a subgroup of the Whitehead group.

gap> PDX3 := PrincipalDerivations( X3 ); monoid of derivations with images list: [ (), () ] [ (), (1,3,2)(4,5,6) ] [ (), (1,2,3)(4,6,5) ]

`‣ AllSections` ( C0 ) | ( attribute ) |

`‣ RegularSections` ( C0 ) | ( attribute ) |

These operations have been declared but are not yet implemented. The interested user should, instead, work with the corresponding derivations.

generated by GAPDoc2HTML