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_series
— Methodhilbert_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)
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_dimension
— Methodhilbert_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
AlgebraicSolving.hilbert_degree
— Methodhilbert_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
AlgebraicSolving.hilbert_polynomial
— Methodhilbert_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)