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 #

To Do #

@[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 .

Equations
Instances For

    R⸨X⸩ is notation for LaurentSeries R,

    Equations
    Instances For

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

      Equations
      • One or more equations did not get rendered due to their size.
      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 : ) :
        ((LaurentSeries.hasseDeriv R k) f).coeff n = Ring.choose (n + k) k f.coeff (n + k)
        @[simp]
        theorem LaurentSeries.hasseDeriv_zero {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] :
        LaurentSeries.hasseDeriv R 0 = LinearMap.id
        theorem LaurentSeries.hasseDeriv_single_add {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (k : ) (n : ) (x : V) :
        @[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 : ) :
        ((LaurentSeries.hasseDeriv R k) ((LaurentSeries.hasseDeriv R l) f)).coeff n = ((k + l).choose k (LaurentSeries.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) :

        The derivative of a Laurent series.

        Equations
        Instances For
          theorem LaurentSeries.derivative_iterate {R : Type u_1} [Semiring R] {V : Type u_2} [AddCommGroup V] [Module R V] (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 : ) :
          ((⇑(LaurentSeries.derivative R))^[k] f).coeff n = (descPochhammer k).smeval (n + k) f.coeff (n + k)
          Equations
          @[simp]
          theorem LaurentSeries.coeff_coe_powerSeries {R : Type u_1} [Semiring R] (x : PowerSeries R) (n : ) :
          ((HahnSeries.ofPowerSeries R) x).coeff n = (PowerSeries.coeff R n) x

          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.

          Equations
          Instances For
            @[simp]
            theorem LaurentSeries.powerSeriesPart_coeff {R : Type u_1} [Semiring R] (x : LaurentSeries R) (n : ) :
            (PowerSeries.coeff R n) x.powerSeriesPart = x.coeff (HahnSeries.order x + n)
            @[simp]
            theorem LaurentSeries.powerSeriesPart_eq_zero {R : Type u_1} [Semiring R] (x : LaurentSeries R) :
            x.powerSeriesPart = 0 x = 0
            theorem LaurentSeries.X_order_mul_powerSeriesPart {R : Type u_1} [Semiring R] {n : } {f : LaurentSeries R} (hn : n = HahnSeries.order f) :
            (HahnSeries.ofPowerSeries R) (PowerSeries.X ^ n * f.powerSeriesPart) = f
            Equations

            The localization map from power series to Laurent series.

            Equations
            • =
            theorem PowerSeries.coeff_coe {R : Type u_1} [Semiring R] (f : PowerSeries R) (i : ) :
            ((HahnSeries.ofPowerSeries R) f).coeff i = if i < 0 then 0 else (PowerSeries.coeff R i.natAbs) f
            theorem PowerSeries.coe_C {R : Type u_1} [Semiring R] (r : R) :
            (HahnSeries.ofPowerSeries R) ((PowerSeries.C R) r) = HahnSeries.C r
            @[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) :

            The coercion RatFunc F → F⸨X⸩ as bundled alg hom.

            Equations
            Instances For

              The coercion RatFunc F → F⸨X⸩ as a function.

              This is the implementation of coeToLaurentSeries.

              Equations
              Instances For
                Equations
                • RatFunc.coeToLaurentSeries = { coe := RatFunc.coeToLaurentSeries_fun }
                theorem RatFunc.coe_def {F : Type u} [Field F] (f : RatFunc F) :
                f = (RatFunc.coeAlgHom F) f
                theorem RatFunc.coe_num_denom {F : Type u} [Field F] (f : RatFunc F) :
                f = (HahnSeries.ofPowerSeries F) f.num / (HahnSeries.ofPowerSeries F) f.denom
                theorem RatFunc.coe_injective {F : Type u} [Field F] :
                Function.Injective RatFunc.coeToLaurentSeries_fun
                @[simp]
                theorem RatFunc.coe_apply {F : Type u} [Field F] (f : RatFunc F) :
                (RatFunc.coeAlgHom F) f = f
                theorem RatFunc.coe_coe {F : Type u} [Field F] (P : Polynomial F) :
                (HahnSeries.ofPowerSeries F) P = P
                @[simp]
                theorem RatFunc.coe_zero {F : Type u} [Field F] :
                0 = 0
                theorem RatFunc.coe_ne_zero {F : Type u} [Field F] {f : Polynomial F} (hf : f 0) :
                f 0
                @[simp]
                theorem RatFunc.coe_one {F : Type u} [Field F] :
                1 = 1
                @[simp]
                theorem RatFunc.coe_add {F : Type u} [Field F] (f g : RatFunc F) :
                (f + g) = f + g
                @[simp]
                theorem RatFunc.coe_sub {F : Type u} [Field F] (f g : RatFunc F) :
                (f - g) = f - g
                @[simp]
                theorem RatFunc.coe_neg {F : Type u} [Field F] (f : RatFunc F) :
                (-f) = -f
                @[simp]
                theorem RatFunc.coe_mul {F : Type u} [Field F] (f g : RatFunc F) :
                (f * g) = f * g
                @[simp]
                theorem RatFunc.coe_pow {F : Type u} [Field F] (f : RatFunc F) (n : ) :
                (f ^ n) = f ^ n
                @[simp]
                theorem RatFunc.coe_div {F : Type u} [Field F] (f g : RatFunc F) :
                (f / g) = f / g
                @[simp]
                theorem RatFunc.coe_C {F : Type u} [Field F] (r : F) :
                (RatFunc.C r) = HahnSeries.C r
                @[simp]
                theorem RatFunc.coe_smul {F : Type u} [Field F] (f : RatFunc F) (r : F) :
                (r f) = r f
                @[simp]
                theorem RatFunc.coe_X {F : Type u} [Field F] :
                RatFunc.X = (HahnSeries.single 1) 1
                theorem RatFunc.single_one_eq_pow {R : Type u_2} [Ring R] (n : ) :
                theorem RatFunc.single_inv {F : Type u} [Field F] (d : ) {α : F} (hα : α 0) :
                Equations

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

                Equations
                Instances For
                  theorem PowerSeries.intValuation_eq_of_coe {K : Type u_2} [Field K] (P : Polynomial K) :
                  (Polynomial.idealX K).intValuation P = (PowerSeries.idealX K).intValuation P
                  @[simp]
                  theorem PowerSeries.intValuation_X {K : Type u_2} [Field K] :
                  (PowerSeries.idealX K).intValuationDef PowerSeries.X = (Multiplicative.ofAdd (-1))

                  The integral valuation of the power series X : K⟦X⟧ equals (ofAdd -1) : ℤₘ₀

                  theorem RatFunc.valuation_eq_LaurentSeries_valuation (K : Type u_2) [Field K] (P : RatFunc K) :
                  (Polynomial.idealX K).valuation P = (PowerSeries.idealX K).valuation P
                  theorem LaurentSeries.valuation_X_pow (K : Type u_2) [Field K] (s : ) :
                  Valued.v ((HahnSeries.ofPowerSeries K) PowerSeries.X ^ s) = (Multiplicative.ofAdd (-s))
                  theorem LaurentSeries.valuation_single_zpow (K : Type u_2) [Field K] (s : ) :
                  Valued.v ((HahnSeries.single s) 1) = (Multiplicative.ofAdd (-s))
                  theorem LaurentSeries.coeff_zero_of_lt_intValuation (K : Type u_2) [Field K] {n d : } {f : PowerSeries K} (H : Valued.v ((HahnSeries.ofPowerSeries K) f) (Multiplicative.ofAdd (-d))) :
                  n < d(PowerSeries.coeff K n) f = 0
                  theorem LaurentSeries.intValuation_le_iff_coeff_lt_eq_zero (K : Type u_2) [Field K] {d : } (f : PowerSeries K) :
                  Valued.v ((HahnSeries.ofPowerSeries K) f) (Multiplicative.ofAdd (-d)) n < d, (PowerSeries.coeff K n) f = 0
                  theorem LaurentSeries.coeff_zero_of_lt_valuation (K : Type u_2) [Field K] {n D : } {f : LaurentSeries K} (H : Valued.v f (Multiplicative.ofAdd (-D))) :
                  n < Df.coeff n = 0
                  theorem LaurentSeries.valuation_le_iff_coeff_lt_eq_zero (K : Type u_2) [Field K] {D : } {f : LaurentSeries K} :
                  Valued.v f (Multiplicative.ofAdd (-D)) n < D, f.coeff n = 0
                  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) (Multiplicative.ofAdd (-d))) :
                  n < dg.coeff n = f.coeff n
                  theorem LaurentSeries.val_le_one_iff_eq_coe (K : Type u_2) [Field K] (f : LaurentSeries K) :
                  Valued.v f 1 ∃ (F : PowerSeries K), (HahnSeries.ofPowerSeries K) F = f
                  theorem LaurentSeries.uniformContinuous_coeff {K : Type u_2} [Field K] {uK : UniformSpace K} (d : ) :
                  UniformContinuous fun (f : LaurentSeries K) => f.coeff d
                  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

                  Equations
                  Instances For
                    theorem LaurentSeries.Cauchy.coeff_tendsto {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ) (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, LaurentSeries.Cauchy.coeff hℱ n = 0
                    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

                    Equations
                    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, LaurentSeries.Cauchy.coeff hℱ d = f.coeff d
                      theorem LaurentSeries.Cauchy.coeff_eventually_equal {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ) {D : } :
                      ∀ᶠ (f : LaurentSeries K) in , d < D, LaurentSeries.Cauchy.coeff hℱ d = f.coeff d
                      theorem LaurentSeries.Cauchy.eventually_mem_nhds {K : Type u_2} [Field K] {ℱ : Filter (LaurentSeries K)} (hℱ : Cauchy ) {U : Set (LaurentSeries K)} (hU : U nhds (LaurentSeries.Cauchy.limit hℱ)) :
                      ∀ᶠ (f : LaurentSeries K) in , f U
                      theorem LaurentSeries.exists_Polynomial_intValuation_lt {K : Type u_2} [Field K] (F : PowerSeries K) (η : (WithZero (Multiplicative ))ˣ) :
                      ∃ (P : Polynomial K), (PowerSeries.idealX K).intValuation (F - P) < η
                      theorem LaurentSeries.exists_ratFunc_val_lt {K : Type u_2} [Field K] (f : LaurentSeries K) (γ : (WithZero (Multiplicative ))ˣ) :
                      ∃ (Q : RatFunc K), Valued.v (f - Q) < γ

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

                      theorem LaurentSeries.coe_range_dense {K : Type u_2} [Field K] :
                      DenseRange RatFunc.coeToLaurentSeries_fun
                      theorem LaurentSeries.inducing_coe {K : Type u_2} [Field K] :
                      IsUniformInducing RatFunc.coeToLaurentSeries_fun
                      theorem LaurentSeries.continuous_coe {K : Type u_2} [Field K] :
                      Continuous RatFunc.coeToLaurentSeries_fun
                      @[reducible, inline]

                      The X-adic completion as an abstract completion of RatFunc K

                      Equations
                      • LaurentSeries.ratfuncAdicComplPkg = UniformSpace.Completion.cPkg
                      Instances For

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

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          @[simp]
                          @[reducible, inline]

                          Reintrerpret the extension of coe : RatFunc K → K⸨X⸩ as ring homomorphism

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

                            An abbreviation for the X-adic completion of RatFunc K

                            Equations
                            Instances For
                              @[reducible, inline]

                              The uniform space isomorphism between two abstract completions of ratfunc K

                              Equations
                              Instances For
                                @[reducible, inline]

                                The uniform space equivalence between two abstract completions of ratfunc K as a ring equivalence: this will be the inverse of the fundamental one.

                                Equations
                                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

                                  Equations
                                  Instances For
                                    theorem LaurentSeries.valuation_LaurentSeries_equal_extension (K : Type u_2) [Field K] :
                                    .extend Valued.v = Valued.v
                                    theorem LaurentSeries.valuation_compare (K : Type u_2) [Field K] (f : LaurentSeries K) :
                                    Valued.v ((LaurentSeries.LaurentSeriesPkg K).compare LaurentSeries.ratfuncAdicComplPkg f) = Valued.v f
                                    @[reducible, inline]

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

                                    Equations
                                    Instances For
                                      @[reducible, inline]

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

                                      Equations
                                      Instances For
                                        @[reducible, inline]

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

                                        Equations
                                        Instances For