Documentation

AlgebraicCombinatorics.Details.InfiniteProducts2

Infinite Products of Formal Power Series - Part 2 #

This file formalizes the second part of the detailed proofs for infinite products of formal power series, following the Details section of Loehr's "Bijective Combinatorics".

The main content includes:

Main Definitions #

Main Results #

Product Rules (Generalized Distributive Laws) #

Composition Rules #

References #

Essentially Finite Families #

A family (k_i)_{i ∈ I} indexed by a set I with values in is essentially finite if all but finitely many entries equal 0. This is the key concept for indexing summable families of products.

@[reducible, inline]
abbrev PowerSeries.EssentiallyFinite {I : Type u_2} (f : I) :

A family f : I → ℕ is essentially finite if all but finitely many values are 0. This corresponds to S^I_fin in the source.

This is an alias for the canonical _root_.EssentiallyFinite defined in FPS/InfiniteProducts2.lean. Both definitions are definitionally equal: {i | f i ≠ 0}.Finite = (Function.support f).Finite by definition.

For the full API (including _root_.EssentiallyFinite.add, _root_.EssentiallyFinite.neg, _root_.EssentiallyFinite.toFinsupp, etc.), see FPS/InfiniteProducts2.lean.

This version is specialized to for use in product rule proofs.

Equations
Instances For

    EssentiallyFinite is equivalent to having finite support.

    theorem PowerSeries.EssentiallyFinite.support_finite {I : Type u_2} {f : I} (hf : EssentiallyFinite f) :
    {i : I | f i 0}.Finite

    The support of an essentially finite family is finite. (Delegates to _root_.EssentiallyFinite.finite_support)

    theorem PowerSeries.essentiallyFinite_zero {I : Type u_2} :
    EssentiallyFinite fun (x : I) => 0

    The zero family is essentially finite. (Delegates to _root_.EssentiallyFinite.zero)

    theorem PowerSeries.essentiallyFinite_of_finite_support {I : Type u_2} {f : I} {s : Finset I} (hs : ∀ (i : I), f i 0i s) :

    A family with finite support is essentially finite.

    Summability and Multipliability for Product Rules #

    The following definitions and lemmas support the product rule proofs.

    def PowerSeries.CoeffSupportSet {K : Type u_1} [CommRing K] {I : Type u_2} (p : IPowerSeries K) (m : ) :
    Set (I × )

    For a summable family (p_{i,k}), the set T_m of pairs (i,k) with nonzero [x^m] p_{i,k} is finite. This corresponds to equation (pf.prop.fps.prodrule-fin-inf.Tm-def). (label: pf.prop.fps.prodrule-fin-inf.Tm-def)

    Equations
    Instances For
      def PowerSeries.CoeffSupportSetUnion {K : Type u_1} [CommRing K] {I : Type u_2} (p : IPowerSeries K) (n : ) :
      Set (I × )

      The union of coefficient support sets up to degree n. This corresponds to T'_n = T_0 ∪ T_1 ∪ ... ∪ T_n.

      Equations
      Instances For
        def PowerSeries.IndexSetIn {K : Type u_1} [CommRing K] {I : Type u_2} (p : IPowerSeries K) (n : ) :
        Set I

        The index set I_n of first components appearing in T'_n.

        Equations
        Instances For
          def PowerSeries.ValueSetKn {K : Type u_1} [CommRing K] {I : Type u_2} (p : IPowerSeries K) (n : ) :

          The value set K_n of second components appearing in T'_n.

          Equations
          Instances For

            Claim 3: Coefficient Vanishing Outside T'_n #

            For (i,k) ∈ S̄ \ T'_n, we have [x^m] p_{i,k} = 0 for all m ∈ {0,1,...,n}. (label: pf.prop.fps.prodrule-fin-inf.Tm-def)

            theorem PowerSeries.prodRule_claim3 {K : Type u_1} [CommRing K] {I : Type u_2} (p : IPowerSeries K) (n : ) (i : I) (k : ) (hk : k 0) (hnotin : (i, k)CoeffSupportSetUnion p n) (m : ) :
            m n(coeff m) (p i k) = 0

            Claim 3: If (i,k) is not in the coefficient support union up to n, then all coefficients up to degree n vanish. (Claim 3, label: pf.prop.fps.prodrule-fin-inf.Tm-def)

            Claim 4: Multipliability of Product Families #

            If (k_i)_{i ∈ I} is essentially finite, then (p_{i,k_i})_{i ∈ I} is multipliable.

            theorem PowerSeries.prodRule_claim4 {K : Type u_1} [CommRing K] {I : Type u_2} (p : IPowerSeries K) (hp0 : ∀ (i : I), p i 0 = 1) (k : I) (hk : EssentiallyFinite k) :
            {i : I | p i (k i) 1}.Finite

            Claim 4: For an essentially finite family (k_i) with p_{i,0} = 1, the family (p_{i,k_i}) is multipliable (all but finitely many terms are 1). (Claim 4)

            Claim 5: Product Coefficient Vanishing #

            Under certain conditions on the index family, the product coefficient vanishes.

            theorem PowerSeries.prodRule_claim5 {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (n : ) (k : I) (_hk : EssentiallyFinite k) (_hp0 : ∀ (i : I), p i 0 = 1) (j : I) (hkj : k j 0) (hnotin : (j, k j)CoeffSupportSetUnion p n) (s : Finset I) :
            j s(coeff n) (∏ is, p i (k i)) = 0

            Claim 5: If some j ∈ I satisfies (j, k_j) ∉ T'_n, then [x^n](∏_{i ∈ I} p_{i,k_i}) = 0. (Claim 5)

            Claim 6: Product Coefficient Vanishing for Non-Contributing Families #

            For families outside S^I_{I_n}, the product coefficient vanishes.

            theorem PowerSeries.prodRule_claim6 {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (n : ) (k : I) (hk : EssentiallyFinite k) (hp0 : ∀ (i : I), p i 0 = 1) (j : I) (hj_notin : jIndexSetIn p n) (hkj : k j 0) (s : Finset I) :
            j s(coeff n) (∏ is, p i (k i)) = 0

            Claim 6: If (k_i) ∈ S^I_fin \ S^I_{I_n} (i.e., some k_j ≠ 0 for j ∉ I_n), then [x^n](∏_{i ∈ I} p_{i,k_i}) = 0. (Claim 6)

            Claim 7: Summability of Product Family #

            The family (∏_{i ∈ I} p_{i,k_i}) indexed by essentially finite (k_i) is summable.

            theorem PowerSeries.prodRule_claim7 {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (_hp0 : ∀ (i : I), p i 0 = 1) (n : ) (_hTn_finite : (CoeffSupportSetUnion p n).Finite) (hIn_finite : (IndexSetIn p n).Finite) (hKn_finite : (ValueSetKn p n).Finite) :
            {k : I | EssentiallyFinite k (∀ ihIn_finite.toFinset, k i = 0) (coeff n) (∏ ihIn_finite.toFinset, p i (k i)) 0}.Finite

            Claim 7: The family (∏_{i ∈ I} p_{i,k_i}) indexed by essentially finite families (k_i)_{i ∈ I} ∈ S^I_fin supported on I_n is summable. That is, for each n ∈ ℕ, only finitely many essentially finite families (k_i) supported on I_n satisfy [x^n](∏_{i ∈ I_n} p_{i,k_i}) ≠ 0.

            The proof shows that any k with nonzero coefficient must satisfy:

            • Property 1: All i ∉ I_n satisfy k i = 0 (support contained in I_n) - explicit in statement
            • Property 2: All i ∈ I_n satisfy k i ∈ K_n ∪ {0} These two properties restrict k to finitely many possibilities.

            Note: Property 1 is made explicit in the statement since the product is over the finite set I_n. For the infinite product interpretation (with p_{i,0} = 1), this constraint follows from the fact that factors with k_i ≠ 0 for i ∉ I_n would have vanishing coefficients up to degree n, making the product coefficient zero (by Claim 5/6). (Claim 7)

            Claim 8: Coefficient Reduction to Finite Index Sets #

            The coefficient of the sum over essentially finite families equals the coefficient of the sum over a finite index set.

            def PowerSeries.extendFromFinset {I : Type u_2} [DecidableEq I] (In : Finset I) (f : In) :
            I

            Extend a function from a finite subset to the full type by setting values to 0 outside.

            Equations
            Instances For
              def PowerSeries.restrictToFinset {I : Type u_2} (In : Finset I) (k : I) (i : In) :

              Restrict a function to a finite subset.

              Equations
              Instances For
                theorem PowerSeries.prodRule_claim8 {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (n : ) (_hp0 : ∀ (i : I), p i 0 = 1) (In : Finset I) (_hIn : iIn, iIndexSetIn p n) (S : IFinset ) (_hS0 : ∀ (i : I), 0 S i) (essFinFamilies : Finset (I)) (_hEss : kessFinFamilies, EssentiallyFinite k) (hSIn : kessFinFamilies, iIn, k i = 0) (hValInS : kessFinFamilies, iIn, k i S i) (hComplete : ∀ (k : I), (∀ iIn, k i = 0)(∀ iIn, k i S i)k essFinFamilies) :
                (coeff n) (∑ kessFinFamilies, iIn, p i (k i)) = (coeff n) (∑ fFintype.piFinset fun (i : In) => S i, i : In, p (↑i) (f i))

                Claim 8: The coefficient of the sum over essentially finite families equals the coefficient of the sum over the finite index set I_n. [x^n](∑_{(k_i) ∈ S^I_fin} ∏_{i ∈ I} p_{i,k_i}) = [x^n](∑_{(k_i) ∈ S^{I_n}} ∏_{i ∈ I_n} p_{i,k_i}).

                The proof establishes a bijection between essFinFamilies (functions that are 0 outside In and have values in S i for i ∈ In) and Fintype.piFinset (fun i : In => S i.1).

                Note: The hypotheses hValInS and hComplete ensure that essFinFamilies is exactly the set of extensions of functions in the piFinset. These are needed to establish the bijection between the two index sets.

                (Claim 8)

                Claim 9: Sum Coefficient Vanishing #

                For i ∉ I_n, the sum ∑_{k ∈ S_i \ {0}} p_{i,k} has vanishing coefficients up to degree n.

                theorem PowerSeries.prodRule_claim9 {K : Type u_1} [CommRing K] {I : Type u_2} (p : IPowerSeries K) (n : ) (i : I) (hi : iIndexSetIn p n) (Si : Finset ) (_hSi : 0 Si) (m : ) :
                m n(coeff m) (∑ kSi \ {0}, p i k) = 0

                Claim 9: For i ∉ I_n, we have [x^m](∑_{k ∈ S_i \ {0}} p_{i,k}) = 0 for each m ∈ {0,1,...,n}. (Claim 9)

                Claim 10: Product Reduction to Finite Index Sets #

                The product over I reduces to the product over I_n for coefficient extraction.

                theorem PowerSeries.prodRule_claim10 {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (n : ) (hp0 : ∀ (i : I), p i 0 = 1) (In : Finset I) (hIn : iIn, iIndexSetIn p n) (S : IFinset ) (hS0 : ∀ (i : I), 0 S i) (J : Finset I) (hInJ : In J) :
                (coeff n) (∏ iJ, kS i, p i k) = (coeff n) (∏ iIn, kS i, p i k)

                Claim 10: For any finite set J ⊇ I_n, the coefficient of the product over J equals the coefficient of the product over I_n: [x^n](∏_{i ∈ J} ∑_{k ∈ S_i} p_{i,k}) = [x^n](∏_{i ∈ I_n} ∑_{k ∈ S_i} p_{i,k}).

                This captures the key property that the infinite product's coefficient stabilizes at I_n. In the source, this is stated as reducing ∏_{i ∈ I} to ∏_{i ∈ I_n}, which makes sense when I is infinite but the coefficient only depends on finitely many terms.

                The proof uses:

                1. For i ∈ J \ I_n, we have ∑_{k ∈ S_i} p_{i,k} = 1 + ∑_{k ∈ S_i \ {0}} p_{i,k}
                2. By Claim 9, [x^m](∑_{k ∈ S_i \ {0}} p_{i,k}) = 0 for all m ≤ n when i ∉ I_n
                3. By Lemma lem.fps.prod.irlv.inf, these factors don't affect the coefficient

                (Claim 10)

                Claim 11: Finite Product-Sum Interchange #

                For a finite index set, the product of sums equals the sum of products.

                theorem PowerSeries.prodRule_claim11 {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (In : Finset I) (S : IFinset ) :
                iIn, kS i, p i k = fFintype.piFinset fun (i : In) => S i, i : In, p (↑i) (f i)

                Claim 11: For finite I_n, ∏_{i ∈ I_n} ∑_{k ∈ S_i} p_{i,k} = ∑_{(k_i) ∈ S^{I_n}} ∏_{i ∈ I_n} p_{i,k_i}. (Claim 11)

                Main Proposition: Infinite-Infinite Product Rule (Generalized Distributive Law) #

                This is the culmination of Claims 3-11. It states that for a summable family (p_{i,k}) with p_{i,0} = 1, the infinite product of infinite sums equals the sum over essentially finite families of products.

                Proposition prop.fps.prodrule-inf-inf: ∏_{i ∈ I} ∑_{k ∈ S_i} p_{i,k} = ∑_{(k_i)_{i ∈ I} ∈ S^I_fin} ∏_{i ∈ I} p_{i,k_i}

                def PowerSeries.SfinI {I : Type u_2} (S : ISet ) :
                Set (I)

                The set S^I_fin of essentially finite families in ∏_{i ∈ I} S_i.

                Equations
                Instances For
                  theorem PowerSeries.prodRule_finite_interchange {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (M : Finset I) (S : IFinset ) :
                  iM, kS i, p i k = fFintype.piFinset fun (i : M) => S i, i : M, p (↑i) (f i)

                  Auxiliary: For finite index sets, the product-sum interchange (Claim 11). This is a direct consequence of prodRule_claim11.

                  theorem PowerSeries.prodRule_infInf {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (S : ISet ) (_hS0 : ∀ (i : I), 0 S i) (_hp0 : ∀ (i : I), p i 0 = 1) (_hSummable : ∀ (m : ), {ik : I × | ik.2 S ik.1 ik.2 0 (coeff m) (p ik.1 ik.2) 0}.Finite) (hMultipliable : ∀ (n : ), ∃ (M : Finset I), ∀ (J : Finset I), M J∀ (Sfin : IFinset ), (∀ (i : I), (Sfin i) S i)(∀ (i : I), 0 Sfin i)(coeff n) (∏ iJ, kSfin i, p i k) = (coeff n) (∏ iM, kSfin i, p i k)) (n : ) :
                  ∃ (M_n : Finset I), (∀ (J : Finset I), M_n J∀ (Sfin : IFinset ), (∀ (i : I), (Sfin i) S i)(∀ (i : I), 0 Sfin i)(coeff n) (∏ iJ, kSfin i, p i k) = (coeff n) (∏ iM_n, kSfin i, p i k)) ∀ (Sfin : IFinset ), (∀ (i : I), (Sfin i) S i)(∀ (i : I), 0 Sfin i)(coeff n) (∏ iM_n, kSfin i, p i k) = (coeff n) (∑ fFintype.piFinset fun (i : M_n) => Sfin i, i : M_n, p (↑i) (f i))

                  Main Proposition (prop.fps.prodrule-inf-inf): The generalized distributive law for infinite products and infinite sums of formal power series.

                  Given:

                  • An index set I
                  • For each i ∈ I, a set S_i ⊆ ℕ with 0 ∈ S_i
                  • A family (p_{i,k})_{(i,k) ∈ I × ℕ} of FPS with p_{i,0} = 1 for all i
                  • The family (p_{i,k})_{(i,k) ∈ S̄} is summable (where S̄ = {(i,k) | k ∈ S_i, k ≠ 0})
                  • The family (∑_{k ∈ S_i} p_{i,k})_{i ∈ I} is multipliable

                  Then for each coefficient n:

                  • The LHS [x^n](∏_{i ∈ I} ∑_{k ∈ S_i} p_{i,k}) is computed via the multipliability approximator
                  • The RHS [x^n](∑_{(k_i) ∈ S^I_fin} ∏_{i ∈ I} p_{i,k_i}) is computed via the finite index set I_n
                  • These coefficients are equal

                  The proof chain (for each n):

                  1. Claim 10: [x^n](∏_{i ∈ I} ∑_{k ∈ S_i} p_{i,k}) = [x^n](∏_{i ∈ I_n} ∑_{k ∈ S_i} p_{i,k})
                  2. Claim 11: ∏_{i ∈ I_n} ∑_{k ∈ S_i} p_{i,k} = ∑_{(k_i) ∈ S^{I_n}} ∏_{i ∈ I_n} p_{i,k_i}
                  3. Claim 8: [x^n](∑_{(k_i) ∈ S^{I_n}} ∏_{i ∈ I_n} p_{i,k_i}) = [x^n](∑_{(k_i) ∈ S^I_fin} ∏_{i ∈ I} p_{i,k_i})

                  Note on hypotheses: The hypotheses hS0, hp0, and hSummable are needed for the full proof of the source proposition (to construct I_n and prove Claims 3-10). In this formulation, we use hMultipliable which already encapsulates the stabilization property. The full proof would derive hMultipliable from hSummable and hp0. These hypotheses are retained here to match the source statement and to support future completion of the intermediate claims.

                  (Proposition prop.fps.prodrule-inf-inf)

                  theorem PowerSeries.prodRule_infInf_coeff {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (p : IPowerSeries K) (n : ) (M : Finset I) (Sfin : IFinset ) :
                  (coeff n) (∏ iM, kSfin i, p i k) = (coeff n) (∑ fFintype.piFinset fun (i : M) => Sfin i, i : M, p (↑i) (f i))

                  Corollary: The coefficient equality form of the generalized distributive law. For any finite approximation of the index sets and value sets, the coefficient of the product of sums equals the coefficient of the sum of products.

                  This is a direct consequence of Claim 11 (finite product-sum interchange). (Proposition prop.fps.prodrule-inf-inf, coefficient form)

                  Composition Rules for Infinite Products #

                  The following results establish that composition distributes over infinite products.

                  theorem PowerSeries.comp_prod_finite {K : Type u_1} [CommRing K] {ι : Type u_2} [DecidableEq ι] (s : Finset ι) (f : ιPowerSeries K) (g : PowerSeries K) (hg : constantCoeff g = 0) :
                  subst g (∏ is, f i) = is, subst g (f i)

                  Finite product composition rule: For finite I, (∏_{i ∈ I} f_i) ∘ g = ∏_{i ∈ I} (f_i ∘ g). This is proved by induction on |I|. (Lemma lem.fps.subs.rule-infprod-fin)

                  theorem PowerSeries.xnEquiv_comp {K : Type u_1} [CommRing K] {n : } {f₁ f₂ g : PowerSeries K} (hf : kn, (coeff k) f₁ = (coeff k) f₂) (hg : constantCoeff g = 0) (k : ) :
                  k n(coeff k) (subst g f₁) = (coeff k) (subst g f₂)

                  x^n-equivalence is preserved under composition when the inner series has zero constant term. This is a consequence of Proposition prop.fps.xneq.comp.

                  theorem PowerSeries.comp_prod_approx_determines {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (f : IPowerSeries K) (g : PowerSeries K) (hg : constantCoeff g = 0) (n : ) (M : Finset I) (hM_approx : kn, ∀ (J : Finset I), M J(coeff k) (∏ iJ, f i) = (coeff k) (∏ iM, f i)) (J : Finset I) :
                  M J(coeff n) (∏ iJ, subst g (f i)) = (coeff n) (∏ iM, subst g (f i))

                  Claim 1 for infinite product composition: An x^n-approximator for (f_i) determines the x^n-coefficient in the product of (f_i ∘ g). (Claim 1 in proof of prop.fps.subs.rule-infprod)

                  Note: An x^n-approximator is a finite subset M that determines the first n+1 coefficients in the product, i.e., for all k ≤ n and all J ⊇ M, coeff k (∏ i ∈ J, f i) = coeff k (∏ i ∈ M, f i).

                  theorem PowerSeries.comp_prod_multipliable {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (f : IPowerSeries K) (g : PowerSeries K) (hg : constantCoeff g = 0) (hf_mulable : ∀ (n : ), ∃ (M : Finset I), ∀ (J : Finset I), M J(coeff n) (∏ iJ, f i) = (coeff n) (∏ iM, f i)) (n : ) :
                  ∃ (M : Finset I), ∀ (J : Finset I), M J(coeff n) (∏ iJ, subst g (f i)) = (coeff n) (∏ iM, subst g (f i))

                  If (f_i)_{i ∈ I} is multipliable and [x^0]g = 0, then (f_i ∘ g)_{i ∈ I} is multipliable. (Proposition prop.fps.subs.rule-infprod, first part)

                  theorem PowerSeries.comp_prod_infinite {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (f : IPowerSeries K) (g : PowerSeries K) (hg : constantCoeff g = 0) (hf_mulable : ∀ (n : ), ∃ (M : Finset I), ∀ (J : Finset I), M J(coeff n) (∏ iJ, f i) = (coeff n) (∏ iM, f i)) (prod_f : PowerSeries K) (hprod : ∀ (n : ) (M : Finset I), (∀ (J : Finset I), M J(coeff n) (∏ iJ, f i) = (coeff n) (∏ iM, f i))(coeff n) prod_f = (coeff n) (∏ iM, f i)) (n : ) :
                  ∃ (M : Finset I), (coeff n) (subst g prod_f) = (coeff n) (∏ iM, subst g (f i))

                  For multipliable (f_i)_{i ∈ I} with [x^0]g = 0, (∏_{i ∈ I} f_i) ∘ g = ∏_{i ∈ I} (f_i ∘ g). (Proposition prop.fps.subs.rule-infprod, second part)

                  The hypothesis hprod says that prod_f is the infinite product: for any approximator M (a finite set such that all supersets give the same coefficient), the coefficient of prod_f equals the coefficient of the finite product over M. This is stronger than just saying prod_f's coefficients can be computed by some finite product, and is necessary to ensure prod_f actually represents the infinite product.

                  Additional Supporting Lemmas #

                  theorem PowerSeries.coeff_zero_of_dvd {K : Type u_1} [CommRing K] {n : } {u v : PowerSeries K} (hdvd : u v) (hu : mn, (coeff m) u = 0) (m : ) :
                  m n(coeff m) v = 0

                  If u divides v and the first n+1 coefficients of u are zero, then the first n+1 coefficients of v are also zero. (Lemma lem.fps.prod.irlv.mul)

                  theorem PowerSeries.coeff_mul_one_add_of_lt_order {K : Type u_1} [CommRing K] {φ ψ : PowerSeries K} (n : ) (h : n < ψ.order) :
                  (coeff n) (φ * (1 + ψ)) = (coeff n) φ

                  Helper lemma: if order(ψ) > n, then coeff n (φ * (1 + ψ)) = coeff n φ.

                  theorem PowerSeries.coeff_prod_one_plus_summable {K : Type u_1} [CommRing K] {I : Type u_2} [DecidableEq I] (a : PowerSeries K) (f : IPowerSeries K) (n : ) (hf_zero : ∀ (i : I), mn, (coeff m) (f i) = 0) (s : Finset I) (m : ) :
                  m n(coeff m) (a * is, (1 + f i)) = (coeff m) a

                  For a summable family (f_i)_{i ∈ I} with [x^m] f_i = 0 for all m ≤ n and i ∈ I, we have [x^m](a · ∏_{i ∈ I}(1 + f_i)) = [x^m] a for all m ≤ n. (Lemma lem.fps.prod.irlv.inf)