
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
kth 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
quasihomogeneous 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+z21,x2y+y2z+z2x2x2y2z,xy2+yz2+zx22x2y2z;
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)^22*y(2)1,
==> y(1)*y(2)3*y(3)4*y(1),
==> 2*y(2)^23*y(1)*y(3)7*y(2)4,
==> 6*y(3)^215*y(1)*y(3)+25*y(2)+12
print(Conv);
==> x+y+zy(1),
==> y^2+y*z+z^2y*y(1)z*y(1)+y(2),
==> z^3z^2*y(1)+z*y(2)y(3)
basering;
==> // characteristic : 0
==> // 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
 See also:
relative_orbit_variety.
