Diagonal Laurent-coefficient Hahn series
DefinitionDiagonal Laurent-coefficient Hahn series#✓fully proved
The Hahn series with coefficient c y at inner exponent d - y and outer exponent y
for every y ≥ j₀.
noncomputable def diagonalLaurentSeries {R : Type*} [CommSemiring R]
(d : ℤ) (c : ℤ → R) (j₀ : ℤ) : HahnSeries ℤ (LaurentPolynomial R) :=
ofSuppBddBelow
(fun j => if j₀ ≤ j then AddMonoidAlgebra.single (d - j) (c j) else 0)
⟨j₀, fun j hj => by
by_contra h
simp [h] at hj⟩
TheoremOuter coefficient of a diagonal Laurent series#✓fully proved
The outer coefficient of a diagonal Laurent series.
@[simp] theorem coeff_diagonalLaurentSeries {R : Type*} [CommSemiring R]
(d : ℤ) (c : ℤ → R) (j₀ y : ℤ) :
(diagonalLaurentSeries d c j₀).coeff y =
if j₀ ≤ y then AddMonoidAlgebra.single (d - y) (c y) else 0
noncomputable def diagonalLaurentSeries {R : Type*} [CommSemiring R]
(d : ℤ) (c : ℤ → R) (j₀ : ℤ) : HahnSeries ℤ (LaurentPolynomial R) :=
ofSuppBddBelow
(fun j => if j₀ ≤ j then AddMonoidAlgebra.single (d - j) (c j) else 0)
⟨j₀, fun j hj => by
by_contra h
simp [h] at hj⟩
MathlibExt/RingTheory/HahnSeries/DiagonalLaurent.lean:39
Uses 1 · Used by 1
TheoremDouble coefficients of a diagonal Laurent series#✓fully proved
Both coefficients of a diagonal Laurent series, exposing its cutoff and diagonal equation.
theorem coeff_coeff_diagonalLaurentSeries {R : Type*} [CommSemiring R]
(d : ℤ) (c : ℤ → R) (j₀ x y : ℤ) :
((diagonalLaurentSeries d c j₀).coeff y).coeff x =
if j₀ ≤ y ∧ x + y = d then c y else 0
noncomputable def diagonalLaurentSeries {R : Type*} [CommSemiring R]
(d : ℤ) (c : ℤ → R) (j₀ : ℤ) : HahnSeries ℤ (LaurentPolynomial R) :=
ofSuppBddBelow
(fun j => if j₀ ≤ j then AddMonoidAlgebra.single (d - j) (c j) else 0)
⟨j₀, fun j hj => by
by_contra h
simp [h] at hj⟩
MathlibExt/RingTheory/HahnSeries/DiagonalLaurent.lean:39
Uses 2 · Used by 2
TheoremMultiplying by the variable difference on diagonal coefficients#✓fully proved
Multiplication by the difference of the two variables takes a difference of adjacent diagonal coefficients.
theorem coeff_coeff_variableDifference_mul {R : Type*} [CommRing R]
(f : HahnSeries ℤ (LaurentPolynomial R)) (x y : ℤ) :
(((single 0 (T 1) - single 1 1) * f).coeff y).coeff x =
(f.coeff y).coeff (x - 1) - (f.coeff (y - 1)).coeff x
DefinitionVariable difference as a unit of Hahn series#✓fully proved
The formal difference of the inner and outer variables, bundled with its diagonal-series inverse.
HahnSeries.variableDifferenceUnit · 23 lines
noncomputable def variableDifferenceUnit {R : Type*} [CommRing R] :
(HahnSeries ℤ (LaurentPolynomial R))ˣ := by
let v : HahnSeries ℤ (LaurentPolynomial R) := single 0 (T 1) - single 1 1
let e : HahnSeries ℤ (LaurentPolynomial R) :=
diagonalLaurentSeries (-1) (fun _ => 1) 0
have h : v * e = 1 := by
have coeff_laurent_one (z : ℤ) :
(1 : LaurentPolynomial R).coeff z = if z = 0 then 1 else 0 := by
rw [← T_zero]
unfold T
rw [AddMonoidAlgebra.coeff_single, Finsupp.single_apply]
simp [eq_comm]
ext y x
change (((single 0 (T 1) - single 1 1) * e).coeff y).coeff x =
((1 : HahnSeries ℤ (LaurentPolynomial R)).coeff y).coeff x
rw [coeff_coeff_variableDifference_mul]
simp only [e, coeff_coeff_diagonalLaurentSeries, coeff_one]
split_ifs <;> simp_all <;> omega
exact
{ val := v
inv := e
val_inv := h
inv_val := by simpa only [mul_comm] using h }
Uses 3 · Used by 3
TheoremValue of the variable difference unit#✓fully proved
The value of variableDifferenceUnit is the difference of the two formal variables.
@[simp] theorem coe_variableDifferenceUnit {R : Type*} [CommRing R] :
(variableDifferenceUnit (R := R) : HahnSeries ℤ (LaurentPolynomial R)) =
single 0 (T 1) - single 1 1
noncomputable def variableDifferenceUnit {R : Type*} [CommRing R] :
(HahnSeries ℤ (LaurentPolynomial R))ˣ := by
let v : HahnSeries ℤ (LaurentPolynomial R) := single 0 (T 1) - single 1 1
let e : HahnSeries ℤ (LaurentPolynomial R) :=
diagonalLaurentSeries (-1) (fun _ => 1) 0
have h : v * e = 1 := by
have coeff_laurent_one (z : ℤ) :
(1 : LaurentPolynomial R).coeff z = if z = 0 then 1 else 0 := by
rw [← T_zero]
unfold T
rw [AddMonoidAlgebra.coeff_single, Finsupp.single_apply]
simp [eq_comm]
⋯
MathlibExt/RingTheory/HahnSeries/DiagonalLaurent.lean:81
Uses 1 · Used by 1
TheoremInverse of the variable difference as a diagonal series#✓fully proved
The inverse of the formal variable difference is its infinite diagonal Laurent series.
@[simp] theorem coe_inv_variableDifferenceUnit {R : Type*} [CommRing R] :
(↑((variableDifferenceUnit (R := R))⁻¹) : HahnSeries ℤ (LaurentPolynomial R)) =
diagonalLaurentSeries (-1) (fun _ => 1) 0
noncomputable def variableDifferenceUnit {R : Type*} [CommRing R] :
(HahnSeries ℤ (LaurentPolynomial R))ˣ := by
let v : HahnSeries ℤ (LaurentPolynomial R) := single 0 (T 1) - single 1 1
let e : HahnSeries ℤ (LaurentPolynomial R) :=
diagonalLaurentSeries (-1) (fun _ => 1) 0
have h : v * e = 1 := by
have coeff_laurent_one (z : ℤ) :
(1 : LaurentPolynomial R).coeff z = if z = 0 then 1 else 0 := by
rw [← T_zero]
unfold T
rw [AddMonoidAlgebra.coeff_single, Finsupp.single_apply]
simp [eq_comm]
⋯
MathlibExt/RingTheory/HahnSeries/DiagonalLaurent.lean:81
noncomputable def diagonalLaurentSeries {R : Type*} [CommSemiring R]
(d : ℤ) (c : ℤ → R) (j₀ : ℤ) : HahnSeries ℤ (LaurentPolynomial R) :=
ofSuppBddBelow
(fun j => if j₀ ≤ j then AddMonoidAlgebra.single (d - j) (c j) else 0)
⟨j₀, fun j hj => by
by_contra h
simp [h] at hj⟩
MathlibExt/RingTheory/HahnSeries/DiagonalLaurent.lean:39
Uses 2 · Used by 1
TheoremPowers of the inverse variable difference have binomial coefficients#✓fully proved
The (N + 1)-st power of the inverse variable difference has negative-binomial
coefficients on one diagonal.
theorem coe_inv_variableDifferenceUnit_pow_succ {R : Type*} [CommRing R] (N : ℕ) :
(↑((variableDifferenceUnit (R := R))⁻¹) : HahnSeries ℤ (LaurentPolynomial R)) ^
(N + 1) =
diagonalLaurentSeries (-(N : ℤ) - 1)
(fun j => ((j.toNat + N).choose N : R)) 0
noncomputable def variableDifferenceUnit {R : Type*} [CommRing R] :
(HahnSeries ℤ (LaurentPolynomial R))ˣ := by
let v : HahnSeries ℤ (LaurentPolynomial R) := single 0 (T 1) - single 1 1
let e : HahnSeries ℤ (LaurentPolynomial R) :=
diagonalLaurentSeries (-1) (fun _ => 1) 0
have h : v * e = 1 := by
have coeff_laurent_one (z : ℤ) :
(1 : LaurentPolynomial R).coeff z = if z = 0 then 1 else 0 := by
rw [← T_zero]
unfold T
rw [AddMonoidAlgebra.coeff_single, Finsupp.single_apply]
simp [eq_comm]
⋯
MathlibExt/RingTheory/HahnSeries/DiagonalLaurent.lean:81
noncomputable def diagonalLaurentSeries {R : Type*} [CommSemiring R]
(d : ℤ) (c : ℤ → R) (j₀ : ℤ) : HahnSeries ℤ (LaurentPolynomial R) :=
ofSuppBddBelow
(fun j => if j₀ ≤ j then AddMonoidAlgebra.single (d - j) (c j) else 0)
⟨j₀, fun j hj => by
by_contra h
simp [h] at hj⟩
MathlibExt/RingTheory/HahnSeries/DiagonalLaurent.lean:39
Uses 6
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.