```SmallGeneratingSet``` throws error on matrix group
Observed behaviour
Throws an error on the following setup:
g:=Group([ [[0,1,0], [-1,0,-2], [0,0,1]] , [[0,-1,0], [1,0,2], [0,0,1]] , [[-1,0,0], [0,-1,0], [0,0,1]] ]);
SmallGeneratingSet(g);
Expected behaviour
Returning a small generating set (possibly even the same) for the group g
Copy and paste GAP banner (to tell us about your setup)
gap
┌───────┐ GAP 4.12.2 of 2022-12-18
│ GAP │ https://www.gap-system.org
└───────┘ Architecture: x86_64-pc-linux-gnu-default64-kv8
Configuration: gmp 6.2.1, GASMAN, readline
Loading the library and packages ...
Packages: AtlasRep 2.1.6, AttributeScheduler 2019.12.05, AutoDoc 2022.10.20, Browse 1.8.19, CTblLib 1.3.4,
datastructures 0.3.0, Digraphs 1.6.1, FactInt 1.6.3, FGA 1.4.0, Forms 1.2.9, GAPDoc 1.6.6, genss 1.6.8,
GRAPE 4.9.0, IO 4.8.0, NautyTracesInterface 0.2, orb 4.9.0, PrimGrp 3.4.3, recog 1.4.2,
SimplicialSurfaces 0.6, SmallGrp 1.5.1, SpinSym 1.5.2, TomLib 1.2.9, TransGrp 3.6.3, utils 0.81
Try '??help' for help. See also '?copyright', '?cite' and '?authors'
This is an infinite matrix group, so how would this be supposed to work?
The only issue could be to have a nicer catch for this case, there are probably many other such situations.
Good point, I didn't think about how it could even work mathematically. Would it be better if there was something in the documentation or it would just return the original set? Not sure if this is a valid use case but I maybe if someone iterates over a set of generators and tries to reduce them it could be annoying to just get an error.
There are really two questions here:
- Should the existing method be subject to extra conditions? (
IsFinite,CanEasilyTestMembershipwould be potential candidates, even though the method is more general) - Should there be a fallback method for
SmallGeneratingSetthat simply returns the existing generators.
I think that even a very basic method which only tries to eliminate generators which are easily seen to be redundant could be useful. For example, such method would remove the identity and duplicate generators, generators which are inverses of other generators and generators which are products of two (or a few) other generators and / or inverses of other generators. Such method would not need to require much more than CanEasilyCompareElements.