Skip to content

Commit 44ae711

Browse files
feat(RingTheory/MvPowerSeries/Trunc): generalize truncation lemmas (#39625)
Generalize `coeff_trunc_mul_trunc_eq_coeff_mul` (and its analogs for `truncFinset` and `trunc'`) to allow for different truncation levels for the two arguments. This matches the API for univariate power series, where we already have `PowerSeries.coeff_mul_eq_coeff_trunc_mul_trunc₂`. This is useful for defining partial derivatives of multivariate power series, see PR #39626. Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 8afd8c5 commit 44ae711

1 file changed

Lines changed: 39 additions & 7 deletions

File tree

Mathlib/RingTheory/MvPowerSeries/Trunc.lean

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,16 +126,24 @@ theorem truncFinset_map [CommSemiring S] (f : R →+* S) (p : MvPowerSeries σ R
126126
ext x
127127
by_cases x ∈ s <;> grind [coeff_map, MvPolynomial.coeff_map]
128128

129-
theorem coeff_truncFinset_mul_truncFinset_eq_coeff_mul (hs : IsLowerSet (s : Set (σ →₀ ℕ)))
130-
{x : σ →₀ ℕ} (f g : MvPowerSeries σ R) (hx : x ∈ s) :
131-
(truncFinset R s f * truncFinset R s g).coeff x = coeff x (f * g) := by
129+
/-- A coefficient of a product of finset-truncated power series equals the coefficient of the
130+
untruncated product, with the two truncation finsets `s` and `t` allowed to differ. -/
131+
theorem coeff_truncFinset_mul_truncFinset_eq_coeff_mul₂ {t : Finset (σ →₀ ℕ)}
132+
(hs : IsLowerSet (s : Set (σ →₀ ℕ))) (ht : IsLowerSet (t : Set (σ →₀ ℕ)))
133+
{x : σ →₀ ℕ} (f g : MvPowerSeries σ R) (hxs : x ∈ s) (hxt : x ∈ t) :
134+
(truncFinset R s f * truncFinset R t g).coeff x = coeff x (f * g) := by
132135
classical
133136
simp only [MvPowerSeries.coeff_mul, MvPolynomial.coeff_mul]
134137
apply sum_congr rfl
135138
rintro ⟨i, j⟩ hij
136139
simp only [mem_antidiagonal] at hij
137-
rw [coeff_truncFinset_of_mem _ (hs (show i ≤ x by simp [← hij]) hx),
138-
coeff_truncFinset_of_mem _ (hs (show j ≤ x by simp [← hij]) hx)]
140+
rw [coeff_truncFinset_of_mem _ (hs (show i ≤ x by simp [← hij]) hxs),
141+
coeff_truncFinset_of_mem _ (ht (show j ≤ x by simp [← hij]) hxt)]
142+
143+
theorem coeff_truncFinset_mul_truncFinset_eq_coeff_mul (hs : IsLowerSet (s : Set (σ →₀ ℕ)))
144+
{x : σ →₀ ℕ} (f g : MvPowerSeries σ R) (hx : x ∈ s) :
145+
(truncFinset R s f * truncFinset R s g).coeff x = coeff x (f * g) :=
146+
coeff_truncFinset_mul_truncFinset_eq_coeff_mul₂ hs hs f g hx hx
139147

140148
theorem truncFinset_truncFinset_pow (hs : IsLowerSet (s : Set (σ →₀ ℕ))) {k : ℕ} (hk : 1 ≤ k)
141149
(p : MvPowerSeries σ R) : truncFinset R s ((truncFinset R s p) ^ k) =
@@ -200,6 +208,21 @@ theorem trunc_C_mul (n : σ →₀ ℕ) (a : R) (p : MvPowerSeries σ R) :
200208
theorem trunc_map [CommSemiring S] (n : σ →₀ ℕ) (f : R →+* S) (p : MvPowerSeries σ R) :
201209
trunc S n (map f p) = MvPolynomial.map f (trunc R n p) := truncFinset_map f p
202210

211+
/-- A coefficient of a product of truncated power series equals the coefficient of the untruncated
212+
product, with the two truncation levels `n₁` and `n₂` allowed to differ. -/
213+
theorem coeff_trunc_mul_trunc_eq_coeff_mul₂ (n₁ n₂ : σ →₀ ℕ)
214+
(f g : MvPowerSeries σ R) {m : σ →₀ ℕ} (h₁ : m < n₁) (h₂ : m < n₂) :
215+
(trunc R n₁ f * trunc R n₂ g).coeff m = coeff m (f * g) :=
216+
coeff_truncFinset_mul_truncFinset_eq_coeff_mul₂ (by grind [IsLowerSet]) (by grind [IsLowerSet])
217+
f g (by simpa) (by simpa)
218+
219+
/-- A coefficient of a product of truncated power series equals the coefficient of the untruncated
220+
product. Both factors are truncated at the same level `n`. -/
221+
theorem coeff_trunc_mul_trunc_eq_coeff_mul (n : σ →₀ ℕ)
222+
(f g : MvPowerSeries σ R) {m : σ →₀ ℕ} (h : m < n) :
223+
(trunc R n f * trunc R n g).coeff m = coeff m (f * g) :=
224+
coeff_trunc_mul_trunc_eq_coeff_mul₂ n n f g h h
225+
203226
end TruncLT
204227

205228
section TruncLE
@@ -232,11 +255,20 @@ theorem trunc'_one (n : σ →₀ ℕ) : trunc' R n 1 = 1 := truncFinset_one (by
232255
theorem trunc'_C (n : σ →₀ ℕ) (a : R) : trunc' R n (C a) = MvPolynomial.C a :=
233256
truncFinset_C (by simp) a
234257

235-
/-- Coefficients of the truncation of a product of two multivariate power series -/
258+
/-- A coefficient of a product of truncated power series equals the coefficient of the untruncated
259+
product, with the two truncation levels `n₁` and `n₂` allowed to differ. -/
260+
theorem coeff_trunc'_mul_trunc'_eq_coeff_mul₂ (n₁ n₂ : σ →₀ ℕ)
261+
(f g : MvPowerSeries σ R) {m : σ →₀ ℕ} (h₁ : m ≤ n₁) (h₂ : m ≤ n₂) :
262+
(trunc' R n₁ f * trunc' R n₂ g).coeff m = coeff m (f * g) :=
263+
coeff_truncFinset_mul_truncFinset_eq_coeff_mul₂ (by grind [IsLowerSet]) (by grind [IsLowerSet])
264+
f g (by simpa) (by simpa)
265+
266+
/-- A coefficient of a product of truncated power series equals the coefficient of the untruncated
267+
product. Both factors are truncated at the same level `n`. -/
236268
theorem coeff_trunc'_mul_trunc'_eq_coeff_mul (n : σ →₀ ℕ)
237269
(f g : MvPowerSeries σ R) {m : σ →₀ ℕ} (h : m ≤ n) :
238270
(trunc' R n f * trunc' R n g).coeff m = coeff m (f * g) :=
239-
coeff_truncFinset_mul_truncFinset_eq_coeff_mul (by intro; grind) f g (by simpa)
271+
coeff_trunc'_mul_trunc'_eq_coeff_mul₂ n n f g h h
240272

241273
@[deprecated coeff_trunc'_mul_trunc'_eq_coeff_mul (since := "2026-02-20")]
242274
theorem coeff_mul_eq_coeff_trunc'_mul_trunc' (n : σ →₀ ℕ) (f g : MvPowerSeries σ R) {m : σ →₀ ℕ}

0 commit comments

Comments
 (0)