Documentation

Mathlib.RingTheory.LaurentSeries

Laurent Series #

In this file we define LaurentSeries R, the formal Laurent series over R, here an arbitrary type with a zero. They are denoted R⸨X⸩.

Main Definitions #

Main Results #

About the X-Adic valuation: #

Implementation details #

@[reducible, inline]
abbrev LaurentSeries (R : Type u) [Zero R] :

LaurentSeries R is the type of formal Laurent series with coefficients in R, denoted R⸨X⸩.

It is implemented as a HahnSeries with value group ℤ.

Instances For

    The Hasse derivative of Laurent series, as a linear map.

    Instances For
      @[simp]
      theorem LaurentSeries.hasseDeriv_coeff {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k : ℕ) (f : LaurentSeries V) (n : ℤ) :
      ((hasseDeriv R k) f).coeff n = Ring.choose (n + ↑k) k • f.coeff (n + ↑k)
      @[simp]
      theorem LaurentSeries.hasseDeriv_single_add {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k : ℕ) (n : ℤ) (x : V) :
      (hasseDeriv R k) ((HahnSeries.single (n + ↑k)) x) = (HahnSeries.single n) (Ring.choose (n + ↑k) k • x)
      @[simp]
      theorem LaurentSeries.hasseDeriv_single {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k : ℕ) (n : ℤ) (x : V) :
      theorem LaurentSeries.hasseDeriv_comp_coeff {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k l : ℕ) (f : LaurentSeries V) (n : ℤ) :
      ((hasseDeriv R k) ((hasseDeriv R l) f)).coeff n = ((k + l).choose k • (hasseDeriv R (k + l)) f).coeff n
      @[simp]
      theorem LaurentSeries.hasseDeriv_comp {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k l : ℕ) (f : LaurentSeries V) :
      (hasseDeriv R k) ((hasseDeriv R l) f) = (k + l).choose k • (hasseDeriv R (k + l)) f
      @[simp]
      theorem LaurentSeries.hasseDeriv_map {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] {W : Type u_3} [AddCommGroup W] [Module R W] (g : V →ₗ[R] W) (k : ℕ) (f : LaurentSeries V) :

      The derivative of a Laurent series.

      Instances For
        @[simp]
        theorem LaurentSeries.derivative_apply {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (f : LaurentSeries V) :
        (derivative R) f = (hasseDeriv R 1) f
        theorem LaurentSeries.derivative_map {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] {W : Type u_3} [AddCommGroup W] [Module R W] (g : V →ₗ[R] W) (f : LaurentSeries V) :
        theorem LaurentSeries.derivative_iterate {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k : ℕ) (f : LaurentSeries V) :
        (⇑(derivative R))^[k] f = k.factorial • (hasseDeriv R k) f
        @[simp]
        theorem LaurentSeries.iterate_derivative_map {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] {W : Type u_3} [AddCommGroup W] [Module R W] (g : V →ₗ[R] W) (k : ℕ) (f : LaurentSeries V) :
        @[simp]
        theorem LaurentSeries.derivative_iterate_coeff {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k : ℕ) (f : LaurentSeries V) (n : ℤ) :
        ((⇑(derivative R))^[k] f).coeff n = (descPochhammer ℤ k).smeval (n + ↑k) • f.coeff (n + ↑k)
        @[instance_reducible]
        noncomputable instance LaurentSeries.instCoePowerSeries {R : Type u_1} [Semiring R] :
        noncomputable def LaurentSeries.powerSeriesPart {R : Type u_1} [Semiring R] (x : LaurentSeries R) :

        This is a power series that can be multiplied by an integer power of X to give our Laurent series. If the Laurent series is nonzero, powerSeriesPart has a nonzero constant term.

        Instances For
          @[instance_reducible]

          The localization map from power series to Laurent series.

          theorem PowerSeries.coeff_coe {R : Type u_1} [Semiring R] (f : PowerSeries R) (i : ℤ) :
          @[simp]
          theorem PowerSeries.coe_smul {R : Type u_1} [Semiring R] {S : Type u_3} [Semiring S] [Module R S] (r : R) (x : PowerSeries S) :
          @[instance_reducible]
          noncomputable instance RatFunc.coeToLaurentSeries {F : Type u} [Field F] :
          @[simp]

          The prime ideal (X) of K⟦X⟧, when K is a field, as a term of the HeightOneSpectrum.

          Instances For
            @[simp]

            The integral valuation of the power series X : K⟦X⟧ equals (ofAdd -1) : ℤᵐ⁰.

            @[reducible, inline]

            polynomialValuationX is an abbreviation for the X-adic valuation given by (Polynomial.idealX K).valuation K⟮X⟯.

            Instances For
              @[instance_reducible]
              noncomputable instance LaurentSeries.valued (K : Type u_2) [Field K] :

              The coefficients of a power series vanish in degree strictly less than its valuation.

              The valuation of a power series is the order of the first non-zero coefficient.

              theorem LaurentSeries.coeff_zero_of_lt_valuation (K : Type u_2) [Field K] {n D : ℤ} {f : LaurentSeries K} (H : Valued.v f ≤ WithZero.exp (-D)) :
              n < D → f.coeff n = 0

              The coefficients of a Laurent series vanish in degree strictly less than its valuation.

              theorem LaurentSeries.valuation_le_iff_coeff_lt_eq_zero (K : Type u_2) [Field K] {D : ℤ} {f : LaurentSeries K} :
              Valued.v f ≤ WithZero.exp (-D) ↔ ∀ n < D, f.coeff n = 0

              The valuation of a Laurent series is the order of the first non-zero coefficient.

              theorem LaurentSeries.eq_coeff_of_valuation_sub_lt (K : Type u_2) [Field K] {d n : ℤ} {f g : LaurentSeries K} (H : Valued.v (g - f) ≤ WithZero.exp (-d)) :
              n < d → g.coeff n = f.coeff n

              Two Laurent series whose difference has small valuation have the same coefficients for small enough indices.

              Every Laurent series of valuation less than (1 : ℤᵐ⁰) comes from a power series.

              theorem LaurentSeries.uniformContinuous_coeff {K : Type u_2} [Field K] {uK : UniformSpace K} (d : ℤ) :

              Sending a Laurent series to its d-th coefficient is uniformly continuous (independently of the uniformity with which K is endowed).

              noncomputable def LaurentSeries.Cauchy.coeff {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) :
              ℤ → K

              Since extracting coefficients is uniformly continuous, every Cauchy filter in K⸨X⸩ gives rise to a Cauchy filter in K for every d : ℤ, and such Cauchy filter in K converges to a principal filter

              Instances For
                theorem LaurentSeries.Cauchy.coeff_tendsto {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) (D : ℤ) :
                Filter.Tendsto (fun (f : LaurentSeries K) => f.coeff D) ℱ (Filter.principal {coeff hℱ D})
                theorem LaurentSeries.Cauchy.exists_lb_eventual_support {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) :
                ∃ (N : ℤ), ∀ᶠ (f : LaurentSeries K) in ℱ, ∀ n < N, f.coeff n = 0
                theorem LaurentSeries.Cauchy.exists_lb_support {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) :
                ∃ (N : ℤ), ∀ n < N, coeff hℱ n = 0

                The support of Cauchy.coeff has a lower bound.

                The support of Cauchy.coeff is bounded below

                noncomputable def LaurentSeries.Cauchy.limit {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) :

                To any Cauchy filter ℱ of K⸨X⸩, we can attach a laurent series that is the limit of the filter. Its d-th coefficient is defined as the limit of Cauchy.coeff hℱ d, which is again Cauchy but valued in the discrete space K. That sufficiently negative coefficients vanish follows from Cauchy.coeff_support_bddBelow

                Instances For
                  theorem LaurentSeries.Cauchy.exists_lb_coeff_ne {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) :
                  ∃ (N : ℤ), ∀ᶠ (f : LaurentSeries K) in ℱ, ∀ d < N, coeff hℱ d = f.coeff d

                  The following lemma shows that for every d smaller than the minimum between the integers produced in Cauchy.exists_lb_eventual_support and Cauchy.exists_lb_support, for almost all series in ℱ the dth coefficient coincides with the dth coefficient of Cauchy.coeff hℱ.

                  theorem LaurentSeries.Cauchy.coeff_eventually_equal {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) {D : ℤ} :
                  ∀ᶠ (f : LaurentSeries K) in ℱ, ∀ d < D, coeff hℱ d = f.coeff d

                  Given a Cauchy filter ℱ in the Laurent Series and a bound D, for almost all series in the filter the coefficients below D coincide with Cauchy.coeff hℱ.

                  theorem LaurentSeries.Cauchy.eventually_mem_nhds {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ℱ) {U : Set (LaurentSeries K)} (hU : U ∈ nhds (limit hℱ)) :
                  ∀ᶠ (f : LaurentSeries K) in ℱ, f ∈ U

                  The main result showing that the Cauchy filter tends to the Cauchy.limit

                  Laurent Series with coefficients in a field are complete w.r.t. the X-adic valuation

                  theorem LaurentSeries.exists_ratFunc_val_lt {K : Type u_2} [Field K] (f : LaurentSeries K) (γ : (WithZero (Multiplicative ℤ))ˣ) :
                  ∃ (Q : RatFunc K), Valued.v (f - (algebraMap (RatFunc K) (LaurentSeries K)) Q) < ↑γ

                  For every Laurent series f and every γ : ℤᵐ⁰ one can find a rational function Q such that the X-adic valuation v satisfies v (f - Q) < γ.

                  @[reducible, inline]
                  abbrev LaurentSeries.RatFuncAdicCompl (K : Type u_2) [Field K] :
                  Type u_2

                  An abbreviation for the X-adic completion of K⟮X⟯

                  Instances For
                    @[reducible, inline]

                    The X-adic completion as an abstract completion of K⟮X⟯

                    Instances For

                      Having established that the K⸨X⸩ is complete and contains K⟮X⟯ as a dense subspace, it gives rise to an abstract completion of K⟮X⟯.

                      Instances For
                        @[reducible, inline]

                        Reinterpret the extension of coe : WithVal ((idealX K).valuation _) → K⸨X⸩ as a ring homomorphism

                        Instances For

                          The two instances below make comparePkg and comparePkg_eq_extension slightly faster.

                          @[instance_reducible]
                          @[instance_reducible]
                          noncomputable instance LaurentSeries.instUniformSpace (K : Type u_2) [Field K] :
                          @[reducible, inline]

                          The uniform space isomorphism between two abstract completions of ratfunc K

                          Instances For
                            @[reducible, inline]

                            The ring equivalence between RatFuncAdicCompl K and K⸨X⸩.

                            Instances For
                              @[reducible, inline]

                              The uniform space equivalence between two abstract completions of ratfunc K as a ring equivalence: it goes from K⸨X⸩ to RatFuncAdicCompl K

                              Instances For
                                @[instance_reducible]

                                The algebra equivalence between K⸨X⸩ and the X-adic completion of RatFunc X

                                Instances For

                                  The extension of the X-adic valuation from K⟮X⟯ up to its abstract completion coincides, modulo the isomorphism with K⸨X⸩, with the X-adic valuation on K⸨X⸩.

                                  @[reducible, inline]
                                  noncomputable abbrev LaurentSeries.powerSeries_as_subring (K : Type u_2) [Field K] :

                                  In order to compare K⟦X⟧ with the valuation subring in the X-adic completion of K⟮X⟯ we consider its alias as a subring of K⸨X⸩.

                                  Instances For
                                    @[reducible, inline]

                                    The ring K⟦X⟧ is isomorphic to the subring powerSeries_as_subring K

                                    Instances For

                                      Through the isomorphism LaurentSeriesRingEquiv, power series land in the unit ball inside the completion of K⟮X⟯.

                                      Conversely, all elements in the unit ball inside the completion of K⟮X⟯ come from a power series through the isomorphism LaurentSeriesRingEquiv.

                                      @[reducible, inline]

                                      The ring isomorphism between K⟦X⟧ and the unit ball inside the X-adic completion of K⟮X⟯.

                                      Instances For

                                        The algebra isomorphism between K⟦X⟧ and the unit ball inside the X-adic completion of K⟮X⟯.

                                        Instances For