This function is provided by the package InvariantRing
When called on a linearly reductive group action and a degree, this function returns a list of generators for the Hilbert ideal that are also invariant under the action. This function computes the Hilbert ideal first using hilbertIdeal then finds invariant generators degree by degree using invariants(LinearlyReductiveAction,ZZ).
The next example constructs a cyclic group of order 2 as a set of two affine points. Then it introduces an action of this group on a polynomial ring in two variables and computes the Hilbert ideal. The action permutes the variables of the polynomial ring.
i1 : S = QQ[z] o1 = S o1 : PolynomialRing |
i2 : I = ideal(z^2 - 1) 2 o2 = ideal(z - 1) o2 : Ideal of S |
i3 : M = matrix{{(z+1)/2, (1-z)/2},{(1-z)/2, (z+1)/2}} o3 = | 1/2z+1/2 -1/2z+1/2 | | -1/2z+1/2 1/2z+1/2 | 2 2 o3 : Matrix S <--- S |
i4 : sub(M,z=>1),sub(M,z=>-1) o4 = (| 1 0 |, | 0 1 |) | 0 1 | | 1 0 | o4 : Sequence |
i5 : R = QQ[x,y] o5 = R o5 : PolynomialRing |
i6 : V = linearlyReductiveAction(I, M, R) 2 o6 = R <- S/ideal(z - 1) via | 1/2z+1/2 -1/2z+1/2 | | -1/2z+1/2 1/2z+1/2 | o6 : LinearlyReductiveAction |
i7 : H = hilbertIdeal V 2 o7 = ideal (x + y, y ) o7 : Ideal of R |
i8 : invariants V o8 = {x + y, x*y} o8 : List |
The algorithm for the Hilbert ideal performs an elimination using Groebner bases. The options DegreeLimit and SubringLimit are standard gb options that can be used to interrupt the computation before it is complete, yielding a partial list of invariant generators for the Hilbert ideal.