  
  [1X4 [33X[0;0YHomomorphisms of Groupoids[133X[101X
  
  [33X[0;0YA  [13Xhomomorphism[113X  [22Xm[122X  from a groupoid [22XG[122X to a groupoid [22XH[122X consists of a map from
  the objects of [22XG[122X to those of [22XH[122X together with a map from the elements of [22XG[122X to
  those  of  [22XH[122X  which  is  compatible  with  tail and head and which preserves
  multiplication:[133X
  
  
        [33X[1;6Y[24X[33X[0;0Ym(g1 : o1 \to o2)*m(g2 : o2 \to o3) ~=~ m(g1*g2 : o1 \to o3).[133X [124X[133X
  
  
  [33X[0;0YNote  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 [22X⟨ a ⟩[122X on one generator, when the image is
  [22X[1,a^n,a^-n][122X for some [22Xn>0[122X.[133X
  
  
  [1X4.1 [33X[0;0YHomomorphisms from a connected groupoid[133X[101X
  
  [1X4.1-1 GroupoidHomomorphismFromSinglePiece[101X
  
  [29X[2XGroupoidHomomorphismFromSinglePiece[102X( [3Xsrc[103X, [3Xrng[103X, [3Xhom[103X, [3Ximobs[103X, [3Ximrays[103X ) [32X operation
  [29X[2XGroupoidHomomorphismByGroupHom[102X( [3Xsrc[103X, [3Xrng[103X, [3Xhom[103X ) [32X operation
  [29X[2XGroupoidHomomorphism[102X( [3Xargs[103X ) [32X function
  [29X[2XInclusionMappingGroupoids[102X( [3Xgpd[103X, [3Xsgpd[103X ) [32X operation
  [29X[2XRootObjectHomomorphism[102X( [3Xgpdhom[103X ) [32X attribute
  
  [33X[0;0YAs  usual, there are various homomorphism operations. The basic construction
  is a homomorphism [22XG -> H[122X with [22XG[122X the direct product of a group and a complete
  graph.  The  homomorphism  has  attributes  [10XSource[110X,  [10XRange[110X, [10XImagesOfObjects[110X,
  [10XPieceImages[110X  and  [10XRootObjectHomomorphism[110X.  The  input  data  consists of the
  source; the range; and[133X
  
  [30X    [33X[0;6Ya homomorphism [10Xhom[110X from the root group of [22XG[122X to that of [22XH[122X;[133X
  
  [30X    [33X[0;6Ya list [10Ximobs[110X of the images of the objects of [22XG[122X;[133X
  
  [30X    [33X[0;6Ya list [10Ximrays[110X of the images of the rays of [22XG[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xgend12 := [ (15,16,17,18,19,20), (15,20)(16,19)(17,18) ];; [127X[104X
    [4X[25Xgap>[125X [27Xd12 := Group( gend12 );; [127X[104X
    [4X[25Xgap>[125X [27XGd12 := Groupoid( d12, [-37,-36,-35,-34] );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( d12, "d12" );  [127X[104X
    [4X[25Xgap>[125X [27XSetName( Gd12, "Gd12" );[127X[104X
    [4X[25Xgap>[125X [27Xs3 := Subgroup( d12, [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ] );;[127X[104X
    [4X[25Xgap>[125X [27XGs3 := SubgroupoidByPieces( Gd12, [ [ s3, [-36,-35,-34] ] ] );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( s3, "s3" );  [127X[104X
    [4X[25Xgap>[125X [27XSetName( Gs3, "Gs3" );[127X[104X
    [4X[25Xgap>[125X [27Xgend8 := GeneratorsOfGroup( d8 );;[127X[104X
    [4X[25Xgap>[125X [27Ximhd8 := [ ( ), (15,20)(16,19)(17,18) ];;[127X[104X
    [4X[25Xgap>[125X [27Xhd8 := GroupHomomorphismByImages( d8, s3, gend8, imhd8 );;[127X[104X
    [4X[25Xgap>[125X [27Xhomd8 := GroupoidHomomorphismByGroupHom( Gd8, Gs3, hd8 ); [127X[104X
    [4X[28Xgroupoid homomorphism : Gd8 -> Gs3[128X[104X
    [4X[28X[ [ GroupHomomorphismByImages( d8, s3, [ (1,2,3,4), (1,3) ], [128X[104X
    [4X[28X        [ (), (15,20)(16,19)(17,18) ] ), [ -36, -35, -34 ], [ (), (), () ] ] ][128X[104X
    [4X[25Xgap>[125X [27Xe2; ImageElm( homd8, e2 );[127X[104X
    [4X[28X[(1,3) : -8 -> -7][128X[104X
    [4X[28X[(15,20)(16,19)(17,18) : -35 -> -34][128X[104X
    [4X[25Xgap>[125X [27XincGs3 := InclusionMappingGroupoids( Gd12, Gs3 );; [127X[104X
    [4X[25Xgap>[125X [27Xihomd8 := homd8 * incGs3;; [127X[104X
    [4X[25Xgap>[125X [27XIsBijectiveOnObjects( ihomd8 );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XDisplay( ihomd8 );[127X[104X
    [4X[28X groupoid mapping: [ Gd8 ] -> [ Gd12 ][128X[104X
    [4X[28Xroot homomorphism: [ [ (1,2,3,4), (1,3) ], [ (), (15,20)(16,19)(17,18) ] ][128X[104X
    [4X[28Ximages of objects: [ -36, -35, -34 ][128X[104X
    [4X[28X   images of rays: [ (), (), () ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X4.2 [33X[0;0YHomomorphisms to a connected groupoid[133X[101X
  
  [1X4.2-1 HomomorphismToSinglePiece[101X
  
  [29X[2XHomomorphismToSinglePiece[102X( [3Xsrc[103X, [3Xrng[103X, [3Xpieces[103X ) [32X operation
  
  [33X[0;0YWhen  [22XG[122X  is  made  up  of  two  or more pieces, all of which get mapped to a
  connected  groupoid,  we  have  a  [13Xhomomorphism to a single piece[113X. The third
  input  parameter in this case is a list of the [10XPieceImages[110X of the individual
  homomorphisms  [13Xfrom[113X the single pieces. See section [14X2.1[114X for the corresponding
  operation on homomorphisms of magmas with objects.[133X
  
  [33X[0;0YIn the following example the source [10XV3[110X of [10XhomV3[110X has three pieces, and one of
  the component homomorphisms is an [10XIdentityMapping[110X .[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xhc6 := GroupHomomorphismByImages( c6, s3, [127X[104X
    [4X[25X>[125X [27X           [(5,6,7)(8,9)], [(15,16)(17,20)(18,19)] );;[127X[104X
    [4X[25Xgap>[125X [27XFs3 := FullSubgroupoid( Gs3, [ -35 ] );; [127X[104X
    [4X[25Xgap>[125X [27XSetName( Fs3, "Fs3" ); [127X[104X
    [4X[25Xgap>[125X [27Xhomc6 := GroupoidHomomorphism( Gc6, Fs3, hc6 );;[127X[104X
    [4X[25Xgap>[125X [27XincFs3 := InclusionMappingGroupoids( Gs3, Fs3 );; [127X[104X
    [4X[25Xgap>[125X [27Xihomc6 := homc6 * incFs3; [127X[104X
    [4X[28Xgroupoid homomorphism : Gc6 -> Gs3[128X[104X
    [4X[28X[ [ GroupHomomorphismByImages( c6, s3, [ (5,6,7)(8,9) ], [128X[104X
    [4X[28X        [ (15,16)(17,20)(18,19) ] ), [ -35 ], [ () ] ] ][128X[104X
    [4X[25Xgap>[125X [27XidGs3 := IdentityMapping( Gs3 );;[127X[104X
    [4X[25Xgap>[125X [27XV3 := ReplaceOnePieceInUnion( U3, 1, Gs3 ); [127X[104X
    [4X[28Xgroupoid with 3 pieces:[128X[104X
    [4X[28X[ Gs3, Gd8, Gc6 ][128X[104X
    [4X[25Xgap>[125X [27Ximages3 := [ PieceImages( idGs3 )[1], [127X[104X
    [4X[25X>[125X [27X                PieceImages( homd8 )[1], [127X[104X
    [4X[25X>[125X [27X                PieceImages( ihomc6 )[1] ];; [127X[104X
    [4X[25Xgap>[125X [27XhomV3 := HomomorphismToSinglePiece( V3, Gs3, images3 );; [127X[104X
    [4X[25Xgap>[125X [27XDisplay( homV3 );         [127X[104X
    [4X[28Xhomomorphism to single piece magma with pieces:[128X[104X
    [4X[28X(1): [ Gs3 ] -> [ Gs3 ][128X[104X
    [4X[28Xmagma mapping: [ [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ], [128X[104X
    [4X[28X  [ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ] ][128X[104X
    [4X[28X   object map: [ -36, -35, -34 ] -> [ -36, -35, -34 ][128X[104X
    [4X[28X(2): [ Gd8 ] -> [ Gs3 ][128X[104X
    [4X[28Xmagma mapping: [ [ (1,2,3,4), (1,3) ], [ (), (15,20)(16,19)(17,18) ] ][128X[104X
    [4X[28X   object map: [ -9, -8, -7 ] -> [ -36, -35, -34 ][128X[104X
    [4X[28X(3): [ Gc6 ] -> [ Gs3 ][128X[104X
    [4X[28Xmagma mapping: [ [ (5,6,7)(8,9) ], [ (15,16)(17,20)(18,19) ] ][128X[104X
    [4X[28X   object map: [ -6 ] -> [ -35 ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X4.3 [33X[0;0YHomomorphisms with more than one piece[133X[101X
  
  [1X4.3-1 HomomorphismByUnion[101X
  
  [29X[2XHomomorphismByUnion[102X( [3Xsrc[103X, [3Xrng[103X, [3Xhoms[103X ) [32X operation
  
  [33X[0;0YAs in section [14X2.3[114X, when the range [22XH[122X has more than one connected component, a
  homomorphism is a union of homomorphisms, one for each piece.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xisoq8 := IsomorphismNewObjects( Gq8, [-38,-37] ); [127X[104X
    [4X[28Xgroupoid homomorphism : [128X[104X
    [4X[28X[ [128X[104X
    [4X[28X  [ IdentityMapping( q8 ), [ -38, -37 ], [128X[104X
    [4X[28X      [ <identity> of ..., <identity> of ... ] ] ][128X[104X
    [4X[25Xgap>[125X [27XGq8b := Range( isoq8 );; [127X[104X
    [4X[25Xgap>[125X [27XSetName( Gq8b, "Gq8b" ); [127X[104X
    [4X[25Xgap>[125X [27XV4 := UnionOfPieces( [ V3, Gq8 ] ); [127X[104X
    [4X[28Xgroupoid with 4 pieces:[128X[104X
    [4X[28X[ Gs3, Gq8, Gd8, Gc6 ][128X[104X
    [4X[25Xgap>[125X [27XSetName( V4, "V4" ); [127X[104X
    [4X[25Xgap>[125X [27XVs3q8b := UnionOfPieces( [ Gs3, Gq8b ] ); [127X[104X
    [4X[25Xgap>[125X [27XSetName( Vs3q8b, "Vs3q8b" ); [127X[104X
    [4X[25Xgap>[125X [27Xhom4 := HomomorphismByUnion( V4, Vs3q8b, [ homV3, isoq8 ] );; [127X[104X
    [4X[25Xgap>[125X [27XPiecesOfMapping( hom4 );[127X[104X
    [4X[28X[ groupoid homomorphism : Gq8 -> Gq8b[128X[104X
    [4X[28X    [ [ IdentityMapping( q8 ), [ -38, -37 ], [128X[104X
    [4X[28X          [ <identity> of ..., <identity> of ... ] ] ], [128X[104X
    [4X[28X  groupoid homomorphism : [128X[104X
    [4X[28X    [ [ IdentityMapping( s3 ), [ -36, -35, -34 ], [ (), (), () ] ], [128X[104X
    [4X[28X      [ GroupHomomorphismByImages( d8, s3, [ (1,2,3,4), (1,3) ], [128X[104X
    [4X[28X            [ (), (15,20)(16,19)(17,18) ] ), [ -36, -35, -34 ], [128X[104X
    [4X[28X          [ (), (), () ] ], [128X[104X
    [4X[28X      [ GroupHomomorphismByImages( c6, s3, [ (5,6,7)(8,9) ], [128X[104X
    [4X[28X            [ (15,16)(17,20)(18,19) ] ), [ -35 ], [ () ] ] ] ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X4.4 [33X[0;0YGroupoid automorphisms[133X[101X
  
  [1X4.4-1 GroupoidAutomorphismByObjectPerm[101X
  
  [29X[2XGroupoidAutomorphismByObjectPerm[102X( [3Xgpd[103X, [3Ximobs[103X ) [32X operation
  [29X[2XGroupoidAutomorphismByGroupAuto[102X( [3Xgpd[103X, [3Xgpauto[103X ) [32X operation
  [29X[2XGroupoidAutomorphismByRayImages[102X( [3Xgpd[103X, [3Ximrays[103X ) [32X operation
  
  [33X[0;0YWe  first  describe  automorphisms  [22Xa[122X  of a groupoid [22XG[122X where [22XG[122X is the direct
  product  of  a  group  [22Xg[122X and a complete graph. The group of automorphisms is
  generated by three types of automorphism:[133X
  
  [30X    [33X[0;6Ya permutation of the [22Xn[122X objects;[133X
  
  [30X    [33X[0;6Yan automorphism of the root group [22Xg[122X;[133X
  
  [30X    [33X[0;6Ya choice of image for each ray: [22Xa(1 : o_1 -> o_i) = (g_i : o_1 -> o_i)[122X
        for [22Xi ne 1[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xa4 := Subgroup( s4, [(1,2,3),(2,3,4)] );; [127X[104X
    [4X[25Xgap>[125X [27XSetName( a4, "a4" ); [127X[104X
    [4X[25Xgap>[125X [27Xgensa4 := GeneratorsOfGroup( a4 );; [127X[104X
    [4X[25Xgap>[125X [27XGa4 := SubgroupoidByPieces( Gs4, [ [a4, [-15,-13,-11]] ] ); [127X[104X
    [4X[28Xsingle piece groupoid: < a4, [ -15, -13, -11 ] >[128X[104X
    [4X[25Xgap>[125X [27XSetName( Ga4, "Ga4" ); [127X[104X
    [4X[25Xgap>[125X [27Xaut1 := GroupoidAutomorphismByObjectPerm( Ga4, [-13,-11,-15] );; [127X[104X
    [4X[25Xgap>[125X [27XDisplay( aut1 ); [127X[104X
    [4X[28X groupoid mapping: [ Ga4 ] -> [ Ga4 ][128X[104X
    [4X[28Xroot homomorphism: [ [ (1,2,3), (2,3,4) ], [ (1,2,3), (2,3,4) ] ][128X[104X
    [4X[28Ximages of objects: [ -13, -11, -15 ][128X[104X
    [4X[28X   images of rays: [ (), (), () ][128X[104X
    [4X[25Xgap>[125X [27Xh2 := GroupHomomorphismByImages( a4, a4, gensa4, [(2,3,4), (1,3,4)] );; [127X[104X
    [4X[25Xgap>[125X [27Xaut2 := GroupoidAutomorphismByGroupAuto( Ga4, h2 );; [127X[104X
    [4X[25Xgap>[125X [27XDisplay( aut2 ); [127X[104X
    [4X[28X groupoid mapping: [ Ga4 ] -> [ Ga4 ][128X[104X
    [4X[28Xroot homomorphism: [ [ (1,2,3), (2,3,4) ], [ (2,3,4), (1,3,4) ] ][128X[104X
    [4X[28Ximages of objects: [ -15, -13, -11 ][128X[104X
    [4X[28X   images of rays: [ (), (), () ][128X[104X
    [4X[25Xgap>[125X [27Xim3 := [(), (1,3,2), (2,4,3)];; [127X[104X
    [4X[25Xgap>[125X [27Xaut3 := GroupoidAutomorphismByRayImages( Ga4, im3 );; [127X[104X
    [4X[25Xgap>[125X [27XDisplay( aut3 ); [127X[104X
    [4X[28X groupoid mapping: [ Ga4 ] -> [ Ga4 ][128X[104X
    [4X[28Xroot homomorphism: [ [ (1,2,3), (2,3,4) ], [ (1,2,3), (2,3,4) ] ][128X[104X
    [4X[28Ximages of objects: [ -15, -13, -11 ][128X[104X
    [4X[28X   images of rays: [ (), (1,3,2), (2,4,3) ][128X[104X
    [4X[25Xgap>[125X [27Xaut123 := aut1*aut2*aut3;; [127X[104X
    [4X[25Xgap>[125X [27XDisplay( aut123 ); [127X[104X
    [4X[28X groupoid mapping: [ Ga4 ] -> [ Ga4 ][128X[104X
    [4X[28Xroot homomorphism: [ [ (1,2,3), (2,3,4) ], [ (2,3,4), (1,3,4) ] ][128X[104X
    [4X[28Ximages of objects: [ -13, -11, -15 ][128X[104X
    [4X[28X   images of rays: [ (), (1,4,3), (1,2,3) ][128X[104X
    [4X[25Xgap>[125X [27Xinv123 := InverseGeneralMapping( aut123 );; [127X[104X
    [4X[25Xgap>[125X [27XDisplay( inv123 ); [127X[104X
    [4X[28X groupoid mapping: [ Ga4 ] -> [ Ga4 ][128X[104X
    [4X[28Xroot homomorphism: [ [ (2,3,4), (1,3,4) ], [ (1,2,3), (2,3,4) ] ][128X[104X
    [4X[28Ximages of objects: [ -11, -15, -13 ][128X[104X
    [4X[28X   images of rays: [ (), (1,2,4), (1,3,4) ][128X[104X
    [4X[25Xgap>[125X [27Xid123 := aut123 * inv123;; [127X[104X
    [4X[25Xgap>[125X [27Xid123 = IdentityMapping( Ga4 ); [127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YThe [10XAutomorphismGroup[110X of [22XG[122X is isomorphic to the quotient of [22XS_n × A × g^n[122X by
  a  subgroup  isomorphic to [22Xg[122X, where [22XA[122X is the automorphism group of [22Xg[122X and [22XS_n[122X
  is  the  symmetric group on the [22Xn[122X objects. This is one of the main topics in
  [AW10].[133X
  
  [33X[0;0YThe  current  implementation  is experimental, producing a [13Xnice monomorphism[113X
  from  the  automorphism  group  to  a pc-group, if one is available. However
  [10XImageElm[110X at present only works on generating elements.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XAGa4 := AutomorphismGroup( Ga4 ); [127X[104X
    [4X[28X<group with 10 generators>[128X[104X
    [4X[25Xgap>[125X [27XNGa4 := NiceObject( AGa4 ); [127X[104X
    [4X[28XGroup([ f6, f3, f11*f12, f12, f2, f1, f4*f9, f4^2, f5*f9*f10*f11*f12, f5^2 ])[128X[104X
    [4X[25Xgap>[125X [27XMGa4 := NiceMonomorphism( AGa4 );; [127X[104X
    [4X[25Xgap>[125X [27XSize( AGa4 ); [127X[104X
    [4X[28X20736[128X[104X
    [4X[25Xgap>[125X [27XSetName( AGa4, "AGa4" ); [127X[104X
    [4X[25Xgap>[125X [27XSetName( NGa4, "NGa4" ); [127X[104X
    [4X[25Xgap>[125X [27XPrint( MGa4, "\n" ); [127X[104X
    [4X[28XGroupHomomorphismByImages( AGa4, Group( [ f1, f2, f3, f4, f5, f6, f7, f8, f9, [128X[104X
    [4X[28X  f10, f11, f12 ] ), [ magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ InnerAutomorphism( a4, (2,4,3) ), [ -15, -13, -11 ], [ (), (), () ] ] [128X[104X
    [4X[28X     ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ ConjugatorAutomorphism( a4, (3,4) ), [ -15, -13, -11 ], [128X[104X
    [4X[28X          [ (), (), () ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ InnerAutomorphism( a4, (1,2)(3,4) ), [ -15, -13, -11 ], [128X[104X
    [4X[28X          [ (), (), () ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ InnerAutomorphism( a4, (1,4)(2,3) ), [ -15, -13, -11 ], [128X[104X
    [4X[28X          [ (), (), () ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ GroupHomomorphismByImages( a4, a4, [ (1,2,3), (2,3,4) ], [128X[104X
    [4X[28X            [ (1,2,3), (2,3,4) ] ), [ -13, -11, -15 ], [ (), (), () ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ GroupHomomorphismByImages( a4, a4, [ (1,2,3), (2,3,4) ], [128X[104X
    [4X[28X            [ (1,2,3), (2,3,4) ] ), [ -13, -15, -11 ], [ (), (), () ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ IdentityMapping( a4 ), [ -15, -13, -11 ], [ (), (1,2,3), () ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ IdentityMapping( a4 ), [ -15, -13, -11 ], [ (), (2,3,4), () ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ IdentityMapping( a4 ), [ -15, -13, -11 ], [ (), (), (1,2,3) ] ] ][128X[104X
    [4X[28X    , magma with objects homomorphism : Ga4 -> Ga4[128X[104X
    [4X[28X    [ [ IdentityMapping( a4 ), [ -15, -13, -11 ], [ (), (), (2,3,4) ] ] ][128X[104X
    [4X[28X     ], [ f6, f3, f11*f12, f12, f2, f1, f4*f9, f4^2, f5*f9*f10*f11*f12, f5^2 [128X[104X
    [4X[28X ] )[128X[104X
    [4X[25Xgap>[125X [27X##  Now do some tests![127X[104X
    [4X[25Xgap>[125X [27Xmgi := MappingGeneratorsImages( MGa4 );; [127X[104X
    [4X[25Xgap>[125X [27Xautgen := mgi[1];; [127X[104X
    [4X[25Xgap>[125X [27Xpcgen := mgi[2];;[127X[104X
    [4X[25Xgap>[125X [27Xngen := Length( autgen );; [127X[104X
    [4X[25Xgap>[125X [27XForAll( [1..ngen], i -> Order(autgen[i]) = Order(pcgen[i]) ); [127X[104X
    [4X[28Xtrue [128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X4.4-2 GroupoidAutomorphismByGroupAutos[101X
  
  [29X[2XGroupoidAutomorphismByGroupAutos[102X( [3Xgpd[103X, [3Xauts[103X ) [32X operation
  
  [33X[0;0YHomogeneous,  discrete groupoids are the second type of groupoid for which a
  method  is  provided  for [10XAutomorphismGroup( gpd )[110X. This is used in the [5XXMod[105X
  package  for  constructing  crossed  modules  of groupoids. The two types of
  generating automorphism are [10XGroupoidAutomorphismByGroupAutos[110X, which requires
  a   list   of   group   automorphisms,   one  for  each  object  group,  and
  [10XGroupoidAutomorphismByObjectPerm[110X, which permutes the objects.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XHs3 := HomogeneousDiscreteGroupoid( s3, [ -13..-10] ); [127X[104X
    [4X[28Xhomogeneous, discrete groupoid: < s3, [ -13 .. -10 ] >[128X[104X
    [4X[25Xgap>[125X [27Xaut4 := GroupoidAutomorphismByObjectPerm( Hs3, [-12,-10,-11,-13] ); [127X[104X
    [4X[28Xmorphism from a homogeneous discrete groupoid:[128X[104X
    [4X[28X[ -13, -12, -11, -10 ] -> [ -12, -10, -11, -13 ][128X[104X
    [4X[28Xobject homomorphisms:[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xgens3 := GeneratorsOfGroup( s3 );; [127X[104X
    [4X[25Xgap>[125X [27Xg1 := gens3[1];; [127X[104X
    [4X[25Xgap>[125X [27Xg2 := gens3[2];; [127X[104X
    [4X[25Xgap>[125X [27Xb1 := GroupHomomorphismByImages( s3, s3, gens3, [ g1, g2^g1 ] );; [127X[104X
    [4X[25Xgap>[125X [27Xb2 := GroupHomomorphismByImages( s3, s3, gens3, [ g1^g2, g2 ] );; [127X[104X
    [4X[25Xgap>[125X [27Xb3 := GroupHomomorphismByImages( s3, s3, gens3, [ g1^g2, g2^(g1*g2) ] );; [127X[104X
    [4X[25Xgap>[125X [27Xb4 := GroupHomomorphismByImages( s3, s3, gens3, [ g1^(g2*g1), g2^g1 ] );; [127X[104X
    [4X[25Xgap>[125X [27Xaut5 := GroupoidAutomorphismByGroupAutos( Hs3, [b1,b2,b3,b4] ); [127X[104X
    [4X[28Xmorphism from a homogeneous discrete groupoid:[128X[104X
    [4X[28X[ -13, -12, -11, -10 ] -> [ -13, -12, -11, -10 ][128X[104X
    [4X[28Xobject homomorphisms:[128X[104X
    [4X[28XGroupHomomorphismByImages( s3, s3, [128X[104X
    [4X[28X[ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ], [128X[104X
    [4X[28X[ (15,17,19)(16,18,20), (15,18)(16,17)(19,20) ] )[128X[104X
    [4X[28XGroupHomomorphismByImages( s3, s3, [128X[104X
    [4X[28X[ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ], [128X[104X
    [4X[28X[ (15,19,17)(16,20,18), (15,20)(16,19)(17,18) ] )[128X[104X
    [4X[28XGroupHomomorphismByImages( s3, s3, [128X[104X
    [4X[28X[ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ], [128X[104X
    [4X[28X[ (15,19,17)(16,20,18), (15,16)(17,20)(18,19) ] )[128X[104X
    [4X[28XGroupHomomorphismByImages( s3, s3, [128X[104X
    [4X[28X[ (15,17,19)(16,18,20), (15,20)(16,19)(17,18) ], [128X[104X
    [4X[28X[ (15,19,17)(16,20,18), (15,18)(16,17)(19,20) ] )[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XAHs3 := AutomorphismGroup( Hs3 );;  Size( AHs3 ); [127X[104X
    [4X[28X31104[128X[104X
    [4X[25Xgap>[125X [27Xfor z in GeneratorsOfGroup(AHs3) do Print(z); od;  [127X[104X
    [4X[28Xmorphism from a homogeneous discrete groupoid:[128X[104X
    [4X[28X[ -13, -12, -11, -10 ] -> [ -13, -12, -11, -10 ][128X[104X
    [4X[28Xobject homomorphisms:[128X[104X
    [4X[28XInnerAutomorphism( s3, (15,20)(16,19)(17,18) )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28Xmorphism from a homogeneous discrete groupoid:[128X[104X
    [4X[28X[ -13, -12, -11, -10 ] -> [ -13, -12, -11, -10 ][128X[104X
    [4X[28Xobject homomorphisms:[128X[104X
    [4X[28XInnerAutomorphism( s3, (15,19,17)(16,20,18) )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28Xmorphism from a homogeneous discrete groupoid:[128X[104X
    [4X[28X[ -13, -12, -11, -10 ] -> [ -12, -11, -10, -13 ][128X[104X
    [4X[28Xobject homomorphisms:[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28Xmorphism from a homogeneous discrete groupoid:[128X[104X
    [4X[28X[ -13, -12, -11, -10 ] -> [ -12, -13, -11, -10 ][128X[104X
    [4X[28Xobject homomorphisms:[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28XIdentityMapping( s3 )[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
