Documentation

TauCeti.RingTheory.LaurentSeries.Ramified

Ramified levels of Laurent series #

For a positive integer n, the Laurent series ring R⸨X⸩ in a variable u embeds into the Hahn series HahnSeries ℚ R with rational exponents by u ↦ t ^ (1 / n): the coefficient of u ^ k becomes the coefficient of t ^ (k / n). Its image, the level-n copy of R⸨X⸩, consists of the Hahn series all of whose exponents have denominator dividing n. For n ∣ m the levels are related by the substitution u_n ↦ u_m ^ (m / n), which is the exponent expansion X ↦ X ^ d of Laurent series. Over a field, the Puiseux series field is the union of these levels.

Both maps are HahnSeries.embDomain along an additive order embedding of exponent groups, k ↦ k / n from ℤ to ℚ and k ↦ d * k from ℤ to ℤ. They are algebra homomorphisms for the default R-algebra structures on R⸨X⸩ and HahnSeries ℚ R, those inherited from R⟦X⟧ through HahnSeries.powerSeriesAlgebra. Mathlib's HahnSeries.embDomainAlgHom is stated for the coefficientwise structure HahnSeries.instAlgebra instead, which is propositionally but not definitionally equal to it, so the algebra maps here are assembled from the ring-level embDomain lemmas.

Main definitions #

Main results #

The signature LaurentSeries.expand (d : ℕ+) follows the one proposed for Mathlib in mathlib4 PR #42313.

Expansion X ↦ X ^ d #

noncomputable def LaurentSeries.expand (R : Type u_1) [CommSemiring R] (d : ℕ+) :

The substitution X ↦ X ^ d in Laurent series, sending the coefficient of X ^ k to the coefficient of X ^ (d * k).

Instances For
    @[simp]
    theorem LaurentSeries.coeff_expand_mul {R : Type u_1} [CommSemiring R] (d : ℕ+) (f : LaurentSeries R) (k : ℤ) :
    ((expand R d) f).coeff (↑↑d * k) = f.coeff k

    The coefficient of X ^ (d * k) in expand R d f is the coefficient of X ^ k in f.

    theorem LaurentSeries.coeff_expand_of_not_dvd {R : Type u_1} [CommSemiring R] (d : ℕ+) (f : LaurentSeries R) {k : ℤ} (hk : ¬↑↑d ∣ k) :
    ((expand R d) f).coeff k = 0

    The coefficients of expand R d f at exponents not divisible by d vanish.

    theorem LaurentSeries.coeff_expand_of_lt_mul_order {R : Type u_1} [CommSemiring R] (d : ℕ+) {f : LaurentSeries R} {k : ℤ} (hk : k < ↑↑d * HahnSeries.order f) :
    ((expand R d) f).coeff k = 0

    The coefficients of expand R d f below d times the order of f vanish.

    @[simp]
    theorem LaurentSeries.expand_single {R : Type u_1} [CommSemiring R] (d : ℕ+) (k : ℤ) (r : R) :
    (expand R d) ((HahnSeries.single k) r) = (HahnSeries.single (↑↑d * k)) r

    Expansion sends the monomial r X ^ k to r X ^ (d * k).

    theorem LaurentSeries.support_expand {R : Type u_1} [CommSemiring R] (d : ℕ+) (f : LaurentSeries R) :
    HahnSeries.support ((expand R d) f) = (fun (k : ℤ) => ↑↑d * k) '' HahnSeries.support f

    The support of expand R d f is the support of f multiplied by d.

    @[simp]

    Expansion multiplies the order by d.

    Expansion is injective.

    @[simp]
    theorem LaurentSeries.order_expand {R : Type u_1} [CommSemiring R] (d : ℕ+) (f : LaurentSeries R) :

    Expansion multiplies the order by d; the zero series has order zero on both sides.

    @[simp]

    Expansion preserves the leading coefficient.

    theorem LaurentSeries.mem_range_expand_iff {R : Type u_1} [CommSemiring R] (d : ℕ+) {f : LaurentSeries R} :
    f ∈ (expand R d).range ↔ ∀ k ∈ HahnSeries.support f, ↑↑d ∣ k

    A Laurent series is in the image of X ↦ X ^ d exactly when all its exponents are divisible by d.

    @[simp]

    Expansion by 1 is the identity.

    theorem LaurentSeries.expand_expand {R : Type u_1} [CommSemiring R] (d e : ℕ+) (f : LaurentSeries R) :
    (expand R d) ((expand R e) f) = (expand R (d * e)) f

    Expanding by e and then by d is expanding by d * e.

    On power series, expansion of Laurent series is Mathlib's PowerSeries.expand.

    @[simp]
    theorem LaurentSeries.valuation_expand {K : Type u_2} [Field K] (d : ℕ+) (f : LaurentSeries K) :
    Valued.v ((expand K d) f) = Valued.v f ^ ↑d

    Expansion X ↦ X ^ d raises the X-adic valuation of a Laurent series to the d-th power: it multiplies the order by d.

    theorem FiniteField.LaurentSeries.expand_card {K : Type u_2} [Field K] [Fintype K] (d : ℕ+) (hd : ↑d = Fintype.card K) (f : LaurentSeries K) :

    Over a finite field with q elements, the expansion X ↦ X ^ q of a Laurent series is its q-th power. The modulus is given as a positive natural number d with d = q.

    Contraction by exponent congruence classes #

    noncomputable def LaurentSeries.contract {S : Type u_2} [Zero S] (d : ℕ+) (f : LaurentSeries S) (r : Fin ↑d) :

    The r-th exponent-congruence component of a Laurent series. Its coefficient at k is the coefficient of the original series at d * k + r.

    Instances For
      @[simp]
      theorem LaurentSeries.coeff_contract {S : Type u_2} [Zero S] (d : ℕ+) (f : LaurentSeries S) (r : Fin ↑d) (k : ℤ) :
      (contract d f r).coeff k = f.coeff (↑↑d * k + ↑↑r)

      The coefficient formula for an exponent-congruence component.

      theorem LaurentSeries.continuous_contract {K : Type u_2} [Field K] (d : ℕ+) (r : Fin ↑d) :
      Continuous fun (f : LaurentSeries K) => contract d f r

      Extracting an exponent-congruence component is continuous for the valuation topology.

      @[simp]
      theorem LaurentSeries.contract_add {S : Type u_2} [AddMonoid S] (d : ℕ+) (f g : LaurentSeries S) (r : Fin ↑d) :
      contract d (f + g) r = contract d f r + contract d g r

      Contraction is additive.

      @[simp]
      theorem LaurentSeries.contract_zero {S : Type u_2} [Zero S] (d : ℕ+) (r : Fin ↑d) :
      contract d 0 r = 0

      Every congruence component of the zero series is zero.

      @[simp]
      theorem LaurentSeries.contract_smul {M : Type u_2} {S : Type u_3} [Zero S] [SMulZeroClass M S] (d : ℕ+) (c : M) (f : LaurentSeries S) (r : Fin ↑d) :
      contract d (c • f) r = c • contract d f r

      Contraction commutes with scalar multiplication.

      @[simp]
      theorem LaurentSeries.contract_sum {ι : Type u_2} {S : Type u_3} [AddCommMonoid S] (d : ℕ+) (s : Finset ι) (f : ι → LaurentSeries S) (r : Fin ↑d) :
      contract d (∑ i ∈ s, f i) r = ∑ i ∈ s, contract d (f i) r

      Contraction commutes with finite sums.

      @[simp]
      theorem LaurentSeries.contract_single {S : Type u_2} [Zero S] (d : ℕ+) (m : ℤ) (a : S) (r : Fin ↑d) :
      contract d ((HahnSeries.single m) a) r = if ↑↑d ∣ m - ↑↑r then (HahnSeries.single ((m - ↑↑r) / ↑↑d)) a else 0

      The congruence components of a monomial: X ^ m contributes to component r exactly when m ≡ r modulo d, and then as the monomial of exponent (m - r) / d.

      @[simp]
      theorem LaurentSeries.contract_one {S : Type u_2} [Zero S] [One S] (d : ℕ+) (r : Fin ↑d) :
      contract d 1 r = if r = 0 then 1 else 0

      The congruence components of 1 vanish except at residue zero.

      theorem LaurentSeries.coeff_sum_single_mul_expand {A : Type u_2} [CommSemiring A] (d : ℕ+) (g : Fin ↑d → LaurentSeries A) (r : Fin ↑d) (k : ℤ) :
      (∑ s : Fin ↑d, (HahnSeries.single ↑↑s) 1 * (expand A d) (g s)).coeff (↑↑d * k + ↑↑r) = (g r).coeff k

      At exponent d * k + r, a sum of expanded congruence components recovers coefficient k of component r.

      theorem LaurentSeries.sum_single_mul_expand_contract {A : Type u_2} [CommSemiring A] (d : ℕ+) (f : LaurentSeries A) :
      ∑ r : Fin ↑d, (HahnSeries.single ↑↑r) 1 * (expand A d) (contract d f r) = f

      A Laurent series is the sum of its expanded exponent-congruence components.

      theorem LaurentSeries.contract_eq_of_sum_eq {A : Type u_2} [CommSemiring A] (d : ℕ+) (g : Fin ↑d → LaurentSeries A) (f : LaurentSeries A) (h : ∑ r : Fin ↑d, (HahnSeries.single ↑↑r) 1 * (expand A d) (g r) = f) (r : Fin ↑d) :
      contract d f r = g r

      The components in an expansion by exponent congruence classes are unique.

      @[simp]
      theorem LaurentSeries.contract_expand_mul {A : Type u_2} [CommSemiring A] (d : ℕ+) (g h : LaurentSeries A) (r : Fin ↑d) :
      contract d ((expand A d) g * h) r = g * contract d h r

      Multiplication by an expanded series passes through the exponent-congruence components.

      @[simp]
      theorem LaurentSeries.contract_expand {A : Type u_2} [CommSemiring A] (d : ℕ+) (g : LaurentSeries A) (r : Fin ↑d) :
      contract d ((expand A d) g) r = if r = 0 then g else 0

      The congruence components of an expanded series: expand A d g lies in the residue-zero component, where it contracts back to g.

      @[simp]
      theorem LaurentSeries.contract_single_mul_self {A : Type u_2} [Semiring A] (d : ℕ+) (f : LaurentSeries A) (r : Fin ↑d) :
      contract d ((HahnSeries.single ↑↑r) 1 * f) r = contract d f 0

      Multiplication by X ^ r, for r < d, moves the residue-zero component to component r.

      Ramified levels in rational exponents #

      The level-n embedding of Laurent series into Hahn series with rational exponents, substituting X ↦ t ^ (1 / n): the coefficient of X ^ k becomes the coefficient of t ^ (k / n).

      Instances For
        @[simp]
        theorem LaurentSeries.coeff_ramifiedEmbedding_intCast_div {R : Type u_1} [CommSemiring R] (n : ℕ+) (f : LaurentSeries R) (k : ℤ) :
        ((ramifiedEmbedding R n) f).coeff (↑k / ↑↑n) = f.coeff k

        The coefficient of t ^ (k / n) in the level-n image of f is the coefficient of X ^ k in f.

        theorem LaurentSeries.coeff_ramifiedEmbedding_of_not_den_dvd {R : Type u_1} [CommSemiring R] (n : ℕ+) (f : LaurentSeries R) {q : ℚ} (hq : ¬q.den ∣ ↑n) :
        ((ramifiedEmbedding R n) f).coeff q = 0

        The coefficients of the level-n image of f vanish at exponents whose denominator does not divide n.

        @[simp]
        theorem LaurentSeries.ramifiedEmbedding_single {R : Type u_1} [CommSemiring R] (n : ℕ+) (k : ℤ) (r : R) :
        (ramifiedEmbedding R n) ((HahnSeries.single k) r) = (HahnSeries.single (↑k / ↑↑n)) r

        The level-n embedding sends the monomial r X ^ k to r t ^ (k / n).

        theorem LaurentSeries.support_ramifiedEmbedding {R : Type u_1} [CommSemiring R] (n : ℕ+) (f : LaurentSeries R) :
        ((ramifiedEmbedding R n) f).support = (fun (k : ℤ) => ↑k / ↑↑n) '' HahnSeries.support f

        The support of the level-n image of f is the support of f divided by n.

        @[simp]
        theorem LaurentSeries.orderTop_ramifiedEmbedding {R : Type u_1} [CommSemiring R] (n : ℕ+) (f : LaurentSeries R) :
        ((ramifiedEmbedding R n) f).orderTop = WithTop.map (fun (k : ℤ) => ↑k / ↑↑n) (HahnSeries.orderTop f)

        The order of the level-n image of f is the order of f divided by n.

        The level-n embedding is injective.

        @[simp]

        The order of the level-n image of f is the order of f divided by n.

        The level-n image consists of the Hahn series all of whose exponents have denominator dividing n.

        @[simp]
        theorem LaurentSeries.ramifiedEmbedding_expand {R : Type u_1} [CommSemiring R] (n d : ℕ+) (f : LaurentSeries R) :
        (ramifiedEmbedding R (n * d)) ((expand R d) f) = (ramifiedEmbedding R n) f

        The transition map X ↦ X ^ d from level n to level n * d commutes with the embeddings into rational exponents.

        For n ∣ m, level n is contained in level m.

        Over a nontrivial ring, level n is contained in level m exactly when n ∣ m.

        The intersection of levels n and m is level gcd n m.