In this section we list various attributes of invariant rings which can be examined and set by the user. This allows low-level control of information stored in invariant rings or fields. Note that when the user sets an attribute, only minimal testing can be done on the value so if an incorrect value is set, unpredictable results may occur. Note also that if an attribute is not set, referring to it in an expression (using the ` operator) will not trigger the calculation of it (while intrinsic functions do); rather an error will ensue. Use the assigned operator to test whether an attribute is set.
The attribute for the primary invariants of invariant ring R=K[V]G. If the attribute R`PrimaryInvariants is examined, either the current primary invariants of R are set so they are returned or an error results. If the attribute R`PrimaryInvariants is set by assignment, it must be sequence of n algebraically-independent invariants of G, where n is the rank of R. Magma will not necessarily check that this condition is met since that may be very time-consuming. If the attribute is already set, the new value must be the same as the old value. Note that this attribute is useful when it is desired to compute secondary invariants of R with respect to some specially constructed primary invariants which would not be constructed by the automatic algorithm in Magma.
The attribute for the secondary invariants of invariant ring R=K[V]G. If the attribute R`SecondaryInvariants is examined, either the current primary invariants of R are set so they are returned or an error results. If the attribute R`SecondaryInvariants is set by assignment to Q, primary invariants for R must already be defined, and Q must be sequence of secondary invariants with respect to the primary invariants of R. Magma will not necessarily check that this condition is met since that may be very time-consuming. If the attribute is already set, the new value must be the same as the old value.
The attribute for the Hilbert series of invariant ring R=K[V]G. If the attribute R`HilbertSeries is examined, either the Hilbert series of R is computed so it is returned or an error results. If the attribute R`HilbertSeries is set by assignment to H, H must be rational function in the function field Z(t) and equal to the Hilbert series of R. Magma will not necessarily check that this condition is met since that may be very time-consuming. If the attribute is already set, the new value must be the same as the old value.
> // Create group G and subgroup H of G and invariant rings > // RG and RH of G and H respectively. > G := CyclicGroup(4); > H := sub<G|G.1^2>; > RG := InvariantRing(G, GF(2)); > RH := InvariantRing(H, GF(2)); > > // Create Hilbert Series S of RG and set it in RG. > F<t> := FunctionField(IntegerRing()); > S := (t^3 + t^2 - t + 1)/(t^8 - 2*t^7 + 2*t^5 - 2*t^4 + > 2*t^3 - 2*t + 1); > RG`HilbertSeries := S; > > // Note RG has no primary invariants yet so let Magma compute them as PG. > RG`PrimaryInvariants; >> RG`PrimaryInvariants; ^ Runtime error in `: Attribute 'PrimaryInvariants' for this structure is valid but not assigned > PG := PrimaryInvariants(RG); > PG; [ x1 + x2 + x3 + x4, x1*x2 + x1*x4 + x2*x3 + x3*x4, x1*x3 + x2*x4, x1*x2*x3*x4 ] > > // Set primary invariants of RH to PG and compute secondary > // invariants of RH with respect to PG. > RH`PrimaryInvariants := PG; > SecondaryInvariants(RH); [ 1, x2 + x4, x2*x4, x1*x2 + x1*x3 + x2^2 + x2*x4 + x3*x4 + x4^2, x1^2*x2 + x1*x2*x3 + x1*x3*x4 + x2^3 + x3^2*x4 + x4^3, x1^2*x2 + x1*x2^2 + x1*x2*x3 + x1*x2*x4 + x1*x3*x4 + x1*x4^2 + x2^3 + x2^2*x3 + x2*x3*x4 + x3^2*x4 + x3*x4^2 + x4^3, x1*x2*x4^2 + x2^2*x3*x4 + x2^2*x4^2, x1^2*x2*x4^2 + x1*x2^2*x3*x4 + x1*x2^2*x4^2 + x1*x2*x3*x4^2 + x2^3*x4^2 + x2^2*x3^2*x4 + x2^2*x3*x4^2 + x2^2*x4^3 ]