  
  [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 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  equivalents  of
  [2XXModByNormalSubgroup[102X ([14X2.1-2[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xs4 := Group( (1,2,3,4), (3,4) );; [127X[104X
    [4X[25Xgap>[125X [27XSetName( s4, "s4" );[127X[104X
    [4X[25Xgap>[125X [27Xa4 := Subgroup( s4, [ (1,2,3), (2,3,4) ] );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( a4, "a4" );[127X[104X
    [4X[25Xgap>[125X [27XX4 := XModByNormalSubgroup( s4, a4 );; [127X[104X
    [4X[25Xgap>[125X [27XDX4 := SinglePiecePreXModWithObjects( X4, [-9,-8,-7], true );[127X[104X
    [4X[28Xsingle piece crossed 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 [27XDa4 := Source( DX4 );; [127X[104X
    [4X[25Xgap>[125X [27XDs4 := Range( DX4 );;[127X[104X
    [4X[25Xgap>[125X [27XCX4 := SinglePiecePreXModWithObjects( X4, [-9,-8,-7], false );[127X[104X
    [4X[28Xsingle piece crossed module with objects[128X[104X
    [4X[28X  source groupoid:[128X[104X
    [4X[28X    single piece 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 [27XCa4 := Source( CX4 );; [127X[104X
    [4X[25Xgap>[125X [27XCs4 := Range( CX4 );;[127X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X10.1-2 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[1;0Y[29X[2XIsDirectProductWithCompleteDigraphDomain[102X( [3Xpxmod[103X ) [32X property[133X
  
  [33X[0;0YThe     precrossed     module     [10XDX4[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( DX4 ) ); [127X[104X
    [4X[28X[ "CanEasilyCompareElements", "CanEasilySortElements", "IsAssociative", [128X[104X
    [4X[28X  "IsDirectProductWithCompleteDigraphDomain", "IsDuplicateFree", [128X[104X
    [4X[28X  "IsGeneratorsOfSemigroup", "IsPreXModWithObjects", "IsSinglePieceDomain", [128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X10.1-3 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-4 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 [27XSet( KnownAttributesOfObject( CX4 ) ); [127X[104X
    [4X[28X[ "Boundary", "ObjectList", "Range", "Root2dGroup", "Source", "XModAction" ][128X[104X
    [4X[25Xgap>[125X [27XRoot2dGroup( CX4 ); [127X[104X
    [4X[28X[a4->s4][128X[104X
    [4X[25Xgap>[125X [27Xact := XModAction( CX4 );; [127X[104X
    [4X[25Xgap>[125X [27XSize( Range( act ) ); [127X[104X
    [4X[28X20736[128X[104X
    [4X[25Xgap>[125X [27Xr := Arrow( Cs4, (1,2,3,4), -4, -5 );; [127X[104X
    [4X[25Xgap>[125X [27XImageElm( act, r );            [127X[104X
    [4X[28X[groupoid homomorphism : [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) : -6 -> -6], [(1,3,4) : -6 -> -6], [() : -6 -> -4], [128X[104X
    [4X[28X      [() : -6 -> -5] ] ] : 0 -> 0][128X[104X
    [4X[25Xgap>[125X [27Xs := Arrow( Ca4, (1,2,4), -5, -5 );;[127X[104X
    [4X[25Xgap>[125X [27X##  calculate s^r [127X[104X
    [4X[25Xgap>[125X [27Xims := ImageElmXModAction( CX4, s, r );[127X[104X
    [4X[28X[(1,2,3) : -4 -> -4][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YThere is much more to be done with these constructions.[133X
  
