9 Crossed modules of groupoids The material documented in this chapter is experimental, and is likely to be changed very soon. 9.1 Constructions for crossed modules of groupoids A typical example of a crossed module mathcalX 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 objects of the crossed module. The source of mathcalX 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]. 9.1-1 SinglePiecePreXModWithObjects SinglePiecePreXModWithObjects( pxmod, obs, isdisc )  operation At present the experimental operation SinglePiecePreXModWithObjects accepts a precrossed module pxmod, a set of objects obs, and a boolean isdisc which is true when the source groupoid is homogeneous and discrete and false when the source groupoid is connected. Other operations will be added as time permits. In the example the crossed module DX4 has discrete source, and is a groupoid equivalent of XModByNormalSubgroup.  Example   gap> s4 := Group( (1,2,3,4), (3,4) );;  gap> SetName( s4, "s4" ); gap> a4 := Subgroup( s4, [ (1,2,3), (2,3,4) ] );; gap> SetName( a4, "a4" ); gap> X4 := XModByNormalSubgroup( s4, a4 );;  gap> DX4 := SinglePiecePreXModWithObjects( X4, [-9,-8,-7], false ); precrossed module with source groupoid: single piece groupoid: < a4, [ -9, -8, -7 ] > and range groupoid: single piece groupoid: < s4, [ -9, -8, -7 ] > gap> Ga4 := Source( DX4 );;  gap> Gs4 := Range( DX4 );;   9.1-2 IsXModWithObjects IsXModWithObjects( pxmod )  property IsPreXModWithObjects( pxmod )  property IsDirectProductWithCompleteDigraphDomain( pxmod )  property The precrossed module DX4 belongs to the category Is2DimensionalGroupWithObjects and is, of course, a crossed module.  Example   gap> IsXModWithObjects( DX4 );  true gap> KnownPropertiesOfObject( DX4 );  [ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",   "IsGeneratorsOfSemigroup", "IsSinglePieceDomain",   "IsDirectProductWithCompleteDigraphDomain", "IsPreXModWithObjects",   "IsXModWithObjects" ]   9.1-3 IsPermPreXModWithObjects IsPermPreXModWithObjects( pxmod )  property IsPcPreXModWithObjects( pxmod )  property IsFpPreXModWithObjects( pxmod )  property To test these properties we test the precrossed modules from which they were constructed.  Example   gap> IsPermPreXModWithObjects( DX4 ); true gap> IsPcPreXModWithObjects( DX4 );  false gap> IsFpPreXModWithObjects( DX4 ); false   9.1-4 Root2dGroup Root2dGroup( pxmod )  attribute XModAction( pxmod )  attribute The attributes of a precrossed module with objects include the standard Source; Range; Boundary; and XModAction as with precrossed modules of groups. There is also ObjectList, as in the groupoids package. Additionally there is Root2dGroup which is the underlying precrossed module used in the construction. Note that XModAction is now a groupoid homomorphism from the source groupoid to a one-object groupoid (with object 0) where the group is the automorphism group of the range groupoid.  Example   gap> KnownAttributesOfObject(DX4); [ "Range", "Source", "Boundary", "ObjectList", "XModAction", "Root2dGroup" ] gap> Root2dGroup( DX4 );  [a4->s4] gap> act := XModAction( DX4 );;  gap> r := Arrow( Gs4, (1,2,3,4), -7, -8 );;  gap> ImageElm( act, r );  [groupoid homomorphism :  [ [ [(1,2,3) : -9 -> -9], [(2,3,4) : -9 -> -9], [() : -9 -> -8],   [() : -9 -> -7] ],   [ [(2,3,4) : -9 -> -9], [(1,3,4) : -9 -> -9], [() : -9 -> -7],   [() : -9 -> -8] ] ] : 0 -> 0] gap> s := Arrow( Ga4, (1,2,4), -8, -8 );; gap> ## calculate s^r  gap> ims := ImageElmXModAction( DX4, s, r ); [(1,2,3) : -7 -> -7]   There is much more to be done with these constructions.