-
Implement a multimodular algorithm for Z / Q (can use the existing fmpz_mod_mpoly code for this, but would be more efficient to use an nmod_mod_mpoly version, which itself should be a straightforward port).
-
Have a function for fmpq_mpoly (even if this is just a wrapper around fmpz_mpoly code).
-
Implement FGLM for lex.
-
Make the pair selection strategy configurable with an option flag, implement some alternative methods from the literature, and profile these on examples we are interested in.
-
We have the ability to abort, and could use it for adaptive algorithms. For example, one could restart with a different pair selection strategy if the ideal seemingly starts to blow up too fast. Over Z, at least if the input looks "simple", try a direct computation with small limits before switching to the multimodular algorithm.
-
Work with packed exponent vectors (currently all exponents are converted to ulong, which is wasteful since they are going to fit in 8 bits 99.99% of the time).
-
The Buchberger code ought to be be ported to the generic rings eventually, but there's currently too much missing functionality (gr_mpoly doesn't even have division code yet).
-
Add an interface that lets us optionally call msolve.
Of course we could also consider implementing F4 and F5 and whatever else exists in the recent literature, but that would really require some developer who's interested in maintaining and optimizing this kind of code long-term.
Implement a multimodular algorithm for Z / Q (can use the existing
fmpz_mod_mpolycode for this, but would be more efficient to use annmod_mod_mpolyversion, which itself should be a straightforward port).Have a function for
fmpq_mpoly(even if this is just a wrapper aroundfmpz_mpolycode).Implement FGLM for lex.
Make the pair selection strategy configurable with an option flag, implement some alternative methods from the literature, and profile these on examples we are interested in.
We have the ability to abort, and could use it for adaptive algorithms. For example, one could restart with a different pair selection strategy if the ideal seemingly starts to blow up too fast. Over Z, at least if the input looks "simple", try a direct computation with small limits before switching to the multimodular algorithm.
Work with packed exponent vectors (currently all exponents are converted to
ulong, which is wasteful since they are going to fit in 8 bits 99.99% of the time).The Buchberger code ought to be be ported to the generic rings eventually, but there's currently too much missing functionality (
gr_mpolydoesn't even have division code yet).Add an interface that lets us optionally call
msolve.Of course we could also consider implementing F4 and F5 and whatever else exists in the recent literature, but that would really require some developer who's interested in maintaining and optimizing this kind of code long-term.