Polynomials in commutative semirings

Content created by Louis Wasserman.

Created on 2025-09-09.
Last modified on 2025-09-11.

{-# OPTIONS --lossy-unification #-}

module commutative-algebra.polynomials-commutative-semirings where
Imports
open import commutative-algebra.commutative-semirings
open import commutative-algebra.formal-power-series-commutative-semirings
open import commutative-algebra.homomorphisms-commutative-semirings
open import commutative-algebra.powers-of-elements-commutative-semirings
open import commutative-algebra.sums-of-finite-families-of-elements-commutative-semirings
open import commutative-algebra.sums-of-finite-sequences-of-elements-commutative-semirings

open import elementary-number-theory.addition-natural-numbers
open import elementary-number-theory.binary-sum-decompositions-natural-numbers
open import elementary-number-theory.inequality-natural-numbers
open import elementary-number-theory.maximum-natural-numbers
open import elementary-number-theory.natural-numbers
open import elementary-number-theory.strict-inequality-natural-numbers

open import foundation.action-on-identifications-functions
open import foundation.cartesian-product-types
open import foundation.coproduct-types
open import foundation.dependent-pair-types
open import foundation.empty-types
open import foundation.equivalences
open import foundation.existential-quantification
open import foundation.function-types
open import foundation.identity-types
open import foundation.propositional-truncations
open import foundation.propositions
open import foundation.sets
open import foundation.subtypes
open import foundation.transport-along-identifications
open import foundation.unital-binary-operations
open import foundation.universal-property-propositional-truncation-into-sets
open import foundation.universe-levels

open import group-theory.commutative-monoids
open import group-theory.submonoids-commutative-monoids

open import lists.sequences

open import ring-theory.semirings

open import univalent-combinatorics.cartesian-product-types
open import univalent-combinatorics.coproduct-types
open import univalent-combinatorics.dependent-pair-types
open import univalent-combinatorics.finite-types
open import univalent-combinatorics.standard-finite-types

Idea

A polynomial in a commutative semiring is a formal power series Σₙ aₙxⁿ whose coefficients aₙ are zero for sufficiently large n.

Definition

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  is-degree-bound-prop-formal-power-series-Commutative-Semiring :
    formal-power-series-Commutative-Semiring R    Prop l
  is-degree-bound-prop-formal-power-series-Commutative-Semiring
    ( formal-power-series-coefficients-Commutative-Semiring a)
    ( N) =
    Π-Prop
      ( )
      ( λ n 
        hom-Prop (leq-ℕ-Prop N n) (is-zero-prop-Commutative-Semiring R (a n)))

  is-degree-bound-formal-power-series-Commutative-Semiring :
    formal-power-series-Commutative-Semiring R    UU l
  is-degree-bound-formal-power-series-Commutative-Semiring p n =
    type-Prop
      ( is-degree-bound-prop-formal-power-series-Commutative-Semiring p n)

  is-polynomial-prop-formal-power-series-Commutative-Semiring :
    formal-power-series-Commutative-Semiring R  Prop l
  is-polynomial-prop-formal-power-series-Commutative-Semiring a =
      (is-degree-bound-prop-formal-power-series-Commutative-Semiring a)

  is-polynomial-formal-power-series-Commutative-Semiring :
    formal-power-series-Commutative-Semiring R  UU l
  is-polynomial-formal-power-series-Commutative-Semiring a =
    type-Prop (is-polynomial-prop-formal-power-series-Commutative-Semiring a)

polynomial-Commutative-Semiring :
  {l : Level}  (R : Commutative-Semiring l)  UU l
polynomial-Commutative-Semiring R =
  type-subtype
    ( is-polynomial-prop-formal-power-series-Commutative-Semiring {R = R})

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  polynomial-add-degree-formal-power-series-Commutative-Semiring :
    (p : formal-power-series-Commutative-Semiring R) 
    (N : ) 
    ( (n : ) 
      is-zero-Commutative-Semiring R
        ( coefficient-formal-power-series-Commutative-Semiring p (n +ℕ N))) 
    polynomial-Commutative-Semiring R
  polynomial-add-degree-formal-power-series-Commutative-Semiring
    ( formal-power-series-coefficients-Commutative-Semiring p) N H =
    ( formal-power-series-coefficients-Commutative-Semiring p ,
      intro-exists
        ( N)
        ( λ n N≤n 
          let (m , m+N=n) = subtraction-leq-ℕ N n N≤n
          in tr (is-zero-Commutative-Semiring R  p) m+N=n (H m)))

module _
  {l : Level} {R : Commutative-Semiring l}
  (p : polynomial-Commutative-Semiring R)
  where

  formal-power-series-polynomial-Commutative-Semiring :
    formal-power-series-Commutative-Semiring R
  formal-power-series-polynomial-Commutative-Semiring = pr1 p

  coefficient-polynomial-Commutative-Semiring :
    sequence (type-Commutative-Semiring R)
  coefficient-polynomial-Commutative-Semiring =
    coefficient-formal-power-series-Commutative-Semiring
      ( formal-power-series-polynomial-Commutative-Semiring)

  is-polynomial-formal-power-series-polynomial-Commutative-Semiring :
    is-polynomial-formal-power-series-Commutative-Semiring
      ( formal-power-series-polynomial-Commutative-Semiring)
  is-polynomial-formal-power-series-polynomial-Commutative-Semiring = pr2 p

Properties

The constant zero polynomial

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  zero-polynomial-Commutative-Semiring : polynomial-Commutative-Semiring R
  zero-polynomial-Commutative-Semiring =
    polynomial-add-degree-formal-power-series-Commutative-Semiring
      ( zero-formal-power-series-Commutative-Semiring R)
      ( zero-ℕ)
      ( λ _  refl)

The constant one polynomial

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  one-polynomial-Commutative-Semiring : polynomial-Commutative-Semiring R
  one-polynomial-Commutative-Semiring =
    polynomial-add-degree-formal-power-series-Commutative-Semiring
      ( one-formal-power-series-Commutative-Semiring R)
      ( 1)
      ( λ _  refl)

Constant polynomials

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  constant-polynomial-Commutative-Semiring :
    type-Commutative-Semiring R  polynomial-Commutative-Semiring R
  constant-polynomial-Commutative-Semiring c =
    polynomial-add-degree-formal-power-series-Commutative-Semiring
      ( constant-formal-power-series-Commutative-Semiring R c)
      ( 1)
      ( λ _  refl)

The identity polynomial

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  id-polynomial-Commutative-Semiring : polynomial-Commutative-Semiring R
  id-polynomial-Commutative-Semiring =
    polynomial-add-degree-formal-power-series-Commutative-Semiring
      ( id-formal-power-series-Commutative-Semiring R)
      ( 2)
      ( λ _  refl)

The set of polynomials

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  set-polynomial-Commutative-Semiring : Set l
  set-polynomial-Commutative-Semiring =
    set-subset
      ( set-formal-power-series-Commutative-Semiring R)
      ( is-polynomial-prop-formal-power-series-Commutative-Semiring)

Equality of polynomials

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  eq-polynomial-Commutative-Semiring :
    {p q : polynomial-Commutative-Semiring R} 
    ( formal-power-series-polynomial-Commutative-Semiring p 
      formal-power-series-polynomial-Commutative-Semiring q) 
    p  q
  eq-polynomial-Commutative-Semiring =
    eq-type-subtype is-polynomial-prop-formal-power-series-Commutative-Semiring

The constant zero polynomial is the constant polynomial with value zero

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  constant-zero-polynomial-Commutative-Semiring :
    constant-polynomial-Commutative-Semiring R (zero-Commutative-Semiring R) 
    zero-polynomial-Commutative-Semiring R
  constant-zero-polynomial-Commutative-Semiring =
    eq-polynomial-Commutative-Semiring R
      ( constant-zero-formal-power-series-Commutative-Semiring R)

The constant one polynomial is the constant polynomial with value one

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  constant-one-polynomial-Commutative-Semiring :
    constant-polynomial-Commutative-Semiring R (one-Commutative-Semiring R) 
    one-polynomial-Commutative-Semiring R
  constant-one-polynomial-Commutative-Semiring =
    eq-polynomial-Commutative-Semiring R
      ( constant-one-formal-power-series-Commutative-Semiring R)

Evaluation of polynomials

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  ev-degree-bound-formal-power-series-Commutative-Semiring :
    (p : formal-power-series-Commutative-Semiring R) 
    type-Commutative-Semiring R 
    Σ  (is-degree-bound-formal-power-series-Commutative-Semiring p) 
    type-Commutative-Semiring R
  ev-degree-bound-formal-power-series-Commutative-Semiring p x (N , N≤n→pn=0) =
    sum-fin-sequence-type-Commutative-Semiring R N
      ( term-ev-formal-power-series-Commutative-Semiring p x  nat-Fin N)

  abstract
    eq-ev-degree-bound-formal-power-series-Commutative-Semiring :
      (p : formal-power-series-Commutative-Semiring R) 
      (x : type-Commutative-Semiring R) 
      (b1 b2 :
        Σ  (is-degree-bound-formal-power-series-Commutative-Semiring p)) 
      ev-degree-bound-formal-power-series-Commutative-Semiring p x b1 
      ev-degree-bound-formal-power-series-Commutative-Semiring p x b2
    eq-ev-degree-bound-formal-power-series-Commutative-Semiring
      p@(formal-power-series-coefficients-Commutative-Semiring c) x
      (N₁ , N₁≤n→pn=0) (N₂ , N₂≤n→pn=0) =
      rec-coproduct
        ( λ N₁≤N₂  inv (case N₁ N₁≤n→pn=0 N₂ N₂≤n→pn=0 N₁≤N₂))
        ( λ N₂≤N₁  case N₂ N₂≤n→pn=0 N₁ N₁≤n→pn=0 N₂≤N₁)
        ( linear-leq-ℕ N₁ N₂)
      where
        case :
          (Na : )
          (Ha : (n : )  leq-ℕ Na n  is-zero-Commutative-Semiring R (c n)) 
          (Nb : ) 
          (Hb : (n : )  leq-ℕ Nb n  is-zero-Commutative-Semiring R (c n)) 
          leq-ℕ Na Nb 
          ev-degree-bound-formal-power-series-Commutative-Semiring
            ( p)
            ( x)
            ( Nb , Hb) 
          ev-degree-bound-formal-power-series-Commutative-Semiring
            ( p)
            ( x)
            ( Na , Ha)
        case Na Na≤n→pn=0 Nb Nb≤n→pn=0 Na≤Nb =
          let (Δ , Δ+Na=Nb) = subtraction-leq-ℕ Na Nb Na≤Nb
          in
            equational-reasoning
              sum-fin-sequence-type-Commutative-Semiring R Nb
                ( term-ev-formal-power-series-Commutative-Semiring p x 
                  nat-Fin Nb)
              
                sum-fin-sequence-type-Commutative-Semiring R (Na +ℕ Δ)
                  ( term-ev-formal-power-series-Commutative-Semiring p x 
                    nat-Fin (Na +ℕ Δ))
                by
                  ap
                     N 
                      sum-fin-sequence-type-Commutative-Semiring R N
                        ( term-ev-formal-power-series-Commutative-Semiring p x 
                          nat-Fin N))
                    (inv (commutative-add-ℕ Na Δ  Δ+Na=Nb))
              
                add-Commutative-Semiring R
                  ( sum-fin-sequence-type-Commutative-Semiring R Na
                    ( term-ev-formal-power-series-Commutative-Semiring p x 
                      nat-Fin (Na +ℕ Δ) 
                      inl-coproduct-Fin Na Δ))
                  ( sum-fin-sequence-type-Commutative-Semiring R Δ
                    ( term-ev-formal-power-series-Commutative-Semiring p x 
                      nat-Fin (Na +ℕ Δ) 
                      inr-coproduct-Fin Na Δ))
                by
                  split-sum-fin-sequence-type-Commutative-Semiring R Na Δ _
              
                add-Commutative-Semiring R
                  ( ev-degree-bound-formal-power-series-Commutative-Semiring
                    ( p)
                    ( x)
                    ( Na , Na≤n→pn=0))
                  ( sum-fin-sequence-type-Commutative-Semiring R Δ
                    ( λ _  zero-Commutative-Semiring R))
                by
                  ap-add-Commutative-Semiring R
                    ( htpy-sum-fin-sequence-type-Commutative-Semiring R Na
                      ( λ n 
                        ap
                          ( term-ev-formal-power-series-Commutative-Semiring
                            ( p)
                            ( x))
                          ( nat-inl-coproduct-Fin Na Δ n)))
                    ( htpy-sum-fin-sequence-type-Commutative-Semiring R Δ
                      ( λ n 
                        equational-reasoning
                          mul-Commutative-Semiring R
                            ( c (nat-Fin (Na +ℕ Δ) (inr-coproduct-Fin Na Δ n)))
                            ( power-Commutative-Semiring R
                              ( nat-Fin (Na +ℕ Δ) (inr-coproduct-Fin Na Δ n))
                              ( x))
                          
                            mul-Commutative-Semiring R
                              ( c (Na +ℕ nat-Fin Δ n))
                              ( _)
                            by
                              ap-mul-Commutative-Semiring R
                                ( ap c (nat-inr-coproduct-Fin Na Δ n))
                                ( refl)
                          
                            mul-Commutative-Semiring R
                              ( zero-Commutative-Semiring R)
                              ( _)
                            by
                              ap-mul-Commutative-Semiring R
                                ( Na≤n→pn=0
                                  ( Na +ℕ nat-Fin Δ n)
                                  ( leq-add-ℕ Na _))
                                ( refl)
                           zero-Commutative-Semiring R
                            by left-zero-law-mul-Commutative-Semiring R _))
              
                add-Commutative-Semiring R
                  ( ev-degree-bound-formal-power-series-Commutative-Semiring
                    ( p)
                    ( x)
                    ( Na , Na≤n→pn=0))
                  ( zero-Commutative-Semiring R)
                by
                  ap-add-Commutative-Semiring R refl
                    ( sum-zero-fin-sequence-type-Commutative-Semiring R Δ)
              
                ev-degree-bound-formal-power-series-Commutative-Semiring
                  ( p)
                  ( x)
                  (Na , Na≤n→pn=0)
                by right-unit-law-add-Commutative-Semiring R _

  ev-polynomial-Commutative-Semiring :
    polynomial-Commutative-Semiring R  type-Commutative-Semiring R 
    type-Commutative-Semiring R
  ev-polynomial-Commutative-Semiring (p , deg-bound-p) x =
    map-universal-property-set-quotient-trunc-Prop
      ( set-Commutative-Semiring R)
      ( ev-degree-bound-formal-power-series-Commutative-Semiring p x)
      ( eq-ev-degree-bound-formal-power-series-Commutative-Semiring p x)
      ( deg-bound-p)

  abstract
    eq-ev-polynomial-degree-bound-Commutative-Semiring :
      (p : polynomial-Commutative-Semiring R) 
      (x : type-Commutative-Semiring R) 
      (N : ) 
      (H : (n : )  leq-ℕ N n 
        is-zero-Commutative-Semiring R
          ( coefficient-polynomial-Commutative-Semiring p n)) 
      ev-polynomial-Commutative-Semiring p x 
      ev-degree-bound-formal-power-series-Commutative-Semiring
        ( formal-power-series-polynomial-Commutative-Semiring p)
        ( x)
        ( N , H)
    eq-ev-polynomial-degree-bound-Commutative-Semiring (p , is-poly-p) x N H =
      ap
        ( λ ipp  ev-polynomial-Commutative-Semiring (p , ipp) x)
        ( all-elements-equal-type-trunc-Prop
          ( is-poly-p)
          ( intro-exists N H)) 
      htpy-universal-property-set-quotient-trunc-Prop
        ( set-Commutative-Semiring R)
        ( ev-degree-bound-formal-power-series-Commutative-Semiring p x)
        ( eq-ev-degree-bound-formal-power-series-Commutative-Semiring p x)
        ( N , H)

Truncation of a formal power series into a polynomial

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  truncate-formal-power-series-Commutative-Semiring :
    (n : )  formal-power-series-Commutative-Semiring R 
    polynomial-Commutative-Semiring R
  truncate-formal-power-series-Commutative-Semiring
    ( n)
    ( formal-power-series-coefficients-Commutative-Semiring c) =
    let
      d : (k : )  (le-ℕ k n + leq-ℕ n k)  type-Commutative-Semiring R
      d = λ where
        k (inl k<n)  c k
        k (inr n≤k)  zero-Commutative-Semiring R
      deg-bound-d : (k : )  (H : le-ℕ k n + leq-ℕ n k)  leq-ℕ n k 
        is-zero-Commutative-Semiring R (d k H)
      deg-bound-d = λ where
        k (inl k<n) n≤k  ex-falso (contradiction-le-ℕ k n k<n n≤k)
        k (inr _) _  refl
    in
      ( formal-power-series-coefficients-Commutative-Semiring
        ( λ k  d k (decide-le-leq-ℕ k n)) ,
        intro-exists n  k n≤k  deg-bound-d k (decide-le-leq-ℕ k n) n≤k))

Addition of polynomials

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  abstract
    degree-bound-add-formal-power-series-Commutative-Semiring :
      (p q : formal-power-series-Commutative-Semiring R) 
      Σ  (is-degree-bound-formal-power-series-Commutative-Semiring p) 
      Σ  (is-degree-bound-formal-power-series-Commutative-Semiring q) 
      Σ 
        ( λ N 
          is-degree-bound-formal-power-series-Commutative-Semiring p N ×
          is-degree-bound-formal-power-series-Commutative-Semiring q N ×
          is-degree-bound-formal-power-series-Commutative-Semiring
            ( add-formal-power-series-Commutative-Semiring p q)
            ( N))
    degree-bound-add-formal-power-series-Commutative-Semiring
      ( formal-power-series-coefficients-Commutative-Semiring p)
      ( formal-power-series-coefficients-Commutative-Semiring q)
      ( Np , Hp)
      ( Nq , Hq) =
      let
        N = max-ℕ Np Nq
        case r Nr Hr Nr≤N n N≤n = Hr n (transitive-leq-ℕ Nr N n N≤n Nr≤N)
      in
        ( N ,
          case p Np Hp (left-leq-max-ℕ Np Nq) ,
          case q Nq Hq (right-leq-max-ℕ Np Nq) ,
          λ n N≤n 
            ap-add-Commutative-Semiring R
              ( case p Np Hp (left-leq-max-ℕ Np Nq) n N≤n)
              ( case q Nq Hq (right-leq-max-ℕ Np Nq) n N≤n) 
            left-unit-law-add-Commutative-Semiring R _)

    is-polynomial-add-polynomial-Commutative-Semiring :
      (p q : polynomial-Commutative-Semiring R) 
      is-polynomial-formal-power-series-Commutative-Semiring
        ( add-formal-power-series-Commutative-Semiring
          ( formal-power-series-polynomial-Commutative-Semiring p)
          ( formal-power-series-polynomial-Commutative-Semiring q))
    is-polynomial-add-polynomial-Commutative-Semiring
      (p , is-poly-p) (q , is-poly-q) =
      let
        open
          do-syntax-trunc-Prop
            ( is-polynomial-prop-formal-power-series-Commutative-Semiring _)
      in do
        (Np , Hp)  is-poly-p
        (Nq , Hq)  is-poly-q
        let
          (N , _ , _ , H) =
            degree-bound-add-formal-power-series-Commutative-Semiring
              ( p)
              ( q)
              ( Np , Hp)
              ( Nq , Hq)
        intro-exists N H

  add-polynomial-Commutative-Semiring :
    polynomial-Commutative-Semiring R 
    polynomial-Commutative-Semiring R 
    polynomial-Commutative-Semiring R
  add-polynomial-Commutative-Semiring (p , is-poly-p) (q , is-poly-q) =
    ( add-formal-power-series-Commutative-Semiring p q ,
      is-polynomial-add-polynomial-Commutative-Semiring
        ( p , is-poly-p)
        ( q , is-poly-q))

The sum of two polynomials, evaluated at x, is equal to the sum of each polynomial evaluated at x

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  abstract
    interchange-ev-add-polynomial-Commutative-Semiring :
      (p q : polynomial-Commutative-Semiring R) 
      (x : type-Commutative-Semiring R) 
      ev-polynomial-Commutative-Semiring
        ( add-polynomial-Commutative-Semiring p q)
        ( x) 
      add-Commutative-Semiring R
        ( ev-polynomial-Commutative-Semiring p x)
        ( ev-polynomial-Commutative-Semiring q x)
    interchange-ev-add-polynomial-Commutative-Semiring
      pp@(p , is-poly-p) qq@(q , is-poly-q) x =
      let
        open
          do-syntax-trunc-Prop
            ( Id-Prop
              ( set-Commutative-Semiring R)
              ( ev-polynomial-Commutative-Semiring
                ( add-polynomial-Commutative-Semiring pp qq)
                ( x))
              ( add-Commutative-Semiring R
                ( ev-polynomial-Commutative-Semiring pp x)
                ( ev-polynomial-Commutative-Semiring qq x)))
      in do
        (Np , Hp)  is-poly-p
        (Nq , Hq)  is-poly-q
        let
          (N , Hp' , Hq' , H) =
            degree-bound-add-formal-power-series-Commutative-Semiring
              ( p)
              ( q)
              ( Np , Hp)
              ( Nq , Hq)
        equational-reasoning
          ev-polynomial-Commutative-Semiring
            ( add-polynomial-Commutative-Semiring pp qq)
            ( x)
          
            ev-degree-bound-formal-power-series-Commutative-Semiring
              ( add-formal-power-series-Commutative-Semiring p q)
              ( x)
              ( N , H)
            by
              eq-ev-polynomial-degree-bound-Commutative-Semiring _ x N H
          
            sum-fin-sequence-type-Commutative-Semiring R N
              ( λ i  add-Commutative-Semiring R _ _)
            by
              htpy-sum-fin-sequence-type-Commutative-Semiring R N
                ( λ i 
                  right-distributive-mul-add-Commutative-Semiring R _ _ _)
          
            add-Commutative-Semiring R
              ( ev-degree-bound-formal-power-series-Commutative-Semiring
                ( p)
                ( x)
                ( N , Hp'))
              ( ev-degree-bound-formal-power-series-Commutative-Semiring
                ( q)
                ( x)
                ( N , Hq'))
            by
              inv
                ( interchange-add-sum-fin-sequence-type-Commutative-Semiring
                  ( R)
                  ( N)
                  ( _)
                  ( _))
          
            add-Commutative-Semiring R
              ( ev-polynomial-Commutative-Semiring pp x)
              ( ev-polynomial-Commutative-Semiring qq x)
            by
              ap-add-Commutative-Semiring R
                ( inv
                  ( eq-ev-polynomial-degree-bound-Commutative-Semiring
                    ( pp)
                    ( x)
                    ( N)
                    ( Hp')))
                ( inv
                  ( eq-ev-polynomial-degree-bound-Commutative-Semiring
                    ( qq)
                    ( x)
                    ( N)
                    ( Hq')))

The commutative monoid of addition of polynomials

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  additive-commutative-monoid-polynomial-Commutative-Semiring :
    Commutative-Monoid l
  additive-commutative-monoid-polynomial-Commutative-Semiring =
    commutative-monoid-Commutative-Submonoid
      ( additive-commutative-monoid-formal-power-series-Commutative-Semiring R)
      ( is-polynomial-prop-formal-power-series-Commutative-Semiring ,
        is-polynomial-formal-power-series-polynomial-Commutative-Semiring
          ( zero-polynomial-Commutative-Semiring R) ,
        ( λ p q is-poly-p is-poly-q 
          is-polynomial-add-polynomial-Commutative-Semiring
            ( p , is-poly-p)
            ( q , is-poly-q)))

Multiplication of polynomials

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  degree-bound-mul-formal-power-series-Commutative-Semiring :
    (p q : formal-power-series-Commutative-Semiring R) 
    Σ  (is-degree-bound-formal-power-series-Commutative-Semiring p) 
    Σ  (is-degree-bound-formal-power-series-Commutative-Semiring q) 
    Σ 
      ( is-degree-bound-formal-power-series-Commutative-Semiring
        ( mul-formal-power-series-Commutative-Semiring p q))
  degree-bound-mul-formal-power-series-Commutative-Semiring
    ( formal-power-series-coefficients-Commutative-Semiring p)
    ( formal-power-series-coefficients-Commutative-Semiring q)
    ( Np , Hp)
    ( Nq , Hq) =
    ( Nq +ℕ Np ,
      λ n Nq+Np≤n 
      equational-reasoning
        sum-finite-Commutative-Semiring R
          ( finite-type-binary-sum-decomposition-ℕ n)
          ( λ (i , j , j+i=n)  mul-Commutative-Semiring R (p i) (q j))
        
          sum-finite-Commutative-Semiring R
            ( finite-type-binary-sum-decomposition-ℕ n)
            ( λ _  zero-Commutative-Semiring R)
          by
            htpy-sum-finite-Commutative-Semiring R _
              ( λ (i , j , j+i=n) 
                rec-coproduct
                  ( λ i<Np 
                    rec-coproduct
                      ( λ j<Nq 
                        ex-falso
                          ( anti-reflexive-le-ℕ
                            ( n)
                            ( tr
                              ( λ m  le-ℕ m n)
                              ( j+i=n)
                              ( concatenate-le-leq-ℕ
                                ( preserves-le-add-ℕ j<Nq i<Np)
                                ( Nq+Np≤n)))))
                      ( λ Nq≤j 
                        ap-mul-Commutative-Semiring R refl (Hq j Nq≤j) 
                        right-zero-law-mul-Commutative-Semiring R _)
                      ( decide-le-leq-ℕ j Nq))
                  ( λ Np≤i 
                    ap-mul-Commutative-Semiring R (Hp i Np≤i) refl 
                    left-zero-law-mul-Commutative-Semiring R _)
                  ( decide-le-leq-ℕ i Np))
        
          zero-Commutative-Semiring R
          by sum-zero-finite-Commutative-Semiring R _)

  abstract
    is-polynomial-mul-polynomial-Commutative-Semiring :
      (p q : polynomial-Commutative-Semiring R) 
      is-polynomial-formal-power-series-Commutative-Semiring
        ( mul-formal-power-series-Commutative-Semiring
          ( formal-power-series-polynomial-Commutative-Semiring p)
          ( formal-power-series-polynomial-Commutative-Semiring q))
    is-polynomial-mul-polynomial-Commutative-Semiring
      (p , is-poly-p) (q , is-poly-q) =
      let
        open
          do-syntax-trunc-Prop
            ( is-polynomial-prop-formal-power-series-Commutative-Semiring
              ( mul-formal-power-series-Commutative-Semiring p q))
      in do
        (Np , Hp)  is-poly-p
        (Nq , Hq)  is-poly-q
        unit-trunc-Prop
          ( degree-bound-mul-formal-power-series-Commutative-Semiring
            ( p)
            ( q)
            ( Np , Hp)
            ( Nq , Hq))

  mul-polynomial-Commutative-Semiring :
    polynomial-Commutative-Semiring R 
    polynomial-Commutative-Semiring R 
    polynomial-Commutative-Semiring R
  mul-polynomial-Commutative-Semiring pp@(p , is-poly-p) qq@(q , is-poly-q) =
    ( mul-formal-power-series-Commutative-Semiring p q ,
      is-polynomial-mul-polynomial-Commutative-Semiring pp qq)

Commutative monoid laws of multiplication of polynomials

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  multiplicative-commutative-monoid-polynomial-Commutative-Semiring :
    Commutative-Monoid l
  multiplicative-commutative-monoid-polynomial-Commutative-Semiring =
    commutative-monoid-Commutative-Submonoid
      ( multiplicative-commutative-monoid-Commutative-Semiring
        ( commutative-semiring-formal-power-series-Commutative-Semiring R))
      ( is-polynomial-prop-formal-power-series-Commutative-Semiring ,
        is-polynomial-formal-power-series-polynomial-Commutative-Semiring
          ( one-polynomial-Commutative-Semiring R) ,
        ( λ p q is-poly-p is-poly-q 
          is-polynomial-mul-polynomial-Commutative-Semiring
            ( p , is-poly-p)
            ( q , is-poly-q)))

The commutative semiring of multiplication of polynomials

module _
  {l : Level} {R : Commutative-Semiring l}
  where

  abstract
    left-distributive-mul-add-polynomial-Commutative-Semiring :
      (x y z : polynomial-Commutative-Semiring R) 
      mul-polynomial-Commutative-Semiring x
        ( add-polynomial-Commutative-Semiring y z) 
      add-polynomial-Commutative-Semiring
        ( mul-polynomial-Commutative-Semiring x y)
        ( mul-polynomial-Commutative-Semiring x z)
    left-distributive-mul-add-polynomial-Commutative-Semiring
      (x , _) (y , _) (z , _) =
      eq-polynomial-Commutative-Semiring R
        ( left-distributive-mul-add-formal-power-series-Commutative-Semiring
          ( x)
          ( y)
          ( z))

    right-distributive-mul-add-polynomial-Commutative-Semiring :
      (x y z : polynomial-Commutative-Semiring R) 
      mul-polynomial-Commutative-Semiring
        ( add-polynomial-Commutative-Semiring x y)
        ( z) 
      add-polynomial-Commutative-Semiring
        ( mul-polynomial-Commutative-Semiring x z)
        ( mul-polynomial-Commutative-Semiring y z)
    right-distributive-mul-add-polynomial-Commutative-Semiring
      (x , _) (y , _) (z , _) =
      eq-polynomial-Commutative-Semiring R
        ( right-distributive-mul-add-formal-power-series-Commutative-Semiring
          ( x)
          ( y)
          ( z))

    left-zero-law-mul-polynomial-Commutative-Semiring :
      (x : polynomial-Commutative-Semiring R) 
      mul-polynomial-Commutative-Semiring
        ( zero-polynomial-Commutative-Semiring R)
        ( x) 
      zero-polynomial-Commutative-Semiring R
    left-zero-law-mul-polynomial-Commutative-Semiring (x , _) =
      eq-polynomial-Commutative-Semiring R
        ( left-zero-law-mul-formal-power-series-Commutative-Semiring x)

    right-zero-law-mul-polynomial-Commutative-Semiring :
      (x : polynomial-Commutative-Semiring R) 
      mul-polynomial-Commutative-Semiring
        ( x)
        ( zero-polynomial-Commutative-Semiring R) 
      zero-polynomial-Commutative-Semiring R
    right-zero-law-mul-polynomial-Commutative-Semiring (x , _) =
      eq-polynomial-Commutative-Semiring R
        ( right-zero-law-mul-formal-power-series-Commutative-Semiring x)

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  has-unit-mul-polynomial-Commutative-Semiring :
    is-unital (mul-polynomial-Commutative-Semiring {R = R})
  has-unit-mul-polynomial-Commutative-Semiring =
    has-unit-Commutative-Monoid
      ( multiplicative-commutative-monoid-polynomial-Commutative-Semiring R)

  semiring-polynomial-Commutative-Semiring : Semiring l
  semiring-polynomial-Commutative-Semiring =
    ( additive-commutative-monoid-polynomial-Commutative-Semiring R ,
      ( ( mul-polynomial-Commutative-Semiring ,
          associative-mul-Commutative-Monoid
            ( multiplicative-commutative-monoid-polynomial-Commutative-Semiring
              ( R))) ,
        has-unit-mul-polynomial-Commutative-Semiring ,
        left-distributive-mul-add-polynomial-Commutative-Semiring ,
        right-distributive-mul-add-polynomial-Commutative-Semiring) ,
      left-zero-law-mul-polynomial-Commutative-Semiring ,
      right-zero-law-mul-polynomial-Commutative-Semiring)

  commutative-semiring-polynomial-Commutative-Semiring : Commutative-Semiring l
  commutative-semiring-polynomial-Commutative-Semiring =
    ( semiring-polynomial-Commutative-Semiring ,
      commutative-mul-Commutative-Monoid
        ( multiplicative-commutative-monoid-polynomial-Commutative-Semiring R))

The constant polynomial operation is a commutative semiring homomorphism

module _
  {l : Level} (R : Commutative-Semiring l)
  where

  abstract
    preserves-mul-constant-polynomial-Commutative-Semiring :
      {x y : type-Commutative-Semiring R} 
      constant-polynomial-Commutative-Semiring R
        ( mul-Commutative-Semiring R x y) 
      mul-polynomial-Commutative-Semiring
        ( constant-polynomial-Commutative-Semiring R x)
        ( constant-polynomial-Commutative-Semiring R y)
    preserves-mul-constant-polynomial-Commutative-Semiring =
      eq-polynomial-Commutative-Semiring R
        ( preserves-mul-constant-formal-power-series-Commutative-Semiring R)

    preserves-add-constant-polynomial-Commutative-Semiring :
      {x y : type-Commutative-Semiring R} 
      constant-polynomial-Commutative-Semiring R
        ( add-Commutative-Semiring R x y) 
      add-polynomial-Commutative-Semiring
        ( constant-polynomial-Commutative-Semiring R x)
        ( constant-polynomial-Commutative-Semiring R y)
    preserves-add-constant-polynomial-Commutative-Semiring =
      eq-polynomial-Commutative-Semiring R
        ( preserves-add-constant-formal-power-series-Commutative-Semiring R)

  constant-polynomial-hom-Commutative-Semiring :
    hom-Commutative-Semiring
      ( R)
      ( commutative-semiring-polynomial-Commutative-Semiring R)
  constant-polynomial-hom-Commutative-Semiring =
    ( ( ( constant-polynomial-Commutative-Semiring R ,
          preserves-add-constant-polynomial-Commutative-Semiring) ,
        constant-zero-polynomial-Commutative-Semiring R) ,
      preserves-mul-constant-polynomial-Commutative-Semiring ,
      constant-one-polynomial-Commutative-Semiring R)

Recent changes