Hilbert series of an ideal

Introduction

AlgebraicSolving allows to compute the Hilbert series for the ideal spanned by given input generators over finite fields of characteristic smaller $2^{31}$ and over the rationals.

The underlying engine is provided by msolve.

Functionality

AlgebraicSolving.hilbert_seriesMethod
hilbert_series(I::Ideal{T}) where T <: MPolyRingElem

Compute the Hilbert series of a given polynomial ideal I.

Based on: Anna M. Bigatti, Computation of Hilbert-Poincaré series, Journal of Pure and Applied Algebra, 1997.

Notes:

  • This requires a Gröbner basis of I, which is computed internally if not already known.
  • Significantly faster when internal_ordering is :degrevlex.

Examples

julia> using AlgebraicSolving

julia> R, (x, y, z) = polynomial_ring(QQ, ["x", "y", "z"]);

julia> I = Ideal([x*y,x*z,y*z]);

julia> hilbert_series(I)
(-2*t - 1)//(t - 1)
source

In addition, from the same input, AlgebraicSolving can also compute the dimension and degree of the ideal, as well as the Hilbert polynomial and index of regularity.

AlgebraicSolving.hilbert_dimensionMethod
hilbert_dimension(I::Ideal{T}) where T <: MPolyRingElem

Compute the Krull dimension of a given polynomial ideal I by first computing its Hilbert series.

Note: This requires a Gröbner basis of I, which is computed internally if not already known.

Examples

julia> using AlgebraicSolving

julia> R, (x, y, z) = polynomial_ring(QQ, ["x", "y", "z"]);

julia> I = Ideal([x*y,x*z,y*z]);

julia> hilbert_dimension(I)
1
source
AlgebraicSolving.hilbert_degreeMethod
hilbert_degree(I::Ideal{T}) where T <: MPolyRingElem

Compute the degree of a given polynomial ideal I by first computing its Hilbert series.

Note: This requires a Gröbner basis of I, which is computed internally if not already known.

Examples

julia> using AlgebraicSolving

julia> R, (x, y, z) = polynomial_ring(QQ, ["x", "y", "z"]);

julia> I = Ideal([x*y,x*z,y*z]);

julia> hilbert_degree(I)
3
source
AlgebraicSolving.hilbert_polynomialMethod
hilbert_polynomial(I::Ideal{T}) where T <: MPolyRingElem

Compute the Hilbert polynomial and the index of regularity of a given polynomial ideal I by first computing its Hilbert series. The index of regularity is the smallest integer such that the Hilbert function and polynomial match.

Note that the Hilbert polynomial of I has leading term (e/d!)*t^d, where e and d are respectively the degree and Krull dimension of I.

Note: This requires a Gröbner basis of I, which is computed internally if not already known.

Examples

julia> using AlgebraicSolving

julia> R, (x, y, z) = polynomial_ring(QQ, ["x", "y", "z"]);

julia> I = Ideal([x*y,x*z,y*z]);

julia> hilbert_polynomial(I)
(3*s + 3, 1)
source