Singular

D.7.1.34 rel_orbit_variety

Procedure from library `finvar.lib` (see finvar_lib).

Usage:
rel_orbit_variety(I,F[,s]);
I: an <ideal> invariant under the action of a group,
F: a 1xm <matrix> defining the invariant ring of this group.
s: optional <string>; if s is present then (for downward compatibility) the old procedure <relative_orbit_variety> is called, and in this case s gives the name of a new <ring>.

Return:
Without optional string s, a list L of two rings is returned.
The ring L[1] carries a weighted degree order with variables y(1..m), the weight of y(k) equal to the degree of the k-th generators F[1,k] of the invariant ring.
L[1] contains a Groebner basis (type <ideal>, named G) of the ideal defining the relative orbit variety with respect to I.
The ring L[2] has the variables of the basering together with y(1..m) and carries a block order: The first block is the order of the basering, the second is the weighted degree order occuring in L[1]. L[2] contains G and a Groebner basis (type <ideal>, named Conv) such that if p is any invariant polynomial expressed in the variables of the basering then reduce(p,Conv) is a polynomial in the new variables y(1..m) such that evaluation at the generators of the invariant ring yields p. This can be used to avoid the application of <algebra_containment> (see algebra_containment).
For the case of optional string s, the function is equivalent to relative_orbit_variety.

Theory:
A Groebner basis of the ideal of algebraic relations of the invariant ring generators is calculated, then one of the basis elements plus the ideal generators. The variables of the original ring are eliminated and the polynomials that are left define the relative orbit variety with respect to I. The elimination is done by a weighted blockorder that has the advantage of dealing with quasi-homogeneous ideals.

Note:
We provide the ring L[1] for the sake of downward compatibility, since it is closer to the ring returned by relative_orbit_variety than L[2]. However, L[1] carries a weighted degree order, whereas the ring returned by relative_orbit_variety is lexicographically ordered.

Example:
 ```LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix F[1][3]=x+y+z,xy+xz+yz,xyz; ideal I=x2+y2+z2-1,x2y+y2z+z2x-2x-2y-2z,xy2+yz2+zx2-2x-2y-2z; list L = rel_orbit_variety(I,F); ==> ==> // 'rel_orbit_variety' created a list of two rings. ==> // If L is the name of that list, you can access ==> // the first ring by ==> // def R = L[1]; setring R; ==> // (similarly for the second ring) def AllR = L[2]; setring(AllR); print(G); ==> y(1)^2-2*y(2)-1, ==> y(1)*y(2)-3*y(3)-4*y(1), ==> 2*y(2)^2-3*y(1)*y(3)-7*y(2)-4, ==> 6*y(3)^2-15*y(1)*y(3)+25*y(2)+12 print(Conv); ==> x+y+z-y(1), ==> y^2+y*z+z^2-y*y(1)-z*y(1)+y(2), ==> z^3-z^2*y(1)+z*y(2)-y(3) basering; ==> // coefficients: QQ ==> // number of vars : 6 ==> // block 1 : ordering dp ==> // : names x y z ==> // block 2 : ordering wp ==> // : names y(1) y(2) y(3) ==> // : weights 1 2 3 ==> // block 3 : ordering C ```