Dear GAP Forum, dear Bill,
I would like to computing the lists of minimal normal subgroups of a
(small) group.
I think that the following idea should be faster than computing all normal
subgroups and then finding the minimal ones:
A minimal normal subgroup N is G-generated (that is, generated as a
G-normal subgroup) by each non-trivial element of N. Hence one can loop
over all non-trivial elements g of G and compute the subgroup G-generated
by g to get a list containing all minimal normal subgroups. Since N is a
union of conjugacy classes, it is sufficient to consider conjugacy class
representatives g only. Since N contains an element of prime order, it is
sufficient to consider elements g of prime order only.
- compute the conjugacy classes of elements of your group
- for each class do:
if the representative has prime order then
add the subgroup G-generated by this representative
- discard the non-minimal subgroups in the resulting list.
This is not implemented in GAP, but it is very easy to implement it.
I include a possible implementation below. Since I have written this
very quickly, it is likely that it can still be improved.
Best wishes,
Bettina
AddToSubgroupList := function( nt, U )
local i, N;
# check if U is minimal in nt
for N in nt do if IsSubgroup(U, N) then return nt; fi; od;# check that nt remains minimal for i in [1..Length(nt)] do if IsSubgroup(nt[i], U) then nt[i] := false; fi; od; nt := Filtered( nt, x -> not IsBool(x) );
# add U and return
Add(nt, U); return nt;
end;
MinimalNormalSubgroups := function(G)
local cl, nt, c, U;
cl := ConjugacyClasses(G);
nt := [];
for c in cl do
if IsPrime(Order(Representative(c))) then
U := Subgroup( G, [Representative(c)] );
U := NormalClosure( G, U );
nt := AddToSubgroupList( nt, U );
fi;
od;
return nt;
end;