Polynomials ring

Multivariate Polynomials ring

Operations over polynomial rings.

class simula.polyring.polyring.PolynomialRing(domain, symbols=None, order=DegreeLexicographicOrder(), **kwargs)

Multivariate polynomial ring.

INPUT:

Parameters
  • domain – a domain (eg. QQ, RR, CC, ZZ, GF(p))

  • symbols – a sequence of symbols

  • order – (default ‘deglex’) a monomial ordering e.g. ‘lex’, ‘deglex’, ‘degrevlex’

  • kwargs

EXAMPLES:

simula : R = PolynomialRing(QQ, "x, y, z", order="lex")
simula : x, y ,z = R.gens

These two lines are equivalent to the following code:

simula : R.<x, y ,z> = PolynomialRing(QQ, "x, y, z", order="lex")

By default the monomial ordering is "deglex", if don't need to change it, we can simplify again the notation.

simula : R.<x, y ,z> = QQ[]
simula : p1 = x^3*y-x*y^2-x-z; p1
x^3*y - x*y^2 - x - z
simula : p1.lcm(x-y-y*z)
x^4*y - x^3*y^2*z - x^3*y^2 - x^2*y^2 - x^2 + x*y^3*z + x*y^3 + x*y*z + x*y - x*z + y*z^2 + y*z
simula : R.make_monic(6x^4-3x-1)
x^4 - 1/2x - 1/6
simula : I = R.ideal([x*y^2-y-z, x^2*z-y*x]); I
ideal generated by [x*y^2 - y - z, x^2*z - x*y] of Polynomial ring in x, y, z over QQ with deglex order
add(pol1, pol2)

Returns pol1 + pol2 in self.

change_ring(domain=None, symbols=None, order=None)

Returns a new polynomial ring with the new given domain domain.

characteristic()

Returns the characteristic self.

cyclotomic_polynomial(n)

Returns the n-th cyclotomic polynomial.

EXAMPLES:

simula : R.<x> = GF(5)[]
simula : R.cyclotomic_polynomial(3)
x^2 + x + 1
simula : R.cyclotomic_polynomial(6)
x^2 + 4x + 1
div(pol1, pol2)

Returns the quotient and the remainder of the division of pol1 by pol2 in self.

factor(pol)

Returns the factorisation of the polynomial pol.

gcd(pol1, pol2)

Returns the gcd of pol1 and pol2.

gcdex(pol1, pol2)

Returns the extended gcd of pol1 and pol2.

ideal(F)

Returns the ideal in self generated by F.

is_exact()

Tests if self is an exact domain.

is_field()

Tests if self is a field.

is_irreducible(pol)

Tests if pol is an irreducible polynomial.

lcm(pol1, pol2)

Returns the lcm of pol1 and pol2.

make_monic(pol)

Makes monic the polynomial pol.

monic(pol)

Makes monic the polynomial pol.

mul(pol1, pol2)

Returns pol1 * pol2 in self.

objgen()

Returns self and its generators.

EXAMPLES:

simula : ring = PolynomialRing(QQ, "x, y, z", order="lex"); ring
simula : R, gens = ring.objgen()
simula : R
Multivariate Polynomial Ring in x, y, z over QQ with lex order
simula : gens
(x, y, z)
pow(pol, n)

Returns pol1^n in self.

primitive_polynomials(deg)

Returns the primitive polynomials of degree deg if self is a finite polynomial ring.

EXAMPLES:

simula : R.<x> = GF(5)[]
simula : R.primitive_polynomials(3)
{x^2 + x + 2, x^2 + 4x + 2, x^2 + 3x + 3, x^2 + 2x + 3}
quo(pol1, pol2)

Returns the quotient of the division of pol1 by pol2 in self.

random_irreducible(n)

Returns a random irreducible polynomial of degree n.

rem(pol1, pol2)

Returns the remainder of the division of pol1 by pol2 in self.

roots(f)

Returns the roots of the polynomial n.

sub(pol1, pol2)

Returns pol1 - pol2 in self.

univariate_ring(x)

Returns a univariate ring in x which has the same domain as self.

Groeber Bases

Operations over Groebner Bases.

class simula.polyring.groebner.Ideal(F, symbols=None, domain=None, order=None, *, ring=None)

Ideal generated by a set of polynomials F.

Parameters
  • F – a list of polynomials

  • symbols – (optional) list of variables

  • domain – (optional) a domain e.g. QQ, RR, ZZ

  • order – (optional) a monomial ordering e.g. ‘lex’, ‘deglex’, ‘degrevlex’

  • ring – (optional) a polynomial ring.

EXEMPLES:

simula : R.<x, y, z> = QQ[]
simula : R
Multivariate Polynomial Ring in x, y, z over QQ with deglex order
simula : I = ideal([x^2*y-z, x*y-1]); I
ideal generated by [x^2*y - z, x*y - 1] of Polynomial ring in x, y, z over QQ with deglex order
simula : J = (x^2*y-z, x*y-1) * R; J
ideal generated by [x^2*y
simula : I == J
True
simula : J.groebner_basis()
[y*z - 1, x - z]
simula : J.buchberger()
[x^2*y - z, x*y - 1, x - z, y*z - 1]
simula : J.homogenize('h')
ideal generated by [x^2*y - z*h^2, x*y - h^2] of Polynomial ring in x, y, z, h over QQ with deglex order
simula : J.reduce(x-y)
-y + z
simula : J.reduce(x^2*y-z + 2x*y-2)
0
basis()

Returns the basis of self.

basis_as_expr()

Returns the basis of self as an expression.

basis_is_groebner()

Tests if the given basis is a groebner basis of self.

buchberger()

Returns a groebner basis of self using a toy Buchberger algorithm.

change_ring(new_ring)

Returns a new ideal with the new polynomial ring.

groebner_basis()

Returns a reduced groebner basis of self.

groebner_basis_f5()

Returns a reduced groebner basis of self using the F5 algorithm.

homogenize(var=None)

Returns the ideal generated by the homogeneous polynomials of the basis of self.

is_homogeneous()

Tests if the polynomials in the basis of self are homogeneous.

is_in_radical_ideal(f)

Tests if f is in radical of self.

leading_ideal()

Returns the leading ideal of self.

normal_form(f, greobner=False)

Returns the normal form of f with respect to the basis of self.

reduce(f)

Reduces f with respect to the basis of self.

weak_normal_form(f, greobner=False)

Returns the weak normal form of f with respect to the basis of self.

simula.polyring.groebner.LC(f, symbols=None, **kwargs)

Returns the leading coefficient of f.

simula.polyring.groebner.LM(f, symbols=None, **kwargs)

Returns the leading monomial of f.

simula.polyring.groebner.LT(f, symbols=None, **kwargs)

Returns the leading term of f.

simula.polyring.groebner.groebner_basis(G, symbols=None, domain=None, order=None)

Returns a reduced groebner basis of the ideal generated by ``G`.

simula.polyring.groebner.groebner_f5(G, symbols=None, domain=None, order=None)

Returns a reduce groebner basis using the F5 algorithm.

simula.polyring.groebner.ideal

alias of simula.polyring.groebner.Ideal

simula.polyring.groebner.leading_coefficient(f, symbols=None, **kwargs)

Returns the leading coefficient of f.

simula.polyring.groebner.leading_ideal(I)

Returns the leading ideal of I.

Parameters

I (simula.polyring.groebner.Ideal) –

simula.polyring.groebner.leading_monom(f, symbols=None, **kwargs)

Returns the leading monomial of f.

simula.polyring.groebner.leading_term(f, symbols=None, **kwargs)

Returns the leading term of f.

simula.polyring.groebner.normal_form(f, G, symbols=None, domain=Rational Numbers, order=DegreeLexicographicOrder())

Returns the normal form of f in G.

simula.polyring.groebner.spoly(f, g, symbols=None, domain=Rational Numbers, order=DegreeLexicographicOrder())

Returns the S-polynomial of f and g .

simula.polyring.groebner.weak_normal_form(f, G, symbols=None, domain=Rational Numbers, order=DegreeLexicographicOrder())

Returns the weak normal form of f in G