Hilbert Series

The following functions compute the Hilbert series information of graded or (homogeneous) modules. This depends on the column weights, just as in graded polynomial rings.

HilbertSeries(M) : ModMPol -> FldFunElt
Given a graded R-module M, return the Hilbert series HM(t) of M (as an element of the univariate function field over the ring of integers). The i-th coefficient of the series gives the vector-space dimension of the degree-i graded piece of M. The algorithm implemented is that given in [BS92].

Note that if I is an ideal of the ring R, then the corresponding function for ideals HilbertSeries applied to I gives the Hilbert series of the affine algebra (quotient) R/I, so this is equivalent to HilbertSeries(QuotientModule(I)).

HilbertSeries(M, p) : ModMPol, RngIntElt -> RngSerLaurElt
Given a graded R-module M, return the Hilbert series HM(t) of M (as a Laurent series to precision p). (A Laurent series is required in general, since negative powers may occur when there are negative values in the grading of M.)
HilbertDenominator(M) : ModMPol -> RngUPol
Given a graded R-module M, return the unreduced Hilbert denominator D of the Hilbert series HM(t) of M (as a univariate polynomial over the ring of integers). The denominator D equals HilbertDenominator(R) which is simply ∏i=1n (1 - twi), where n is the rank of R and wi is the weight of the i-th variable (1 by default).
HilbertNumerator(M) : ModMPol -> RngUPolElt, RngIntElt
Given a graded R-module M, return the unreduced Hilbert numerator N of the Hilbert series HM(t) of M (as a univariate polynomial over the ring of integers) and a valuation shift s. The numerator N equals D x ts x HM(t), where D is the unreduced Hilbert denominator above. Computing with the unreduced numerator is often more convenient. Note that s will only be non-zero when M has negative weights in its grading.
HilbertPolynomial(I) : ModMPol -> RngUPolElt, RngIntElt
Given a graded R-module M, return the Hilbert polynomial H(d) of M as an element of the univariate polynomial ring Q[d], together with the index of regularity of M (the minimal integer k ≥0 such that H(d) agrees with the Hilbert function of M at d for all d ≥k).

Example PMod_Hilbert (H116E6)

We apply the Hilbert series functions to a simple quotient module.
> R<x,y,z> := PolynomialRing(RationalField(), 3);
> F := GradedModule(R, 3);
> M := quo<F | [x,0,0], [0,y^2,0]>;
> M;
Graded Module R^3/<relations>
Relations:
[  x,   0,   0],
[  0, y^2,   0]
> HilbertSeries(M);
(t^2 + t - 3)/(t^3 - 3*t^2 + 3*t - 1)
> HilbertSeries(M, 10);
3 + 8*s + 14*s^2 + 21*s^3 + 29*s^4 + 38*s^5 + 48*s^6 + 59*s^7 + 71*s^8 + 84*s^9
    + O(s^10)
> HilbertNumerator(M);
-x^2 - x + 3
0
> HilbertDenominator(M);
-x^3 + 3*x^2 - 3*x + 1
> HilbertPolynomial(M);
1/2*x^2 + 9/2*x + 3
0
> [Evaluate(HilbertPolynomial(F), i): i in [0..10]];
[ 3, 9, 18, 30, 45, 63, 84, 108, 135, 165, 198 ]
If the module has negative weights, then denominator may include extra powers of t, so the shift for the numerator will be non-zero.
> F := GradedModule(R, [-1]);
> F;
Free Graded Module R^1 with grading [-1]
> HilbertSeries(F);
-1/(t^4 - 3*t^3 + 3*t^2 - t)
> HilbertSeries(F, 10);
s^-1 + 3 + 6*s + 10*s^2 + 15*s^3 + 21*s^4 + 28*s^5 + 36*s^6 + 45*s^7 + O(s^8)
> HilbertNumerator(F);
1
1
> HilbertDenominator(F);
-x^3 + 3*x^2 - 3*x + 1
> HilbertPolynomial(F);
1/2*x^2 + 5/2*x + 3
-1
> [Evaluate(HilbertPolynomial(F), i): i in [-1..10]];
[ 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78 ]
V2.28, 13 July 2023