  
  [1X9 [33X[0;0YCrossed modules of groupoids[133X[101X
  
  [33X[0;0YThe material documented in this chapter is experimental, and is likely to be
  changed very soon.[133X
  
  
  [1X9.1 [33X[0;0YConstructions for crossed modules of groupoids[133X[101X
  
  [33X[0;0YA  typical  example of a crossed module [22XmathcalX[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 [22XmathcalX[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
  
  [1X9.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  [10Xtrue[110X when the source groupoid is homogeneous and discrete and [10Xfalse[110X 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-1[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[28Xprecrossed module with source groupoid:[128X[104X
    [4X[28Xhomogeneous, discrete groupoid: < a4, [ -9, -8, -7 ] >[128X[104X
    [4X[28Xand range groupoid:[128X[104X
    [4X[28Xsingle 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[28Xprecrossed module with source groupoid:[128X[104X
    [4X[28Xsingle piece groupoid: < a4, [ -9, -8, -7 ] >[128X[104X
    [4X[28Xand range groupoid:[128X[104X
    [4X[28Xsingle 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
  
  [1X9.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 [27XIsXModWithObjects( DX4 ); [127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XKnownPropertiesOfObject( DX4 ); [127X[104X
    [4X[28X[ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree", [128X[104X
    [4X[28X  "IsGeneratorsOfSemigroup", "IsSinglePieceDomain", [128X[104X
    [4X[28X  "IsDirectProductWithCompleteDigraphDomain", "IsPreXModWithObjects", [128X[104X
    [4X[28X  "IsXModWithObjects" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X9.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
  
  [1X9.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-2[114X); and [2XXModAction[102X ([14X2.1-2[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 [27Xr := Arrow( Cs4, (1,2,3,4), -7, -8 );; [127X[104X
    [4X[25Xgap>[125X [27XImageElm( act, r );            [127X[104X
    [4X[28X[groupoid homomorphism : [128X[104X
    [4X[28X[ [ [(1,2,3) : -9 -> -9], [(2,3,4) : -9 -> -9], [() : -9 -> -8], [128X[104X
    [4X[28X      [() : -9 -> -7] ], [128X[104X
    [4X[28X  [ [(2,3,4) : -9 -> -9], [(1,3,4) : -9 -> -9], [() : -9 -> -7], [128X[104X
    [4X[28X      [() : -9 -> -8] ] ] : 0 -> 0][128X[104X
    [4X[25Xgap>[125X [27Xs := Arrow( Ca4, (1,2,4), -8, -8 );;[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) : -7 -> -7][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YThere is much more to be done with these constructions.[133X
  
