# Singular

#### D.7.1.5 invariant_algebra_reynolds

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

Usage:
invariant_algebra_reynolds(REY[,v]);
REY: a gxn <matrix> representing the Reynolds operator of a finite matrix group, where g ist the group order and n is the number of variables of the basering;
v: an optional <int>

Return:
A minimal homogeneous generating set of the invariant ring, type <matrix>

Assume:
We are in the non-modular case, i.e., the characteristic of the basering does not divide the group order;
REY is the 1st return value of group_reynolds(), reynolds_molien() or the second one of primary_invariants()

Display:
Information on the progress of computations if v does not equal 0

Theory:
We do an incremental search in increasing degree d. Generators of the invariant ring are found among the Reynolds images of monomials of degree d. The generators are chosen by Groebner basis techniques (see S. King: Minimal generating sets of non-modular invariant rings of finite groups).

Note:
invariant_algebra_reynolds should not be used in rings with weighted orders.

Example:
 ```LIB "finvar.lib"; ring R=0,(a,b,c,d),dp; matrix A[4][4]= 0,0,1,0, 0,0,0,1, 1,0,0,0, 0,1,0,0; list L = group_reynolds(A); matrix G = invariant_algebra_reynolds(L[1],1); ==> We have 4 relevant monomials in degree 1 ==> We found generator number 1 in degree 1 ==> We found generator number 2 in degree 1 ==> Computing Groebner basis up to the new degree 2 ==> We have 3 relevant monomials in degree 2 ==> We found generator number 3 in degree 2 ==> We found generator number 4 in degree 2 ==> We found generator number 5 in degree 2 ==> Computing Groebner basis up to the new degree 3 ==> We found the degree bound 2 ==> We went beyond the degree bound, so, we are done! G; ==> G[1,1]=b+d ==> G[1,2]=a+c ==> G[1,3]=b2+d2 ==> G[1,4]=ab+cd ==> G[1,5]=a2+c2 ```