Skip to content

Groebner basis improvements #2699

@fredrik-johansson

Description

@fredrik-johansson
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions