Can someone please suggest a method to construct groups of type $G=ECA$, where $E$ is the additive group of the finite field $\mathbb{F} = \mathbb{F}_{p}^{e}$, $C$ is a subgroup of the multiplicative group $\mathbb{F}^{\times}$ of $\mathbb{F}$, and $A$ is a subgroup of the automorphism group of $\mathbb{F}$?
That is, first build $EC$ from $E$ under the natural affine action, and then build $G=ECA$ from $EC$ under the standard Frobenius automorphism action.
If taking specific values for $p$, $e$ and making specific choices for $C$, $A$ helps to produce a concrete example of the construction procedure, then full freedom of choice is extended.
The answer of @ahulpke is canonical, but I'd like to ask something further. I suspect that, perhaps, groups of this type can serve as good candidates to test a counting conjecture related to soluble groups (and their Carter subgroups, but that is irrelevant here). My code (based on the answer provided, as well as earlier code of Max Horn) is this:
#loading the "format" package for handling Carter subgroups
LoadPackage("format");
count := function(G, N) return Number(ConjugacyClassSubgroups(G,
CarterSubgroup(G)),x -> IsSubgroup(x, N)); end;;
#the counting modulus
m := G -> Gcd(List(Set(Factors(Index(G,CarterSubgroup(G)))), p -> p-1));;
#a simple routine which checks for the existence of normal complements to a given subgroup
normal_c := function(G,C)
local I,J,N;
for N in NormalSubgroups(G) do
I:=Order(Intersection(N,C));;
J:=Order(ClosureGroup(N,C));;
if Order(G)-I*J = 0 then
return true;
fi;
od;
return false;
end;;
list:=[];;
for p in [2,3,5,7,11] do
for e in [1..6] do
if p^e >2000 then continue; fi;
Print(p," ",e,"\n");
k:=0;;
f:=GF(p^e);;
bas:=Basis(f);;
cgen:=PrimitiveElement(f);;
cmat:=List(BasisVectors(bas),x->Coefficients(bas,x*cgen));;
gal:=GaloisGroup(f);;
galgen:=gal.1;;
galmat:=List(BasisVectors(bas),x->Coefficients(bas,Image(galgen,x)));;
CA:=Group(cmat,galmat);;
G:=SemidirectProduct(CA,GF(p)^e);;
G:=Image(SmallerDegreePermutationRepresentation(Image(IsomorphismPermGroup(G))));;
allsubs:=Filtered(List(ConjugacyClassesSubgroups(G),Representative), g -> not IsNilpotentGroup(g));;
for W in allsubs do
#this bit is only to tell us %completed
k:=k+1;;
if k mod 50 = 0 then Print(k, " of ", Length(allsubs), "\n"); fi;
C:=CarterSubgroup(W);;
# the following filters check if W has some necessary properties that a min. counterexample must have
#the modulus is non-trivial
if m(W) = 1 then continue; fi;
if RemInt(Index(W,C),2) = 0 then continue; fi;
#C is not Hall
if Gcd(Index(W,C),Size(C)) = 1 then continue; fi;
#C is core-free
if Size(Core(W,C))>1 then continue; fi;
#C is not abelian
if IsAbelian(C) then continue; fi;
#every prime dividing the order of the socle divides the order of C
if not IsSubsetSet(Factors(Size(C)),Factors(Size(Socle(W)))) then continue; fi;
#C does not have a normal complement
if normal_c(W,C) then continue; fi;
Append(list,[W]);;
od;
od;
od;
What I want is to speed up the search for such candidates. Presumably the allsubs
command requires a huge amount of time and space, so I've tried building subgroups of $G$ (admitting the desired factorisation) concretely, but I seem to be doing something wrong. In the first instance, I'd like to be able to remove the p^e >2000
restriction, and then extend the range of $p, e$ a bit. Advice?
I'm starting a bounty for this extended question and I hope that is good etiquette.
P.S. With the current code I have been able to test a little more than 20 pairs $(p,e)$ and in the process I have found only two candidates.