<!-- ------------------------------------------------------------------- -->
<!--                                                                     -->
<!--  mwo.xml                Gpd documentation            Chris Wensley  -->
<!--                                                                     -->
<!--  $Id: mwo.xml,v 1.05 2008/11/21 gap Exp $                           -->
<!--                                                                     -->
<!-- ------------------------------------------------------------------- -->

<?xml version="1.0" encoding="ISO-8859-1"?>
  <!-- $Id: mwo.xml,v 1.05  Exp $ -->

<Chapter Label="chap-mwp">
<Heading>Many-object structures</Heading>

A <E>magma with objects</E> <M>M</M> consists of 
a set of <E>objects</E> Ob<M>(M)</M>, 
and a set of <E>arrows</E> Arr<M>(M)</M> 
together with <E>tail</E> and <E>head</E> maps 
<M>t,h :</M> Arr<M>(M) \to</M> Ob<M>(M)</M>, 
and a <E>partial multiplication</E> 
<M>* :</M> Arr<M>(M) \to </M> Arr<M>(M)</M>, 
with <M>a*b</M> defined precisely when the head of <M>a</M> 
coincides with the tail of <M>b</M>. 
We write an arrow <M>a</M> with tail <M>u</M> and head <M>v</M> 
as <M>(a : u \to v)</M>. 
<P/>
When this multiplication is associative we obtain a 
<E>semigroup with objects</E>. 
<P/>
A <E>loop</E> is an arrow whose tail and head are the same object. 
An <E>identity arrow</E> at object <M>u</M> is a loop <M>(1_u : u \to u)</M> 
such that <M>a*1_u=a</M> and <M>1_u*b=b</M> 
whenever <M>u</M> is the head of <M>a</M> and the tail of <M>b</M>. 
When <M>M</M> is a semigroup with objects 
and every object has an identity arrow, 
we obtain a <E>monoid with objects</E>, 
which is just the usual notion of mathematical category. 
<P/>
An arrow <M>(a : u \to v)</M> in a monoid with objects 
has <E>inverse</E> <M>(a^{-1} : v \to u)</M> provided 
<M>a*a^{-1} = 1_u</M> and <M>a^{-1}*a = 1_v</M>. 
A monoid with objects in which every arrow has an inverse 
is a <E>group with objects</E>, usually called a <E>groupoid</E>. 
<P/>
For the definitions of the standard properties of groupoids
we refer to R. Brown's book ``Topology'' <Cite Key="BrTop" />, 
recently revised and reissued as ``Topology and Groupoids'' 
<Cite Key="BrTopGpd" />.



<Section><Heading>Magmas with objects</Heading>

<ManSection>
   <Func Name="MagmaWithObjects"
         Arg="args" />
   <Attr Name="ObjectList"
         Arg="mwo" />
   <Func Name="SemigroupithObjects"
         Arg="args" />
   <Func Name="MonoidWithObjects"
         Arg="args" />
<Description>
The simplest construction for a magma with objects is to take a magma <M>m</M> 
and form arrows <M>(u,x,v)</M> for every <M>x</M> in <M>m</M> 
and every pair of objects <M>(u,v)</M>. 
Multiplication is defined by <M>(u,x,v)*(v,y,w) = (u,x*y,w)</M>. 
<P/>
Any finite, ordered set is in principle acceptable as the objects of <M>M</M>, 
but we will restrict ourselves to sets of negative integers here. 
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> tm := [[1,2,4,3],[1,2,4,3],[3,4,2,1],[3,4,2,1]];;  Display( tm );
[ [  1,  2,  4,  3 ],
  [  1,  2,  4,  3 ],
  [  3,  4,  2,  1 ],
  [  3,  4,  2,  1 ] ]
gap> m := MagmaByMultiplicationTable( tm ); 
<magma with 4 generators>
gap> SetName( m, "m" ); 
gap> m1 := MagmaElement(m,1);; 
gap> m2 := MagmaElement(m,2);; 
gap> m3 := MagmaElement(m,3);; 
gap> m4 := MagmaElement(m,4);; 
gap> One(m); 
fail
gap> M78 := MagmaWithObjects( [-8,-7], m ); 
Magma with objects :-
  objects = [ -8, -7 ]
    magma = m
gap> [ IsAssociative(M78), IsCommutative(M78) ]; 
[ false, false ]
]]>
</Example>

<ManSection>
   <Oper Name="MultiplicativeElementWithObjects"
         Arg="mwo,elt,tail,head" />
<Description>
Elements in a magma with objects lie in the category 
<C>IsMultiplicativeElementWithObjects</C>. 
An attempt to multiply two arrows which do not compose 
resuts in <C>fail</C> being returned. 
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> a78 := MultiplicativeElementWithObjects( M78, m4, -7, -8 ); 
[m2 : -7 -> -8]
gap> b87 := MultiplicativeElementWithObjects( M78, m3, -8, -7 ); 
[m3 : -8 -> -7]
gap> ba := b87*a78; 
[m4 : -8 -> -8]
gap> ab := a78*b87;
[m4 : -7 -> -7]
gap> a78^2; 
fail
gap> ba^2;
[m1 : -8 -> -8]
]]>
</Example>


<ManSection>
   <Prop Name="IsSinglePiece"
         Arg="mwo" />
   <Prop Name="IsDirectProductWithCompleteGraph"
         Arg="mwo" />
<Description>
If the partial composition is forgotten, then a digraph is left 
(usually with multiple edges and loops). 
Thus the notion of <E>connected component</E> may be inherited 
by magmas with objects from digraphs. 
Unfortunately the terms <C>Component</C> and <C>Constituent</C> 
are already in considerably use in &GAP;, 
so (for now?) we use the term <C>IsSinglePiece</C> 
to describe a connected magma with objects.
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> IsSinglePiece( M78 ); 
true
gap> IsDirectProductWithCompleteGraph( M78 );
true
]]>
</Example>


</Section> 



</Chapter>
