[GAP Forum] efficient generating set for a permutation group

Hulpke,Alexander Alexander.Hulpke at colostate.edu
Mon Aug 3 16:51:30 BST 2020


Dear Forum, Dear Ignat Soroko,

> Is there a way to make GAP
> pass to a smaller generating set? Unfortunately, commands like
> SmallGeneratingSet(Aut); never terminate.

If you have a group with 10^5 generators or so probably a lot of the standard routines will reduce to a crawl -- e.g. `SmallGeneratingSet` uses the existing generator number as a starting point for reduction.

However in your code you don't really need to collect all elements. Do the following changes


> G:=Group(Union(List(gen,x->GeneratorsOfGroup(SymmetricGroup(x)))));
> aut:=[];
Aut:=Group(()); # trivial perm group
> for g in G do
> if ForAll([1..n-1],i->ForAll([i+1..n],j->m[i^g][j^g]=m[i][j])=true) then
> Add(aut,g);
Aut:=ClosureGroup(Aut,g);
> fi;
> od;

This will eliminate redundant elements on the fly and result in a much smaller generating set.

even better would be to use existing information to avoid unneeded tests (e.g. is you have already a subgroup U satisfying the condition and g does not, no element in the coset Ug will do either). You can replace the whole loop by:

Aut:=SubgroupProperty(G,g->ForAll([1..n-1],i->ForAll([i+1..n],j->m[i^g][j^g]=m[i][j])=true));

This is likely much faster.

All the best,

  Alexander Hulpke






More information about the Forum mailing list