# poincare -- assemble degrees of a ring, module, or ideal into a polynomial

## Synopsis

• Usage:
poincare M
• Inputs:
• Outputs:
• , in the degrees ring of the ambient ring, which is a Laurent polynomial ring whose monomial T_0^(d_0) ... T_(r-1)^(d_(r-1)) correspond to the degree {d_0,...,d_(n-1)}

## Description

This function computes the numerator of the reduced Hilbert series of a graded ring, or a graded module or ideal over a graded ring, which encodes information about the twists in the minimal free resolution of the object.

 i1 : S = ZZ/101[w..z]; i2 : M = module monomialCurveIdeal(S, {1,3,4}); i3 : betti res M 0 1 2 o3 = total: 4 4 1 2: 1 . . 3: 3 4 1 o3 : BettiTally i4 : poincare M 2 3 4 5 o4 = T + 3T - 4T + T o4 : ZZ[T] i5 : hilbertSeries M 2 3 4 5 T + 3T - 4T + T o5 = ------------------- 4 (1 - T) o5 : Expression of class Divide

When $S$ is a $\ZZ^r$-graded ring in $n$ variables and $M$ a graded $S$-module, the Hilbert series of $M$ is by definition the formal power series $$HS(T_0,\dots,T_{n-1}) = \sum_{d\in\ZZ^r} \mathrm{dim}(M_d) T_0^{d_0} \cdots T_{n-1}^{d_{n-1}}.$$ The coefficient of the term $T_0^{d_0} \cdots T_{n-1}^{d_{n-1}}$ in the series is the number of basis elements of $M_{d_0,...,d_{n-1}}$. When the multi-degree has a single component, the coefficient of $T^d$ is dimension of $M_d$.

Since the Hilbert series is additive in exact sequences, the function poincare can be used to get information about the minimal free resolution and hence the syzygies of $M$. For more details, see Hilbert functions and free resolutions.

This polynomial is an element of the degrees ring of $S$. Notice that the monomial ordering used in the degrees ring is RevLex, so the polynomials in it will be displayed with the smallest exponents first.

## compute the polynomial for a ring

• Usage:
poincare R
 i6 : R = ZZ/101[x]/ideal(x^2); i7 : poincare R 2 o7 = 1 - T o7 : ZZ[T] i8 : numerator hilbertSeries R 2 o8 = 1 - T o8 : ZZ[T]

Recall that the variables of the polynomial are the variables of the degrees ring.

 i9 : R = ZZ/101[x,y, DegreeRank => 2]/ideal(x^2*y); i10 : poincare R 2 o10 = 1 - T T 0 1 o10 : ZZ[T ..T ] 0 1 i11 : numerator hilbertSeries R 2 o11 = 1 - T T 0 1 o11 : ZZ[T ..T ] 0 1

## compute the polynomial for a module

• Usage:
poincare M
 i12 : R = ZZ/101[w..z]; i13 : M = module monomialCurveIdeal(R, {1,3,4}); i14 : poincare M 2 3 4 5 o14 = T + 3T - 4T + T o14 : ZZ[T] i15 : numerator reduceHilbert hilbertSeries M 2 3 4 5 o15 = T + 3T - 4T + T o15 : ZZ[T]

## compute the polynomial for the quotient of a ring by an ideal

• Usage:
poincare I

The this command computes the numerator of the Hilbert series of the comodule R^1/I, where R is the ring of I.

 i16 : R = ZZ/101[w..z]; i17 : I = monomialCurveIdeal(R, {1,3,4}); o17 : Ideal of R i18 : poincare I 2 3 4 5 o18 = 1 - T - 3T + 4T - T o18 : ZZ[T] i19 : poincare comodule I 2 3 4 5 o19 = 1 - T - 3T + 4T - T o19 : ZZ[T] i20 : numerator hilbertSeries I 2 3 4 5 o20 = 1 - T - 3T + 4T - T o20 : ZZ[T] i21 : numerator reduceHilbert hilbertSeries I 2 3 o21 = 1 + 2T + 2T - T o21 : ZZ[T] i22 : poincare module I 2 3 4 5 o22 = T + 3T - 4T + T o22 : ZZ[T]

## Caching of the result of poincare

When poincare M is called on a module $M$, the result is cached in M.cache.poincare for future reference. For ideals, the polynomial is cached in the comodule of the ideal and for matrices, it is cached in the cokernel of the matrix. This can speed the computation of Gröbner bases. For details, see computing Groebner bases.

If the numerator $p$ of the Hilbert series for a module $M$ is known by other means, it can be manually stored by running:

 poincare M = p -- cache poincare

This functionality used to be available by running installHilbertFunction(M, p).

For example, in the following example, the Hilbert function of 3 random polynomials should be the same as the Hilbert function for a complete intersection.

 i23 : R = ZZ/101[a..g]; i24 : I = ideal random(R^1, R^{3:-3}); o24 : Ideal of R i25 : p = poincare ideal(a^3, b^3, c^3) 3 6 9 o25 = 1 - 3T + 3T - T o25 : ZZ[T] i26 : poincare I = p 3 6 9 o26 = 1 - 3T + 3T - T o26 : ZZ[T] i27 : gbTrace = 3 o27 = 3 i28 : time poincare I -- used 0.000023341 seconds 3 6 9 o28 = 1 - 3T + 3T - T o28 : ZZ[T] i29 : time gens gb I; -- registering gb 19 at 0x7f9cfd0fe8c0 -- [gb]{3}(3,3)mmm{4}(2,2)mm{5}(3,3)mmm{6}(2,6)mm{7}(1,4)m{8}(0,2)number of (nonminimal) gb elements = 11 -- number of monomials = 4186 -- #reduction steps = 38 -- #spairs done = 11 -- ncalls = 10 -- nloop = 29 -- nsaved = 0 -- -- used 0.0317695 seconds 1 11 o29 : Matrix R <--- R

In this case, the savings is minimal, but often it can be dramatic. Another important situation is to compute a Gröbner basis using a different monomial order.

 i30 : R = QQ[a..d]; -- registering polynomial ring 21 at 0x7f9cfded8a00 i31 : I = ideal random(R^1, R^{3:-3}); -- registering gb 20 at 0x7f9cfd0fe700 -- [gb]number of (nonminimal) gb elements = 0 -- number of monomials = 0 -- #reduction steps = 0 -- #spairs done = 0 -- ncalls = 0 -- nloop = 0 -- nsaved = 0 -- o31 : Ideal of R i32 : time p = poincare I -- registering gb 21 at 0x7f9cfd0fe540 -- [gb]{3}(3)mmm{4}(2)mm{5}(3)mmm{6}(6)mmoooo{7}(4)mooo{8}(2)oonumber of (nonminimal) gb elements = 11 -- number of monomials = 267 -- #reduction steps = 236 -- #spairs done = 30 -- ncalls = 10 -- nloop = 20 -- nsaved = 0 -- -- used 0.0056798 seconds 3 6 9 o32 = 1 - 3T + 3T - T o32 : ZZ[T] i33 : S = QQ[a..d, MonomialOrder => Eliminate 2] -- registering polynomial ring 22 at 0x7f9cfded8900 o33 = S o33 : PolynomialRing i34 : J = substitute(I, S) 2 3 4 2 2 5 3 5 2 3 2 5 2 1 o34 = ideal (-a + -a b + 2a*b + -b + -a c + -a*b*c + b c + -a d + -a*b*d + 5 9 2 3 2 6 7 ----------------------------------------------------------------------- 2 2 5 2 1 1 9 2 2 8 3 4 2 2b d + a*c + -b*c + -a*c*d + -b*c*d + -a*d + 3b*d + -c + -c d + 3 9 2 7 7 3 ----------------------------------------------------------------------- 3 2 3 3 3 6 2 5 2 1 3 6 2 1 2 6 2 -c*d + -d , a + -a b + -a*b + -b + -a c + 6a*b*c + -b c + -a d + 5 2 5 2 4 5 3 7 ----------------------------------------------------------------------- 3 2 2 2 3 3 9 2 1 2 1 3 a*b*d + --b d + a*c + b*c + --a*c*d + -b*c*d + -a*d + -b*d + -c + 10 10 8 4 2 3 ----------------------------------------------------------------------- 1 2 2 8 3 5 3 3 2 1 2 3 3 2 1 2 -c d + 2c*d + -d , -a + -a b + -a*b + -b + 7a c + a*b*c + -b c + 2 7 7 2 3 2 5 ----------------------------------------------------------------------- 5 2 6 5 2 1 2 1 2 3 2 1 2 -a d + -a*b*d + -b d + -a*c + -b*c + 2a*c*d + -b*c*d + a*d + --b*d 3 5 4 2 8 2 10 ----------------------------------------------------------------------- 7 3 8 2 7 2 3 + -c + -c d + -c*d + d ) 5 5 8 o34 : Ideal of S i35 : poincare J = p 3 6 9 o35 = 1 - 3T + 3T - T o35 : ZZ[T] i36 : gbTrace = 3 o36 = 3 i37 : time gens gb J; -- registering gb 22 at 0x7f9cfd0fe380 -- [gb]{3}(3,3)mmm{4}(2,2)mm{5}(3,3)mmm{6}(3,7)mmm{7}(3,8)mm -- removing polynomial ring 2 at 0x7f9cfd2da100 -- removing polynomial ring 3 at 0x7f9cfded8d00 --removing gb 0 at 0x7f9cfd39aa80 --removing gb 1 at 0x7f9cfd39ae00 -- removing polynomial ring 4 at 0x7f9cfd2da200 -- removing polynomial ring 5 at 0x7f9cfded8e00 m{8}(3,9)mmm{9}(3,9)m -- mm{10}(2,8)mm{11}(1,5)m{12}(1,3)m{13}(1,3)m{14}(1,3)m{15}(1,3)m --removing gb 2 at 0x7f9cfdde3e00 --removing gb 3 at 0x7f9cfd0fea80 --removing gb 4 at 0x7f9cfdde3540 --removing gb 5 at 0x7f9cfdde38c0 --removing gb 6 at 0x7f9cfdde3000 -- removing polynomial ring 6 at 0x7f9cfd2daf00 {16}(1,3)m -- {17}(1,3)m{18}(1,3)m{19}(1,3)m{20}(1,3)m{21}(1,3)m -- removing polynomial ring 7 at 0x7f9cfd2da000 -- removing polynomial ring 8 at 0x7f9cfded8c00 {22}(1,3)m{23}(1,3)m{24}(1,3)m -- {25}(1,3)m{26}(1,3)m{27}(1,3)m{28}(0,2)number of (nonminimal) gb elements = 39 -- number of monomials = 1051 -- #reduction steps = 284 -- #spairs done = 53 -- ncalls = 46 -- nloop = 54 -- nsaved = 0 -- -- used 0.302344 seconds 1 39 o37 : Matrix S <--- S i38 : selectInSubring(1, gens gb J) o38 = | 243873059890414515367459726418219472801881021280016638460434780718278 ----------------------------------------------------------------------- 1440000c27+680473430096987971146702628170541552971659410296860500064419 ----------------------------------------------------------------------- 8659321541120000c26d+11597364228740720976813725657514406124738091415081 ----------------------------------------------------------------------- 708788717896930979185664000c25d2+ ----------------------------------------------------------------------- 23593854948820747270541718485240316584065850799950623007351199460826287 ----------------------------------------------------------------------- 616000c24d3+32743644647016475216170069528641722426835477775253543592889 ----------------------------------------------------------------------- 918133322668441600c23d4+ ----------------------------------------------------------------------- 33158095190154155829221377356630179888238312515669425233096064578894340 ----------------------------------------------------------------------- 119040c22d5+15028595287222793638671643791164484488028666170821129484464 ----------------------------------------------------------------------- 0913474618113410688c21d6- ----------------------------------------------------------------------- 21512804869970961505730654467974378533992989635620845013046053149115691 ----------------------------------------------------------------------- 376640c20d7+28431980514156020200015862091261060783608362711779183901930 ----------------------------------------------------------------------- 9806045574261823520c19d8+ ----------------------------------------------------------------------- 16650730381353978595863327607516214447500495532056234936672555655369716 ----------------------------------------------------------------------- 831120c18d9+87968827795245198558720802391460287994055816649663973831801 ----------------------------------------------------------------------- 513286446550410048c17d10+ ----------------------------------------------------------------------- 22959959692503790373650797595979928852024328895071866607353571279986753 ----------------------------------------------------------------------- 6198896c16d11-186238464624475812059215969192404399881338554287087040105 ----------------------------------------------------------------------- 246208136582238056824c15d12+ ----------------------------------------------------------------------- 24548920676014640650981729325587232424855337187862713658240676351249839 ----------------------------------------------------------------------- 5829972c14d13-141132193544414336210863578442532364572117789942199579134 ----------------------------------------------------------------------- 726132062555878780658c13d14+ ----------------------------------------------------------------------- 80520443561444628031196207946045746850357450872252370351009550385550378 ----------------------------------------------------------------------- 086681c12d15-2278233247601720373545720827573468959013067281967477143592 ----------------------------------------------------------------------- 7358914316617821352c11d16+ ----------------------------------------------------------------------- 12315466375513693509230290342016673656670249832613715660807956483127262 ----------------------------------------------------------------------- 733880c10d17+4719437472003410614922275085496115471668279624745540404962 ----------------------------------------------------------------------- 433899525703062436c9d18+ ----------------------------------------------------------------------- 74497958923598706042158991668350708405967894269886723021144934645580613 ----------------------------------------------------------------------- 74608c8d19+334728676747320315154276056749403769663819349640069418486913 ----------------------------------------------------------------------- 9937175077192912c7d20+2106534096122290217776886174919161239203477897917 ----------------------------------------------------------------------- 158167686354319461999466336c6d21+ ----------------------------------------------------------------------- 46016969029446996772206730674250118343258593659063037978247047403425711 ----------------------------------------------------------------------- 5680c5d22+1542848777781200461682672598621194432349177258865304071672664 ----------------------------------------------------------------------- 34720712424352c4d23+209766195470884862406436228545283251810588018452908 ----------------------------------------------------------------------- 50471734381682038429280c3d24+ ----------------------------------------------------------------------- 70221637578010351138072776173836055657918796706303534104710104349853120 ----------------------------------------------------------------------- 0c2d25+9531871659255442565995582182062188830769684462513069209840585989 ----------------------------------------------------------------------- 184000cd26+127037175535596202927970476797708894400916603090057099058781 ----------------------------------------------------------------------- 42251744000d27 | 1 1 o38 : Matrix S <--- S

## Caveat

This function may behave unpredictably in presence of variables of degree zero.

## Ways to use poincare :

• "poincare(BettiTally)" -- see BettiTally -- the class of all Betti tallies
• "poincare(Ideal)"
• "poincare(Module)"
• "poincare(MonomialIdeal)"
• "poincare(Ring)"
• poincare(ChainComplex) -- assemble degrees of a chain complex into a polynomial

## For the programmer

The object poincare is .