-
Notifications
You must be signed in to change notification settings - Fork 180
Fix two bugs in IsomorphismPermGroupForMatrixGroup
#6206
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
Conversation
ThomasBreuer
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks.
The bug will be fixed by the proposed change.
However, the GeneralRestrictedMapping result is not as good as one expects (both with and without the change from this pull request).
gap> G:= AtlasGroup( "M11", IsMatrixGroup );;
gap> iso:= IsomorphismPermGroup( G );;
gap> HasIsBijective( iso );
true
gap> G:= AtlasGroup( "M11", IsMatrixGroup );;
gap> NiceMonomorphism( G );;
gap> iso:= IsomorphismPermGroup( G );;
gap> HasIsBijective( iso );
false
Something that is returned by IsomorphismPermGroup should know that it is bijective.
I am not sure what the best fix for this problem could be.
|
This fix belongs to the context of issue #5355. |
ThomasBreuer
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry but I do not understand the new tests.
As far as I see, they do not exhibit the bug before the change:
The Source of nice is not identical with G, and this was checked already before the change.
Here is a distinguishing example that fails in GAP 4.15.1 and passes with the current pull request.
gap> G:=Group(Z(3)^0*[[2, 2, 1],[0, 2, 2],[2, 0, 1]]);;
gap> nice:= ActionHomomorphism(G, GF(3)^3);;
gap> HasNiceMonomorphism(G); # double check: no nice mono has been set so far
false
gap> SetNiceMonomorphism(G, nice);
gap> IsBijective(IsomorphismPermGroupForMatrixGroup(G));
true
gap> IsBijective(IsomorphismPermGroup(G));
true
|
I have also been looking into Before this PR: which is wrong for reasons explained in #6205. With the changes from this PR: This might simply be user error on my part, but thought I would share it here in case this is a bug. |
|
@Joseph-Edwards Thanks for this report. |
|
The explanation for the error described by @Joseph-Edwards is the same as the one in #6209: |
First bug: if the input group G has a nice monomorphism which has G as source, it is always returned, even if it is not surjective. Secondly, if G has a nice monomorphism whose range is not a perm group, then NicomorphismOfGeneralMatrixGroup is called to compute a new morphism into a permutation group. This is then also set as nice monomorphism -- but of course that only has an effect if no nice monomorphism had been set before. But if it was set before, then we might end up restricting the range of the new map produced by NicomorphismOfGeneralMatrixGroup to the wrong group (namely NiceObject(G)).
8ac7595 to
e113ff6
Compare
|
@ThomasBreuer indeed, my tests are insufficient, I got carried away while modifying them back and forth between "is surjective / is not surjective" and "source is G / source is larger", and "nice object is/isn't a perm group". I've now modified it to test all combinations. |
|
I've also add a commit which ensures that the map returned by |
ThomasBreuer
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great. Thanks.
First bug: if the input group
Ghas a nice monomorphism which hasGas source, it is always returned, even if it is not surjective.Secondly, if
Ghas a nice monomorphism whose range is not a perm group, thenNicomorphismOfGeneralMatrixGroupis called to compute a new morphism into a permutation group. This is then also set as nice monomorphism -- but of course that only has an effect if no nice monomorphism had been set before.But if it was set before, then we might end up restricting the range of the new map produced by
NicomorphismOfGeneralMatrixGroupto the wrong group (namelyNiceObject(G)).Fixes #6205 (at least the "superficial" part of it, not yet clear why it produces a worse nice mono).