<Chapter Label="chap-homwo">
<Heading>Mappings 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
<List>
<Item>
a map <M>f_O</M> from the objects of <M>M</M> to those of <M>N</M>,
</Item>
<Item>
a map <M>f_A</M> from the arrows of <M>M</M> to those of <M>N</M>.
</Item>
</List>
The map <M>f_A</M> is required to be compatible with the tail and head maps
and to preserve multiplication:
<Display>
f_A(a : u \to v) * f_A(b : v \to w) ~=~ f_A(a*b : u \to w)
</Display>
with tail <M>f_O(u)</M> and head <M>f_O(w)</M>.
<P/>
When the underlying magma of <M>M</M> is a monoid or group,
the map <M>f_A</M> is required to preserve identities and inverses.
<P/>
<Section Label="sec-mwohom">
<Heading>Homomorphisms of magmas with objects</Heading>
<ManSection>
<Func Name="MagmaWithObjectsHomomorphism"
Arg="args" />
<Oper Name="HomomorphismFromSinglePiece"
Arg="src,rng,hom,imobs" />
<Oper Name="HomomorphismToSinglePiece"
Arg="src,rng,images" Label="for magmas with objects" />
<Attr Name="MappingToSinglePieceData"
Arg="mwohom" Label="for magmas with objects" />
<Attr Name="PiecesOfMapping"
Arg="mwohom" />
<Oper Name="IsomorphismNewObjects"
Arg="src,objlist" Label="for magmas with objects" />
<Description>
There are a variety of homomorphism constructors.
<P/>
The simplest construction gives a homomorphism <M>M \to N</M> with
both <M>M</M> and <M>N</M> connected.
It is implemented as
<Index Key="IsMappingToSinglePieceRep">
<C>IsMappingToSinglePieceRep</C> </Index>
<C>IsMappingToSinglePieceRep</C>
with attributes
<Index Key="Source"> <C>Source</C> </Index> <C>Source</C>,
<Index Key="Range"> <C>Range</C> </Index> <C>Range</C>
and <C>MappingToSinglePieceData</C>.
The operation requires the following information:
<List>
<Item>
a magma homomorphism <C>hom</C> from the underlying magma 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 first example we construct endomappings of <C>m</C> and <C>M78</C>.
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> tup1 := [ DirectProductElement([m1,m2]), DirectProductElement([m2,m1]),
> DirectProductElement([m3,m4]), DirectProductElement([m4,m3]) ];;
gap> f1 := GeneralMappingByElements( m, m, tup1 );
<general mapping: m -> m >
gap> IsMagmaHomomorphism( f1 );
true
gap> hom1 := MagmaWithObjectsHomomorphism( M78, M78, f1, [-7,-8] );
magma with objects homomorphism : M78 -> M78
[ [ <mapping: m -> m >, [ -7, -8 ] ] ]
gap> [ Source( hom1 ), Range( hom1 ) ];
[ M78, M78 ]
gap> b87;
[m4 : -8 -> -7]
gap> im1 := ImageElm( hom1, b87 );
[m3 : -7 -> -8]
gap> i65 := IsomorphismNewObjects( M78, [-6,-5] );
magma with objects homomorphism : [ [ IdentityMapping( m ), [ -6, -5 ] ] ]
gap> ib87 := ImageElm( i65, b87 );
[m4 : -6 -> -5]
gap> M65 := Range( i65);;
gap> SetName( M65, "M65" );
gap> j65 := InverseGeneralMapping( i65 );;
gap> ImagesOfObjects( j65 );
[ -8, -7 ]
gap> comp := j65 * hom1;
magma with objects homomorphism : M65 -> M78
[ [ <mapping: m -> m >, [ -7, -8 ] ] ]
gap> ImageElm( comp, ib87 );
[m3 : -7 -> -8]
]]>
</Example>
A homomorphism <E>to</E> a connected magma with objects may have a source
with several pieces,
and so is a union of homomorphisms <E>from</E> single pieces.
<P/>
<Example>
<![CDATA[
gap> M4 := UnionOfPieces( [ M78, M65 ] );;
gap> images := [ MappingToSinglePieceData( hom1 )[1],
> MappingToSinglePieceData( j65 )[1] ];
[ [ <mapping: m -> m >, [ -7, -8 ] ], [ IdentityMapping( m ), [ -8, -7 ] ] ]
gap> map4 := HomomorphismToSinglePiece( M4, M78, images );
magma with objects homomorphism :
[ [ <mapping: m -> m >, [ -7, -8 ] ], [ IdentityMapping( m ), [ -8, -7 ] ] ]
gap> ImageElm( map4, b87 );
[m3 : -7 -> -8]
gap> ImageElm( map4, ib87 );
[m4 : -8 -> -7]
]]>
</Example>
</Section>
<Section Label="sec-sgphom">
<Heading>Homomorphisms of semigroups and monoids with objects</Heading>
The next example exhibits a homomorphism between transformation
semigroups with objects.
<P/>
<Example>
<![CDATA[
gap> t2 := Transformation( [2,2,4,1] );;
gap> s2 := Transformation( [1,1,4,4] );;
gap> r2 := Transformation( [4,1,3,3] );;
gap> sgp2 := Semigroup( [ t2, s2, r2 ] );;
gap> SetName( sgp2, "sgp" );
gap> ## apparently no method for transformation semigroups available for:
gap> ## nat := NaturalHomomorphismByGenerators( sgp, sgp2 ); so we use:
gap> ## in the function flip below t is a transformation on [1..n]
gap> flip := function( t )
> local i, j, k, L, L2, n;
> n := DegreeOfTransformation( t );
> L := ImageListOfTransformation( t );
> if IsOddInt(n) then n:=n+1; L1:=Concatenation(L,[n]);
> else L1:=L; fi;
> L2 := ShallowCopy( L1 );
> for i in [1..n] do
> if IsOddInt(i) then j:=i+1; else j:=i-1; fi;
> k := L1[j];
> if IsOddInt(k) then L2[i]:=k+1; else L2[i]:=k-1; fi;
> od;
> return( Transformation( L2 ) );
> end;;
gap> smap := MappingByFunction( sgp, sgp2, flip );;
gap> ok := RespectsMultiplication( smap );
true
gap> [ t, ImageElm( smap, t ) ];
[ Transformation( [ 1, 1, 2, 3 ] ), Transformation( [ 2, 2, 4, 1 ] ) ]
gap> [ s, ImageElm( smap, s ) ];
[ Transformation( [ 2, 2, 3, 3 ] ), Transformation( [ 1, 1, 4, 4 ] ) ]
gap> [ r, ImageElm( smap, r ) ];
[ Transformation( [ 2, 3, 4, 4 ] ), Transformation( [ 4, 1, 3, 3 ] ) ]
gap> SetName( smap, "smap" );
gap> T123 := SemigroupWithObjects( sgp2, [-13,-12,-11] );;
gap> shom := MagmaWithObjectsHomomorphism( S123, T123, smap, [-11,-12,-13] );;
gap> it12 := ImageElm( shom, t12 );; [ t12, it12 ];
[ [Transformation( [ 1, 1, 2, 3 ] ) : -1 -> -2],
[Transformation( [ 2, 2, 4, 1 ] ) : -13 -> -12] ]
gap> is23 := ImageElm( shom, s23 );; [ s23, is23 ];
[ [Transformation( [ 2, 2, 3, 3 ] ) : -2 -> -3],
[Transformation( [ 1, 1, 4, 4 ] ) : -12 -> -11] ]
gap> ir31 := ImageElm( shom, r31 );; [ r31, ir31 ];
[ [Transformation( [ 2, 3, 4, 4 ] ) : -3 -> -1],
[Transformation( [ 4, 1, 3, 3 ] ) : -11 -> -13] ]
]]>
</Example>
</Section>
<Section Label="sec-hompieces">
<Heading>Homomorphisms to more than one piece</Heading>
<ManSection>
<Oper Name="HomomorphismByUnion"
Arg="src,rng,homs" Label="for magmas with objects" />
<Description>
When <M>f : M \to N</M> and <M>N</M> has more than one connected component,
then <M>M</M> also has more than one component and
<M>f</M> is a union of homomorphisms, one for each piece in the range.
<P/>
See section <Ref Sect="sec-genhoms"/>
for the equivalent operation with groupoids.
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> N4 := UnionOfPieces( [ M78, T123 ] );;
gap> h14 := HomomorphismByUnionNC( N1, N4, [ hom1, shom ] );
magma with objects homomorphism :
[ magma with objects homomorphism : M78 -> M78
[ [ <mapping: m -> m >, [ -7, -8 ] ] ], magma with objects homomorphism :
[ [ smap, [ -11, -12, -13 ] ] ] ]
gap> ImageElm( h14, a78 );
[m1 : -8 -> -7]
gap> ImageElm( h14, r31 );
[Transformation( [ 4, 1, 3, 3 ] ) : -11 -> -13]
]]>
</Example>
<ManSection>
<Prop Name="IsInjectiveOnObjects"
Arg="mwohom" />
<Prop Name="IsSurjectiveOnObjects"
Arg="mwohom" />
<Prop Name="IsBijectiveOnObjects"
Arg="mwohom" />
<Prop Name="IsEndomorphismWithObjects"
Arg="mwohom" />
<Prop Name="IsAutomorphismWithObjects"
Arg="mwohom" />
<Description>
The meaning of these five properties is obvious.
</Description>
</ManSection>
<Section Label="sec-mapbyfun">
<Heading>Mappings defined by a function</Heading>
<ManSection>
<Oper Name="MappingWithObjectsByFunction"
Arg="src,rng,fun,imobs" />
<Prop Name="IsMappingWithObjectsByFunction"
Arg="map" />
<Attr Name="UnderlyingFunction"
Arg="map" />
<Description>
More general mappings, which need not preserve multiplication,
are available using this operation.
See chapter <Ref Chap="chap-gpdaut"/> for an application.
</Description>
</ManSection>
<Example>
<![CDATA[
gap> swap := function(a) return Arrow(M78,a![1],a![3],a![2]); end;
function( a ) ... end
gap> swapmap := MappingWithObjectsByFunction( M78, M78, swap, [-7,-8] );
magma with objects mapping by function : M78 -> M78
function: function ( a )
return Arrow( M78, a![1], a![3], a![2] );
end
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.