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 MvPolynomial σ 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*
[CommSemiring R]
(the coefficients)s : σ →₀ ℕ
, a function fromσ
toℕ
which is zero away from a finite set. This will give rise to a monomial inMvPolynomial σ R
which mathematicians might callX^s
a : R
i : σ
, with corresponding monomialX i
, often denotedX_i
by mathematiciansp : MvPolynomial σ R
Definitions #
MvPolynomial σ 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
aeval (g : σ → S₁) p
: evaluates the multivariate polynomial obtained fromp
by the change of coefficient semiring corresponding tog
(a
stands foralgebra
)
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 MvPolynomial σ 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
Multivariate polynomial, where σ
is the index set of the variables and
R
is the coefficient ring
Equations
- MvPolynomial σ R = AddMonoidAlgebra R (σ →₀ ℕ)
Instances For
Equations
- MvPolynomial.decidableEqMvPolynomial = Finsupp.instDecidableEq
Equations
- MvPolynomial.commSemiring = AddMonoidAlgebra.commSemiring
Equations
- MvPolynomial.inhabited = { default := 0 }
Equations
- MvPolynomial.distribuMulAction = AddMonoidAlgebra.distribMulAction
Equations
- MvPolynomial.smulZeroClass = AddMonoidAlgebra.smulZeroClass
Equations
- ⋯ = ⋯
Equations
- MvPolynomial.module = AddMonoidAlgebra.module
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- MvPolynomial.algebra = AddMonoidAlgebra.algebra
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
If R
is a subsingleton, then MvPolynomial σ R
has a unique element
Equations
- MvPolynomial.unique = AddMonoidAlgebra.unique
monomial s a
is the monomial with coefficient a
and exponents given by s
Equations
Instances For
C a
is the constant polynomial with value a
Equations
- MvPolynomial.C = let __src := AddMonoidAlgebra.singleZeroRingHom; { toFun := ⇑(MvPolynomial.monomial 0), map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
X n
is the degree 1
monomial $X_n$.
Equations
- MvPolynomial.X n = (MvPolynomial.monomial (Finsupp.single n 1)) 1
Instances For
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
fun s ↦ monomial s 1
as a homomorphism.
Equations
- MvPolynomial.monomialOneHom R σ = AddMonoidAlgebra.of R (σ →₀ ℕ)
Instances For
Analog of Polynomial.induction_on'
.
To prove something about mv_polynomials,
it suffices to show the condition is closed under taking sums,
and it holds for monomials.
Similar to MvPolynomial.induction_on
but only a weak form of h_add
is required.
Similar to MvPolynomial.induction_on
but only a yet weaker form of h_add
is required.
Analog of Polynomial.induction_on
.
See note [partially-applied ext lemmas].
The finite set of all m : σ →₀ ℕ
such that X^m
has a non-zero coefficient.
Equations
- p.support = p.support
Instances For
The coefficient of the monomial m
in the multi-variable polynomial p
.
Equations
- MvPolynomial.coeff m p = p m
Instances For
MvPolynomial.coeff m
but promoted to an AddMonoidHom
.
Equations
- MvPolynomial.coeffAddMonoidHom m = { toFun := MvPolynomial.coeff m, map_zero' := ⋯, map_add' := ⋯ }
Instances For
MvPolynomial.coeff m
but promoted to a LinearMap
.
Equations
- MvPolynomial.lcoeff R m = { toFun := MvPolynomial.coeff m, map_add' := ⋯, map_smul' := ⋯ }
Instances For
The finset of nonzero coefficients of a multivariate polynomial.
Equations
- p.coeffs = Finset.image (fun (m : σ →₀ ℕ) => MvPolynomial.coeff m p) p.support
Instances For
constantCoeff p
returns the constant term of the polynomial p
, defined as coeff 0 p
.
This is a ring homomorphism.
Equations
- MvPolynomial.constantCoeff = { toFun := MvPolynomial.coeff 0, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
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
- MvPolynomial.eval₂ f g p = Finsupp.sum p fun (s : σ →₀ ℕ) (a : R) => f a * s.prod fun (n : σ) (e : ℕ) => g n ^ e
Instances For
MvPolynomial.eval₂
as a RingHom
.
Equations
- MvPolynomial.eval₂Hom f g = { toFun := MvPolynomial.eval₂ f g, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Evaluate a polynomial p
given a valuation f
of all the variables
Equations
Instances For
map f p
maps a polynomial p
across a ring hom f
Equations
- MvPolynomial.map f = MvPolynomial.eval₂Hom (MvPolynomial.C.comp f) MvPolynomial.X
Instances For
If f
is a left-inverse of g
then map f
is a left-inverse of map g
.
If f
is a right-inverse of g
then map f
is a right-inverse of map g
.
If f : S₁ →ₐ[R] S₂
is a morphism of R
-algebras, then so is MvPolynomial.map f
.
Equations
- MvPolynomial.mapAlgHom f = let __src := MvPolynomial.map ↑f; { toRingHom := __src, commutes' := ⋯ }
Instances For
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
- MvPolynomial.aeval f = let __src := MvPolynomial.eval₂Hom (algebraMap R S₁) f; { toRingHom := __src, commutes' := ⋯ }
Instances For
Version of aeval
for defining algebra homs out of MvPolynomial σ R
over a smaller base ring
than R
.
Equations
- MvPolynomial.aevalTower f X = let __src := MvPolynomial.eval₂Hom (↑f) X; { toRingHom := __src, commutes' := ⋯ }