mathlibdocumentation

ring_theory.power_series.basic

Formal 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 polynomials to formal power series.

Generalities #

The file starts with setting up the (semi)ring structure on multivariate power series.

`trunc n φ` truncates a formal power series to the polynomial that has the same coefficients as `φ`, for all `m < n`, and `0` otherwise.

If the constant coefficient of a formal power series is invertible, then this formal power series is invertible.

Formal power series over a local ring form a local ring.

Formal power series in one variable #

We prove that if the ring of coefficients is an integral domain, then formal power series in one variable form an integral domain.

The `order` of a formal power series `φ` is the multiplicity of the variable `X` in `φ`.

If the coefficients form an integral domain, then `order` is a valuation (`order_mul`, `le_order_add`).

Implementation notes #

In this file we define multivariate formal power series with variables indexed by `σ` and coefficients in `R` as `mv_power_series σ 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.

Formal power series in one variable are defined as `power_series R := mv_power_series unit R`.

This allows us to port a lot of proofs and properties from the multivariate case to the single variable case. However, it means that formal power series are indexed by `unit →₀ ℕ`, which is of course canonically isomorphic to `ℕ`. We then build some glue to treat formal power series as if they are indexed by `ℕ`. Occasionally this leads to proofs that are uglier than expected.

def mv_power_series (σ : Type u_1) (R : Type u_2) :
Type (max u_1 u_2)

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

Equations
Instances for `mv_power_series`
@[protected, instance]
def mv_power_series.inhabited {σ : Type u_1} {R : Type u_2} [inhabited R] :
Equations
@[protected, instance]
def mv_power_series.has_zero {σ : Type u_1} {R : Type u_2} [has_zero R] :
Equations
@[protected, instance]
def mv_power_series.add_monoid {σ : Type u_1} {R : Type u_2} [add_monoid R] :
Equations
@[protected, instance]
def mv_power_series.add_group {σ : Type u_1} {R : Type u_2} [add_group R] :
Equations
@[protected, instance]
def mv_power_series.add_comm_monoid {σ : Type u_1} {R : Type u_2}  :
Equations
@[protected, instance]
def mv_power_series.add_comm_group {σ : Type u_1} {R : Type u_2}  :
Equations
@[protected, instance]
def mv_power_series.nontrivial {σ : Type u_1} {R : Type u_2} [nontrivial R] :
@[protected, instance]
def mv_power_series.module {σ : Type u_1} {R : Type u_2} {A : Type u_3} [semiring R] [ A] :
A)
Equations
@[protected, instance]
def mv_power_series.is_scalar_tower {σ : Type u_1} {R : Type u_2} {A : Type u_3} {S : Type u_4} [semiring R] [semiring S] [ A] [ A] [ S] [ A] :
A)
noncomputable def mv_power_series.monomial {σ : Type u_1} (R : Type u_2) [semiring R] (n : σ →₀ ) :

The `n`th monomial with coefficient `a` as multivariate formal power series.

Equations
def mv_power_series.coeff {σ : Type u_1} (R : Type u_2) [semiring R] (n : σ →₀ ) :

The `n`th coefficient of a multivariate formal power series.

Equations
@[ext]
theorem mv_power_series.ext {σ : Type u_1} {R : Type u_2} [semiring R] {φ ψ : R} (h : ∀ (n : σ →₀ ), φ = ψ) :
φ = ψ

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

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

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

theorem mv_power_series.monomial_def {σ : Type u_1} {R : Type u_2} [semiring R] [decidable_eq σ] (n : σ →₀ ) :
= (λ (n : σ →₀ ), R) n
theorem mv_power_series.coeff_monomial {σ : Type u_1} {R : Type u_2} [semiring R] [decidable_eq σ] (m n : σ →₀ ) (a : R) :
( a) = ite (m = n) a 0
@[simp]
theorem mv_power_series.coeff_monomial_same {σ : Type u_1} {R : Type u_2} [semiring R] (n : σ →₀ ) (a : R) :
( a) = a
theorem mv_power_series.coeff_monomial_ne {σ : Type u_1} {R : Type u_2} [semiring R] {m n : σ →₀ } (h : m n) (a : R) :
( a) = 0
theorem mv_power_series.eq_of_coeff_monomial_ne_zero {σ : Type u_1} {R : Type u_2} [semiring R] {m n : σ →₀ } {a : R} (h : ( a) 0) :
m = n
@[simp]
theorem mv_power_series.coeff_comp_monomial {σ : Type u_1} {R : Type u_2} [semiring R] (n : σ →₀ ) :
@[simp]
theorem mv_power_series.coeff_zero {σ : Type u_1} {R : Type u_2} [semiring R] (n : σ →₀ ) :
0 = 0
@[protected, instance]
noncomputable def mv_power_series.has_one {σ : Type u_1} {R : Type u_2} [semiring R] :
Equations
theorem mv_power_series.coeff_one {σ : Type u_1} {R : Type u_2} [semiring R] (n : σ →₀ ) [decidable_eq σ] :
1 = ite (n = 0) 1 0
theorem mv_power_series.coeff_zero_one {σ : Type u_1} {R : Type u_2} [semiring R] :
1 = 1
theorem mv_power_series.monomial_zero_one {σ : Type u_1} {R : Type u_2} [semiring R] :
1 = 1
@[protected, instance]
noncomputable def mv_power_series.add_monoid_with_one {σ : Type u_1} {R : Type u_2} [semiring R] :
Equations
@[protected, instance]
noncomputable def mv_power_series.has_mul {σ : Type u_1} {R : Type u_2} [semiring R] :
Equations
theorem mv_power_series.coeff_mul {σ : Type u_1} {R : Type u_2} [semiring R] (n : σ →₀ ) (φ ψ : R) :
* ψ) = n.antidiagonal.sum (λ (p : →₀ ) × →₀ )), p.fst) φ * p.snd) ψ)
@[protected]
theorem mv_power_series.zero_mul {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) :
0 * φ = 0
@[protected]
theorem mv_power_series.mul_zero {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) :
φ * 0 = 0
theorem mv_power_series.coeff_monomial_mul {σ : Type u_1} {R : Type u_2} [semiring R] (m n : σ →₀ ) (φ : R) (a : R) :
( a * φ) = ite (n m) (a * (m - n)) φ) 0
theorem mv_power_series.coeff_mul_monomial {σ : Type u_1} {R : Type u_2} [semiring R] (m n : σ →₀ ) (φ : R) (a : R) :
* a) = ite (n m) ( (m - n)) φ * a) 0
theorem mv_power_series.coeff_add_monomial_mul {σ : Type u_1} {R : Type u_2} [semiring R] (m n : σ →₀ ) (φ : R) (a : R) :
(m + n)) ( a * φ) = a * φ
theorem mv_power_series.coeff_add_mul_monomial {σ : Type u_1} {R : Type u_2} [semiring R] (m n : σ →₀ ) (φ : R) (a : R) :
(m + n)) * a) = φ * a
@[protected]
theorem mv_power_series.one_mul {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) :
1 * φ = φ
@[protected]
theorem mv_power_series.mul_one {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) :
φ * 1 = φ
@[protected]
theorem mv_power_series.mul_add {σ : Type u_1} {R : Type u_2} [semiring R] (φ₁ φ₂ φ₃ : R) :
φ₁ * (φ₂ + φ₃) = φ₁ * φ₂ + φ₁ * φ₃
@[protected]
theorem mv_power_series.add_mul {σ : Type u_1} {R : Type u_2} [semiring R] (φ₁ φ₂ φ₃ : R) :
(φ₁ + φ₂) * φ₃ = φ₁ * φ₃ + φ₂ * φ₃
@[protected]
theorem mv_power_series.mul_assoc {σ : Type u_1} {R : Type u_2} [semiring R] (φ₁ φ₂ φ₃ : R) :
φ₁ * φ₂ * φ₃ = φ₁ * (φ₂ * φ₃)
@[protected, instance]
noncomputable def mv_power_series.semiring {σ : Type u_1} {R : Type u_2} [semiring R] :
Equations
@[protected, instance]
noncomputable def mv_power_series.comm_semiring {σ : Type u_1} {R : Type u_2}  :
Equations
@[protected, instance]
noncomputable def mv_power_series.ring {σ : Type u_1} {R : Type u_2} [ring R] :
ring R)
Equations
@[protected, instance]
noncomputable def mv_power_series.comm_ring {σ : Type u_1} {R : Type u_2} [comm_ring R] :
Equations
theorem mv_power_series.monomial_mul_monomial {σ : Type u_1} {R : Type u_2} [semiring R] (m n : σ →₀ ) (a b : R) :
a * b = (m + n)) (a * b)
noncomputable def mv_power_series.C (σ : Type u_1) (R : Type u_2) [semiring R] :

The constant multivariate formal power series.

Equations
@[simp]
theorem mv_power_series.monomial_zero_eq_C {σ : Type u_1} {R : Type u_2} [semiring R] :
= R)
theorem mv_power_series.monomial_zero_eq_C_apply {σ : Type u_1} {R : Type u_2} [semiring R] (a : R) :
a = R) a
theorem mv_power_series.coeff_C {σ : Type u_1} {R : Type u_2} [semiring R] [decidable_eq σ] (n : σ →₀ ) (a : R) :
( R) a) = ite (n = 0) a 0
theorem mv_power_series.coeff_zero_C {σ : Type u_1} {R : Type u_2} [semiring R] (a : R) :
( R) a) = a
noncomputable def mv_power_series.X {σ : Type u_1} {R : Type u_2} [semiring R] (s : σ) :

The variables of the multivariate formal power series ring.

Equations
theorem mv_power_series.coeff_X {σ : Type u_1} {R : Type u_2} [semiring R] [decidable_eq σ] (n : σ →₀ ) (s : σ) :
= ite (n = 1) 1 0
theorem mv_power_series.coeff_index_single_X {σ : Type u_1} {R : Type u_2} [semiring R] [decidable_eq σ] (s t : σ) :
1)) = ite (t = s) 1 0
@[simp]
theorem mv_power_series.coeff_index_single_self_X {σ : Type u_1} {R : Type u_2} [semiring R] (s : σ) :
1)) = 1
theorem mv_power_series.coeff_zero_X {σ : Type u_1} {R : Type u_2} [semiring R] (s : σ) :
= 0
theorem mv_power_series.X_def {σ : Type u_1} {R : Type u_2} [semiring R] (s : σ) :
= 1)) 1
theorem mv_power_series.X_pow_eq {σ : Type u_1} {R : Type u_2} [semiring R] (s : σ) (n : ) :
= n)) 1
theorem mv_power_series.coeff_X_pow {σ : Type u_1} {R : Type u_2} [semiring R] [decidable_eq σ] (m : σ →₀ ) (s : σ) (n : ) :
^ n) = ite (m = n) 1 0
@[simp]
theorem mv_power_series.coeff_mul_C {σ : Type u_1} {R : Type u_2} [semiring R] (n : σ →₀ ) (φ : R) (a : R) :
* R) a) = φ * a
@[simp]
theorem mv_power_series.coeff_C_mul {σ : Type u_1} {R : Type u_2} [semiring R] (n : σ →₀ ) (φ : R) (a : R) :
( R) a * φ) = a * φ
theorem mv_power_series.coeff_zero_mul_X {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) (s : σ) :
* = 0
theorem mv_power_series.coeff_zero_X_mul {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) (s : σ) :
* φ) = 0
def mv_power_series.constant_coeff (σ : Type u_1) (R : Type u_2) [semiring R] :

The constant coefficient of a formal power series.

Equations
@[simp]
theorem mv_power_series.coeff_zero_eq_constant_coeff {σ : Type u_1} {R : Type u_2} [semiring R] :
theorem mv_power_series.coeff_zero_eq_constant_coeff_apply {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) :
φ =
@[simp]
theorem mv_power_series.constant_coeff_C {σ : Type u_1} {R : Type u_2} [semiring R] (a : R) :
( R) a) = a
@[simp]
theorem mv_power_series.constant_coeff_comp_C {σ : Type u_1} {R : Type u_2} [semiring R] :
R) =
@[simp]
theorem mv_power_series.constant_coeff_zero {σ : Type u_1} {R : Type u_2} [semiring R] :
= 0
@[simp]
theorem mv_power_series.constant_coeff_one {σ : Type u_1} {R : Type u_2} [semiring R] :
= 1
@[simp]
theorem mv_power_series.constant_coeff_X {σ : Type u_1} {R : Type u_2} [semiring R] (s : σ) :
theorem mv_power_series.is_unit_constant_coeff {σ : Type u_1} {R : Type u_2} [semiring R] (φ : R) (h : is_unit φ) :

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

@[simp]
theorem mv_power_series.coeff_smul {σ : Type u_1} {R : Type u_2} [semiring R] (f : R) (n : σ →₀ ) (a : R) :
(a f) = a * f
theorem mv_power_series.smul_eq_C_mul {σ : Type u_1} {R : Type u_2} [semiring R] (f : R) (a : R) :
a f = R) a * f
theorem mv_power_series.X_inj {σ : Type u_1} {R : Type u_2} [semiring R] [nontrivial R] {s t : σ} :
s = t
def mv_power_series.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
Instances for `mv_power_series.map`
@[simp]
theorem mv_power_series.map_id {σ : Type u_1} {R : Type u_2} [semiring R] :
theorem mv_power_series.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) :
(g.comp f) = g).comp f)
@[simp]
theorem mv_power_series.coeff_map {σ : Type u_1} {R : Type u_2} {S : Type u_3} [semiring R] [semiring S] (f : R →+* S) (n : σ →₀ ) (φ : R) :
( f) φ) = f ( φ)
@[simp]
theorem mv_power_series.constant_coeff_map {σ : Type u_1} {R : Type u_2} {S : Type u_3} [semiring R] [semiring S] (f : R →+* S) (φ : R) :
( f) φ) = f φ)
@[simp]
theorem mv_power_series.map_monomial {σ : Type u_1} {R : Type u_2} {S : Type u_3} [semiring R] [semiring S] (f : R →+* S) (n : σ →₀ ) (a : R) :
f) ( a) = (f a)
@[simp]
theorem mv_power_series.map_C {σ : Type u_1} {R : Type u_2} {S : Type u_3} [semiring R] [semiring S] (f : R →+* S) (a : R) :
f) ( R) a) = S) (f a)
@[simp]
theorem mv_power_series.map_X {σ : Type u_1} {R : Type u_2} {S : Type u_3} [semiring R] [semiring S] (f : R →+* S) (s : σ) :
@[protected, instance]
noncomputable def mv_power_series.algebra {σ : Type u_1} {R : Type u_2} {A : Type u_3} [semiring A] [ A] :
A)
Equations
theorem mv_power_series.C_eq_algebra_map {σ : Type u_1} {R : Type u_2}  :
= R)
theorem mv_power_series.algebra_map_apply {σ : Type u_1} {R : Type u_2} {A : Type u_3} [semiring A] [ A] {r : R} :
A)) r = A) ( A) r)
@[protected, instance]
def mv_power_series.subalgebra.nontrivial {σ : Type u_1} {R : Type u_2} [nonempty σ] [nontrivial R] :
noncomputable def mv_power_series.trunc_fun {σ : Type u_1} {R : Type u_2} (n : σ →₀ ) (φ : R) :

Auxiliary definition for the truncation function.

Equations
theorem mv_power_series.coeff_trunc_fun {σ : Type u_1} {R : Type u_2} (n m : σ →₀ ) (φ : R) :
= ite (m < n) ( φ) 0
noncomputable def mv_power_series.trunc {σ : Type u_1} (R : Type u_2) (n : σ →₀ ) :

The `n`th truncation of a multivariate formal power series to a multivariate polynomial

Equations
theorem mv_power_series.coeff_trunc {σ : Type u_1} {R : Type u_2} (n m : σ →₀ ) (φ : R) :
( φ) = ite (m < n) ( φ) 0
@[simp]
theorem mv_power_series.trunc_one {σ : Type u_1} {R : Type u_2} (n : σ →₀ ) (hnn : n 0) :
1 = 1
@[simp]
theorem mv_power_series.trunc_C {σ : Type u_1} {R : Type u_2} (n : σ →₀ ) (hnn : n 0) (a : R) :
( R) a) =
theorem mv_power_series.X_pow_dvd_iff {σ : Type u_1} {R : Type u_2} {s : σ} {n : } {φ : R} :
φ ∀ (m : σ →₀ ), m s < n φ = 0
theorem mv_power_series.X_dvd_iff {σ : Type u_1} {R : Type u_2} {s : σ} {φ : R} :
∀ (m : σ →₀ ), m s = 0 φ = 0
@[protected]
noncomputable def mv_power_series.inv.aux {σ : Type u_1} {R : Type u_2} [ring R] (a : R) (φ : R) :

Auxiliary definition that unifies the totalised inverse formal power series `(_)⁻¹` and the inverse formal power series that depends on an inverse of the constant coefficient `inv_of_unit`.

Equations
theorem mv_power_series.coeff_inv_aux {σ : Type u_1} {R : Type u_2} [ring R] [decidable_eq σ] (n : σ →₀ ) (a : R) (φ : R) :
= ite (n = 0) a (-a * n.antidiagonal.sum (λ (x : →₀ ) × →₀ )), ite (x.snd < n) ( x.fst) φ * x.snd) φ)) 0))
noncomputable def mv_power_series.inv_of_unit {σ : Type u_1} {R : Type u_2} [ring R] (φ : R) (u : Rˣ) :

A multivariate formal power series is invertible if the constant coefficient is invertible.

Equations
theorem mv_power_series.coeff_inv_of_unit {σ : Type u_1} {R : Type u_2} [ring R] [decidable_eq σ] (n : σ →₀ ) (φ : R) (u : Rˣ) :
(φ.inv_of_unit u) = ite (n = 0) u⁻¹ (-u⁻¹ * n.antidiagonal.sum (λ (x : →₀ ) × →₀ )), ite (x.snd < n) ( x.fst) φ * x.snd) (φ.inv_of_unit u)) 0))
@[simp]
theorem mv_power_series.constant_coeff_inv_of_unit {σ : Type u_1} {R : Type u_2} [ring R] (φ : R) (u : Rˣ) :
theorem mv_power_series.mul_inv_of_unit {σ : Type u_1} {R : Type u_2} [ring R] (φ : R) (u : Rˣ) (h : = u) :
φ * φ.inv_of_unit u = 1
@[protected, instance]
def mv_power_series.local_ring {σ : Type u_1} {R : Type u_2} [comm_ring R] [local_ring R] :

Multivariate formal power series over a local ring form a local ring.

@[protected, instance]
def mv_power_series.map.is_local_ring_hom {σ : Type u_1} {R : Type u_2} {S : Type u_3} [comm_ring R] [comm_ring S] (f : R →+* S)  :

The map `A[[X]] → B[[X]]` induced by a local ring hom `A → B` is local

@[protected]
noncomputable def mv_power_series.inv {σ : Type u_1} {k : Type u_3} [field k] (φ : k) :

The inverse `1/f` of a multivariable power series `f` over a field

Equations
@[protected, instance]
noncomputable def mv_power_series.has_inv {σ : Type u_1} {k : Type u_3} [field k] :
Equations
theorem mv_power_series.coeff_inv {σ : Type u_1} {k : Type u_3} [field k] [decidable_eq σ] (n : σ →₀ ) (φ : k) :
φ⁻¹ = ite (n = 0) φ)⁻¹ (- φ)⁻¹ * n.antidiagonal.sum (λ (x : →₀ ) × →₀ )), ite (x.snd < n) ( x.fst) φ * x.snd) φ⁻¹) 0))
@[simp]
theorem mv_power_series.constant_coeff_inv {σ : Type u_1} {k : Type u_3} [field k] (φ : k) :
= φ)⁻¹
theorem mv_power_series.inv_eq_zero {σ : Type u_1} {k : Type u_3} [field k] {φ : k} :
φ⁻¹ = 0 = 0
@[simp]
theorem mv_power_series.zero_inv {σ : Type u_1} {k : Type u_3} [field k] :
0⁻¹ = 0
@[simp]
theorem mv_power_series.inv_of_unit_eq {σ : Type u_1} {k : Type u_3} [field k] (φ : k) (h : 0) :
@[simp]
theorem mv_power_series.inv_of_unit_eq' {σ : Type u_1} {k : Type u_3} [field k] (φ : k) (u : kˣ) (h : = u) :
@[protected, simp]
theorem mv_power_series.mul_inv_cancel {σ : Type u_1} {k : Type u_3} [field k] (φ : k) (h : 0) :
φ * φ⁻¹ = 1
@[protected, simp]
theorem mv_power_series.inv_mul_cancel {σ : Type u_1} {k : Type u_3} [field k] (φ : k) (h : 0) :
φ⁻¹ * φ = 1
@[protected]
theorem mv_power_series.eq_mul_inv_iff_mul_eq {σ : Type u_1} {k : Type u_3} [field k] {φ₁ φ₂ φ₃ : k} (h : φ₃ 0) :
φ₁ = φ₂ * φ₃⁻¹ φ₁ * φ₃ = φ₂
@[protected]
theorem mv_power_series.eq_inv_iff_mul_eq_one {σ : Type u_1} {k : Type u_3} [field k] {φ ψ : k} (h : 0) :
φ = ψ⁻¹ φ * ψ = 1
@[protected]
theorem mv_power_series.inv_eq_iff_mul_eq_one {σ : Type u_1} {k : Type u_3} [field k] {φ ψ : k} (h : 0) :
ψ⁻¹ = φ φ * ψ = 1
@[protected, simp]
theorem mv_power_series.mul_inv_rev {σ : Type u_1} {k : Type u_3} [field k] (φ ψ : k) :
* ψ)⁻¹ = ψ⁻¹ * φ⁻¹
@[simp]
theorem mv_power_series.inv_one {σ : Type u_1} {k : Type u_3} [field k] :
1⁻¹ = 1
@[simp]
theorem mv_power_series.C_inv {σ : Type u_1} {k : Type u_3} [field k] (r : k) :
( k) r)⁻¹ = k) r⁻¹
@[simp]
theorem mv_power_series.X_inv {σ : Type u_1} {k : Type u_3} [field k] (s : σ) :
= 0
@[simp]
theorem mv_power_series.smul_inv {σ : Type u_1} {k : Type u_3} [field k] (r : k) (φ : k) :
@[protected, instance]
def mv_polynomial.coe_to_mv_power_series {σ : Type u_1} {R : Type u_2}  :
has_coe R) R)

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

Equations
theorem mv_polynomial.coe_def {σ : Type u_1} {R : Type u_2} (φ : R) :
φ = λ (n : σ →₀ ),
@[simp, norm_cast]
theorem mv_polynomial.coeff_coe {σ : Type u_1} {R : Type u_2} (φ : R) (n : σ →₀ ) :
φ =
@[simp, norm_cast]
theorem mv_polynomial.coe_monomial {σ : Type u_1} {R : Type u_2} (n : σ →₀ ) (a : R) :
a) = a
@[simp, norm_cast]
theorem mv_polynomial.coe_zero {σ : Type u_1} {R : Type u_2}  :
0 = 0
@[simp, norm_cast]
theorem mv_polynomial.coe_one {σ : Type u_1} {R : Type u_2}  :
1 = 1
@[simp, norm_cast]
theorem mv_polynomial.coe_add {σ : Type u_1} {R : Type u_2} (φ ψ : R) :
+ ψ) = φ + ψ
@[simp, norm_cast]
theorem mv_polynomial.coe_mul {σ : Type u_1} {R : Type u_2} (φ ψ : R) :
* ψ) = φ * ψ
@[simp, norm_cast]
theorem mv_polynomial.coe_C {σ : Type u_1} {R : Type u_2} (a : R) :
= R) a
@[simp, norm_cast]
theorem mv_polynomial.coe_bit0 {σ : Type u_1} {R : Type u_2} (φ : R) :
(bit0 φ) =
@[simp, norm_cast]
theorem mv_polynomial.coe_bit1 {σ : Type u_1} {R : Type u_2} (φ : R) :
(bit1 φ) =
@[simp, norm_cast]
theorem mv_polynomial.coe_X {σ : Type u_1} {R : Type u_2} (s : σ) :
theorem mv_polynomial.coe_injective (σ : Type u_1) (R : Type u_2)  :
@[simp, norm_cast]
theorem mv_polynomial.coe_inj {σ : Type u_1} {R : Type u_2} {φ ψ : R} :
φ = ψ φ = ψ
@[simp]
theorem mv_polynomial.coe_eq_zero_iff {σ : Type u_1} {R : Type u_2} {φ : R} :
φ = 0 φ = 0
@[simp]
theorem mv_polynomial.coe_eq_one_iff {σ : Type u_1} {R : Type u_2} {φ : R} :
φ = 1 φ = 1
def mv_polynomial.coe_to_mv_power_series.ring_hom {σ : Type u_1} {R : Type u_2}  :

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

Equations
@[simp, norm_cast]
theorem mv_polynomial.coe_pow {σ : Type u_1} {R : Type u_2} {φ : R} (n : ) :
^ n) = φ ^ n
@[simp]
theorem mv_polynomial.coe_to_mv_power_series.ring_hom_apply {σ : Type u_1} {R : Type u_2} (φ : R) :
theorem mv_polynomial.algebra_map_apply {σ : Type u_1} {R : Type u_2} (A : Type u_3) [ A] (r : R) :
noncomputable def mv_polynomial.coe_to_mv_power_series.alg_hom {σ : Type u_1} {R : Type u_2} (A : Type u_3) [ A] :

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

Equations
@[simp]
theorem mv_polynomial.coe_to_mv_power_series.alg_hom_apply {σ : Type u_1} {R : Type u_2} (φ : R) (A : Type u_3) [ A] :
@[protected, instance]
noncomputable def mv_power_series.algebra_mv_polynomial {σ : Type u_1} {R : Type u_2} {A : Type u_3} [ A] :
algebra R) A)
Equations
@[protected, instance]
noncomputable def mv_power_series.algebra_mv_power_series {σ : Type u_1} {R : Type u_2} {A : Type u_3} [ A] :
algebra R) A)
Equations
theorem mv_power_series.algebra_map_apply' {σ : Type u_1} {R : Type u_2} (A : Type u_3) [ A] (p : R) :
(algebra_map R) A)) p = A)) p
theorem mv_power_series.algebra_map_apply'' {σ : Type u_1} {R : Type u_2} (A : Type u_3) [ A] (f : R) :
(algebra_map R) A)) f = A)) f
def power_series (R : Type u_1) :
Type u_1

Formal power series over the coefficient ring `R`.

Equations
Instances for `power_series`
@[protected, instance]
def power_series.inhabited {R : Type u_1} [inhabited R] :
Equations
@[protected, instance]
Equations
@[protected, instance]
Equations
@[protected, instance]
def power_series.add_comm_monoid {R : Type u_1}  :
Equations
@[protected, instance]
def power_series.add_comm_group {R : Type u_1}  :
Equations
@[protected, instance]
noncomputable def power_series.semiring {R : Type u_1} [semiring R] :
Equations
@[protected, instance]
noncomputable def power_series.comm_semiring {R : Type u_1}  :
Equations
@[protected, instance]
noncomputable def power_series.ring {R : Type u_1} [ring R] :
Equations
@[protected, instance]
noncomputable def power_series.comm_ring {R : Type u_1} [comm_ring R] :
Equations
@[protected, instance]
def power_series.nontrivial {R : Type u_1} [nontrivial R] :
@[protected, instance]
def power_series.module {R : Type u_1} {A : Type u_2} [semiring R] [ A] :
Equations
@[protected, instance]
def power_series.is_scalar_tower {R : Type u_1} {A : Type u_2} {S : Type u_3} [semiring R] [semiring S] [ A] [ A] [ S] [ A] :
@[protected, instance]
noncomputable def power_series.algebra {R : Type u_1} {A : Type u_2} [semiring A] [ A] :
Equations
noncomputable def power_series.coeff (R : Type u_1) [semiring R] (n : ) :

The `n`th coefficient of a formal power series.

Equations
noncomputable def power_series.monomial (R : Type u_1) [semiring R] (n : ) :

The `n`th monomial with coefficient `a` as formal power series.

Equations
theorem power_series.coeff_def {R : Type u_1} [semiring R] {s : unit →₀ } {n : } (h : s () = n) :
@[ext]
theorem power_series.ext {R : Type u_1} [semiring R] {φ ψ : power_series R} (h : ∀ (n : ), n) φ = n) ψ) :
φ = ψ

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

theorem power_series.ext_iff {R : Type u_1} [semiring R] {φ ψ : power_series R} :
φ = ψ ∀ (n : ), n) φ = n) ψ

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

def power_series.mk {R : Type u_1} (f : → R) :

Constructor for formal power series.

Equations
@[simp]
theorem power_series.coeff_mk {R : Type u_1} [semiring R] (n : ) (f : → R) :
n) = f n
theorem power_series.coeff_monomial {R : Type u_1} [semiring R] (m n : ) (a : R) :
m) ( a) = ite (m = n) a 0
theorem power_series.monomial_eq_mk {R : Type u_1} [semiring R] (n : ) (a : R) :
a = power_series.mk (λ (m : ), ite (m = n) a 0)
@[simp]
theorem power_series.coeff_monomial_same {R : Type u_1} [semiring R] (n : ) (a : R) :
n) ( a) = a
@[simp]
theorem power_series.coeff_comp_monomial {R : Type u_1} [semiring R] (n : ) :
def power_series.constant_coeff (R : Type u_1) [semiring R] :

The constant coefficient of a formal power series.

Equations
noncomputable def power_series.C (R : Type u_1) [semiring R] :

The constant formal power series.

Equations
noncomputable def power_series.X {R : Type u_1} [semiring R] :

The variable of the formal power series ring.

Equations
@[simp]
theorem power_series.coeff_zero_eq_constant_coeff {R : Type u_1} [semiring R] :
theorem power_series.coeff_zero_eq_constant_coeff_apply {R : Type u_1} [semiring R] (φ : power_series R) :
0) φ =
@[simp]
theorem power_series.monomial_zero_eq_C {R : Type u_1} [semiring R] :
theorem power_series.monomial_zero_eq_C_apply {R : Type u_1} [semiring R] (a : R) :
a = a
theorem power_series.coeff_C {R : Type u_1} [semiring R] (n : ) (a : R) :
n) ( a) = ite (n = 0) a 0
@[simp]
theorem power_series.coeff_zero_C {R : Type u_1} [semiring R] (a : R) :
0) ( a) = a
theorem power_series.X_eq {R : Type u_1} [semiring R] :
theorem power_series.coeff_X {R : Type u_1} [semiring R] (n : ) :
= ite (n = 1) 1 0
@[simp]
theorem power_series.coeff_zero_X {R : Type u_1} [semiring R] :
@[simp]
theorem power_series.coeff_one_X {R : Type u_1} [semiring R] :
@[simp]
theorem power_series.X_ne_zero {R : Type u_1} [semiring R] [nontrivial R] :
theorem power_series.X_pow_eq {R : Type u_1} [semiring R] (n : ) :
= 1
theorem power_series.coeff_X_pow {R : Type u_1} [semiring R] (m n : ) :
m) = ite (m = n) 1 0
@[simp]
theorem power_series.coeff_X_pow_self {R : Type u_1} [semiring R] (n : ) :
n) = 1
@[simp]
theorem power_series.coeff_one {R : Type u_1} [semiring R] (n : ) :
n) 1 = ite (n = 0) 1 0
theorem power_series.coeff_zero_one {R : Type u_1} [semiring R] :
0) 1 = 1
theorem power_series.coeff_mul {R : Type u_1} [semiring R] (n : ) (φ ψ : power_series R) :
n) * ψ) = (λ (p : × ), p.fst) φ * p.snd) ψ)
@[simp]
theorem power_series.coeff_mul_C {R : Type u_1} [semiring R] (n : ) (φ : power_series R) (a : R) :
n) * a) = n) φ * a
@[simp]
theorem power_series.coeff_C_mul {R : Type u_1} [semiring R] (n : ) (φ : power_series R) (a : R) :
n) ( a * φ) = a * n) φ
@[simp]
theorem power_series.coeff_smul {R : Type u_1} [semiring R] {S : Type u_2} [semiring S] [ S] (n : ) (φ : power_series S) (a : R) :
n) (a φ) = a n) φ
theorem power_series.smul_eq_C_mul {R : Type u_1} [semiring R] (f : power_series R) (a : R) :
a f = a * f
@[simp]
theorem power_series.coeff_succ_mul_X {R : Type u_1} [semiring R] (n : ) (φ : power_series R) :
(n + 1)) = n) φ
@[simp]
theorem power_series.coeff_succ_X_mul {R : Type u_1} [semiring R] (n : ) (φ : power_series R) :
(n + 1)) = n) φ
@[simp]
theorem power_series.constant_coeff_C {R : Type u_1} [semiring R] (a : R) :
( a) = a
@[simp]
theorem power_series.constant_coeff_comp_C {R : Type u_1} [semiring R] :
@[simp]
theorem power_series.constant_coeff_zero {R : Type u_1} [semiring R] :
@[simp]
theorem power_series.constant_coeff_one {R : Type u_1} [semiring R] :
@[simp]
theorem power_series.constant_coeff_X {R : Type u_1} [semiring R] :
theorem power_series.coeff_zero_mul_X {R : Type u_1} [semiring R] (φ : power_series R) :
0) = 0
theorem power_series.coeff_zero_X_mul {R : Type u_1} [semiring R] (φ : power_series R) :
0) = 0
theorem power_series.coeff_C_mul_X_pow {R : Type u_1} [semiring R] (x : R) (k n : ) :
n) ( x * = ite (n = k) x 0
@[simp]
theorem power_series.coeff_mul_X_pow {R : Type u_1} [semiring R] (p : power_series R) (n d : ) :
(d + n)) (p * = d) p
@[simp]
theorem power_series.coeff_X_pow_mul {R : Type u_1} [semiring R] (p : power_series R) (n d : ) :
(d + n)) * p) = d) p
theorem power_series.coeff_mul_X_pow' {R : Type u_1} [semiring R] (p : power_series R) (n d : ) :
d) (p * = ite (n d) ( (d - n)) p) 0
theorem power_series.coeff_X_pow_mul' {R : Type u_1} [semiring R] (p : power_series R) (n d : ) :
d) * p) = ite (n d) ( (d - n)) p) 0
theorem power_series.is_unit_constant_coeff {R : Type u_1} [semiring R] (φ : power_series R) (h : is_unit φ) :

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

theorem power_series.eq_shift_mul_X_add_const {R : Type u_1} [semiring R] (φ : power_series R) :
φ = power_series.mk (λ (p : ), (p + 1)) φ) * power_series.X + φ)

Split off the constant coefficient.

theorem power_series.eq_X_mul_shift_add_const {R : Type u_1} [semiring R] (φ : power_series R) :
φ = power_series.X * power_series.mk (λ (p : ), (p + 1)) φ) + φ)

Split off the constant coefficient.

def power_series.map {R : Type u_1} [semiring R] {S : Type u_2} [semiring S] (f : R →+* S) :

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

Equations
Instances for `power_series.map`
@[simp]
theorem power_series.map_id {R : Type u_1} [semiring R] :
theorem power_series.map_comp {R : Type u_1} [semiring R] {S : Type u_2} {T : Type u_3} [semiring S] [semiring T] (f : R →+* S) (g : S →+* T) :
@[simp]
theorem power_series.coeff_map {R : Type u_1} [semiring R] {S : Type u_2} [semiring S] (f : R →+* S) (n : ) (φ : power_series R) :
n) ( φ) = f ( n) φ)
@[simp]
theorem power_series.map_C {R : Type u_1} [semiring R] {S : Type u_2} [semiring S] (f : R →+* S) (r : R) :
( r) = (f r)
@[simp]
theorem power_series.map_X {R : Type u_1} [semiring R] {S : Type u_2} [semiring S] (f : R →+* S) :
theorem power_series.X_pow_dvd_iff {R : Type u_1} {n : } {φ : power_series R} :
φ ∀ (m : ), m < n m) φ = 0
theorem power_series.X_dvd_iff {R : Type u_1} {φ : power_series R} :
noncomputable def power_series.rescale {R : Type u_1} (a : R) :

The ring homomorphism taking a power series `f(X)` to `f(aX)`.

Equations
@[simp]
theorem power_series.coeff_rescale {R : Type u_1} (f : power_series R) (a : R) (n : ) :
n) f) = a ^ n * n) f
@[simp]
theorem power_series.rescale_zero {R : Type u_1}  :
theorem power_series.rescale_zero_apply {R : Type u_1}  :
@[simp]
theorem power_series.rescale_one {R : Type u_1}  :
theorem power_series.rescale_mk {R : Type u_1} (f : → R) (a : R) :
= power_series.mk (λ (n : ), a ^ n * f n)
theorem power_series.rescale_rescale {R : Type u_1} (f : power_series R) (a b : R) :
theorem power_series.rescale_mul {R : Type u_1} (a b : R) :
noncomputable def power_series.trunc {R : Type u_1} (n : ) (φ : power_series R) :

The `n`th truncation of a formal power series to a polynomial

Equations
theorem power_series.coeff_trunc {R : Type u_1} (m n : ) (φ : power_series R) :
φ).coeff m = ite (m < n) ( m) φ) 0
@[simp]
theorem power_series.trunc_zero {R : Type u_1} (n : ) :
= 0
@[simp]
theorem power_series.trunc_one {R : Type u_1} (n : ) :
@[simp]
theorem power_series.trunc_C {R : Type u_1} (n : ) (a : R) :
@[simp]
theorem power_series.trunc_add {R : Type u_1} (n : ) (φ ψ : power_series R) :
+ ψ) =
@[protected]
noncomputable def power_series.inv.aux {R : Type u_1} [ring R] :
R →

Auxiliary function used for computing inverse of a power series

Equations
theorem power_series.coeff_inv_aux {R : Type u_1} [ring R] (n : ) (a : R) (φ : power_series R) :
n) φ) = ite (n = 0) a (-a * (λ (x : × ), ite (x.snd < n) ( x.fst) φ * x.snd) φ)) 0))
noncomputable def power_series.inv_of_unit {R : Type u_1} [ring R] (φ : power_series R) (u : Rˣ) :

A formal power series is invertible if the constant coefficient is invertible.

Equations
theorem power_series.coeff_inv_of_unit {R : Type u_1} [ring R] (n : ) (φ : power_series R) (u : Rˣ) :
n) (φ.inv_of_unit u) = ite (n = 0) u⁻¹ (-u⁻¹ * (λ (x : × ), ite (x.snd < n) ( x.fst) φ * x.snd) (φ.inv_of_unit u)) 0))
@[simp]
theorem power_series.constant_coeff_inv_of_unit {R : Type u_1} [ring R] (φ : power_series R) (u : Rˣ) :
theorem power_series.mul_inv_of_unit {R : Type u_1} [ring R] (φ : power_series R) (u : Rˣ) (h : = u) :
φ * φ.inv_of_unit u = 1
theorem power_series.sub_const_eq_shift_mul_X {R : Type u_1} [ring R] (φ : power_series R) :
φ - φ) = power_series.mk (λ (p : ), (p + 1)) φ) * power_series.X

Two ways of removing the constant coefficient of a power series are the same.

theorem power_series.sub_const_eq_X_mul_shift {R : Type u_1} [ring R] (φ : power_series R) :
φ - φ) = power_series.X * power_series.mk (λ (p : ), (p + 1)) φ)
@[simp]
theorem power_series.rescale_X {A : Type u_2} [comm_ring A] (a : A) :
theorem power_series.rescale_neg_one_X {A : Type u_2} [comm_ring A] :
noncomputable def power_series.eval_neg_hom {A : Type u_2} [comm_ring A] :

The ring homomorphism taking a power series `f(X)` to `f(-X)`.

Equations
@[simp]
theorem power_series.eval_neg_hom_X {A : Type u_2} [comm_ring A] :
theorem power_series.eq_zero_or_eq_zero_of_mul_eq_zero {R : Type u_1} [ring R] [is_domain R] (φ ψ : power_series R) (h : φ * ψ = 0) :
φ = 0 ψ = 0
@[protected, instance]
def power_series.is_domain {R : Type u_1} [ring R] [is_domain R] :
theorem power_series.span_X_is_prime {R : Type u_1} [comm_ring R] [is_domain R] :

The ideal spanned by the variable in the power series ring over an integral domain is a prime ideal.

theorem power_series.X_prime {R : Type u_1} [comm_ring R] [is_domain R] :

The variable of the power series ring over an integral domain is prime.

theorem power_series.rescale_injective {R : Type u_1} [comm_ring R] [is_domain R] {a : R} (ha : a 0) :
@[protected, instance]
def power_series.map.is_local_ring_hom {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] (f : R →+* S)  :
@[protected, instance]
def power_series.local_ring {R : Type u_1} [comm_ring R] [local_ring R] :
theorem power_series.C_eq_algebra_map {R : Type u_1} {r : R} :
theorem power_series.algebra_map_apply {R : Type u_1} {A : Type u_2} [semiring A] [ A] {r : R} :
(power_series A)) r = ( A) r)
@[protected, instance]
@[protected]
noncomputable def power_series.inv {k : Type u_2} [field k] :

The inverse 1/f of a power series f defined over a field

Equations
@[protected, instance]
noncomputable def power_series.has_inv {k : Type u_2} [field k] :
Equations
theorem power_series.inv_eq_inv_aux {k : Type u_2} [field k] (φ : power_series k) :
theorem power_series.coeff_inv {k : Type u_2} [field k] (n : ) (φ : power_series k) :
n) φ⁻¹ = ite (n = 0) φ)⁻¹ (- φ)⁻¹ * (λ (x : × ), ite (x.snd < n) ( x.fst) φ * x.snd) φ⁻¹) 0))
@[simp]
theorem power_series.constant_coeff_inv {k : Type u_2} [field k] (φ : power_series k) :
theorem power_series.inv_eq_zero {k : Type u_2} [field k] {φ : power_series k} :
φ⁻¹ = 0
@[simp]
theorem power_series.zero_inv {k : Type u_2} [field k] :
0⁻¹ = 0
@[simp]
theorem power_series.inv_of_unit_eq {k : Type u_2} [field k] (φ : power_series k) (h : 0) :
@[simp]
theorem power_series.inv_of_unit_eq' {k : Type u_2} [field k] (φ : power_series k) (u : kˣ) (h : = u) :
@[protected, simp]
theorem power_series.mul_inv_cancel {k : Type u_2} [field k] (φ : power_series k) (h : 0) :
φ * φ⁻¹ = 1
@[protected, simp]
theorem power_series.inv_mul_cancel {k : Type u_2} [field k] (φ : power_series k) (h : 0) :
φ⁻¹ * φ = 1
theorem power_series.eq_mul_inv_iff_mul_eq {k : Type u_2} [field k] {φ₁ φ₂ φ₃ : power_series k} (h : 0) :
φ₁ = φ₂ * φ₃⁻¹ φ₁ * φ₃ = φ₂
theorem power_series.eq_inv_iff_mul_eq_one {k : Type u_2} [field k] {φ ψ : power_series k} (h : 0) :
φ = ψ⁻¹ φ * ψ = 1
theorem power_series.inv_eq_iff_mul_eq_one {k : Type u_2} [field k] {φ ψ : power_series k} (h : 0) :
ψ⁻¹ = φ φ * ψ = 1
@[protected, simp]
theorem power_series.mul_inv_rev {k : Type u_2} [field k] (φ ψ : power_series k) :
* ψ)⁻¹ = ψ⁻¹ * φ⁻¹
@[simp]
theorem power_series.inv_one {k : Type u_2} [field k] :
1⁻¹ = 1
@[simp]
theorem power_series.C_inv {k : Type u_2} [field k] (r : k) :
@[simp]
theorem power_series.X_inv {k : Type u_2} [field k] :
@[simp]
theorem power_series.smul_inv {k : Type u_2} [field k] (r : k) (φ : power_series k) :
theorem power_series.exists_coeff_ne_zero_iff_ne_zero {R : Type u_1} [semiring R] {φ : power_series R} :
(∃ (n : ), n) φ 0) φ 0
noncomputable def power_series.order {R : Type u_1} [semiring R] (φ : power_series R) :

The order of a formal power series `φ` is the greatest `n : part_enat` such that `X^n` divides `φ`. The order is `⊤` if and only if `φ = 0`.

Equations
@[simp]
theorem power_series.order_zero {R : Type u_1} [semiring R] :

The order of the `0` power series is infinite.

theorem power_series.order_finite_iff_ne_zero {R : Type u_1} [semiring R] {φ : power_series R} :
φ.order.dom φ 0
theorem power_series.coeff_order {R : Type u_1} [semiring R] {φ : power_series R} (h : φ.order.dom) :
(φ.order.get h)) φ 0

If the order of a formal power series is finite, then the coefficient indexed by the order is nonzero.

theorem power_series.order_le {R : Type u_1} [semiring R] {φ : power_series R} (n : ) (h : n) φ 0) :

If the `n`th coefficient of a formal power series is nonzero, then the order of the power series is less than or equal to `n`.

theorem power_series.coeff_of_lt_order {R : Type u_1} [semiring R] {φ : power_series R} (n : ) (h : n < φ.order) :
n) φ = 0

The `n`th coefficient of a formal power series is `0` if `n` is strictly smaller than the order of the power series.

@[simp]
theorem power_series.order_eq_top {R : Type u_1} [semiring R] {φ : power_series R} :
φ.order = φ = 0

The `0` power series is the unique power series with infinite order.

theorem power_series.nat_le_order {R : Type u_1} [semiring R] (φ : power_series R) (n : ) (h : ∀ (i : ), i < n i) φ = 0) :

The order of a formal power series is at least `n` if the `i`th coefficient is `0` for all `i < n`.

theorem power_series.le_order {R : Type u_1} [semiring R] (φ : power_series R) (n : part_enat) (h : ∀ (i : ), i < n i) φ = 0) :
n φ.order

The order of a formal power series is at least `n` if the `i`th coefficient is `0` for all `i < n`.

theorem power_series.order_eq_nat {R : Type u_1} [semiring R] {φ : power_series R} {n : } :
φ.order = n n) φ 0 ∀ (i : ), i < n i) φ = 0

The order of a formal power series is exactly `n` if the `n`th coefficient is nonzero, and the `i`th coefficient is `0` for all `i < n`.

theorem power_series.order_eq {R : Type u_1} [semiring R] {φ : power_series R} {n : part_enat} :
φ.order = n (∀ (i : ), i = n i) φ 0) ∀ (i : ), i < n i) φ = 0

The order of a formal power series is exactly `n` if the `n`th coefficient is nonzero, and the `i`th coefficient is `0` for all `i < n`.

theorem power_series.le_order_add {R : Type u_1} [semiring R] (φ ψ : power_series R) :
+ ψ).order

The order of the sum of two formal power series is at least the minimum of their orders.

theorem power_series.order_add_of_order_eq {R : Type u_1} [semiring R] (φ ψ : power_series R) (h : φ.order ψ.order) :
+ ψ).order = φ.order ψ.order

The order of the sum of two formal power series is the minimum of their orders if their orders differ.

theorem power_series.order_mul_ge {R : Type u_1} [semiring R] (φ ψ : power_series R) :
φ.order + ψ.order * ψ).order

The order of the product of two formal power series is at least the sum of their orders.

theorem power_series.order_monomial {R : Type u_1} [semiring R] (n : ) (a : R) [decidable (a = 0)] :
( a).order = ite (a = 0) n

The order of the monomial `a*X^n` is infinite if `a = 0` and `n` otherwise.

theorem power_series.order_monomial_of_ne_zero {R : Type u_1} [semiring R] (n : ) (a : R) (h : a 0) :
( a).order = n

The order of the monomial `a*X^n` is `n` if `a ≠ 0`.

theorem power_series.coeff_mul_of_lt_order {R : Type u_1} [semiring R] {φ ψ : power_series R} {n : } (h : n < ψ.order) :
n) * ψ) = 0

If `n` is strictly smaller than the order of `ψ`, then the `n`th coefficient of its product with any other power series is `0`.

theorem power_series.coeff_mul_one_sub_of_lt_order {R : Type u_1} [comm_ring R] {φ ψ : power_series R} (n : ) (h : n < ψ.order) :
n) * (1 - ψ)) = n) φ
theorem power_series.coeff_mul_prod_one_sub_of_lt_order {R : Type u_1} {ι : Type u_2} [comm_ring R] (k : ) (s : finset ι) (φ : power_series R) (f : ι → ) :
(∀ (i : ι), i sk < (f i).order) k) * s.prod (λ (i : ι), 1 - f i)) = k) φ
theorem power_series.X_pow_order_dvd {R : Type u_1} [semiring R] {φ : power_series R} (h : φ.order.dom) :
φ
theorem power_series.order_eq_multiplicity_X {R : Type u_1} (φ : power_series R) :
@[simp]
theorem power_series.order_one {R : Type u_1} [semiring R] [nontrivial R] :
1.order = 0

The order of the formal power series `1` is `0`.

@[simp]
theorem power_series.order_X {R : Type u_1} [semiring R] [nontrivial R] :

The order of the formal power series `X` is `1`.

@[simp]
theorem power_series.order_X_pow {R : Type u_1} [semiring R] [nontrivial R] (n : ) :

The order of the formal power series `X^n` is `n`.

theorem power_series.order_mul {R : Type u_1} [comm_ring R] [is_domain R] (φ ψ : power_series R) :
* ψ).order = φ.order + ψ.order

The order of the product of two formal power series over an integral domain is the sum of their orders.

@[protected, instance]
def polynomial.coe_to_power_series {R : Type u_2}  :

The natural inclusion from polynomials into formal power series.

Equations
theorem polynomial.coe_def {R : Type u_2} (φ : polynomial R) :
@[simp, norm_cast]
theorem polynomial.coeff_coe {R : Type u_2} (φ : polynomial R) (n : ) :
n) φ = φ.coeff n
@[simp, norm_cast]
theorem polynomial.coe_monomial {R : Type u_2} (n : ) (a : R) :
( a) = a
@[simp, norm_cast]
theorem polynomial.coe_zero {R : Type u_2}  :
0 = 0
@[simp, norm_cast]
theorem polynomial.coe_one {R : Type u_2}  :
1 = 1
@[simp, norm_cast]
theorem polynomial.coe_add {R : Type u_2} (φ ψ : polynomial R) :
+ ψ) = φ + ψ
@[simp, norm_cast]
theorem polynomial.coe_mul {R : Type u_2} (φ ψ : polynomial R) :
* ψ) = φ * ψ
@[simp, norm_cast]
theorem polynomial.coe_C {R : Type u_2} (a : R) :
@[simp, norm_cast]
theorem polynomial.coe_bit0 {R : Type u_2} (φ : polynomial R) :
(bit0 φ) =
@[simp, norm_cast]
theorem polynomial.coe_bit1 {R : Type u_2} (φ : polynomial R) :
(bit1 φ) =
@[simp, norm_cast]
theorem polynomial.coe_X {R : Type u_2}  :
@[simp]
theorem polynomial.constant_coeff_coe {R : Type u_2} (φ : polynomial R) :
= φ.coeff 0
theorem polynomial.coe_injective (R : Type u_2)  :
@[simp, norm_cast]
theorem polynomial.coe_inj {R : Type u_2} {φ ψ : polynomial R} :
φ = ψ φ = ψ
@[simp]
theorem polynomial.coe_eq_zero_iff {R : Type u_2} {φ : polynomial R} :
φ = 0 φ = 0
@[simp]
theorem polynomial.coe_eq_one_iff {R : Type u_2} {φ : polynomial R} :
φ = 1 φ = 1

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

Equations
@[simp]
theorem polynomial.coe_to_power_series.ring_hom_apply {R : Type u_2} (φ : polynomial R) :
@[simp, norm_cast]
theorem polynomial.coe_pow {R : Type u_2} (φ : polynomial R) (n : ) :
^ n) = φ ^ n
noncomputable def polynomial.coe_to_power_series.alg_hom {R : Type u_2} (A : Type u_3) [semiring A] [ A] :

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

Equations
@[simp]
theorem polynomial.coe_to_power_series.alg_hom_apply {R : Type u_2} (φ : polynomial R) (A : Type u_3) [semiring A] [ A] :
@[protected, instance]
noncomputable def power_series.algebra_polynomial {R : Type u_1} {A : Type u_2} [ A] :
Equations
@[protected, instance]
noncomputable def power_series.algebra_power_series {R : Type u_1} {A : Type u_2} [ A] :
Equations
@[protected, instance]
noncomputable def power_series.algebra_polynomial' {R : Type u_1} {A : Type u_2} [ (polynomial A)] :
Equations
theorem power_series.algebra_map_apply' {R : Type u_1} (A : Type u_2) [ A] (p : polynomial R) :
theorem power_series.algebra_map_apply'' {R : Type u_1} (A : Type u_2) [ A] (f : power_series R) :