Infinite Products of Formal Power Series #
This file formalizes the theory of infinite products of formal power series (FPS),
following the treatment in the source material (Section sec.gf.prod).
Relationship with InfiniteProducts1.lean #
This file (InfiniteProducts.lean) provides the primary API in the PowerSeries namespace.
The file InfiniteProducts1.lean provides an alternative formalization in the AlgebraicCombinatorics.FPS
namespace with definitionally equivalent definitions:
PowerSeries.Multipliable a=AlgebraicCombinatorics.FPS.Multipliable aPowerSeries.tprod a h=AlgebraicCombinatorics.FPS.infprod a hPowerSeries.DeterminesCoeffInProd a M n=AlgebraicCombinatorics.FPS.DeterminesCoeff a n M(argument order)PowerSeries.IsXnApproximator a M n=AlgebraicCombinatorics.FPS.IsXnApproximator a n M(argument order)
The PowerSeries namespace versions are canonical and recommended for new code.
Main Definitions #
PowerSeries.DeterminesCoeffInProd: A finite subsetMdetermines thex^n-coefficient in the product of a family if adding more factors doesn't change that coefficient.PowerSeries.CoeffFinitelyDeterminedInProd: Thex^n-coefficient is finitely determined if some finite subset determines it.PowerSeries.Multipliable: A family of FPS is multipliable if all coefficients in its product are finitely determined.PowerSeries.tprod: The infinite product of a multipliable family.PowerSeries.IsXnApproximator: A finite subset that determines the firstn+1coefficients.
Main Results #
PowerSeries.multipliable_coeff_eq_of_determines: The infinite product is well-defined.PowerSeries.tprod_coeff: The coefficient of the infinite product equals the coefficient of any determining finite partial product.PowerSeries.multipliable_one_add_of_summable: If(f_i)is summable, then(1 + f_i)is multipliable.PowerSeries.multipliable_of_finite_ne_one: If all but finitely many entries equal 1, the family is multipliable.PowerSeries.multipliable_of_union: Products can be split into subproducts.PowerSeries.multipliable_mul: Products of multipliable families are multipliable.PowerSeries.multipliable_div: Quotients of multipliable families (with invertible denominators).PowerSeries.multipliable_subfamily: Subfamilies of multipliable families of invertible FPS.PowerSeries.multipliable_reindex: Reindexing preserves multipliability.PowerSeries.tprod_fubini: Fubini rule for infinite products (I × J → I then J).PowerSeries.tprod_fubini_J: Fubini rule for infinite products (I × J → J then I).PowerSeries.fubini_prod_invertible: Fubini rule showing both row/column families are multipliable.
References #
- Source:
AlgebraicCombinatorics/tex/FPS/InfiniteProducts1.tex
Motivating Example: Binary Representation #
The product ∏_{i ∈ ℕ} (1 + x^{2^i}) equals 1/(1-x) in R[[x]].
This relates to the unique binary representation of natural numbers.
(Label: eq.fps.prod.binary.2)
The product of (1 + x^{2^i}) for i from 0 to m equals (1 - x^{2^{m+1}}) / (1 - x).
This is the finite version of the binary product identity.
(Label: eq.fps.prod.binary.1)
Definition of Coefficient Determination #
Definition \ref{def.fps.determines-xn-coeff}
A finite subset M of I determines the x^n-coefficient in the product of
a family (a_i)_{i ∈ I} if for every finite superset J of M, the x^n-coefficient
of ∏_{i ∈ J} a_i equals that of ∏_{i ∈ M} a_i.
(Label: def.fps.determines-xn-coeff part (b))
Equations
- PowerSeries.DeterminesCoeffInProd a M n = ∀ (J : Finset I), M ⊆ J → (PowerSeries.coeff n) (∏ i ∈ J, a i) = (PowerSeries.coeff n) (∏ i ∈ M, a i)
Instances For
If M₁ determines the x^n coefficient and M₁ ⊆ M₂, then M₂ also determines it.
A finite subset M of I determines the x^n-coefficient in the sum of
a family (a_i)_{i ∈ I} if for every finite superset J of M, the x^n-coefficient
of ∑_{i ∈ J} a_i equals that of ∑_{i ∈ M} a_i.
(Label: def.fps.determines-xn-coeff part (a))
Equations
- PowerSeries.DeterminesCoeffInSum a M n = ∀ (J : Finset I), M ⊆ J → (PowerSeries.coeff n) (∑ i ∈ J, a i) = (PowerSeries.coeff n) (∑ i ∈ M, a i)
Instances For
Definition of Finitely Determined Coefficients #
Definition \ref{def.fps.xn-coeff-fin-determined}
The x^n-coefficient in the product of (a_i)_{i ∈ I} is finitely determined
if there exists a finite subset M that determines it.
(Label: def.fps.xn-coeff-fin-determined part (b))
Equations
- PowerSeries.CoeffFinitelyDeterminedInProd a n = ∃ (M : Finset I), PowerSeries.DeterminesCoeffInProd a M n
Instances For
The x^n-coefficient in the sum of (a_i)_{i ∈ I} is finitely determined
if there exists a finite subset M that determines it.
(Label: def.fps.xn-coeff-fin-determined part (a))
Equations
- PowerSeries.CoeffFinitelyDeterminedInSum a n = ∃ (M : Finset I), PowerSeries.DeterminesCoeffInSum a M n
Instances For
API for Finitely Determined Coefficients #
Basic lemmas for CoeffFinitelyDeterminedInProd and CoeffFinitelyDeterminedInSum.
(Label: def.fps.xn-coeff-fin-determined)
If M₁ determines the x^n coefficient in a sum and M₁ ⊆ M₂, then M₂ also determines it.
For a finite index set, every coefficient in a product is finitely determined. (Label: def.fps.xn-coeff-fin-determined)
For a finite index set, every coefficient in a sum is finitely determined. (Label: def.fps.xn-coeff-fin-determined)
The empty set determines the x^n-coefficient in a sum if and only if
all terms have zero x^n-coefficient.
(Label: def.fps.xn-coeff-fin-determined)
The empty set determines the x^n-coefficient in a product if and only if
the product of any finite subset has the same x^n-coefficient as 1.
(Label: def.fps.xn-coeff-fin-determined)
The value of the finitely determined coefficient in a sum is unique: for any two determining sets, the coefficient values agree. (Label: def.fps.xn-coeff-fin-determined)
The value of the finitely determined coefficient in a product is unique: for any two determining sets, the coefficient values agree. (Label: def.fps.xn-coeff-fin-determined)
If all but finitely many terms have zero x^n-coefficient, then the
x^n-coefficient in the sum is finitely determined.
(Label: def.fps.xn-coeff-fin-determined)
Summability and Finite Determination #
Proposition \ref{prop.fps.summable=fin-det}
A family of FPS is summable if and only if each coefficient in its sum is finitely determined. (Label: prop.fps.summable=fin-det part (a))
Multipliability #
Definition \ref{def.fps.multipliable}
A family (a_i)_{i ∈ I} of FPS is multipliable if for each n ∈ ℕ,
the x^n-coefficient in its product is finitely determined.
(Label: def.fps.multipliable part (a))
Equations
- PowerSeries.Multipliable a = ∀ (n : ℕ), PowerSeries.CoeffFinitelyDeterminedInProd a n
Instances For
For a multipliable family, the x^n-coefficient of the infinite product
is well-defined: it equals the x^n-coefficient of any finite partial product
that determines it.
(Label: prop.fps.multipliable.prod-wd)
The Infinite Product #
Definition \ref{def.fps.multipliable} part (b)
For a multipliable family, the n-th coefficient of the infinite product.
This is the common value of (∏ i ∈ M, a i).coeff n for any finite M that
determines the x^n-coefficient.
(Label: def.fps.multipliable part (b))
Equations
- PowerSeries.tprodCoeff a ha n = (PowerSeries.coeff n) (∏ i ∈ Exists.choose ⋯, a i)
Instances For
The infinite product of a multipliable family of formal power series.
For a multipliable family (a_i)_{i ∈ I}, this is the FPS whose x^n-coefficient
equals the x^n-coefficient of any finite partial product that determines it.
(Label: def.fps.multipliable part (b))
Equations
- PowerSeries.tprod a ha = PowerSeries.mk fun (n : ℕ) => PowerSeries.tprodCoeff a ha n
Instances For
The n-th coefficient of the infinite product equals the n-th coefficient of
any finite partial product that determines it.
(Label: def.fps.multipliable part (b))
For a finite family, the infinite product definition agrees with the finite product. (Label: prop.fps.multipliable.prod-wd2)
x^n-Approximators #
Definition \ref{def.fps.infprod-approx}
A finite subset M is an x^n-approximator for a family (a_i)_{i ∈ I}
if it determines the first n+1 coefficients (i.e., x^0, x^1, ..., x^n)
in the product.
(Label: def.fps.infprod-approx)
Equations
- PowerSeries.IsXnApproximator a M n = ∀ m ≤ n, PowerSeries.DeterminesCoeffInProd a M m
Instances For
An x^n-approximator is also an x^m-approximator for any m ≤ n.
(Label: def.fps.infprod-approx)
If M is an x^n-approximator and M ⊆ N, then N is also an x^n-approximator.
(Label: def.fps.infprod-approx)
The empty set is an x^n-approximator if and only if all a_i = 1.
More precisely, if the family has all entries equal to 1, then ∅ is an approximator.
(Label: def.fps.infprod-approx)
An x^n-approximator always determines the x^n-coefficient.
(Label: def.fps.infprod-approx)
For a multipliable family, there exists an x^n-approximator for each n.
(Label: lem.fps.mulable.approx)
Lemmas on Irrelevant Factors #
Lemma \ref{lem.fps.prod.irlv.1}
If f has zero coefficients for x^0, ..., x^n, then multiplying by (1 + f)
doesn't change the first n+1 coefficients.
(Label: lem.fps.prod.irlv.1)
Extension of the irrelevant factor lemma to finite products. (Label: lem.fps.prod.irlv.fin)
Criterion for Multipliability #
Theorem \ref{thm.fps.1+f-mulable}
If (f_i)_{i ∈ I} is a summable family of FPS, then (1 + f_i)_{i ∈ I} is multipliable.
This is the main criterion for multipliability.
(Label: thm.fps.1+f-mulable)
Simple Criteria for Multipliability #
Proposition \ref{prop.fps.1-mulable} and Remark \ref{rmk.fps.0-mulable}
The constant 1 family is always multipliable.
The empty set determines all coefficients since ∏_{i ∈ ∅} 1 = 1.
(Label: def.fps.multipliable)
The product of all 1s is 1. (Label: def.fps.multipliable)
For the empty index type, any family is trivially multipliable. The empty set determines all coefficients since the product is 1. (Label: def.fps.multipliable)
For the empty index type, the infinite product is 1. (Label: def.fps.multipliable)
For a singleton index type, any family is multipliable. (Label: def.fps.multipliable)
For a singleton index type, the infinite product equals the single element. (Label: def.fps.multipliable)
If a family contains 0 as an entry, it is multipliable (and the product is 0).
(Label: rmk.fps.0-mulable)
The Binary Product Identity (Infinite Version) #
This is the infinite version of the binary product identity, stating that
∏_{i ∈ ℕ} (1 + x^{2^i}) = 1/(1-x).
(Label: eq.fps.prod.binary.2)
The family (1 + x^{2^i})_{i ∈ ℕ} is multipliable.
The infinite product ∏_{i ∈ ℕ} (1 + x^{2^i}) equals 1/(1-x).
This relates to the unique binary representation of natural numbers:
each natural number can be written uniquely as a sum of distinct powers of 2.
(Label: eq.fps.prod.binary.2)
Properties of Infinite Products #
Proposition \ref{prop.fps.union-mulable}
If the subfamilies over J and I \ J are multipliable, then the entire family
is multipliable.
(Label: prop.fps.union-mulable part (a))
The product over I equals the product of subproducts over J and I \ J.
(Label: prop.fps.union-mulable part (b))
Product Rule for Multipliable Families #
Proposition \ref{prop.fps.prod-mulable}
If (a_i) and (b_i) are multipliable, then so is (a_i * b_i).
(Label: prop.fps.prod-mulable part (a))
The proof follows the detailed proof in Section sec.details.gf.prod:
- Get x^n-approximators U and V for families a and b respectively
- Let M = U ∪ V
- Show M determines the x^n coefficient for (a_i * b_i)
- Use the fact that if two pairs of FPS agree up to degree n, their products also agree up to degree n
The product of (a_i * b_i) equals the product of products.
(Label: prop.fps.prod-mulable part (b))
Division Rule for Multipliable Families #
Proposition \ref{prop.fps.div-mulable}
If (a_i) and (b_i) are multipliable and each b_i is invertible,
then (a_i / b_i) is multipliable.
(Label: prop.fps.div-mulable part (a))
The proof is similar to multipliable_mul, using the additional fact that if two FPS agree up to degree n and both have invertible constant terms, then their Ring.inverses also agree up to degree n.
The product of (a_i / b_i) equals the quotient of products.
(Label: prop.fps.div-mulable part (b))
Subfamilies of Multipliable Families #
Remark \ref{rmk.fps.subfamily-not-mulable} shows that not every subfamily of a multipliable family is multipliable. However, for invertible FPS, this holds.
Proposition \ref{prop.fps.prods-mulable-subfams}
Key lemma: If U is an x^n-approximator for the full family, and all FPS are invertible, then U ∩ J is an x^n-approximator for the subfamily J. This is Lemma lem.fps.prods-mulable-subfams-appr from the tex source. The invertibility assumption is essential for this lemma.
If (a_i)_{i ∈ I} is a multipliable family of invertible FPS, then any
subfamily is also multipliable.
(Label: prop.fps.prods-mulable-subfams)
Reindexing #
Proposition \ref{prop.fps.prods-mulable-rules.reindex}
Reindexing a multipliable family via a bijection preserves multipliability. (Label: prop.fps.prods-mulable-rules.reindex)
Reindexing a multipliable family via a bijection preserves the product. (Label: prop.fps.prods-mulable-rules.reindex)
Breaking Products into Subproducts #
Proposition \ref{prop.fps.prods-mulable-rules.SW1}
The family of subproducts indexed by fibers is multipliable. (Label: prop.fps.prods-mulable-rules.SW1)
This theorem proves that if a family (a_s)_{s ∈ S} of power series is multipliable,
and each fiber {s : f s = w} gives a multipliable subfamily, then the family of
fiber products (tprod_{s : f s = w} a_s)_{w ∈ W} is also multipliable.
Note: The TeX source proof uses Lemma lem.fps.prods-mulable-subfams-appr which requires invertibility. This Lean proof uses a different approach that avoids the invertibility assumption: instead of showing each fiber's tprod is x^n-equivalent to 1 (which requires invertibility to "cancel" other fibers), we directly relate the outer product to the full product via unions of fiber approximators.
The family of subproducts indexed by fibers is multipliable (invertible case). (Label: prop.fps.prods-mulable-rules.SW1)
This is a version of multipliable_prod_fibers with an invertibility assumption that
enables a complete proof. The tex source proof implicitly uses invertibility through
Lemma lem.fps.prods-mulable-subfams-appr.
When all FPS in the family have unit constant term, we can use coeff_eq_of_mul_eq_unit
to cancel common factors and relate fiber products.
A multipliable product can be broken into subproducts indexed by a map. (Label: prop.fps.prods-mulable-rules.SW1)
This theorem states that if (a_s)_{s ∈ S} is a multipliable family of FPS, then the infinite
product can be computed by first grouping elements by their image under f : S → W, computing
the infinite product within each fiber, and then taking the infinite product of those results.
Proof approach: Rather than trying to show that U ∩ fiber(w) determines the coefficient
in the fiber product (which requires invertibility to "cancel" other fibers), we use proper
approximators M_w for each fiber from ha_fibers, and relate everything through the full
product approximator. This approach follows multipliable_prod_fibers.
A multipliable product can be broken into subproducts indexed by a map (invertible case). (Label: prop.fps.prods-mulable-rules.SW1)
This is a version of tprod_eq_tprod_fibers with an invertibility assumption that
enables a complete proof. The tex source proof implicitly uses invertibility through
Lemma lem.fps.prods-mulable-subfams-appr.
When all FPS in the family have unit constant term, we can use coeff_eq_of_mul_eq_unit
to cancel common factors and relate fiber products.
Fubini Rule for Infinite Products #
Proposition \ref{prop.fps.prods-mulable-rules.fubini1}
Fubini rule: the iterated product over I then J is multipliable.
(Label: prop.fps.prods-mulable-rules.fubini1)
Fubini rule: products over I × J can be computed as iterated products.
(Label: prop.fps.prods-mulable-rules.fubini1)
Fubini rule (J-first version): the iterated product over J then I is multipliable.
(Label: prop.fps.prods-mulable-rules.fubini1)
Fubini rule (J-first version): products over I × J can be computed as iterated products
over J then I.
(Label: prop.fps.prods-mulable-rules.fubini1)
Full Fubini rule: products over I × J can be computed as iterated products in either order.
This combines both directions of the Fubini rule:
∏_{(i,j) ∈ I × J} a_{(i,j)} = ∏_{i ∈ I} ∏_{j ∈ J} a_{(i,j)}∏_{(i,j) ∈ I × J} a_{(i,j)} = ∏_{j ∈ J} ∏_{i ∈ I} a_{(i,j)}
(Label: prop.fps.prods-mulable-rules.fubini1)
Fubini rule for invertible FPS: no additional multipliability assumptions needed. (Label: prop.fps.prods-mulable-rules.fubini)
Approximator Properties #
Proposition \ref{prop.fps.infprod-approx-xneq}
If M is an x^n-approximator, then any finite superset J gives the same
first n+1 coefficients.
(Label: prop.fps.infprod-approx-xneq part (a))
For a multipliable family, the infinite product's coefficients match those of any approximator. (Label: prop.fps.infprod-approx-xneq part (b))
Approximator Properties in terms of x^n-equivalence #
Proposition \ref{prop.fps.infprod-approx-xneq}
These are the same results as above, but stated using the xnEquiv relation
(which says two FPS agree on coefficients 0 through n).
Note: The xnEquiv definition and basic lemmas (xnEquiv_refl, xnEquiv_symm, xnEquiv_trans)
are imported from AlgebraicCombinatorics.FPS.Limits.
If M is an x^n-approximator, then any finite superset J gives an x^n-equivalent
finite product.
(Label: prop.fps.infprod-approx-xneq part (a))
This is the x^n-equivalence form of the approximator property: for any finite
J ⊇ M, we have ∏_{i∈J} a_i ≡[x^n] ∏_{i∈M} a_i.
For a multipliable family, the infinite product is x^n-equivalent to the product over any x^n-approximator. (Label: prop.fps.infprod-approx-xneq part (b))
This is the x^n-equivalence form: if M is an x^n-approximator for a multipliable
family (a_i)_{i∈I}, then ∏_{i∈I} a_i ≡[x^n] ∏_{i∈M} a_i.