Skip to content

Commit 0d78ca8

Browse files
committed
feat(RingTheory/MvPowerSeries): some inequalities related to order (#33872)
Some inequalities related to order of (mv) power series. Co-authored-by: WenrongZou <wenrongzou@outlook.com>
1 parent 18ef4ef commit 0d78ca8

File tree

3 files changed

+80
-9
lines changed

3 files changed

+80
-9
lines changed

Mathlib/RingTheory/MvPowerSeries/Order.lean

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,20 @@ theorem le_weightedOrder_prod {R : Type*} [CommSemiring R] {ι : Type*} (w : σ
306306

307307
alias weightedOrder_mul_ge := le_weightedOrder_mul
308308

309+
theorem le_weightedOrder_smul {a : R} :
310+
f.weightedOrder w ≤ (a • f).weightedOrder w :=
311+
le_weightedOrder _ fun i hi => by simp [coeff_eq_zero_of_lt_weightedOrder _ hi]
312+
313+
section
314+
315+
variable {S : Type*} [Semiring S]
316+
317+
theorem le_weightedOrder_map (φ : R →+* S) :
318+
f.weightedOrder w ≤ (f.map φ).weightedOrder w :=
319+
le_weightedOrder w fun i hi => by simp [coeff_eq_zero_of_lt_weightedOrder _ hi]
320+
321+
end
322+
309323
section Ring
310324

311325
variable {R : Type*} [Ring R] {f g : MvPowerSeries σ R}
@@ -461,17 +475,37 @@ theorem le_order_prod {R : Type*} [CommSemiring R] {ι : Type*}
461475
(f : ι → MvPowerSeries σ R) (s : Finset ι) : ∑ i ∈ s, (f i).order ≤ (∏ i ∈ s, f i).order :=
462476
le_weightedOrder_prod _ _ _
463477

464-
theorem order_ne_zero_iff_constCoeff_eq_zero :
465-
f.order0 ↔ f.constantCoeff = 0 := by
478+
theorem one_le_order_iff_constCoeff_eq_zero :
479+
1f.order ↔ f.constantCoeff = 0 := by
466480
constructor
467481
· intro h
468482
apply coeff_of_lt_order
469-
simpa using pos_of_ne_zero h
483+
simpa using Order.one_le_iff_pos.mp h
470484
· intro h
471-
refine ENat.one_le_iff_ne_zero.mp <| MvPowerSeries.le_order fun d hd ↦ ?_
485+
refine MvPowerSeries.le_order fun d hd ↦ ?_
472486
rw [Nat.cast_lt_one] at hd
473487
simp [(degree_eq_zero_iff d).mp hd, h]
474488

489+
theorem order_ne_zero_iff_constCoeff_eq_zero :
490+
f.order ≠ 0 ↔ f.constantCoeff = 0 := by
491+
rw [← ENat.one_le_iff_ne_zero, one_le_order_iff_constCoeff_eq_zero]
492+
493+
theorem le_order_pow_of_constantCoeff_eq_zero (n : ℕ) (hf : f.constantCoeff = 0) :
494+
n ≤ (f ^ n).order := by
495+
refine .trans ?_ (le_order_pow n)
496+
simpa using le_mul_of_one_le_right' (one_le_order_iff_constCoeff_eq_zero.mpr hf)
497+
498+
theorem le_order_smul {a : R} : f.order ≤ (a • f).order := le_weightedOrder_smul _
499+
500+
section
501+
502+
variable {S : Type*} [Semiring S]
503+
504+
theorem le_order_map (f : R →+* S) {φ : MvPowerSeries σ R} : φ.order ≤ (φ.map f).order :=
505+
le_weightedOrder_map _ _
506+
507+
end
508+
475509
section Ring
476510

477511
variable {R : Type*} [Ring R] {f g : MvPowerSeries σ R}

Mathlib/RingTheory/PowerSeries/Order.lean

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,14 @@ theorem order_add_of_order_ne (φ ψ : R⟦X⟧) (h : order φ ≠ order ψ) :
178178

179179
@[deprecated (since := "2025-09-17")] alias order_add_of_order_eq := order_add_of_order_ne
180180

181+
theorem le_order_map {S : Type*} [Semiring S] (f : R →+* S) :
182+
φ.order ≤ (φ.map f).order :=
183+
le_order _ _ fun i hi => by simp [coeff_of_lt_order i hi]
184+
185+
theorem le_order_smul {a : R} :
186+
φ.order ≤ (a • φ).order :=
187+
le_order _ φ.order fun i hi => by simp [coeff_of_lt_order i hi]
188+
181189
/-- The order of the product of two formal power series
182190
is at least the sum of their orders. -/
183191
theorem le_order_mul (φ ψ : R⟦X⟧) : order φ + order ψ ≤ order (φ * ψ) := by
@@ -206,18 +214,27 @@ theorem le_order_prod {R : Type*} [CommSemiring R] {ι : Type*} (φ : ι → R
206214

207215
alias order_mul_ge := le_order_mul
208216

209-
theorem order_ne_zero_iff_constCoeff_eq_zero {φ : R⟦X⟧} :
210-
φ.order0 ↔ φ.constantCoeff = 0 := by
217+
theorem one_le_order_iff_constCoeff_eq_zero :
218+
1φ.order ↔ φ.constantCoeff = 0 := by
211219
constructor
212220
· intro h
213-
rw [← PowerSeries.coeff_zero_eq_constantCoeff]
221+
rw [← coeff_zero_eq_constantCoeff]
214222
apply coeff_of_lt_order
215-
simpa using pos_of_ne_zero h
223+
simpa using Order.one_le_iff_pos.mp h
216224
· intro h
217-
refine ENat.one_le_iff_ne_zero.mp <| PowerSeries.le_order _ _ fun d hd ↦ ?_
225+
refine le_order _ _ fun d hd ↦ ?_
218226
rw [Nat.cast_lt_one] at hd
219227
simp [hd, h]
220228

229+
theorem order_ne_zero_iff_constCoeff_eq_zero {φ : R⟦X⟧} :
230+
φ.order ≠ 0 ↔ φ.constantCoeff = 0 := by
231+
rw [← ENat.one_le_iff_ne_zero, one_le_order_iff_constCoeff_eq_zero]
232+
233+
theorem le_order_pow_of_constantCoeff_eq_zero (n : ℕ) (hf : φ.constantCoeff = 0) :
234+
n ≤ (φ ^ n).order := by
235+
refine .trans ?_ (le_order_pow _ n)
236+
simpa using le_mul_of_one_le_right' (one_le_order_iff_constCoeff_eq_zero.mpr hf)
237+
221238
/-- The order of the monomial `a*X^n` is infinite if `a = 0` and `n` otherwise. -/
222239
theorem order_monomial (n : ℕ) (a : R) [Decidable (a = 0)] :
223240
order (monomial n a) = if a = 0 then (⊤ : ℕ∞) else n := by

Mathlib/RingTheory/PowerSeries/Substitution.lean

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,26 @@ theorem le_order_subst (a : MvPowerSeries τ S) (ha : HasSubst a) (f : PowerSeri
291291
refine .trans ?_ (MvPowerSeries.le_order_subst (PowerSeries.hasSubst_iff.mp ha) _)
292292
simp [order_eq_order]
293293

294+
theorem le_order_subst_left {f : MvPowerSeries τ R} {φ : PowerSeries R}
295+
(hf : f.constantCoeff = 0) : φ.order ≤ (φ.subst f).order :=
296+
.trans (ENat.self_le_mul_left φ.order (f.order_ne_zero_iff_constCoeff_eq_zero.mpr hf))
297+
(PowerSeries.le_order_subst f (HasSubst.of_constantCoeff_zero hf) _)
298+
299+
theorem le_order_subst_right {f : MvPowerSeries τ R} {φ : PowerSeries R}
300+
(hf : f.constantCoeff = 0) (hφ : φ.constantCoeff = 0) : f.order ≤ (φ.subst f).order :=
301+
.trans (ENat.self_le_mul_right _ (order_ne_zero_iff_constCoeff_eq_zero.mpr hφ))
302+
(PowerSeries.le_order_subst f (HasSubst.of_constantCoeff_zero hf) _)
303+
304+
theorem le_order_subst_left' {f φ : PowerSeries R} (hf : f.constantCoeff = 0) :
305+
φ.order ≤ PowerSeries.order (φ.subst f) := by
306+
conv_rhs => rw [order_eq_order]
307+
exact le_order_subst_left hf
308+
309+
theorem le_order_subst_right' {f φ : PowerSeries R} (hf : f.constantCoeff = 0)
310+
(hφ : φ.constantCoeff = 0) : f.order ≤ PowerSeries.order (φ.subst f) := by
311+
simp_rw [order_eq_order]
312+
exact le_order_subst_right hf hφ
313+
294314
end
295315

296316
theorem HasSubst.comp

0 commit comments

Comments
 (0)