[1X5 Homomorphisms of Groupoids[0X A [13Xhomomorphism[0m 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 < a > on one generator, when the image is [1,a,a^-1]. [1X5.1 Homomorphisms to a connected groupoid[0X [1X5.1-1 GroupoidHomomorphism[0m [2X> GroupoidHomomorphism( [0X[3Xargs[0X[2X ) _____________________________________[0Xfunction [2X> GroupoidHomomorphismFromSinglePiece( [0X[3Xsrc, rng, hom, imobs[0X[2X ) _____[0Xoperation [2X> Source( [0X[3Xhom[0X[2X ) ___________________________________________________[0Xattribute [2X> Range( [0X[3Xhom[0X[2X ) ____________________________________________________[0Xattribute As usual, there are a variety of homomorphism constructors. The basic construction is a homomorphism G -> H with H connected, which is implemented as [10XIsHomomorphismToSinglePieceGroupoidRep[0m with attributes [10XSource[0m, [10XRange[0m and [10XPieceImages[0m. If G is also connected, we may apply [10XHomomorphismOfSinglePieceGroupoids[0m, requiring: -- a homomorphism [10Xhom[0m from the group of G to the group of H. -- a list [10Ximobs[0m of the images of the objects of G; [4X--------------------------- Example ----------------------------[0X [4X[0X [4Xgap> d12 := Group( (15,16,17,18,19,20, (15,20)(16,19)(17,18) );;[0X [4Xgap> Gd12 := SinglePieceGroupoid( [-37,-36,-35,-34], d12 );;[0X [4Xgap> SetName( d12, "d12" ); SetName( Gd12, "Gd12" );[0X [4Xgap> s3d := Subgroup( d12, [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ] );[0X [4Xgap> Gs3d := SubgroupoidByPieces( Gd12, [ [[-36,-35,-34], s3d] ] );;[0X [4Xgap> SetName( s3d, "s3d" ); SetName( Gs3d, "Gs3d" );[0X [4Xgap> gend8 := GeneratorsOfGroup( d8 );;[0X [4Xgap> imhd8 := [ ( ), (15,20)(16,19)(17,18) ];;[0X [4Xgap> hd8 := GroupHomomorphismByImages( d8, s3d, gend8, imhd8 );[0X [4Xgap> homd8 := GroupoidHomomorphism( Gd8, Gs3d, hd8, [-34,-35,-36] );[0X [4Xgroupoid homomorphism : Gd8 -> Gs3d [0X [4Xgap> IsBijectiveOnObjects( homd8 );[0X [4Xtrue[0X [4Xgap> Display( homd8 );[0X [4Xgroupoid mapping: [ Gd8 ] -> [ Gs3d ][0X [4Xroot homomorphism: [ [ (1,2,3,4), (1,3) ], [ (), (15,20)(16,19)(17,18) ] ][0X [4Ximages of objects: [ -34, -35, -36 ][0X [4X images of rays: [ (), (), () ][0X [4X[0X [4X------------------------------------------------------------------[0X