Dear Gap Forum,
Jacob Hirbawi asked about a way to construct the first 1000 elements
of an infinite matrix group.
It is true, that the 'Random' function will not work for infinite
matrix groups, because 'Random' (and many other matrix group
functions) try to construct an isomorphic permutation group. However,
if you have a matrix of finite order you can asked for its order. But
if your matrix has a very large orbit, this function will run for
ages, because it constructs orbits in order to find the order of the
matrix.
In order to construct elements of an infinite matrix group, one could
form random products in the generators. I have found to following
heuristic useful for matrix groups over finite fields: Create a
product of 100 * Length(G.generators) randomly chosen generators as
seed, and multiply this seed from the left or right (again randomly
chosen) with a random generator for the next element.
This random function is used in a program which will try to decide
whether a given group over a finite field contains the SL or not. If
your group is called G the following program will generate 1000
Elements of G:
E := []; while Length(E) < 1000 do AddSet( E, RecSL.Random(G,0) ); od;
As this function 'RecSL.Random' does not invert the generators, you
might want to add the inverses of the generators of your matrix group
to the generators of G. As you are (maybe) not interested in (pseudo)
random elements, you should skip the seed generating process by starting
with the identity as seed element:
G := Group( m1, ..., mn );
G.randomSeed := G.identity;
best wishes
Frank Celler