Data Types

Introduction

AlgebraicSolving handles ideals in multivariate polynomial rings over a prime field of characteristic $0$ or $p$ where $p$ is a prime number $<2^{31}$.

Polynomial Rings

We use Nemo's multivariate polynomial ring structures:

julia> using AlgebraicSolving
julia> R, (x,y,z) = polynomial_ring(QQ, ["x", "y", "z"], ordering=:degrevlex)(Multivariate polynomial ring in 3 variables over QQ, QQMPolyRingElem[x, y, z])

The above example defines a multivariate polynomial ring in three variables x, y, and z over the rationals using the dgree reverse lexicographical ordering for printing polynomials in the following. One can also define polynomial rings over finite fields:

julia> using AlgebraicSolving
julia> R, (x,y,z) = polynomial_ring(GF(101), ["x", "y", "z"], ordering=:degrevlex)(Multivariate polynomial ring in 3 variables over GF(101), fpMPolyRingElem[x, y, z])

Ideals

Ideals can be constructed by giving an array of generators. Ideals cache varies data structures connected to ideals in order to make computational algebra more effective:

julia> using AlgebraicSolving
julia> R, (x,y,z) = polynomial_ring(QQ, ["x", "y", "z"], ordering=:degrevlex)(Multivariate polynomial ring in 3 variables over QQ, QQMPolyRingElem[x, y, z])
julia> I = Ideal([x+y+1, y*z^2-13*y^2])QQMPolyRingElem[x + y + 1, y*z^2 - 13*y^2]