An endomapping is a mapping with equal source and range, say G, where G is a group. An endomapping on G then acts on G by transforming each element of G into (precisely one) element of G. Endomappings are special cases of Mappings.
Endomappings are created by the constructor functions
EndoMappingByPositionList
, EndoMappingByFunction
, IdentityEndoMapping
,
ConstantEndoMapping
, and are represented as mappings.
The functions described in
this section can be found in the file grptfms.g?
.
EndoMappingByPositionList (
G,
list )
The constructor function EndoMappingByPositionList
returns the
the endomapping that maps the i-th element of the group (in the
ordering given by AsSortedList)
to the i-th element of list.
gap> G := GTW4_2; 4/2 gap> t1 := EndoMappingByPositionList ( G, [1, 2, 4, 4] ); <mapping: 4/2 -> 4/2 >
EndoMappingByFunction(
G,
fun )
The constructor function EndoMappingByFunction
returns the
function fun that maps elements of the group G into G as an
endomapping.
gap> t2 := EndoMappingByFunction ( GTW8_2, g -> g^-1 ); <mapping: 8/2 -> 8/2 > gap> IsGroupHomomorphism ( t2 ); true gap> t3 := EndoMappingByFunction ( GTW6_2, g -> g^-1 ); <mapping: 6/2 -> 6/2 > gap> IsGroupHomomorphism ( t3 ); false
EndoMappings
and GroupGeneralMappings
are different
kinds of objects in GAP: GroupGeneralMappings
model homomorphisms between
two different groups, whereas EndoMappings
model nonlinear functions
on one group.
However, GroupGeneralMappings
can be transformed into
Endomappings
if they have equal source and range.
AsEndoMapping(
map )
The constructor function AsEndoMapping
returns the mapping map
as an endomapping.
gap> G1 := Group ((1,2,3), (1, 2)); Group([ (1,2,3), (1,2) ]) gap> G2 := Group ((2,3,4), (2, 3)); Group([ (2,3,4), (2,3) ]) gap> f1 := IsomorphismGroups ( G1, G2 ); [ (1,2,3), (1,2) ] -> [ (2,3,4), (2,3) ] gap> f2 := IsomorphismGroups ( G2, G1 ); [ (2,3,4), (2,3) ] -> [ (1,2,3), (1,2) ] gap> AsEndoMapping ( CompositionMapping ( f1, f2 ) ); <mapping: Group( [ (2,3,4), (2,3) ] ) -> Group( [ (2,3,4), (2,3) ] ) >
EndoMappings
and GroupGeneralMappings
are two completely different
kinds of objects in GAP, but they can be transformed into one
another.
AsGroupGeneralMappingByImages(
endomap )
AsGroupGeneralMappingByImages
returns the
GroupGeneralMappingByImages
that acts on the group the same way as
the endomapping endomap. It only makes sense to use this function
for endomappings that are group endomorphisms.
gap> m := IdentityEndoMapping ( GTW6_2 ); <mapping: 6/2 -> 6/2 > gap> AsGroupGeneralMappingByImages ( m ); [ (1,2), (1,2,3) ] -> [ (1,2), (1,2,3) ]
IsEndoMapping(
obj )
IsEndoMapping
returns true
if the object obj is an endomapping
and false
otherwise.
gap> IsEndoMapping ( InnerAutomorphisms ( GTW6_2 ) [3] ); true
IdentityEndoMapping(
G )
IdentitEndoMapping
is the counterpart to the GAP standard
library function IdentityMapping
. It returns the identity
transformation on the group G.
gap> AsList ( UnderlyingRelation ( IdentityEndoMapping ( Group ((1,2,3,4)) ) ) ); [ DirectProductElement( [ (), () ] ), DirectProductElement( [ (1,2,3,4), (1,2, 3,4) ] ), DirectProductElement( [ (1,3)(2,4), (1,3)(2,4) ] ), DirectProductElement( [ (1,4,3,2), (1,4,3,2) ] ) ]
ConstantEndoMapping(
G,
g )
ConstantEndoMapping
returns the endomapping on the group G
which maps everything to the group element g of G.
gap> C3 := CyclicGroup (3); <pc group of size 3 with 1 generator> gap> m := ConstantEndoMapping (C3, AsSortedList (C3) [2]); MappingByFunction( <pc group of size 3 with 1 generator>, <pc group of size 3 with 1 generator>, function( x ) ... end ) gap> List (AsList (C3), x -> Image (m, x)); [ f1, f1, f1 ]
IsIdentityEndoMapping(
endomap )
IsIdentityEndoMapping
returns true
if endomap is the identity
function on a group.
gap> IsIdentityEndoMapping (EndoMappingByFunction ( > AlternatingGroup ( [1..5] ), x -> x^31)); true
IsConstantEndoMapping(
endomap )
IsConstantEndoMapping
returns true
if the endomapping
endomap is constant and false
otherwise.
gap> C3 := CyclicGroup ( 3 ); <pc group of size 3 with 1 generator> gap> IsConstantEndoMapping ( EndoMappingByFunction ( C3, x -> x^3 )); true
IsDistributiveEndoMapping(
endomap )
A mapping t on an (additively written) group G is called
distributive if for all elements x and y in G:\
t(x+y) = t(x) + t(y).
The function IsDistributiveEndoMapping
returns the according
boolean value true
or false
.
gap> G := Group ( (1,2,3), (1,2) ); Group([ (1,2,3), (1,2) ]) gap> IsDistributiveEndoMapping ( EndoMappingByFunction ( G, x -> x^3)); false gap> IsDistributiveEndoMapping ( EndoMappingByFunction ( G, x -> x^7)); true
While the composition operator *
is applicable to mappings and
transformations, the operation +
(pointwise addition of the images) can
only be applied to transformations.
The product operator *
returns the transformation which is obtained
from the transformations t1 and t2 by composition of t1 and t2
(i.e. performing t2 after t1).
gap> t1 := ConstantEndoMapping ( GTW2_1, ()); MappingByFunction( 2/1, 2/1, function( x ) ... end ) gap> t2 := ConstantEndoMapping (GTW2_1, (1, 2)); MappingByFunction( 2/1, 2/1, function( x ) ... end ) gap> List ( AsList ( GTW2_1 ), x -> Image ( t1 * t2, x )); [ (1,2), (1,2) ]
The add operator +
returns the endomapping which is obtained
from the endomappings t1 and t2 by pointwise addition
of t1 and t2. (Note that in this context addition means that
for every place x in the source of t1 and t2,
GAP performs the operation p * q
, where
p
is the image of t1 at x and q
is the image of t2 at x.)
The subtract operator -
returns the endomapping which is
obtained from the endomappings t1 and t2 by pointwise
subtraction of t1 and t2. (Note that in this context subtraction
means performing the GAP operation p * q^(-1)
,
where
p
is the image of t1 at a place x and q
is the image of t2 at x.)
gap> G := SymmetricGroup ( 3 ); Sym( [ 1 .. 3 ] ) gap> invertingOnG := EndoMappingByFunction ( G, x -> x^-1 ); <mapping: SymmetricGroup( [ 1 .. 3 ] ) -> SymmetricGroup( [ 1 .. 3 ] ) > gap> identityOnG := IdentityEndoMapping (G); <mapping: SymmetricGroup( [ 1 .. 3 ] ) -> SymmetricGroup( [ 1 .. 3 ] ) > gap> AsSortedList ( G ); [ (), (2,3), (1,2), (1,2,3), (1,3,2), (1,3) ] gap> List ( AsSortedList (G), > x -> Image ( identityOnG * invertingOnG, x )); [ (), (2,3), (1,2), (1,3,2), (1,2,3), (1,3) ] gap> List ( AsSortedList (G), > x -> Image ( identityOnG + invertingOnG, x )); [ (), (), (), (), (), () ] gap> IsIdentityEndoMapping ( - invertingOnG ); true gap> - invertingOnG = identityOnG; true
GraphOfMapping(
mapping )
GraphOfMapping
returns the set of all pairs (x,m(x)), where
x lies in the source of the mapping. In particular, it returns
List (Source (m), x -> [x, Image (m, x)]);
gap> G := SymmetricGroup ( 3 ); Sym( [ 1 .. 3 ] ) gap> m := ConstantEndoMapping (G, (1,2,3)) + IdentityEndoMapping( G ); MappingByFunction( Sym( [ 1 .. 3 ] ), Sym( [ 1 .. 3 ] ), function( g ) ... end ) gap> PrintArray( GraphOfMapping( m ) ); [ [ (), (1,2,3) ], [ (2,3), (1,3) ], [ (1,2), (2,3) ], [ (1,2,3), (1,3,2) ], [ (1,3,2), () ], [ (1,3), (1,2) ] ]
PrintAsTerm(
mapping )
If mapping is a polynomial function on its source then PrintAsTerm
prints a polynomial that induces the mapping mapping.
gap> G := SymmetricGroup ( 3 ); Sym( [ 1 .. 3 ] ) gap> p := Random( PolynomialNearRing( G ) ); <mapping: SymmetricGroup( [ 1 .. 3 ] ) -> SymmetricGroup( [ 1 .. 3 ] ) > gap> PrintAsTerm( p ); g1 - x - 2 * g1 - g2 - x - g1 - g2 + g1 - x - 2 * g1 - g2 - x - g1 - g2 - 3 * x + g1 gap> GeneratorsOfGroup( G ); [ (1,2,3), (1,2) ]
The expressions g1
and g2
stand for the first and secong generator
of the group G respectively. The result is not necessarily a
polynomial of minimal length.
[Up] [Previous] [Next] [Index]
SONATA manual