Multivariate polynomials
This file defines polynomial rings over a base ring (or even semiring),
with variables from a general type σ
(which could be infinite).
Important definitions
Let R
be a commutative ring (or a semiring) and let σ
be an arbitrary
type. This file creates the type mv_polynomial σ R
, which mathematicians
might denote $R[X_i : i \in σ]$. It is the type of multivariate
(a.k.a. multivariable) polynomials, with variables
corresponding to the terms in σ
, and coefficients in R
.
Notation
In the definitions below, we use the following notation:
σ : Type*
(indexing the variables)R : Type*
[comm_semiring R]
(the coefficients)s : σ →₀ ℕ
, a function fromσ
toℕ
which is zero away from a finite set. This will give rise to a monomial inmv_polynomial σ R
which mathematicians might callX^s
a : R
i : σ
, with corresponding monomialX i
, often denotedX_i
by mathematiciansp : mv_polynomial σ R
Definitions
mv_polynomial σ R
: the type of polynomials with variables of typeσ
and coefficients in the commutative semiringR
monomial s a
: the monomial which mathematically would be denoteda * X^s
C a
: the constant polynomial with valuea
X i
: the degree one monomial corresponding to i; mathematically this might be denotedXᵢ
.coeff s p
: the coefficient ofs
inp
.eval₂ (f : R → S₁) (g : σ → S₁) p
: given a semiring homomorphism fromR
to another semiringS₁
, and a mapσ → S₁
, evaluatesp
at this valuation, returning a term of typeS₁
. Note thateval₂
can be made usingeval
andmap
(see below), and it has been suggested that sticking toeval
andmap
might make the code less brittle.eval (g : σ → R) p
: given a mapσ → R
, evaluatesp
at this valuation, returning a term of typeR
map (f : R → S₁) p
: returns the multivariate polynomial obtained fromp
by the change of coefficient semiring corresponding tof
Implementation notes
Recall that if Y
has a zero, then X →₀ Y
is the type of functions from X
to Y
with finite
support, i.e. such that only finitely many elements of X
get sent to non-zero terms in Y
.
The definition of mv_polynomial σ R
is (σ →₀ ℕ) →₀ R
; here σ →₀ ℕ
denotes the space of all
monomials in the variables, and the function to R
sends a monomial to its coefficient in
the polynomial being represented.
Tags
polynomial, multivariate polynomial, multivariable polynomial
S₁ S₂ S₃
Multivariate polynomial, where σ
is the index set of the variables and
R
is the coefficient ring
Equations
- mv_polynomial σ R = add_monoid_algebra R (σ →₀ ℕ)
Equations
- mv_polynomial.inhabited = {default := 0}
Equations
the coercion turning an mv_polynomial
into the function which reports the coefficient of a given monomial
monomial s a
is the monomial a * X^s
Equations
- mv_polynomial.monomial s a = finsupp.single s a
C a
is the constant polynomial with value a
Equations
- mv_polynomial.C = {to_fun := mv_polynomial.monomial 0, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}
X n
is the degree 1
monomial $X_n$.
Equations
- mv_polynomial.X n = mv_polynomial.monomial (finsupp.single n 1) 1
The coefficient of the monomial m
in the multi-variable polynomial p
.
Equations
- mv_polynomial.coeff m p = ⇑p m
constant_coeff p
returns the constant term of the polynomial p
, defined as coeff 0 p
.
This is a ring homomorphism.
Equations
- mv_polynomial.constant_coeff = {to_fun := mv_polynomial.coeff 0, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}
Evaluate a polynomial p
given a valuation g
of all the variables
and a ring hom f
from the scalar ring to the target
Equations
- mv_polynomial.eval₂ f g p = finsupp.sum p (λ (s : σ →₀ ℕ) (a : R), (⇑f a) * s.prod (λ (n : σ) (e : ℕ), g n ^ e))
mv_polynomial.eval₂
as a ring_hom
.
Equations
Evaluate a polynomial p
given a valuation f
of all the variables
Equations
map f p
maps a polynomial p
across a ring hom f
Equations
The algebra of multivariate polynomials
A map σ → S₁
where S₁
is an algebra over R
generates an R
-algebra homomorphism
from multivariate polynomials over σ
to S₁
.
Equations
- mv_polynomial.aeval f = {to_fun := (mv_polynomial.eval₂_hom (algebra_map R S₁) f).to_fun, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _, commutes' := _}