Exponentials and Logarithms of Formal Power Series #
This file formalizes Section 7.8 (Exponentials and logarithms) from the Algebraic Combinatorics textbook. It develops the theory of exponential and logarithm operations on formal power series over ℚ-algebras.
Convention #
Throughout this file, K is assumed to be a commutative ℚ-algebra (Convention 7.8.1 in the text).
This allows division by positive integers.
Main Definitions #
PowerSeries.logbar: The FPS∑_{n≥1} (-1)^{n-1}/n · x^n, the Mercator series forlog(1+x).PowerSeries.expbar: The FPSexp - 1 = ∑_{n≥1} 1/n! · x^n.PowerSeries.PowerSeries₀: The set of FPS with constant term 0.PowerSeries.PowerSeries₁: The set of FPS with constant term 1.PowerSeries.Exp: The mapg ↦ exp ∘ gfromK⟦X⟧₀toK⟦X⟧₁.PowerSeries.Log: The mapf ↦ logbar ∘ (f - 1)fromK⟦X⟧₁toK⟦X⟧₀.PowerSeries.loder: The logarithmic derivativef'/ffor FPS with constant term 1.
Main Results #
PowerSeries.derivative_exp:exp' = exp(Definition 7.8.2 / Proposition 7.8.3)PowerSeries.derivative_expbar:expbar' = exp(Proposition 7.8.3)PowerSeries.derivative_logbar:logbar' = (1+x)⁻¹(Proposition 7.8.3)PowerSeries.derivative_exp_comp:(exp ∘ g)' = (exp ∘ g) · g'(Proposition 7.8.3(a))PowerSeries.derivative_expbar_comp:(expbar ∘ g)' = (exp ∘ g) · g'(Proposition 7.8.3(a))PowerSeries.derivative_logbar_comp:(logbar ∘ g)' = (1+g)⁻¹ · g'(Proposition 7.8.3(b))PowerSeries.expbar_comp_logbar:expbar ∘ logbar = x(Theorem 7.8.5)PowerSeries.logbar_comp_expbar:logbar ∘ expbar = x(Theorem 7.8.5)PowerSeries.Log_ExpandPowerSeries.Exp_Log:ExpandLogare mutually inverse (Lemma 7.8.8)PowerSeries.Exp_add:Exp(f + g) = Exp(f) · Exp(g)(Lemma 7.8.9)PowerSeries.Log_mul:Log(fg) = Log(f) + Log(g)(Lemma 7.8.9)PowerSeries.Exp_Log_groupIso:Expis a group isomorphism (Theorem 7.8.11)PowerSeries.loder_mul:loder(fg) = loder(f) + loder(g)(Proposition 7.8.14)PowerSeries.loder_inv:loder(f⁻¹) = -loder(f)(Corollary 7.8.16)PowerSeries.Log_tprod:Log(∏ fᵢ) = ∑ Log(fᵢ)for infinite products (Proposition prop.fps.Exp-Log-infprod)PowerSeries.Exp_sum:Exp(∑ gᵢ) = ∏ Exp(gᵢ)for infinite sums (Proposition prop.fps.Exp-Log-infsum)
References #
- [Darij Grinberg, Algebraic Combinatorics, Section 7.8]
- [Grinberg-Reiner, logexp, Lemma 0.4 and Theorem 0.1]
Tags #
power series, exponential, logarithm, formal power series
Section 7.8.1: Definitions #
The logarithm series logbar = ∑_{n≥1} (-1)^{n-1}/n · x^n, which is the Mercator series
for log(1+x). This is \overline{\log} in Definition 7.8.2 (def.fps.exp-log).
Equations
- PowerSeries.logbar K = PowerSeries.mk fun (n : ℕ) => if n = 0 then 0 else (algebraMap ℚ K) ((-1) ^ (n - 1) / ↑n)
Instances For
The shifted exponential series expbar = exp - 1 = ∑_{n≥1} 1/n! · x^n.
This is \overline{\exp} in Definition 7.8.2 (def.fps.exp-log).
Equations
- PowerSeries.expbar K = PowerSeries.exp K - 1
Instances For
Basic coefficient lemmas #
Explicit coefficient values for Definition 7.8.2 (def.fps.exp-log) #
These lemmas verify that our definitions match the textbook formulas:
exp has constant term 1. This is part of Definition 7.8.2 (def.fps.exp-log).
Section 7.8.2: The exponential and logarithm are inverse #
The series (1+x)⁻¹ = ∑_{n≥0} (-1)^n x^n.
Equations
- PowerSeries.invOnePlusX K = PowerSeries.mk fun (n : ℕ) => (algebraMap ℚ K) ((-1) ^ n)
Instances For
The derivative of logbar is invOnePlusX. This is part of the proof of
Proposition 7.8.3 (prop.fps.exp-log-der).
Chain rule for composition with exp: (exp ∘ g)' = (exp ∘ g) · g'.
This is Proposition 7.8.3(a) (prop.fps.exp-log-der).
Chain rule for composition with expbar: (expbar ∘ g)' = (exp ∘ g) · g'.
This is Proposition 7.8.3(a) (prop.fps.exp-log-der).
Note that expbar = exp - 1, so expbar' = exp' = exp, and the chain rule gives
(expbar ∘ g)' = (exp ∘ g) · g'.
invOnePlusX K * (1 + X) = 1.
(invOnePlusX K).subst g = (1 + g)⁻¹ when constantCoeff g = 0.
Chain rule for composition with logbar: (logbar ∘ g)' = (1+g)⁻¹ · g'.
This is Proposition 7.8.3(b) (prop.fps.exp-log-der).
Note: Requires Field K for the inverse to exist.
logbar ∘ expbar = x for fields. This is the second part of Theorem 7.8.5 (thm.fps.exp-log-inv),
equation (7.8.1).
The proof strategy (from the textbook) is to show that logbar ∘ expbar and X have:
- The same constant term (both are 0)
- The same derivative (both equal 1) Then by Theorem 7.3.7(h), they must be equal.
For the derivative calculation:
(logbar ∘ expbar)' = (logbar' ∘ expbar) · expbar'by chain rulelogbar' = (1+X)⁻¹andexpbar' = exp(1+X)⁻¹ ∘ expbar = (1 + expbar)⁻¹ = exp⁻¹since1 + expbar = exp- So
(logbar ∘ expbar)' = exp⁻¹ · exp = 1 = X'
Note: This version is for fields. The general CommRing version is logbar_comp_expbar.
The constant term of a composition f ∘ g where g has constant term 0.
This is Lemma 7.8.4 (lem.fps.compos-cst-term-0).
Note: Mathlib has PowerSeries.constantCoeff_subst which requires HasSubst.
Uniqueness lemma for ODEs of the form h' = (1 + h) * g with matching initial conditions.
This is used to prove expbar_comp_logbar.
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.
(invOnePlusX K).subst (expbar K) * exp K = 1. This is a key lemma for proving
logbar_comp_expbar.
Uniqueness lemma for ODEs of the form h' = 1 (constant) with matching initial conditions.
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 rulelogbar' = invOnePlusXandexpbar' = exp(invOnePlusX ∘ expbar) · exp = 1sinceinvOnePlusX · (1 + X) = 1and1 + expbar = exp- So
(logbar ∘ expbar)' = 1 = X'
Section 7.8.3: The exponential and logarithm of an FPS #
R⟦X⟧₀ is the set of FPS with constant term 0.
This is Definition 7.8.6(a) (def.fps.Exp-Log-maps).
Equations
Instances For
R⟦X⟧₁ is the set of FPS with constant term 1.
This is Definition 7.8.6(b) (def.fps.Exp-Log-maps).
Equations
Instances For
R⟦X⟧₀ is closed under addition and subtraction and contains 0.
This is Proposition 7.8.10(a) (prop.fps.Exp-Log-groups).
R⟦X⟧₁ is closed under multiplication and division and contains 1.
This is Proposition 7.8.10(b) (prop.fps.Exp-Log-groups).
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).
R⟦X⟧₀ forms an additive subgroup.
This is Proposition 7.8.10(a) (prop.fps.Exp-Log-groups).
Equations
- PowerSeries.PowerSeries₀.addSubgroup = { carrier := PowerSeries.PowerSeries₀, add_mem' := ⋯, zero_mem' := ⋯, neg_mem' := ⋯ }
Instances For
Division in R⟦X⟧₁: if f, g ∈ R⟦X⟧₁, then f * g⁻¹ ∈ R⟦X⟧₁.
This is part of Proposition 7.8.10(b) (prop.fps.Exp-Log-groups).
R⟦X⟧₁ forms a multiplicative subgroup of units.
This is Proposition 7.8.10(b) (prop.fps.Exp-Log-groups).
Equations
- PowerSeries.PowerSeries₁.subgroup = { carrier := {u : (PowerSeries R)ˣ | ↑u ∈ PowerSeries.PowerSeries₁}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
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).
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).
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).
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).
Equations
- PowerSeries.Exp g = ⟨PowerSeries.subst (↑g) (PowerSeries.exp K), ⋯⟩
Instances For
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).
Equations
- PowerSeries.Log f = ⟨PowerSeries.subst (↑f - 1) (PowerSeries.logbar K), ⋯⟩
Instances For
Section 7.8.4: Addition to multiplication #
Uniqueness lemma: if two power series satisfy the same first-order linear ODE
h' = h * g with the same initial condition, they are equal.
This is used to prove Exp_add.
Section 7.8.5: The logarithmic derivative #
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 = 0loder_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)
Equations
- f.loder = (PowerSeries.derivative R) f * f⁻¹
Instances For
The definition of the logarithmic derivative: loder f = f' * f⁻¹.
Well-definedness of loder (def.fps.loder.1) #
The logarithmic derivative is well-defined for FPS with constant term 1 because such FPS are invertible. The following lemmas establish this.
An FPS with constant term 1 is invertible (a unit).
This is the well-definedness statement for loder in Definition 7.8.12 (def.fps.loder.1).
The proof: If constantCoeff f = 1, then constantCoeff f is a unit in R, so by
Proposition prop.fps.invertible, f is invertible in R⟦X⟧.
An FPS is invertible iff its constant coefficient is a unit.
This is a more general version of isUnit_of_constantCoeff_eq_one.
For FPS with constant term 1, we have f * f⁻¹ = 1.
This is a key property used in the definition of loder.
For FPS with constant term 1, we have f⁻¹ * f = 1.
The inverse of an FPS with constant term 1 also has constant term 1.
The series invOnePlusX equals (1 + X)⁻¹.
The logarithmic derivative equals the derivative of the logarithm over ℚ-algebras. This is Proposition 7.8.13 (prop.fps.loder.log).
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.
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.
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.
Section 7.10.2: Exp and Log for Infinite Products #
The Exp and Log maps convert between infinite sums and products. These results require K to be a ℚ-algebra for the formal exp and log to be defined.
Propositions prop.fps.Exp-Log-infsum and prop.fps.Exp-Log-infprod state:
Exp(∑_{i ∈ I} f_i) = ∏_{i ∈ I} Exp(f_i)for summable families inK⟦X⟧_0Log(∏_{i ∈ I} f_i) = ∑_{i ∈ I} Log(f_i)for multipliable families inK⟦X⟧_1
Summable families in K⟦X⟧₀ #
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⟧₀.
Equations
- PowerSeries.SummableFPS₀ f = ∀ (n : ℕ), {i : I | (PowerSeries.coeff n) ↑(f i) ≠ 0}.Finite
Instances For
For a summable family in K⟦X⟧₀, the sum is also in K⟦X⟧₀.
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.
Equations
- PowerSeries.summableFPS₀Sum f _hf = ⟨PowerSeries.mk fun (n : ℕ) => ∑ᶠ (i : I), (PowerSeries.coeff n) ↑(f i), ⋯⟩
Instances For
Multipliable families in K⟦X⟧₁ #
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⟧₁.
Equations
- PowerSeries.MultipliableFPS₁ f = PowerSeries.Multipliable fun (i : I) => ↑(f i)
Instances For
For a multipliable family in K⟦X⟧₁, the product is also in K⟦X⟧₁.
The product of a multipliable family in K⟦X⟧₁ as an element of K⟦X⟧₁.
Equations
- PowerSeries.multipliableFPS₁Prod f hf = ⟨PowerSeries.tprod (fun (i : I) => ↑(f i)) hf, ⋯⟩
Instances For
The main theorem: Log converts products to sums #
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.
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:
(Log f_i)_{i ∈ I}is a summable family of FPSs inK⟦X⟧₀∏_{i ∈ I} f_i ∈ K⟦X⟧₁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:
- Use
Log_mulfor finite products - Show that for multipliable families, the finite partial products converge
- Use continuity of Log (which follows from the coefficient-wise definition) to pass to the limit
Exp converts infinite sums to infinite products.
This is the infinite version of Exp_add.