  
  [1X4 [33X[0;0YThe Frattini Extension Method[133X[101X
  
  [33X[0;0YThis  is  a  method  to  construct up to isomorphism the soluble groups of a
  given  order.  The main function [10XFrattiniExtensionMethod[110X to construct groups
  is described in Section [14X4.1[114X.[133X
  
  [33X[0;0YThe  construction  process  consists  of  two  parts  which can be addressed
  separately. In the first step a list of possible candidates for the Frattini
  factors  of  the desired groups is determined up to isomorphism. See Section
  [14X4.2[114X  for  the  corresponding  functions.  In  the second step the determined
  candidates  are considered one after the other and for each candidate a list
  of extensions is computed. See Section [14X4.3[114X for the available functions.[133X
  
  
  [1X4.1 [33X[0;0YThe Main Frattini Extension Function[133X[101X
  
  [1X4.1-1 FrattiniExtensionMethod[101X
  
  [33X[1;0Y[29X[2XFrattiniExtensionMethod[102X( [3Xorder[103X[, [3Xflags[103X][, [3Xuncoded[103X] ) [32X function[133X
  
  [33X[0;0YFirst  we  describe  the [13Xinput[113X of the function. The [3Xorder[103X is the size of the
  desired groups. The optional input [3Xuncoded[103X is a boolean which determines the
  output  format. If it is [9Xtrue[109X, then pc groups are returned. Otherwise, if it
  is  [9Xfalse[109X  or not given, then code records describing pc groups are returned
  (see [10XPcGroupCodeRec[110X).[133X
  
  [33X[0;0YThe  optional  input  [3Xflags[103X  is  a  record  which  is  used  to restrict the
  construction  process  to  groups  with certain properties only. This record
  consists of any of the following entries:[133X
  
  [8X[10Xnilpotent[110X[8X[108X
        [33X[0;6Ymust be [9Xtrue[109X. Only nilpotent groups are constructed.[133X
  
  [8X[10Xnonnilpot[110X[8X[108X
        [33X[0;6Ymust be [9Xtrue[109X. Only non-nilpotent groups are constructed.[133X
  
  [8X[10Xsupersol[110X[8X[108X
        [33X[0;6Ymust be [9Xtrue[109X. Only supersoluble groups are constructed.[133X
  
  [8X[10Xnonsupsol[110X[8X[108X
        [33X[0;6Ymust be [9Xtrue[109X. Only non-supersoluble groups are constructed.[133X
  
  [8X[10Xpnormal[110X[8X[108X
        [33X[0;6Ymust  be  a list of primes. Only groups with a normal Sylow [22Xp[122X-subgroup
        for all [22Xp[122X in the given list are constructed.[133X
  
  [8X[10Xnonpnorm[110X[8X[108X
        [33X[0;6Ymust  be  a  list  of  primes.  Only  groups  without  a  normal Sylow
        [22Xp[122X-subgroup for all [22Xp[122X in the given list are constructed.[133X
  
  [33X[0;0YIf  a  particular  entry  is  not  set, then no restriction on the groups is
  assumed.  The  default is an empty record of flags. Any combination of flags
  is  possible.  However,  not  all  combinations  make sense; for example, if
  [10Xnilpotent[110X  and  [10Xnonnilpot[110X  are both true, then the algorithm will return the
  empty  list.  If  [10Xnonnilpot[110X  is  true  and [10Xpnormal[110X is the list [22X[3][122X, then the
  non-nilpotent groups whose Sylow 3-subgroup is normal will be computed.[133X
  
  [33X[0;0YThe  [13Xoutput[113X  of  the function is usually a list of pc groups or code records
  depending  on  [3Xuncoded[103X. However, it may happen that the output list contains
  not  only  pc  groups  or  codes, but also lists of pc groups or codes. This
  means that the groups in such a sublist are probably non-isomorphic, but the
  algorithm   did   not   do   a  final  verification,  since  this  would  be
  time-consuming.  If desired, then the user might do a verification using the
  function [10XDistinguishGroups[110X described below.[133X
  
  [33X[0;0YMoreover,  it  might be worth noting that the groups in such sublists of the
  output  list  are  always  reduced  by  the random isomorphism test (see the
  Section  on  [10XRandom  Isomorphism Testing[110X in the reference manual). Hence the
  probability that there are still isomorphisms between groups in this list is
  less than [22X2^-100[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xflags := rec( nonnilpot := true, pnormal := [3] );[127X[104X
    [4X[28Xrec( nonnilpot := true, pnormal := [ 3 ] )[128X[104X
    [4X[25Xgap>[125X [27Xgrps := FrattiniExtensionMethod( 24, flags, true );[127X[104X
    [4X[28X[ <pc group of size 24 with 4 generators>, [128X[104X
    [4X[28X  <pc group of size 24 with 4 generators>, [128X[104X
    [4X[28X  <pc group of size 24 with 4 generators>, [128X[104X
    [4X[28X  <pc group of size 24 with 4 generators>, [128X[104X
    [4X[28X  <pc group of size 24 with 4 generators>, [128X[104X
    [4X[28X  <pc group of size 24 with 4 generators>, [128X[104X
    [4X[28X  <pc group of size 24 with 4 generators> ][128X[104X
    [4X[25Xgap>[125X [27XList( last, IdGroup );[127X[104X
    [4X[28X[ [ 24, 1 ], [ 24, 5 ], [ 24, 8 ], [ 24, 6 ], [ 24, 7 ], [ 24, 4 ], [128X[104X
    [4X[28X  [ 24, 14 ] ][128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XFrattiniExtensionMethod( 8 );[127X[104X
    [4X[28X[ rec( code := 323, extdim := [ 2, 2 ], first := [ 1, 1, 2 ], [128X[104X
    [4X[28X      isFrattiniFree := false, isUnique := true, order := 8, [128X[104X
    [4X[28X      socledim := [ 1 ] ), [128X[104X
    [4X[28X  rec( code := 34, extdim := [ 2 ], first := [ 1, 1, 3 ], [128X[104X
    [4X[28X      isFrattiniFree := false, isUnique := true, order := 8, [128X[104X
    [4X[28X      socledim := [ 1, 1 ] ), [128X[104X
    [4X[28X  rec( code := 36, extdim := [ 2 ], first := [ 1, 1, 3 ], [128X[104X
    [4X[28X      isFrattiniFree := false, isUnique := true, order := 8, [128X[104X
    [4X[28X      socledim := [ 1, 1 ] ), [128X[104X
    [4X[28X  rec( code := 2343, extdim := [ 2 ], first := [ 1, 1, 3 ], [128X[104X
    [4X[28X      isFrattiniFree := false, isUnique := true, order := 8, [128X[104X
    [4X[28X      socledim := [ 1, 1 ] ), [128X[104X
    [4X[28X  rec( code := 0, extdim := [  ], first := [ 1, 1, 4 ], [128X[104X
    [4X[28X      isFrattiniFree := true, isUnique := true, order := 8, [128X[104X
    [4X[28X      socledim := [ 1, 1, 1 ] ) ][128X[104X
  [4X[32X[104X
  
  
  [1X4.2 [33X[0;0YThe Construction of Frattini Free Groups[133X[101X
  
  [33X[0;0YA  finite  group  is  called  [13XFrattini  free[113X  if  it  has a trivial Frattini
  subgroup.  As  candidates  for  the  Frattini  factors of the groups of size
  [3Xorder[103X, we compute Frattini free groups of suitable size dividing [3Xorder[103X.[133X
  
  [1X4.2-1 FrattiniFactorCandidates[101X
  
  [33X[1;0Y[29X[2XFrattiniFactorCandidates[102X( [3Xorder[103X, [3Xflags[103X[, [3Xuncoded[103X] ) [32X function[133X
  
  [33X[0;0YThe input is similar to the input for the function [10XFrattiniExtensionMethod[110X.[133X
  
  [33X[0;0YThe  output  is a list of candidates for the Frattini factors of the desired
  groups,  i.e.  the  groups  of  size  [3Xorder[103X possibly restricted by [3Xflags[103X. By
  default  the  groups  are  returned  as codes which may be changed using the
  boolean [3Xuncoded[103X.[133X
  
  [33X[0;0YNote   that  the  computed  list  is  always  reduced  to  isomorphism  type
  representatives.  Moreover,  it  might happen that some of the Frattini free
  groups  are  not  realised  as  Frattini  factors  of a group of size [3Xorder[103X.
  However, in practice this is a very rare case.[133X
  
  [33X[0;0YFurthermore,  note  that  for this part of the Frattini extension method the
  restriction  to  the  positive properties [10Xnilpotent[110X, [10Xsupersol[110X and [10Xpnormal[110X in
  the  flags  record will reduce the amount of computation considerably, while
  the negative properties do not have such a major influence on the efficiency
  of this method.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xflags := rec( nonsupsol := true );[127X[104X
    [4X[28Xrec( nonsupsol := true )[128X[104X
    [4X[25Xgap>[125X [27XFrattiniFactorCandidates( 24, flags, true );[127X[104X
    [4X[28X[ <pc group of size 24 with 4 generators>, [128X[104X
    [4X[28X  <pc group of size 12 with 3 generators>, [128X[104X
    [4X[28X  <pc group of size 24 with 4 generators> ][128X[104X
    [4X[25Xgap>[125X [27XList(last, IdGroup);[127X[104X
    [4X[28X[ [ 24, 12 ], [ 12, 3 ], [ 24, 13 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X4.3 [33X[0;0YThe Determination of Frattini Extensions[133X[101X
  
  [33X[0;0YA  group  [22XH[122X  is  a  [13XFrattini extension[113X of a group [22XG[122X if there exists a normal
  subgroup  [22XN[122X  of [22XH[122X such that [22XH/N ≅ G[122X and [22XN ≤ ϕ(H)[122X holds. Clearly, each finite
  group can be obtained as a Frattini extension of a Frattini free group.[133X
  
  [1X4.3-1 FrattiniExtensions[101X
  
  [33X[1;0Y[29X[2XFrattiniExtensions[102X( [3Xcode/group[103X, [3Xorder[103X[, [3Xuncoded[103X] ) [32X function[133X
  
  [33X[0;0YHere  the default input is a Frattini free group described by a code and the
  size  [3Xorder[103X of the groups which shall be constructed. Alternatively, one can
  input  a Frattini free group as pc group. Moreover, it is possible to give a
  list  of  codes  or  pc  groups at once. The flag [3Xuncoded[103X changes the output
  format to pc groups instead of codes as above.[133X
  
  [33X[0;0YThe  output  of  this  function  is  similar  to  the output of the function
  [10XFrattiniExtensionMethod[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := SmallGroup( 24, 12 );[127X[104X
    [4X[28X<pc group of size 24 with 4 generators>[128X[104X
    [4X[25Xgap>[125X [27XFrattiniSubgroup(G);[127X[104X
    [4X[28XGroup([  ])[128X[104X
    [4X[25Xgap>[125X [27XFrattiniExtensions( G, 48, true );[127X[104X
    [4X[28X[ <pc group of size 48 with 5 generators>, [128X[104X
    [4X[28X  <pc group of size 48 with 5 generators>, [128X[104X
    [4X[28X  <pc group of size 48 with 5 generators> ][128X[104X
    [4X[25Xgap>[125X [27XList( last, IdGroup);[127X[104X
    [4X[28X[ [ 48, 29 ], [ 48, 30 ], [ 48, 28 ] ][128X[104X
  [4X[32X[104X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xcand := FrattiniFactorCandidates( 6, rec() );[127X[104X
    [4X[28X[ rec( code := 25, extdim := [  ], first := [ 1, 2, 3 ], [128X[104X
    [4X[28X      isFrattiniFree := true, isUnique := true, order := 6, socledim := [ 1 ] [128X[104X
    [4X[28X     ), [128X[104X
    [4X[28X  rec( code := 1, extdim := [  ], first := [ 1, 1, 3 ], [128X[104X
    [4X[28X      isFrattiniFree := true, isUnique := true, order := 6, [128X[104X
    [4X[28X      socledim := [ 1, 1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27XFrattiniExtensions( cand, 12 );[127X[104X
    [4X[28X[ rec( code := 6442, extdim := [ 2 ], first := [ 1, 2, 3 ], [128X[104X
    [4X[28X      isFrattiniFree := false, isUnique := true, order := 12, [128X[104X
    [4X[28X      socledim := [ 1 ] ), [128X[104X
    [4X[28X  rec( code := 266, extdim := [ 2 ], first := [ 1, 1, 3 ], [128X[104X
    [4X[28X      isFrattiniFree := false, isUnique := true, order := 12, [128X[104X
    [4X[28X      socledim := [ 1, 1 ] ) ][128X[104X
  [4X[32X[104X
  
  
  [1X4.4 [33X[0;0YVerifying non-isomorphism[133X[101X
  
  [33X[0;0YThe  output  of  the functions [10XFrattiniExtensionMethod[110X or [10XFrattiniExtensions[110X
  might  contain  sublists  of groups. That means that the groups contained in
  sublists  could  not  be  distinguished  up  to  isomorphism by the Frattini
  extension   method.  However,  the  groups  have  gone  through  the  random
  isomorphism test and hence it is likely that they are not isomorphic.[133X
  
  [33X[0;0YHere  we  provide  a tool that can be used to try to prove that these groups
  are  non-isomorphic.  This  is  not  done  automatically within the Frattini
  extension  method, since it might be time-consuming and many users might not
  be interested in a complete verification of non-isomorphism.[133X
  
  [33X[0;0YTo distinguish groups we compute invariants of the given groups. Clearly, if
  the  invariants differ, then we obtain that the corresponding groups are not
  isomorphic. However, the converse is not true and hence we might not succeed
  in distinguishing all non-isomorphic groups in a given list. See [BE99a] for
  a description of the invariants used.[133X
  
  [1X4.4-1 DistinguishGroups[101X
  
  [33X[1;0Y[29X[2XDistinguishGroups[102X( [3Xlist[103X, [3Xbool[103X ) [32X function[133X
  
  [33X[0;0YThe  function  [10XDistinguishGroups[110X takes as input [3Xlist[103X a list as described for
  the  output  of  [10XFrattiniExtensions[110X.  It  returns  a similar list, where the
  sublists contained in [3Xlist[103X are split up.[133X
  
  [33X[0;0YThere  are  two  levels  to operate the function [10XDistinguishGroups[110X which are
  controlled  by  the  second input parameter [3Xbool[103X of the function. If [3Xbool[103X is
  [9Xfalse[109X,  then only a few invariants are computed; if it is [9Xtrue[109X, then we also
  try  the  more  complicated  invariants. Clearly, if [3Xbool[103X is [9Xfalse[109X, then the
  result  is  obtained  faster, but if [3Xbool[103X is [9Xtrue[109X, then we might distinguish
  more groups.[133X
  
  [33X[0;0YIf  [10XDistinguishGroups[110X  fails  to  split up the input list completely, then a
  user  might  use the general-purpose function [10XIsomorphismGroups[110X to prove the
  non-isomorphism  between  the  remaining  groups.  However,  this might be a
  time-consuming computation.[133X
  
