Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PraegerONanScottType is incomplete / incorrect #14

Open
fingolfin opened this issue Feb 23, 2024 · 0 comments
Open

PraegerONanScottType is incomplete / incorrect #14

fingolfin opened this issue Feb 23, 2024 · 0 comments

Comments

@fingolfin
Copy link
Member

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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant