# isInvariant -- check whether a polynomial is invariant under a group action

## Synopsis

• Usage:
isInvariant(f, G), isInvariant(f, D), isInvariant(f, L)
• Inputs:
• Outputs:
• , whether the given polynomial is invariant under the given group action

## Description

This function is provided by the package InvariantRing.

This function checks if a polynomial is invariant under a certain group action.

The following example defines the permutation action of a symmetric group on a polynomial ring with three variables.

 i1 : R = QQ[x_1..x_3] o1 = R o1 : PolynomialRing i2 : L = apply(2, i -> permutationMatrix(3, [i + 1, i + 2] ) ) o2 = {| 0 1 0 |, | 1 0 0 |} | 1 0 0 | | 0 0 1 | | 0 0 1 | | 0 1 0 | o2 : List i3 : S3 = finiteAction(L, R) o3 = R <- {| 0 1 0 |, | 1 0 0 |} | 1 0 0 | | 0 0 1 | | 0 0 1 | | 0 1 0 | o3 : FiniteGroupAction i4 : isInvariant(1 + x_1^2 + x_2^2 + x_3^2, S3) o4 = true i5 : isInvariant(x_1*x_2*x_3^2, S3) o5 = false

Here is an example with a two-dimensional torus acting on polynomial ring in four variables:

 i6 : R = QQ[x_1..x_4] o6 = R o6 : PolynomialRing i7 : W = matrix{{0,1,-1,1}, {1,0,-1,-1}} o7 = | 0 1 -1 1 | | 1 0 -1 -1 | 2 4 o7 : Matrix ZZ <--- ZZ i8 : T = diagonalAction(W, R) * 2 o8 = R <- (QQ ) via | 0 1 -1 1 | | 1 0 -1 -1 | o8 : DiagonalAction i9 : isInvariant(x_1*x_2*x_3, T) o9 = true i10 : isInvariant(x_1*x_2*x_4, T) o10 = false

Here is another example of a product of two cyclic groups of order 3 acting on a three-dimensional vector space:

 i11 : R = QQ[x_1..x_3] o11 = R o11 : PolynomialRing i12 : W = matrix{{1,0,1}, {0,1,1}} o12 = | 1 0 1 | | 0 1 1 | 2 3 o12 : Matrix ZZ <--- ZZ i13 : A = diagonalAction(W, {3,3}, R) o13 = R <- ZZ/3 x ZZ/3 via | 1 0 1 | | 0 1 1 | o13 : DiagonalAction i14 : isInvariant(x_1*x_2*x_3, A) o14 = false i15 : isInvariant((x_1*x_2*x_3)^3, A) o15 = true

Here is an example with a general linear group acting by conjugation on a space of matrices (determinant and trace are invariants).

 i16 : S = QQ[a,b,c,d,t] o16 = S o16 : PolynomialRing i17 : I = ideal((det genericMatrix(S,2,2))*t-1) o17 = ideal(- b*c*t + a*d*t - 1) o17 : Ideal of S i18 : R = QQ[x_(1,1)..x_(2,2)] o18 = R o18 : PolynomialRing i19 : Q = (S/I)(monoid R); i20 : G = transpose genericMatrix(S/I,2,2) o20 = {-1} | a b | {-1} | c d | S 2 S 2 o20 : Matrix (-------------------) <--- (-------------------) - b*c*t + a*d*t - 1 - b*c*t + a*d*t - 1 i21 : X = transpose genericMatrix(Q,x_(1,1),2,2) o21 = {-1, 0} | x_(1,1) x_(1,2) | {-1, 0} | x_(2,1) x_(2,2) | 2 2 o21 : Matrix Q <--- Q i22 : N = reshape(Q^1,Q^4,transpose(inverse(G)*X*G)); 1 4 o22 : Matrix Q <--- Q i23 : phi = map(S,Q); o23 : RingMap S <--- Q i24 : M = phi last coefficients N; 4 4 o24 : Matrix S <--- S i25 : L = linearlyReductiveAction(I, M, R) o25 = R <- S/ideal(- b*c*t + a*d*t - 1) via | adt bdt -act -adt+1 | | cdt d2t -c2t -cdt | | -abt -b2t a2t abt | | -adt+1 -bdt act adt | o25 : LinearlyReductiveAction i26 : isInvariant(det genericMatrix(R,2,2),L) o26 = true i27 : isInvariant(trace genericMatrix(R,2,2),L) o27 = true

## Ways to use isInvariant :

• "isInvariant(RingElement,DiagonalAction)"
• "isInvariant(RingElement,FiniteGroupAction)"
• "isInvariant(RingElement,LinearlyReductiveAction)"

## For the programmer

The object isInvariant is .