Skip to content

Commit 2b2cd06

Browse files
generalize truncation lemmas
1 parent 1563983 commit 2b2cd06

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
@@ -125,16 +125,24 @@ theorem truncFinset_map [CommSemiring S] (f : R →+* S) (p : MvPowerSeries σ R
125125
ext x
126126
by_cases x ∈ s <;> grind [coeff_map, MvPolynomial.coeff_map]
127127

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

139147
theorem truncFinset_truncFinset_pow (hs : IsLowerSet (s : Set (σ →₀ ℕ))) {k : ℕ} (hk : 1 ≤ k)
140148
(p : MvPowerSeries σ R) : truncFinset R s ((truncFinset R s p) ^ k) =
@@ -190,6 +198,21 @@ theorem trunc_one (n : σ →₀ ℕ) (hnn : n ≠ 0) : trunc R n 1 = 1 :=
190198
theorem trunc_C (n : σ →₀ ℕ) (hnn : n ≠ 0) (a : R) : trunc R n (C a) = MvPolynomial.C a :=
191199
truncFinset_C (by simpa using pos_of_ne_zero hnn) a
192200

201+
/-- A coefficient of a product of truncated power series equals the coefficient of the untruncated
202+
product, with the two truncation levels `n₁` and `n₂` allowed to differ. -/
203+
theorem coeff_trunc_mul_trunc_eq_coeff_mul₂ (n₁ n₂ : σ →₀ ℕ)
204+
(f g : MvPowerSeries σ R) {m : σ →₀ ℕ} (h₁ : m < n₁) (h₂ : m < n₂) :
205+
(trunc R n₁ f * trunc R n₂ g).coeff m = coeff m (f * g) :=
206+
coeff_truncFinset_mul_truncFinset_eq_coeff_mul₂ (by intro; grind) (by intro; grind) f g
207+
(by simpa) (by simpa)
208+
209+
/-- A coefficient of a product of truncated power series equals the coefficient of the untruncated
210+
product. Both factors are truncated at the same level `n`. -/
211+
theorem coeff_trunc_mul_trunc_eq_coeff_mul (n : σ →₀ ℕ)
212+
(f g : MvPowerSeries σ R) {m : σ →₀ ℕ} (h : m < n) :
213+
(trunc R n f * trunc R n g).coeff m = coeff m (f * g) :=
214+
coeff_trunc_mul_trunc_eq_coeff_mul₂ n n f g h h
215+
193216
@[simp]
194217
theorem trunc_C_mul (n : σ →₀ ℕ) (a : R) (p : MvPowerSeries σ R) :
195218
trunc R n (C a * p) = MvPolynomial.C a * trunc R n p := by
@@ -231,11 +254,20 @@ theorem trunc'_one (n : σ →₀ ℕ) : trunc' R n 1 = 1 := truncFinset_one (by
231254
theorem trunc'_C (n : σ →₀ ℕ) (a : R) : trunc' R n (C a) = MvPolynomial.C a :=
232255
truncFinset_C (by simp) a
233256

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

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

0 commit comments

Comments
 (0)