Opened 9 years ago

Closed 17 months ago

#11855 closed defect (worksforme)

Hilbert series, Hilbert functions of a given ideal

Reported by: dangtuanhiep Owned by: malb
Priority: trivial Milestone: sage-duplicate/invalid/wontfix
Component: commutative algebra Keywords: sd34
Cc: burcin, SimonKing Merged in:
Authors: Hiep Dang, Burcin Erocal Reviewers: Simon King
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description

This patch adds the methods Hilbert series and Hilbert functions to multivariate polynomial ideals.

Attachments (1)

trac_11855-hilbert_function.patch (2.2 KB) - added by dangtuanhiep 9 years ago.

Download all attachments as: .zip

Change History (15)

comment:1 follow-up: Changed 9 years ago by malb

Huh, it's already there.

----------------------------------------------------------------------
| Sage Version 4.7.1, Release Date: 2011-08-11                       |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
sage: K.<w> = GF(27)
sage: P.<x, y> = PolynomialRing(K, 2, order='lex')
sage: I = Ideal([ x^8 + y + 2, y^6 + x*y^5 + x^2 ])
sage: I.hi
I.hilbert_polynomial  I.hilbert_series  

Changed 9 years ago by dangtuanhiep

comment:2 in reply to: ↑ 1 Changed 9 years ago by burcin

  • Type changed from enhancement to defect

Replying to malb:

Huh, it's already there.

----------------------------------------------------------------------
| Sage Version 4.7.1, Release Date: 2011-08-11                       |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
sage: K.<w> = GF(27)
sage: P.<x, y> = PolynomialRing(K, 2, order='lex')
sage: I = Ideal([ x^8 + y + 2, y^6 + x*y^5 + x^2 ])
sage: I.hi
I.hilbert_polynomial  I.hilbert_series  

The return value of the existing function is a fraction field element, not a power series.

sage: I.hilbert_series()
(-t - 1)/(t - 1)
sage: type(I.hilbert_series())
<type 'sage.rings.fraction_field_element.FractionFieldElement'>

Singular cannot represent power series in its interpreter, but we can. :)

comment:3 Changed 9 years ago by dangtuanhiep

  • Authors changed from Hiep Dang to Hiep Dang, Burcin Erocal

comment:4 Changed 9 years ago by dangtuanhiep

  • Cc SimonKing added

comment:5 follow-up: Changed 9 years ago by malb

The patch adds a second hilbert_series function instead of the changing the one that exists already. Also, the old one has some advantages over this new one: @require field, more extensive docs, test whether the ideal is homogeneous.

comment:6 in reply to: ↑ 5 Changed 9 years ago by SimonKing

  • Reviewers set to Simon King

Replying to malb:

The patch adds a second hilbert_series function instead of the changing the one that exists already

Yes. Clearly it is a bad idea to implement another hilbert_series method from scratch. Obviously, if one wants hilber_series to return a power series, then one should modify the existing hilbert_serie method.

Moreover, I think we don't want it to return a power series. Isn't a power series in Sage an object with a finite precision? Hence, while a quotient (i.e., fraction field element) of two polynomials generates all (infinitely many) terms of the Hilbert series, a power series can only provide finitely many terms, isn't it?

So, I am against that change. I could only imagine that one has an optional parameter "as_power_series" (default False). Then, I.hilber_series() would return the full Hilbert series (namely as a quotient of two polynomials), while I.hilbert_series(as_power_series=True) would return a (truncated) power series.

comment:7 Changed 9 years ago by SimonKing

Sorry for the misprints in my previous post. "hilber_series" and "hilbert_serie" should have been "hilbert_series"...

comment:8 Changed 7 years ago by jdemeyer

  • Milestone changed from sage-5.11 to sage-5.12

comment:9 Changed 6 years ago by vbraun_spam

  • Milestone changed from sage-6.1 to sage-6.2

comment:10 Changed 6 years ago by vbraun_spam

  • Milestone changed from sage-6.2 to sage-6.3

comment:11 Changed 6 years ago by vbraun_spam

  • Milestone changed from sage-6.3 to sage-6.4

comment:12 Changed 2 years ago by chapoton

  • Milestone changed from sage-6.4 to sage-duplicate/invalid/wontfix
  • Status changed from new to needs_review

Let us close this old one. Conversion is easy:

sage: t = polygen(QQ,'t')
sage: QQ[['t']](1/(1-t))
1 + t + t^2 + t^3 + t^4 + t^5 + t^6 + t^7 + t^8 + t^9 + t^10 + t^11 + t^12 + t^13 + t^14 + t^15 + t^16 + t^17 + t^18 + t^19 + O(t^20)

comment:13 Changed 23 months ago by mmezzarobba

  • Status changed from needs_review to positive_review

comment:14 Changed 17 months ago by embray

  • Resolution set to worksforme
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.