Algebra towers for multivariate polynomial #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file proves some basic results about the algebra tower structure for the type
mv_polynomial σ R.
This structure itself is provided elsewhere as mv_polynomial.is_scalar_tower
When you update this file, you can also try to make a corresponding update in
ring_theory.polynomial.tower.
    
theorem
mv_polynomial.aeval_map_algebra_map
    {R : Type u_1}
    (A : Type u_2)
    {B : Type u_3}
    {σ : Type u_4}
    [comm_semiring R]
    [comm_semiring A]
    [comm_semiring B]
    [algebra R A]
    [algebra A B]
    [algebra R B]
    [is_scalar_tower R A B]
    (x : σ → B)
    (p : mv_polynomial σ R) :
⇑(mv_polynomial.aeval x) (⇑(mv_polynomial.map (algebra_map R A)) p) = ⇑(mv_polynomial.aeval x) p
    
theorem
mv_polynomial.aeval_algebra_map_apply
    {R : Type u_1}
    {A : Type u_2}
    (B : Type u_3)
    {σ : Type u_4}
    [comm_semiring R]
    [comm_semiring A]
    [comm_semiring B]
    [algebra R A]
    [algebra A B]
    [algebra R B]
    [is_scalar_tower R A B]
    (x : σ → A)
    (p : mv_polynomial σ R) :
⇑(mv_polynomial.aeval (⇑(algebra_map A B) ∘ x)) p = ⇑(algebra_map A B) (⇑(mv_polynomial.aeval x) p)
    
theorem
mv_polynomial.aeval_algebra_map_eq_zero_iff
    {R : Type u_1}
    {A : Type u_2}
    (B : Type u_3)
    {σ : Type u_4}
    [comm_semiring R]
    [comm_semiring A]
    [comm_semiring B]
    [algebra R A]
    [algebra A B]
    [algebra R B]
    [is_scalar_tower R A B]
    [no_zero_smul_divisors A B]
    [nontrivial B]
    (x : σ → A)
    (p : mv_polynomial σ R) :
⇑(mv_polynomial.aeval (⇑(algebra_map A B) ∘ x)) p = 0 ↔ ⇑(mv_polynomial.aeval x) p = 0
    
theorem
mv_polynomial.aeval_algebra_map_eq_zero_iff_of_injective
    {R : Type u_1}
    {A : Type u_2}
    (B : Type u_3)
    {σ : Type u_4}
    [comm_semiring R]
    [comm_semiring A]
    [comm_semiring B]
    [algebra R A]
    [algebra A B]
    [algebra R B]
    [is_scalar_tower R A B]
    {x : σ → A}
    {p : mv_polynomial σ R}
    (h : function.injective ⇑(algebra_map A B)) :
⇑(mv_polynomial.aeval (⇑(algebra_map A B) ∘ x)) p = 0 ↔ ⇑(mv_polynomial.aeval x) p = 0
@[simp]
    
theorem
subalgebra.mv_polynomial_aeval_coe
    {R : Type u_1}
    {A : Type u_2}
    {σ : Type u_4}
    [comm_semiring R]
    [comm_semiring A]
    [algebra R A]
    (S : subalgebra R A)
    (x : σ → ↥S)
    (p : mv_polynomial σ R) :
⇑(mv_polynomial.aeval (λ (i : σ), ↑(x i))) p = ↑(⇑(mv_polynomial.aeval x) p)