A homomorphism \(m\) from a groupoid \(G\) to a groupoid \(H\) consists of a map from the objects of \(G\) to those of \(H\) together with a map from the elements of \(G\) to those of \(H\) which is compatible with tail and head and which preserves multiplication:
\[ m(g1 : o1 \to o2)*m(g2 : o2 \to o3) ~=~ m(g1*g2 : o1 \to o3). \]
Note that when a homomorphism is not injective on objects, the image of the source need not be a subgroupoid of the range. A simple example of this is given by a homomorphism from the two-object, four-element groupoid with trivial group to the free group \(\langle a \rangle\) on one generator, when the image is \([1,a^n,a^{-n}]\) for some \(n>0\).
A variety of homomorphism operations are available.
The basic construction is a homomorphism \(\phi : G \to H\) from a connected groupoid \(G\) to a connected groupoid \(H\), constructed using GroupoidHomomorphismFromSinglePiece
, (see 5.1).
Since more than one connected groupoid may be mapped to the same range, we then have the operation GroupoidHomomorphismToSinglePiece
, (see 5.4).
The third case arises when both source and range are unions of connected groupoids, in which case HomomorphismByUnion
is called, (see 5.5).
Fourthly, there are is an additional operation for the case where the source is homogeneous and discrete, GroupoidHomomorphismFromHomogeneousDiscrete
, (see 5.4-2).
Finally, there are special operations for inclusion mappings, restricted mappings (see 5.3). and groupoid automorphisms (see 5.6).
‣ GroupoidHomomorphismFromSinglePiece ( src, rng, gens, images ) | ( operation ) |
‣ GroupoidHomomorphism ( args ) | ( function ) |
‣ IsGroupoidHomomorphism ( mwohom ) | ( category ) |
The simplest groupoid homomorphism is a mapping \(\phi : G \to H\) from a connected groupoid \(G\) to a connected groupoid \(H\). There are two equivalent sets of input data which may be used. Both require the Source
\(G\) and the Range
\(H\). The first then requires:
the set of generating arrows, genG = GeneratorsOfGroupoid(G)
;
a list of image arrows imphi
in \(H\).
This may be implemented by the call GroupoidHomomorphismFromSinglePiece(G,H,genG,imphi)
, and the data is stored in the attribute MappingGeneratorsImages
. Alternatively, use the global function GroupoidHomomorphism
with the same four parameters.
The alternative input data consists of:
a homomorphism rhom
from the root group of \(G\) to the group at the image object in \(H\);
a list imobs
of the images of the objects of \(G\);
a list imrays
of the elements in the images of the rays of \(G\), so that the image \(\phi(r_i : o_1 \to o_i)\) of the \(i\)-th ray is (imrays[i]:imobs[1]
\(\to\)imobs[i])
.
This data is stored in the attribute MappingToSinglePieceData
.
So an alternative way to construct this homomorphism of groupoids is to make a call of the form GroupoidHomomorphism(G,H,rhom,imobs,imrays)
.
In the following example the same homomorphism is constructed using both methods.
gap> Kk4 := SubgroupoidWithRays( Ha4, k4, [ (), (1,3,4), (1,4)(2,3) ] );; gap> SetName( Kk4, "Kk4" ); gap> gen1 := GeneratorsOfGroupoid( Gd8 ); [ [(5,6,7,8) : -9 -> -9], [(5,7) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ] gap> gen2 := GeneratorsOfGroupoid( Kk4 ); [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] gap> images := [ gen2[1]*gen2[2], gen2[1]^2, gen2[3], gen2[4] ]; [ [(1,4)(2,3) : -14 -> -14], [() : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] gap> hom8 := GroupoidHomomorphismFromSinglePiece( Gd8, Kk4, gen1, images ); groupoid homomorphism : Gd8 -> Kk4 [ [ [(5,6,7,8) : -9 -> -9], [(5,7) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(1,4)(2,3) : -14 -> -14], [() : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] ] gap> gend8 := GeneratorsOfGroup( d8 );; gap> imh := [ (1,4)(2,3), () ];; gap> h := GroupHomomorphismByImages( d8, a4, gend8, imh ); [ (5,6,7,8), (5,7) ] -> [ (1,4)(2,3), () ] gap> hom9 := GroupoidHomomorphism( Gd8, Kk4, h, [-14,-13,-12], > [ (), (1,3,4), (1,4)(2,3) ] );; gap> hom8 = hom9; true gap> e1 := Arrow( Gd8, (5,6,7,8), -7, -8 );; gap> ImageElm( hom8, e1 ); [(1,3,4) : -12 -> -13] gap> IsGroupoidHomomorphism( hom8 ); true
The properties listed in subsection 3.3 for homomorphisms of magmas with objects also apply to groupoid homomorphisms.
gap> [ IsInjectiveOnObjects( hom8 ), IsSurjectiveOnObjects( hom8 ) ]; [ true, true ] gap> [ IsInjective( hom8 ), IsSurjective( hom8 ) ]; [ false, false ] gap> ad8 := GroupHomomorphismByImages( d8, d8, > [ (5,6,7,8), (5,7) ], [ (5,8,7,6), (6,8) ] );; gap> md8 := GroupoidHomomorphism( Gd8, Gd8, ad8, > [-7,-9,-8], [(),(5,7),(6,8)] ); groupoid homomorphism : Gd8 -> Gd8 [ [ [(5,6,7,8) : -9 -> -9], [(5,7) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(5,8,7,6) : -7 -> -7], [(6,8) : -7 -> -7], [(5,7) : -7 -> -9], [(6,8) : -7 -> -8] ] ] gap> IsBijectiveOnObjects( md8 ); true gap> [ IsInjective( md8 ), IsSurjective( md8 ) ]; [ true, true ] gap> [ IsEndomorphismWithObjects( md8 ), IsAutomorphismWithObjects( md8 ) ]; [ true, true ]
The attributes of a groupoid homomorphism mor
from a single piece groupoid cover both forms of construction defined above.
S = Source(mor)
is the source groupoid of the homomorphism;
R = Range(mor)
is the range groupoid of the homomorphism;
RootGroupHomomorphism(mor)
is the group homomorphism from the root group of S
to the group at the image object in R
of the root object in S
;
ImagesOfObjects(mor)
is the list of objects in R
which are the images of the objects in S
;
ImageElementsOfRays(mor)
is the list of group elements in those arrows in R
which are the images of the rays in S
;
MappingGeneratorsImages(mor)
is the two element list containing the list of generators in S
and the list of their images in R
;
MappingToSinglePieceData(mor)
is a list with three elements: the root group homomorphism; the images of the objects; and the images of the rays.
For other types of homomorphism the attributes are very similar.
The function ObjectGroupHomomorphism
, though an operation, is included in this section for convenience.
‣ RootGroupHomomorphism ( hom ) | ( attribute ) |
This is the group homomorphism from the root group of the source groupoid to the group at the image object in the range groupoid of the root object in the source.
‣ ImagesOfObjects ( hom ) | ( attribute ) |
This is the list of objects in the range groupoid which are the images of the objects in the source.
‣ ImageElementsOfRays ( hom ) | ( attribute ) |
This is the list of group elements in those arrows in the range groupoid which are the images of the rays in the source.
gap> RootGroupHomomorphism( hom8 ); [ (5,6,7,8), (5,7) ] -> [ (1,4)(2,3), () ] gap> ImagesOfObjects( hom8 ); [ -14, -13, -12 ] gap> ImageElementsOfRays( hom8 ); [ (), (1,3,4), (1,4)(2,3) ]
‣ MappingToSinglePieceData ( map ) | ( attribute ) |
As mentioned earlier, this attribute stores the root group homomorphism; a list of the images of the objects; and a list of the elements in the images of the rays.
gap> MappingGeneratorsImages( hom8 ); [ [ [(5,6,7,8) : -9 -> -9], [(5,7) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(1,4)(2,3) : -14 -> -14], [() : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] ] gap> MappingToSinglePieceData( hom8 ); [ [ [ (5,6,7,8), (5,7) ] -> [ (1,4)(2,3), () ], [ -14, -13, -12 ], [ (), (1,3,4), (1,4)(2,3) ] ] ]
‣ ObjectGroupHomomorphism ( gpdhom, obj ) | ( operation ) |
For a given groupoid homomorphism, this operation gives the group homomorphism from an object group of the source to the object group at the image object in the range.
gap> ObjectGroupHomomorphism( hom8, -8 ); [ (5,6,7,8), (5,7) ] -> [ (1,3)(2,4), () ]
In this section we mention inclusion mappings of subgroupoids; and mappings restricted to a source subgroupoid. We also discuss various types of isomorphism: to a different set of objects; to a permutation groupoid; to a pc-groupoid.
‣ InclusionMappingGroupoids ( gpd, sgpd ) | ( operation ) |
The operation InclusionMappingGroupoids(gpd,sgpd)
returns the inclusion homomorphism from the subgroupoid sgpd
to gpd
.
gap> incKk4 := InclusionMappingGroupoids( Ha4, Kk4 ); groupoid homomorphism : Kk4 -> Ha4 [ [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ], [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] ]
For another example, refer back to subsection PiecePositions
(4.3-5).
‣ RestrictedMappingGroupoids ( mor, sgpd ) | ( operation ) |
‣ ParentMappingGroupoids ( mor ) | ( attribute ) |
The operation RestrictedMappingGroupoids(mor,sgpd)
returns the restriction of the homomorphism mor
to the subgroupoid sgpd
of its source. The range is usually set to the ImagesSource
of the restriction. The restriction is assigned the attribute ParentMappingGroupoids
with value mor
(or that of mor
is one exists). For another example see section 5.7.
gap> Gc4 := Subgroupoid( Gd8, c4 );; SetName( Gc4, "Gc4" ); gap> res4 := RestrictedMappingGroupoids( hom8, Gc4 ); groupoid homomorphism : [ [ [(5,6,7,8) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(1,4)(2,3) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] ] gap> ParentMappingGroupoids( res4 ) = hom8; true
‣ IsomorphismNewObjects ( src, objlist ) | ( operation ) |
The operation IsomorphismNewObjects(gpd,obs)
returns the isomorphism from a groupoid gpd
to a groupoid with the same object group and ray elements but with a different set obs
of objects.
We then compute the composite homomorphism, mor8 : Gd8 -> Kk4 -> Ha4 -> Ga4
.
gap> isoHa4 := IsomorphismNewObjects( Ha4, [-30,-29,-28] ); groupoid homomorphism : [ [ [(1,2,3) : -14 -> -14], [(2,3,4) : -14 -> -14], [() : -14 -> -13], [() : -14 -> -12] ], [ [(1,2,3) : -30 -> -30], [(2,3,4) : -30 -> -30], [() : -30 -> -29], [() : -30 -> -28] ] ] gap> Ka4 := Range( isoHa4 ); SetName( Ka4, "Ka4" ); single piece groupoid: < a4, [ -30, -29, -28 ] > gap> IsSubgroupoid( Gk4, Kk4 ); true gap> incHa4 := InclusionMappingGroupoids( Ga4, Ha4 );; gap> mor8 := hom8 * incKk4 * incHa4; groupoid homomorphism : Gd8 -> Ga4 [ [ [(5,6,7,8) : -9 -> -9], [(5,7) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(1,4)(2,3) : -14 -> -14], [() : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] ] gap> ImageElm( mor8, e1 ); [(1,3,4) : -12 -> -13]
‣ IsomorphismStandardGroupoid ( gpd, obs ) | ( operation ) |
The operation IsomorphismStandardGroupoid(gpd,obs)
returns the isomorphism from a groupoid with rays to the groupoid of type IsDirectProductWithCompleteDigraphDomain
on the given set obs
of objects. Gk4
, a subgroupoid of Ga4
, was our first example of a groupoid with rays (see SubgroupoidWithRays
(4.3-3)), and a standard isomorphic copy is formed here.
gap> isoGk4 := IsomorphismStandardGroupoid( Gk4, [-45..-41] ); groupoid homomorphism : [ [ [(1,2)(3,4) : -15 -> -15], [(1,3)(2,4) : -15 -> -15], [(1,2,3) : -15 -> -14], [(1,2,4) : -15 -> -13], [(1,3,4) : -15 -> -12], [(2,3,4) : -15 -> -11] ], [ [(1,2)(3,4) : -45 -> -45], [(1,3)(2,4) : -45 -> -45], [() : -45 -> -44], [() : -45 -> -43], [() : -45 -> -42], [() : -45 -> -41] ] ] gap> G2k4 := Image( isoGk4 ); SetName( G2k4, "G2k4" ); single piece groupoid: < k4, [ -45 .. -41 ] > gap> e5 := Arrow( Gk4, (1,2,4) , -13, -12 ); [(1,2,4) : -13 -> -12] gap> ImageElm( isoGk4, e5 ); [(1,3)(2,4) : -43 -> -42] gap> invGk4 := InverseGeneralMapping( isoGk4 ); groupoid homomorphism : [ [ [(1,2)(3,4) : -45 -> -45], [(1,3)(2,4) : -45 -> -45], [() : -45 -> -44], [() : -45 -> -43], [() : -45 -> -42], [() : -45 -> -41] ], [ [(1,2)(3,4) : -15 -> -15], [(1,3)(2,4) : -15 -> -15], [(1,2,3) : -15 -> -14], [(1,2,4) : -15 -> -13], [(1,3,4) : -15 -> -12], [(2,3,4) : -15 -> -11] ] ]
This operation may also be used to provide a standard form for groupoids of type IsGroupoidByIsomorphisms
as described in subsection GroupoidByIsomorphisms
(4.6-1).
gap> G2; single piece groupoid with rays: < s3a, [ -6, -5, -4 ], [ [ (), () ], [ (), <identity> of ... ], [ (), <identity ...> ] ] > gap> isoG2 := IsomorphismStandardGroupoid( G2, [-44,-43,-42] ); groupoid homomorphism : [ [ [[ (1,2), (1,2) ] : -6 -> -6], [[ (2,3), (2,3) ] : -6 -> -6], [[ (), <identity> of ... ] : -6 -> -5], [[ (), <identity ...> ] : -6 -> -4] ], [ [(1,2) : -44 -> -44], [(2,3) : -44 -> -44], [() : -44 -> -43], [() : -44 -> -42] ] ]
‣ IsomorphismPermGroupoid ( gpd ) | ( attribute ) |
‣ RegularActionHomomorphismGroupoid ( gpd ) | ( attribute ) |
‣ IsomorphismPcGroupoid ( gpd ) | ( attribute ) |
The attribute IsomorphismPermGroupoid(gpd)
returns an isomorphism from a groupoid gpd
to a groupoid with the same objects but with an isomorphic permutation group.
The attribute RegularActionHomomorphismGroupoid
returns an isomorphism from a groupoid gpd
to a groupoid with the same objects but with an isomorphic regular presentation. In the example below these two operations produce equivalent permutation groupoids. Only the second is printed as the first is liable to change from one run to the next.
Similarly, the attribute IsomorphismPcGroupoid(gpd)
attempts to return an isomorphism from the group to a pc-group with the same objects.
gap> isoGq8 := IsomorphismPermGroupoid( Gq8 );; gap> regGq8 := RegularActionHomomorphismGroupoid( Gq8 ); groupoid homomorphism : [ [ [x : -19 -> -19], [y : -19 -> -19], [y2 : -19 -> -19], [<identity> of ... : -19 -> -18], [<identity> of ... : -19 -> -17] ], [ [(1,2,4,6)(3,8,7,5) : -19 -> -19], [(1,3,4,7)(2,5,6,8) : -19 -> -19], [(1,4)(2,6)(3,7)(5,8) : -19 -> -19], [() : -19 -> -18], [() : -19 -> -17] ] ] gap> Pq8 := Image( regGq8 ); SetName( Pq8, "Pq8" ); single piece groupoid: < Group( [ (1,2,4,6)(3,8,7,5), (1,3,4,7)(2,5,6,8), (1,4)(2,6)(3,7)(5,8) ] ), [ -19, -18, -17 ] > gap> e7 := Arrow( Gq8, x*y, -18, -17 );; gap> ImageElm( regGq8, e7 ); [(1,5,4,8)(2,7,6,3) : -18 -> -17] gap> Gc4 := Subgroupoid( Gd8, c4 ); SetName( Gc4, "Gc4" ); single piece groupoid: < c4, [ -9, -8, -7 ] > gap> isoGc4 := IsomorphismPcGroupoid( Gc4 ); groupoid homomorphism : [ [ [(5,6,7,8) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [f1 : -9 -> -9], [<identity> of ... : -9 -> -8], [<identity> of ... : -9 -> -7] ] ] [<identity> of ... : -9 -> -7] ] ]
‣ HomomorphismToSinglePiece ( src, rng, piecehoms ) | ( operation ) |
When \(G\) is made up of two or more pieces, all of which get mapped to a connected groupoid, we have a homomorphism to a single piece. The third input parameter in this case is a list of the individual homomorphisms from the single pieces (in the correct order!). See section 3.1 for the corresponding operation on homomorphisms of magmas with objects.
In the following example the source V2
of homV2
has two pieces, and both of the component homomorphisms are isomorphisms.
gap> V2 := UnionOfPieces( Gq8, Gc4 );; gap> imGc4 := [ genPq8[1], genPq8[4], genPq8[5] ]; [ [(1,2,4,6)(3,8,7,5) : -19 -> -19], [() : -19 -> -18], [() : -19 -> -17] ] gap> homGc4 := GroupoidHomomorphism( Gc4, Pq8, genGc4, imGc4 ); groupoid homomorphism : Gc4 -> Pq8 [ [ [(5,6,7,8) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(1,2,4,6)(3,8,7,5) : -19 -> -19], [() : -19 -> -18], [() : -19 -> -17] ] ] gap> homV2 := HomomorphismToSinglePiece( V2, Pq8, [ regGq8, homGc4 ] ); groupoid homomorphism : [ [ [ [x : -19 -> -19], [y : -19 -> -19], [y2 : -19 -> -19], [<identity> of ... : -19 -> -18], [<identity> of ... : -19 -> -17] ], [ [(1,2,4,6)(3,8,7,5) : -19 -> -19], [(1,3,4,7)(2,5,6,8) : -19 -> -19], [(1,4)(2,6)(3,7)(5,8) : -19 -> -19], [() : -19 -> -18], [() : -19 -> -17] ] ], [ [ [(5,6,7,8) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(1,2,4,6)(3,8,7,5) : -19 -> -19], [() : -19 -> -18], [() : -19 -> -17] ] ] ] gap> ImageElm( homV2, e7 ); [(1,5,4,8)(2,7,6,3) : -18 -> -17]
‣ GroupoidHomomorphismFromHomogeneousDiscrete ( src, rng, homs, oims ) | ( operation ) |
This operation requires the source; the range; a list of homomorphisms from the object groups to the image object groups; and a list of the image objects. The source must be homogeneous and discrete, and the range must be a single piece. The example uses the groupoid HDc6
constructed in subsection HomogeneousGroupoid
(4.1-5).
gap> c3a := Subgroup( a4, [(1,2,3)] );; c3b := Subgroup( a4, [(1,2,4)] );; gap> c3c := Subgroup( a4, [(1,3,4)] );; c3d := Subgroup( a4, [(2,3,4)] );; gap> hc6a := GroupHomomorphismByImages( c6, c3a, > [(11,12,13)(14,15)], [(1,2,3)] );; gap> hc6b := GroupHomomorphismByImages( c6, c3b, > [(11,12,13)(14,15)], [(1,2,4)] );; gap> hc6c := GroupHomomorphismByImages( c6, c3c, > [(11,12,13)(14,15)], [(1,3,4)] );; gap> hc6d := GroupHomomorphismByImages( c6, c3d, > [(11,12,13)(14,15)], [(2,3,4)] );; gap> mor6 := GroupoidHomomorphismFromHomogeneousDiscrete( HDc6, Ga4, > [ hc6a, hc6b, hc6c, hc6d ], [-15,-14,-12,-11] ); groupoid homomorphism : HDc6 -> Ga4 gap> e6 := Arrow( HDc6, (11,12,13), -25, -25 );; gap> ImageElm( mor6, e6 ); [(1,3,4) : -12 -> -12]
‣ HomomorphismByUnion ( src, rng, homs ) | ( operation ) |
As in section 3.3, when the range \(H\) has more than one connected component, a homomorphism is a union of homomorphisms, one for each piece in the range.
gap> W1 := UnionOfPieces( Ha4, Gd8 );; gap> W2 := UnionOfPieces( Ka4, Kk4 );; gap> SetName( W1, "[Ha4,Gd8]" ); SetName( W2, "[Ka4,Kk4]" ); gap> homW := HomomorphismByUnion( W1, W2, [ isoHa4, hom8 ] );; gap> Display( homW ); groupoid homomorphism: [Ha4,Gd8] -> [Ka4,Kk4] with pieces : homomorphism to single piece groupoid: Ha4 -> Ka4 root group homomorphism: (1,2,3) -> (1,2,3) (2,3,4) -> (2,3,4) object map: [ -14, -13, -12 ] -> [ -30, -29, -28 ] ray images: [ (), (), () ] homomorphism to single piece groupoid: Gd8 -> Kk4 root group homomorphism: (5,6,7,8) -> (1,4)(2,3) (5,7) -> () object map: [ -9, -8, -7 ] -> [ -14, -13, -12 ] ray images: [ (), (1,3,4), (1,4)(2,3) ]
‣ IsomorphismGroupoids ( A, B ) | ( operation ) |
When \(A,B\) are two single piece groupoids, they are isomorphic provided they have the same number of objects and the root groups are isomorphic.
When \(A=[A_1,\ldots,A_n],~ B=[B_1,\ldots,B_n]\) are both unions of connected groupoids, they are isomorphic if there is a permutation \(\pi\) of \([1,\ldots,n]\) such that \(A_i\) is isomorphic to \(B_{\pi(i)}\) for all \(i\).
gap> s3b := Group( (4,6,8)(5,7,9), (4,9)(5,8)(6,7) );; gap> s3c := Group( (4,6,8)(5,7,9), (5,9)(6,8) );; gap> Gb := SinglePieceGroupoid( s3b, [-6,-5,-4] );; gap> Gc := SinglePieceGroupoid( s3c, [-16,-15,-14] );; gap> SetName( Gb, "Gb" ); SetName( Gc, "Gc" ); gap> c6b := Group( (1,2,3,4,5,6) );; gap> c6c := Group( (7,8)(9,10,11) );; gap> Hb := SinglePieceGroupoid( c6b, [-10,-9,-8,-7] );; gap> Hc := SinglePieceGroupoid( c6c, [-20,-19,-18,-17] );; gap> SetName( Hb, "Hb" ); SetName( Hc, "Hc" ); gap> IsomorphismGroupoids( Gb, Gc ); groupoid homomorphism : Gb -> Gc [ [ [(4,6,8)(5,7,9) : -6 -> -6], [(4,9)(5,8)(6,7) : -6 -> -6], [() : -6 -> -5], [() : -6 -> -4] ], [ [(4,6,8)(5,7,9) : -16 -> -16], [(5,9)(6,8) : -16 -> -16], [() : -16 -> -15], [() : -16 -> -14] ] ] gap> IsomorphismGroupoids( Gb, Hb ); fail gap> B := UnionOfPieces( [ Gb, Hb ] );; gap> C := UnionOfPieces( [ Gc, Hc ] );; gap> isoBC := IsomorphismGroupoids( B, C );; gap> Print( List( PiecesOfMapping(isoBC), p -> [Source(p),Range(p)] ) ); [ [ Hb, Hc ], [ Gb, Gc ] ]
In this section we consider automorphisms of single piece groupoids; then homogeneous discrete groupoids; and finally homogeneous groupoids.
‣ GroupoidAutomorphismByObjectPerm ( gpd, imobs ) | ( operation ) |
‣ GroupoidAutomorphismByGroupAuto ( gpd, gpiso ) | ( operation ) |
‣ GroupoidAutomorphismByRayShifts ( gpd, imrays ) | ( operation ) |
‣ GroupoidInnerAutomorphism ( gpd, arrow ) | ( operation ) |
We first describe automorphisms of a groupoid \(G\) where \(G\) is the direct product of a group \(g\) and a complete digraph with \(n\) objects.. The automorphism group is generated by three types of automorphism:
given a permutation \(\pi\) of the \(n\) objects, we define
\[ \pi : G \to G,~ (g : o_i \to o_j) \mapsto (g : o_{\pi i} \to o_{\pi j}); \]
given an automorphism \(\alpha\) of the root group \(g\), we define
\[ \alpha : G \to G,~ (g : o_i \to o_j) \mapsto (\alpha g : o_i \to o_j); \]
given \(L = [1,g_2,g_3,\ldots,g_n] \in g^n\) we define
\[ \theta_L : G \to G,~ (g : o_i \to o_j) \mapsto (g_i^{-1}gg_j : o_i \to o_j) \]
so, in particular, \(\forall j\) the rays \((r_j : o_1 \to o_j)\) are shifted by \(g_j\;\): they map to \((r_jg_j : o_1 \to o_j)\);
given an arrow \(a \in G\), the inner automorphism of \(G\) by \(a\) is the mapping \(g \mapsto g^a\) where conjugation of arrows is defined in section 4.5.
gap> perm1 := [-13,-12,-14];; gap> aut1 := GroupoidAutomorphismByObjectPerm( Ha4, perm1 );; gap> Display( aut1 ); homomorphism to single piece groupoid: Ha4 -> Ha4 root group homomorphism: (1,2,3) -> (1,2,3) (2,3,4) -> (2,3,4) object map: [ -14, -13, -12 ] -> [ -13, -12, -14 ] ray images: [ (), (), () ] gap> d := Arrow( Ha4, (1,3,4), -12, -13 ); [(1,3,4) : -12 -> -13] gap> d1 := ImageElm( aut1, d ); [(1,3,4) : -14 -> -12] gap> gensa4 := GeneratorsOfGroup( a4 );; gap> alpha2 := GroupHomomorphismByImages( a4, a4, gensa4, [(2,3,4), (1,3,4)] );; gap> aut2 := GroupoidAutomorphismByGroupAuto( Ha4, alpha2 );; gap> Display( aut2 ); homomorphism to single piece groupoid: Ha4 -> Ha4 root group homomorphism: (1,2,3) -> (2,3,4) (2,3,4) -> (1,3,4) object map: [ -14, -13, -12 ] -> [ -14, -13, -12 ] ray images: [ (), (), () ] gap> d2 := ImageElm( aut2, d1 ); [(1,2,4) : -14 -> -12] gap> L3 := [(), (1,3,2), (2,4,3)];; gap> aut3 := GroupoidAutomorphismByRayShifts( Ha4, L3 );; gap> Display( aut3 ); homomorphism to single piece groupoid: Ha4 -> Ha4 root group homomorphism: (1,2,3) -> (1,2,3) (2,3,4) -> (2,3,4) object map: [ -14, -13, -12 ] -> [ -14, -13, -12 ] ray images: [ (), (1,3,2), (2,4,3) ] gap> d3 := ImageElm( aut3, d2 ); [(1,4)(2,3) : -14 -> -12] gap> h4 := Arrow( Ha4, (2,3,4), -12, -13 );; gap> aut4 := GroupoidInnerAutomorphism( Ha4, h4 );; gap> Display( aut4 ); homomorphism to single piece groupoid: Ha4 -> Ha4 root group homomorphism: (1,2,3) -> (1,2,3) (2,3,4) -> (2,3,4) object map: [ -14, -13, -12 ] -> [ -14, -12, -13 ] ray images: [ (), (2,4,3), (2,3,4) ] gap> d4 := ImageElm( aut4, d3 ); [(1,2,4) : -14 -> -13] gap> aut1234 := aut1*aut2*aut3*aut4;; gap> Display( aut1234 ); homomorphism to single piece groupoid: Ha4 -> Ha4 root group homomorphism: (1,2,3) -> (1,4,3) (2,3,4) -> (2,4,3) object map: [ -14, -13, -12 ] -> [ -12, -13, -14 ] ray images: [ (), (1,2)(3,4), (1,2)(3,4) ] gap> d4 = ImageElm( aut1234, d ); true gap> inv1234 := InverseGeneralMapping( aut1234 );; gap> Display( inv1234 ); homomorphism to single piece groupoid: Ha4 -> Ha4 root group homomorphism: (1,2,3) -> (1,2,4) (2,3,4) -> (1,2,3) object map: [ -14, -13, -12 ] -> [ -12, -13, -14 ] ray images: [ (), (), (1,4)(2,3) ]
Let \(S\) be a wide subgroupoid with rays of a standard groupoid \(G\).
An automorphism \(\alpha\) of the root group \(H\) extends to the whole of \(S\) with the rays fixed by the automorphism: \((r^{-1}_ihr_j : o_i \to o_j) \mapsto (r^{-1}_i (\alpha h)r_j : o_i \to o_j)\).
An automorphism of \(G\) obtained by permuting the objects may map \(S\) to a different subgroupoid. So we construct an isomorphism \(\iota\) from \(S\) to a standard groupoid \(T\), construct \(\alpha\) permuting the objects of \(T\), and return \(\iota*\alpha*\iota^{-1}\).
For an automorphism by ray shifts we require that the shifts are elements of the root group of \(S\).
gap> ## (1) automorphism by group auto gap> a5 := GroupHomomorphismByImages( k4, k4, > [ (1,2)(3,4), (1,3)(2,4) ], [ (1,3)(2,4), (1,4)(2,3) ] );; gap> aut5 := GroupoidAutomorphismByGroupAuto( Kk4, a5 ); groupoid homomorphism : Kk4 -> Kk4 [ [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ], [ [(1,3)(2,4) : -14 -> -14], [(1,4)(2,3) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] ] gap> a := Arrow( Kk4, (1,3)(2,4), -12, -12 );; gap> ImageElm( aut5, a ); [(1,4)(2,3) : -12 -> -12] gap> b := Arrow( Kk4, (1,4,2), -12, -13 );; gap> ImageElm( aut5, b ); [(1,2,3) : -12 -> -13] gap> ## (2) automorphism by object perm gap> aut6 := GroupoidAutomorphismByObjectPerm( Kk4, [-13,-12,-14] ); groupoid homomorphism : Kk4 -> Kk4 [ [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ], [ [(1,4)(2,3) : -13 -> -13], [(1,2)(3,4) : -13 -> -13], [(2,3,4) : -13 -> -12], [(1,4,3) : -13 -> -14] ] ] gap> ImageElm( aut6, a ); [(1,3)(2,4) : -14 -> -14] gap> ImageElm( aut6, b ); [(1,3)(2,4) : -14 -> -12] gap> ## (3) automorphism by ray shifts gap> aut7 := GroupoidAutomorphismByRayShifts( Kk4, > [ (), (1,4)(2,3), (1,3)(2,4) ] ); groupoid homomorphism : Kk4 -> Kk4 [ [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ], [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,2,3) : -14 -> -13], [(1,2)(3,4) : -14 -> -12] ] ] gap> ImageElm( aut7, a ); [(1,3)(2,4) : -12 -> -12] gap> ImageElm( aut7, b ); [(1,2,3) : -12 -> -13] gap> ## (4) combine these three automorphisms gap> aut567 := aut5 * aut6 * aut7; groupoid homomorphism : Kk4 -> Kk4 [ [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ], [ [(1,2)(3,4) : -13 -> -13], [(1,3)(2,4) : -13 -> -13], [(1,4,3) : -13 -> -12], [(1,3,2) : -13 -> -14] ] ] gap> ImageElm( aut567, a ); [(1,4)(2,3) : -14 -> -14] gap> ImageElm( aut567, b ); [(1,4)(2,3) : -14 -> -12] gap> ## (5) conjgation by an arrow gap> e8 := Arrow( Kk4, (1,3)(2,4), -14, -12 );; gap> aut8 := GroupoidInnerAutomorphism( Kk4, e8 ); groupoid homomorphism : Kk4 -> Kk4 [ [ [(1,2)(3,4) : -14 -> -14], [(1,3)(2,4) : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ], [ [(1,2)(3,4) : -12 -> -12], [(1,3)(2,4) : -12 -> -12], [(1,4,2) : -12 -> -13], [(1,4)(2,3) : -12 -> -14] ] ]
‣ AutomorphismGroupOfGroupoid ( gpd ) | ( operation ) |
‣ NiceObjectAutoGroupGroupoid ( gpd, aut ) | ( operation ) |
As above, let \(G\) be the direct product of a group \(g\) and a complete digraph with \(n\) objects. The AutomorphismGroup
\(\Aut(G)\) of \(G\) is isomorphic to the quotient of \(S_n \times A \times g^n\) by a subgroup isomorphic to \(g\), where \(A\) is the automorphism group of \(g\) and \(S_n\) is the symmetric group on the \(n\) objects. This is one of the main topics in [AW10].
If \(H\) is the union of \(k\) groupoids, all isomorphic to \(G\), then \(\Aut(H)\) is isomorphic to \(S_k \ltimes \Aut(G)\).
The function NiceObjectAutoGroupGroupoid
takes a groupoid and a subgroup of its automorphism group and retuns a nice monomorphism from this automorphism group to a pc-group, if one is available. The current implementation is experimental. Note that ImageElm
at present only works on generating elements.
gap> AHa4 := AutomorphismGroupOfGroupoid( Ha4 ); Aut(Ha4) gap> Agens := GeneratorsOfGroup( AHa4);; gap> Length( Agens ); 8 gap> NHa4 := NiceObject( AHa4 );; gap> MHa4 := NiceMonomorphism( AHa4 );; gap> Size( AHa4 ); ## (3!)x24x(12^2) 20736 gap> SetName( AHa4, "AHa4" ); gap> SetName( NHa4, "NHa4" ); gap> ## either of these names may be returned gap> names := [ "(((A4 x A4 x A4) : C2) : C3) : C2", > "(C2 x C2 x C2 x C2 x C2 x C2) : (((C3 x C3 x C3) : C3) : (C2 x C2))" ];; gap> StructureDescription( NHa4 ) in names; true gap> ## cannot test images of Agens because of random variations gap> ## Now do some tests! gap> mgi := MappingGeneratorsImages( MHa4 );; gap> autgen := mgi[1];; gap> pcgen := mgi[2];; gap> ngen := Length( autgen );; gap> ForAll( [1..ngen], i -> Order(autgen[i]) = Order(pcgen[i]) ); true
The inner automorphism subgroup \(\mathrm{Inn}(G)\) of the automorphism group of \(G\) is the group of inner automorphisms \(\wedge a : b \mapsto b^a\) for \(a \in G\). It is not the case that the map \(G \to \mathrm{Inn}(G), a \mapsto \wedge a\) preserves multiplication. Indeed, when \(a=(o,g,p), b=(p,h,r) \in G\) with objects \(p,q,r\) all distict, then
\[ \wedge(ab) ~=~ (\wedge a)(\wedge b)(\wedge a) ~=~ (\wedge b)(\wedge a)(\wedge b). \]
(Compare this with the permutation identity \((pq)(qr)(pq) = (pr) = (qr)(pq)(qr)\).) So the map \(G \to \mathrm{Inn}(G)\) is of type IsMappingWithObjectsByFunction
.
In the example we convert the automorphism group AGa4
into a single object groupoid, and then define the inner automorphism map.
gap> AHa40 := Groupoid( AHa4, [0] ); single piece groupoid: < Aut(Ha4), [ 0 ] > gap> conj := function(a) > return ArrowNC( Ha4, true, GroupoidInnerAutomorphism(Ha4,a), 0, 0 ); > end;; gap> inner := MappingWithObjectsByFunction( Ha4, AHa40, conj, [0,0,0] );; gap> a1 := Arrow( Ha4, (1,2,3), -14, -13 );; gap> inn1 := ImageElm( inner, a1 );; gap> a2 := Arrow( Ha4, (2,3,4), -13, -12 );; gap> inn2 := ImageElm( inner, a2 );; gap> a3 := a1*a2; [(1,3)(2,4) : -14 -> -12] gap> inn3 := ImageElm( inner, a3 ); [groupoid homomorphism : Ha4 -> Ha4 [ [ [(1,2,3) : -14 -> -14], [(2,3,4) : -14 -> -14], [() : -14 -> -13], [() : -14 -> -12] ], [ [(1,3,4) : -12 -> -12], [(1,2,4) : -12 -> -12], [(1,3)(2,4) : -12 -> -13], [() : -12 -> -14] ] ] : 0 -> 0] gap> (inn3 = inn1*inn2*inn1) and (inn3 = inn2*inn1*inn2); true
‣ GroupoidAutomorphismByGroupAutos ( gpd, auts ) | ( operation ) |
Homogeneous, discrete groupoids are the second type of groupoid for which a method is provided for AutomorphismGroupOfGroupoid
. This is used in the XMod package for constructing crossed modules of groupoids. The two types of generating automorphism are GroupoidAutomorphismByGroupAutos
, which requires a list of group automorphisms, one for each object group, and GroupoidAutomorphismByObjectPerm
, which permutes the objects. So, if the object groups \(g\) have automorphism group \(\Aut(g)\) and there are \(n\) objects, the autmorphism group of the groupoid has size \(n!|\Aut(g)|^n\).
gap> Dd8 := HomogeneousDiscreteGroupoid( d8, [ -13..-10] ); homogeneous, discrete groupoid: < d8, [ -13 .. -10 ] > gap> aut9 := GroupoidAutomorphismByObjectPerm( Dd8, [-12,-10,-11,-13] ); groupoid homomorphism : morphism from a homogeneous discrete groupoid: [ -13, -12, -11, -10 ] -> [ -12, -10, -11, -13 ] object homomorphisms: IdentityMapping( d8 ) IdentityMapping( d8 ) IdentityMapping( d8 ) IdentityMapping( d8 ) gap> gend8 := GeneratorsOfGroup( d8 );; gap> g1 := gend8[1];; gap> g2 := gend8[2];; gap> b1 := IdentityMapping( d8 );; gap> b2 := GroupHomomorphismByImages( d8, d8, gend8, [g1, g2*g1 ] );; gap> b3 := GroupHomomorphismByImages( d8, d8, gend8, [g1^g2, g2 ] );; gap> b4 := GroupHomomorphismByImages( d8, d8, gend8, [g1^g2, g2^(g1*g2) ] );; gap> aut10 := GroupoidAutomorphismByGroupAutos( Dd8, [b1,b2,b3,b4] ); groupoid homomorphism : morphism from a homogeneous discrete groupoid: [ -13, -12, -11, -10 ] -> [ -13, -12, -11, -10 ] object homomorphisms: IdentityMapping( d8 ) GroupHomomorphismByImages( d8, d8, [ (5,6,7,8), (5,7) ], [ (5,6,7,8), (5,8)(6,7) ] ) GroupHomomorphismByImages( d8, d8, [ (5,6,7,8), (5,7) ], [ (5,8,7,6), (5,7) ] ) GroupHomomorphismByImages( d8, d8, [ (5,6,7,8), (5,7) ], [ (5,8,7,6), (6,8) ] ) gap> ADd8 := AutomorphismGroupOfGroupoid( Dd8 ); <group with 4 generators> gap> Size( ADd8 ); ## 4!*8^4 98304 gap> genADd8 := GeneratorsOfGroup( ADd8 );; gap> Length( genADd8 ); 4 gap> w := GroupoidAutomorphismByGroupAutos( Dd8, [b2,b1,b1,b1] );; gap> x := GroupoidAutomorphismByGroupAutos( Dd8, [b3,b1,b1,b1] );; gap> y := GroupoidAutomorphismByObjectPerm( Dd8, [ -12, -11, -10, -13 ] );; gap> z := GroupoidAutomorphismByObjectPerm( Dd8, [ -12, -13, -11, -10 ] );; gap> ok := ForAll( genADd8, a -> a in[ w, x, y, z ] ); true gap> NADd8 := NiceObject( ADd8 );; gap> MADd8 := NiceMonomorphism( ADd8 );; gap> w1 := ImageElm( MADd8, w );; gap> x1 := ImageElm( MADd8, x );; gap> y1 := ImageElm( MADd8, y );; gap> z1 := ImageElm( MADd8, z );; gap> u := z*w*y*x*z; groupoid homomorphism : morphism from a homogeneous discrete groupoid: [ -13, -12, -11, -10 ] -> [ -11, -13, -10, -12 ] object homomorphisms: IdentityMapping( d8 ) GroupHomomorphismByImages( d8, d8, [ (5,6,7,8), (5,7) ], [ (5,6,7,8), (5,8)(6,7) ] ) IdentityMapping( d8 ) GroupHomomorphismByImages( d8, d8, [ (5,6,7,8), (5,7) ], [ (5,8,7,6), (5,7) ] ) gap> u1 := z1*w1*y1*x1*z1; (1,2,4,3)(5,17,23,11,6,18,24,16)(7,19,25,15,9,21,27,13)(8,20,26,14,10,22,28,12) gap> imu := ImageElm( MADd8, u );; gap> u1 = imu; true
‣ AutomorphismGroupoidOfGroupoid ( gpd ) | ( attribute ) |
If \(G\) is a single piece groupoid with automorphism group \(\Aut(G)\), and if \(H\) is the union of \(k\) pieces, all isomorphic to \(G\), then the automorphism group of \(H\) is the wreath product \(S_k \ltimes \Aut(G)\). However, we find it more convenient to construct the automorphism groupoid of \(H\). This is a single piece groupoid \(\AUT(H)\) with \(k\) objects - the object lists of the pieces of \(H\) - and root group \(\Aut(G)\). Isomorphisms between the root groups of the \(k\) pieces may be applied to the generators of \(\Aut(G)\) to construct automorphism groups of these pieces, and then isomorphisms between these automorphism groups. We then construct \(\AUT(H)\) using GroupoidByIsomorphisms
.
In the special case that \(H\) is homogeneous, there is no need to construct a collection of automorphism groups. Rather, the rays of \(\AUT(H)\) are given by IsomorphismNewObjects
. For the example we use HGd8
constructed in subsection HomogeneousGroupoid
(4.1-5).
gap> HGd8 := HomogeneousGroupoid( Gd8, > [ [-39,-38,-37], [-36,-35,-34], [-33,-32,-31] ] );; gap> SetName( HGd8, "HGd8" ); gap> AHGd8 := AutomorphismGroupoidOfGroupoid( HGd8 ); Aut(HGd8) gap> ObjectList( AHGd8 ); [ [ -39, -38, -37 ], [ -36, -35, -34 ], [ -33, -32, -31 ] ] gap> RaysOfGroupoid( AHGd8 ){[2..3]}; [ groupoid homomorphism : [ [ [(5,6,7,8) : -39 -> -39], [(5,7) : -39 -> -39], [() : -39 -> -38], [() : -39 -> -37] ], [ [(5,6,7,8) : -36 -> -36], [(5,7) : -36 -> -36], [() : -36 -> -35], [() : -36 -> -34] ] ], groupoid homomorphism : [ [ [(5,6,7,8) : -39 -> -39], [(5,7) : -39 -> -39], [() : -39 -> -38], [() : -39 -> -37] ], [ [(5,6,7,8) : -33 -> -33], [(5,7) : -33 -> -33], [() : -33 -> -32], [() : -33 -> -31] ] ] ] gap> obgp := ObjectGroup( AHGd8, [ -36, -35, -34 ] );; gap> Size( obgp ); ## 3!*8^3 3072
Suppose that gpd
is the direct product of a group \(G\) and a complete digraph, and that \(\rho : G \to M\) is an isomorphism to a matrix group \(M\). Then, if rep
is the isomorphic groupoid with the same objects and root group \(M\), there is an isomorphism \(\mu\) from gpd
to rep
mapping \((g : i \to j)\) to \((\rho g : i \to j)\).
When gpd
is a groupoid with rays, a representation can be obtained by restricting a representation of its parent.
gap> reps := IrreducibleRepresentations( a4 );; gap> rep4 := reps[4]; Pcgs([ (2,4,3), (1,3)(2,4), (1,2)(3,4) ]) -> [ [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ], [ [ -1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, -1 ] ], [ [ 1, 0, 0 ], [ 0, -1, 0 ], [ 0, 0, -1 ] ] ] gap> Ra4 := Groupoid( Image( rep4 ), Ga4!.objects );; gap> ObjectList( Ra4 ) = [ -15 .. -11 ]; true gap> gens := GeneratorsOfGroupoid( Ga4 ); [ [(1,2,3) : -15 -> -15], [(2,3,4) : -15 -> -15], [() : -15 -> -14], [() : -15 -> -13], [() : -15 -> -12], [() : -15 -> -11] ] gap> images := List( gens, > g -> Arrow( Ra4, ImageElm(rep4,g![2]), g![3], g![4] ) ); [ [[ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, 0 ] ] : -15 -> -15], [[ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] : -15 -> -15], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -14], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -13], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -12], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -11] ] gap> mor := GroupoidHomomorphismFromSinglePiece( Ga4, Ra4, gens, images ); groupoid homomorphism : [ [ [(1,2,3) : -15 -> -15], [(2,3,4) : -15 -> -15], [() : -15 -> -14], [() : -15 -> -13], [() : -15 -> -12], [() : -15 -> -11] ], [ [[ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, 0 ] ] : -15 -> -15], [[ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] : -15 -> -15], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -14], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -13], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -12], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -15 -> -11] ] ] gap> IsMatrixGroupoid( Ra4 ); true gap> a := Arrow( Ha4, (1,4,2), -12, -13 ); [(1,4,2) : -12 -> -13] gap> ImageElm( mor, a ); [[ [ 0, 0, 1 ], [ -1, 0, 0 ], [ 0, -1, 0 ] ] : -12 -> -13] gap> rmor := RestrictedMappingGroupoids( mor, Ha4 ); groupoid homomorphism : [ [ [(1,2,3) : -14 -> -14], [(2,3,4) : -14 -> -14], [() : -14 -> -13], [() : -14 -> -12] ], [ [[ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, 0 ] ] : -14 -> -14], [[ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] : -14 -> -14], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -14 -> -13], [[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] : -14 -> -12] ] ] gap> ParentMappingGroupoids( rmor ) = mor; true
generated by GAPDoc2HTML