Documentation

AlgebraicCombinatorics.LaurentSeries

Laurent Power Series #

This file formalizes the content from Section sec.gf.laure of the textbook, covering Laurent power series and related concepts.

Main Definitions #

Main Results #

References #

Binary Representation #

A binary representation encodes a nonnegative integer as an essentially finite sequence of bits (0 or 1).

A binary representation of a nonnegative integer n is an essentially finite sequence (b_i)_{i ∈ ℕ} of elements in {0, 1} such that n = ∑ b_i * 2^i.

This corresponds to Definition in sec.gf.laure of the source.

Instances For

    Every natural number has a binary representation. This is part of Theorem thm.fps.laure.binary-rep-uniq.

    The binary representation of a natural number is unique. This is Theorem thm.fps.laure.binary-rep-uniq.

    Balanced Ternary Representation #

    A balanced ternary representation uses digits from {-1, 0, 1} with base 3. Unlike binary representations, this can represent negative integers.

    The set of balanced ternary digits: {-1, 0, 1}

    Instances For
      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        A balanced ternary representation of an integer n is an essentially finite sequence (b_i)_{i ∈ ℕ} of elements in {-1, 0, 1} such that n = ∑ b_i * 3^i.

        This corresponds to the Definition of balanced ternary representation in sec.gf.laure.

        Instances For

          Helper definitions and lemmas for balanced ternary existence proof #

          Every integer has a balanced ternary representation. This is part of Theorem thm.fps.laure.balanced-tern-rep-uniq.

          The balanced ternary representation of an integer is unique. This is Theorem thm.fps.laure.balanced-tern-rep-uniq.

          Doubly Infinite Power Series #

          The K-module K[[x^±]] of all families (a_n)_{n ∈ ℤ} of elements of K. This is the largest space allowing negative powers of x, but it does not have a well-defined multiplication in general.

          This corresponds to Definition def.fps.laure.double.

          The K-module of doubly infinite power series K[[x^±]].

          An element is a family (a_n)_{n ∈ ℤ} of elements of K. Addition and scalar multiplication are defined entrywise.

          Note: This is NOT a ring because multiplication is not always well-defined (the convolution sum may be infinite).

          This corresponds to Definition def.fps.laure.double.

          Equations
          Instances For

            The coefficient of x^n in a doubly infinite power series

            Equations
            Instances For
              theorem AlgebraicCombinatorics.DoublyInfinitePowerSeries.ext {K : Type u_1} [Semiring K] {f g : DoublyInfinitePowerSeries K} (h : ∀ (n : ), f.coeff n = g.coeff n) :
              f = g

              Two doubly infinite power series are equal iff all their coefficients are equal

              The element x^n in K[[x^±]], represented as a family

              Equations
              Instances For
                @[simp]

                The zero element of K[[x^±]] has all coefficients zero. This is part of Definition def.fps.laure.double.

                @[simp]

                The single at 0 with coefficient 1 represents 1 (as a constant series).

                @[simp]

                Coefficient of single n at n is 1.

                @[simp]

                Coefficient of single n at m ≠ n is 0.

                @[simp]
                theorem AlgebraicCombinatorics.DoublyInfinitePowerSeries.smul_single {K : Type u_1} [Semiring K] (r : K) (n : ) :
                r single n = fun (m : ) => if m = n then r else 0

                Scalar multiplication of single.

                Any doubly infinite power series f equals (coeff f n) at position n. This is the pointwise characterization of the notation ∑_{n∈ℤ} a_n x^n: at each position m, the coefficient is a_m.

                This formalizes the representation mentioned at the end of Definition def.fps.laure.double: "we will later use the notation ∑{n∈ℤ} a_n x^n for a family (a_n){n∈ℤ}".

                Note: This is a formal identity of families. The "sum" is well-defined because at each coefficient position m, only the term n = m contributes.

                The representation f = ∑{n∈ℤ} (coeff f n) · x^n holds pointwise: at position m, f m = (coeff f m) · 1 + ∑{n≠m} (coeff f n) · 0 = coeff f m.

                A doubly infinite power series is a Laurent series if the sequence of negative coefficients (a_{-1}, a_{-2}, a_{-3}, ...) is essentially finite, i.e., all sufficiently negative indices have zero coefficient.

                This is Definition def.fps.laure.lauser from the textbook: We let K((x)) be the subset of K[[x^±]] consisting of all families (a_i){i∈ℤ} such that the sequence (a{-1}, a_{-2}, a_{-3}, ...) is essentially finite -- i.e., such that all sufficiently low i ∈ ℤ satisfy a_i = 0.

                The elements of K((x)) are called Laurent series in one indeterminate x over K.

                Equations
                Instances For

                  Convert a Mathlib LaurentSeries to a DoublyInfinitePowerSeries

                  Equations
                  Instances For

                    A Mathlib LaurentSeries satisfies our IsLaurentSeries predicate.

                    This shows that Mathlib's definition of LaurentSeries (as HahnSeries ℤ K) matches the textbook Definition def.fps.laure.lauser.

                    For ℤ, a set bounded below is partially well-ordered.

                    This follows from the fact that any sequence in ℤ bounded below has a monotone subsequence (by Ramsey's theorem / infinite pigeonhole).

                    Convert a DoublyInfinitePowerSeries satisfying IsLaurentSeries to a Mathlib LaurentSeries

                    Equations
                    Instances For

                      The round-trip from LaurentSeries to DoublyInfinitePowerSeries and back gives the same series

                      The round-trip from DoublyInfinitePowerSeries to LaurentSeries and back gives the same function

                      Laurent Polynomials #

                      The K-algebra K[x^±] of Laurent polynomials consists of essentially finite families (a_n)_{n ∈ ℤ}. Unlike K[[x^±]], this IS a ring.

                      We use Mathlib's LaurentPolynomial which is defined as AddMonoidAlgebra R ℤ.

                      This corresponds to Definition def.fps.laure.laupol.

                      Theorem thm.fps.laure.laupol-ring #

                      The K-module K[x^±], equipped with the convolution multiplication, is a commutative K-algebra. Its unity is (δ_{i,0})_{i∈ℤ}. The element x (represented as T 1) is invertible in this K-algebra.

                      This is fully formalized below using Mathlib's LaurentPolynomial type.

                      Part 1: K[x^±] is a commutative K-algebra #

                      The Laurent polynomial ring K[x^±] is a commutative semiring (and a commutative ring when K is a ring). It is also a K-algebra.

                      In Mathlib, this is established via AddMonoidAlgebra.instCommSemiring and related instances.

                      Laurent polynomials form a commutative semiring. This is part of Theorem thm.fps.laure.laupol-ring.

                      Equations

                      Laurent polynomials form a K-algebra. This is part of Theorem thm.fps.laure.laupol-ring.

                      Equations

                      Part 2: The unity is (δ_{i,0})_{i∈ℤ} #

                      The multiplicative identity in K[x^±] is the family that is 1 at index 0 and 0 elsewhere. In Mathlib, this is LaurentPolynomial.T 0 = 1.

                      The unity of K[x^±] is T 0 = (δ_{i,0})_{i∈ℤ}. This is part of Theorem thm.fps.laure.laupol-ring.

                      @[simp]

                      The unity of K[x^±] evaluated at index n is 1 if n = 0, else 0. This is the explicit characterization from Theorem thm.fps.laure.laupol-ring.

                      Part 3: The element x is invertible #

                      The element x (represented as T 1 in Mathlib) is a unit in K[x^±], with inverse x⁻¹ = T (-1).

                      The element T 1 (corresponding to x) is invertible in K[T;T⁻¹]. This is part of Theorem thm.fps.laure.laupol-ring.

                      More generally, T n is invertible for any n ∈ ℤ. This generalizes the invertibility statement in Theorem thm.fps.laure.laupol-ring.

                      @[simp]

                      The inverse of T n is T (-n). This is the explicit inverse formula from Theorem thm.fps.laure.laupol-ring.

                      @[simp]

                      The inverse of T n is T (-n) (multiplication in the other order). This is the explicit inverse formula from Theorem thm.fps.laure.laupol-ring.

                      The unit associated to T n, with explicit inverse T (-n).

                      Equations
                      Instances For

                        Representation as sum #

                        Any Laurent polynomial f = (a_i){i ∈ ℤ} satisfies f = ∑{i ∈ support f} a_i T^i.

                        Any Laurent polynomial f = (a_i){i ∈ ℤ} satisfies f = ∑{i ∈ support f} a_i T^i. This is Proposition prop.fps.laure.a=sumaixi.

                        Here we state this for Laurent polynomials, where the sum is finite.

                        Alternative characterizations #

                        The Laurent polynomial ring K[x^±] can equivalently be described as:

                        These are mentioned in the textbook after Theorem thm.fps.laure.laupol-ring.

                        K[x^±] is isomorphic to the group algebra K[ℤ]. This is one of the alternative characterizations mentioned after Theorem thm.fps.laure.laupol-ring.

                        When K is a CommRing, Laurent polynomials form a CommRing. This is part of Theorem thm.fps.laure.laupol-ring.

                        Equations

                        Laurent Series #

                        The K-algebra K((x)) of Laurent series consists of families (a_n)_{n ∈ ℤ} such that a_n = 0 for all sufficiently negative n.

                        We use Mathlib's LaurentSeries which is defined as HahnSeries ℤ R.

                        This corresponds to Definition def.fps.laure.lauser.

                        The ring homomorphism from Laurent polynomials to Laurent series. This embeds K[x^±] into K((x)) by mapping each Laurent polynomial to the corresponding Laurent series with the same coefficients.

                        This is mentioned after Theorem thm.fps.laure.lauser-ring.

                        Equations
                        Instances For

                          The Laurent polynomial to series map sends single n r to single n r.

                          The Laurent polynomial to series map preserves coefficients.

                          The Laurent polynomial to series map is injective.

                          The Laurent polynomial ring K[x^±] can be embedded into the Laurent series ring K((x)). This is mentioned after Theorem thm.fps.laure.lauser-ring.

                          theorem AlgebraicCombinatorics.one_sub_X_pow_isUnit (K : Type u_1) [CommRing K] (i : ) (hi : 0 < i) :

                          For any positive integer i, the power series 1 - x^i is invertible in K[[x]] and hence also in K((x)). This allows the computation in the proof of Theorem thm.fps.laure.balanced-tern-rep-uniq.

                          Module Structure on K[[x^±]] #

                          While K[[x^±]] is not a ring, it has a K[x^±]-module structure. A Laurent polynomial can be multiplied with any doubly infinite power series.

                          This corresponds to the discussion in "A K[x^±]-module structure on K[[x^±]]".

                          The action of a Laurent polynomial on a doubly infinite power series.

                          The product (∑ b_n x^n) · (∑ a_n x^n) = (∑ c_n x^n) where c_n = ∑{i ∈ ℤ} a_i b{n-i}. This sum is finite because the Laurent polynomial has finite support.

                          This makes K[[x^±]] into a K[x^±]-module.

                          Equations
                          Instances For

                            The multiplication (1-x) · (∑_{n ∈ ℤ} x^n) = 0 shows that K[[x^±]] has torsion as a K[x^±]-module. This is the calculation showing why we cannot divide by (1-x) in K[[x^±]].

                            This corresponds to the discussion at the end of the section.

                            k-bounded Balanced Ternary Representations #

                            A balanced ternary representation is k-bounded if all digits beyond position k are zero. This is used in the rigorous proof of Theorem thm.fps.laure.balanced-tern-rep-uniq.

                            A balanced ternary representation is k-bounded if b_{k+1} = b_{k+2} = ... = 0.

                            Equations
                            Instances For
                              theorem AlgebraicCombinatorics.bounded_sum_eq {n : } (r : BalancedTernaryRepresentation n) (k : ) (hk : r.isBounded k) :
                              n = iFinset.range (k + 1), (r.digits i).toInt * 3 ^ i

                              For k-bounded representations, the finsum equals a finite sum over range(k+1).

                              theorem AlgebraicCombinatorics.sum_powers_of_three_eq_zero (k : ) (c : ) (hc : ik, -2 c i c i 2) (hzero : i > k, c i = 0) (hsum : iFinset.range (k + 1), c i * 3 ^ i = 0) (i : ) :
                              c i = 0

                              Key lemma: if sum of c_i * 3^i = 0 where c_i ∈ {-2,...,2}, then all c_i = 0.

                              This is the core uniqueness argument: the difference of two balanced ternary representations has coefficients in {-2,...,2}, and if the sum is 0, all coefficients must be 0.

                              theorem AlgebraicCombinatorics.balancedTernaryRepresentation_bounded_unique (k : ) (n : ) (_hn : |n| iFinset.range (k + 1), 3 ^ i) (r₁ r₂ : BalancedTernaryRepresentation n) (h₁ : r₁.isBounded k) (h₂ : r₂.isBounded k) :
                              r₁.digits = r₂.digits

                              Each integer n with |n| ≤ 3^0 + 3^1 + ... + 3^k has a unique k-bounded balanced ternary representation.

                              This is the key lemma used in the rigorous proof of Theorem thm.fps.laure.balanced-tern-rep-uniq.

                              Field Structure #

                              When K is a field, K((x)) is also a field. This is mentioned at the end of the section.

                              Partial Product Formula #

                              The key computation used to prove Theorem thm.fps.laure.balanced-tern-rep-uniq involves the partial products ∏_{i=0}^{k} (1 + x^{3^i} + x^{-3^i}).

                              The partial product ∏_{i=0}^{k} (1 + T^{3^i} + T^{-3^i}) in the Laurent polynomial ring. This is used in the proof of Theorem thm.fps.laure.balanced-tern-rep-uniq.

                              Equations
                              Instances For

                                The identity 1 + x + x^{-1} = (1 - x^3) / (x(1-x)) as Laurent polynomials. This is used in simplifying the partial products.

                                theorem AlgebraicCombinatorics.geom_sum_three (k : ) :
                                2 * iFinset.range (k + 1), 3 ^ i = 3 ^ (k + 1) - 1

                                The sum 3^0 + 3^1 + ... + 3^k = (3^{k+1} - 1) / 2. This is used in bounding the range of balanced ternary representations.