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;