A morphism 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 morphism is not injective on objects, the image of the source need not be a subgroupoid of the range. The simplest example of this is given by mapping the two-object groupoid with trivial group to the free group < a > on one generator, when the image is [1,a,a^-1].
> MorphismOfConnectedGroupoids ( G, H, imobs, hom ) | ( function ) |
> Source ( mor ) | ( attribute ) |
> Range ( mor ) | ( attribute ) |
> ComponentImages ( mor ) | ( attribute ) |
As usual, there are a variety of morphism constructors. The basic construction is a morphism G -> H with H connected, which is implemented as IsMorphismToConnectedGroupoidRep
with attributes Source
, Range
and ComponentImages
. If G is also connected, we may apply MorphismOfConnectedGroupoids
, requiring:
a list imobs
of the images of the objects of G;
a homomorphism hom
from the group of G to the group of H.
gap> d12 := Group( (15,16,17,18,19,20, (15,20)(16,19)(17,18) );; gap> Gd12 := ConnectedGroupoid( [-37,-36,-35,-34], d12 );; gap> SetName( d12, "d12" ); SetName( Gd12, "Gd12" ); gap> s3d := Subgroup( d12, [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ] ); gap> Gs3d := SubgroupoidByComponents( Gd12, [ [[-36,-35,-34], s3d] ] );; gap> SetName( s3d, "s3d" ); SetName( Gs3d, "Gs3d" ); gap> gend8 := GeneratorsOfGroup( d8 );; gap> imhd8 := [ ( ), (15,20)(16,19)(17,18) ];; gap> hd8 := GroupHomomorphismByImages( d8, s3d, gend8, imhd8 ); gap> md8 := MorphismOfConnectedGroupoids( Gd8, Gs3d, [-34,-35,-36], hd8 ); Groupoid morphism : Gd8 -> Gs3d gap> IsBijectiveOnObjects( md8 ); true gap> Display( md8 ); Morphism to connected groupoid: [ Gd8 ] -> [ Gs3d ] object map = [ [ -9, -8, -7 ], [ -34, -35, -36 ] ] homomorphism = [ [ (1,2,3,4), (1,3) ], [ (), (15,20)(16,19)(17,18) ] ] |
> MorphismToConnectedGroupoid ( G, H, obhoms ) | ( function ) |
> GroupoidMorphismWithCommonRange ( G, H, mors ) | ( function ) |
> GroupoidMorphism ( args ) | ( function ) |
When G is not connected the appropriate operation is MorphismToConnectedGroupoid( G, H, obhoms )
, where the third parameter is a list ComponentImages( mor )
of [imobs,hom]
pairs.
The operation GroupoidMorphismWithCommonRange
combines into a single morphism two or more morphisms, in the list mors
, with range H and source a subgroupoid of G.
The global function GroupoidMorphism
will normally find the appropriate operation to call.
gap> hc6 := GroupHomomorphismByImages( c6, s3d, [(5,6,7)(8,9)], [(15,19)(16,18)] );; gap> mc6 := GroupoidMorphism( Gc6, Gs3d, [ -36 ], hc6 );; gap> md8c6 := MorphismToConnectedGroupoid( Gd8c6, Gs3d, [ [[-34,-35,-36], hd8], [[-36], hc6] ] ); Groupoid morphism : Gd8+Gc6 -> Gs3d gap> Display( md8c6 ); Morphism to connected groupoid with components: [ Gd8 ] -> [ Gs3d ] object map = [ [ -9, -8, -7 ], [ -34, -35, -36 ] ] homomorphism = [ [ (1,2,3,4), (1,3) ], [ (), (15,20)(16,19)(17,18) ] ] [ Gc6 ] -> [ Gs3d ] object map = [ [ -6 ], [ -36 ] ] homomorphism = [ [ (5,6,7)(8,9) ], [ (15,19)(16,18) ] ] gap> gap> gens3d := GeneratorsOfGroup( s3d );; gap> imas3d := [ (15,17,19)(16,18,20), (15,16)(17,20)(18,19) ];; gap> as3d := GroupHomomorphismByImages( s3d, s3d, gens3d, imas3d );; gap> aGs3d := MorphismOfConnectedGroupoids( Gs3d, Gs3d, [-35,-34,-36], as3d );; gap> IsGroupoidAutomorphism( aGs3d ); true gap> Order( aGs3d ); 3 gap> Gs3dd8 := GroupoidByUnion( [ Gd8, Gs3d ] );; gap> SetName( Gs3dd8, "Gs3d+Gd8" );; gap> common := GroupoidMorphismWithCommonRange( Gs3dd8, Gs3d, [ aGs3d, md8 ] );; gap> Display( common ); Morphism to connected groupoid with components: [ Gs3d ] -> [ Gs3d ] object map = [ [ -36, -35, -34 ], [ -35, -34, -36 ] ] homomorphism = [ [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ], [ (15,17,19)(16,18,20), (15,16)(17,20)(18,19) ] ] [ Gd8 ] -> [ Gs3d ] object map = [ [ -9, -8, -7 ], [ -34, -35, -36 ] ] homomorphism = [ [ (1,2,3,4), (1,3) ], [ (), (15,20)(16,19)(17,18) ] ] |
> IsomorphismNewObjects ( gpd, obs ) | ( operation ) |
> IdentityMapping ( gpd ) | ( attribute ) |
The function IsomorphismNewObjects
provides an isomorphism to an isomorphic groupoid with a new set of objects. The function IdentityMapping
, already provided for groups, is also implemented for groupoids.
gap> idGd8 := IdentityMapping( Gd8 ); Groupoid morphism: [ Gd8 ] -> [ Gd8 ] gap> copys3d := IsomorphismNewObjects( Gs3d, [-24,-25,-26] );; gap> Hs3d := Range( copys3d );; gap> SetName( Hs3, "Hs3" ); gap> Display( copys3d ); Morphism to connected groupoid: [ Gs3d ] -> [ Hs3d ] object map = [ [ -36, -35, -34 ], [ -32, -31, -30 ] ] homomorphism = [ [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ], [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ] ] |
> InclusionMappingGroupoids ( G, U ) | ( operation ) |
> RestrictionMappingGroupoids ( hom, src, rng ) | ( operation ) |
We have added functions InclusionMappingGroupoids
and RestrictionMappingGroupoids
, corresponding to InclusionMappingGroups
and RestrictionMappingGroups
for groups. At present RestrictionMappingGroups
is only implemented for the case where the source and range of the morphism are connected.
gap> SetName( ComponentsOfGroupoid(Ud8)[1], "Ud8a" ); gap> SetName( ComponentsOfGroupoid(Ud8)[2], "Ud8b" ); gap> inc := InclusionMappingGroupoids( Gd8, Ud8 );; gap> Display( inc ); Morphism to connected groupoid with components: [ Ud8a ] -> [ Gd8 ] object map = [ [ -9 ], [ -9 ] ] homomorphism = [ [ (1,2)(3,4), (1,3)(2,4) ], [ (1,2)(3,4), (1,3)(2,4) ] ] [ Ud8b ] -> [ Gd8 ] object map = [ [ -8, -7 ], [ -8, -7 ] ] homomorphism = [ [ (1,2,3,4) ], [ (1,2,3,4) ] ] gap> res := RestrictionMappingGroupoids( md8, Ud8, Gs3d ); gap> Display( res ); Morphism to connected groupoid with components: [ Ud8a ] -> [ Gs3d ] object map = [ [ -9 ], [ -34 ] ] homomorphism = [ [ (1,2)(3,4), (1,3)(2,4) ], [ (15,20)(16,19)(17,18), () ] ] [ Ud8b ] -> [ Gs3d ] object map = [ [ -8, -7 ], [ -35, -36 ] ] homomorphism = [ [ (1,2,3,4) ], [ () ] ] |
> GroupoidMorphismByComponents ( G, H, mors ) | ( operation ) |
> GroupoidMorphismByUnion ( mors ) | ( function ) |
When H is not connected, a groupoid morphism from G to H is a union of a list mors
of morphisms of connected groupoids.
There are two ways of combining m1 : G1->H1
and m2 : G2->H2
into a single morphism. The operation GroupoidMorphismByUnion( [m1,m2] );
constucts the groupoid unions G12,H12
of G1
with G2
and H1
with H2
, and then a morphism m12 : G12->H12
. If G12,H12
have already been constructed, the operation GroupoidMorphismByComponents( G12, H12, [m1,m2] );
may be more appropriate.
gap> imad8 := [ (1,2,3,4), (2,4) ];; gap> ad8 := GroupHomomorphismByImages( d8, d8, [(1,2,3,4),(1,3)], imad8 );; gap> aGd8 := MorphismOfConnectedGroupoids( Gd8, Gd8, [-8,-7,-9], ad8 );; gap> mor1 := GroupoidMorphismByUnion( [ aGd8, mc6 ] );; gap> mor2 := GroupoidMorphismByComponents( Gd8c6, Gs3dd8, [ aGd8, mc6 ] );; gap> Display( mor2 ); Groupoid Morphism: Gd8+Gc6 -> Gs3d+Gd8 with components : [ Gc6 ] -> [ Gs3d ] object map = [ [ -6 ], [ -36 ] ] homomorphism = [ [ (5,6,7)(8,9) ], [ (15,19)(16,18) ] ] [ Gd8 ] -> [ Gd8 ] object map = [ [ -9, -8, -7 ], [ -8, -7, -9 ] ] homomorphism = [ [ (1,2,3,4), (1,3) ], [ (1,2,3,4), (2,4) ] ] gap> mor1 = mor2; true |
> IsGroupoidMorphism ( mor ) | ( property ) |
> IsInjectiveOnObjects ( mor ) | ( property ) |
> IsSurjectiveOnObjects ( mor ) | ( property ) |
> IsBijectiveOnObjects ( mor ) | ( property ) |
> IsGroupoidAutomorphism ( mor ) | ( property ) |
Here are some of the basic properties of groupoid morphisms.
gap> IsGroupoidMorphism( res ); true gap> IsInjectiveOnObjects( res ); true gap> IsInjective( res ); false gap> IsSurjectiveOnObjects( inc ); true gap> IsSurjective( inc ); false gap> IsGroupoidAutomorphism( aGd8 ); true gap> eGd8 := MorphismOfConnectedGroupoids( Gd8, Gd8, [-7,-7,-9], ad8 );; gap> IsGroupoidEndomorphism( eGd8 ); true |
> ImagesOfObjects ( mor ) | ( attribute ) |
> ImagesSource ( mor ) | ( attribute ) |
> ImageElm ( mor, elt ) | ( operation ) |
Here are some of examples of operations that return images. These are not yet fully implemented: for example, ImageElm
and ImagesSource
require the range of mor
to be connected.
gap> ImagesOfObjects( md8 ); [ [ -34, -35, -36, -36 ] ] gap> ImagesSource(md8); Perm Connected Groupoid: < [ -36, -35, -34 ], Group( [ (), (15,20)(16,19)(17,18) ] ) > gap> e1; [(1,2)(3,4) : -9 -> -8] gap> ImageElm( md8c6, e1 ); [(15,20)(16,19)(17,18) : -34 -> -35] |
> Product ( mors ) | ( operation ) |
Morphisms m_1, m_2 can be composed if the image of m_1 is contained in the domain of m_2. Currently composition is only defined for morphisms of connected groupoids.
gap> Hk4d := SubgroupoidByComponents( Gd8, [ [[-9,-8,-7], k4d] ] );; gap> genq8 := GeneratorsOfGroup(q8);; gap> hq8 := GroupHomomorphismByImages( q8,k4d,genq8,[(1,2)(3,4),(1,3)(2,4),()]);; gap> mq8 := GroupoidMorphism( Gq8, Hk4d, [-7,-9], hq8 );; gap> iHk4d := InclusionMappingGroupoids( Gd8, Hk4d );; gap> mor3 := mq8*iHk4d;; gap> Display( mor3 ); Morphism to connected groupoid: [ Gq8 ] -> [ Gd8 ] object map = [ [ -28, -27 ], [ -7, -9 ] ] homomorphism = [ Pcgs([ f1, f2, f3 ]), [ (1,2)(3,4), (1,3)(2,4), () ] ] gap> mor4 := mor1*aGd8;; gap> Display( mor4 ); Morphism to connected groupoid: [ Gq8 ] -> [ Gd8 ] object map = [ [ -28, -27 ], [ -9, -8 ] ] homomorphism = [ Pcgs([ f1, f2, f3 ]), [ (1,4)(2,3), (1,3)(2,4), () ] ] |
> InverseMorphism ( mor ) | ( attribute ) |
> Order ( mor ) | ( attribute ) |
The inverse of a morphism m is defined when m is bijective on objects and on elements. The operation InverseMorphism
is a synonym for InverseGeneralMapping
. The order of an automorphism is the smallest power which returns the identity morphism of G.
gap> genq8 := GeneratorsOfGroup( q8 );; gap> imq8 := [ q8.2, q8.1*q8.2, q8.3 ]; [ f2, f1*f2, f3 ] gap> autq8 := GroupHomomorphismByImages( q8, q8, genq8, imq8 );; gap> autGq8 := GroupoidMorphism( Gq8, Gq8, [-27,-28], autq8 );; gap> Display( InverseMorphism( autGq8 ) ); Morphism to connected groupoid: [ Gq8 ] -> [ Gq8 ] object map = [ [ -28, -27 ], [ -27, -28 ] ] homomorphism = [ [ f2, f1*f2, f3 ], [ f1, f2, f3 ] ] gap> Order( autGq8 ); 6 |
generated by GAPDoc2HTML