Macaulay2 » Documentation
Packages » InvariantRing :: isInvariant
next | previous | forward | backward | up | index | toc

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

Synopsis

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 :

For the programmer

The object isInvariant is a method function.