  
  [1X12 [33X[0;0YUtility functions[133X[101X
  
  [33X[0;0YBy a utility function we mean a [5XGAP[105X function which is[133X
  
  [30X    [33X[0;6Yneeded by other functions in this package,[133X
  
  [30X    [33X[0;6Ynot (as far as we know) provided by the standard [5XGAP[105X library,[133X
  
  [30X    [33X[0;6Ymore suitable for inclusion in the main library than in this package.[133X
  
  [33X[0;0YSections  on  [13XPrinting  Lists[113X  and  [13XDistinct and Common Representatives[113X were
  moved to the [5XUtils[105X package with version 2.56.[133X
  
  
  [1X12.1 [33X[0;0YInclusion and Restriction Mappings[133X[101X
  
  [33X[0;0YThese functions have been moved to the [5Xgpd[105X package, but are still documented
  here.[133X
  
  [1X12.1-1 InclusionMappingGroups[101X
  
  [33X[1;0Y[29X[2XInclusionMappingGroups[102X( [3XG[103X, [3XH[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XMappingToOne[102X( [3XG[103X, [3XH[103X ) [32X operation[133X
  
  [33X[0;0YThis  set  of utilities concerns mappings. The map [10Xincd8[110X is the inclusion of
  [10Xd8[110X  in [10Xd16[110X used in Section [14X3.4[114X. [10XMappingToOne(G,H)[110X maps the whole of [22XG[122X to the
  identity element in [22XH[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XPrint( incd8, "\n" );[127X[104X
    [4X[28X[ (11,13,15,17)(12,14,16,18), (11,18)(12,17)(13,16)(14,15) ] ->[128X[104X
    [4X[28X[ (11,13,15,17)(12,14,16,18), (11,18)(12,17)(13,16)(14,15) ][128X[104X
    [4X[25Xgap>[125X [27Ximd8 := Image( incd8 );;[127X[104X
    [4X[25Xgap>[125X [27XMappingToOne( c4, imd8 );[127X[104X
    [4X[28X[ (11,13,15,17)(12,14,16,18) ] -> [ () ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X12.1-2 InnerAutomorphismsByNormalSubgroup[101X
  
  [33X[1;0Y[29X[2XInnerAutomorphismsByNormalSubgroup[102X( [3XG[103X, [3XN[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XIsGroupOfAutomorphisms[102X( [3XA[103X ) [32X property[133X
  
  [33X[0;0YInner  automorphisms of a group [10XG[110X by the elements of a normal subgroup [10XN[110X are
  calculated with the first of these functions, usually with [10XG[110X = [10XN[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xautd8 := AutomorphismGroup( d8 );;[127X[104X
    [4X[25Xgap>[125X [27Xinnd8 := InnerAutomorphismsByNormalSubgroup( d8, d8 );;[127X[104X
    [4X[25Xgap>[125X [27XGeneratorsOfGroup( innd8 );[127X[104X
    [4X[28X[ ^(1,2,3,4), ^(1,3) ][128X[104X
    [4X[25Xgap>[125X [27XIsGroupOfAutomorphisms( innd8 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X12.2 [33X[0;0YAbelian Modules[133X[101X
  
  [1X12.2-1 AbelianModuleObject[101X
  
  [33X[1;0Y[29X[2XAbelianModuleObject[102X( [3Xgrp[103X, [3Xact[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XIsAbelianModule[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XAbelianModuleGroup[102X( [3Xobj[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XAbelianModuleAction[102X( [3Xobj[103X ) [32X attribute[133X
  
  [33X[0;0YAn  abelian  module  is an abelian group together with a group action. These
  are used by the crossed module constructor [2XXModByAbelianModule[102X ([14X2.1-7[114X).[133X
  
  [33X[0;0YThe    resulting    [10XXabmod[110X    is    isomorphic    to    the    output   from
  [10XXModByAutomorphismGroup( k4 );[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xx := (6,7)(8,9);;  y := (6,8)(7,9);;  z := (6,9)(7,8);;[127X[104X
    [4X[25Xgap>[125X [27Xk4a := Group( x, y );;  SetName( k4a, "k4a" );[127X[104X
    [4X[25Xgap>[125X [27Xgens3a := [ (1,2), (2,3) ];;[127X[104X
    [4X[25Xgap>[125X [27Xs3a := Group( gens3a );;  SetName( s3a, "s3a" );[127X[104X
    [4X[25Xgap>[125X [27Xalpha := GroupHomomorphismByImages( k4a, k4a, [x,y], [y,x] );;[127X[104X
    [4X[25Xgap>[125X [27Xbeta := GroupHomomorphismByImages( k4a, k4a, [x,y], [x,z] );;[127X[104X
    [4X[25Xgap>[125X [27Xauta := Group( alpha, beta );;[127X[104X
    [4X[25Xgap>[125X [27Xacta := GroupHomomorphismByImages( s3a, auta, gens3a, [alpha,beta] );;[127X[104X
    [4X[25Xgap>[125X [27Xabmod := AbelianModuleObject( k4a, acta );;[127X[104X
    [4X[25Xgap>[125X [27XXabmod := XModByAbelianModule( abmod );[127X[104X
    [4X[28X[k4a->s3a][128X[104X
    [4X[25Xgap>[125X [27XDisplay( Xabmod );[127X[104X
    [4X[28X[128X[104X
    [4X[28XCrossed module [k4a->s3a] :- [128X[104X
    [4X[28X: Source group k4a has generators:[128X[104X
    [4X[28X  [ (6,7)(8,9), (6,8)(7,9) ][128X[104X
    [4X[28X: Range group s3a has generators:[128X[104X
    [4X[28X  [ (1,2), (2,3) ][128X[104X
    [4X[28X: Boundary homomorphism maps source generators to:[128X[104X
    [4X[28X  [ (), () ][128X[104X
    [4X[28X: Action homomorphism maps range generators to automorphisms:[128X[104X
    [4X[28X  (1,2) --> { source gens --> [ (6,8)(7,9), (6,7)(8,9) ] }[128X[104X
    [4X[28X  (2,3) --> { source gens --> [ (6,7)(8,9), (6,9)(7,8) ] }[128X[104X
    [4X[28X  These 2 automorphisms generate the group of automorphisms.[128X[104X
    [4X[28X[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
