Morphisms of Groupoids

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 \langle a \rangle on one generator, when the image is [1,a,a^{-1}].

Morphisms to a connected groupoid
As usual, there are a variety of morphism constructors. The basic construction is a morphism G \to 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) ] ]
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) ] ]
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) ] ]
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) ], [ () ] ]
General Morphisms and composites
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
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
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]
*,\^{} for groupoid morphisms
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), () ] ]
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