Algebraic Combinatorics Blueprint

8. Exponentials and Logarithms🔗

Throughout this section, unless otherwise stated, we assume that K is not just a commutative ring, but actually a commutative \mathbb{Q}-algebra.

Definition8.1
L∃∀Nused by 0

Define three FPS \exp, \overline{\log} and \overline{\exp} in K\left[\left[x\right]\right] by \exp :=\sum_{n\in\mathbb{N}}\dfrac{1}{n!}x^{n}, \qquad \overline{\log} :=\sum_{n\geq1}\dfrac{\left(-1\right)^{n-1}}{n}x^{n}, \qquad \overline{\exp} :=\exp-1=\sum_{n\geq1}\dfrac{1}{n!}x^{n}.

The last equality sign follows from \exp=\sum_{n\in\mathbb{N}}\dfrac{1}{n!}x^{n} =\underbrace{\dfrac{1}{0!}}_{=1}\underbrace{x^{0}}_{=1} +\sum_{n\geq1}\dfrac{1}{n!}x^{n} =1+\sum_{n\geq1}\dfrac{1}{n!}x^{n}.

Lean code for Definition8.12 definitions
  • def PowerSeries.logbar.{u_1} (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1
    def PowerSeries.logbar.{u_1} (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. )
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1
    The logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log). 
  • def PowerSeries.expbar.{u_1} (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1
    def PowerSeries.expbar.{u_1} (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. )
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1
    The shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log). 
Lemma8.2
Group: Helper series and derivative identities. (3)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Define the FPS \iota := \sum_{n \in \mathbb{N}} (-1)^n x^n. This is the geometric series for (1+x)^{-1}; indeed, \iota \cdot (1+x) = 1.

Lean code for Lemma8.21 definition
  • def PowerSeries.invOnePlusX.{u_1} (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1
    def PowerSeries.invOnePlusX.{u_1}
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1
    The series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`. 
Proof

Direct verification: the product is computed coefficient-wise and shown to equal 1.

Lemma8.3
Group: Helper series and derivative identities. (3)
Hover another entry in this group to preview it.
Preview
Lemma 8.2
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

We have \overline{\log}' = \iota = (1+x)^{-1}.

Lean code for Lemma8.31 theorem
  • complete
    theorem PowerSeries.derivative_logbar.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.invOnePlusXPowerSeries.invOnePlusX.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`.  KType u_1
    theorem PowerSeries.derivative_logbar.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1)
          (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.invOnePlusXPowerSeries.invOnePlusX.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`.  KType u_1
    The derivative of `logbar` is `invOnePlusX`. This is part of the proof of
    Proposition 7.8.3 (prop.fps.exp-log-der). 
Proof

By computing the derivative of \overline{\log} = \sum_{n \ge 1} \frac{(-1)^{n-1}}{n} x^n term-by-term: \overline{\log}' = \sum_{n \ge 1} (-1)^{n-1} x^{n-1} = \sum_{n \ge 0} (-1)^n x^n = \iota.

Lemma8.4
Group: Helper series and derivative identities. (3)
Hover another entry in this group to preview it.
Preview
Lemma 8.2
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

We have \overline{\exp}' = \exp.

Lean code for Lemma8.41 theorem
  • complete
    theorem PowerSeries.derivative_expbar.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1
    theorem PowerSeries.derivative_expbar.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1)
          (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1
    The derivative of `expbar` equals `exp`. This is equation (7.8.3) in the proof of
    Proposition 7.8.3 (prop.fps.exp-log-der). 
Proof

Since \overline{\exp} = \exp - 1, we have \overline{\exp}' = \exp' - 0 = \exp' = \exp, where the last equality is the standard fact \exp' = \exp.

Lemma8.5
Group: Helper series and derivative identities. (3)
Hover another entry in this group to preview it.
Preview
Lemma 8.2
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

Let g \in K\llbracket x \rrbracket with [x^0]g = 0. Then \iota \circ g = (1+g)^{-1}.

Lean code for Lemma8.51 theorem
  • complete
    theorem PowerSeries.invOnePlusX_subst_eq_inv.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K (PowerSeries.invOnePlusXPowerSeries.invOnePlusX.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`.  KType u_2) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. gPowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`.
    theorem PowerSeries.invOnePlusX_subst_eq_inv.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K
          (PowerSeries.invOnePlusXPowerSeries.invOnePlusX.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`.  KType u_2) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. gPowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`.
    `(invOnePlusX K).subst g = (1 + g)⁻¹` when `constantCoeff g = 0`. 
Proof

We have (\iota \circ g) \cdot (1 + g) = (\iota \cdot (1+x)) \circ g = 1 \circ g = 1. Since [x^0](1+g) \ne 0, this gives \iota \circ g = (1+g)^{-1}.

Theorem8.6
L∃∀Nused by 0

Let g\in K\left[\left[x\right]\right] with \left[x^{0}\right]g=0. Then:

(a) We have \left(\overline{\exp}\circ g\right)^{\prime} =\left(\exp\circ g\right)^{\prime} =\left(\exp\circ g\right)\cdot g^{\prime}.

(b) We have \left(\overline{\log}\circ g\right)^{\prime} =\left(1+g\right)^{-1}\cdot g^{\prime}.

Lean code for Theorem8.63 theorems
  • complete
    theorem PowerSeries.derivative_exp_comp.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) gPowerSeries K
    theorem PowerSeries.derivative_exp_comp.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1)
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K
            (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K
            (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) gPowerSeries K
    Chain rule for composition with `exp`: `(exp ∘ g)' = (exp ∘ g) · g'`.
    This is Proposition 7.8.3(a) (prop.fps.exp-log-der). 
  • complete
    theorem PowerSeries.derivative_expbar_comp.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1)
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) gPowerSeries K
    theorem PowerSeries.derivative_expbar_comp.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1)
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K
            (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K
            (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) gPowerSeries K
    Chain rule for composition with `expbar`: `(expbar ∘ g)' = (exp ∘ g) · g'`.
    This is Proposition 7.8.3(a) (prop.fps.exp-log-der).
    
    Note that `expbar = exp - 1`, so `expbar' = exp' = exp`, and the chain rule gives
    `(expbar ∘ g)' = (exp ∘ g) · g'`. 
  • complete
    theorem PowerSeries.derivative_logbar_comp.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2)
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_2)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. gPowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2) gPowerSeries K
    theorem PowerSeries.derivative_logbar_comp.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2)
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K
            (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_2)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. gPowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2) gPowerSeries K
    Chain rule for composition with `logbar`: `(logbar ∘ g)' = (1+g)⁻¹ · g'`.
    This is Proposition 7.8.3(b) (prop.fps.exp-log-der).
    Note: Requires Field K for the inverse to exist. 
Proof

(a) Let us first show that \overline{\exp}^{\prime}=\exp^{\prime}=\exp. Indeed, \overline{\exp}=\exp-1, so that \exp=\overline{\exp}+1 and therefore \exp^{\prime} =\left(\overline{\exp}+1\right)^{\prime} =\overline{\exp}^{\prime}+\underbrace{1^{\prime}}_{=0} =\overline{\exp}^{\prime}. Next, since \exp=\sum_{n\in\mathbb{N}}\dfrac{1}{n!}x^{n}, the definition of a derivative yields \exp^{\prime} =\sum_{n\geq1}\underbrace{n\cdot\dfrac{1}{n!}}_{=\dfrac{1}{\left(n-1\right)!}}x^{n-1} =\sum_{n\geq1}\dfrac{1}{\left(n-1\right)!}x^{n-1} =\sum_{n\in\mathbb{N}}\dfrac{1}{n!}x^{n} =\exp, where we have substituted n for n-1 in the sum. Comparing these equalities, we find \overline{\exp}^{\prime}=\exp.

Now we can apply the chain rule to f=\overline{\exp}, since \left[x^{0}\right]g=0, and thus obtain \left(\overline{\exp}\circ g\right)^{\prime} =\left(\underbrace{\overline{\exp}^{\prime}}_{=\exp}\circ g\right)\cdot g^{\prime} =\left(\exp\circ g\right)\cdot g^{\prime}. The same computation, but with \overline{\exp} replaced by \exp, yields \left(\exp\circ g\right)^{\prime}=\left(\exp\circ g\right)\cdot g^{\prime}. Combining these formulas proves part (a).

(b) We have \overline{\log}=\sum_{n\geq1}\dfrac{\left(-1\right)^{n-1}}{n}x^{n}. Thus \overline{\log}^{\prime} =\left(\sum_{n\geq1}\dfrac{\left(-1\right)^{n-1}}{n}x^{n}\right)^{\prime} =\sum_{n\geq1}\underbrace{\dfrac{\left(-1\right)^{n-1}}{n}n}_{=\left(-1\right)^{n-1}} \underbrace{x^{\prime}}_{=1}x^{n-1} =\sum_{n\geq1}\left(-1\right)^{n-1}x^{n-1} =\sum_{n\in\mathbb{N}}\left(-1\right)^{n}x^{n}, where we have substituted n for n-1 in the sum. On the other hand, \left(1+x\right)^{-1}=\sum_{n\in\mathbb{N}}\left(-1\right)^{n}x^{n}. Comparing these two equalities, we find \overline{\log}^{\prime}=\left(1+x\right)^{-1}.

Now we can apply the chain rule to f=\overline{\log}, again using \left[x^{0}\right]g=0, and thus obtain \left(\overline{\log}\circ g\right)^{\prime} =\left(\underbrace{\overline{\log}^{\prime}}_{=\left(1+x\right)^{-1}}\circ g\right)\cdot g^{\prime} =\left(\left(1+x\right)^{-1}\circ g\right)\cdot g^{\prime}. However, \left(1+x\right)^{-1}\circ g=\left(1+g\right)^{-1}. Indeed, \dfrac{1}{1+x}\circ g=\dfrac{1\circ g}{\left(1+x\right)\circ g} since the FPS 1+x is invertible, while 1\circ g=\underline{1} and \left(1+x\right)\circ g=1+g. Hence \left(\overline{\log}\circ g\right)^{\prime} =\left(1+g\right)^{-1}\cdot g^{\prime}, which proves part (b).

Lemma8.7
Group: Auxiliary uniqueness and substitution lemmas for the inverse theorem. (4)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Let h_1,h_2,g \in K\llbracket x \rrbracket. If h_1' = (1+h_1)\cdot g and h_2' = (1+h_2)\cdot g and [x^0]h_1 = [x^0]h_2, then h_1 = h_2.

Lean code for Lemma8.71 theorem
  • complete
    theorem PowerSeries.eq_of_derivative_eq_mul_of_inv.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {h₁PowerSeries K h₂PowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hd₁(PowerSeries.derivative K) h₁ = (1 + h₁) * g : (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. h₁PowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hd₂(PowerSeries.derivative K) h₂ = (1 + h₂) * g : (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₂PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. h₂PowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hcPowerSeries.constantCoeff h₁ = PowerSeries.constantCoeff h₂ : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₂PowerSeries K) :
      h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₂PowerSeries K
    theorem PowerSeries.eq_of_derivative_eq_mul_of_inv.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {h₁PowerSeries K h₂PowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hd₁(PowerSeries.derivative K) h₁ = (1 + h₁) * g :
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
          (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. h₁PowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hd₂(PowerSeries.derivative K) h₂ = (1 + h₂) * g :
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₂PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
          (HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. h₂PowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hcPowerSeries.constantCoeff h₁ = PowerSeries.constantCoeff h₂ :
        PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
          PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₂PowerSeries K) :
      h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₂PowerSeries K
    Uniqueness lemma for ODEs of the form `h' = (1 + h) * g` with matching initial conditions.
    This is used to prove `expbar_comp_logbar`. 
Proof

Use strong induction on the coefficient index. The base case uses the equality of constant terms. For the inductive step, the differential equation relates \left[x^{n+1}\right]h\cdot (n+1) to a convolution depending only on lower coefficients; by induction, these lower coefficients agree for h_1 and h_2, and then the \mathbb{Q}-algebra structure lets us cancel n+1.

Lemma8.8
Group: Auxiliary uniqueness and substitution lemmas for the inverse theorem. (4)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Let h_1,h_2 \in K\llbracket x \rrbracket. If h_1' = 1 and h_2' = 1 and [x^0]h_1 = [x^0]h_2, then h_1 = h_2.

Lean code for Lemma8.81 theorem
  • complete
    theorem PowerSeries.eq_of_derivative_eq_one.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {h₁PowerSeries K h₂PowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hd₁(PowerSeries.derivative K) h₁ = 1 : (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1)
      (hd₂(PowerSeries.derivative K) h₂ = 1 : (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₂PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1)
      (hcPowerSeries.constantCoeff h₁ = PowerSeries.constantCoeff h₂ : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₂PowerSeries K) :
      h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₂PowerSeries K
    theorem PowerSeries.eq_of_derivative_eq_one.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] {h₁PowerSeries K h₂PowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hd₁(PowerSeries.derivative K) h₁ = 1 :
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1)
      (hd₂(PowerSeries.derivative K) h₂ = 1 :
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_1) h₂PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1)
      (hcPowerSeries.constantCoeff h₁ = PowerSeries.constantCoeff h₂ :
        PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
          PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₂PowerSeries K) :
      h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₂PowerSeries K
    Uniqueness lemma for ODEs of the form `h' = 1` (constant) with matching initial conditions. 
Proof

As in the previous lemma: use strong induction on the coefficient index and cancel n+1 at each step.

Lemma8.9
Group: Auxiliary uniqueness and substitution lemmas for the inverse theorem. (4)
Hover another entry in this group to preview it.
L∃∀Nused by 0

We have (\iota \circ \overline{\exp}) \cdot \exp = 1.

Lean code for Lemma8.91 theorem
  • complete
    theorem PowerSeries.invOnePlusX_subst_expbar_mul_exp.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) (PowerSeries.invOnePlusXPowerSeries.invOnePlusX.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`.  KType u_1) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
    theorem PowerSeries.invOnePlusX_subst_expbar_mul_exp.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1)
            (PowerSeries.invOnePlusXPowerSeries.invOnePlusX.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`.  KType u_1) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
    `(invOnePlusX K).subst (expbar K) * exp K = 1`. This is a key lemma for proving
    `logbar_comp_expbar`. 
Proof

Substitute \overline{\exp} into the identity \iota \cdot (1+x) = 1, observing that (1+x)\circ \overline{\exp} = 1 + \overline{\exp} = \exp.

Lemma8.10
Group: Auxiliary uniqueness and substitution lemmas for the inverse theorem. (4)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Let f,g\in K\left[\left[x\right]\right] be two FPSs with \left[x^0\right]g=0. Then \left[x^0\right](f\circ g)=\left[x^0\right]f.

Lean code for Lemma8.101 theorem
  • complete
    theorem PowerSeries.constantCoeff_subst_of_constantCoeff_zero.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1] {fPowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K fPowerSeries K) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries K
    theorem PowerSeries.constantCoeff_subst_of_constantCoeff_zero.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      {fPowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_1}
      (hgPowerSeries.constantCoeff g = 0 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0) :
      PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series. 
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K fPowerSeries K) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries K
    The constant term of a composition `f ∘ g` where `g` has constant term 0.
    This is Lemma 7.8.4 (lem.fps.compos-cst-term-0).
    
    Note: Mathlib has `PowerSeries.constantCoeff_subst` which requires `HasSubst`. 
Proof

Write f=\sum_{n\in\mathbb{N}} f_n x^n, so f_0=\left[x^0\right]f. Since f[g]=\sum_{n\in\mathbb{N}} f_n g^n, the constant-term computation from substitution gives \left[x^0\right]\left(\sum_{n\in\mathbb{N}} f_n g^n\right)=f_0. Rewriting this in terms of f\circ g yields the claim.

Theorem8.11
Group: Auxiliary uniqueness and substitution lemmas for the inverse theorem. (4)
Hover another entry in this group to preview it.
L∃∀Nused by 0

We have \overline{\exp}\circ\overline{\log}=x \qquad\text{and}\qquad \overline{\log}\circ\overline{\exp}=x.

Lean code for Theorem8.112 theorems
  • complete
    theorem PowerSeries.expbar_comp_logbar.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring. 
    theorem PowerSeries.expbar_comp_logbar.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1)
          (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring. 
    `expbar ∘ logbar = x`. This is the first part of Theorem 7.8.5 (thm.fps.exp-log-inv),
    equation (7.8.1).
    
    The proof uses the uniqueness of solutions to ODEs: both `expbar ∘ logbar` and `X` satisfy
    the ODE `h' = (1 + h) * invOnePlusX` with initial condition `h(0) = 0`. 
  • complete
    theorem PowerSeries.logbar_comp_expbar.{u_1} {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring. 
    theorem PowerSeries.logbar_comp_expbar.{u_1}
      {KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_1]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_1] :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (PowerSeries.expbarPowerSeries.expbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe shifted exponential series `expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n`.
    This is `\overline{\exp}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1)
          (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring. 
    `logbar ∘ expbar = x`. This is the second part of Theorem 7.8.5 (thm.fps.exp-log-inv),
    equation (7.8.1).
    
    The proof uses the uniqueness of solutions to ODEs: both `logbar ∘ expbar` and `X` satisfy
    the ODE `h' = 1` with initial condition `h(0) = 0`. The key calculation is:
    - `(logbar ∘ expbar)' = (logbar' ∘ expbar) · expbar'` by chain rule
    - `logbar' = invOnePlusX` and `expbar' = exp`
    - `(invOnePlusX ∘ expbar) · exp = 1` since `invOnePlusX · (1 + X) = 1` and `1 + expbar = exp`
    - So `(logbar ∘ expbar)' = 1 = X'` 
Proof

First prove \overline{\log}\circ\overline{\exp}=x. The idea is to show that \overline{\log}\circ\overline{\exp} and x have the same constant term, namely 0, and the same derivative, namely 1. Over a \mathbb{Q}-algebra, a power series is determined by its constant term and its derivative, so equality follows.

Indeed, \left[x^0\right]\overline{\exp}=0, so the constant-term lemma gives \left[x^0\right]\left(\overline{\log}\circ\overline{\exp}\right)=0. Also, the derivative proposition applied to g=\overline{\exp} shows \left(\overline{\log}\circ\overline{\exp}\right)' = 1 = x', because 1+\overline{\exp}=\exp and \overline{\exp}'=\exp. Hence \overline{\log}\circ\overline{\exp}=x.

For the other identity, first show that \exp\circ\overline{\log}=1+x. Apply the quotient rule to \dfrac{\exp\circ\overline{\log}}{1+x}. Using the chain rule together with \overline{\log}'=(1+x)^{-1}, its derivative simplifies to 0, so the quotient is constant. Comparing constant terms shows this constant is 1, hence \exp\circ\overline{\log}=1+x.

Finally, since \overline{\exp}=\exp-1, we obtain \overline{\exp}\circ\overline{\log} =\left(\exp\circ\overline{\log}\right)+\left(\underline{-1}\circ\overline{\log}\right) =(1+x)+(-1)=x.

Definition8.12
Group: The Exp and Log maps between series with constant term 0 and 1 . (2)
Hover another entry in this group to preview it.
Preview
Lemma 8.13
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

(a) Let K\left[\left[x\right]\right]_0 denote the set of all FPSs f\in K\left[\left[x\right]\right] with \left[x^0\right]f=0.

(b) Let K\left[\left[x\right]\right]_1 denote the set of all FPSs f\in K\left[\left[x\right]\right] with \left[x^0\right]f=1.

(c) Define two maps \operatorname{Exp}:K\left[\left[x\right]\right]_0\to K\left[\left[x\right]\right]_1, g\mapsto \exp\circ g, and \operatorname{Log}:K\left[\left[x\right]\right]_1\to K\left[\left[x\right]\right]_0, f\mapsto \overline{\log}\circ (f-1). These are well-defined by the following lemma.

Lean code for Definition8.124 definitions
  • def PowerSeries.PowerSeries₀.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2] :
      SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
    def PowerSeries.PowerSeries₀.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2] :
      SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
    `R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
  • def PowerSeries.PowerSeries₁.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2] :
      SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
    def PowerSeries.PowerSeries₁.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2] :
      SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
    `R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
  • def PowerSeries.Exp.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    def PowerSeries.Exp.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
  • def PowerSeries.Log.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₁ : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    def PowerSeries.Log.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₁ : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
Lemma8.13
Group: The Exp and Log maps between series with constant term 0 and 1 . (2)
Hover another entry in this group to preview it.
Preview
Definition 8.12
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

(a) For any f,g\in K\left[\left[x\right]\right]_0, we have f\circ g\in K\left[\left[x\right]\right]_0.

(b) For any f\in K\left[\left[x\right]\right]_1 and g\in K\left[\left[x\right]\right]_0, we have f\circ g\in K\left[\left[x\right]\right]_1.

(c) For any g\in K\left[\left[x\right]\right]_0, we have \exp\circ g\in K\left[\left[x\right]\right]_1.

(d) For any f\in K\left[\left[x\right]\right]_1, we have f-1\in K\left[\left[x\right]\right]_0 and \overline{\log}\circ (f-1)\in K\left[\left[x\right]\right]_0.

Lean code for Lemma8.134 theorems
  • complete
    theorem PowerSeries.PowerSeries₀.subst_mem.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {fPowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2} (hff ∈ PowerSeries.PowerSeries₀ : fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (hgg ∈ PowerSeries.PowerSeries₀ : gPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    theorem PowerSeries.PowerSeries₀.subst_mem.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {fPowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hff ∈ PowerSeries.PowerSeries₀ : fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (hgg ∈ PowerSeries.PowerSeries₀ : gPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`.
        PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    Composition of two FPS with constant term 0 has constant term 0.
    This is Lemma 7.8.7(a) (lem.fps.Exp-Log-maps-wd). 
  • complete
    theorem PowerSeries.PowerSeries₁.subst_mem.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {fPowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2} (hff ∈ PowerSeries.PowerSeries₁ : fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hgg ∈ PowerSeries.PowerSeries₀ : gPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    theorem PowerSeries.PowerSeries₁.subst_mem.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {fPowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hff ∈ PowerSeries.PowerSeries₁ : fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hgg ∈ PowerSeries.PowerSeries₀ : gPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`.
        PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    Composition of an FPS with constant term 1 and one with constant term 0 has constant term 1.
    This is Lemma 7.8.7(b) (lem.fps.Exp-Log-maps-wd). 
  • complete
    theorem PowerSeries.exp_subst_mem_PowerSeries₁.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hgg ∈ PowerSeries.PowerSeries₀ : gPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_2) Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    theorem PowerSeries.exp_subst_mem_PowerSeries₁.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hgg ∈ PowerSeries.PowerSeries₀ : gPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  gPowerSeries K
          (PowerSeries.expPowerSeries.exp.{u_1} (A : Type u_1) [Ring A] [Algebra ℚ A] : PowerSeries APower series for the exponential function at zero.  KType u_2) Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`.
        PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    `exp ∘ g` has constant term 1 when `g` has constant term 0.
    This is Lemma 7.8.7(c) (lem.fps.Exp-Log-maps-wd). 
  • complete
    theorem PowerSeries.logbar_subst_sub_one_mem_PowerSeries₀.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {fPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hff ∈ PowerSeries.PowerSeries₁ : fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).fPowerSeries K -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). 1)HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_2) Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`.
        PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    theorem PowerSeries.logbar_subst_sub_one_mem_PowerSeries₀.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {fPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hff ∈ PowerSeries.PowerSeries₁ : fPowerSeries K Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).fPowerSeries K -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). 1)HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).
          (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  KType u_2) Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`.
        PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
Proof

(a) If f,g\in K\left[\left[x\right]\right]_0, then \left[x^0\right]f=0 and \left[x^0\right]g=0. The constant-term composition lemma gives \left[x^0\right](f\circ g)=\left[x^0\right]f=0, so f\circ g\in K\left[\left[x\right]\right]_0.

(b) The same argument shows that if \left[x^0\right]f=1 and \left[x^0\right]g=0, then \left[x^0\right](f\circ g)=\left[x^0\right]f=1, so f\circ g\in K\left[\left[x\right]\right]_1.

(c) Since \exp=\sum_{n\in\mathbb{N}}\dfrac{1}{n!}x^n, we have \left[x^0\right]\exp=1, so \exp\in K\left[\left[x\right]\right]_1. Part (b) then gives \exp\circ g\in K\left[\left[x\right]\right]_1.

(d) If f\in K\left[\left[x\right]\right]_1, then \left[x^0\right](f-1)=\left[x^0\right]f-\left[x^0\right]1=1-1=0, so f-1\in K\left[\left[x\right]\right]_0. Also, \left[x^0\right]\overline{\log}=0, so \overline{\log}\in K\left[\left[x\right]\right]_0. Applying part (a) to \overline{\log} and f-1 yields \overline{\log}\circ (f-1)\in K\left[\left[x\right]\right]_0.

Lemma8.14
Group: The Exp and Log maps between series with constant term 0 and 1 . (2)
Hover another entry in this group to preview it.
Preview
Definition 8.12
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

The maps \operatorname{Exp} and \operatorname{Log} are mutually inverse bijections between K\left[\left[x\right]\right]_0 and K\left[\left[x\right]\right]_1.

Lean code for Lemma8.143 theorems
  • complete
    theorem PowerSeries.Log_Exp.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₀) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. g↑PowerSeries.PowerSeries₀
    theorem PowerSeries.Log_Exp.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₀) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. g↑PowerSeries.PowerSeries₀
    `Log (Exp g) = g` for any `g ∈ K⟦X⟧₀`. This is part of Lemma 7.8.8 (lem.fps.Exp-Log-maps-inv). 
  • complete
    theorem PowerSeries.Exp_Log.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₁ : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₁) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. f↑PowerSeries.PowerSeries₁
    theorem PowerSeries.Exp_Log.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₁ : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₁) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. f↑PowerSeries.PowerSeries₁
  • complete
    theorem PowerSeries.Exp_Log_inverse.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      Function.LeftInverseFunction.LeftInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`LeftInverse g f` means that `g` is a left inverse to `f`. That is, `g ∘ f = id`.  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
        Function.RightInverseFunction.RightInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`RightInverse g f` means that `g` is a right inverse to `f`. That is, `f ∘ g = id`.  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
    theorem PowerSeries.Exp_Log_inverse.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      Function.LeftInverseFunction.LeftInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`LeftInverse g f` means that `g` is a left inverse to `f`. That is, `g ∘ f = id`.  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
          PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
        Function.RightInverseFunction.RightInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`RightInverse g f` means that `g` is a right inverse to `f`. That is, `f ∘ g = id`.  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
          PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
    `Exp` and `Log` are mutually inverse. This is Lemma 7.8.8 (lem.fps.Exp-Log-maps-inv). 
Proof

First observe that every g\in K\left[\left[x\right]\right]_0 satisfies \exp\circ g = \overline{\exp}\circ g + 1, since \exp=\overline{\exp}+\underline{1} and \underline{1}\circ g=\underline{1}.

Now let f\in K\left[\left[x\right]\right]_1. Then f-1\in K\left[\left[x\right]\right]_0 by the previous lemma. Using associativity of composition together with \overline{\exp}\circ\overline{\log}=x, we obtain \overline{\exp}\circ\left(\overline{\log}\circ (f-1)\right)=f-1. Adding 1 and using the observation above shows \left(\operatorname{Exp}\circ\operatorname{Log}\right)(f)=f.

The same idea, using \overline{\log}\circ\overline{\exp}=x, shows that \operatorname{Log}\circ\operatorname{Exp}=\operatorname{id}. Hence the two maps are mutually inverse bijections.

Lemma8.15
Group: Auxiliary lemmas used to put group structures on the Exp and Log domains. (2)
Hover another entry in this group to preview it.
Preview
Lemma 8.16
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If f \in K\llbracket x \rrbracket_1, that is, if [x^0]f = 1, then f - 1 \in K\llbracket x \rrbracket_0, that is, [x^0](f-1) = 0.

Lean code for Lemma8.151 theorem
  • complete
    theorem PowerSeries.sub_one_mem_PowerSeries₀.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2} (hff ∈ PowerSeries.PowerSeries₁ : fPowerSeries R Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      fPowerSeries R -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). 1 Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    theorem PowerSeries.sub_one_mem_PowerSeries₀.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hff ∈ PowerSeries.PowerSeries₁ : fPowerSeries R Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      fPowerSeries R -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). 1 Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`. PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    If `f` has constant term 1, then `f - 1` has constant term 0.
    This is Lemma 7.8.7(d) (lem.fps.Exp-Log-maps-wd). 
Proof

\left[x^0\right](f-1)=\left[x^0\right]f-1=1-1=0.

Lemma8.16
Group: Auxiliary lemmas used to put group structures on the Exp and Log domains. (2)
Hover another entry in this group to preview it.
Preview
Lemma 8.15
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

Let h_1,h_2,g \in K\llbracket x \rrbracket. If h_1' = h_1 \cdot g and h_2' = h_2 \cdot g and [x^0]h_1 = [x^0]h_2, then h_1 = h_2.

Lean code for Lemma8.161 theorem
  • complete
    theorem PowerSeries.eq_of_derivative_eq_mul_self.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {h₁PowerSeries K h₂PowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hd₁(PowerSeries.derivative K) h₁ = h₁ * g : (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2) h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₁PowerSeries K *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hd₂(PowerSeries.derivative K) h₂ = h₂ * g : (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2) h₂PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₂PowerSeries K *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hcPowerSeries.constantCoeff h₁ = PowerSeries.constantCoeff h₂ : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₂PowerSeries K) :
      h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₂PowerSeries K
    theorem PowerSeries.eq_of_derivative_eq_mul_self.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {h₁PowerSeries K h₂PowerSeries K gPowerSeries K : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  KType u_2}
      (hd₁(PowerSeries.derivative K) h₁ = h₁ * g :
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2) h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
          h₁PowerSeries K *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hd₂(PowerSeries.derivative K) h₂ = h₂ * g :
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  KType u_2) h₂PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
          h₂PowerSeries K *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries K)
      (hcPowerSeries.constantCoeff h₁ = PowerSeries.constantCoeff h₂ :
        PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
          PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  h₂PowerSeries K) :
      h₁PowerSeries K =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. h₂PowerSeries K
    Uniqueness lemma: if two power series satisfy the same first-order linear ODE
    `h' = h * g` with the same initial condition, they are equal.
    This is used to prove `Exp_add`. 
Proof

Use strong induction on the coefficient index. The differential equation gives \left[x^{n+1}\right]h \cdot (n+1) = \left[x^n\right](h\cdot g), and the right-hand side only depends on coefficients of h of index at most n. By induction these lower coefficients agree for h_1 and h_2, and then the \mathbb{Q}-algebra structure lets us cancel n+1.

Lemma8.17
Group: Auxiliary lemmas used to put group structures on the Exp and Log domains. (2)
Hover another entry in this group to preview it.
Preview
Lemma 8.15
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

The map \operatorname{Exp} sends 0 \in K\llbracket x \rrbracket_0 to 1 \in K\llbracket x \rrbracket_1, and \operatorname{Log} sends 1 to 0.

Lean code for Lemma8.172 theorems
  • complete
    theorem PowerSeries.Exp_zero.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p0,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p1,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    theorem PowerSeries.Exp_zero.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p0,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p1,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    `Exp(0) = 1`. 
  • complete
    theorem PowerSeries.Log_one.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p1,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p0,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    theorem PowerSeries.Log_one.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p1,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p0,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    `Log(1) = 0`. 
Proof

\operatorname{Exp}(0)=\exp\circ 0 = 1, because substituting 0 picks out the constant term of \exp, which is 1. Likewise, \operatorname{Log}(1)=\overline{\log}\circ (1-1)=\overline{\log}\circ 0=0, because the constant term of \overline{\log} is 0.

Lemma8.18
Group: How Exp turns addition into multiplication, and Log does the reverse. (2)
Hover another entry in this group to preview it.
Preview
Theorem 8.19
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

(a) For any f,g\in K\left[\left[x\right]\right]_0, we have \operatorname{Exp}(f+g)=\operatorname{Exp}f\cdot \operatorname{Exp}g.

(b) For any f,g\in K\left[\left[x\right]\right]_1, we have \operatorname{Log}(fg)=\operatorname{Log}f+\operatorname{Log}g.

Lean code for Lemma8.182 theorems
  • complete
    theorem PowerSeries.Exp_add.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₀ g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pf↑PowerSeries.PowerSeries₀ +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. g↑PowerSeries.PowerSeries₀,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p(PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₀) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. (PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₀),Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    theorem PowerSeries.Exp_add.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₀ g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pf↑PowerSeries.PowerSeries₀ +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. g↑PowerSeries.PowerSeries₀,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p(PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₀) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
            (PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₀),Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
          Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    `Exp(f + g) = Exp(f) · Exp(g)`. This is Lemma 7.8.9(a) (lem.fps.Exp-Log-additive). 
  • complete
    theorem PowerSeries.Log_mul.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₁ g↑PowerSeries.PowerSeries₁ : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pf↑PowerSeries.PowerSeries₁ *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. g↑PowerSeries.PowerSeries₁,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p(PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₁) +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. (PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₁),Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    theorem PowerSeries.Log_mul.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      (f↑PowerSeries.PowerSeries₁ g↑PowerSeries.PowerSeries₁ : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pf↑PowerSeries.PowerSeries₁ *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. g↑PowerSeries.PowerSeries₁,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p(PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₁) +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`.
            (PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₁),Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
          Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    `Log(fg) = Log(f) + Log(g)`. This is Lemma 7.8.9(b) (lem.fps.Exp-Log-additive). 
Proof

(a) For f,g\in K\left[\left[x\right]\right]_0, the formal series definitions give \operatorname{Exp}f=\sum_{n\in\mathbb{N}}\dfrac{1}{n!}f^n, \operatorname{Exp}g=\sum_{n\in\mathbb{N}}\dfrac{1}{n!}g^n, and \operatorname{Exp}(f+g)=\sum_{n\in\mathbb{N}}\dfrac{1}{n!}(f+g)^n. Expanding with the binomial formula and rearranging gives exactly the product \operatorname{Exp}f\cdot \operatorname{Exp}g.

(b) This follows from part (a) because \operatorname{Log} is inverse to \operatorname{Exp}. Setting u=\operatorname{Log}f and v=\operatorname{Log}g, part (a) yields \operatorname{Exp}(u+v)=\operatorname{Exp}u\cdot\operatorname{Exp}v; then apply \operatorname{Log} to both sides.

Theorem8.19
Group: How Exp turns addition into multiplication, and Log does the reverse. (2)
Hover another entry in this group to preview it.
Preview
Lemma 8.18
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

(a) The subset K\left[\left[x\right]\right]_0 of K\left[\left[x\right]\right] is closed under addition and subtraction and contains 0, so it forms a group \left(K\left[\left[x\right]\right]_0,+,0\right).

(b) The subset K\left[\left[x\right]\right]_1 of K\left[\left[x\right]\right] is closed under multiplication and division and contains 1, so it forms a group \left(K\left[\left[x\right]\right]_1,\cdot,1\right).

Lean code for Theorem8.192 definitions
  • def PowerSeries.PowerSeries₀.addSubgroup.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2] :
      AddSubgroupAddSubgroup.{u_3} (G : Type u_3) [AddGroup G] : Type u_3An additive subgroup of an additive group `G` is a subset containing 0, closed
    under addition and additive inverse.  (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
    def PowerSeries.PowerSeries₀.addSubgroup.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  RType u_2] :
      AddSubgroupAddSubgroup.{u_3} (G : Type u_3) [AddGroup G] : Type u_3An additive subgroup of an additive group `G` is a subset containing 0, closed
    under addition and additive inverse.  (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
    `R⟦X⟧₀` forms an additive subgroup.
    This is Proposition 7.8.10(a) (prop.fps.Exp-Log-groups). 
  • def PowerSeries.PowerSeries₁.subgroup.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] :
      SubgroupSubgroup.{u_3} (G : Type u_3) [Group G] : Type u_3A subgroup of a group `G` is a subset containing 1, closed under multiplication
    and closed under multiplicative inverse.  (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. 
    def PowerSeries.PowerSeries₁.subgroup.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] :
      SubgroupSubgroup.{u_3} (G : Type u_3) [Group G] : Type u_3A subgroup of a group `G` is a subset containing 1, closed under multiplication
    and closed under multiplicative inverse.  (PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. 
    `R⟦X⟧₁` forms a multiplicative subgroup of units.
    This is Proposition 7.8.10(b) (prop.fps.Exp-Log-groups). 
Proof

(a) The zero series belongs to K\left[\left[x\right]\right]_0, and if f,g\in K\left[\left[x\right]\right]_0, then the constant term of both f+g and f-g is again 0.

(b) Any element of K\left[\left[x\right]\right]_1 is invertible because its constant term is 1. The set is closed under multiplication because constant terms multiply, and it is closed under division because inverses stay in the same set.

Theorem8.20
Group: How Exp turns addition into multiplication, and Log does the reverse. (2)
Hover another entry in this group to preview it.
Preview
Lemma 8.18
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

The maps \operatorname{Exp}:\left(K\left[\left[x\right]\right]_{0},+,0\right) \rightarrow\left(K\left[\left[x\right]\right]_{1},\cdot,1\right) and \operatorname{Log}:\left(K\left[\left[x\right]\right]_{1},\cdot,1\right) \rightarrow\left(K\left[\left[x\right]\right]_{0},+,0\right) are mutually inverse group isomorphisms.

Lean code for Theorem8.201 theorem
  • complete
    theorem PowerSeries.Exp_Log_groupIso.{u_2} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      (And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).Function.LeftInverseFunction.LeftInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`LeftInverse g f` means that `g` is a left inverse to `f`. That is, `g ∘ f = id`.  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
          Function.RightInverseFunction.RightInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`RightInverse g f` means that `g` is a right inverse to `f`. That is, `f ∘ g = id`.  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). )And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`). And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
        (∀ (f↑PowerSeries.PowerSeries₀ g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ),
            PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pf↑PowerSeries.PowerSeries₀ +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. g↑PowerSeries.PowerSeries₀,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
              Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p(PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₀) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. (PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₀),Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p) And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
          PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p0,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p1,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    theorem PowerSeries.Exp_Log_groupIso.{u_2}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] :
      (And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).Function.LeftInverseFunction.LeftInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`LeftInverse g f` means that `g` is a left inverse to `f`. That is, `g ∘ f = id`.  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
            PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
          Function.RightInverseFunction.RightInverse.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (g : β → α) (f : α → β) : Prop`RightInverse g f` means that `g` is a right inverse to `f`. That is, `f ∘ g = id`. 
            PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). )And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`). And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
        (∀ (f↑PowerSeries.PowerSeries₀ g↑PowerSeries.PowerSeries₀ : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ),
            PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype pf↑PowerSeries.PowerSeries₀ +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. g↑PowerSeries.PowerSeries₀,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
              Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p(PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  f↑PowerSeries.PowerSeries₀) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
                  (PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  g↑PowerSeries.PowerSeries₀),Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
                Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p) And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be
    constructed and destructed like a pair: if `ha : a` and `hb : b` then
    `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∧` in identifiers is `and`.
    
     * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).
          PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p0,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p1,Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p Subtype.mk.{u} {α : Sort u} {p : α → Prop} (val : α) (property : p val) : Subtype p
    **Theorem 7.8.11** (thm.fps.Exp-Log-group-iso): The maps `Exp` and `Log` are mutually inverse
    group isomorphisms between `(K⟦X⟧₀, +, 0)` and `(K⟦X⟧₁, ·, 1)`.
    
    This means:
    1. `Exp` is a bijection with inverse `Log`
    2. `Exp(f + g) = Exp(f) · Exp(g)` for all `f, g ∈ K⟦X⟧₀`
    3. `Exp(0) = 1`
    
    Equivalently:
    1. `Log` is a bijection with inverse `Exp`
    2. `Log(f · g) = Log(f) + Log(g)` for all `f, g ∈ K⟦X⟧₁`
    3. `Log(1) = 0`
    
    The proof combines:
    - `Log_Exp` and `Exp_Log`: mutual inverse property (Lemma 7.8.8)
    - `Exp_add`: Exp preserves addition→multiplication (Lemma 7.8.9(a))
    - `Log_mul`: Log preserves multiplication→addition (Lemma 7.8.9(b))
    
Proof

The additive/multiplicative compatibility lemma shows that the two maps are group homomorphisms, and the inverse-map lemma shows that they are mutually inverse. Therefore they are mutually inverse group isomorphisms.

Definition8.21
Group: The logarithmic derivative and its first basic identities. (6)
Hover another entry in this group to preview it.
L∃∀Nused by 0

In this definition, we do not use the standing \mathbb{Q}-algebra convention, so K can be an arbitrary commutative ring. Set K\left[\left[x\right]\right]_1=\left\{f\in K\left[\left[x\right]\right]\mid \left[x^0\right]f=1\right\}.

For any FPS f\in K\left[\left[x\right]\right]_1, define the logarithmic derivative \operatorname{loder}f\in K\left[\left[x\right]\right] to be the FPS \dfrac{f'}{f}. This is well-defined because such an f is invertible.

Lean code for Definition8.211 definition
  • def PowerSeries.loder.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] (fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2) :
      PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2
    def PowerSeries.loder.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] (fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2) :
      PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2
    **Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
    
Lemma8.22
Group: The logarithmic derivative and its first basic identities. (6)
Hover another entry in this group to preview it.
L∃∀Nused by 0

If \left[x^0\right]f = 1, then f is a unit in K\llbracket x \rrbracket; that is, f\cdot f^{-1}=1 and f^{-1}\cdot f=1. Moreover, \left[x^0\right](f^{-1})=1. More generally, f is a unit if and only if \left[x^0\right]f is a unit in K.

Lean code for Lemma8.225 theorems
  • complete
    theorem PowerSeries.isUnit_of_constantCoeff_eq_one.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2} (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse.
    The actual definition says that `a` is equal to some `u : Mˣ`, where
    `Mˣ` is a bundled version of `IsUnit`.  fPowerSeries R
    theorem PowerSeries.isUnit_of_constantCoeff_eq_one.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse.
    The actual definition says that `a` is equal to some `u : Mˣ`, where
    `Mˣ` is a bundled version of `IsUnit`.  fPowerSeries R
    An FPS with constant term 1 is invertible (a unit).
    This is the well-definedness statement for `loder` in Definition 7.8.12 (def.fps.loder.1).
    
    The proof: If `constantCoeff f = 1`, then `constantCoeff f` is a unit in `R`, so by
    Proposition prop.fps.invertible, `f` is invertible in `R⟦X⟧`. 
  • complete
    theorem PowerSeries.isUnit_iff_constantCoeff_isUnit.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2} :
      IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse.
    The actual definition says that `a` is equal to some `u : Mˣ`, where
    `Mˣ` is a bundled version of `IsUnit`.  fPowerSeries R Iff (a b : Prop) : PropIf and only if, or logical bi-implication. `a ↔ b` means that `a` implies `b` and vice versa.
    By `propext`, this implies that `a` and `b` are equal and hence any expression involving `a`
    is equivalent to the corresponding expression with `b` instead.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `↔` in identifiers is `iff`.
    
     * The recommended spelling of `<->` in identifiers is `iff` (prefer `↔` over `<->`). IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse.
    The actual definition says that `a` is equal to some `u : Mˣ`, where
    `Mˣ` is a bundled version of `IsUnit`.  (PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R)
    theorem PowerSeries.isUnit_iff_constantCoeff_isUnit.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2} :
      IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse.
    The actual definition says that `a` is equal to some `u : Mˣ`, where
    `Mˣ` is a bundled version of `IsUnit`.  fPowerSeries R Iff (a b : Prop) : PropIf and only if, or logical bi-implication. `a ↔ b` means that `a` implies `b` and vice versa.
    By `propext`, this implies that `a` and `b` are equal and hence any expression involving `a`
    is equivalent to the corresponding expression with `b` instead.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `↔` in identifiers is `iff`.
    
     * The recommended spelling of `<->` in identifiers is `iff` (prefer `↔` over `<->`).
        IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse.
    The actual definition says that `a` is equal to some `u : Mˣ`, where
    `Mˣ` is a bundled version of `IsUnit`.  (PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R)
    An FPS is invertible iff its constant coefficient is a unit.
    This is a more general version of `isUnit_of_constantCoeff_eq_one`. 
  • complete
    theorem PowerSeries.mul_inv_cancel_of_constantCoeff_eq_one.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2} (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      fPowerSeries R *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    theorem PowerSeries.mul_inv_cancel_of_constantCoeff_eq_one.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      fPowerSeries R *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    For FPS with constant term 1, we have `f * f⁻¹ = 1`.
    This is a key property used in the definition of `loder`. 
  • complete
    theorem PowerSeries.inv_mul_cancel_of_constantCoeff_eq_one.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2} (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    theorem PowerSeries.inv_mul_cancel_of_constantCoeff_eq_one.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    For FPS with constant term 1, we have `f⁻¹ * f = 1`. 
  • complete
    theorem PowerSeries.constantCoeff_inv_of_constantCoeff_eq_one.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    theorem PowerSeries.constantCoeff_inv_of_constantCoeff_eq_one.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`. =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    The inverse of an FPS with constant term 1 also has constant term 1. 
Proof

Since \left[x^0\right]f is a unit, the invertibility criterion for power series gives that f is invertible. The constant coefficient of f^{-1} is then the inverse of \left[x^0\right]f = 1, so it is again 1.

Lemma8.23
Group: The logarithmic derivative and its first basic identities. (6)
Hover another entry in this group to preview it.
L∃∀Nused by 0

\operatorname{loder}(1) = 0.

Lean code for Lemma8.231 theorem
  • complete
    theorem PowerSeries.loder_one.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] :
      PowerSeries.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0
    theorem PowerSeries.loder_one.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] : PowerSeries.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 0
    The logarithmic derivative of 1 is 0. 
Proof

1' = 0, so \operatorname{loder}(1) = 0\cdot 1^{-1} = 0.

Theorem8.24
Group: The logarithmic derivative and its first basic identities. (6)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Let K be a commutative \mathbb{Q}-algebra. Let f\in K\left[\left[x\right]\right]_1 be an FPS. Then \operatorname{loder}f = \left(\operatorname{Log}f\right)'.

Lean code for Theorem8.241 theorem
  • complete
    theorem PowerSeries.loder_eq_derivative_Log.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      fPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  RType u_2)
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).fPowerSeries R -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). 1)HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  RType u_2))
    theorem PowerSeries.loder_eq_derivative_Log.{u_2}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     RType u_2]
      {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      fPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        (PowerSeries.derivativePowerSeries.derivative.{u_1} (R : Type u_1) [CommSemiring R] : Derivation R (PowerSeries R) (PowerSeries R)The formal derivative of a formal power series  RType u_2)
          (PowerSeries.substPowerSeries.subst.{u_2, u_3, u_4} {R : Type u_2} [CommRing R] {τ : Type u_3} {S : Type u_4} [CommRing S] [Algebra R S]
      (a : MvPowerSeries τ S) (f : PowerSeries R) : MvPowerSeries τ SSubstitution of power series into a power series.  (HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).fPowerSeries R -HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator). 1)HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`.
    The meaning of this notation is type-dependent.
    * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).
            (PowerSeries.logbarPowerSeries.logbar.{u_1} (K : Type u_1) [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series `logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n`, which is the Mercator series
    for `log(1+x)`. This is `\overline{\log}` in Definition 7.8.2 (def.fps.exp-log).  RType u_2))
    The logarithmic derivative equals the derivative of the logarithm over ℚ-algebras.
    This is Proposition 7.8.13 (prop.fps.loder.log). 
Proof

By definition, \operatorname{Log}f=\overline{\log}\circ (f-1). Since f\in K\left[\left[x\right]\right]_1, we have \left[x^0\right](f-1)=0, so prop.fps.exp-log-der part (b) applies and gives \left(\operatorname{Log}f\right)' = f^{-1}\cdot (f-1)'. But (f-1)' = f', hence \left(\operatorname{Log}f\right)' = \dfrac{f'}{f} = \operatorname{loder}f.

Theorem8.25
Group: The logarithmic derivative and its first basic identities. (6)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Let f,g\in K\left[\left[x\right]\right]_1 be two FPSs. Then \operatorname{loder}(fg)=\operatorname{loder}f+\operatorname{loder}g.

Here we do not use the standing \mathbb{Q}-algebra convention, so K can be an arbitrary commutative ring.

Lean code for Theorem8.251 theorem
  • complete
    theorem PowerSeries.loder_mul.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      {fPowerSeries R gPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2} (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1)
      (hgPowerSeries.constantCoeff g = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      (HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries R *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries R)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`..loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. fPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. gPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
    
    theorem PowerSeries.loder_mul.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R gPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1)
      (hgPowerSeries.constantCoeff g = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  gPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      (HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries R *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. gPowerSeries R)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`..loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. fPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `+` in identifiers is `add`. gPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
    
    The logarithmic derivative is additive under multiplication: `loder(fg) = loder(f) + loder(g)`.
    This is Proposition 7.8.14 (prop.fps.loder.prod).
    
    Note: This does NOT require `R` to be a ℚ-algebra. 
Proof

By definition, \operatorname{loder}f=\dfrac{f'}{f} and \operatorname{loder}g=\dfrac{g'}{g}. Also, \operatorname{loder}(fg) =\dfrac{(fg)'}{fg} =\dfrac{f'g+fg'}{fg} =\underbrace{\dfrac{f'}{f}}_{=\operatorname{loder}f} +\underbrace{\dfrac{g'}{g}}_{=\operatorname{loder}g} =\operatorname{loder}f+\operatorname{loder}g, using the product rule in the middle step.

Corollary8.26
Group: The logarithmic derivative and its first basic identities. (6)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Let f_1,f_2,\ldots,f_k be any k FPSs in K\left[\left[x\right]\right]_1. Then \operatorname{loder}(f_1f_2\cdots f_k) =\operatorname{loder}(f_1)+\operatorname{loder}(f_2)+\cdots+\operatorname{loder}(f_k).

Here we do not use the standing \mathbb{Q}-algebra convention, so K can be an arbitrary commutative ring.

Lean code for Corollary8.261 theorem
  • complete
    theorem PowerSeries.loder_prod.{u_2, u_3} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2]
      {ιType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } (sFinset ι : FinsetFinset.{u_4} (α : Type u_4) : Type u_4`Finset α` is the type of finite sets of elements of `α`. It is implemented
    as a multiset (a list up to permutation) which has no duplicate elements.  ιType u_3) (fι → PowerSeries R : ιType u_3  PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
      (hf∀ i ∈ s, PowerSeries.constantCoeff (f i) = 1 :  iι  sFinset ι, PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  (fι → PowerSeries R iι) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      (∏ iι  sFinset ι, fι → PowerSeries R iι).loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.  iι  sFinset ι, (fι → PowerSeries R iι).loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
    
    theorem PowerSeries.loder_prod.{u_2, u_3}
      {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {ιType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (sFinset ι : FinsetFinset.{u_4} (α : Type u_4) : Type u_4`Finset α` is the type of finite sets of elements of `α`. It is implemented
    as a multiset (a list up to permutation) which has no duplicate elements.  ιType u_3) (fι → PowerSeries R : ιType u_3  PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2)
      (hf∀ i ∈ s, PowerSeries.constantCoeff (f i) = 1 :
         iι  sFinset ι,
          PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  (fι → PowerSeries R iι) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
            1) :
      (∏ iι  sFinset ι, fι → PowerSeries R iι).loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
         iι  sFinset ι, (fι → PowerSeries R iι).loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
    
    The logarithmic derivative of a product of `k` FPSs.
    This is Corollary 7.8.15 (cor.fps.loder.prodk).
    
    Note: This does NOT require `R` to be a ℚ-algebra. 
Proof

Induct on k. The base case is \operatorname{loder}(1)=0, and the induction step follows directly from the product formula above.

Corollary8.27
Group: The logarithmic derivative and its first basic identities. (6)
Hover another entry in this group to preview it.
L∃∀Nused by 0

Let f be any FPS in K\left[\left[x\right]\right]_1. Then \operatorname{loder}(f^{-1})=-\operatorname{loder}f.

Here we do not use the standing \mathbb{Q}-algebra convention, so K can be an arbitrary commutative ring.

Lean code for Corollary8.271 theorem
  • complete
    theorem PowerSeries.loder_inv.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) : fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`..loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. -Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).fPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
    
    theorem PowerSeries.loder_inv.{u_2} {RType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  RType u_2] {fPowerSeries R : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`  RType u_2}
      (hfPowerSeries.constantCoeff f = 1 : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.  fPowerSeries R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1) :
      fPowerSeries R⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `⁻¹` in identifiers is `inv`..loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
     =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. -Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).fPowerSeries R.loderPowerSeries.loder.{u_2} {R : Type u_2} [Field R] (f : PowerSeries R) : PowerSeries R**Definition 7.8.12 (def.fps.loder.1)**: The logarithmic derivative.
    
    For any FPS `f ∈ R⟦X⟧₁` (i.e., with constant term 1), we define the *logarithmic derivative*
    `loder f ∈ R⟦X⟧` to be the FPS `f'/f`.
    
    This is well-defined since `f` is invertible when `constantCoeff f = 1`
    (see `isUnit_of_constantCoeff_eq_one`).
    
    **Important**: This definition does NOT require `R` to be a ℚ-algebra. The definition makes
    sense over any field. The name "logarithmic derivative" comes from Proposition 7.8.13
    (`loder_eq_derivative_Log`), which shows that over ℚ-algebras, `loder f = (Log f)'`.
    
    ## Properties
    
    * `loder_one`: `loder 1 = 0`
    * `loder_mul`: `loder(fg) = loder f + loder g` (Proposition 7.8.14)
    * `loder_inv`: `loder(f⁻¹) = -loder f` (Corollary 7.8.16)
    * `loder_prod`: `loder(∏ fᵢ) = ∑ loder fᵢ` (Corollary 7.8.15)
    
    The logarithmic derivative of the inverse: `loder(f⁻¹) = -loder(f)`.
    This is Corollary 7.8.16 (cor.fps.loder.inv).
    
    Note: This does NOT require `R` to be a ℚ-algebra. 
Proof

Since f\in K\left[\left[x\right]\right]_1, the series f is invertible, so f^{-1} is well-defined. Apply the product formula to f\cdot f^{-1}=1. Since \operatorname{loder}(1)=0, this yields \operatorname{loder}f+\operatorname{loder}(f^{-1})=0, hence \operatorname{loder}(f^{-1})=-\operatorname{loder}f.

Definition8.28
L∃∀Nused by 0

A family (f_i)_{i\in I} of FPSs in K\llbracket x\rrbracket_0 is summable if for each coefficient index n, only finitely many \left[x^n\right](f_i) are nonzero.

A family (f_i)_{i\in I} of FPSs in K\llbracket x\rrbracket_1 is multipliable if for each coefficient index n, all but finitely many f_i satisfy \left[x^k\right](f_i-1)=0 for all 1\le k\le n.

For summable families, the coefficient-wise sum \sum_{i\in I} f_i belongs to K\llbracket x\rrbracket_0. For multipliable families, the product \prod_{i\in I} f_i belongs to K\llbracket x\rrbracket_1.

Lean code for Definition8.284 definitions
  • def PowerSeries.SummableFPS₀.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } (fI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) : PropThe universe of propositions. `Prop ≡ Sort 0`.
    
    Every proposition is propositionally equal to either `True` or `False`. 
    def PowerSeries.SummableFPS₀.{u_2, u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (fI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). ) :
      PropThe universe of propositions. `Prop ≡ Sort 0`.
    
    Every proposition is propositionally equal to either `True` or `False`. 
    A family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`. 
  • def PowerSeries.MultipliableFPS₁.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) : PropThe universe of propositions. `Prop ≡ Sort 0`.
    
    Every proposition is propositionally equal to either `True` or `False`. 
    def PowerSeries.MultipliableFPS₁.{u_2, u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). ) :
      PropThe universe of propositions. `Prop ≡ Sort 0`.
    
    Every proposition is propositionally equal to either `True` or `False`. 
    A family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`. 
  • def PowerSeries.summableFPS₀Sum.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } (fI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (_hfPowerSeries.SummableFPS₀ f : PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  fI → ↑PowerSeries.PowerSeries₀) : PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    def PowerSeries.summableFPS₀Sum.{u_2, u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (fI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (_hfPowerSeries.SummableFPS₀ f : PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  fI → ↑PowerSeries.PowerSeries₀) :
      PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). 
    The coefficient-wise sum of a summable family in `K⟦X⟧₀`.
    
    **Important:** This is defined coefficient-wise using `mk`, NOT using `finsum` on the entire
    power series. The reason is that `finsum` returns 0 when the support is infinite, but
    `SummableFPS₀` only guarantees finite support for each coefficient, not for the entire family.
    
    For each coefficient n, only finitely many terms contribute (by `SummableFPS₀`), so the
    finsum `∑ᶠ i, coeff n (f i).val` is well-defined and equals a finite sum. 
  • def PowerSeries.multipliableFPS₁Prod.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hfPowerSeries.MultipliableFPS₁ f : PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁) : PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    def PowerSeries.multipliableFPS₁Prod.{u_2,
        u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hfPowerSeries.MultipliableFPS₁ f : PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁) :
      PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). 
    The product of a multipliable family in `K⟦X⟧₁` as an element of `K⟦X⟧₁`. 
Proof

For the sum, each f_i has constant coefficient 0, so the sum also has constant coefficient 0. For the product, the constant coefficient of \prod_i f_i is the product of the constant coefficients \prod_i \left[x^0\right](f_i)=\prod_i 1=1.

Lemma8.29
Group: The first infinite-family consequence: Log sends multipliable families to summable ones. (3)
Hover another entry in this group to preview it.
L∃∀Nused by 0

If (f_i)_{i\in I} is a multipliable family in K\llbracket x\rrbracket_1, then (\operatorname{Log} f_i)_{i\in I} is a summable family in K\llbracket x\rrbracket_0; in other words, for each coefficient index n, only finitely many \left[\operatorname{Log} f_i\right]_n are nonzero.

Lean code for Lemma8.291 theorem
  • complete
    theorem PowerSeries.Log_summable_of_multipliable.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hfPowerSeries.MultipliableFPS₁ f : PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁) :
      PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  fun iI  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (fI → ↑PowerSeries.PowerSeries₁ iI)
    theorem PowerSeries.Log_summable_of_multipliable.{u_2,
        u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hfPowerSeries.MultipliableFPS₁ f : PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁) :
      PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  fun iI 
        PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (fI → ↑PowerSeries.PowerSeries₁ iI)
    If `(f_i)_{i ∈ I}` is a multipliable family in `K⟦X⟧₁`, then `(Log f_i)_{i ∈ I}` is
    a summable family in `K⟦X⟧₀`.
    
    This is part of Proposition prop.fps.Exp-Log-infprod from the source material. 
Proof

Fix n. Let M be an x^n-approximator for the product family. If i\notin M, then the approximator property gives \left[x^k\right](f_i)=0 for 1\le k\le n, hence also \left[(f_i-1)\right]_k=0 for 0\le k\le n. Substituting into \overline{\log} then shows that \left[\operatorname{Log} f_i\right]_n=0. Thus the set of indices with nonzero n-th coefficient is contained in M, so it is finite.

Theorem8.30
Group: The first infinite-family consequence: Log sends multipliable families to summable ones. (3)
Hover another entry in this group to preview it.
Preview
Lemma 8.29
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If (f_i)_{i\in I} is a multipliable family in K\llbracket x \rrbracket_1, then \operatorname{Log}\Bigl(\prod_{i \in I} f_i\Bigr) = \sum_{i \in I} \operatorname{Log}(f_i), where the right-hand side is the coefficient-wise sum, which is well-defined by the previous lemma.

Lean code for Theorem8.301 theorem
  • complete
    theorem PowerSeries.Log_tprod.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hfPowerSeries.MultipliableFPS₁ f : PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁)
      (hf_sumoptParam (PowerSeries.SummableFPS₀ fun i ↦ PowerSeries.Log (f i)) ⋯ : PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  fun iI  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (fI → ↑PowerSeries.PowerSeries₁ iI) :=
        ) :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (PowerSeries.multipliableFPS₁ProdPowerSeries.multipliableFPS₁Prod.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3}
      (f : I → ↑PowerSeries.PowerSeries₁) (hf : PowerSeries.MultipliableFPS₁ f) : ↑PowerSeries.PowerSeries₁The product of a multipliable family in `K⟦X⟧₁` as an element of `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁ hfPowerSeries.MultipliableFPS₁ f) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.summableFPS₀SumPowerSeries.summableFPS₀Sum.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀)
      (_hf : PowerSeries.SummableFPS₀ f) : ↑PowerSeries.PowerSeries₀The coefficient-wise sum of a summable family in `K⟦X⟧₀`.
    
    **Important:** This is defined coefficient-wise using `mk`, NOT using `finsum` on the entire
    power series. The reason is that `finsum` returns 0 when the support is infinite, but
    `SummableFPS₀` only guarantees finite support for each coefficient, not for the entire family.
    
    For each coefficient n, only finitely many terms contribute (by `SummableFPS₀`), so the
    finsum `∑ᶠ i, coeff n (f i).val` is well-defined and equals a finite sum.  (fun iI  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (fI → ↑PowerSeries.PowerSeries₁ iI)) hf_sumoptParam (PowerSeries.SummableFPS₀ fun i ↦ PowerSeries.Log (f i)) ⋯
    theorem PowerSeries.Log_tprod.{u_2, u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (fI → ↑PowerSeries.PowerSeries₁ : IType u_3  PowerSeries.PowerSeries₁PowerSeries.PowerSeries₁.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₁` is the set of FPS with constant term 1.
    This is Definition 7.8.6(b) (def.fps.Exp-Log-maps). )
      (hfPowerSeries.MultipliableFPS₁ f : PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁)
      (hf_sumoptParam (PowerSeries.SummableFPS₀ fun i ↦ PowerSeries.Log (f i)) ⋯ :
        PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  fun iI 
          PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (fI → ↑PowerSeries.PowerSeries₁ iI) :=
        ) :
      PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
          (PowerSeries.multipliableFPS₁ProdPowerSeries.multipliableFPS₁Prod.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3}
      (f : I → ↑PowerSeries.PowerSeries₁) (hf : PowerSeries.MultipliableFPS₁ f) : ↑PowerSeries.PowerSeries₁The product of a multipliable family in `K⟦X⟧₁` as an element of `K⟦X⟧₁`.  fI → ↑PowerSeries.PowerSeries₁
            hfPowerSeries.MultipliableFPS₁ f) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.summableFPS₀SumPowerSeries.summableFPS₀Sum.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀)
      (_hf : PowerSeries.SummableFPS₀ f) : ↑PowerSeries.PowerSeries₀The coefficient-wise sum of a summable family in `K⟦X⟧₀`.
    
    **Important:** This is defined coefficient-wise using `mk`, NOT using `finsum` on the entire
    power series. The reason is that `finsum` returns 0 when the support is infinite, but
    `SummableFPS₀` only guarantees finite support for each coefficient, not for the entire family.
    
    For each coefficient n, only finitely many terms contribute (by `SummableFPS₀`), so the
    finsum `∑ᶠ i, coeff n (f i).val` is well-defined and equals a finite sum. 
          (fun iI  PowerSeries.LogPowerSeries.Log.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (f : ↑PowerSeries.PowerSeries₁) :
      ↑PowerSeries.PowerSeries₀The logarithm map `Log : K⟦X⟧₁ → K⟦X⟧₀` defined by `f ↦ logbar ∘ (f - 1)`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (fI → ↑PowerSeries.PowerSeries₁ iI))
          hf_sumoptParam (PowerSeries.SummableFPS₀ fun i ↦ PowerSeries.Log (f i)) ⋯
    **Proposition prop.fps.Exp-Log-infprod**: Log converts infinite products to infinite sums.
    
    If `(f_i)_{i ∈ I}` is a multipliable family of FPSs in `K⟦X⟧₁`, then:
    1. `(Log f_i)_{i ∈ I}` is a summable family of FPSs in `K⟦X⟧₀`
    2. `∏_{i ∈ I} f_i ∈ K⟦X⟧₁`
    3. `Log(∏_{i ∈ I} f_i) = ∑_{i ∈ I} Log(f_i)`
    
    This is the infinite version of `Log_mul`: `Log(fg) = Log(f) + Log(g)`.
    
    The proof strategy:
    1. Use `Log_mul` for finite products
    2. Show that for multipliable families, the finite partial products converge
    3. Use continuity of Log (which follows from the coefficient-wise definition)
       to pass to the limit
    
Proof

For each coefficient index n, choose an x^n-approximator M. The finite version of the statement says that \operatorname{Log}\left(\prod_{i\in M} f_i\right)=\sum_{i\in M}\operatorname{Log}(f_i). Now the n-th coefficient of the infinite product agrees with that of the finite product over M, while the n-th coefficient of the infinite sum is already the finite sum over M, since \left[\operatorname{Log} f_i\right]_n=0 for i\notin M. A coefficient comparison then proves the equality.

Lemma8.31
Group: The first infinite-family consequence: Log sends multipliable families to summable ones. (3)
Hover another entry in this group to preview it.
L∃∀Nused by 0

If (g_i)_{i\in I} is a summable family in K\llbracket x \rrbracket_0, then (\operatorname{Exp} g_i)_{i\in I} is a multipliable family in K\llbracket x \rrbracket_1.

Lean code for Lemma8.311 theorem
  • complete
    theorem PowerSeries.Exp_multipliable_of_summable.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (gI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (hgPowerSeries.SummableFPS₀ g : PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  gI → ↑PowerSeries.PowerSeries₀) :
      PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fun iI  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (gI → ↑PowerSeries.PowerSeries₀ iI)
    theorem PowerSeries.Exp_multipliable_of_summable.{u_2,
        u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (gI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (hgPowerSeries.SummableFPS₀ g : PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  gI → ↑PowerSeries.PowerSeries₀) :
      PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fun iI 
        PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (gI → ↑PowerSeries.PowerSeries₀ iI)
Proof

Since \operatorname{Exp}(g_i)=1+\overline{\exp}\circ g_i, the family has the form (1+h_i) where h_i=\overline{\exp}\circ g_i. If the coefficients of g_i up to order n vanish, then the same is true for the corresponding coefficients of h_i, because \overline{\exp} has constant term 0 and substitution preserves this low-order vanishing. The summability of (g_i) therefore implies the multipliability of (\operatorname{Exp} g_i).

Theorem8.32
Group: The first infinite-family consequence: Log sends multipliable families to summable ones. (3)
Hover another entry in this group to preview it.
L∃∀Nused by 0

If (g_i)_{i\in I} is a summable family in K\llbracket x \rrbracket_0, then \operatorname{Exp}\Bigl(\sum_{i \in I} g_i\Bigr) = \prod_{i \in I} \operatorname{Exp}(g_i).

Lean code for Theorem8.321 theorem
  • complete
    theorem PowerSeries.Exp_sum.{u_2, u_3} {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2]
      {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } (gI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (hgPowerSeries.SummableFPS₀ g : PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  gI → ↑PowerSeries.PowerSeries₀)
      (hg_muloptParam (PowerSeries.MultipliableFPS₁ fun i ↦ PowerSeries.Exp (g i)) ⋯ :
        PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fun iI  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (gI → ↑PowerSeries.PowerSeries₀ iI) := ) :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (PowerSeries.summableFPS₀SumPowerSeries.summableFPS₀Sum.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀)
      (_hf : PowerSeries.SummableFPS₀ f) : ↑PowerSeries.PowerSeries₀The coefficient-wise sum of a summable family in `K⟦X⟧₀`.
    
    **Important:** This is defined coefficient-wise using `mk`, NOT using `finsum` on the entire
    power series. The reason is that `finsum` returns 0 when the support is infinite, but
    `SummableFPS₀` only guarantees finite support for each coefficient, not for the entire family.
    
    For each coefficient n, only finitely many terms contribute (by `SummableFPS₀`), so the
    finsum `∑ᶠ i, coeff n (f i).val` is well-defined and equals a finite sum.  gI → ↑PowerSeries.PowerSeries₀ hgPowerSeries.SummableFPS₀ g) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.multipliableFPS₁ProdPowerSeries.multipliableFPS₁Prod.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3}
      (f : I → ↑PowerSeries.PowerSeries₁) (hf : PowerSeries.MultipliableFPS₁ f) : ↑PowerSeries.PowerSeries₁The product of a multipliable family in `K⟦X⟧₁` as an element of `K⟦X⟧₁`.  (fun iI  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (gI → ↑PowerSeries.PowerSeries₀ iI))
          hg_muloptParam (PowerSeries.MultipliableFPS₁ fun i ↦ PowerSeries.Exp (g i)) ⋯
    theorem PowerSeries.Exp_sum.{u_2, u_3}
      {KType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  KType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
     KType u_2] {IType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      (gI → ↑PowerSeries.PowerSeries₀ : IType u_3  PowerSeries.PowerSeries₀PowerSeries.PowerSeries₀.{u_2} {R : Type u_2} [CommRing R] : Set (PowerSeries R)`R⟦X⟧₀` is the set of FPS with constant term 0.
    This is Definition 7.8.6(a) (def.fps.Exp-Log-maps). )
      (hgPowerSeries.SummableFPS₀ g : PowerSeries.SummableFPS₀PowerSeries.SummableFPS₀.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀) :
      PropA family of FPS in `K⟦X⟧₀` is summable if for each coefficient index n,
    only finitely many family members have nonzero n-th coefficient.
    
    This is the notion of summability appropriate for `K⟦X⟧₀`.  gI → ↑PowerSeries.PowerSeries₀)
      (hg_muloptParam (PowerSeries.MultipliableFPS₁ fun i ↦ PowerSeries.Exp (g i)) ⋯ :
        PowerSeries.MultipliableFPS₁PowerSeries.MultipliableFPS₁.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₁) :
      PropA family of FPS in `K⟦X⟧₁` is multipliable if for each coefficient index n,
    the n-th coefficient of the product is finitely determined.
    
    This is the notion of multipliability appropriate for `K⟦X⟧₁`.  fun iI 
          PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (gI → ↑PowerSeries.PowerSeries₀ iI) :=
        ) :
      PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps). 
          (PowerSeries.summableFPS₀SumPowerSeries.summableFPS₀Sum.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3} (f : I → ↑PowerSeries.PowerSeries₀)
      (_hf : PowerSeries.SummableFPS₀ f) : ↑PowerSeries.PowerSeries₀The coefficient-wise sum of a summable family in `K⟦X⟧₀`.
    
    **Important:** This is defined coefficient-wise using `mk`, NOT using `finsum` on the entire
    power series. The reason is that `finsum` returns 0 when the support is infinite, but
    `SummableFPS₀` only guarantees finite support for each coefficient, not for the entire family.
    
    For each coefficient n, only finitely many terms contribute (by `SummableFPS₀`), so the
    finsum `∑ᶠ i, coeff n (f i).val` is well-defined and equals a finite sum.  gI → ↑PowerSeries.PowerSeries₀ hgPowerSeries.SummableFPS₀ g) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        PowerSeries.multipliableFPS₁ProdPowerSeries.multipliableFPS₁Prod.{u_2, u_3} {K : Type u_2} [CommRing K] {I : Type u_3}
      (f : I → ↑PowerSeries.PowerSeries₁) (hf : PowerSeries.MultipliableFPS₁ f) : ↑PowerSeries.PowerSeries₁The product of a multipliable family in `K⟦X⟧₁` as an element of `K⟦X⟧₁`. 
          (fun iI  PowerSeries.ExpPowerSeries.Exp.{u_2} {K : Type u_2} [CommRing K] [Algebra ℚ K] (g : ↑PowerSeries.PowerSeries₀) :
      ↑PowerSeries.PowerSeries₁The exponential map `Exp : K⟦X⟧₀ → K⟦X⟧₁` defined by `g ↦ exp ∘ g`.
    This is Definition 7.8.6(c) (def.fps.Exp-Log-maps).  (gI → ↑PowerSeries.PowerSeries₀ iI))
          hg_muloptParam (PowerSeries.MultipliableFPS₁ fun i ↦ PowerSeries.Exp (g i)) ⋯
    Exp converts infinite sums to infinite products.
    
    This is the infinite version of `Exp_add`. 
Proof

Let f_i = \operatorname{Exp}(g_i). By the infinite-product proposition, \operatorname{Log}\left(\prod f_i\right) = \sum \operatorname{Log}(f_i)=\sum g_i, using \operatorname{Log}\circ\operatorname{Exp}=\mathrm{id}. Applying \operatorname{Exp} to both sides and using \operatorname{Exp}\circ\operatorname{Log}=\mathrm{id} gives the result.