# Singular          #### D.7.1.8 group_reynolds

Procedure from library `finvar.lib` (see finvar_lib).

Usage:
group_reynolds(G1,G2,...[,v]);
G1,G2,...: nxn <matrices> generating a finite matrix group, v: an optional <int>

Assume:
n is the number of variables of the basering, g the number of group elements

Return:
a <list>, the first list element will be a gxn <matrix> representing the Reynolds operator if we are in the non-modular case; if the characteristic is >0, minpoly==0 and the finite group non-cyclic the second list element is an <int> giving the lowest common multiple of the matrix group elements' order (used in molien); in general all other list elements are nxn <matrices> listing all elements of the finite group

Display:
information if v does not equal 0

Theory:
The entire matrix group is generated by getting all left products of generators with the new elements from the last run through the loop (or the generators themselves during the first run). All the ones that have been generated before are thrown out and the program terminates when no new elements found in one run. Additionally each time a new group element is found the corresponding ring mapping of which the Reynolds operator is made up is generated. They are stored in the rows of the first return value.

Example:
 ```LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); print(L); ==> y, -x,-z, ==> -x,-y,z, ==> -y,x, -z, ==> x, y, z print(L[2..size(L)]); ==> 0, 1,0, ==> -1,0,0, ==> 0, 0,-1 ==> -1,0, 0, ==> 0, -1,0, ==> 0, 0, 1 ==> 0,-1,0, ==> 1,0, 0, ==> 0,0, -1 ==> 1,0,0, ==> 0,1,0, ==> 0,0,1 ```

### Misc 