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.
-
PowerSeries.logbar[complete] -
PowerSeries.expbar[complete]
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.1●2 definitions
Associated Lean declarations
-
PowerSeries.logbar[complete]
-
PowerSeries.expbar[complete]
-
PowerSeries.logbar[complete] -
PowerSeries.expbar[complete]
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.logbar.{u_1} (K
Type 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_1def PowerSeries.logbar.{u_1} (K
Type 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_1The 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). -
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.expbar.{u_1} (K
Type 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_1def PowerSeries.expbar.{u_1} (K
Type 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_1The 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).
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.2●1 definition
Associated Lean declarations
-
PowerSeries.invOnePlusX[complete]
-
PowerSeries.invOnePlusX[complete]
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.invOnePlusX.{u_1} (K
Type 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_1def PowerSeries.invOnePlusX.{u_1} (K
Type 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_1The series `(1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n`.
Direct verification: the product is computed coefficient-wise and shown to
equal 1.
We have \overline{\log}' = \iota = (1+x)^{-1}.
Lean code for Lemma8.3●1 theorem
Associated Lean declarations
-
PowerSeries.derivative_logbar[complete]
-
PowerSeries.derivative_logbar[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.derivative_logbar.{u_1} {K
Type 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 seriesKType 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_1theorem PowerSeries.derivative_logbar.{u_1} {K
Type 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 seriesKType 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_1The derivative of `logbar` is `invOnePlusX`. This is part of the proof of Proposition 7.8.3 (prop.fps.exp-log-der).
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.
We have \overline{\exp}' = \exp.
Lean code for Lemma8.4●1 theorem
Associated Lean declarations
-
PowerSeries.derivative_expbar[complete]
-
PowerSeries.derivative_expbar[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.derivative_expbar.{u_1} {K
Type 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 seriesKType 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_1theorem PowerSeries.derivative_expbar.{u_1} {K
Type 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 seriesKType 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_1The derivative of `expbar` equals `exp`. This is equation (7.8.3) in the proof of Proposition 7.8.3 (prop.fps.exp-log-der).
Since \overline{\exp} = \exp - 1, we have
\overline{\exp}' = \exp' - 0 = \exp' = \exp,
where the last equality is the standard fact \exp' = \exp.
Let g \in K\llbracket x \rrbracket with [x^0]g = 0.
Then \iota \circ g = (1+g)^{-1}.
Lean code for Lemma8.5●1 theorem
Associated Lean declarations
-
PowerSeries.invOnePlusX_subst_eq_inv[complete]
-
PowerSeries.invOnePlusX_subst_eq_inv[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.invOnePlusX_subst_eq_inv.{u_2} {K
Type 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} {K
Type 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`.
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}.
-
PowerSeries.derivative_exp_comp[complete] -
PowerSeries.derivative_expbar_comp[complete] -
PowerSeries.derivative_logbar_comp[complete]
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.6●3 theorems
Associated Lean declarations
-
PowerSeries.derivative_exp_comp[complete]
-
PowerSeries.derivative_expbar_comp[complete]
-
PowerSeries.derivative_logbar_comp[complete]
-
PowerSeries.derivative_exp_comp[complete] -
PowerSeries.derivative_expbar_comp[complete] -
PowerSeries.derivative_logbar_comp[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.derivative_exp_comp.{u_1} {K
Type 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 seriesKType 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 seriesKType u_1) gPowerSeries Ktheorem PowerSeries.derivative_exp_comp.{u_1} {K
Type 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 seriesKType 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 seriesKType u_1) gPowerSeries KChain rule for composition with `exp`: `(exp ∘ g)' = (exp ∘ g) · g'`. This is Proposition 7.8.3(a) (prop.fps.exp-log-der).
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.derivative_expbar_comp.{u_1} {K
Type 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 seriesKType 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 seriesKType u_1) gPowerSeries Ktheorem PowerSeries.derivative_expbar_comp.{u_1} {K
Type 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 seriesKType 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 seriesKType u_1) gPowerSeries KChain 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'`.
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.derivative_logbar_comp.{u_2} {K
Type 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 seriesKType 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 seriesKType u_2) gPowerSeries Ktheorem PowerSeries.derivative_logbar_comp.{u_2} {K
Type 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 seriesKType 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 seriesKType u_2) gPowerSeries KChain 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.
(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).
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.7●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.eq_of_derivative_eq_mul_of_inv.{u_1} {K
Type 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 Kh₂PowerSeries KgPowerSeries 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 seriesKType 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 seriesKType 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 Ktheorem PowerSeries.eq_of_derivative_eq_mul_of_inv.{u_1} {K
Type 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 Kh₂PowerSeries KgPowerSeries 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 seriesKType 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 seriesKType 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 KUniqueness lemma for ODEs of the form `h' = (1 + h) * g` with matching initial conditions. This is used to prove `expbar_comp_logbar`.
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.
-
PowerSeries.eq_of_derivative_eq_one[complete]
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.8●1 theorem
Associated Lean declarations
-
PowerSeries.eq_of_derivative_eq_one[complete]
-
PowerSeries.eq_of_derivative_eq_one[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.eq_of_derivative_eq_one.{u_1} {K
Type 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 Kh₂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 seriesKType 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 seriesKType 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 Ktheorem PowerSeries.eq_of_derivative_eq_one.{u_1} {K
Type 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 Kh₂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 seriesKType 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 seriesKType 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 KUniqueness lemma for ODEs of the form `h' = 1` (constant) with matching initial conditions.
As in the previous lemma: use strong induction on the coefficient index and
cancel n+1 at each step.
We have (\iota \circ \overline{\exp}) \cdot \exp = 1.
Lean code for Lemma8.9●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.invOnePlusX_subst_expbar_mul_exp.{u_1} {K
Type 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`.1theorem PowerSeries.invOnePlusX_subst_expbar_mul_exp.{u_1} {K
Type 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`.
Substitute \overline{\exp} into the identity
\iota \cdot (1+x) = 1, observing that
(1+x)\circ \overline{\exp} = 1 + \overline{\exp} = \exp.
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.10●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.constantCoeff_subst_of_constantCoeff_zero.{u_1} {K
Type 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 KgPowerSeries 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 KfPowerSeries 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 Ktheorem PowerSeries.constantCoeff_subst_of_constantCoeff_zero.{u_1} {K
Type 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 KgPowerSeries 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 KfPowerSeries 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 KThe 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`.
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.
-
PowerSeries.expbar_comp_logbar[complete] -
PowerSeries.logbar_comp_expbar[complete]
We have
\overline{\exp}\circ\overline{\log}=x
\qquad\text{and}\qquad
\overline{\log}\circ\overline{\exp}=x.
Lean code for Theorem8.11●2 theorems
Associated Lean declarations
-
PowerSeries.expbar_comp_logbar[complete]
-
PowerSeries.logbar_comp_expbar[complete]
-
PowerSeries.expbar_comp_logbar[complete] -
PowerSeries.logbar_comp_expbar[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.expbar_comp_logbar.{u_1} {K
Type 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} {K
Type 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`.
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.logbar_comp_expbar.{u_1} {K
Type 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} {K
Type 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'`
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.
-
PowerSeries.PowerSeries₀[complete] -
PowerSeries.PowerSeries₁[complete] -
PowerSeries.Exp[complete] -
PowerSeries.Log[complete]
(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.12●4 definitions
Associated Lean declarations
-
PowerSeries.PowerSeries₀[complete]
-
PowerSeries.PowerSeries₁[complete]
-
PowerSeries.Exp[complete]
-
PowerSeries.Log[complete]
-
PowerSeries.PowerSeries₀[complete] -
PowerSeries.PowerSeries₁[complete] -
PowerSeries.Exp[complete] -
PowerSeries.Log[complete]
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.PowerSeries₀.{u_2} {R
Type 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} {R
Type 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).
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.PowerSeries₁.{u_2} {R
Type 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} {R
Type 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).
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.Exp.{u_2} {K
Type 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} {K
Type 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).
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.Log.{u_2} {K
Type 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} {K
Type 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).
-
PowerSeries.PowerSeries₀.subst_mem[complete] -
PowerSeries.PowerSeries₁.subst_mem[complete] -
PowerSeries.exp_subst_mem_PowerSeries₁[complete] -
PowerSeries.logbar_subst_sub_one_mem_PowerSeries₀[complete]
(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.13●4 theorems
Associated Lean declarations
-
PowerSeries.PowerSeries₀.subst_mem[complete]
-
PowerSeries.PowerSeries₁.subst_mem[complete]
-
PowerSeries.exp_subst_mem_PowerSeries₁[complete]
-
PowerSeries.logbar_subst_sub_one_mem_PowerSeries₀[complete]
-
PowerSeries.PowerSeries₀.subst_mem[complete] -
PowerSeries.PowerSeries₁.subst_mem[complete] -
PowerSeries.exp_subst_mem_PowerSeries₁[complete] -
PowerSeries.logbar_subst_sub_one_mem_PowerSeries₀[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.PowerSeries₀.subst_mem.{u_2} {K
Type 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 KgPowerSeries 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 KfPowerSeries 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} {K
Type 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 KgPowerSeries 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 KfPowerSeries 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).
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.PowerSeries₁.subst_mem.{u_2} {K
Type 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 KgPowerSeries 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 KfPowerSeries 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} {K
Type 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 KgPowerSeries 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 KfPowerSeries 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).
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.exp_subst_mem_PowerSeries₁.{u_2} {K
Type 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} {K
Type 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).
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.logbar_subst_sub_one_mem_PowerSeries₀.{u_2} {K
Type 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} {K
Type 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).
(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.
-
PowerSeries.Log_Exp[complete] -
PowerSeries.Exp_Log[complete] -
PowerSeries.Exp_Log_inverse[complete]
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.14●3 theorems
Associated Lean declarations
-
PowerSeries.Log_Exp[complete]
-
PowerSeries.Exp_Log[complete]
-
PowerSeries.Exp_Log_inverse[complete]
-
PowerSeries.Log_Exp[complete] -
PowerSeries.Exp_Log[complete] -
PowerSeries.Exp_Log_inverse[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Log_Exp.{u_2} {K
Type 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} {K
Type 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).
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Exp_Log.{u_2} {K
Type 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} {K
Type 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₁ -
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Exp_Log_inverse.{u_2} {K
Type 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} {K
Type 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).
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.
-
PowerSeries.sub_one_mem_PowerSeries₀[complete]
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.15●1 theorem
Associated Lean declarations
-
PowerSeries.sub_one_mem_PowerSeries₀[complete]
-
PowerSeries.sub_one_mem_PowerSeries₀[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.sub_one_mem_PowerSeries₀.{u_2} {R
Type 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} {R
Type 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).
\left[x^0\right](f-1)=\left[x^0\right]f-1=1-1=0.
-
PowerSeries.eq_of_derivative_eq_mul_self[complete]
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.16●1 theorem
Associated Lean declarations
-
PowerSeries.eq_of_derivative_eq_mul_self[complete]
-
PowerSeries.eq_of_derivative_eq_mul_self[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.eq_of_derivative_eq_mul_self.{u_2} {K
Type 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 Kh₂PowerSeries KgPowerSeries 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 seriesKType 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 seriesKType 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 Ktheorem PowerSeries.eq_of_derivative_eq_mul_self.{u_2} {K
Type 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 Kh₂PowerSeries KgPowerSeries 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 seriesKType 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 seriesKType 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 KUniqueness 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`.
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.
-
PowerSeries.Exp_zero[complete] -
PowerSeries.Log_one[complete]
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.17●2 theorems
Associated Lean declarations
-
PowerSeries.Exp_zero[complete]
-
PowerSeries.Log_one[complete]
-
PowerSeries.Exp_zero[complete] -
PowerSeries.Log_one[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Exp_zero.{u_2} {K
Type 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 ptheorem PowerSeries.Exp_zero.{u_2} {K
Type 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`.
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Log_one.{u_2} {K
Type 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 ptheorem PowerSeries.Log_one.{u_2} {K
Type 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`.
\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.
-
PowerSeries.Exp_add[complete] -
PowerSeries.Log_mul[complete]
(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.18●2 theorems
Associated Lean declarations
-
PowerSeries.Exp_add[complete]
-
PowerSeries.Log_mul[complete]
-
PowerSeries.Exp_add[complete] -
PowerSeries.Log_mul[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Exp_add.{u_2} {K
Type 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 p↑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`.↑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 ptheorem PowerSeries.Exp_add.{u_2} {K
Type 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 p↑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`.↑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).
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Log_mul.{u_2} {K
Type 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 p↑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`.↑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 ptheorem PowerSeries.Log_mul.{u_2} {K
Type 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 p↑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`.↑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).
(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.
-
PowerSeries.PowerSeries₀.addSubgroup[complete] -
PowerSeries.PowerSeries₁.subgroup[complete]
(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.19●2 definitions
Associated Lean declarations
-
PowerSeries.PowerSeries₀.addSubgroup[complete]
-
PowerSeries.PowerSeries₁.subgroup[complete]
-
PowerSeries.PowerSeries₀.addSubgroup[complete] -
PowerSeries.PowerSeries₁.subgroup[complete]
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.PowerSeries₀.addSubgroup.{u_2} {R
Type 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} {R
Type 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).
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.PowerSeries₁.subgroup.{u_2} {R
Type 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} {R
Type 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).
(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.
-
PowerSeries.Exp_Log_groupIso[complete]
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.20●1 theorem
Associated Lean declarations
-
PowerSeries.Exp_Log_groupIso[complete]
-
PowerSeries.Exp_Log_groupIso[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Exp_Log_groupIso.{u_2} {K
Type 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 p↑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`.↑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 ptheorem PowerSeries.Exp_Log_groupIso.{u_2} {K
Type 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 p↑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`.↑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))
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.
-
PowerSeries.loder[complete]
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.21●1 definition
Associated Lean declarations
-
PowerSeries.loder[complete]
-
PowerSeries.loder[complete]
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.loder.{u_2} {R
Type 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_2def PowerSeries.loder.{u_2} {R
Type 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)
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.22●5 theorems
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.isUnit_of_constantCoeff_eq_one.{u_2} {R
Type 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 Rtheorem PowerSeries.isUnit_of_constantCoeff_eq_one.{u_2} {R
Type 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 RAn 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⟧`.
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.isUnit_iff_constantCoeff_isUnit.{u_2} {R
Type 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} {R
Type 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`.
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.mul_inv_cancel_of_constantCoeff_eq_one.{u_2} {R
Type 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`.1theorem PowerSeries.mul_inv_cancel_of_constantCoeff_eq_one.{u_2} {R
Type 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`.1For FPS with constant term 1, we have `f * f⁻¹ = 1`. This is a key property used in the definition of `loder`.
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.inv_mul_cancel_of_constantCoeff_eq_one.{u_2} {R
Type 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`.1theorem PowerSeries.inv_mul_cancel_of_constantCoeff_eq_one.{u_2} {R
Type 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`.1For FPS with constant term 1, we have `f⁻¹ * f = 1`.
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.constantCoeff_inv_of_constantCoeff_eq_one.{u_2} {R
Type 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`.1theorem PowerSeries.constantCoeff_inv_of_constantCoeff_eq_one.{u_2} {R
Type 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`.1The inverse of an FPS with constant term 1 also has constant term 1.
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.
-
PowerSeries.loder_one[complete]
\operatorname{loder}(1) = 0.
Lean code for Lemma8.23●1 theorem
Associated Lean declarations
-
PowerSeries.loder_one[complete]
-
PowerSeries.loder_one[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.loder_one.{u_2} {R
Type 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`.0theorem PowerSeries.loder_one.{u_2} {R
Type 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`.0The logarithmic derivative of 1 is 0.
1' = 0, so
\operatorname{loder}(1) = 0\cdot 1^{-1} = 0.
-
PowerSeries.loder_eq_derivative_Log[complete]
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.24●1 theorem
Associated Lean declarations
-
PowerSeries.loder_eq_derivative_Log[complete]
-
PowerSeries.loder_eq_derivative_Log[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.loder_eq_derivative_Log.{u_2} {R
Type 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 seriesRType 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} {R
Type 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 seriesRType 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).
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.
-
PowerSeries.loder_mul[complete]
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.25●1 theorem
Associated Lean declarations
-
PowerSeries.loder_mul[complete]
-
PowerSeries.loder_mul[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.loder_mul.{u_2} {R
Type 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 RgPowerSeries 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} {R
Type 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 RgPowerSeries 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.
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.
-
PowerSeries.loder_prod[complete]
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.26●1 theorem
Associated Lean declarations
-
PowerSeries.loder_prod[complete]
-
PowerSeries.loder_prod[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.loder_prod.{u_2, u_3} {R
Type 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 Riι) =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 Riι).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 Riι).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} {R
Type 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 Riι) =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 Riι).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 Riι).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.
Induct on k. The base case is
\operatorname{loder}(1)=0, and the induction step follows directly from the
product formula above.
-
PowerSeries.loder_inv[complete]
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.27●1 theorem
Associated Lean declarations
-
PowerSeries.loder_inv[complete]
-
PowerSeries.loder_inv[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.loder_inv.{u_2} {R
Type 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} {R
Type 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.
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.
-
PowerSeries.SummableFPS₀[complete] -
PowerSeries.MultipliableFPS₁[complete] -
PowerSeries.summableFPS₀Sum[complete] -
PowerSeries.multipliableFPS₁Prod[complete]
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.28●4 definitions
Associated Lean declarations
-
PowerSeries.SummableFPS₀[complete]
-
PowerSeries.MultipliableFPS₁[complete]
-
PowerSeries.summableFPS₀Sum[complete]
-
PowerSeries.multipliableFPS₁Prod[complete]
-
PowerSeries.SummableFPS₀[complete] -
PowerSeries.MultipliableFPS₁[complete] -
PowerSeries.summableFPS₀Sum[complete] -
PowerSeries.multipliableFPS₁Prod[complete]
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.SummableFPS₀.{u_2, u_3} {K
Type 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} {K
Type 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⟧₀`.
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.MultipliableFPS₁.{u_2, u_3} {K
Type 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} {K
Type 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⟧₁`.
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.summableFPS₀Sum.{u_2, u_3} {K
Type 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} {K
Type 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.
-
defdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
def PowerSeries.multipliableFPS₁Prod.{u_2, u_3} {K
Type 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} {K
Type 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⟧₁`.
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.
-
PowerSeries.Log_summable_of_multipliable[complete]
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.29●1 theorem
Associated Lean declarations
-
PowerSeries.Log_summable_of_multipliable[complete]
-
PowerSeries.Log_summable_of_multipliable[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Log_summable_of_multipliable.{u_2, u_3} {K
Type 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} {K
Type 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.
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.
-
PowerSeries.Log_tprod[complete]
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.30●1 theorem
Associated Lean declarations
-
PowerSeries.Log_tprod[complete]
-
PowerSeries.Log_tprod[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Log_tprod.{u_2, u_3} {K
Type 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} {K
Type 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
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.
-
PowerSeries.Exp_multipliable_of_summable[complete]
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.31●1 theorem
Associated Lean declarations
-
PowerSeries.Exp_multipliable_of_summable[complete]
-
PowerSeries.Exp_multipliable_of_summable[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Exp_multipliable_of_summable.{u_2, u_3} {K
Type 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} {K
Type 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)
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).
-
PowerSeries.Exp_sum[complete]
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.32●1 theorem
Associated Lean declarations
-
PowerSeries.Exp_sum[complete]
-
PowerSeries.Exp_sum[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/ExpLog.leancomplete
theorem PowerSeries.Exp_sum.{u_2, u_3} {K
Type 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} {K
Type 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`.
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.