<!-- ------------------------------------------------------------------- -->
<!--                                                                     -->
<!--  gpd2obj.xml           XMod documentation            Chris Wensley  -->
<!--                                                                     -->
<!--  Copyright (C) 2001-2019, Chris Wensley et al,                      --> 
<!--  School of Computer Science, Bangor University, U.K.                --> 
<!--                                                                     -->
<!-- ------------------------------------------------------------------- -->

<?xml version="1.0" encoding="UTF-8"?>

<Chapter Label="chap-gpd2o">

<Heading>Crossed modules of groupoids</Heading>

<Index>crossed module of groupoids</Index>

The material documented in this chapter is experimental, 
and is likely to be changed very soon. 

<Section> 

<Heading>Constructions for crossed modules of groupoids</Heading>

<Index>crossed module over a groupoid</Index>
<Index>2dimensional-domain with objects</Index>

A typical example of a crossed module <M>\calX</M> 
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 <E>objects</E> 
of the crossed module. 
The source of <M>\calX</M> 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 <Cite Key="AW2" />. 

<ManSection>
   <Oper Name="SinglePiecePreXModWithObjects" 
         Arg="pxmod obs isdisc" /> 
<Description> 
At present the experimental operation <C>SinglePiecePreXModWithObjects</C> 
accepts a precrossed module <C>pxmod</C>, a set of objects <C>obs</C>, 
and a boolean <C>isdisc</C> which is <K>true</K> when the source groupoid 
is homogeneous and discrete and <K>false</K> when the source groupoid 
is connected.  
Other operations will be added as time permits. 
<P/> 
In the example the crossed module <C>DX4</C> has discrete source, 
while the crossed module <C>CX4</C> has connected source. 
These are groupoid equivalents of <Ref Oper="XModByNormalSubgroup"/>. 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
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], true );
precrossed module with source groupoid:
homogeneous, discrete groupoid: < a4, [ -9, -8, -7 ] >
and range groupoid:
single piece groupoid: < s4, [ -9, -8, -7 ] >
gap> Da4 := Source( DX4 );; 
gap> Ds4 := Range( DX4 );;
gap> CX4 := 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> Ca4 := Source( CX4 );; 
gap> Cs4 := Range( CX4 );;
]]>
</Example>

<ManSection>
   <Prop Name="IsXModWithObjects" 
         Arg="pxmod" /> 
   <Prop Name="IsPreXModWithObjects" 
         Arg="pxmod" /> 
   <Prop Name="IsDirectProductWithCompleteDigraphDomain" 
         Arg="pxmod" /> 
<Description> 
<Index>Is2DimensionalGroupWithObjects</Index> 
The precrossed module <C>DX4</C> belongs to the category 
<C>Is2DimensionalGroupWithObjects</C> and is, of course, a crossed module. 
<P/> 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> IsXModWithObjects( DX4 ); 
true
gap> KnownPropertiesOfObject( DX4 ); 
[ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree", 
  "IsGeneratorsOfSemigroup", "IsSinglePieceDomain", 
  "IsDirectProductWithCompleteDigraphDomain", "IsPreXModWithObjects", 
  "IsXModWithObjects" ]
]]>
</Example>

<ManSection>
   <Prop Name="IsPermPreXModWithObjects" 
         Arg="pxmod" /> 
   <Prop Name="IsPcPreXModWithObjects" 
         Arg="pxmod" /> 
   <Prop Name="IsFpPreXModWithObjects" 
         Arg="pxmod" /> 
<Description> 
To test these properties we test the precrossed modules from which 
they were constructed. 
<P/> 
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> IsPermPreXModWithObjects( CX4 );
true
gap> IsPcPreXModWithObjects( CX4 );  
false
gap> IsFpPreXModWithObjects( CX4 );
false
]]>
</Example>

<ManSection>
   <Attr Name="Root2dGroup" 
         Arg="pxmod" /> 
   <Attr Name="XModAction" 
         Arg="pxmod" Label="for crossed modules of groupoids" /> 
<Description> 
<Index>ObjectList</Index> 
The attributes of a precrossed module with objects include the standard 
<C>Source</C>; <C>Range</C>; 
<Ref Attr="Boundary" Label="for crossed modules"/>; 
and <Ref Meth="XModAction" Label="for crossed modules of groups"/>
as with precrossed modules of groups. 
There is also <C>ObjectList</C>, 
as in the <Package>groupoids</Package> package. 
Additionally there is <C>Root2dGroup</C> which is the underlying 
precrossed module used in the construction. 
<P/> 
Note that <C>XModAction</C> is now a groupoid homomorphism 
from the source groupoid to a one-object groupoid (with object <C>0</C>) 
where the group is the automorphism group of the range groupoid. 
<P/>
</Description>
</ManSection>
<P/>
<Example>
<![CDATA[
gap> Set( KnownAttributesOfObject( CX4 ) );
[ "Boundary", "ObjectList", "Range", "Root2dGroup", "Source", "XModAction" ]
gap> Root2dGroup( CX4 ); 
[a4->s4]
gap> act := XModAction( CX4 );; 
gap> r := Arrow( Cs4, (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( Ca4, (1,2,4), -8, -8 );;
gap> ##  calculate s^r 
gap> ims := ImageElmXModAction( CX4, s, r );
[(1,2,3) : -7 -> -7]
]]>
</Example>

There is much more to be done with these constructions. 

</Section>

</Chapter>
