Homomorphisms of Groupoids

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. The simplest example of this is given by homomorphism 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}].

Homomorphisms to a connected groupoid
As usual, there are a variety of homomorphism constructors. The basic construction is a homomorphism G \to H with H connected, which is implemented as IsHomomorphismToSinglePieceGroupoidRep with attributes Source, Range and PieceImages. If G is also connected, we may apply HomomorphismOfSinglePieceGroupoids, requiring: a homomorphism hom from the group of G to the group of H. a list imobs of the images of the objects of G;

gap> d12 := Group( (15,16,17,18,19,20, (15,20)(16,19)(17,18) );; gap> Gd12 := SinglePieceGroupoid( [-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 := SubgroupoidByPieces( 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> homd8 := GroupoidHomomorphism( Gd8, Gs3d, hd8, [-34,-35,-36] ); groupoid homomorphism : Gd8 -> Gs3d gap> IsBijectiveOnObjects( homd8 ); true gap> Display( homd8 ); groupoid mapping: [ Gd8 ] -> [ Gs3d ] root homomorphism: [ [ (1,2,3,4), (1,3) ], [ (), (15,20)(16,19)(17,18) ] ] images of objects: [ -34, -35, -36 ] images of rays: [ (), (), () ]