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_form
— Methodnormal_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
AlgebraicSolving.normal_form
— Methodnormal_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