Here is an example when this function will be used:
i1 : QQ[x,y,z];
|
i2 : sys={y-x^2, z-x^3, (x+y+z-1)/x};
|
i3 : describe ring ideal sys --"there are denominators! i will call the conversion method."
o3 = frac QQ[x, y, z]
|
i4 : convertedSys = convertToPoly(sys);
|
convertedSys is an equivalent system living in a Laurent polynomial ring. For each denominator, a new variable was created.
i5 : printWidth = 300;
|
i6 : toString convertedSys
o6 = {y-x^2, z-x^3, -var_0^(-1)+z*var_0^(-1)+y*var_0^(-1)+x*var_0^(-1), var_0-x}
|
i7 : ring ideal convertedSys
o7 = QQ[x, y, z, var ]
0
o7 : PolynomialRing
|
i8 : describe oo --that this is a ring with negative exponents allowed is evident from the option "Inverses=>true".
o8 = QQ[x..z, var , Degrees => {4:1}, MonomialOrder => {MonomialSize => 32}, DegreeRank => 1, Inverses => true]
0 {GroupRevLex => 4 }
{Position => Up }
|
Note that if the system is already polynomial, or in Laurent polynomial form, the method doesn’t change it. Of course, sometimes it is possible that it is polynomial "in disguise" as in the following example:
i9 : P=QQ[x,y,z];
|
i10 : f=(x*y + z^2*y) / y
2
o10 = z + x
o10 : frac(P)
|
i11 : liftable(f,P)
o11 = true
|
But, the method detects this and simplifies the system accordingly. Instead of creating Laurent polynomials, it simply updates the system using the following:
i12 : lift(f,P)
2
o12 = z + x
o12 : P
|