Documentation

Mathlib.Algebra.SkewPolynomial.Basic

Univariate skew polynomials #

Given a ring R and an endomorphism φ on R the skew polynomials over R are polynomials $$\sum_{i= 0}^n a_iX^n, n\geq 0, a_i\in R$$ where the addition is the usual addition of polynomials $$\sum_{i= 0}^n a_iX^n + \sum_{i= 0}^n b_iX^n= \sum_{i= 0}^n (a_i + b_i)X^n.$$ The multiplication, however, is determined by $$Xa = \varphi (a)X$$ by extending it to all polynomials in the obvious way.

Skew polynomials are represented as SkewMonoidAlgebra R (Multiplicative ℕ), where R is usually at least a Semiring. In this file, we define SkewPolynomial and provide basic instances.

Note: To register the endomorphism φ see notation below.

Notation #

The endomorphism φ is implemented using some action of Multiplicative on R. From this action, φ is an abbrev denoting $(\text{ofAdd } 1) \cdot a := \varphi(a)$.

Users that want to work with a specific map φ should introduce an action of Multiplicative on R. Specifying that this action is a MulSemiringAction amounts to saying that φ is an endomorphism.

Furthermore, with this notation φ^[n](a) = (ofAdd n) • a, see φ_iterate_apply.

Main definitions #

Implementation notes #

The implementation uses Multiplicative instead of , since Mathlib does not contain an additive version of SkewMonoidAlgebra.

This decision was made because we use the type class MulSemiringAction to specify the properties the action needs to respect for associativity. There is no version of this in Mathlib that uses an acting AddMonoid M and so we need to use Multiplicative for the action.

For associativity to hold, there should be an instance of MulSemiringAction (Multiplicative ℕ) R present in the context. For example, in the context of $\mathbb{F}_q$-linear polynomials, this can be the $q$-th Frobenius endomorphism - so $\varphi(a) = a^q$.

Reference #

The definition is inspired by Chapter 3 of [Pap23].

Tags #

Skew Polynomials, Twisted Polynomials.

Note that [Ore33] proposes a more general definition of skew polynomial ring, where the multiplication is determined by $Xa = \varphi (a)X + δ (a)$, where φ is as above and δ is a derivation.

@[reducible, inline]
abbrev SkewPolynomial (R : Type u_1) [AddCommMonoid R] :
Type u_1

The skew polynomials over R is the type of univariate polynomials over R endowed with a skewed convolution product.

Equations
Instances For
    theorem SkewPolynomial.zero_def {R : Type u_1} [Semiring R] :
    0 = 0

    The set of all n such that X^n has a non-zero coefficient.

    Equations
    Instances For
      @[simp]
      @[simp]
      def SkewPolynomial.coeff {R : Type u_1} [Semiring R] (p : SkewPolynomial R) :
      R

      coeff p n is the coefficient of X ^ n in p.

      Equations
      Instances For
        @[simp]
        theorem SkewPolynomial.mem_support_iff {R : Type u_1} {n : } [Semiring R] {p : SkewPolynomial R} :
        n p.support p.coeff n 0
        theorem SkewPolynomial.notMem_support_iff {R : Type u_1} {n : } [Semiring R] {p : SkewPolynomial R} :
        np.support p.coeff n = 0
        def SkewPolynomial.sum {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (p : SkewPolynomial R) (f : RS) :
        S

        p.sum f is ∑ n ∈ p.support, f n (p.coeff n), i.e., one sums the values of functions applied to coefficients of the polynomial p.

        Equations
        Instances For
          theorem SkewPolynomial.sum_def' {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (p : SkewPolynomial R) (f : RS) :

          For a skew polynomial p, p.sum f can be written in terms of SkewMonoidAlgebra.sum p.

          theorem SkewPolynomial.sum_def {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (p : SkewPolynomial R) (f : RS) :
          p.sum f = np.support, f n (p.coeff n)
          theorem SkewPolynomial.sum_sum_index {R : Type u_1} [Semiring R] {R' : Type u_5} {P : Type u_6} [AddCommMonoid P] [Semiring R'] {f : SkewPolynomial R} {g : RSkewPolynomial R'} {h : R'P} (h_zero : ∀ (a : ), h a 0 = 0) (h_add : ∀ (a : ) (b₁ b₂ : R'), h a (b₁ + b₂) = h a b₁ + h a b₂) :
          (f.sum g).sum h = f.sum fun (a : ) (b : R) => (g a b).sum h
          @[simp]
          theorem SkewPolynomial.sum_zero {R : Type u_1} [Semiring R] {N : Type u_5} [AddCommMonoid N] {f : SkewPolynomial R} :
          (f.sum fun (x : ) (x_1 : R) => 0) = 0
          noncomputable def SkewPolynomial.monomial {R : Type u_1} (n : ) [Semiring R] :

          monomial s a is the monomial a * X ^ s.

          Equations
          Instances For
            theorem SkewPolynomial.monomial_add {R : Type u_1} (n : ) [Semiring R] (r s : R) :
            (monomial n) (r + s) = (monomial n) r + (monomial n) s
            theorem SkewPolynomial.smul_monomial {R : Type u_1} (n : ) [Semiring R] {S : Type u_5} [Semiring S] [Module S R] (a : S) (b : R) :
            a (monomial n) b = (monomial n) (a b)
            @[simp]
            theorem SkewPolynomial.sum_monomial {R : Type u_1} [Semiring R] (f : SkewPolynomial R) :
            (f.sum fun (a : ) => (monomial a)) = f
            @[simp]
            theorem SkewPolynomial.sum_monomial_index {R : Type u_1} [Semiring R] {N : Type u_5} [AddCommMonoid N] {n : } {b : R} {h : RN} (h_zero : h n 0 = 0) :
            ((monomial n) b).sum h = h n b
            @[simp]
            theorem SkewPolynomial.monomial_eq_zero_iff {R : Type u_1} (n : ) [Semiring R] (t : R) :
            (monomial n) t = 0 t = 0
            theorem SkewPolynomial.monomial_eq_monomial_iff {R : Type u_1} [Semiring R] {m n : } {a b : R} :
            (monomial m) a = (monomial n) b m = n a = b a = 0 b = 0
            theorem SkewPolynomial.induction {R : Type u_1} [Semiring R] {motive : SkewPolynomial RProp} (p : SkewPolynomial R) (h0 : motive 0) (ha : ∀ (n : ) (r : R) (q : SkewPolynomial R), nq.supportr 0motive qmotive ((monomial n) r + q)) :
            motive p
            @[reducible, inline]

            Ring homomorphism associated to the twist of the skew polynomial ring. The multiplication in a skew polynomial ring is given by xr = φ(r)x.

            Equations
            Instances For
              theorem SkewPolynomial.monomial_mul_monomial {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (n m : ) (r s : R) :
              (monomial n) r * (monomial m) s = (monomial (n + m)) (r * (⇑φ)^[n] s)
              theorem SkewPolynomial.mul_def {R : Type u_1} [Semiring R] {f g : SkewPolynomial R} [MulSemiringAction (Multiplicative ) R] :
              f * g = f.sum fun (a₁ : ) (b₁ : R) => g.sum fun (a₂ : ) (b₂ : R) => (monomial (a₁ + a₂)) (b₁ * (⇑φ)^[a₁] b₂)
              noncomputable def SkewPolynomial.C {R : Type u_1} [Semiring R] :

              C a is the constant SkewPolynomial a. C is provided as an additive homomorphism.

              Equations
              Instances For
                @[simp]
                theorem SkewPolynomial.monomial_zero_left {R : Type u_1} [Semiring R] a : R :
                (monomial 0) a = C a
                theorem SkewPolynomial.C_0 {R : Type u_1} [Semiring R] :
                C 0 = 0
                theorem SkewPolynomial.C_add {R : Type u_1} [Semiring R] {a b : R} :
                C (a + b) = C a + C b
                theorem SkewPolynomial.C_1 {R : Type u_1} [Semiring R] :
                C 1 = 1
                @[simp]
                theorem SkewPolynomial.sum_C_index {R : Type u_1} [Semiring R] {a : R} {β : Type u_5} [AddCommMonoid β] {f : Rβ} (h : f 0 0 = 0) :
                (C a).sum f = f 0 a

                CRingHom a is the constant SkewPolynomial a, as a ring homomorphism. This requires [MulSemiringAction (Multiplicative ℕ) R].

                Equations
                Instances For
                  theorem SkewPolynomial.C_mul {R : Type u_1} [Semiring R] {a b : R} [MulSemiringAction (Multiplicative ) R] :
                  C (a * b) = C a * C b
                  theorem SkewPolynomial.C_pow {R : Type u_1} {n : } [Semiring R] {a : R} [MulSemiringAction (Multiplicative ) R] :
                  C (a ^ n) = C a ^ n
                  @[simp]
                  theorem SkewPolynomial.C_mul_monomial {R : Type u_1} {n : } [Semiring R] {a b : R} [MulSemiringAction (Multiplicative ) R] :
                  C a * (monomial n) b = (monomial n) (a * b)
                  @[simp]
                  theorem SkewPolynomial.monomial_mul_C {R : Type u_1} {n : } [Semiring R] {a b : R} [MulSemiringAction (Multiplicative ) R] :
                  (monomial n) a * C b = (monomial n) (a * (⇑φ)^[n] b)
                  noncomputable def SkewPolynomial.X {R : Type u_1} [Semiring R] :

                  X is the SkewPolynomial variable (aka indeterminate).

                  Equations
                  Instances For
                    theorem SkewPolynomial.X_mul {R : Type u_1} [Semiring R] {p : SkewPolynomial R} [MulSemiringAction (Multiplicative ) R] :
                    X * p = (p.sum fun (a : ) (b : R) => (monomial a) (φ b)) * X
                    theorem SkewPolynomial.X_pow_mul {R : Type u_1} [Semiring R] {p : SkewPolynomial R} [MulSemiringAction (Multiplicative ) R] {n : } :
                    X ^ n * p = (p.sum fun (a : ) (b : R) => (monomial a) ((⇑φ)^[n] b)) * X ^ n
                    @[simp]
                    theorem SkewPolynomial.monomial_mul_X {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (n : ) (r : R) :
                    (monomial n) r * X = (monomial (n + 1)) r
                    @[simp]
                    theorem SkewPolynomial.monomial_mul_X_pow {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (n : ) (r : R) (k : ) :
                    (monomial n) r * X ^ k = (monomial (n + k)) r
                    @[simp]
                    theorem SkewPolynomial.X_mul_monomial {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (n : ) (r : R) :
                    X * (monomial n) r = (monomial (n + 1)) (φ r)
                    @[simp]
                    theorem SkewPolynomial.X_pow_mul_monomial {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (k n : ) (r : R) :
                    X ^ k * (monomial n) r = (monomial (n + k)) ((⇑φ)^[k] r)
                    theorem SkewPolynomial.coeff_monomial {R : Type u_1} {m n : } [Semiring R] {a : R} :
                    ((monomial n) a).coeff m = if n = m then a else 0
                    @[simp]
                    theorem SkewPolynomial.coeff_zero {R : Type u_1} [Semiring R] (n : ) :
                    coeff 0 n = 0
                    @[simp]
                    theorem SkewPolynomial.coeff_X_one {R : Type u_1} [Semiring R] :
                    X.coeff 1 = 1
                    @[simp]
                    theorem SkewPolynomial.coeff_X_zero {R : Type u_1} [Semiring R] :
                    X.coeff 0 = 0
                    @[simp]
                    theorem SkewPolynomial.coeff_monomial_succ {R : Type u_1} {n : } [Semiring R] {a : R} :
                    ((monomial (n + 1)) a).coeff 0 = 0
                    theorem SkewPolynomial.coeff_X {R : Type u_1} {n : } [Semiring R] :
                    X.coeff n = if 1 = n then 1 else 0
                    theorem SkewPolynomial.coeff_X_of_ne_one {R : Type u_1} [Semiring R] {n : } (hn : n 1) :
                    X.coeff n = 0
                    theorem SkewPolynomial.coeff_C {R : Type u_1} {n : } [Semiring R] {a : R} :
                    (C a).coeff n = if n = 0 then a else 0
                    @[simp]
                    theorem SkewPolynomial.coeff_C_zero {R : Type u_1} [Semiring R] {a : R} :
                    (C a).coeff 0 = a
                    theorem SkewPolynomial.coeff_C_ne_zero {R : Type u_1} {n : } [Semiring R] {a : R} (h : n 0) :
                    (C a).coeff n = 0
                    @[simp]
                    theorem SkewPolynomial.coeff_C_succ {R : Type u_1} [Semiring R] {r : R} {n : } :
                    (C r).coeff (n + 1) = 0
                    @[simp]
                    theorem SkewPolynomial.coeff_natCast_ite {R : Type u_1} {m n : } [Semiring R] [MulSemiringAction (Multiplicative ) R] :
                    (↑m).coeff n = ↑(if n = 0 then m else 0)
                    @[simp]
                    @[simp]
                    theorem SkewPolynomial.C_inj {R : Type u_1} [Semiring R] {a b : R} :
                    C a = C b a = b
                    @[simp]
                    theorem SkewPolynomial.C_eq_zero {R : Type u_1} [Semiring R] {a : R} :
                    C a = 0 a = 0
                    theorem SkewPolynomial.ext_iff {R : Type u_1} [Semiring R] {p q : SkewPolynomial R} :
                    p = q ∀ (n : ), p.coeff n = q.coeff n
                    theorem SkewPolynomial.ext {R : Type u_1} [Semiring R] {p q : SkewPolynomial R} :
                    (∀ (n : ), p.coeff n = q.coeff n)p = q
                    theorem SkewPolynomial.addHom_ext' {R : Type u_1} [Semiring R] {M : Type u_5} [AddMonoid M] {f g : SkewPolynomial R →+ M} (h : ∀ (n : ), f.comp (monomial n).toAddMonoidHom = g.comp (monomial n).toAddMonoidHom) :
                    f = g
                    theorem SkewPolynomial.addHom_ext {R : Type u_1} [Semiring R] {M : Type u_5} [AddMonoid M] {f g : SkewPolynomial R →+ M} (h : ∀ (n : ) (a : R), f ((monomial n) a) = g ((monomial n) a)) :
                    f = g
                    theorem SkewPolynomial.addHom_ext_iff {R : Type u_1} [Semiring R] {M : Type u_5} [AddMonoid M] {f g : SkewPolynomial R →+ M} :
                    f = g ∀ (n : ) (a : R), f ((monomial n) a) = g ((monomial n) a)
                    theorem SkewPolynomial.linearMap_ext' {R : Type u_1} [Semiring R] {M : Type u_5} [AddCommMonoid M] [Module R M] {f g : SkewPolynomial R →ₗ[R] M} (h : ∀ (n : ), f ∘ₗ monomial n = g ∘ₗ monomial n) :
                    f = g
                    theorem SkewPolynomial.linearMap_ext'_iff {R : Type u_1} [Semiring R] {M : Type u_5} [AddCommMonoid M] [Module R M] {f g : SkewPolynomial R →ₗ[R] M} :
                    f = g ∀ (n : ), f ∘ₗ monomial n = g ∘ₗ monomial n
                    theorem SkewPolynomial.eq_zero_of_eq_zero {R : Type u_1} [Semiring R] (h : 0 = 1) (p : SkewPolynomial R) :
                    p = 0
                    @[simp]
                    theorem SkewPolynomial.support_monomial {R : Type u_1} [Semiring R] (n : ) {a : R} (h : a 0) :
                    ((monomial n) a).support = {n}
                    theorem SkewPolynomial.support_monomial_subset {R : Type u_1} [Semiring R] (n : ) {a : R} :
                    @[simp]
                    theorem SkewPolynomial.support_C {R : Type u_1} [Semiring R] {a : R} (h : a 0) :
                    (C a).support = {0}
                    theorem SkewPolynomial.support_C_subset {R : Type u_1} [Semiring R] (a : R) :
                    @[simp]
                    theorem SkewPolynomial.support_C_mul_X {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] {c : R} (h : c 0) :
                    (C c * X).support = {1}
                    @[simp]
                    theorem SkewPolynomial.support_C_mul_X_pow {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (n : ) {c : R} (h : c 0) :
                    (C c * X ^ n).support = {n}
                    theorem SkewPolynomial.support_binomial_subset {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (k m : ) (x y : R) :
                    (C x * X ^ k + C y * X ^ m).support {k, m}
                    theorem SkewPolynomial.support_trinomial_subset {R : Type u_1} [Semiring R] [MulSemiringAction (Multiplicative ) R] (k m n : ) (x y z : R) :
                    (C x * X ^ k + C y * X ^ m + C z * X ^ n).support {k, m, n}
                    theorem SkewPolynomial.monomial_left_inj {R : Type u_5} [Semiring R] {a : R} (ha : a 0) {i j : } :
                    (monomial i) a = (monomial j) a i = j
                    theorem SkewPolynomial.sum_eq_of_subset {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] {p : SkewPolynomial R} (f : RS) (hf : ∀ (i : ), f i 0 = 0) {s : Finset } (hs : p.support s) :
                    p.sum f = ns, f n (p.coeff n)
                    @[simp]
                    theorem SkewPolynomial.sum_zero_index {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (f : RS) :
                    sum 0 f = 0
                    @[simp]
                    theorem SkewPolynomial.sum_X_index {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] {f : RS} (hf : f 1 0 = 0) :
                    X.sum f = f 1 1
                    theorem SkewPolynomial.sum_add_index {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (p q : SkewPolynomial R) (f : RS) (hf : ∀ (i : ), f i 0 = 0) (h_add : ∀ (a : ) (b₁ b₂ : R), f a (b₁ + b₂) = f a b₁ + f a b₂) :
                    (p + q).sum f = p.sum f + q.sum f
                    @[simp]
                    theorem SkewPolynomial.sum_add' {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (p : SkewPolynomial R) (f g : RS) :
                    p.sum (f + g) = p.sum f + p.sum g

                    See also SkewPolynomial.sum_add.

                    @[simp]
                    theorem SkewPolynomial.sum_add {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (p : SkewPolynomial R) (f g : RS) :
                    (p.sum fun (n : ) (x : R) => f n x + g n x) = p.sum f + p.sum g

                    See also SkewPolynomial.sum_add'.

                    theorem SkewPolynomial.sum_smul_index {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] (p : SkewPolynomial R) (b : R) (f : RS) (hf : ∀ (i : ), f i 0 = 0) :
                    (b p).sum f = p.sum fun (n : ) (a : R) => f n (b * a)

                    See also SkewPolynomial.sum_smul_index' for a version using smul on the RHS.

                    theorem SkewPolynomial.sum_smul_index' {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] {T : Type u_6} [DistribSMul T R] (p : SkewPolynomial R) (b : T) (f : RS) (hf : ∀ (i : ), f i 0 = 0) :
                    (b p).sum f = p.sum fun (n : ) (a : R) => f n (b a)

                    See also SkewPolynomial.sum_smul_index for a version using multiplication on the RHS.

                    theorem SkewPolynomial.smul_sum {R : Type u_1} [Semiring R] {S : Type u_5} [AddCommMonoid S] {T : Type u_6} [DistribSMul T S] (p : SkewPolynomial R) (b : T) (f : RS) :
                    b p.sum f = p.sum fun (n : ) (a : R) => b f n a
                    @[simp]
                    theorem SkewPolynomial.coeff_add {R : Type u_1} [Semiring R] (p q : SkewPolynomial R) (n : ) :
                    (p + q).coeff n = p.coeff n + q.coeff n
                    @[simp]
                    theorem SkewPolynomial.sum_neg {R : Type u_1} [Ring R] {S : Type u_2} [Ring S] (p : SkewPolynomial R) (f : RS) :
                    (p.sum fun (n : ) (x : R) => -f n x) = -p.sum f
                    @[simp]
                    theorem SkewPolynomial.sum_sub {R : Type u_1} [Ring R] {S : Type u_2} [Ring S] (p : SkewPolynomial R) (f g : RS) :
                    (p.sum fun (n : ) (x : R) => f n x - g n x) = p.sum f - p.sum g
                    @[simp]
                    theorem SkewPolynomial.coeff_neg {R : Type u_1} [Ring R] (p : SkewPolynomial R) (n : ) :
                    (-p).coeff n = -p.coeff n
                    @[simp]
                    theorem SkewPolynomial.coeff_sub {R : Type u_1} [Ring R] (p q : SkewPolynomial R) (n : ) :
                    (p - q).coeff n = p.coeff n - q.coeff n
                    @[simp]
                    theorem SkewPolynomial.monomial_neg {R : Type u_1} [Ring R] (n : ) (a : R) :
                    (monomial n) (-a) = -(monomial n) a
                    @[simp]
                    theorem SkewPolynomial.support_neg {R : Type u_1} [Ring R] {p : SkewPolynomial R} :
                    theorem SkewPolynomial.monomial_sub {R : Type u_1} [Ring R] {a b : R} (n : ) :
                    (monomial n) (a - b) = (monomial n) a - (monomial n) b
                    theorem SkewPolynomial.C_neg {R : Type u_1} [Ring R] {a : R} [MulSemiringAction (Multiplicative ) R] :
                    C (-a) = -C a
                    theorem SkewPolynomial.C_sub {R : Type u_1} [Ring R] {a b : R} [MulSemiringAction (Multiplicative ) R] :
                    C (a - b) = C a - C b
                    noncomputable def SkewPolynomial.erase {R : Type u_1} [Semiring R] (n : ) (p : SkewPolynomial R) :

                    erase p n is the polynomial p in which the X ^ n term has been erased.

                    Equations
                    Instances For
                      @[simp]
                      theorem SkewPolynomial.support_erase {R : Type u_1} [Semiring R] {p : SkewPolynomial R} (n : ) :
                      theorem SkewPolynomial.monomial_add_erase {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) :
                      (monomial n) (p.coeff n) + erase n p = p
                      theorem SkewPolynomial.coeff_erase {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n i : ) :
                      (erase n p).coeff i = if i = n then 0 else p.coeff i
                      @[simp]
                      theorem SkewPolynomial.erase_zero {R : Type u_1} [Semiring R] (n : ) :
                      erase n 0 = 0
                      @[simp]
                      theorem SkewPolynomial.erase_monomial {R : Type u_1} [Semiring R] {n : } {a : R} :
                      erase n ((monomial n) a) = 0
                      @[simp]
                      theorem SkewPolynomial.erase_same {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) :
                      (erase n p).coeff n = 0
                      @[simp]
                      theorem SkewPolynomial.erase_ne {R : Type u_1} [Semiring R] (p : SkewPolynomial R) {n i : } (h : i n) :
                      (erase n p).coeff i = p.coeff i
                      noncomputable def SkewPolynomial.update {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) (a : R) :

                      Replace the coefficient of a p : SkewPolynomial R at a given degree n : ℕ by a given value a : R. If a = 0, this is equal to p.erase n If p.natDegree < n and a ≠ 0, this increases the degree to n.

                      Equations
                      Instances For
                        theorem SkewPolynomial.coeff_update {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) (a : R) :
                        theorem SkewPolynomial.coeff_update_apply {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) (a : R) (i : ) :
                        (p.update n a).coeff i = if i = n then a else p.coeff i
                        @[simp]
                        theorem SkewPolynomial.coeff_update_same {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) (a : R) :
                        (p.update n a).coeff n = a
                        theorem SkewPolynomial.coeff_update_ne {R : Type u_1} [Semiring R] (p : SkewPolynomial R) {n i : } (a : R) (h : i n) :
                        (p.update n a).coeff i = p.coeff i
                        @[simp]
                        theorem SkewPolynomial.update_zero_eq_erase {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) :
                        p.update n 0 = erase n p
                        theorem SkewPolynomial.support_update {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) (a : R) [DecidableEq R] :
                        theorem SkewPolynomial.support_update_ne_zero {R : Type u_1} [Semiring R] (p : SkewPolynomial R) (n : ) {a : R} (ha : a 0) :