Documentation

Mathlib.RingTheory.MvPowerSeries.Basic

Formal (multivariate) power series #

This file defines multivariate formal power series and develops the basic properties of these objects.

A formal power series is to a polynomial like an infinite sum is to a finite sum.

We provide the natural inclusion from multivariate polynomials to multivariate formal power series.

Note #

This file sets up the (semi)ring structure on multivariate power series: additional results are in:

In Mathlib.RingTheory.PowerSeries.Basic, formal power series in one variable will be obtained as a particular case, defined by PowerSeries R := MvPowerSeries Unit R. See that file for a specific description.

Implementation notes #

In this file we define multivariate formal power series with variables indexed by σ and coefficients in R as MvPowerSeries σ R := (σ →₀ ℕ) → R. Unfortunately there is not yet enough API to show that they are the completion of the ring of multivariate polynomials. However, we provide most of the infrastructure that is needed to do this. Once I-adic completion (topological or algebraic) is available it should not be hard to fill in the details.

def MvPowerSeries (σ : Type u_1) (R : Type u_2) :
Type (max (max u_2 u_1) 0)

Multivariate formal power series, where σ is the index set of the variables and R is the coefficient ring.

Equations
Instances For
    Equations
    • MvPowerSeries.instInhabitedMvPowerSeries = { default := fun (x : σ →₀ ) => default }
    instance MvPowerSeries.instZeroMvPowerSeries {σ : Type u_1} {R : Type u_2} [Zero R] :
    Equations
    • MvPowerSeries.instZeroMvPowerSeries = Pi.instZero
    Equations
    • MvPowerSeries.instAddMonoidMvPowerSeries = Pi.addMonoid
    Equations
    • MvPowerSeries.instAddGroupMvPowerSeries = Pi.addGroup
    Equations
    • MvPowerSeries.instAddCommMonoidMvPowerSeries = Pi.addCommMonoid
    Equations
    • MvPowerSeries.instAddCommGroupMvPowerSeries = Pi.addCommGroup
    Equations
    • =
    Equations
    def MvPowerSeries.monomial {σ : Type u_1} (R : Type u_2) [Semiring R] (n : σ →₀ ) :

    The nth monomial as multivariate formal power series: it is defined as the R-linear map from R to the semi-ring of multivariate formal power series associating to each a the map sending n : σ →₀ ℕ to the value a and sending all other x : σ →₀ ℕ different from n to 0.

    Equations
    Instances For
      def MvPowerSeries.coeff {σ : Type u_1} (R : Type u_2) [Semiring R] (n : σ →₀ ) :

      The nth coefficient of a multivariate formal power series.

      Equations
      Instances For
        theorem MvPowerSeries.ext {σ : Type u_1} {R : Type u_2} [Semiring R] {φ : MvPowerSeries σ R} {ψ : MvPowerSeries σ R} (h : ∀ (n : σ →₀ ), (MvPowerSeries.coeff R n) φ = (MvPowerSeries.coeff R n) ψ) :
        φ = ψ

        Two multivariate formal power series are equal if all their coefficients are equal.

        theorem MvPowerSeries.ext_iff {σ : Type u_1} {R : Type u_2} [Semiring R] {φ : MvPowerSeries σ R} {ψ : MvPowerSeries σ R} :
        φ = ψ ∀ (n : σ →₀ ), (MvPowerSeries.coeff R n) φ = (MvPowerSeries.coeff R n) ψ

        Two multivariate formal power series are equal if and only if all their coefficients are equal.

        theorem MvPowerSeries.monomial_def {σ : Type u_1} {R : Type u_2} [Semiring R] [DecidableEq σ] (n : σ →₀ ) :
        theorem MvPowerSeries.coeff_monomial {σ : Type u_1} {R : Type u_2} [Semiring R] [DecidableEq σ] (m : σ →₀ ) (n : σ →₀ ) (a : R) :
        (MvPowerSeries.coeff R m) ((MvPowerSeries.monomial R n) a) = if m = n then a else 0
        @[simp]
        theorem MvPowerSeries.coeff_monomial_same {σ : Type u_1} {R : Type u_2} [Semiring R] (n : σ →₀ ) (a : R) :
        theorem MvPowerSeries.coeff_monomial_ne {σ : Type u_1} {R : Type u_2} [Semiring R] {m : σ →₀ } {n : σ →₀ } (h : m n) (a : R) :
        theorem MvPowerSeries.eq_of_coeff_monomial_ne_zero {σ : Type u_1} {R : Type u_2} [Semiring R] {m : σ →₀ } {n : σ →₀ } {a : R} (h : (MvPowerSeries.coeff R m) ((MvPowerSeries.monomial R n) a) 0) :
        m = n
        @[simp]
        theorem MvPowerSeries.coeff_comp_monomial {σ : Type u_1} {R : Type u_2} [Semiring R] (n : σ →₀ ) :
        MvPowerSeries.coeff R n ∘ₗ MvPowerSeries.monomial R n = LinearMap.id
        theorem MvPowerSeries.coeff_zero {σ : Type u_1} {R : Type u_2} [Semiring R] (n : σ →₀ ) :
        instance MvPowerSeries.instOneMvPowerSeries {σ : Type u_1} {R : Type u_2} [Semiring R] :
        Equations
        theorem MvPowerSeries.coeff_one {σ : Type u_1} {R : Type u_2} [Semiring R] (n : σ →₀ ) [DecidableEq σ] :
        (MvPowerSeries.coeff R n) 1 = if n = 0 then 1 else 0
        theorem MvPowerSeries.coeff_zero_one {σ : Type u_1} {R : Type u_2} [Semiring R] :
        Equations
        • MvPowerSeries.instAddMonoidWithOneMvPowerSeries = let __src := let_fun this := inferInstance; this; AddMonoidWithOne.mk
        instance MvPowerSeries.instMulMvPowerSeries {σ : Type u_1} {R : Type u_2} [Semiring R] :
        Equations
        • One or more equations did not get rendered due to their size.
        theorem MvPowerSeries.coeff_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (n : σ →₀ ) (φ : MvPowerSeries σ R) (ψ : MvPowerSeries σ R) [DecidableEq σ] :
        (MvPowerSeries.coeff R n) (φ * ψ) = Finset.sum (Finset.antidiagonal n) fun (p : (σ →₀ ) × (σ →₀ )) => (MvPowerSeries.coeff R p.1) φ * (MvPowerSeries.coeff R p.2) ψ
        theorem MvPowerSeries.zero_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) :
        0 * φ = 0
        theorem MvPowerSeries.mul_zero {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) :
        φ * 0 = 0
        theorem MvPowerSeries.coeff_monomial_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (m : σ →₀ ) (n : σ →₀ ) (φ : MvPowerSeries σ R) (a : R) :
        (MvPowerSeries.coeff R m) ((MvPowerSeries.monomial R n) a * φ) = if n m then a * (MvPowerSeries.coeff R (m - n)) φ else 0
        theorem MvPowerSeries.coeff_mul_monomial {σ : Type u_1} {R : Type u_2} [Semiring R] (m : σ →₀ ) (n : σ →₀ ) (φ : MvPowerSeries σ R) (a : R) :
        (MvPowerSeries.coeff R m) (φ * (MvPowerSeries.monomial R n) a) = if n m then (MvPowerSeries.coeff R (m - n)) φ * a else 0
        theorem MvPowerSeries.coeff_add_monomial_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (m : σ →₀ ) (n : σ →₀ ) (φ : MvPowerSeries σ R) (a : R) :
        theorem MvPowerSeries.coeff_add_mul_monomial {σ : Type u_1} {R : Type u_2} [Semiring R] (m : σ →₀ ) (n : σ →₀ ) (φ : MvPowerSeries σ R) (a : R) :
        @[simp]
        theorem MvPowerSeries.commute_monomial {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) {a : R} {n : σ →₀ } :
        Commute φ ((MvPowerSeries.monomial R n) a) ∀ (m : σ →₀ ), Commute ((MvPowerSeries.coeff R m) φ) a
        theorem MvPowerSeries.one_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) :
        1 * φ = φ
        theorem MvPowerSeries.mul_one {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) :
        φ * 1 = φ
        theorem MvPowerSeries.mul_add {σ : Type u_1} {R : Type u_2} [Semiring R] (φ₁ : MvPowerSeries σ R) (φ₂ : MvPowerSeries σ R) (φ₃ : MvPowerSeries σ R) :
        φ₁ * (φ₂ + φ₃) = φ₁ * φ₂ + φ₁ * φ₃
        theorem MvPowerSeries.add_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (φ₁ : MvPowerSeries σ R) (φ₂ : MvPowerSeries σ R) (φ₃ : MvPowerSeries σ R) :
        (φ₁ + φ₂) * φ₃ = φ₁ * φ₃ + φ₂ * φ₃
        theorem MvPowerSeries.mul_assoc {σ : Type u_1} {R : Type u_2} [Semiring R] (φ₁ : MvPowerSeries σ R) (φ₂ : MvPowerSeries σ R) (φ₃ : MvPowerSeries σ R) :
        φ₁ * φ₂ * φ₃ = φ₁ * (φ₂ * φ₃)
        Equations
        • One or more equations did not get rendered due to their size.
        Equations
        • MvPowerSeries.instCommSemiringMvPowerSeries = let __src := let_fun this := inferInstance; this; CommSemiring.mk
        instance MvPowerSeries.instRingMvPowerSeries {σ : Type u_1} {R : Type u_2} [Ring R] :
        Equations
        • One or more equations did not get rendered due to their size.
        Equations
        theorem MvPowerSeries.monomial_mul_monomial {σ : Type u_1} {R : Type u_2} [Semiring R] (m : σ →₀ ) (n : σ →₀ ) (a : R) (b : R) :
        def MvPowerSeries.C (σ : Type u_1) (R : Type u_2) [Semiring R] :

        The constant multivariate formal power series.

        Equations
        • MvPowerSeries.C σ R = let __src := MvPowerSeries.monomial R 0; { toMonoidHom := { toOneHom := { toFun := __src.toFun, map_one' := }, map_mul' := }, map_zero' := , map_add' := }
        Instances For
          @[simp]
          theorem MvPowerSeries.monomial_zero_eq_C {σ : Type u_1} {R : Type u_2} [Semiring R] :
          theorem MvPowerSeries.coeff_C {σ : Type u_1} {R : Type u_2} [Semiring R] [DecidableEq σ] (n : σ →₀ ) (a : R) :
          (MvPowerSeries.coeff R n) ((MvPowerSeries.C σ R) a) = if n = 0 then a else 0
          theorem MvPowerSeries.coeff_zero_C {σ : Type u_1} {R : Type u_2} [Semiring R] (a : R) :
          def MvPowerSeries.X {σ : Type u_1} {R : Type u_2} [Semiring R] (s : σ) :

          The variables of the multivariate formal power series ring.

          Equations
          Instances For
            theorem MvPowerSeries.coeff_X {σ : Type u_1} {R : Type u_2} [Semiring R] [DecidableEq σ] (n : σ →₀ ) (s : σ) :
            (MvPowerSeries.coeff R n) (MvPowerSeries.X s) = if n = Finsupp.single s 1 then 1 else 0
            theorem MvPowerSeries.coeff_index_single_X {σ : Type u_1} {R : Type u_2} [Semiring R] [DecidableEq σ] (s : σ) (t : σ) :
            (MvPowerSeries.coeff R (Finsupp.single t 1)) (MvPowerSeries.X s) = if t = s then 1 else 0
            @[simp]
            theorem MvPowerSeries.coeff_zero_X {σ : Type u_1} {R : Type u_2} [Semiring R] (s : σ) :
            theorem MvPowerSeries.commute_X {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) (s : σ) :
            theorem MvPowerSeries.X_def {σ : Type u_1} {R : Type u_2} [Semiring R] (s : σ) :
            theorem MvPowerSeries.X_pow_eq {σ : Type u_1} {R : Type u_2} [Semiring R] (s : σ) (n : ) :
            theorem MvPowerSeries.coeff_X_pow {σ : Type u_1} {R : Type u_2} [Semiring R] [DecidableEq σ] (m : σ →₀ ) (s : σ) (n : ) :
            (MvPowerSeries.coeff R m) (MvPowerSeries.X s ^ n) = if m = Finsupp.single s n then 1 else 0
            @[simp]
            theorem MvPowerSeries.coeff_mul_C {σ : Type u_1} {R : Type u_2} [Semiring R] (n : σ →₀ ) (φ : MvPowerSeries σ R) (a : R) :
            @[simp]
            theorem MvPowerSeries.coeff_C_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (n : σ →₀ ) (φ : MvPowerSeries σ R) (a : R) :
            theorem MvPowerSeries.coeff_zero_mul_X {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) (s : σ) :
            theorem MvPowerSeries.coeff_zero_X_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) (s : σ) :
            def MvPowerSeries.constantCoeff (σ : Type u_1) (R : Type u_2) [Semiring R] :

            The constant coefficient of a formal power series.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              theorem MvPowerSeries.constantCoeff_C {σ : Type u_1} {R : Type u_2} [Semiring R] (a : R) :
              @[simp]
              theorem MvPowerSeries.constantCoeff_X {σ : Type u_1} {R : Type u_2} [Semiring R] (s : σ) :
              theorem MvPowerSeries.isUnit_constantCoeff {σ : Type u_1} {R : Type u_2} [Semiring R] (φ : MvPowerSeries σ R) (h : IsUnit φ) :

              If a multivariate formal power series is invertible, then so is its constant coefficient.

              theorem MvPowerSeries.coeff_smul {σ : Type u_1} {R : Type u_2} [Semiring R] (f : MvPowerSeries σ R) (n : σ →₀ ) (a : R) :
              theorem MvPowerSeries.smul_eq_C_mul {σ : Type u_1} {R : Type u_2} [Semiring R] (f : MvPowerSeries σ R) (a : R) :
              a f = (MvPowerSeries.C σ R) a * f
              theorem MvPowerSeries.X_inj {σ : Type u_1} {R : Type u_2} [Semiring R] [Nontrivial R] {s : σ} {t : σ} :
              def MvPowerSeries.map (σ : Type u_1) {R : Type u_2} {S : Type u_3} [Semiring R] [Semiring S] (f : R →+* S) :

              The map between multivariate formal power series induced by a map on the coefficients.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                @[simp]
                theorem MvPowerSeries.map_comp {σ : Type u_1} {R : Type u_2} {S : Type u_3} {T : Type u_4} [Semiring R] [Semiring S] [Semiring T] (f : R →+* S) (g : S →+* T) :
                @[simp]
                theorem MvPowerSeries.coeff_map {σ : Type u_1} {R : Type u_2} {S : Type u_3} [Semiring R] [Semiring S] (f : R →+* S) (n : σ →₀ ) (φ : MvPowerSeries σ R) :
                @[simp]
                theorem MvPowerSeries.constantCoeff_map {σ : Type u_1} {R : Type u_2} {S : Type u_3} [Semiring R] [Semiring S] (f : R →+* S) (φ : MvPowerSeries σ R) :
                @[simp]
                theorem MvPowerSeries.map_monomial {σ : Type u_1} {R : Type u_2} {S : Type u_3} [Semiring R] [Semiring S] (f : R →+* S) (n : σ →₀ ) (a : R) :
                @[simp]
                theorem MvPowerSeries.map_C {σ : Type u_1} {R : Type u_2} {S : Type u_3} [Semiring R] [Semiring S] (f : R →+* S) (a : R) :
                (MvPowerSeries.map σ f) ((MvPowerSeries.C σ R) a) = (MvPowerSeries.C σ S) (f a)
                @[simp]
                theorem MvPowerSeries.map_X {σ : Type u_1} {R : Type u_2} {S : Type u_3} [Semiring R] [Semiring S] (f : R →+* S) (s : σ) :
                theorem MvPowerSeries.X_pow_dvd_iff {σ : Type u_1} {R : Type u_2} [Semiring R] {s : σ} {n : } {φ : MvPowerSeries σ R} :
                MvPowerSeries.X s ^ n φ ∀ (m : σ →₀ ), m s < n(MvPowerSeries.coeff R m) φ = 0
                theorem MvPowerSeries.X_dvd_iff {σ : Type u_1} {R : Type u_2} [Semiring R] {s : σ} {φ : MvPowerSeries σ R} :
                MvPowerSeries.X s φ ∀ (m : σ →₀ ), m s = 0(MvPowerSeries.coeff R m) φ = 0
                theorem MvPowerSeries.coeff_prod {σ : Type u_1} {R : Type u_3} [CommSemiring R] {ι : Type u_4} [DecidableEq ι] [DecidableEq σ] (f : ιMvPowerSeries σ R) (d : σ →₀ ) (s : Finset ι) :
                (MvPowerSeries.coeff R d) (Finset.prod s fun (j : ι) => f j) = Finset.sum (Finset.piAntidiagonal s d) fun (l : ι →₀ σ →₀ ) => Finset.prod s fun (i : ι) => (MvPowerSeries.coeff R (l i)) (f i)

                Coefficients of a product of power series

                Equations
                • One or more equations did not get rendered due to their size.
                theorem MvPowerSeries.algebraMap_apply {σ : Type u_1} {R : Type u_2} {A : Type u_3} [CommSemiring R] [Semiring A] [Algebra R A] {r : R} :
                (algebraMap R (MvPowerSeries σ A)) r = (MvPowerSeries.C σ A) ((algebraMap R A) r)
                def MvPolynomial.toMvPowerSeries {σ : Type u_1} {R : Type u_2} [CommSemiring R] :

                The natural inclusion from multivariate polynomials into multivariate formal power series.

                Equations
                Instances For
                  instance MvPolynomial.coeToMvPowerSeries {σ : Type u_1} {R : Type u_2} [CommSemiring R] :

                  The natural inclusion from multivariate polynomials into multivariate formal power series.

                  Equations
                  • MvPolynomial.coeToMvPowerSeries = { coe := MvPolynomial.toMvPowerSeries }
                  theorem MvPolynomial.coe_def {σ : Type u_1} {R : Type u_2} [CommSemiring R] (φ : MvPolynomial σ R) :
                  φ = fun (n : σ →₀ ) => MvPolynomial.coeff n φ
                  @[simp]
                  theorem MvPolynomial.coeff_coe {σ : Type u_1} {R : Type u_2} [CommSemiring R] (φ : MvPolynomial σ R) (n : σ →₀ ) :
                  @[simp]
                  theorem MvPolynomial.coe_monomial {σ : Type u_1} {R : Type u_2} [CommSemiring R] (n : σ →₀ ) (a : R) :
                  @[simp]
                  theorem MvPolynomial.coe_zero {σ : Type u_1} {R : Type u_2} [CommSemiring R] :
                  0 = 0
                  @[simp]
                  theorem MvPolynomial.coe_one {σ : Type u_1} {R : Type u_2} [CommSemiring R] :
                  1 = 1
                  @[simp]
                  theorem MvPolynomial.coe_add {σ : Type u_1} {R : Type u_2} [CommSemiring R] (φ : MvPolynomial σ R) (ψ : MvPolynomial σ R) :
                  (φ + ψ) = φ + ψ
                  @[simp]
                  theorem MvPolynomial.coe_mul {σ : Type u_1} {R : Type u_2} [CommSemiring R] (φ : MvPolynomial σ R) (ψ : MvPolynomial σ R) :
                  (φ * ψ) = φ * ψ
                  @[simp]
                  theorem MvPolynomial.coe_C {σ : Type u_1} {R : Type u_2} [CommSemiring R] (a : R) :
                  (MvPolynomial.C a) = (MvPowerSeries.C σ R) a
                  @[simp]
                  theorem MvPolynomial.coe_bit0 {σ : Type u_1} {R : Type u_2} [CommSemiring R] (φ : MvPolynomial σ R) :
                  (bit0 φ) = bit0 φ
                  @[simp]
                  theorem MvPolynomial.coe_bit1 {σ : Type u_1} {R : Type u_2} [CommSemiring R] (φ : MvPolynomial σ R) :
                  (bit1 φ) = bit1 φ
                  @[simp]
                  theorem MvPolynomial.coe_X {σ : Type u_1} {R : Type u_2} [CommSemiring R] (s : σ) :
                  @[simp]
                  theorem MvPolynomial.coe_inj {σ : Type u_1} {R : Type u_2} [CommSemiring R] {φ : MvPolynomial σ R} {ψ : MvPolynomial σ R} :
                  φ = ψ φ = ψ
                  @[simp]
                  theorem MvPolynomial.coe_eq_zero_iff {σ : Type u_1} {R : Type u_2} [CommSemiring R] {φ : MvPolynomial σ R} :
                  φ = 0 φ = 0
                  @[simp]
                  theorem MvPolynomial.coe_eq_one_iff {σ : Type u_1} {R : Type u_2} [CommSemiring R] {φ : MvPolynomial σ R} :
                  φ = 1 φ = 1

                  The coercion from multivariate polynomials to multivariate power series as a ring homomorphism.

                  Equations
                  • MvPolynomial.coeToMvPowerSeries.ringHom = { toMonoidHom := { toOneHom := { toFun := Coe.coe, map_one' := }, map_mul' := }, map_zero' := , map_add' := }
                  Instances For
                    @[simp]
                    theorem MvPolynomial.coe_pow {σ : Type u_1} {R : Type u_2} [CommSemiring R] {φ : MvPolynomial σ R} (n : ) :
                    (φ ^ n) = φ ^ n
                    @[simp]
                    theorem MvPolynomial.coeToMvPowerSeries.ringHom_apply {σ : Type u_1} {R : Type u_2} [CommSemiring R] (φ : MvPolynomial σ R) :
                    MvPolynomial.coeToMvPowerSeries.ringHom φ = φ

                    The coercion from multivariate polynomials to multivariate power series as an algebra homomorphism.

                    Equations
                    Instances For
                      instance MvPowerSeries.algebraMvPolynomial {σ : Type u_1} {R : Type u_2} {A : Type u_3} [CommSemiring R] [CommSemiring A] [Algebra R A] :
                      Equations
                      instance MvPowerSeries.algebraMvPowerSeries {σ : Type u_1} {R : Type u_2} {A : Type u_3} [CommSemiring R] [CommSemiring A] [Algebra R A] :
                      Equations
                      theorem MvPowerSeries.algebraMap_apply' {σ : Type u_1} {R : Type u_2} (A : Type u_3) [CommSemiring R] [CommSemiring A] [Algebra R A] (p : MvPolynomial σ R) :
                      theorem MvPowerSeries.algebraMap_apply'' {σ : Type u_1} {R : Type u_2} (A : Type u_3) [CommSemiring R] [CommSemiring A] [Algebra R A] (f : MvPowerSeries σ R) :