Design #254
How to return a Hilbert Series in CoCoALib
Description
Right now Hilbert series do not exist in CoCoALib.
In CoCoA-5 they are built in the package hp.cpkg5
.
Now we need to clean it up at fix a common interface for the Hilbert Series in TmpHilbert
and in ExternalLib-Normaliz
.
We should make something like the factorization class and make a related from function for sending this class to CoCoA-5.
Related issues
History
#1 Updated by Anna Maria Bigatti over 11 years ago
- Tracker changed from Feature to Design
- Category set to New Function
- Target version set to CoCoALib-0.9953
#2 Updated by Christof Soeger about 11 years ago
Any news on it?
In libnormaliz it is a vector for the coefficients of the numerator and a map for the exponents of (1-t^i)^e. However I do not suggest this as type in CoCoALib.
I think the type should offer the possibility to easily- access the data, for example to check if the h-vector is palindromic,
- do arithmetic operations, like adding two series (as rational functions).
In connection to this we also need a type for Hilbert (quasi-)polynomials
I suggest to have a unique ring where all these polynomials could live in. For me a univariate polynomial ring over QQ is enough, but other applications could profit from such a multivariate ring.
Do you have any support for quasi-polynomials?
#3 Updated by John Abbott about 11 years ago
- Status changed from New to In Progress
RECORD
with two fields numer
and denom
where
numer
is a polynomial,- and
denom
is aRECORD
with the same structure as would be returned by a call tofactor
(i.e. fieldsfactors
,multiplicities
andRemainingFactor
).
There is also the matter to which ring do these polynomials belong?
#4 Updated by Anna Maria Bigatti almost 11 years ago
- % Done changed from 0 to 20
Design:
new class HilbertSeries: member fields
myNum RingElem and myDenFactors factorization.
Constructors:
(RingElem num, factorization<RingElem> DenFactors) -- general
(vector<BigInt> DenseRepr, vector<long> DenExponents) -- for univariate HS
e.g. DenExps = [1,3,2,2,3] --> (1-t) * (1-t^3)^2 * (1-t^2)^2
Guarantees:
HilbertSeriesPolyRing(long (or MachineInt?) n): ring for all num and den factors.
No guarantees on num or den (irreducibility, order of factors, ...)
Operations:
constructors (copy ctor)
assignment
operator<<
operator== (H1==H2 iff they are the same in FrFld(P))
operator!=
num(HS) (same as internally stored: no guarantees on simplification)
DenFactors(HS)
wish list: convertion into rational function (needs global FractionField)
#5 Updated by Christof Soeger almost 11 years ago
I spoke with W.Bruns about a name for the ring. One suggestion is PolynomialInvarianceRing (or a shortened form) instead of HilbertSeriesPolyRing. We think it is a better description and allows a more flexible use.
In fact even in the Hilbert series and the Hilbert polynomial the meanings of the variables are different. For the Hilbert polynomial the variable is a degree in the monoid, algebra, ... and for the Hilbert series it is a auxiliary variable to form the series. Comparison between these to objects as elements in one polynomial ring is not useful.
But we don't think there should be two different rings.
#6 Updated by Anna Maria Bigatti almost 11 years ago
Christof Soeger wrote:
I spoke with W.Bruns about a name for the ring. One suggestion is PolynomialInvarianceRing (or a shortened form) instead of HilbertSeriesPolyRing. We think it is a better description and allows a more flexible use.
... what about RingQQt(n)
? That is pretty self-explanatory and flexible ;-)
#7 Updated by Christof Soeger almost 11 years ago
Anna Maria Bigatti wrote:
... what about
RingQQt(n)
? That is pretty self-explanatory and flexible ;-)
Yes that is flexible :) A good possibility.
In CoCoA 5 we will also have this ring(s)?
#8 Updated by John Abbott almost 11 years ago
- % Done changed from 20 to 50
New name implemented & checked-in.
#9 Updated by Anna Maria Bigatti almost 11 years ago
- Assignee set to John Abbott
- % Done changed from 50 to 80
Christof Soeger wrote:
Anna Maria Bigatti wrote:
... what about
RingQQt(n)
? That is pretty self-explanatory and flexible ;-)In CoCoA 5 we will also have this ring(s)?
Yes, checked in
#10 Updated by Anna Maria Bigatti almost 11 years ago
- Subject changed from How to return a Hilbert Series to How to return a Hilbert Series in CoCoALib
#11 Updated by Anna Maria Bigatti over 10 years ago
- Target version changed from CoCoALib-0.9953 to CoCoALib-0.99532
#12 Updated by Christof Soeger about 10 years ago
- % Done changed from 80 to 90
Anna Maria Bigatti wrote:
Constructors:
(RingElem num, factorization<RingElem> DenFactors) -- general
(vector<BigInt> DenseRepr, vector<long> DenExponents) -- for univariate HS
e.g. DenExps = [1,3,2,2,3] --> (1-t) * (1-t^3)^2 * (1-t^2)^2
I implemented the constructor for univariate HS. It is used in the new function Normaliz::HilbertSeries(cone c).
#13 Updated by Anna Maria Bigatti about 10 years ago
- Status changed from In Progress to Resolved
Now all essentially set.
One thing to decide: factorization of denom is now arbitrary:
Normaliz uses a compact form (i.e. (1-t)^2*(1-t^3)^4)
CoCoA uses the long form with all multiplicities == 1.
Should we set for a specific form?
Should we offer conversion from compact to/from long form?
Which functions should be available on class HPSeries?
Surely a simplify, to get HVector and dimension (with standard grading)
#14 Updated by Anna Maria Bigatti about 10 years ago
- Target version changed from CoCoALib-0.99532 to CoCoALib-0.99533 Easter14
#15 Updated by John Abbott about 10 years ago
I'm not an expert in the field, and in my ignorance find the "compact" form more satisfactory. I could even envisage a mem fn for factorization
which makes the factors compact (i.e. gathers together equal factors and sums their multiplicities).
It could be nice if the "compact" form had the factors in increasing order of degree (first 1-t
then 1-t^2
and so on).
#16 Updated by Anna Maria Bigatti about 10 years ago
- Estimated time set to 6.00 h
#17 Updated by Anna Maria Bigatti about 10 years ago
- Status changed from Resolved to Closed
- % Done changed from 90 to 100
(for now) we have decided that factorization of denom is arbitrary.
There will be functions to clean up a factorization.