Exercice 7.1

In [1]:
A.<x,y> = QQ[]
I = A.ideal(x^2*y^2 - x, x*y^3 + y)
G = I.groebner_basis()
G
Out[1]:
[x, y]
In [2]:
x in I, y in I
Out[2]:
(True, True)
In [3]:
I.reduce(x)
Out[3]:
0
In [4]:
a, b = x.lift(I)
a, b
Out[4]:
(-1/2*x*y^2 - 1, 1/2*x^2*y)
In [5]:
a*I.0 + b*I.1
Out[5]:
x
In [6]:
P = x^3*y^2 + 2*x*y^4
P.mod(I)
Out[6]:
0

Exercice 7.2

In [7]:
A.<x,y,z> = QQ[]
I = A.ideal(x*y*z + z^3, y^2)
I.groebner_basis()
Out[7]:
[z^5, y*z^3, x*y*z + z^3, y^2]

Exercice 7.4

In [8]:
I = A.ideal(x + y + z, x*y + y*z + z*x, x*y*z + 1)
I.reduce(x^3 + 1)
Out[8]:
0
In [9]:
I.groebner_basis()
Out[9]:
[z^3 + 1, y^2 + y*z + z^2, x + y + z]

Exercice 7.6

In [10]:
A.<x,y,z,t> = PolynomialRing(QQ, order='lex')
I = A.ideal(z^5-y^3*t^2, x^2*t - y*z^2, x^2*z^3 - y^4*t, x^4*z - y^5)
In [11]:
G = I.groebner_basis()
G
Out[11]:
[x^4*z - y^5, x^2*z^3 - y^4*t, x^2*t - y*z^2, y^3*t^2 - z^5]

On vérifie que la base de Gröbner calculée par Sage coïncide (à des constantes près) avec les générateurs

In [12]:
sorted(I.gens()), sorted(G)
Out[12]:
([-y^3*t^2 + z^5, x^2*t - y*z^2, x^2*z^3 - y^4*t, x^4*z - y^5],
 [y^3*t^2 - z^5, x^2*t - y*z^2, x^2*z^3 - y^4*t, x^4*z - y^5])

...o, plus simplement:

In [13]:
I.basis_is_groebner()
Out[13]:
True

Une petite fonction pour changer l'ordre de $I$ et renvoyer les termes de tête de sa base de Gröbner

In [14]:
def LT(I, ord='lex', names='x,y,z,t'):
    A = I.ring()
    J = I.change_ring(A.change_ring(names=names, order=ord))
    G = J.groebner_basis()
    return [g.lt() for g in G]

sans parametres ord et names, les valeurs par défaut sont prises

In [15]:
LT(I)
Out[15]:
[x^4*z, x^2*z^3, x^2*t, y^3*t^2]
In [16]:
LT(I, 'degrevlex')
Out[16]:
[y^5, x^2*z^3, z^5, y*z^2]

syntaxe équivalente à la précédente

In [17]:
LT(I, ord='degrevlex')
Out[17]:
[y^5, x^2*z^3, z^5, y*z^2]
In [18]:
LT(I, 'invlex')
Out[18]:
[y^3*t^2, y^4*t, x^2*t, x^4*z]
In [19]:
LT(I, 'deglex')
Out[19]:
[x^4*z, x^2*z^3, y^3*t^2, x^2*t]

En utilisant TermOrder, on peut construire d'autres ordres, par exemple l'ordre degrevlex gradué:

In [20]:
sage.rings.polynomial.term_order?
In [21]:
LT(I, TermOrder('wdegrevlex', (2,2,1,1)))
Out[21]:
[y^5, y^4*t, y^3*t^2, x^2*t]

Et, finalement, la solution, avec un autre ordre lexicographique

In [22]:
LT(I, names='y,z,t,x')
Out[22]:
[y^5, y^4*t, y^3*t^2, y^2*t^3*x^2, y*z^2, y*t^4*x^4, z^11]

Le même ordre, exprimé de façon matricielle

In [23]:
p = SymmetricGroup(4)([2,3,4,1])
p
Out[23]:
(1,2,3,4)
In [24]:
LT(I, ord=TermOrder(p.matrix()))
Out[24]:
[y^5, y^4*t, y^3*t^2, x^2*y^2*t^3, y*z^2, x^4*y*t^4, z^11]

Exercice 7.7

In [25]:
A.<x,y> = QQ[]
I = A.ideal(x - y^2, x*y - x)
I.groebner_basis()
Out[25]:
[x^2 - x, x*y - x, y^2 - x]
In [26]:
I.change_ring(A.change_ring(order='lex')).groebner_basis()
Out[26]:
[x - y^2, y^3 - y^2]
In [27]:
I.change_ring(A.change_ring(order='invlex')).groebner_basis()
Out[27]:
[y^2 - x, x*y - x, x^2 - x]

L'ensemble $G = \{x^2 - x,\; xy - x,\; y^2 - x,\; y^3 - y^2\}$ forme une base de Gröbner de l'idéal pour tous les ordres ci-dessus.

Selon l'ordre monomial choisi l'escalier de cette base (ensemble des monômes pas contenus dans $〈\mathrm{LT}(G)〉$) contient les monômes

$$\begin{cases} \{1, x, y\} &\text{si $x < y^2$,}\\ \{1, y, y^2\} &\text{sinon.} \end{cases}$$

Dans tous les cas, ceci coincide avec la dimension de l'algèbre quotient $ℚ[x,y]/I$, qui est $3$ (l'idéal est de dimension $0$).

In [28]:
I.dimension(), I.vector_space_dimension()
Out[28]:
(0, 3)

Puisque $G⊂I$, ceux-ci sont aussi les deux seuls escaliers possibles pour $\mathrm{LT}(I)$. Par conséquent, les monomes de tête de $G$ engendrent $\mathrm{LT}(I)$ pour n'importe quel ordre monomial.