## Exercice 10.1¶

In [1]:
A.<x,y> = PolynomialRing(QQ, order='lex')
I = A.ideal(y^4*x + 3*x^3 - y^4 - 3*x^2, x^2*y - 2*x^2, 2*y^4*x - x^3 - 2*y^4 + x^2)


On retrouve le générateur de $ℚ[y] ∩ I$ à la fin de la base de Gröbner

In [2]:
I.groebner_basis()

Out[2]:
[x^2 - 1/16*y^4, x*y^4 - y^4, y^5 - 2*y^4]
In [3]:
I.change_ring(A.change_ring(names='y,x')).groebner_basis()

Out[3]:
[y^4 - 16*x^2, y*x^2 - 2*x^2, x^3 - x^2]

Une méthode alternative de calculer le même résultat

In [4]:
I.elimination_ideal(x)

Out[4]:
Ideal (y^5 - 2*y^4) of Multivariate Polynomial Ring in x, y over Rational Field

## Exercice 10.2¶

In [5]:
A.<x,y,z,t> = PolynomialRing(QQ, order='lex')
I = A.ideal(x + y - z, x^2- 2*t^2, y^2 - 5*t^2)

In [6]:
G = I.groebner_basis()
G

Out[6]:
[x + y - z, y^2 - 5*t^2, y*z - 1/2*z^2 - 3/2*t^2, y*t^2 + 1/6*z^3 - 17/6*z*t^2, z^4 - 14*z^2*t^2 + 9*t^4]
In [7]:
p = G[-1](t=1)
p

Out[7]:
z^4 - 14*z^2 + 9
In [8]:
p(z=sqrt(2)+sqrt(5)).expand()

Out[8]:
0
In [9]:
q = G[-2](t=1)
q

Out[9]:
y + 1/6*z^3 - 17/6*z
In [10]:
q(y=sqrt(5), z=sqrt(2)+sqrt(5)).expand()

Out[10]:
0

## Exercice 10.5¶

In [11]:
A.<X,Y> = PolynomialRing(QQ, order='lex')
I = A.ideal(X^4 + Y^4 - 1, X^5*Y^2 - 4*X^3*Y^3 + X^2*Y^5 - 1)
G = I.groebner_basis()
G

Out[11]:
[X + 126734872901588973582/3395909056778368040767*Y^27 - 1059177032400400444180/3395909056778368040767*Y^26 + 2285808466233304718588/3395909056778368040767*Y^25 + 557276448172777618804/3395909056778368040767*Y^24 + 10527015879533829422789/3395909056778368040767*Y^23 + 4534298082785732166884/3395909056778368040767*Y^22 - 21929288596306940961744/3395909056778368040767*Y^21 + 56329160184432659174606/3395909056778368040767*Y^20 - 32621295253356715497026/3395909056778368040767*Y^19 - 25658713786866124611709/3395909056778368040767*Y^18 + 43205590840914603717979/3395909056778368040767*Y^17 - 165768748128993483079350/3395909056778368040767*Y^16 + 28975447087098703454686/3395909056778368040767*Y^15 + 52105040032950372573350/3395909056778368040767*Y^14 - 31519296754205845938329/3395909056778368040767*Y^13 + 162437763572247864806756/3395909056778368040767*Y^12 - 3236556162508197221408/3395909056778368040767*Y^11 - 40884339127343714124472/3395909056778368040767*Y^10 + 11911188972708254939015/3395909056778368040767*Y^9 - 54062861559277191650146/3395909056778368040767*Y^8 - 17328150062224139585228/3395909056778368040767*Y^7 + 10984661610735135556071/3395909056778368040767*Y^6 - 5735303903628078892952/3395909056778368040767*Y^5 + 792223388139721445320/3395909056778368040767*Y^4 + 13714655845428915245369/3395909056778368040767*Y^3 + 785919437095244302380/3395909056778368040767*Y^2 + 1688372769006791192973/3395909056778368040767*Y - 270367022566925300594/3395909056778368040767, Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2]
In [12]:
G[-1]

Out[12]:
Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2
In [13]:
q = G[-1].univariate_polynomial()
q

Out[13]:
Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2
In [14]:
q.factor()

Out[14]:
Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2
In [15]:
q.change_ring(RR).factor()

Out[15]:
(Y - 0.966506296874216) * (Y - 0.721113386166218) * (Y + 0.597428986963397) * (Y + 0.924209668349044) * (Y^2 - 9.64588608545517*Y + 27.2478986510189) * (Y^2 - 2.07381031598562*Y + 1.07569410961252) * (Y^2 - 0.893217025895166*Y + 0.295336342296285) * (Y^2 - 0.779939824160087*Y + 0.428337852683492) * (Y^2 - 0.121266599180110*Y + 1.03967187384805) * (Y^2 - 0.0603056667782709*Y + 0.938887472264107) * (Y^2 + 0.0272947089885237*Y + 1.03310413303256) * (Y^2 + 0.228048118439437*Y + 0.407906285068887) * (Y^2 + 0.525249644063553*Y + 0.343345271720577) * (Y^2 + 1.29090151259232*Y + 0.509689390328851) * (Y^2 + 1.65011569846010*Y + 4.77398949422654) * (Y^2 + 2.01879686263848*Y + 1.01964113877716)
In [16]:
q.roots(RR)

Out[16]:
[(-0.924209668349044, 1),
(-0.597428986963397, 1),
(0.721113386166218, 1),
(0.966506296874216, 1)]
In [17]:
(implicit_plot(I.0, (X,-5,5), (Y,-5,5))
+ implicit_plot(I.1, (X, -5, 5), (Y, -5, 5)))

Out[17]:

L'avant-dernier polynôme de la base de Gröbner nous permet de calculer $X$ en fonction de $Y$

In [18]:
G[-2]

Out[18]:
X + 126734872901588973582/3395909056778368040767*Y^27 - 1059177032400400444180/3395909056778368040767*Y^26 + 2285808466233304718588/3395909056778368040767*Y^25 + 557276448172777618804/3395909056778368040767*Y^24 + 10527015879533829422789/3395909056778368040767*Y^23 + 4534298082785732166884/3395909056778368040767*Y^22 - 21929288596306940961744/3395909056778368040767*Y^21 + 56329160184432659174606/3395909056778368040767*Y^20 - 32621295253356715497026/3395909056778368040767*Y^19 - 25658713786866124611709/3395909056778368040767*Y^18 + 43205590840914603717979/3395909056778368040767*Y^17 - 165768748128993483079350/3395909056778368040767*Y^16 + 28975447087098703454686/3395909056778368040767*Y^15 + 52105040032950372573350/3395909056778368040767*Y^14 - 31519296754205845938329/3395909056778368040767*Y^13 + 162437763572247864806756/3395909056778368040767*Y^12 - 3236556162508197221408/3395909056778368040767*Y^11 - 40884339127343714124472/3395909056778368040767*Y^10 + 11911188972708254939015/3395909056778368040767*Y^9 - 54062861559277191650146/3395909056778368040767*Y^8 - 17328150062224139585228/3395909056778368040767*Y^7 + 10984661610735135556071/3395909056778368040767*Y^6 - 5735303903628078892952/3395909056778368040767*Y^5 + 792223388139721445320/3395909056778368040767*Y^4 + 13714655845428915245369/3395909056778368040767*Y^3 + 785919437095244302380/3395909056778368040767*Y^2 + 1688372769006791192973/3395909056778368040767*Y - 270367022566925300594/3395909056778368040767
In [19]:
I.variety()

Out[19]:
[]
In [20]:
I.variety(CC)

Out[20]:
[{Y: -1.00939843131924 - 0.0274944653961864*I, X: -0.262624822031785 - 0.523806714899075*I},
{Y: -1.00939843131924 + 0.0274944653961864*I, X: -0.262624822031785 + 0.523806714899075*I},
{Y: -0.924209668349044, X: 0.721113386166218},
{Y: -0.825057849230049 - 2.02318289822013*I, X: -0.825057716113690 + 2.02318284841370*I},
{Y: -0.825057849230049 + 2.02318289822013*I, X: -0.825057716113690 - 2.02318284841370*I},
{Y: -0.645450756296162 - 0.305094594389287*I, X: 0.0606332995900556 + 1.01783863005335*I},
{Y: -0.645450756296162 + 0.305094594389287*I, X: 0.0606332995900556 - 1.01783863005335*I},
{Y: -0.597428986963397, X: 0.966506296874216},
{Y: -0.262624822031776 - 0.523806714899069*I, X: -1.00939843131924 - 0.0274944653961864*I},
{Y: -0.262624822031776 + 0.523806714899069*I, X: -1.00939843131924 + 0.0274944653961864*I},
{Y: -0.114024059219719 - 0.628414512076182*I, X: 0.0301528333891355 - 0.968492787222865*I},
{Y: -0.114024059219719 + 0.628414512076182*I, X: 0.0301528333891355 + 0.968492787222865*I},
{Y: -0.0136473544942618 - 1.01632567750100*I, X: 0.446608512947587 + 0.309640401851934*I},
{Y: -0.0136473544942618 + 1.01632567750100*I, X: 0.446608512947587 - 0.309640401851934*I},
{Y: 0.0301528333891355 - 0.968492787222865*I, X: -0.114024059219717 - 0.628414512076185*I},
{Y: 0.0301528333891355 + 0.968492787222865*I, X: -0.114024059219717 + 0.628414512076185*I},
{Y: 0.0606332995900551 - 1.01783863005335*I, X: -0.645450756296168 + 0.305094594389296*I},
{Y: 0.0606332995900551 + 1.01783863005335*I, X: -0.645450756296168 - 0.305094594389296*I},
{Y: 0.389969912080043 - 0.525605670018670*I, X: 1.03690515799281 - 0.0228430063789460*I},
{Y: 0.389969912080043 + 0.525605670018670*I, X: 1.03690515799281 + 0.0228430063789460*I},
{Y: 0.446608512947583 - 0.309640401851943*I, X: -0.0136473544942619 + 1.01632567750100*I},
{Y: 0.446608512947583 + 0.309640401851943*I, X: -0.0136473544942619 - 1.01632567750100*I},
{Y: 0.721113386166218, X: -0.924209668349044},
{Y: 0.966506296874216, X: -0.597428986963396},
{Y: 1.03690515799281 - 0.0228430063789459*I, X: 0.389969912080024 - 0.525605670018678*I},
{Y: 1.03690515799281 + 0.0228430063789459*I, X: 0.389969912080024 + 0.525605670018678*I},
{Y: 4.82294304272759 - 1.99677716774417*I, X: -56.0180043338967 + 43.8237865954014*I},
{Y: 4.82294304272759 + 1.99677716774417*I, X: -56.0180043338967 - 43.8237865954014*I}]

## Exercice 10.6¶

In [21]:
A.<u,v,x,y,z> = PolynomialRing(QQ, order='lex')
I = A.ideal(v*x - u^2, u*y - v^2, z - u)
G = I.groebner_basis()
G

Out[21]:
[u - z, v^2 - y*z, v*x - z^2, v*z^2 - x*y*z, x^2*y*z - z^4]

L'idéal obtenu par élimination contient une hyper-surface parasite $z=0$. À l'aide d'une variable $t$, on peut forcer les dénominateurs $u$ et $v$ à ne pas s'annuler en ajoutant le polynôme $1 - uvt$ à l'idéal.

In [22]:
A.<t,u,v,x,y,z> = PolynomialRing(QQ, order='lex')
I = A.ideal(v*x - u^2, u*y - v^2, z - u, 1 - u*v*t)
G = I.groebner_basis()
G

Out[22]:
[t*x*y - 1, t*y*z^2 - v, t*z^3 - x, u - z, v^2 - y*z, v*x - z^2, v*z - x*y, x^2*y - z^3]
In [23]:
A.<t,u,x,y> = PolynomialRing(QQ, order='lex')
I = A.ideal(t^2 + t + 1 - x,
(t^2 - 1) - y*(t^2 + 1),
1 - u*(t^2+1))
G = I.groebner_basis()
G

Out[23]:
[t + 1/2*x^2*y - 1/2*x^2 + x + 1/2*y + 1/2, u + 1/2*y - 1/2, x^2*y^2 - 2*x^2*y + x^2 + 4*x*y - 4*x + y^2 + 3]