-
Notifications
You must be signed in to change notification settings - Fork 160
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
Remarks on SmallGeneratingSet #4636
Comments
Thanks @hulpke - I will edit the post though so that it will be clear that this is not your text, but a quote from the Forum posts https://mail.gap-system.org/pipermail/forum/2021/006314.html by @MathieuDutSik (otherwise, it will be even more unclear for GitHub users who do not read GAP Forum). @MathieuDutSik thank you very much for your remarks - you'd be very welcome to post them in this issue tracker, that's a more appropriate place indeed. |
Thank you @hulpke for looking at the problem. |
1: |
The purpose of Since the groups are not solvable, the ``typical'' case (in the groups I have been working with) I typically have |G/G'| small, but there are situations where the rank can be higher. This test is basically to catch these cases. I tried to compute the rank of G/G', but that turned out too costly in some cases. Thus I'm wilfully ignoring cases of large prime power factors (which I reckon are rare) as candidates for reduction, but save on the cost of always doing a rank computation. |
|
|
Following from gap-system#4636
5: I am advocating the use of lambda for the following reason. This check occurs in two places:
See an example of such code in |
2: About the quotient G/G' can we agree to the two following points?
|
Regarding writing your own header-only C++ permutation groups code: perhaps take a look at http://www.math.uni-rostock.de/~rehn/software/permlib.html resp. https://github.com/tremlin/PermLib which already does that and has been extensively tested and used by various people. Unfortunately it has been dormant for many years (its author left academia), but it might still be much better than starting from scratch? |
I don't understand what you mean by the jargon word ``lambda'' and how it would differ from just putting the tests into a function. |
Yes. I never doubted this. But the purpose of the function is not to find a generating set of minimal size, but, at low cost, find a reasonably small one in many cases. |
Oh, sorry for terminology confusion. I meant writing an internal function to the SmallGeneratingSet. |
I see. Then maybe the name |
OK. I will rename the variable. |
Minor changes following from gap-system#4636 Close gap-system#4636
Minor changes following from gap-system#4636 Close gap-system#4636
Minor changes following from gap-system#4636 Subsequent example change. Close gap-system#4636
Minor changes following from gap-system#4636 Subsequent example change. Close gap-system#4636
Github seems to be a better place to respond to the points raised by Mathieu Dutour in https://mail.gap-system.org/pipermail/forum/2021/006314.html (partly reproduced below). I will do so later today.
Back to the code of SmallGeneratingSet:
The code of SmallGeneratingSet uses a "LogPerm" operation.
It is a sophisticated algorithm for testing if a permutation is a power
of the other. The idea is to avoid computing all the powers. From my
viewpoint, a potential problem is that this function starts by computing
the order of the elements. Doesn't that computation require the computation
of the sequential element powers? Or is the order computed at the
permutation construction?
The computation of lower bounds on the number of generators
is in my opinion broken. The code is
I do agree that for a group of the form Z_2^{10} there is a lower bound of
10 on the number of generators. However the value of min is also 10 for
the cyclic group of order 1024 which is clearly wrong.
I think it is difficult to identify lower bound on the number of generators
in
a fast way and that we may be content with 1 for commutative and 2 for
non-commutative groups.
The next check
if min=Length(GeneratorsOfGroup(G)) then return GeneratorsOfGroup(G);fi;
is suboptimal since the work precedingly using LogPerm has obtained a small
set of generators gens. This is what the comparison should be with.
The sequential list of checks
is I think suboptimal.
The first check should be whether MovedPoints(U) has the same length
as MovedPoints(G). The second check should be about the second check
with the number of orbit. This is because if U=SymmetricGroup(4) and
G=SymmetricGroup(5) we pass the first equality check while we should not.
This consistency check should be rewritten as a lambda function. This
is because it is reused in the last sequence of the code where generators
are checked one by one. Note also that this code has obvious issues as the
"ok" is computed without being used.
I disagree with the
It is true that if the group is not Abelian then the lower bound on the
number
of generators is now 2. However, the i is not used as a lower bound but as
an index. Thus it is perfectly possible that the first generator in gens is
redundant
and so there is no reason for increasing the index.
Note that none of those issues led to an inexact result. The resulting
generating set may be larger than necessary, but it is still generating.
The text was updated successfully, but these errors were encountered: