mathlib3 documentation

data.mv_polynomial.basic

Multivariate polynomials #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

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:

Definitions #

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

@[protected, instance]
noncomputable def mv_polynomial.comm_semiring {R : Type u} {σ : Type u_1} [comm_semiring R] :
Equations
@[protected, instance]
noncomputable def mv_polynomial.inhabited {R : Type u} {σ : Type u_1} [comm_semiring R] :
Equations
@[protected, instance]
noncomputable def mv_polynomial.distrib_mul_action {R : Type u} {S₁ : Type v} {σ : Type u_1} [monoid R] [comm_semiring S₁] [distrib_mul_action R S₁] :
Equations
@[protected, instance]
noncomputable def mv_polynomial.smul_zero_class {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring S₁] [smul_zero_class R S₁] :
Equations
@[protected, instance]
def mv_polynomial.has_faithful_smul {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring S₁] [smul_zero_class R S₁] [has_faithful_smul R S₁] :
@[protected, instance]
noncomputable def mv_polynomial.module {R : Type u} {S₁ : Type v} {σ : Type u_1} [semiring R] [comm_semiring S₁] [module R S₁] :
module R (mv_polynomial σ S₁)
Equations
@[protected, instance]
def mv_polynomial.is_scalar_tower {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring S₂] [has_smul R S₁] [smul_zero_class R S₂] [smul_zero_class S₁ S₂] [is_scalar_tower R S₁ S₂] :
@[protected, instance]
def mv_polynomial.smul_comm_class {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring S₂] [smul_zero_class R S₂] [smul_zero_class S₁ S₂] [smul_comm_class R S₁ S₂] :
@[protected, instance]
@[protected, instance]
noncomputable def mv_polynomial.algebra {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] :
Equations
@[protected, instance]
def mv_polynomial.is_scalar_tower_right {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring S₁] [distrib_smul R S₁] [is_scalar_tower R S₁ S₁] :
@[protected, instance]
def mv_polynomial.smul_comm_class_right {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring S₁] [distrib_smul R S₁] [smul_comm_class R S₁ S₁] :
@[protected, instance]
def mv_polynomial.unique {R : Type u} {σ : Type u_1} [comm_semiring R] [subsingleton R] :

If R is a subsingleton, then mv_polynomial σ R has a unique element

Equations
noncomputable def mv_polynomial.monomial {R : Type u} {σ : Type u_1} [comm_semiring R] (s : σ →₀ ) :

monomial s a is the monomial with coefficient a and exponents given by s

Equations
theorem mv_polynomial.single_eq_monomial {R : Type u} {σ : Type u_1} [comm_semiring R] (s : σ →₀ ) (a : R) :
theorem mv_polynomial.mul_def {R : Type u} {σ : Type u_1} [comm_semiring R] {p q : mv_polynomial σ R} :
p * q = finsupp.sum p (λ (m : σ →₀ ) (a : R), finsupp.sum q (λ (n : σ →₀ ) (b : R), (mv_polynomial.monomial (m + n)) (a * b)))
noncomputable def mv_polynomial.C {R : Type u} {σ : Type u_1} [comm_semiring R] :

C a is the constant polynomial with value a

Equations
noncomputable def mv_polynomial.X {R : Type u} {σ : Type u_1} [comm_semiring R] (n : σ) :

X n is the degree 1 monomial $X_n$.

Equations
theorem mv_polynomial.monomial_left_injective {R : Type u} {σ : Type u_1} [comm_semiring R] {r : R} (hr : r 0) :
@[simp]
theorem mv_polynomial.monomial_left_inj {R : Type u} {σ : Type u_1} [comm_semiring R] {s t : σ →₀ } {r : R} (hr : r 0) :
@[simp]
theorem mv_polynomial.C_0 {R : Type u} {σ : Type u_1} [comm_semiring R] :
@[simp]
theorem mv_polynomial.C_1 {R : Type u} {σ : Type u_1} [comm_semiring R] :
@[simp]
theorem mv_polynomial.C_add {R : Type u} {σ : Type u_1} {a a' : R} [comm_semiring R] :
@[simp]
theorem mv_polynomial.C_mul {R : Type u} {σ : Type u_1} {a a' : R} [comm_semiring R] :
@[simp]
theorem mv_polynomial.C_pow {R : Type u} {σ : Type u_1} [comm_semiring R] (a : R) (n : ) :
@[simp]
theorem mv_polynomial.C_inj {σ : Type u_1} (R : Type u_2) [comm_semiring R] (r s : R) :
@[protected, instance]
@[protected, instance]
theorem mv_polynomial.C_mul' {R : Type u} {σ : Type u_1} {a : R} [comm_semiring R] {p : mv_polynomial σ R} :
theorem mv_polynomial.smul_eq_C_mul {R : Type u} {σ : Type u_1} [comm_semiring R] (p : mv_polynomial σ R) (a : R) :
theorem mv_polynomial.C_eq_smul_one {R : Type u} {σ : Type u_1} {a : R} [comm_semiring R] :
theorem mv_polynomial.smul_monomial {R : Type u} {σ : Type u_1} {a : R} {s : σ →₀ } [comm_semiring R] {S₁ : Type u_2} [smul_zero_class S₁ R] (r : S₁) :
@[simp]
theorem mv_polynomial.X_inj {R : Type u} {σ : Type u_1} [comm_semiring R] [nontrivial R] (m n : σ) :
theorem mv_polynomial.monomial_pow {R : Type u} {σ : Type u_1} {a : R} {e : } {s : σ →₀ } [comm_semiring R] :
@[simp]
theorem mv_polynomial.monomial_mul {R : Type u} {σ : Type u_1} [comm_semiring R] {s s' : σ →₀ } {a b : R} :
noncomputable def mv_polynomial.monomial_one_hom (R : Type u) (σ : Type u_1) [comm_semiring R] :

λ s, monomial s 1 as a homomorphism.

Equations
theorem mv_polynomial.monomial_add_single {R : Type u} {σ : Type u_1} {a : R} {e : } {n : σ} {s : σ →₀ } [comm_semiring R] :
theorem mv_polynomial.monomial_single_add {R : Type u} {σ : Type u_1} {a : R} {e : } {n : σ} {s : σ →₀ } [comm_semiring R] :
@[simp]
theorem mv_polynomial.monomial_zero {R : Type u} {σ : Type u_1} [comm_semiring R] {s : σ →₀ } :
@[simp]
theorem mv_polynomial.monomial_eq_zero {R : Type u} {σ : Type u_1} [comm_semiring R] {s : σ →₀ } {b : R} :
@[simp]
theorem mv_polynomial.sum_monomial_eq {R : Type u} {σ : Type u_1} [comm_semiring R] {A : Type u_2} [add_comm_monoid A] {u : σ →₀ } {r : R} {b : →₀ ) R A} (w : b u 0 = 0) :
@[simp]
theorem mv_polynomial.sum_C {R : Type u} {σ : Type u_1} {a : R} [comm_semiring R] {A : Type u_2} [add_comm_monoid A] {b : →₀ ) R A} (w : b 0 0 = 0) :
theorem mv_polynomial.monomial_sum_one {R : Type u} {σ : Type u_1} [comm_semiring R] {α : Type u_2} (s : finset α) (f : α σ →₀ ) :
(mv_polynomial.monomial (s.sum (λ (i : α), f i))) 1 = s.prod (λ (i : α), (mv_polynomial.monomial (f i)) 1)
theorem mv_polynomial.monomial_sum_index {R : Type u} {σ : Type u_1} [comm_semiring R] {α : Type u_2} (s : finset α) (f : α σ →₀ ) (a : R) :
(mv_polynomial.monomial (s.sum (λ (i : α), f i))) a = mv_polynomial.C a * s.prod (λ (i : α), (mv_polynomial.monomial (f i)) 1)
theorem mv_polynomial.monomial_finsupp_sum_index {R : Type u} {σ : Type u_1} [comm_semiring R] {α : Type u_2} {β : Type u_3} [has_zero β] (f : α →₀ β) (g : α β σ →₀ ) (a : R) :
(mv_polynomial.monomial (f.sum g)) a = mv_polynomial.C a * f.prod (λ (a : α) (b : β), (mv_polynomial.monomial (g a b)) 1)
theorem mv_polynomial.monomial_eq_monomial_iff {R : Type u} [comm_semiring R] {α : Type u_1} (a₁ a₂ : α →₀ ) (b₁ b₂ : R) :
(mv_polynomial.monomial a₁) b₁ = (mv_polynomial.monomial a₂) b₂ a₁ = a₂ b₁ = b₂ b₁ = 0 b₂ = 0
theorem mv_polynomial.monomial_eq {R : Type u} {σ : Type u_1} {a : R} {s : σ →₀ } [comm_semiring R] :
theorem mv_polynomial.induction_on_monomial {R : Type u} {σ : Type u_1} [comm_semiring R] {M : mv_polynomial σ R Prop} (h_C : (a : R), M (mv_polynomial.C a)) (h_X : (p : mv_polynomial σ R) (n : σ), M p M (p * mv_polynomial.X n)) (s : σ →₀ ) (a : R) :
theorem mv_polynomial.induction_on' {R : Type u} {σ : Type u_1} [comm_semiring R] {P : mv_polynomial σ R Prop} (p : mv_polynomial σ R) (h1 : (u : σ →₀ ) (a : R), P ((mv_polynomial.monomial u) a)) (h2 : (p q : mv_polynomial σ R), P p P q P (p + q)) :
P p

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.

theorem mv_polynomial.induction_on''' {R : Type u} {σ : Type u_1} [comm_semiring R] {M : mv_polynomial σ R Prop} (p : mv_polynomial σ R) (h_C : (a : R), M (mv_polynomial.C a)) (h_add_weak : (a : σ →₀ ) (b : R) (f : →₀ ) →₀ R), a f.support b 0 M f M ((mv_polynomial.monomial a) b + f)) :
M p

Similar to mv_polynomial.induction_on but only a weak form of h_add is required.

theorem mv_polynomial.induction_on'' {R : Type u} {σ : Type u_1} [comm_semiring R] {M : mv_polynomial σ R Prop} (p : mv_polynomial σ R) (h_C : (a : R), M (mv_polynomial.C a)) (h_add_weak : (a : σ →₀ ) (b : R) (f : →₀ ) →₀ R), a f.support b 0 M f M ((mv_polynomial.monomial a) b) M ((mv_polynomial.monomial a) b + f)) (h_X : (p : mv_polynomial σ R) (n : σ), M p M (p * mv_polynomial.X n)) :
M p

Similar to mv_polynomial.induction_on but only a yet weaker form of h_add is required.

theorem mv_polynomial.induction_on {R : Type u} {σ : Type u_1} [comm_semiring R] {M : mv_polynomial σ R Prop} (p : mv_polynomial σ R) (h_C : (a : R), M (mv_polynomial.C a)) (h_add : (p q : mv_polynomial σ R), M p M q M (p + q)) (h_X : (p : mv_polynomial σ R) (n : σ), M p M (p * mv_polynomial.X n)) :
M p

Analog of polynomial.induction_on.

theorem mv_polynomial.ring_hom_ext {R : Type u} {σ : Type u_1} [comm_semiring R] {A : Type u_2} [semiring A] {f g : mv_polynomial σ R →+* A} (hC : (r : R), f (mv_polynomial.C r) = g (mv_polynomial.C r)) (hX : (i : σ), f (mv_polynomial.X i) = g (mv_polynomial.X i)) :
f = g
@[ext]
theorem mv_polynomial.ring_hom_ext' {R : Type u} {σ : Type u_1} [comm_semiring R] {A : Type u_2} [semiring A] {f g : mv_polynomial σ R →+* A} (hC : f.comp mv_polynomial.C = g.comp mv_polynomial.C) (hX : (i : σ), f (mv_polynomial.X i) = g (mv_polynomial.X i)) :
f = g

See note [partially-applied ext lemmas].

theorem mv_polynomial.hom_eq_hom {R : Type u} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [semiring S₂] (f g : mv_polynomial σ R →+* S₂) (hC : f.comp mv_polynomial.C = g.comp mv_polynomial.C) (hX : (n : σ), f (mv_polynomial.X n) = g (mv_polynomial.X n)) (p : mv_polynomial σ R) :
f p = g p
theorem mv_polynomial.is_id {R : Type u} {σ : Type u_1} [comm_semiring R] (f : mv_polynomial σ R →+* mv_polynomial σ R) (hC : f.comp mv_polynomial.C = mv_polynomial.C) (hX : (n : σ), f (mv_polynomial.X n) = mv_polynomial.X n) (p : mv_polynomial σ R) :
f p = p
@[ext]
theorem mv_polynomial.alg_hom_ext' {R : Type u} {σ : Type u_1} [comm_semiring R] {A : Type u_2} {B : Type u_3} [comm_semiring A] [comm_semiring B] [algebra R A] [algebra R B] {f g : mv_polynomial σ A →ₐ[R] B} (h₁ : f.comp (is_scalar_tower.to_alg_hom R A (mv_polynomial σ A)) = g.comp (is_scalar_tower.to_alg_hom R A (mv_polynomial σ A))) (h₂ : (i : σ), f (mv_polynomial.X i) = g (mv_polynomial.X i)) :
f = g
@[ext]
theorem mv_polynomial.alg_hom_ext {R : Type u} {σ : Type u_1} [comm_semiring R] {A : Type u_2} [semiring A] [algebra R A] {f g : mv_polynomial σ R →ₐ[R] A} (hf : (i : σ), f (mv_polynomial.X i) = g (mv_polynomial.X i)) :
f = g
@[simp]
@[ext]
theorem mv_polynomial.linear_map_ext {R : Type u} {σ : Type u_1} [comm_semiring R] {M : Type u_2} [add_comm_monoid M] [module R M] {f g : mv_polynomial σ R →ₗ[R] M} (h : (s : σ →₀ ), f.comp (mv_polynomial.monomial s) = g.comp (mv_polynomial.monomial s)) :
f = g
def mv_polynomial.support {R : Type u} {σ : Type u_1} [comm_semiring R] (p : mv_polynomial σ R) :

The finite set of all m : σ →₀ ℕ such that X^m has a non-zero coefficient.

Equations
theorem mv_polynomial.support_monomial {R : Type u} {σ : Type u_1} {a : R} {s : σ →₀ } [comm_semiring R] [decidable (a = 0)] :
theorem mv_polynomial.support_monomial_subset {R : Type u} {σ : Type u_1} {a : R} {s : σ →₀ } [comm_semiring R] :
theorem mv_polynomial.support_add {R : Type u} {σ : Type u_1} [comm_semiring R] {p q : mv_polynomial σ R} [decidable_eq σ] :
theorem mv_polynomial.support_X {R : Type u} {σ : Type u_1} {n : σ} [comm_semiring R] [nontrivial R] :
theorem mv_polynomial.support_X_pow {R : Type u} {σ : Type u_1} [comm_semiring R] [nontrivial R] (s : σ) (n : ) :
@[simp]
theorem mv_polynomial.support_zero {R : Type u} {σ : Type u_1} [comm_semiring R] :
theorem mv_polynomial.support_smul {R : Type u} {σ : Type u_1} [comm_semiring R] {S₁ : Type u_2} [smul_zero_class S₁ R] {a : S₁} {f : mv_polynomial σ R} :
theorem mv_polynomial.support_sum {R : Type u} {σ : Type u_1} [comm_semiring R] {α : Type u_2} [decidable_eq σ] {s : finset α} {f : α mv_polynomial σ R} :
(s.sum (λ (x : α), f x)).support s.bUnion (λ (x : α), (f x).support)
def mv_polynomial.coeff {R : Type u} {σ : Type u_1} [comm_semiring R] (m : σ →₀ ) (p : mv_polynomial σ R) :
R

The coefficient of the monomial m in the multi-variable polynomial p.

Equations
@[simp]
theorem mv_polynomial.mem_support_iff {R : Type u} {σ : Type u_1} [comm_semiring R] {p : mv_polynomial σ R} {m : σ →₀ } :
theorem mv_polynomial.not_mem_support_iff {R : Type u} {σ : Type u_1} [comm_semiring R] {p : mv_polynomial σ R} {m : σ →₀ } :
theorem mv_polynomial.sum_def {R : Type u} {σ : Type u_1} [comm_semiring R] {A : Type u_2} [add_comm_monoid A] {p : mv_polynomial σ R} {b : →₀ ) R A} :
finsupp.sum p b = p.support.sum (λ (m : σ →₀ ), b m (mv_polynomial.coeff m p))
theorem mv_polynomial.support_mul {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (p q : mv_polynomial σ R) :
(p * q).support p.support.bUnion (λ (a : σ →₀ ), q.support.bUnion (λ (b : σ →₀ ), {a + b}))
@[ext]
theorem mv_polynomial.ext {R : Type u} {σ : Type u_1} [comm_semiring R] (p q : mv_polynomial σ R) :
theorem mv_polynomial.ext_iff {R : Type u} {σ : Type u_1} [comm_semiring R] (p q : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.coeff_add {R : Type u} {σ : Type u_1} [comm_semiring R] (m : σ →₀ ) (p q : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.coeff_smul {R : Type u} {σ : Type u_1} [comm_semiring R] {S₁ : Type u_2} [smul_zero_class S₁ R] (m : σ →₀ ) (c : S₁) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.coeff_zero {R : Type u} {σ : Type u_1} [comm_semiring R] (m : σ →₀ ) :
@[simp]
theorem mv_polynomial.coeff_zero_X {R : Type u} {σ : Type u_1} [comm_semiring R] (i : σ) :
theorem mv_polynomial.coeff_sum {R : Type u} {σ : Type u_1} [comm_semiring R] {X : Type u_2} (s : finset X) (f : X mv_polynomial σ R) (m : σ →₀ ) :
mv_polynomial.coeff m (s.sum (λ (x : X), f x)) = s.sum (λ (x : X), mv_polynomial.coeff m (f x))
theorem mv_polynomial.monic_monomial_eq {R : Type u} {σ : Type u_1} [comm_semiring R] (m : σ →₀ ) :
(mv_polynomial.monomial m) 1 = m.prod (λ (n : σ) (e : ), mv_polynomial.X n ^ e)
@[simp]
theorem mv_polynomial.coeff_monomial {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (m n : σ →₀ ) (a : R) :
@[simp]
theorem mv_polynomial.coeff_C {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (m : σ →₀ ) (a : R) :
theorem mv_polynomial.coeff_one {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (m : σ →₀ ) :
mv_polynomial.coeff m 1 = ite (0 = m) 1 0
@[simp]
theorem mv_polynomial.coeff_zero_C {R : Type u} {σ : Type u_1} [comm_semiring R] (a : R) :
@[simp]
theorem mv_polynomial.coeff_zero_one {R : Type u} {σ : Type u_1} [comm_semiring R] :
theorem mv_polynomial.coeff_X_pow {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (i : σ) (m : σ →₀ ) (k : ) :
theorem mv_polynomial.coeff_X' {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (i : σ) (m : σ →₀ ) :
@[simp]
theorem mv_polynomial.coeff_X {R : Type u} {σ : Type u_1} [comm_semiring R] (i : σ) :
@[simp]
theorem mv_polynomial.coeff_C_mul {R : Type u} {σ : Type u_1} [comm_semiring R] (m : σ →₀ ) (a : R) (p : mv_polynomial σ R) :
theorem mv_polynomial.coeff_mul {R : Type u} {σ : Type u_1} [comm_semiring R] (p q : mv_polynomial σ R) (n : σ →₀ ) :
@[simp]
theorem mv_polynomial.coeff_mul_monomial {R : Type u} {σ : Type u_1} [comm_semiring R] (m s : σ →₀ ) (r : R) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.coeff_monomial_mul {R : Type u} {σ : Type u_1} [comm_semiring R] (m s : σ →₀ ) (r : R) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.coeff_mul_X {R : Type u} {σ : Type u_1} [comm_semiring R] (m : σ →₀ ) (s : σ) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.coeff_X_mul {R : Type u} {σ : Type u_1} [comm_semiring R] (m : σ →₀ ) (s : σ) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.support_smul_eq {R : Type u} {σ : Type u_1} [comm_semiring R] {S₁ : Type u_2} [semiring S₁] [module S₁ R] [no_zero_smul_divisors S₁ R] {a : S₁} (h : a 0) (p : mv_polynomial σ R) :
theorem mv_polynomial.coeff_mul_monomial' {R : Type u} {σ : Type u_1} [comm_semiring R] (m s : σ →₀ ) (r : R) (p : mv_polynomial σ R) :
theorem mv_polynomial.coeff_monomial_mul' {R : Type u} {σ : Type u_1} [comm_semiring R] (m s : σ →₀ ) (r : R) (p : mv_polynomial σ R) :
theorem mv_polynomial.coeff_mul_X' {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (m : σ →₀ ) (s : σ) (p : mv_polynomial σ R) :
theorem mv_polynomial.coeff_X_mul' {R : Type u} {σ : Type u_1} [comm_semiring R] [decidable_eq σ] (m : σ →₀ ) (s : σ) (p : mv_polynomial σ R) :
theorem mv_polynomial.eq_zero_iff {R : Type u} {σ : Type u_1} [comm_semiring R] {p : mv_polynomial σ R} :
p = 0 (d : σ →₀ ), mv_polynomial.coeff d p = 0
theorem mv_polynomial.ne_zero_iff {R : Type u} {σ : Type u_1} [comm_semiring R] {p : mv_polynomial σ R} :
@[simp]
theorem mv_polynomial.support_eq_empty {R : Type u} {σ : Type u_1} [comm_semiring R] {p : mv_polynomial σ R} :
p.support = p = 0
theorem mv_polynomial.exists_coeff_ne_zero {R : Type u} {σ : Type u_1} [comm_semiring R] {p : mv_polynomial σ R} (h : p 0) :
theorem mv_polynomial.C_dvd_iff_dvd_coeff {R : Type u} {σ : Type u_1} [comm_semiring R] (r : R) (φ : mv_polynomial σ R) :

constant_coeff p returns the constant term of the polynomial p, defined as coeff 0 p. This is a ring homomorphism.

Equations
@[simp]
theorem mv_polynomial.constant_coeff_smul {S₁ : Type v} {σ : Type u_1} [comm_semiring S₁] {R : Type u_2} [smul_zero_class R S₁] (a : R) (f : mv_polynomial σ S₁) :
@[simp]
theorem mv_polynomial.as_sum {R : Type u} {σ : Type u_1} [comm_semiring R] (p : mv_polynomial σ R) :
def mv_polynomial.eval₂ {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (p : mv_polynomial σ R) :
S₁

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
theorem mv_polynomial.eval₂_eq {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (g : R →+* S₁) (x : σ S₁) (f : mv_polynomial σ R) :
mv_polynomial.eval₂ g x f = f.support.sum (λ (d : σ →₀ ), g (mv_polynomial.coeff d f) * d.support.prod (λ (i : σ), x i ^ d i))
theorem mv_polynomial.eval₂_eq' {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [fintype σ] (g : R →+* S₁) (x : σ S₁) (f : mv_polynomial σ R) :
mv_polynomial.eval₂ g x f = f.support.sum (λ (d : σ →₀ ), g (mv_polynomial.coeff d f) * finset.univ.prod (λ (i : σ), x i ^ d i))
@[simp]
theorem mv_polynomial.eval₂_zero {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) :
@[simp]
theorem mv_polynomial.eval₂_add {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {p q : mv_polynomial σ R} (f : R →+* S₁) (g : σ S₁) :
@[simp]
theorem mv_polynomial.eval₂_monomial {R : Type u} {S₁ : Type v} {σ : Type u_1} {a : R} {s : σ →₀ } [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) :
mv_polynomial.eval₂ f g ((mv_polynomial.monomial s) a) = f a * s.prod (λ (n : σ) (e : ), g n ^ e)
@[simp]
theorem mv_polynomial.eval₂_C {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (a : R) :
@[simp]
theorem mv_polynomial.eval₂_one {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) :
@[simp]
theorem mv_polynomial.eval₂_X {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (n : σ) :
theorem mv_polynomial.eval₂_mul_monomial {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {p : mv_polynomial σ R} (f : R →+* S₁) (g : σ S₁) {s : σ →₀ } {a : R} :
mv_polynomial.eval₂ f g (p * (mv_polynomial.monomial s) a) = mv_polynomial.eval₂ f g p * f a * s.prod (λ (n : σ) (e : ), g n ^ e)
theorem mv_polynomial.eval₂_mul_C {R : Type u} {S₁ : Type v} {σ : Type u_1} {a : R} [comm_semiring R] [comm_semiring S₁] {p : mv_polynomial σ R} (f : R →+* S₁) (g : σ S₁) :
@[simp]
theorem mv_polynomial.eval₂_mul {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {q : mv_polynomial σ R} (f : R →+* S₁) (g : σ S₁) {p : mv_polynomial σ R} :
@[simp]
theorem mv_polynomial.eval₂_pow {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) {p : mv_polynomial σ R} {n : } :
def mv_polynomial.eval₂_hom {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) :

mv_polynomial.eval₂ as a ring_hom.

Equations
@[simp]
theorem mv_polynomial.coe_eval₂_hom {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) :
theorem mv_polynomial.eval₂_hom_congr {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {f₁ f₂ : R →+* S₁} {g₁ g₂ : σ S₁} {p₁ p₂ : mv_polynomial σ R} :
f₁ = f₂ g₁ = g₂ p₁ = p₂ (mv_polynomial.eval₂_hom f₁ g₁) p₁ = (mv_polynomial.eval₂_hom f₂ g₂) p₂
@[simp]
theorem mv_polynomial.eval₂_hom_C {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (r : R) :
@[simp]
theorem mv_polynomial.eval₂_hom_X' {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (i : σ) :
@[simp]
theorem mv_polynomial.comp_eval₂_hom {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [comm_semiring S₂] (f : R →+* S₁) (g : σ S₁) (φ : S₁ →+* S₂) :
φ.comp (mv_polynomial.eval₂_hom f g) = mv_polynomial.eval₂_hom (φ.comp f) (λ (i : σ), φ (g i))
theorem mv_polynomial.map_eval₂_hom {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [comm_semiring S₂] (f : R →+* S₁) (g : σ S₁) (φ : S₁ →+* S₂) (p : mv_polynomial σ R) :
φ ((mv_polynomial.eval₂_hom f g) p) = (mv_polynomial.eval₂_hom (φ.comp f) (λ (i : σ), φ (g i))) p
theorem mv_polynomial.eval₂_hom_monomial {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (d : σ →₀ ) (r : R) :
(mv_polynomial.eval₂_hom f g) ((mv_polynomial.monomial d) r) = f r * d.prod (λ (i : σ) (k : ), g i ^ k)
theorem mv_polynomial.eval₂_comp_left {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {S₂ : Type u_2} [comm_semiring S₂] (k : S₁ →+* S₂) (f : R →+* S₁) (g : σ S₁) (p : mv_polynomial σ R) :
theorem mv_polynomial.eval₂_congr {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {p : mv_polynomial σ R} (f : R →+* S₁) (g₁ g₂ : σ S₁) (h : {i : σ} {c : σ →₀ }, i c.support mv_polynomial.coeff c p 0 g₁ i = g₂ i) :
@[simp]
theorem mv_polynomial.eval₂_prod {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (s : finset S₂) (p : S₂ mv_polynomial σ R) :
mv_polynomial.eval₂ f g (s.prod (λ (x : S₂), p x)) = s.prod (λ (x : S₂), mv_polynomial.eval₂ f g (p x))
@[simp]
theorem mv_polynomial.eval₂_sum {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (s : finset S₂) (p : S₂ mv_polynomial σ R) :
mv_polynomial.eval₂ f g (s.sum (λ (x : S₂), p x)) = s.sum (λ (x : S₂), mv_polynomial.eval₂ f g (p x))
theorem mv_polynomial.eval₂_assoc {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (q : S₂ mv_polynomial σ R) (p : mv_polynomial S₂ R) :
def mv_polynomial.eval {R : Type u} {σ : Type u_1} [comm_semiring R] (f : σ R) :

Evaluate a polynomial p given a valuation f of all the variables

Equations
theorem mv_polynomial.eval_eq {R : Type u} {σ : Type u_1} [comm_semiring R] (x : σ R) (f : mv_polynomial σ R) :
(mv_polynomial.eval x) f = f.support.sum (λ (d : σ →₀ ), mv_polynomial.coeff d f * d.support.prod (λ (i : σ), x i ^ d i))
theorem mv_polynomial.eval_eq' {R : Type u} {σ : Type u_1} [comm_semiring R] [fintype σ] (x : σ R) (f : mv_polynomial σ R) :
(mv_polynomial.eval x) f = f.support.sum (λ (d : σ →₀ ), mv_polynomial.coeff d f * finset.univ.prod (λ (i : σ), x i ^ d i))
theorem mv_polynomial.eval_monomial {R : Type u} {σ : Type u_1} {a : R} {s : σ →₀ } [comm_semiring R] {f : σ R} :
(mv_polynomial.eval f) ((mv_polynomial.monomial s) a) = a * s.prod (λ (n : σ) (e : ), f n ^ e)
@[simp]
theorem mv_polynomial.eval_C {R : Type u} {σ : Type u_1} [comm_semiring R] {f : σ R} (a : R) :
@[simp]
theorem mv_polynomial.eval_X {R : Type u} {σ : Type u_1} [comm_semiring R] {f : σ R} (n : σ) :
@[simp]
theorem mv_polynomial.smul_eval {R : Type u} {σ : Type u_1} [comm_semiring R] (x : σ R) (p : mv_polynomial σ R) (s : R) :
theorem mv_polynomial.eval_sum {R : Type u} {σ : Type u_1} [comm_semiring R] {ι : Type u_2} (s : finset ι) (f : ι mv_polynomial σ R) (g : σ R) :
(mv_polynomial.eval g) (s.sum (λ (i : ι), f i)) = s.sum (λ (i : ι), (mv_polynomial.eval g) (f i))
theorem mv_polynomial.eval_prod {R : Type u} {σ : Type u_1} [comm_semiring R] {ι : Type u_2} (s : finset ι) (f : ι mv_polynomial σ R) (g : σ R) :
(mv_polynomial.eval g) (s.prod (λ (i : ι), f i)) = s.prod (λ (i : ι), (mv_polynomial.eval g) (f i))
@[simp]
theorem mv_polynomial.eval₂_id {R : Type u} {σ : Type u_1} [comm_semiring R] (p : mv_polynomial σ R) (g : σ R) :
theorem mv_polynomial.eval_eval₂ {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {τ : Type u_2} (f : R →+* mv_polynomial τ S₁) (g : σ mv_polynomial τ S₁) (p : mv_polynomial σ R) (x : τ S₁) :
noncomputable def mv_polynomial.map {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) :

map f p maps a polynomial p across a ring hom f

Equations
@[simp]
theorem mv_polynomial.map_monomial {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (s : σ →₀ ) (a : R) :
@[simp]
theorem mv_polynomial.map_C {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (a : R) :
@[simp]
theorem mv_polynomial.map_X {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (n : σ) :
theorem mv_polynomial.map_id {R : Type u} {σ : Type u_1} [comm_semiring R] (p : mv_polynomial σ R) :
theorem mv_polynomial.map_map {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) [comm_semiring S₂] (g : S₁ →+* S₂) (p : mv_polynomial σ R) :
theorem mv_polynomial.eval₂_eq_eval_map {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (p : mv_polynomial σ R) :
theorem mv_polynomial.eval₂_comp_right {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] {S₂ : Type u_2} [comm_semiring S₂] (k : S₁ →+* S₂) (f : R →+* S₁) (g : σ S₁) (p : mv_polynomial σ R) :
theorem mv_polynomial.coeff_map {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (p : mv_polynomial σ R) (m : σ →₀ ) :
theorem mv_polynomial.map_injective {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (hf : function.injective f) :

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.

@[simp]
theorem mv_polynomial.eval_map {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : σ S₁) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.eval₂_map {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [comm_semiring S₂] (f : R →+* S₁) (g : σ S₂) (φ : S₁ →+* S₂) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.eval₂_hom_map_hom {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [comm_semiring S₂] (f : R →+* S₁) (g : σ S₂) (φ : S₁ →+* S₂) (p : mv_polynomial σ R) :
theorem mv_polynomial.support_map_subset {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (p : mv_polynomial σ R) :
theorem mv_polynomial.support_map_of_injective {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (p : mv_polynomial σ R) {f : R →+* S₁} (hf : function.injective f) :
theorem mv_polynomial.C_dvd_iff_map_hom_eq_zero {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (q : R →+* S₁) (r : R) (hr : (r' : R), q r' = 0 r r') (φ : mv_polynomial σ R) :
theorem mv_polynomial.map_map_range_eq_iff {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] (f : R →+* S₁) (g : S₁ R) (hg : g 0 = 0) (φ : mv_polynomial σ S₁) :
@[simp]
theorem mv_polynomial.map_alg_hom_apply {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [comm_semiring S₂] [algebra R S₁] [algebra R S₂] (f : S₁ →ₐ[R] S₂) (ᾰ : mv_polynomial σ S₁) :
noncomputable def mv_polynomial.map_alg_hom {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [comm_semiring S₂] [algebra R S₁] [algebra R S₂] (f : S₁ →ₐ[R] S₂) :

If f : S₁ →ₐ[R] S₂ is a morphism of R-algebras, then so is mv_polynomial.map f.

Equations
@[simp]
theorem mv_polynomial.map_alg_hom_id {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] :
@[simp]
theorem mv_polynomial.map_alg_hom_coe_ring_hom {R : Type u} {S₁ : Type v} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [comm_semiring S₂] [algebra R S₁] [algebra R S₂] (f : S₁ →ₐ[R] S₂) :

The algebra of multivariate polynomials #

theorem mv_polynomial.algebra_map_apply {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (r : R) :
noncomputable def mv_polynomial.aeval {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) :

A map σ → S₁ where S₁ is an algebra over R generates an R-algebra homomorphism from multivariate polynomials over σ to S₁.

Equations
theorem mv_polynomial.aeval_def {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) (p : mv_polynomial σ R) :
theorem mv_polynomial.aeval_eq_eval₂_hom {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.aeval_X {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) (s : σ) :
@[simp]
theorem mv_polynomial.aeval_C {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) (r : R) :
theorem mv_polynomial.aeval_unique {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (φ : mv_polynomial σ R →ₐ[R] S₁) :
theorem mv_polynomial.comp_aeval {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) {B : Type u_2} [comm_semiring B] [algebra R B] (φ : S₁ →ₐ[R] B) :
φ.comp (mv_polynomial.aeval f) = mv_polynomial.aeval (λ (i : σ), φ (f i))
@[simp]
theorem mv_polynomial.map_aeval {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] {B : Type u_2} [comm_semiring B] (g : σ S₁) (φ : S₁ →+* B) (p : mv_polynomial σ R) :
φ ((mv_polynomial.aeval g) p) = (mv_polynomial.eval₂_hom (φ.comp (algebra_map R S₁)) (λ (i : σ), φ (g i))) p
@[simp]
@[simp]
theorem mv_polynomial.eval₂_hom_zero' {R : Type u} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₂] (f : R →+* S₂) :
theorem mv_polynomial.eval₂_hom_zero'_apply {R : Type u} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₂] (f : R →+* S₂) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.eval₂_zero_apply {R : Type u} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₂] (f : R →+* S₂) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.eval₂_zero'_apply {R : Type u} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₂] (f : R →+* S₂) (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.aeval_zero {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.aeval_zero' {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (p : mv_polynomial σ R) :
@[simp]
theorem mv_polynomial.aeval_monomial {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (g : σ S₁) (d : σ →₀ ) (r : R) :
(mv_polynomial.aeval g) ((mv_polynomial.monomial d) r) = (algebra_map R S₁) r * d.prod (λ (i : σ) (k : ), g i ^ k)
theorem mv_polynomial.eval₂_hom_eq_zero {R : Type u} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₂] (f : R →+* S₂) (g : σ S₂) (φ : mv_polynomial σ R) (h : (d : σ →₀ ), mv_polynomial.coeff d φ 0 ( (i : σ) (H : i d.support), g i = 0)) :
theorem mv_polynomial.aeval_eq_zero {R : Type u} {S₂ : Type w} {σ : Type u_1} [comm_semiring R] [comm_semiring S₂] [algebra R S₂] (f : σ S₂) (φ : mv_polynomial σ R) (h : (d : σ →₀ ), mv_polynomial.coeff d φ 0 ( (i : σ) (H : i d.support), f i = 0)) :
theorem mv_polynomial.aeval_sum {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) {ι : Type u_2} (s : finset ι) (φ : ι mv_polynomial σ R) :
(mv_polynomial.aeval f) (s.sum (λ (i : ι), φ i)) = s.sum (λ (i : ι), (mv_polynomial.aeval f) (φ i))
theorem mv_polynomial.aeval_prod {R : Type u} {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) {ι : Type u_2} (s : finset ι) (φ : ι mv_polynomial σ R) :
(mv_polynomial.aeval f) (s.prod (λ (i : ι), φ i)) = s.prod (λ (i : ι), (mv_polynomial.aeval f) (φ i))
theorem algebra.adjoin_range_eq_range_aeval (R : Type u) {S₁ : Type v} {σ : Type u_1} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (f : σ S₁) :
theorem algebra.adjoin_eq_range (R : Type u) {S₁ : Type v} [comm_semiring R] [comm_semiring S₁] [algebra R S₁] (s : set S₁) :
noncomputable def mv_polynomial.aeval_tower {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (f : R →ₐ[S] A) (x : σ A) :

Version of aeval for defining algebra homs out of mv_polynomial σ R over a smaller base ring than R.

Equations
@[simp]
theorem mv_polynomial.aeval_tower_X {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (g : R →ₐ[S] A) (y : σ A) (i : σ) :
@[simp]
theorem mv_polynomial.aeval_tower_C {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (g : R →ₐ[S] A) (y : σ A) (x : R) :
@[simp]
theorem mv_polynomial.aeval_tower_comp_C {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (g : R →ₐ[S] A) (y : σ A) :
@[simp]
theorem mv_polynomial.aeval_tower_algebra_map {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (g : R →ₐ[S] A) (y : σ A) (x : R) :
@[simp]
theorem mv_polynomial.aeval_tower_comp_algebra_map {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (g : R →ₐ[S] A) (y : σ A) :
theorem mv_polynomial.aeval_tower_to_alg_hom {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (g : R →ₐ[S] A) (y : σ A) (x : R) :
@[simp]
theorem mv_polynomial.aeval_tower_comp_to_alg_hom {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {A : Type u_3} [comm_semiring S] [comm_semiring A] [algebra S R] [algebra S A] (g : R →ₐ[S] A) (y : σ A) :
theorem mv_polynomial.eval₂_mem {R : Type u} {σ : Type u_1} [comm_semiring R] {S : Type u_2} {subS : Type u_3} [comm_semiring S] [set_like subS S] [subsemiring_class subS S] {f : R →+* S} {p : mv_polynomial σ R} {s : subS} (hs : (i : σ →₀ ), i p.support f (mv_polynomial.coeff i p) s) {v : σ S} (hv : (i : σ), v i s) :
theorem mv_polynomial.eval_mem {σ : Type u_1} {S : Type u_2} {subS : Type u_3} [comm_semiring S] [set_like subS S] [subsemiring_class subS S] {p : mv_polynomial σ S} {s : subS} (hs : (i : σ →₀ ), i p.support mv_polynomial.coeff i p s) {v : σ S} (hv : (i : σ), v i s) :