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

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

<Chapter Label="chap-mwohom">
<Heading>Homomorphisms of many-object structures</Heading>

A <E>homomorphism</E> <M>f</M> from a magma with objects <M>M</M> 
to a magma with objects <M>N</M>
consists of a map <M>f_O</M> from the objects of <M>M</M> to those of <M>N</M>
together with a map <M>f_A</M> from the arrows of <M>M</M> to those of <M>N</M>
which is compatible with tail and head and which preserves multiplication: 
<Display>
f_A((a : u \to v)*f(b : v \to w)) ~=~ f_A(a*b : u \to w) 
</Display> 
with tail <M>f_O(u)</M> and head <M>f_O(v)</M>. 
<P/>


<Section><Heading>Homomorphisms of magmas with objects</Heading>

<ManSection>
   <Func Name="MagmaWithObjectsHomomorphism"
         Arg="args" />
   <Oper Name="MagmaHomomorphismFromSinglePiece"
         Arg="src,rng,hom,imobs" />
   <Oper Name="HomomorphismToSinglePiece"
         Arg="src,rng,images" />
   <Oper Name="HomomorphismByUnion"
         Arg="src,rng,homs" />
<Description>
As usual, there are a variety of homomorphism constructors.
The basic construction is a homomorphism <M>M \to N</M> with 
both <M>M</M> and <M>N</M> connected, 
which is implemented as <C>IsHomomorphismToSinglePieceRep</C> 
with attributes <C>Source</C>, <C>Range</C> and <C>PieceImages</C>.
We require the following information: 
<List>
<Item>
a magma homomorphism <C>f</C> from the underlying of <M>M</M> 
to the underlying magma of <M>N</M>.
</Item>
<Item>
a list <C>imobs</C> of the images of the objects of <M>M</M>;
</Item>
</List>
In the example we construct endomappings of <M>m</M> and <M>M78</M>. 
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> tup1 := [ Tuple([m1,m2]), Tuple([m2,m1]), Tuple([m3,m4]), Tuple([m4,m3]) ]; 
gap> f1 := GeneralMappingByElements( m, m, tup1 ); 
f1 = <general mapping: m -> m >
gap> IsMagmaHomomorphism( f1 ); 
true
gap> tup2 := [ Tuple([m1,m1]), Tuple([m2,m1]), Tuple([m3,m1]), Tuple([m4,m1]) ];; 
gap> f2 := GeneralMappingByElements( m, m, tup2 );; 
gap> IsMagmaHomomorphism( f2 );
true 
gap> map1 := HomomorphismFromSinglePiece( M78, M78, [-8,-7], f1 ); 
magma with objects homomorphism : M78 -> M78
gap> Display( map1 );
Mapping to single piece magma:
[ M78 ] -> [ M78 ]
magma mapping: <mapping: m -> m >
   object map: [ -8, -7 ] -> [ -8, -7 ]
Homomorphism to connected magma:
[ M78 ] -> [ M78 ]
  object map = [ [ -8, -7 ], [ -8, -7 ] ]
homomorphism = <homomorphism: m -> m >
gap> idm := f1*f1;; 
gap> idmap := HomomorphismFromSinglePiece( M78, M78, idm, [-7,-8] ); 
gap> map2 := HomomorphismFromSinglePiece( M78, M78, f2, [-7,-8] ); 
]]>
</Example>


</Section>



</Chapter>
