-
Notifications
You must be signed in to change notification settings - Fork 161
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
Fix LatticeSubgroup
sometimes returning wrong results for matrix groups
#4718
Conversation
I wrote a comment in another thread, that it seems dangerous to me to have both I see that the code contains quite a few How about the following cleanish way of implementing the guarantee above? each
where I replaced all the |
There is no "secret guarantee", and the the latter need not be "the parent of the former". The guarantee is that that
... and they do so with precisely the overhead I was thinking about :-), namely: the resulting map can be less efficient, be it because it is a new wrapper object around the actual homomorphism or be it because it was rewritten as a GHBI (group homomorphism by images), or for some other reasons.
It is still not true that this image need be identical, only that it is equal. And one of the various motivations for
I don't see how this is any "cleaner" than what have, or for that matter, "safer": one could apply the same concerns about this: "is it guaranteed that But it certainly would be different, and using it would require adapting the whole library and lots of packages.
|
4532f54
to
d056182
Compare
return IsFinite( Image( NiceMonomorphism( G ) ) ); | ||
# the following does not use NiceObject(G) as the only method for | ||
# that currently requires IsHandledByNiceMonomorphism | ||
return IsFinite( Image( NiceMonomorphism( G ), G ) ); |
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.
Why not IsFinite(NiceObject(G))
?
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.
As explained in the comment right above this line, there is no method to compute NiceObject
in this case. We could also change the existing NiceObject
to apply to arbitrary groups, not just those in the filter IsHandledByNiceMonomorphism
, but that's a bigger change with potentially further implications, and so I decided to go this way, as it minimizes the risk of a regression. One could investigate the mentioned alternative in a separate PR, but I'd rather not mix it with a bugfix.
Ah, uh, sorry, I didn't read the comments.
…On Mon, Dec 13, 2021 at 2:49 PM Max Horn ***@***.***> wrote:
***@***.**** commented on this pull request.
------------------------------
In lib/grpramat.gi
<#4718 (comment)>:
> @@ -251,7 +251,9 @@ function( G )
# if not rational, use the nice monomorphism into a rational matrix group
if not IsRationalMatrixGroup( G ) then
- return IsFinite( Image( NiceMonomorphism( G ) ) );
+ # the following does not use NiceObject(G) as the only method for
+ # that currently requires IsHandledByNiceMonomorphism
+ return IsFinite( Image( NiceMonomorphism( G ), G ) );
As explained in the comment right above this line, there is no method to
compute NiceObject in this case. We could also change the existing
NiceObject to apply to arbitrary groups, not just those in the filter
IsHandledByNiceMonomorphism, but that's a bigger change with potentially
further implications, and so I decided to go this way, as it minimizes the
risk of a regression. One could investigate the mentioned alternative in a
separate PR, but I'd rather not mix it with a bugfix.
—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
<#4718 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AARAQUGW2A4NOFIRL3R3SRLUQX2VXANCNFSM5J3AUWEQ>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
--
Laurent Bartholdi laurent.bartholdi<at>gmail<dot>com
Fachrichtung Mathematik, Universität des Saarlandes
Postfach 151150, 66041 Saarbrücken, Germany
Tel. +49 681 3023227, Sekr. +49 681 3023430
|
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.
The only problematic issue is in Image(hom)
, which predates the observation that it can be most effective to inherit nice monomorphisms. But for consistency using NiceObject
in place of Image(hom,G)
is probably best.
... if used on a group which is handled by a `NiceMonomorphism`, which normally includes all matrix groups. Also fix an `IsFinite` method for non-rational cyclotomic matrix groups. In both cases, the code wrongly assumed that the `Image(NiceMonomorphism(g))` equals `Image(NiceMonomorphism(g),g)`. The solution is to use `NiceObject(g)` which is also cached, as it is an attribute. Also change a few more places to use `NiceObject(g)`; while they were correct, using `NiceObject` is potentially more efficient.
d056182
to
f1680d1
Compare
... if used on a group which is handled by a
NiceMonomorphism
, which normally includes all matrix groups. Also fix anIsFinite
method for non-rational cyclotomic matrix groups.In both cases, the code wrongly assumed that the
Image(NiceMonomorphism(g))
equalsImage(NiceMonomorphism(g),g)
. The solution is to useNiceObject(g)
which is also cached, as it is an attribute.Also change a few more places to use
NiceObject(g)
; while they were correct, usingNiceObject
is potentially more efficient.Fixes #4717