odow / Groebner.jl

Groebner bases in pure Julia

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Groebner.jl

Runtests Dev

The package provides Groebner bases computation interface in pure Julia with the performance comparable to Singular.

For documentation and more please check out https://sumiya11.github.io/Groebner.jl

How to use Groebner.jl?

Our package works with polynomials from AbstractAlgebra.jl, DynamicPolynomials.jl, and Nemo.jl. We will demonstrate the usage on a simple example. Lets first create a ring of polynomials in 3 variables over rationals

julia> using AbstractAlgebra
julia> R, (x1, x2, x3) = PolynomialRing(QQ, ["x1", "x2", "x3"], ordering=:degrevlex);

Then we can define a simple cyclic polynomial system

julia> polys = [
  x1 + x2 + x3,
  x1*x2 + x1*x3 + x2*x3,
  x1*x2*x3 - 1
];

And compute the Groebner basis passing the system to groebner

julia> using Groebner
julia> G = groebner(polys)
3-element Vector{AbstractAlgebra.Generic.MPoly{Rational{BigInt}}}:
 x1 + x2 + x3
 x2^2 + x2*x3 + x3^2
 x3^3 - 1

Performance

We compare the runtime of our implementation against the ones from Singular and Maple computer algebra systems. The table below lists measured runtimes of Groebner basis routine for several standard benchmark systems in seconds

System Groebner.jl Singular Maple
cyclic-7 0.1s 1.4s 0.56s
cyclic-8 2.4s 40s 2.43s
katsura-9 0.10s 1.13s 1.43s
katsura-10 0.69s 9.92s 5.73s
eco-10 0.17s 3.22s 0.75s
eco-11 1.13s 33.33s 3.54s
noon-7 0.20s 0.40s 1.19s
noon-8 1.88s 3.58s 8.05s

The bases are computed in degrevlex monomial ordering over finite field of characteristic $2^{31}-1$ with all operations single-threaded.

We emphasize that Groebner.jl is a specialized library while Singular and Maple are extensive general purpose computer algebra systems.

If you discover a system where our package shows bad performance, you are very welcome to submit an issue!

Acknowledgement

We would like to acknowledge Jérémy Berthomieu, Christian Eder and Mohab Safey El Din as this Library is inspired by their work "msolve: A Library for Solving Polynomial Systems". We are also grateful to Max-Planck-Institut für Informatik for assistance in producing benchmarks.

Special thanks goes to Vladimir Kuznetsov for providing the sources of his F4 implementation.

About

Groebner bases in pure Julia

License:MIT License


Languages

Language:Julia 100.0%