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.
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)).
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.)
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).
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.
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).
> 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 ]