4)
R.<x,y> = PolynomialRing(QQ, order = 'lex')
f = x^3*y^3 + 1
p = 1 + 3*x + 2*x^2 + x^2*y + x^3*y
q = x*y^2 + x^2*y^2
print(f)
print(p)
print(q)
g1 = f - y^2*p
g1
g2 = g1 + y*q
g2
r = g2 + 2*q
r
a1 = y^2
a2 = -y - 2
f == a1*p + a2*q + r
# degrees of the leading terms of f, a1*p and a2*q
print(f.lt().degrees())
print((a1*p).lt().degrees())
print((a2*q).lt().degrees())
# faster way (different remainder)
f.reduce([p,q])
5)
R.<x,y> = PolynomialRing(QQ, order = 'lex')
f = x^3*y^2
p = 1 + x^3*y + 3*x^2*y^5
q = 2*x^2*y + x^2*y^2
print(f)
print(p)
print(q)
g1 = f - y*p
g1
g2 = g1 + 3*y^4*q
g2
g3 = g2 - 6*y^3*q
g3
g4 = g3 + 12*y^2*q
g4
g5 = g4 - 24*y*q
g5
r = g5 + 48*q
r
a1 = y
a2 = -3*y^4 + 6*y^3 - 12*y^2 + 24*y - 48
f == a1*p + a2*q + r
# degrees of the leading terms of f, a1*p and a2*q
print(f.lt().degrees())
print((a1*p).lt().degrees())
print((a2*q).lt().degrees())
# faster way
f.reduce([p,q])
6)
R.<x,y> = PolynomialRing(QQ, order = 'lex')
f = x^2*y + x*y^2 + y^2
f1 = x*y - 1
f2 = y^2 - 1
print(f)
print(f1)
print(f2)
# reduce first by f1 and then by f2
r = f.reduce([f1]).reduce([f2])
r
a1 = -x - y
a2 = -1
f + a1*f1 + a2*f2
# reduce by f1 and f2
r = f.reduce([f1, f2])
r
# different reduction with b1, b2
b1 = -x
b2 = -1 - x
f + b1*f1 + b2*f2