Skip to content

Commit ee4aed7

Browse files
committed
feat (RingTheory/HahnSeries): introduce binomialFamily and generalized powers. (#31215)
We introduce a way to take generalized powers of Hahn series whose leading term is 1. The powers take values in a binomial ring.
1 parent 9ea0de2 commit ee4aed7

File tree

6 files changed

+303
-20
lines changed

6 files changed

+303
-20
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5811,6 +5811,7 @@ public import Mathlib.RingTheory.GradedAlgebra.Radical
58115811
public import Mathlib.RingTheory.Grassmannian
58125812
public import Mathlib.RingTheory.HahnSeries.Addition
58135813
public import Mathlib.RingTheory.HahnSeries.Basic
5814+
public import Mathlib.RingTheory.HahnSeries.Binomial
58145815
public import Mathlib.RingTheory.HahnSeries.HEval
58155816
public import Mathlib.RingTheory.HahnSeries.HahnEmbedding
58165817
public import Mathlib.RingTheory.HahnSeries.Lex

Mathlib/RingTheory/HahnSeries/Addition.lean

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ theorem orderTop_smul_not_lt (r : R) (x : HahnSeries Γ V) : ¬ (r • x).orderT
7272
exact Set.IsWF.min_of_subset_not_lt_min
7373
(Function.support_smul_subset_right (fun _ => r) x.coeff)
7474

75+
theorem orderTop_le_orderTop_smul {Γ} [LinearOrder Γ] (r : R) (x : HahnSeries Γ V) :
76+
x.orderTop ≤ (r • x).orderTop :=
77+
le_of_not_gt <| orderTop_smul_not_lt r x
78+
7579
theorem order_smul_not_lt [Zero Γ] (r : R) (x : HahnSeries Γ V) (h : r • x ≠ 0) :
7680
¬ (r • x).order < x.order := by
7781
have hx : x ≠ 0 := right_ne_zero_of_smul h
@@ -418,6 +422,24 @@ theorem leadingCoeff_sub {Γ} [LinearOrder Γ] {x y : HahnSeries Γ R}
418422
rw [← orderTop_neg (x := y)] at hxy
419423
exact leadingCoeff_add_eq_left hxy
420424

425+
theorem orderTop_sub_ne {x y : HahnSeries Γ R} {g : Γ}
426+
(hxg : x.orderTop = g) (hyg : y.orderTop = g) (hxyc : x.leadingCoeff = y.leadingCoeff) :
427+
(x - y).orderTop ≠ g := by
428+
refine orderTop_ne_of_coeff_eq_zero ?_
429+
have hx : x ≠ 0 := fun h ↦ by simp_all [orderTop_zero, WithTop.top_ne_coe]
430+
rw [orderTop_of_ne_zero hx, WithTop.coe_eq_coe] at hxg
431+
have hy : y ≠ 0 := fun h ↦ by simp_all [orderTop_zero, WithTop.top_ne_coe]
432+
rw [orderTop_of_ne_zero hy, WithTop.coe_eq_coe] at hyg
433+
simp only [leadingCoeff_of_ne_zero hx, leadingCoeff_of_ne_zero hy, untop_orderTop_of_ne_zero hx,
434+
untop_orderTop_of_ne_zero hy, hxg, hyg] at hxyc
435+
rwa [coeff_sub, sub_eq_zero]
436+
437+
theorem le_orderTop_of_leadingCoeff_eq {Γ} [LinearOrder Γ] {x y : HahnSeries Γ R} {g : Γ}
438+
(hxg : x.orderTop = g) (hyg : y.orderTop = g) (hxyc : x.leadingCoeff = y.leadingCoeff) :
439+
g < (x - y).orderTop :=
440+
lt_of_le_of_ne (le_of_eq_of_le (by rw [hxg, hyg, inf_idem]) min_orderTop_le_orderTop_sub)
441+
(orderTop_sub_ne hxg hyg hxyc).symm
442+
421443
end AddGroup
422444

423445
instance [AddCommGroup R] : AddCommGroup (HahnSeries Γ R) :=

Mathlib/RingTheory/HahnSeries/Basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,10 @@ theorem coeff_orderTop_ne {x : HahnSeries Γ R} {g : Γ} (hg : x.orderTop = g) :
280280
rw [← hg]
281281
exact x.isWF_support.min_mem (support_nonempty_iff.2 hx)
282282

283+
theorem orderTop_ne_of_coeff_eq_zero {x : HahnSeries Γ R} {i : Γ} (hx : x.coeff i = 0) :
284+
x.orderTop ≠ i :=
285+
fun h ↦ coeff_orderTop_ne h hx
286+
283287
theorem orderTop_le_of_coeff_ne_zero {Γ} [LinearOrder Γ] {x : HahnSeries Γ R}
284288
{g : Γ} (h : x.coeff g ≠ 0) : x.orderTop ≤ g := by
285289
rw [orderTop_of_ne_zero (ne_zero_of_coeff_ne_zero h), WithTop.coe_le_coe]
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/-
2+
Copyright (c) 2024 Scott Carnahan. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Scott Carnahan
5+
-/
6+
module
7+
8+
public import Mathlib.RingTheory.HahnSeries.HEval
9+
public import Mathlib.RingTheory.PowerSeries.Binomial
10+
11+
/-!
12+
# Binomial expansions of powers of Hahn Series
13+
We introduce binomial expansions using `embDomain`.
14+
15+
## Main Definitions
16+
* `HahnSeries.binomialFamily`
17+
18+
## Main results
19+
* coefficients of powers of binomials
20+
21+
-/
22+
23+
@[expose] public section
24+
25+
noncomputable section
26+
27+
namespace HahnSeries
28+
29+
variable {Γ R A : Type*}
30+
31+
variable [LinearOrder Γ] [AddCommMonoid Γ] [IsOrderedCancelAddMonoid Γ] [CommRing R]
32+
[BinomialRing R]
33+
34+
namespace SummableFamily
35+
36+
variable [CommRing A] [Algebra R A]
37+
38+
/-- A summable family of Hahn series, whose `n`th term is `Ring.choose r n • (x - 1) ^ n` when
39+
`x` is close to `1` (more precisely, when `0 < (x - 1).orderTop`), and `0 ^ n` otherwise. These
40+
terms give a formal expansion of `x ^ r` as `(1 + (x - 1)) ^ r`. -/
41+
def binomialFamily (x : HahnSeries Γ A) (r : R) :
42+
SummableFamily Γ A ℕ :=
43+
powerSeriesFamily (x - 1) (PowerSeries.binomialSeries A r)
44+
45+
@[simp]
46+
theorem binomialFamily_apply {x : HahnSeries Γ A} (hx : 0 < (x - 1).orderTop) (r : R) (n : ℕ) :
47+
binomialFamily x r n = Ring.choose r n • (x - 1) ^ n := by
48+
simp [hx, binomialFamily]
49+
50+
@[simp]
51+
theorem binomialFamily_apply_of_orderTop_nonpos {x : HahnSeries Γ A} (hx : ¬ 0 < (x - 1).orderTop)
52+
(r : R) (n : ℕ) :
53+
binomialFamily x r n = 0 ^ n := by
54+
rw [binomialFamily, powerSeriesFamily_of_not_orderTop_pos hx]
55+
by_cases hn : n = 0 <;> simp [hn]
56+
57+
theorem binomialFamily_orderTop_pos {x : HahnSeries Γ A} (hx : 0 < (x - 1).orderTop) (r : R) {n : ℕ}
58+
(hn : 0 < n) :
59+
0 < (binomialFamily x r n).orderTop := by
60+
simp only [binomialFamily, smulFamily_toFun, PowerSeries.binomialSeries_coeff, powers_toFun, hx,
61+
↓reduceIte, smul_assoc, one_smul]
62+
have : n ≠ 0 := by exact Nat.ne_zero_of_lt hn
63+
calc
64+
0 < n • (x - 1).orderTop := (nsmul_pos_iff (Nat.ne_zero_of_lt hn)).mpr hx
65+
n • (x - 1).orderTop ≤ ((x - 1) ^ n).orderTop := orderTop_nsmul_le_orderTop_pow
66+
((x - 1) ^ n).orderTop ≤ ((Ring.choose r n) • ((x - 1) ^ n)).orderTop :=
67+
orderTop_le_orderTop_smul (Ring.choose r n) ((x - 1) ^ n)
68+
69+
theorem binomialFamily_mem_support {x : HahnSeries Γ A}
70+
(hx : 0 < (x - 1).orderTop) (r : R) (n : ℕ) {g : Γ}
71+
(hg : g ∈ (binomialFamily x r n).support) : 0 ≤ g := by
72+
by_cases hn : n = 0; · simp_all
73+
exact le_of_lt (WithTop.coe_pos.mp (lt_of_lt_of_le (binomialFamily_orderTop_pos hx r
74+
(Nat.pos_of_ne_zero hn)) (orderTop_le_of_coeff_ne_zero hg)))
75+
76+
theorem orderTop_hsum_binomialFamily_pos {x : HahnSeries Γ A} (hx : 0 < (x - 1).orderTop)
77+
(r : R) : (0 : WithTop Γ) < (SummableFamily.hsum (binomialFamily x r) - 1).orderTop := by
78+
obtain (_|_) := subsingleton_or_nontrivial A
79+
· simp [Subsingleton.eq_zero ((binomialFamily x r).hsum - 1)]
80+
· refine (orderTop_self_sub_one_pos_iff (binomialFamily x r).hsum).mpr ?_
81+
constructor
82+
· exact hsum_orderTop_of_le (by simp [hx]) (fun b g hg => binomialFamily_mem_support
83+
hx r b hg) fun b hb => coeff_eq_zero_of_lt_orderTop <| binomialFamily_orderTop_pos hx r <|
84+
Nat.zero_lt_of_ne_zero hb
85+
· have : (binomialFamily x r 0).coeff 0 = 1 := by simp [hx]
86+
rw [← this]
87+
refine hsum_leadingCoeff_of_le (g := 0) (a := 0) (by simp [hx]) ?_ ?_
88+
· intro b g' hg'
89+
exact binomialFamily_mem_support hx r b hg'
90+
· intro b hb
91+
exact coeff_eq_zero_of_lt_orderTop <| binomialFamily_orderTop_pos hx r <|
92+
Nat.zero_lt_of_ne_zero hb
93+
94+
end SummableFamily
95+
96+
open SummableFamily
97+
98+
instance : Pow (orderTopSubOnePos Γ R) R where
99+
pow x r := toOrderTopSubOnePos (orderTop_hsum_binomialFamily_pos x.2 r)
100+
101+
@[simp]
102+
theorem binomial_power {x : orderTopSubOnePos Γ R} {r : R} :
103+
x ^ r = toOrderTopSubOnePos (orderTop_hsum_binomialFamily_pos x.2 r) :=
104+
rfl
105+
106+
theorem pow_add {x : orderTopSubOnePos Γ R} {r s : R} : x ^ (r + s) = x ^ r * x ^ s := by
107+
suffices (x ^ (r + s)).val = (x ^ r * x ^ s).val by exact SetLike.coe_eq_coe.mp this
108+
suffices (x ^ (r + s)).val.val = (x ^ r * x ^ s).val.val by exact Units.val_inj.mp this
109+
simp [binomialFamily, hsum_powerSeriesFamily_mul, hsum_mul]
110+
111+
theorem coeff_toOrderTopSubOnePos_pow {g : Γ} (hg : 0 < g) (r s : R) (k : ℕ) :
112+
HahnSeries.coeff (toOrderTopSubOnePos (orderTop_sub_pos hg r) ^ s).val (k • g) =
113+
Ring.choose s k • r ^ k := by
114+
simp only [val_toOrderTopSubOnePos_coe, binomial_power, coeff_hsum, smul_eq_mul]
115+
rw [finsum_eq_single _ k, binomialFamily_apply (orderTop_sub_pos hg r), add_sub_cancel_left,
116+
single_pow, coeff_smul, coeff_single_same (k • g) (r ^ k), smul_eq_mul]
117+
intro n hn
118+
rw [binomialFamily_apply, add_sub_cancel_left, coeff_smul, single_pow, coeff_single_of_ne,
119+
smul_zero]
120+
· contrapose! hn
121+
apply (StrictMono.injective (nsmul_left_strictMono hg)) hn.symm
122+
· by_cases hr : r = 0 <;> simp [hr, hg]
123+
124+
end HahnSeries

Mathlib/RingTheory/HahnSeries/Multiplication.lean

Lines changed: 107 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ with the action of `HahnSeries Γ R` on `HahnModule Γ' R V`.
3333
* `HahnSeries.C` is the `constant term` ring homomorphism `R →+* HahnSeries Γ R`.
3434
* `HahnSeries.embDomainRingHom` is the ring homomorphism `HahnSeries Γ R →+* HahnSeries Γ' R`
3535
induced by an order embedding `Γ ↪o Γ'`.
36+
* `HahnSeries.orderTopSubOnePos` is the group of invertible Hahn series close to 1, i.e., those
37+
series such that subtracting one yields a series with strictly positive `orderTop`.
3638
3739
## Main results
3840
* If `R` is a (commutative) (semi-)ring, then so is `HahnSeries Γ R`.
@@ -85,7 +87,7 @@ theorem support_one [MulZeroOneClass R] [Nontrivial R] : support (1 : HahnSeries
8587
support_single_of_ne one_ne_zero
8688

8789
@[simp]
88-
theorem orderTop_one [MulZeroOneClass R] [Nontrivial R] : orderTop (1 : HahnSeries Γ R) = 0 := by
90+
theorem orderTop_one [Zero R] [One R] [NeZero (1 : R)] : orderTop (1 : HahnSeries Γ R) = 0 := by
8991
rw [← single_zero_one, orderTop_single one_ne_zero, WithTop.coe_eq_zero]
9092

9193
@[simp]
@@ -391,10 +393,12 @@ end DistribSMul
391393

392394
end HahnModule
393395

394-
variable [AddCommMonoid Γ] [PartialOrder Γ] [IsOrderedCancelAddMonoid Γ]
395-
396396
namespace HahnSeries
397397

398+
section mul
399+
400+
variable [AddCommMonoid Γ] [PartialOrder Γ] [IsOrderedCancelAddMonoid Γ]
401+
398402
instance [NonUnitalNonAssocSemiring R] : Mul (HahnSeries Γ R) where
399403
mul x y := (HahnModule.of R).symm (x • HahnModule.of R y)
400404

@@ -492,16 +496,41 @@ theorem support_mul_subset_add_support [NonUnitalNonAssocSemiring R] {x y : Hahn
492496
rw [← of_symm_smul_of_eq_mul, ← vadd_eq_add]
493497
exact HahnModule.support_smul_subset_vadd_support
494498

499+
instance [NonUnitalNonAssocSemiring R] : NonUnitalNonAssocSemiring (HahnSeries Γ R) :=
500+
{ inferInstanceAs (AddCommMonoid (HahnSeries Γ R)),
501+
inferInstanceAs (Distrib (HahnSeries Γ R)) with
502+
zero_mul := fun _ => by
503+
ext
504+
simp [coeff_mul]
505+
mul_zero := fun _ => by
506+
ext
507+
simp [coeff_mul] }
508+
509+
end mul
510+
495511
section orderLemmas
496512

497-
variable {Γ : Type*} [AddCommMonoid Γ] [LinearOrder Γ] [IsOrderedCancelAddMonoid Γ]
513+
variable [AddCommMonoid Γ] [LinearOrder Γ] [IsOrderedCancelAddMonoid Γ]
498514
[NonUnitalNonAssocSemiring R]
499515

500516
theorem coeff_mul_order_add_order (x y : HahnSeries Γ R) :
501517
(x * y).coeff (x.order + y.order) = x.leadingCoeff * y.leadingCoeff := by
502518
simp only [← of_symm_smul_of_eq_mul]
503519
exact HahnModule.coeff_smul_order_add_order x y
504520

521+
theorem orderTop_mul_of_nonzero {x y : HahnSeries Γ R} (h : x.leadingCoeff * y.leadingCoeff ≠ 0) :
522+
(x * y).orderTop = x.orderTop + y.orderTop := by
523+
by_cases hx : x = 0; · simp [hx]
524+
by_cases hy : y = 0; · simp [hy]
525+
have : (x * y).coeff (x.order + y.order) ≠ 0 := by rwa [coeff_mul_order_add_order x y]
526+
have hxy : x * y ≠ 0 := fun h ↦ (by simp [h] at this)
527+
rw [← order_eq_orderTop_of_ne_zero hx, ← order_eq_orderTop_of_ne_zero hy,
528+
← order_eq_orderTop_of_ne_zero hxy, ← WithTop.coe_add, WithTop.coe_eq_coe]
529+
refine le_antisymm (order_le_of_coeff_ne_zero this) ?_
530+
rw [HahnSeries.order_of_ne hx, HahnSeries.order_of_ne hy, HahnSeries.order_of_ne hxy,
531+
← Set.IsWF.min_add]
532+
exact Set.IsWF.min_le_min_of_subset support_mul_subset_add_support
533+
505534
theorem orderTop_add_le_mul {x y : HahnSeries Γ R} :
506535
x.orderTop + y.orderTop ≤ (x * y).orderTop := by
507536
rw [← smul_eq_mul]
@@ -519,6 +548,11 @@ theorem order_mul_of_nonzero {x y : HahnSeries Γ R}
519548
order_of_ne <| ne_zero_of_coeff_ne_zero hxy, ← Set.IsWF.min_add]
520549
exact Set.IsWF.min_le_min_of_subset support_mul_subset_add_support
521550

551+
theorem leadingCoeff_mul_of_nonzero {x y : HahnSeries Γ R}
552+
(h : x.leadingCoeff * y.leadingCoeff ≠ 0) :
553+
(x * y).leadingCoeff = x.leadingCoeff * y.leadingCoeff := by
554+
simp only [leadingCoeff_eq, order_mul_of_nonzero h, coeff_mul_order_add_order]
555+
522556
theorem order_single_mul_of_isRegular {g : Γ} {r : R} (hr : IsRegular r)
523557
{x : HahnSeries Γ R} (hx : x ≠ 0) : (((single g) r) * x).order = g + x.order := by
524558
obtain _ | _ := subsingleton_or_nontrivial R
@@ -529,6 +563,10 @@ theorem order_single_mul_of_isRegular {g : Γ} {r : R} (hr : IsRegular r)
529563

530564
end orderLemmas
531565

566+
section ring
567+
568+
variable [AddCommMonoid Γ] [PartialOrder Γ] [IsOrderedCancelAddMonoid Γ]
569+
532570
private theorem mul_assoc' [NonUnitalSemiring R] (x y z : HahnSeries Γ R) :
533571
x * y * z = x * (y * z) := by
534572
ext b
@@ -539,16 +577,6 @@ private theorem mul_assoc' [NonUnitalSemiring R] (x y z : HahnSeries Γ R) :
539577
(fun ⟨⟨i, _j⟩, ⟨k, l⟩⟩ ↦ ⟨(i + k, l), (i, k)⟩) <;>
540578
aesop (add safe Set.add_mem_add) (add simp [add_assoc, mul_assoc])
541579

542-
instance [NonUnitalNonAssocSemiring R] : NonUnitalNonAssocSemiring (HahnSeries Γ R) :=
543-
{ inferInstanceAs (AddCommMonoid (HahnSeries Γ R)),
544-
inferInstanceAs (Distrib (HahnSeries Γ R)) with
545-
zero_mul := fun _ => by
546-
ext
547-
simp [coeff_mul]
548-
mul_zero := fun _ => by
549-
ext
550-
simp [coeff_mul] }
551-
552580
instance [NonUnitalSemiring R] : NonUnitalSemiring (HahnSeries Γ R) :=
553581
{ inferInstanceAs (NonUnitalNonAssocSemiring (HahnSeries Γ R)) with
554582
mul_assoc := mul_assoc' }
@@ -603,15 +631,18 @@ instance [CommRing R] : CommRing (HahnSeries Γ R) :=
603631
{ inferInstanceAs (CommSemiring (HahnSeries Γ R)),
604632
inferInstanceAs (Ring (HahnSeries Γ R)) with }
605633

606-
theorem orderTop_nsmul_le_orderTop_pow {Γ}
607-
[AddCommMonoid Γ] [LinearOrder Γ] [IsOrderedCancelAddMonoid Γ]
608-
[Semiring R] {x : HahnSeries Γ R} {n : ℕ} : n • x.orderTop ≤ (x ^ n).orderTop := by
634+
end ring
635+
636+
theorem orderTop_nsmul_le_orderTop_pow [AddCommMonoid Γ] [LinearOrder Γ]
637+
[IsOrderedCancelAddMonoid Γ] [Semiring R] {x : HahnSeries Γ R} {n : ℕ} :
638+
n • x.orderTop ≤ (x ^ n).orderTop := by
609639
induction n with
610640
| zero =>
611641
simp only [zero_smul, pow_zero]
612-
by_cases h : (0 : R) = 1
613-
· simp [subsingleton_iff_zero_eq_one.mp h]
614-
· simp [nontrivial_of_ne 0 1 h]
642+
by_cases h : NeZero (1 : R)
643+
· simp
644+
· have : Subsingleton R := not_nontrivial_iff_subsingleton.mp fun _ ↦ h NeZero.one
645+
simp
615646
| succ n ih =>
616647
rw [add_nsmul, pow_add]
617648
calc
@@ -620,8 +651,64 @@ theorem orderTop_nsmul_le_orderTop_pow {Γ}
620651
(x ^ n).orderTop + x.orderTop ≤ (x ^ n * x).orderTop := orderTop_add_le_mul
621652
(x ^ n * x).orderTop ≤ (x ^ n * x ^ 1).orderTop := by rw [pow_one]
622653

654+
theorem orderTop_self_sub_one_pos_iff [LinearOrder Γ] [Zero Γ] [NonAssocRing R] [Nontrivial R]
655+
(x : HahnSeries Γ R) :
656+
0 < (x - 1).orderTop ↔ x.orderTop = 0 ∧ x.leadingCoeff = 1 := by
657+
constructor
658+
· intro hx
659+
constructor
660+
· rw [← sub_add_cancel x 1, add_comm, ← orderTop_one (R := R)]
661+
exact orderTop_add_eq_left (Γ := Γ) (R := R) (orderTop_one (R := R) (Γ := Γ) ▸ hx)
662+
· rw [← sub_add_cancel x 1, add_comm, ← leadingCoeff_one (Γ := Γ) (R := R)]
663+
exact leadingCoeff_add_eq_left (Γ := Γ) (R := R) (orderTop_one (R := R) (Γ := Γ) ▸ hx)
664+
· intro h
665+
refine lt_of_le_of_ne (le_of_eq_of_le (by simp_all)
666+
(min_orderTop_le_orderTop_sub (Γ := Γ) (R := R))) <| Ne.symm <|
667+
orderTop_sub_ne h.1 orderTop_one ?_
668+
rw [h.2, leadingCoeff_one]
669+
670+
theorem orderTop_sub_pos [PartialOrder Γ] [Zero Γ] [AddCommGroup R] [One R] {g : Γ} (hg : 0 < g)
671+
(r : R) :
672+
0 < ((1 + single g r) - 1).orderTop := by
673+
by_cases hr : r = 0 <;> simp [hr, hg]
674+
675+
/-- The group of invertible Hahn series close to 1, i.e., those series such that subtracting 1
676+
yields a series with strictly positive `orderTop`. -/
677+
def orderTopSubOnePos (Γ R) [LinearOrder Γ] [AddCommMonoid Γ] [IsOrderedCancelAddMonoid Γ]
678+
[CommRing R] : Subgroup (HahnSeries Γ R)ˣ where
679+
carrier := { x : (HahnSeries Γ R)ˣ | 0 < (x.val - 1).orderTop}
680+
mul_mem' := by
681+
intro x y hx hy
682+
obtain (_|_) := subsingleton_or_nontrivial R
683+
· simp
684+
· simp_all only [Set.mem_setOf_eq, orderTop_self_sub_one_pos_iff]
685+
have h1 : x.val.leadingCoeff * y.val.leadingCoeff = 1 := by rw [hx.2, hy.2, mul_one]
686+
constructor
687+
· rw [Units.val_mul, orderTop_mul_of_nonzero (by simp [h1]), hx.1, hy.1, add_zero]
688+
· rw [Units.val_mul, leadingCoeff_mul_of_nonzero (h1 ▸ one_ne_zero), h1]
689+
one_mem' := by simp
690+
inv_mem' {y} h := by
691+
suffices 0 < (y.inv - 1).orderTop by exact this
692+
obtain (_|_) := subsingleton_or_nontrivial R
693+
· simp
694+
· have : 0 < (y.val - 1).orderTop := h
695+
rw [orderTop_self_sub_one_pos_iff] at this
696+
have nz : y.val.leadingCoeff * y.inv.leadingCoeff ≠ 0 := by
697+
rw [this.2, one_mul]
698+
exact leadingCoeff_ne_zero.mpr (by simp)
699+
refine y.inv.orderTop_self_sub_one_pos_iff.mpr ⟨?_, ?_⟩
700+
· simpa [this.1, y.val_inv] using (orderTop_mul_of_nonzero nz).symm
701+
· simpa [this.2, y.val_inv] using (leadingCoeff_mul_of_nonzero nz).symm
702+
703+
@[simp]
704+
theorem mem_orderTopSubOnePos_iff [LinearOrder Γ] [AddCommMonoid Γ] [IsOrderedCancelAddMonoid Γ]
705+
[CommRing R] (x : (HahnSeries Γ R)ˣ) :
706+
x ∈ orderTopSubOnePos Γ R ↔ 0 < (x.val - 1).orderTop := .rfl
707+
623708
end HahnSeries
624709

710+
variable [AddCommMonoid Γ] [PartialOrder Γ] [IsOrderedCancelAddMonoid Γ]
711+
625712
namespace HahnModule
626713

627714
variable [PartialOrder Γ'] [AddAction Γ Γ'] [IsOrderedCancelVAdd Γ Γ'] [AddCommMonoid V]

0 commit comments

Comments
 (0)