  
  [1X9 [33X[0;0YGroup derivations[133X[101X
  
  [33X[0;0YLet  [23XG[123X and [23XH[123X be groups and let [23XH[123X act on [23XG[123X via automorphisms, i.e. there is a
  group homomorphism[133X
  
  
  [24X[33X[0;6Y\alpha \colon H \to \operatorname{Aut}(G)[133X
  
  [124X
  
  [33X[0;0Ysuch that [23Xg^h = \alpha(h)(g)[123X for all [23Xg \in G[123X and [23Xh \in H[123X. A [13Xgroup derivation[113X
  [23X\delta \colon H \to G[123X is a map such that[133X
  
  
  [24X[33X[0;6Y\delta(h_1h_2) = \delta(h_1)^{h_2}\delta(h_2).[133X
  
  [124X
  
  [33X[0;0YNote that we do not require [23XG[123X to be abelian.[133X
  
  [33X[0;0YAlgorithms  designed  for  computing  with  twisted conjugacy classes can be
  leveraged  to do computations involving group derivations, see [Ter25] for a
  description on this.[133X
  
  [33X[0;0YPlease  note  that  the  functions in this chapter require [23XG[123X and [23XH[123X to either
  both be finite, or both be PcpGroups.[133X
  
  
  [1X9.1 [33X[0;0YCreating group derivations[133X[101X
  
  [1X9.1-1 GroupDerivationByImages[101X
  
  [33X[1;0Y[29X[2XGroupDerivationByImages[102X( [3XH[103X, [3XG[103X[[, [3Xgens[103X], [3Ximgs[103X], [3Xact[103X ) [32X function[133X
  [33X[1;0Y[29X[2XGroupDerivationByImagesNC[102X( [3XH[103X, [3XG[103X[[, [3Xgens[103X], [3Ximgs[103X], [3Xact[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ythe  specified group derivation, or [9Xfail[109X if the given arguments do
            not define a derivation.[133X
  
  [33X[0;0YThis  works  in  the  same  vein  as  [2XGroupHomomorphismByImages[102X  ([14XReference:
  GroupHomomorphismByImages[114X).  The  group [3XH[103X acts on the group [3XG[103X via [3Xact[103X, which
  must  be  a  homomorphism  from  [3XH[103X  into a group of automorphisms of [3XG[103X. This
  command  then  returns the group derivation defined by mapping the list [3Xgens[103X
  of generators of [3XH[103X to the list [3Ximgs[103X of images in [3XG[103X.[133X
  
  [33X[0;0YIf  omitted,  the  arguments  [3Xgens[103X and [3Ximgs[103X default to the [10XGeneratorsOfGroup[110X
  value of [3XH[103X and [3XG[103X respectively.[133X
  
  [33X[0;0YThis  function checks whether [3Xgens[103X generate [3XH[103X and whether the mapping of the
  generators  extends to a group derivation. This test can be expensive, so if
  one  is  certain  that the given arguments produce a group derivation, these
  checks can be avoided by using the [10XNC[110X version.[133X
  
  [1X9.1-2 GroupDerivationByFunction[101X
  
  [33X[1;0Y[29X[2XGroupDerivationByFunction[102X( [3XH[103X, [3XG[103X, [3Xfun[103X, [3Xact[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ythe specified group derivation.[133X
  
  [33X[0;0Y[10XGroupDerivationByFunction[110X      works     in     the     same     vein     as
  [2XGroupHomomorphismByFunction[102X  ([14XReference:  GroupHomomorphismByFunction[114X).  The
  group  [3XH[103X  acts  on  the group [3XG[103X via [3Xact[103X, which must be a homomorphism from [3XH[103X
  into  a  group  of  automorphisms  of [3XG[103X. This command then returns the group
  derivation  defined by mapping the element [10Xh[110X of [3XH[103X to the element [3Xfun[103X( [10Xh[110X ) of
  [3XG[103X, where [3Xfun[103X is a [5XGAP[105X function.[133X
  
  [33X[0;0YNo tests are performed to check whether the arguments really produce a group
  derivation.[133X
  
  [1X9.1-3 GroupDerivationByAffineAction[101X
  
  [33X[1;0Y[29X[2XGroupDerivationByAffineAction[102X( [3XH[103X, [3XG[103X, [3Xact[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ythe  derivation that makes up the translational part of the affine
            action.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XH := PcGroupCode( 149167619499417164, 72 );;[127X[104X
    [4X[25Xgap>[125X [27XG := PcGroupCode( 5551210572, 72 );;[127X[104X
    [4X[25Xgap>[125X [27Xinn := InnerAutomorphism( G, G.2 );;[127X[104X
    [4X[25Xgap>[125X [27Xhom := GroupHomomorphismByImages([127X[104X
    [4X[25X>[125X [27X     G, G,[127X[104X
    [4X[25X>[125X [27X     [ G.1*G.2, G.5 ], [ G.1*G.2^2*G.3^2*G.4, G.5 ][127X[104X
    [4X[25X>[125X [27X   );;[127X[104X
    [4X[25Xgap>[125X [27Xact := GroupHomomorphismByImages([127X[104X
    [4X[25X>[125X [27X     H, AutomorphismGroup( G ),[127X[104X
    [4X[25X>[125X [27X     [ H.2, H.1*H.4 ], [ inn, hom ][127X[104X
    [4X[25X>[125X [27X   );;[127X[104X
    [4X[25Xgap>[125X [27Xgens := [ H.2, H.1*H.4 ];;[127X[104X
    [4X[25Xgap>[125X [27Ximgs := [ G.5, G.2 ];;[127X[104X
    [4X[25Xgap>[125X [27Xder := GroupDerivationByImages( H, G, gens, imgs, act );[127X[104X
    [4X[28XGroup derivation [ f2, f1*f4 ] -> [ f5, f2 ][128X[104X
  [4X[32X[104X
  
  
  [1X9.2 [33X[0;0YOperations for group derivations[133X[101X
  
  [33X[0;0YMany   of  the  functions,  operations,  attributes...  available  to  group
  homomorphisms  are  available for group derivations as well. We list some of
  the more useful ones.[133X
  
  
  [1X9.2-1 [33X[0;0YIsInjective[133X[101X
  
  [33X[1;0Y[29X[2XIsInjective[102X( [3Xder[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X if the group derivation [3Xder[103X is injective, otherwise [9Xfalse[109X.[133X
  
  
  [1X9.2-2 [33X[0;0YIsSurjective[133X[101X
  
  [33X[1;0Y[29X[2XIsSurjective[102X( [3Xder[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X if the group derivation [3Xder[103X is surjective, otherwise [9Xfalse[109X.[133X
  
  
  [1X9.2-3 [33X[0;0YIsBijective[133X[101X
  
  [33X[1;0Y[29X[2XIsBijective[102X( [3Xder[103X ) [32X property[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X if the group derivation [3Xder[103X is bijjective, otherwise [9Xfalse[109X.[133X
  
  
  [1X9.2-4 [33X[0;0YKernel[133X[101X
  
  [33X[1;0Y[29X[2XKernel[102X( [3Xder[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ythe set of elements that are mapped to the identity by [3Xder[103X.[133X
  
  [33X[0;0YThis will always be a subgroup of [10XSource[110X([3Xder[103X).[133X
  
  
  [1X9.2-5 [33X[0;0YImage[133X[101X
  
  [33X[1;0Y[29X[2XImage[102X( [3Xder[103X ) [32X function[133X
  [33X[1;0Y[29X[2XImage[102X( [3Xder[103X, [3Xelm[103X ) [32X function[133X
  [33X[1;0Y[29X[2XImage[102X( [3Xder[103X, [3Xcoll[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ythe image of the group derivation [3Xder[103X.[133X
  
  [33X[0;0YOne  can  optionally  give  an  element  [3Xelm[103X  or  a subgroup [3Xsub[103X as a second
  argument,  in  which  case  [10XImage[110X  will calculate the image of this argument
  under [3Xder[103X.[133X
  
  
  [1X9.2-6 [33X[0;0YPreImagesRepresentative[133X[101X
  
  [33X[1;0Y[29X[2XPreImagesRepresentative[102X( [3Xder[103X, [3Xelm[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya  preimage  of the element [3Xelm[103X under the group derivation [3Xder[103X, or
            [9Xfail[109X if no preimage exists.[133X
  
  
  [1X9.2-7 [33X[0;0YPreImages[133X[101X
  
  [33X[1;0Y[29X[2XPreImages[102X( [3Xder[103X, [3Xelm[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ythe  set  of  all  preimages  of  the  element [3Xelm[103X under the group
            derivation [3Xder[103X.[133X
  
  [33X[0;0YThis will always be a (right) coset of [10XKernel[110X( [3Xder[103X ), or the empty list.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XIsInjective( der ) or IsSurjective( der );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XK := Kernel( der );;[127X[104X
    [4X[25Xgap>[125X [27XSize( K );[127X[104X
    [4X[28X9[128X[104X
    [4X[25Xgap>[125X [27XImH := Image( der );[127X[104X
    [4X[28XGroup derivation image in Group( [ f1, f2, f3, f4, f5 ] )[128X[104X
    [4X[25Xgap>[125X [27Xh1 := H.1*H.3;;[127X[104X
    [4X[25Xgap>[125X [27Xg := Image( der, h1 );[127X[104X
    [4X[28Xf2*f4[128X[104X
    [4X[25Xgap>[125X [27XImK := Image( der, K );[127X[104X
    [4X[28XGroup derivation image in Group( [ f1, f2, f3, f4, f5 ] )[128X[104X
    [4X[25Xgap>[125X [27Xh2 := PreImagesRepresentative( der, g );;[127X[104X
    [4X[25Xgap>[125X [27XImage( der, h2 ) = g;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XPreIm := PreImages( der, g );[127X[104X
    [4X[28XRightCoset(<group of size 9 with 2 generators>,<object>)[128X[104X
    [4X[25Xgap>[125X [27XPreIm = RightCoset( K, h2 );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X9.3 [33X[0;0YImages of group derivations[133X[101X
  
  [33X[0;0YIn  general,  the image of a group derivation is not a subgroup. However, it
  is  still  possible  to  do  a  membership  test, to calculate the number of
  elements, and to enumerate the elements if there are only finitely many.[133X
  
  
  [1X9.3-1 [33X[0;0Y\in[133X[101X
  
  [33X[1;0Y[29X[2X\in[102X( [3Xelm[103X, [3Ximg[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X if [3Xelm[103X is an element of [3Ximg[103X, otherwise [9Xfalse[109X.[133X
  
  
  [1X9.3-2 [33X[0;0YSize[133X[101X
  
  [33X[1;0Y[29X[2XSize[102X( [3Ximg[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ythe number of elements in [3Ximg[103X.[133X
  
  
  [1X9.3-3 [33X[0;0YList[133X[101X
  
  [33X[1;0Y[29X[2XList[102X( [3Ximg[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya list containing the elements of [3Ximg[103X.[133X
  
  [33X[0;0YIf  [3Ximg[103X  is infinite, this will run forever. It is recommended to first test
  the finiteness of [3Ximg[103X using [2XSize[102X ([14X9.3-2[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XSize( ImH );[127X[104X
    [4X[28X8[128X[104X
    [4X[25Xgap>[125X [27XSize( ImK );[127X[104X
    [4X[28X1[128X[104X
    [4X[25Xgap>[125X [27Xg in ImH;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xg in ImK;[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XList( ImK );[127X[104X
    [4X[28X[ <identity> of ... ][128X[104X
  [4X[32X[104X
  
