The following functions work with collections of polynomials which are considered as generators for subalgebras or submodules of a polynomial ring. They have particular use in invariant theory.
Let R=K[x1, ..., xn] be a polynomial ring of rank n over the field K. Suppose L is a set or sequence of k polynomials f1, ..., fk in R. Let A=K[f1, ..., fk] be the subalgebra (not ideal) of R generated by L. This function returns a minimal generating set of the algebra A as a (sorted) sequence of elements taken from L.
Let R=K[x1, ..., xn] be a polynomial ring of rank n over the field K. Suppose P is a sequence of k homogeneous polynomials p1, ..., pk in R and suppose S is a sequence of r homogeneous polynomials s1, ..., sr in R. Let A=K[p1, ..., pk] be the subalgebra (not ideal) of R generated by P and let M=A[s1, ..., sr] be the A-module generated by S over A. Finally, suppose F is an element of R. This function returns whether F is in the module M (considered as a submodule of R).If the result is true, the function also returns a sequence C=[c1, ..., cr] of length r with ci∈K[t1, ..., tk] such that F=∑i=1r ci(p1, ..., pk).si. (The polynomial ring K[t1, ..., tr] is constructed separately but automatically with the print names t1, t2, etc.)
The grading of the polynomial ring R is used to determine the (weighted) degrees of all the polynomials in P, S and the polynomial F.
The function works as follows: it first splits F into its homogeneous components, and then, for each homogeneous component of (weighted) degree d, it constructs a basis for the K-space of all polynomials of the module M of degree d and then determines by linear algebra whether the component lies in that space.
The function is most often used with an invariant ring: P is the sequence of primary invariants, S is the sequence of secondary invariants, and F is a general invariant which one wishes to express in terms of the module generators S over the algebra generated by P. Also, if one wishes to test only for membership in the algebra A=K[p1, ..., pk], then the sequence [R!1] should be passed for S.
Let R=K[x1, ..., xn] be a polynomial ring of rank n over the field K. Suppose P is a sequence of k homogeneous polynomials p1, ..., pk in R and suppose S is a sequence of r homogeneous polynomials s1, ..., sr in R. Let A=K[p1, ..., pk] be the subalgebra (not ideal) of R generated by P and let M=A[s1, ..., sr] be the A-module generated by S over A. Finally, suppose L is a sequence of length l of elements of R which are all homogeneous of (weighted) degree d. This function returns parallel sequences B and V with the following properties:
- (a)
- B is sequence of length l of booleans such that for 1≤i≤l, B[i] is true iff L[i] is in the module M.
- (b)
- V is a sequence of length l consisting of sequences of length r and consisting of polynomials in the polynomial ring T=K[t1, ..., tr]. (The polynomial ring T=K[t1, ..., tr] is constructed separately but automatically with the print names t1, t2, etc.) If B[i] is false (so L[i] is not in M), V[i] is a sequence of r zero polynomials. Otherwise V[i] is a sequence of r polynomials ci, 1, ..., ci, r in T such that that L[i]=∑j=1r ci, j(p1, ..., pk).sj.
The grading of the polynomial ring R is used to determine the (weighted) degrees of all the polynomials in P, S and L.
The function works as follows: it constructs a basis for the K-space of all polynomials of the module M of degree d and then, for each i with 1≤i ≤l, determines by linear algebra whether L[i] lies in the space. Only one echelonization of the space is needed to determine all the values of B and V so it is much more efficient to use this function if possible with many polynomials in L of the same homogeneous degree instead of calling the previous function separately for each polynomial since that will need to construct the basis for the homogeneous space and perform an echelonization each time.
Again, this function is most often used with an invariant ring: P is the sequence of primary invariants, S is the sequence of secondary invariants, and L is a sequence of general invariants which one wishes to express in terms of the module generators S over the algebra generated by P. Also, if one wishes to test only for membership in the algebra A=K[p1, ..., pk], then the sequence [R!1] should be passed for S.
Let R=K[x1, ..., xn] be a polynomial ring of rank n over the field K. Suppose P is a sequence of k homogeneous polynomials p1, ..., pk in R and suppose S is a sequence of r homogeneous polynomials s1, ..., sr in R. Let A=K[p1, ..., pk] be the subalgebra (not ideal) of R generated by P and let M=A[s1, ..., sr] be the A-module generated by S over A. Finally, suppose L is a sequence of length l of elements of R which are all homogeneous of (weighted) degree d. Let U be the K-subspace of R consisting of all polynomials of the module M of (weighted) degree d and let V be the K-subspace of R generated by the elements of L. This function returns a sequence I of integer indices such that the sequence elements of L corresponding to the indices in I forms a basis for a K-subspace W of R such that U + V = U direct-sum W. That is, I selects a subsequence of L which yields an extension of any basis of U to a basis of U + V.Using this function, one can extend a minimal module generating set in S to include new elements of increasing degree, while ensuring that the module generators are minimalized (i.e., there is no redundancy amongst them).
The grading of the polynomial ring R is used to determine the (weighted) degrees of all the polynomials in P, S and L.
> R<x, y, z> := PolynomialRing(RationalField(), 3); > P := [x^2 + y^2, z]; > S := [1, x + y + z]; > L := [x^2 + y^2, (x+y+z)^2-z^2-2*x*y, x*y]; > B, V := HomogeneousModuleTest(P, S, L); > B; [ true, true, false ] > V; [ [ t1, 0 ], [ t1 - 2*t2^2, 2*t2 ], [ 0, 0 ] ] > // Thus L[1] is P[1]*S[1] and > // L[2] is (P[1] - 2*P[2]^2)*S[1] + 2*P[2]*S[2]. > L[1] eq P[1]*S[1]; true > (P[1] - 2*P[2]^2)*S[1] + 2*P[2]*S[2] eq L[2]; true > // Determine subsequence of [x^3, y^3, z^3] which forms > // extension basis of module generated by P and S. > L := [x^3, y^3, z^3]; > HomogeneousModuleTestBasis(P, S, L); [ 1, 2 ] > // Thus x^2 and y^2 could be appended to S to preserve > // minimality.