  
  [1X10 [33X[0;0YCrossed modules of groupoids[133X[101X
  
  [33X[0;0YThe material documented in this chapter is experimental, and is likely to be
  changed in due course.[133X
  
  
  [1X10.1 [33X[0;0YConstructions for crossed modules of groupoids[133X[101X
  
  [33X[0;0YA typical example of a crossed module [22XcalX[122X over a groupoid has for its range
  a  connected  groupoid.  This is a direct product of a group with a complete
  graph,  and  we  call  the  vertices of the graph the [13Xobjects[113X of the crossed
  module.  The  source  of [22XcalX[122X is a groupoid, with the same objects, which is
  either  discrete or connected. The boundary morphism is constant on objects.
  For details and other references see [AW10].[133X
  
  [1X10.1-1 PreXModWithObjectsByBoundaryAndAction[101X
  
  [33X[1;0Y[29X[2XPreXModWithObjectsByBoundaryAndAction[102X( [3Xbdy[103X, [3Xact[103X ) [32X operation[133X
  
  [33X[0;0YThis     is     the     groupoid    generalisation    of    the    operation
  [10XPreXModByBoundaryAndAction[110X.[133X
  
  [1X10.1-2 SinglePiecePreXModWithObjects[101X
  
  [33X[1;0Y[29X[2XSinglePiecePreXModWithObjects[102X( [3Xpxmod[103X, [3Xobs[103X, [3Xisdisc[103X ) [32X operation[133X
  
  [33X[0;0YAt  present the experimental operation [10XSinglePiecePreXModWithObjects[110X accepts
  a  precrossed module [10Xpxmod[110X, a set of objects [10Xobs[110X, and a boolean [10Xisdisc[110X which
  is  [9Xtrue[109X when the source groupoid is homogeneous and discrete and [9Xfalse[109X when
  the  source  groupoid  is  connected. Other operations will be added as time
  permits.[133X
  
  [33X[0;0YIn the example the crossed module [10XDX4[110X has discrete source, while the crossed
  module  [10XCX4[110X  has  connected  source.  These  are groupoid generalisations of
  [2XXModByNormalSubgroup[102X ([14X2.1-2[114X) and the example [10XX4[110X in [2XNormalSubXMods[102X ([14X2.2-2[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XCX4 := SinglePiecePreXModWithObjects( X4, [-6,-5,-4], false );[127X[104X
    [4X[28Xsingle piece precrossed module with objects[128X[104X
    [4X[28X  source groupoid:[128X[104X
    [4X[28X    single piece groupoid: < a4, [ -6, -5, -4 ] >[128X[104X
    [4X[28X  and range groupoid:[128X[104X
    [4X[28X    single piece groupoid: < s4, [ -6, -5, -4 ] >[128X[104X
    [4X[25Xgap>[125X [27XSetName( CX4, "CX4" );[127X[104X
    [4X[25Xgap>[125X [27XCa4 := Source( CX4 );;  SetName( Ca4, "Ca4" );[127X[104X
    [4X[25Xgap>[125X [27XCs4 := Range( CX4 );;  SetName( Cs4, "Cs4" );[127X[104X
    [4X[25Xgap>[125X [27XDX4 := SinglePiecePreXModWithObjects( X4, [-9,-8,-7], true );[127X[104X
    [4X[28Xsingle piece precrossed module with objects[128X[104X
    [4X[28X  source groupoid:[128X[104X
    [4X[28X    homogeneous, discrete groupoid: < a4, [ -9, -8, -7 ] >[128X[104X
    [4X[28X  and range groupoid:[128X[104X
    [4X[28X    single piece groupoid: < s4, [ -9, -8, -7 ] >[128X[104X
    [4X[25Xgap>[125X [27XSetName( DX4, "DX4" );[127X[104X
    [4X[25Xgap>[125X [27XDa4 := Source( DX4 );;  SetName( Da4, "Da4" );[127X[104X
    [4X[25Xgap>[125X [27XDs4 := Range( DX4 );;  SetName( Ds4, "Ds4" );[127X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X10.1-3 IsXModWithObjects[101X
  
  [33X[1;0Y[29X[2XIsXModWithObjects[102X( [3Xpxmod[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPreXModWithObjects[102X( [3Xpxmod[103X ) [32X property[133X
  
  [33X[0;0YThe     precrossed     module     [10XCX4[110X     belongs     to     the    category
  [10XIs2DimensionalGroupWithObjects[110X and is, of course, a crossed module.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XSet( KnownPropertiesOfObject( CX4 ) );[127X[104X
    [4X[28X[ "CanEasilyCompareElements", "CanEasilySortElements", "IsAssociative", [128X[104X
    [4X[28X  "IsDuplicateFree", "IsGeneratorsOfSemigroup", "IsPreXModWithObjects", [128X[104X
    [4X[28X  "IsSinglePieceDomain", "IsXModWithObjects" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X10.1-4 IsPermPreXModWithObjects[101X
  
  [33X[1;0Y[29X[2XIsPermPreXModWithObjects[102X( [3Xpxmod[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPcPreXModWithObjects[102X( [3Xpxmod[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsFpPreXModWithObjects[102X( [3Xpxmod[103X ) [32X property[133X
  
  [33X[0;0YTo test these properties we test the precrossed modules from which they were
  constructed.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIsPermPreXModWithObjects( CX4 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsPcPreXModWithObjects( CX4 );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsFpPreXModWithObjects( CX4 );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X10.1-5 Root2dGroup[101X
  
  [33X[1;0Y[29X[2XRoot2dGroup[102X( [3Xpxmod[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XXModAction[102X( [3Xpxmod[103X ) [32X attribute[133X
  
  [33X[0;0YThe  attributes  of  a  precrossed  module with objects include the standard
  [10XSource[110X;  [10XRange[110X;  [2XBoundary[102X ([14X2.1-9[114X); and [2XXModAction[102X ([14X2.1-9[114X) as with precrossed
  modules  of  groups.  There is also [10XObjectList[110X, as in the [5Xgroupoids[105X package.
  Additionally  there is [10XRoot2dGroup[110X which is the underlying precrossed module
  used in the construction.[133X
  
  [33X[0;0YNote that [10XXModAction[110X is now a groupoid homomorphism from the source groupoid
  to a one-object groupoid (with object [10X0[110X) where the group is the automorphism
  group of the range groupoid.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XRoot2dGroup( CX4 );[127X[104X
    [4X[28X[a4->s4][128X[104X
    [4X[25Xgap>[125X [27XactC := XModAction( CX4 );;[127X[104X
    [4X[25Xgap>[125X [27XSize( Range( actC ) );[127X[104X
    [4X[28X20736[128X[104X
    [4X[25Xgap>[125X [27Xr1 := Arrow( Cs4, (1,2,3,4), -4, -5 );;[127X[104X
    [4X[25Xgap>[125X [27Xir1 := ImageElm( actC, r1 );[127X[104X
    [4X[28X[groupoid homomorphism : Ca4 -> Ca4[128X[104X
    [4X[28X[ [ [(1,2,3) : -6 -> -6], [(2,3,4) : -6 -> -6], [() : -6 -> -5], [128X[104X
    [4X[28X      [() : -6 -> -4] ], [128X[104X
    [4X[28X  [ [(2,3,4) : -4 -> -4], [(1,3,4) : -4 -> -4], [() : -4 -> -6], [128X[104X
    [4X[28X      [() : -4 -> -5] ] ] : 0 -> 0][128X[104X
    [4X[25Xgap>[125X [27Xs1 := Arrow( Ca4, (1,2,4), -5, -5 );;[127X[104X
    [4X[25Xgap>[125X [27X##  calculate s1^r1 [127X[104X
    [4X[25Xgap>[125X [27Xims1 := ImageElmXModAction( CX4, s1, r1 );[127X[104X
    [4X[28X[(1,2,3) : -6 -> -6][128X[104X
    [4X[25Xgap>[125X [27X## repeat using DX4[127X[104X
    [4X[25Xgap>[125X [27XactD := XModAction( DX4 );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( Range( actD ), "autD" );[127X[104X
    [4X[25Xgap>[125X [27XSize( Range( actD ) );[127X[104X
    [4X[28X82944[128X[104X
    [4X[25Xgap>[125X [27Xr2 := Arrow( Ds4, (1,2,3,4), -7, -8 );;[127X[104X
    [4X[25Xgap>[125X [27XImageElm( actD, r2 );[127X[104X
    [4X[28X[groupoid homomorphism : Da4 -> Da4[128X[104X
    [4X[28X : 0 -> 0][128X[104X
    [4X[25Xgap>[125X [27Xs2 := Arrow( Da4, (1,2,4), -8, -8 );;[127X[104X
    [4X[25Xgap>[125X [27X##  calculate s2^r2 [127X[104X
    [4X[25Xgap>[125X [27Xims2 := ImageElmXModAction( DX4, s2, r2 );[127X[104X
    [4X[28X[(1,2,3) : -9 -> -9][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YThere is much more to be done with these constructions.[133X
  
