This function is provided by the package InvariantRing. It implements an algorithm to compute a minimal set of generating monomial invariants for a diagonal action of an abelian group $(k^*)^r \times \mathbb{Z}/d_1 \times \cdots \times \mathbb{Z}/d_g$ on a polynomial ring $R = k[x_1, \dots, x_n]$. Saying the action is diagonal means that $(t_1,\ldots,t_r) \in (k^*)^r$ acts by $$(t_1,\ldots,t_r) \cdot x_j = t_1^{w_{1,j}}\cdots t_r^{w_{r,j}} x_j$$ for some integers $w_{i,j}$ and the generators $u_1, \dots, u_g$ of the cyclic abelian factors act by $$u_i \cdot x_j = \zeta_i^{w_{r+i,j}} x_j$$ for $\zeta_i$ a primitive $d_i$-th root of unity. The integers $w_{i,j}$ comprise the weight matrix W. In other words, the $j$ -th column of W is the weight vector of $x_j$.
The algorithm combines a modified version of an algorithm for tori due to Derksen and Kemper which can be found in:
together with an algorithm for finite abelian groups due to Gandini which can be found in:
Here is an example of a one-dimensional torus acting on a two-dimensional vector space:
i1 : R = QQ[x_1,x_2] o1 = R o1 : PolynomialRing |
i2 : W = matrix{{1,-1}} o2 = | 1 -1 | 1 2 o2 : Matrix ZZ <--- ZZ |
i3 : T = diagonalAction(W, R) * o3 = R <- QQ via | 1 -1 | o3 : DiagonalAction |
i4 : invariants T o4 = {x x } 1 2 o4 : List |
Here is an example of a product of two cyclic groups of order 3 acting on a three-dimensional vector space:
i5 : R = QQ[x_1..x_3] o5 = R o5 : PolynomialRing |
i6 : d = {3,3} o6 = {3, 3} o6 : List |
i7 : W = matrix{{1,0,1},{0,1,1}} o7 = | 1 0 1 | | 0 1 1 | 2 3 o7 : Matrix ZZ <--- ZZ |
i8 : A = diagonalAction(W, d, R) o8 = R <- ZZ/3 x ZZ/3 via | 1 0 1 | | 0 1 1 | o8 : DiagonalAction |
i9 : invariants A 3 3 3 2 2 2 o9 = {x , x , x , x x x , x x x } 3 2 1 1 2 3 1 2 3 o9 : List |
Here is an example of a diagoanl action by the product of a two-dimensional torus with a cyclic group of order 3 acting on a two-dimensional vector space:
i10 : R = QQ[x_1, x_2] o10 = R o10 : PolynomialRing |
i11 : d = {3} o11 = {3} o11 : List |
i12 : W1 = matrix{{1,-1}, {-1,1}} o12 = | 1 -1 | | -1 1 | 2 2 o12 : Matrix ZZ <--- ZZ |
i13 : W2 = matrix {{1,0}} o13 = | 1 0 | 1 2 o13 : Matrix ZZ <--- ZZ |
i14 : D = diagonalAction(W1, W2, d, R) * 2 o14 = R <- (QQ ) x ZZ/3 via (| 1 -1 |, | 1 0 |) | -1 1 | o14 : DiagonalAction |
i15 : invariants D 3 3 o15 = {x x } 1 2 o15 : List |