gap-packages / QuimpGrp

GAP database of quasiprimitive imprimitive permutation groups of degree at most 4095
Other
0 stars 0 forks source link

`PraegerONanScottType` is incomplete / incorrect #14

Open fingolfin opened 6 months ago

fingolfin commented 6 months ago

It works for groups in the database, but not in general, due to some cases missing or being not quite right.

@glukemorgan provided an alternative implementation which is based on the GAP function ONanScottType. I am reproducing it below.

We should just use that, but I'd like to also add a bunch of tests for it to .tst, both by running it on groups in the library, and also by running it against examples outside of the library. Luke, if you can provide some relevant examples (ones that are treated wrong by the current method and right by the new one), that would be great. Ideally 1-2 examples for each possible case, if you have.

Here is the code we could use. I'd suggest to diff it one last time against ONanScottType. It also should probably start by a check for IsQuasiprimitive and error out otherwise, just like ONanScottType does.

# this code is a modified version of the ONanScottType function that is present in gap.
# modified by Luke Morgan
# I only modified the section where ASreg is allowed for quasiprimitive.

PraegerONanScottType:=function(G)
local dom,s,cs,t,ts,o,m,stb;
  dom:=MovedPoints(G);
  s:=Socle(G);
  if IsAbelian(s) then
    return "HA";
  elif IsSimpleGroup(s) then
    return "AS";     # checks only if socle is simple, could be regular
  elif Length(dom)=Size(s) then
    return "TW";
  else
    # LM: now the socle is a non-abelian non-simple group
    # so the group now is of type 3 or 4. Next we determine a simple socle
    # factor and a direct product of all but one socle factor.
    # simple socle factor.

    # as default stab chain chooses pts lexicographically, this is likely a
    # stored stabilizer
    stb:=Stabilizer(s,SmallestMovedPoint(s));
    cs:=CompositionSeries(s);
    t:=cs[Length(cs)-1];   # t is one simple factor
    m:=cs[2];   # m is a T^k-1, t is in m by comp series construction

    # now test Dixon&Mortimer, p.126, Case 1: R1 (projection of pt. stab
    # onto one direct factor) is proper subgroup of T1.

    #if Size(ClosureSubgroup(m,stb))<Size(s) then
    # Since m is normal, this projection is a proper subgroup iff m does not
    # act transitively
    if not IsTransitive(m,dom) then
      return "PA"; # Product action of type 2 with transitive
    fi;

    #  Now we are in case 2, R1=T1. Group must be diagonal (3) or product
    #  action of diagonal with transitive (4). For diagonal case the point
    #  stabilizer must have the order of t, for product case it must be a
    #  power of the order of t
    if Size(stb)=Size(t) then # type 3
      # in the a case the socle is not minimal
      #if Size(NormalClosure(G,t))<Size(s) then
      if Length(Orbit(G,t))<Length(cs)-1 then # conjugates of t do not cover socle
       return "HS";
      else
        return "SD";      # G has unique minimal normal subgroup
      fi;
    else
      # Same argument as for 3:
      #if Size(NormalClosure(G,t))<Size(s) then
      if Length(Orbit(G,t))<Length(cs)-1 then 
    return "HC";
      else
        return "CD";
      fi;
    fi;
  fi;

end;