Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

multi_hilbert_series: does not detect infinite dimensional case #2674

Closed
JohnAAbbott opened this issue Aug 14, 2023 · 5 comments
Closed

multi_hilbert_series: does not detect infinite dimensional case #2674

JohnAAbbott opened this issue Aug 14, 2023 · 5 comments
Labels
bug Something isn't working

Comments

@JohnAAbbott
Copy link
Contributor

Describe the bug
The normal Hilbert function (and Hilbert series) are not defined if there are homogeneous components of infinite dimension, and this can occur with a mixture of positive and negative weights. Currently a meaningless result is produced.

To Reproduce
Steps to reproduce the behaviour, please provide a code snippet that triggers the bug.

using Oscar
P,(x,y) = graded_polynomial_ring(QQ, ["x","y"], [1, -1]);
I = ideal(P,[]); # zero ideal
PmodI,_ = quo(P,I);
multi_hilbert_series(PmodI)

Expected behavior
An error should be signalled, e.g. there are homogeneous components of infinite dimension

System (please complete the following information):

julia> Oscar.versioninfo(full=true)
OSCAR version 0.13.0-DEV
...

Additional context
Claus Fieker pointed out that the situation could be complicated: e.g. if in the example above use the ideal I = ideal(y) then P/I is canonically isomorphic to QQ[x] which does have a well-defined Hilbert series. Using the actual implementation we obtain a result with a common factor between numerator and denominator: numer 1-t^(-1) and denom (1-t^(-1))*(1-t).

Probably unrelated: should hilbert_series and multi_hilbert_series give errors if the chosen output ring does not have characteristic zero?

@JohnAAbbott JohnAAbbott added the bug Something isn't working label Aug 14, 2023
@JohnAAbbott
Copy link
Contributor Author

The solution seems to require checking whether there is a positive integer linear combination of the weights which gives a zero grading. Claus Fieker reports that this should be possible in Oscar (e.g. using some variant of solve_mixed or similar).

@wdecker
Copy link
Collaborator

wdecker commented Aug 14, 2023

@JohnAAbbott, @HechtiDerLachs You just forgot to require is_positively_graded. I will add this to your code, where needed, and discuss the new functionality for modules in the docu. Just give me a day or two.

@JohnAAbbott
Copy link
Contributor Author

I have put a temporary fix inside the function _hilbert_series_denominator (in src/Rings/hilbert.jl). NB This low level function cannot use is_positively_graded because the ring is not passed as a parameter.

@JohnAAbbott
Copy link
Contributor Author

After talking to @HechtiDerLachs we think that it makes most sense if the result of is_positively_graded is stored inside the graded_polynomial_ring so that it is not computed more than once -- perhaps this is already done?

If every weight is non-negative then the Hilbert series of an ideal has numerator and denominator which are "normal" polynomials (rather than laurent polynomials). This may not hold for modules if there are negative shifts. Also a positive grading can contain negative weights, so laurent polynomials may be needed.

How best to organize the hilbert_series functions so that it is easy for the caller?

@fingolfin
Copy link
Member

This has been fixed by PR #2698 plus some other PRs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants