Normal forms

Introduction

AlgebraicSolving allows to compute normal forms of a polynomial resp. a finite array of polynomials w.r.t. some given ideal over a finite field of characteristic smaller $2^{31}$ w.r.t. the degree reverse lexicographical monomial order.

Note: It therefore might first compute a Gröbner bases for the ideal.

Functionality

AlgebraicSolving.normal_formMethod
normal_form(
    f::T,
    I::Ideal{T};
    nr_thrds::Int=1,
    info_level::Int=0
    ) where T <: MPolyRingElem

Compute the normal forms of the elements of F w.r.t. a degree reverse lexicographical Gröbner basis of I.

Note: If I has not already cached a degree reverse lexicographical Gröbner basis, then this one is first computed.

Arguments

  • F::Vector{T} where T <: MPolyRingElem: elements to be reduced.
  • I::Ideal{T} where T <: MPolyRingElem: ideal data to reduce with.
  • nr_thrds::Int=1: number of threads for parallel linear algebra.
  • info_level::Int=0: info level printout: off (0, default), summary (1), detailed (2).

Examples

julia> using AlgebraicSolving

julia> R, (x,y) = polynomial_ring(GF(101),["x","y"])
(Multivariate polynomial ring in 2 variables over GF(101), FqMPolyRingElem[x, y])

julia> I = Ideal([y*x^3+12-y, x+y])
FqMPolyRingElem[x^3*y + 100*y + 12, x + y]

julia> f = 2*x^2+7*x*y
2*x^2 + 7*x*y

julia> normal_form(f, I)
96*y^2
source
AlgebraicSolving.normal_formMethod
normal_form(
    F::Vector{T},
    I::Ideal{T};
    nr_thrds::Int=1,
    info_level::Int=0
    ) where T <: MPolyRingElem

Compute the normal forms of the elements of F w.r.t. a degree reverse lexicographical Gröbner basis of I.

Note: If I has not already cached a degree reverse lexicographical Gröbner basis, then this one is first computed.

Arguments

  • F::Vector{T} where T <: MPolyRingElem: elements to be reduced.
  • I::Ideal{T} where T <: MPolyRingElem: ideal data to reduce with.
  • nr_thrds::Int=1: number of threads for parallel linear algebra.
  • info_level::Int=0: info level printout: off (0, default), summary (1), detailed (2).

Examples

julia> using AlgebraicSolving

julia> R, (x,y) = polynomial_ring(GF(101),["x","y"])
(Multivariate polynomial ring in 2 variables over GF(101), FqMPolyRingElem[x, y])

julia> I = Ideal([y*x^3+12-y, x+y])
FqMPolyRingElem[x^3*y + 100*y + 12, x + y]

julia> F = [2*x^2+7*x*y, x+y]
2-element Vector{FqMPolyRingElem}:
 2*x^2 + 7*x*y
 x + y

julia> normal_form(F,I)
2-element Vector{FqMPolyRingElem}:
 96*y^2
 0
source