@@ -346,6 +346,10 @@ theorem divXPowOrder_X :
346346 ext n
347347 simp [coeff_X]
348348
349+ theorem divXPowOrder_one : divXPowOrder 1 = (1 : R⟦X⟧) := by
350+ ext k
351+ simp
352+
349353end OrderZeroNeOne
350354
351355section NoZeroDivisors
@@ -369,44 +373,64 @@ theorem order_mul (φ ψ : R⟦X⟧) : order (φ * ψ) = order φ + order ψ :=
369373 · rw [coeff_of_lt_order_toNat ij.1 h', zero_mul]
370374 · rw [coeff_of_lt_order_toNat ij.2 h', mul_zero]
371375
372- theorem order_pow [Nontrivial R] (φ : R⟦X⟧) (n : ℕ) :
373- order (φ ^ n) = n • order φ := by
374- rcases subsingleton_or_nontrivial R with hR | hR
375- · simp only [Subsingleton.eq_zero φ, order_zero, nsmul_eq_mul]
376- by_cases hn : n = 0
377- · simp [hn, pow_zero]
378- · simp [zero_pow hn, ENat.mul_top', if_neg hn]
379- induction n with
380- | zero => simp
381- | succ n hn =>
382- simp only [add_smul, one_smul, pow_succ, order_mul, hn]
383-
384- theorem order_prod {R : Type *} [CommSemiring R] [NoZeroDivisors R] [Nontrivial R] {ι : Type *}
385- (φ : ι → R⟦X⟧) (s : Finset ι) : (∏ i ∈ s, φ i).order = ∑ i ∈ s, (φ i).order := by
386- induction s using Finset.cons_induction with
387- | empty => simp
388- | cons a s ha ih => rw [Finset.sum_cons ha, Finset.prod_cons ha, order_mul, ih]
389-
390376/-- The operation of dividing a power series by the largest possible power of `X`
391377preserves multiplication. -/
392- theorem divXPowOrder_mul_divXPowOrder {f g : R⟦X⟧} :
393- divXPowOrder f * divXPowOrder g = divXPowOrder ( f * g) := by
378+ theorem divXPowOrder_mul {f g : R⟦X⟧} :
379+ divXPowOrder ( f * g) = divXPowOrder f * divXPowOrder g := by
394380 by_cases h : f = 0 ∨ g = 0
395381 · rcases h with (h | h) <;> simp [h]
396382 push_neg at h
397383 apply X_pow_mul_cancel (k := f.order.toNat + g.order.toNat)
398384 calc
399- X ^ (f.order.toNat + g.order.toNat) * (f.divXPowOrder * g.divXPowOrder)
400- _ = (X ^ f.order.toNat * f.divXPowOrder) * (X ^ g.order.toNat * g.divXPowOrder) := by
401- conv_rhs =>
402- rw [mul_assoc, X_pow_mul, X_pow_mul, ← mul_assoc, mul_assoc, ← pow_add]
403- rw [X_pow_mul, add_comm]
385+ _ = X ^ ((f * g).order.toNat) * (f * g).divXPowOrder := by
386+ rw [order_mul, ENat.toNat_add (order_eq_top.not.mpr h.1 ) (order_eq_top.not.mpr h.2 )]
404387 _ = f * g := by
405388 simp [X_pow_order_mul_divXPowOrder]
406- _ = X ^ ((f * g) .order.toNat) * (f * g) .divXPowOrder := by
389+ _ = ( X ^ f .order.toNat * f.divXPowOrder ) * (X ^ g.order.toNat * g.divXPowOrder) := by
407390 simp [X_pow_order_mul_divXPowOrder]
408- _ = X ^ (f.order.toNat + g.order.toNat) * (f * g).divXPowOrder := by
409- rw [order_mul, ENat.toNat_add (order_eq_top.not.mpr h.1 ) (order_eq_top.not.mpr h.2 )]
391+ _ = f.divXPowOrder * g.divXPowOrder * X ^ (g.order.toNat + f.order.toNat) := by
392+ rw [mul_assoc, X_pow_mul, X_pow_mul, ← mul_assoc, mul_assoc, ← pow_add]
393+ _ = X ^ (f.order.toNat + g.order.toNat) * (f.divXPowOrder * g.divXPowOrder) := by
394+ rw [X_pow_mul, add_comm]
395+
396+ @[deprecated divXPowOrder_mul "use `divXPowOrder_mul.symm` instead" (since := "2025-11-06")]
397+ theorem divXPowOrder_mul_divXPowOrder {f g : R⟦X⟧} :
398+ divXPowOrder f * divXPowOrder g = divXPowOrder (f * g) :=
399+ divXPowOrder_mul.symm
400+
401+ variable [Nontrivial R]
402+
403+ /-- `PowerSeries.order` as a `MonoidHom`. -/
404+ def orderHom : R⟦X⟧ →* Multiplicative ℕ∞ where
405+ toFun g := .ofAdd g.order
406+ map_one' := order_one
407+ map_mul' := order_mul
408+
409+ @[simp, norm_cast]
410+ lemma coe_orderHom : (orderHom : R⟦X⟧ → ℕ∞) = order := rfl
411+
412+ theorem order_pow (φ : R⟦X⟧) (n : ℕ) : order (φ ^ n) = n • order φ :=
413+ map_pow orderHom φ n
414+
415+ theorem order_prod {R : Type *} [CommSemiring R] [NoZeroDivisors R] [Nontrivial R] {ι : Type *}
416+ (φ : ι → R⟦X⟧) (s : Finset ι) : (∏ i ∈ s, φ i).order = ∑ i ∈ s, (φ i).order :=
417+ map_prod orderHom φ s
418+
419+ /-- `PowerSeries.divXPowOrder` as a `MonoidHom`. -/
420+ def divXPowOrderHom : R⟦X⟧ →* R⟦X⟧ where
421+ toFun g := g.divXPowOrder
422+ map_one' := divXPowOrder_one
423+ map_mul' f g := divXPowOrder_mul (f := f) (g := g)
424+
425+ @[simp, norm_cast]
426+ lemma coe_divXPowOrderHom : (divXPowOrderHom : R⟦X⟧ → R⟦X⟧) = divXPowOrder := rfl
427+
428+ theorem divXPowOrder_pow (φ : R⟦X⟧) (n : ℕ) : divXPowOrder (φ ^ n) = (divXPowOrder φ) ^ n :=
429+ map_pow divXPowOrderHom φ n
430+
431+ theorem divXPowOrder_prod {R : Type *} [CommSemiring R] [NoZeroDivisors R] [Nontrivial R] {ι : Type *}
432+ (φ : ι → R⟦X⟧) (s : Finset ι) : (∏ i ∈ s, φ i).divXPowOrder = ∏ i ∈ s, (φ i).divXPowOrder :=
433+ map_prod divXPowOrderHom φ s
410434
411435end NoZeroDivisors
412436
0 commit comments