Skip to content

Commit 77a1948

Browse files
committed
chore: notation R⟦Γ⟧ = HahnSeries Γ R (#32670)
As proposed on [Zulip](https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Notation.20for.20Hahn.20series/with/562859530). This technically clashes with `R⟦X⟧` for power series, but a similar clash already exists between `R[G]` for `MonoidAlgebra` and `R[X]` for `Polynomial`, so it should be fine.
1 parent 034d7b7 commit 77a1948

File tree

13 files changed

+449
-454
lines changed

13 files changed

+449
-454
lines changed

Mathlib/Algebra/Order/Module/HahnEmbedding.lean

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ This file proves a variant of the Hahn embedding theorem:
2121
2222
For a linearly ordered module `M` over an Archimedean division ring `K`,
2323
there exists a strictly monotone linear map to lexicographically ordered
24-
`HahnSeries (FiniteArchimedeanClass M) R` with an archimedean `K`-module `R`,
24+
`R⟦FiniteArchimedeanClass M` with an archimedean `K`-module `R`,
2525
as long as there are embeddings from a certain family of Archimedean submodules to `R`.
2626
2727
The family of Archimedean submodules `HahnEmbedding.ArchimedeanStrata K M` is indexed by
@@ -35,7 +35,7 @@ to a proof of the classic Hahn embedding theorem. (See `hahnEmbedding_isOrderedA
3535
## Main theorem
3636
3737
* `hahnEmbedding_isOrderedModule`:
38-
there exists a strictly monotone `M →ₗ[K] Lex (HahnSeries (FiniteArchimedeanClass M) R)` that maps
38+
there exists a strictly monotone `M →ₗ[K] Lex R⟦FiniteArchimedeanClass M` that maps
3939
`ArchimedeanClass M` to `HahnSeries.orderTop` in the expected way, as long as
4040
`HahnEmbedding.Seed K M R` is nonempty.
4141
@@ -52,13 +52,13 @@ We start with `HahnEmbedding.ArchimedeanStrata` that gives a family of Archimede
5252
and a "seed" `HahnEmbedding.Seed` that specifies how to embed each
5353
`HahnEmbedding.ArchimedeanStrata.stratum` into `R`.
5454
55-
From these, we create a partial map from the direct sum of all `stratum` to `HahnSeries Γ R`.
55+
From these, we create a partial map from the direct sum of all `stratum` to `R⟦Γ⟧`.
5656
If `ArchimedeanClass M` is finite, the direct sum is the entire `M` and we are done
5757
(though we don't handle this case separately). Otherwise, we will extend the map to `M` in the
5858
following steps.
5959
-/
6060

61-
open ArchimedeanClass DirectSum
61+
open ArchimedeanClass DirectSum HahnSeries
6262

6363
variable {K : Type*} [DivisionRing K] [LinearOrder K] [IsOrderedRing K] [Archimedean K]
6464
variable {M : Type*} [AddCommGroup M] [LinearOrder M] [IsOrderedAddMonoid M]
@@ -237,7 +237,7 @@ theorem hahnCoeff_apply {x : seed.baseDomain} {f : Π₀ c, seed.stratum c}
237237
/-- Combining all `HahnEmbedding.Seed.coeff` as
238238
a partial linear map from `HahnEmbedding.Seed.baseDomain` to `HahnSeries`. -/
239239
noncomputable
240-
def baseEmbedding : M →ₗ.[K] Lex (HahnSeries (FiniteArchimedeanClass M) R) where
240+
def baseEmbedding : M →ₗ.[K] Lex R⟦FiniteArchimedeanClass M where
241241
domain := seed.baseDomain
242242
toFun := (toLexLinearEquiv _ _).toLinearMap ∘ₗ (HahnSeries.ofFinsuppLinearMap _) ∘ₗ
243243
(Finsupp.lcomapDomain _ Subtype.val_injective) ∘ₗ
@@ -268,7 +268,7 @@ transferring `ArchimedeanClass` to `HahnEmbedding.orderTop`, and being "truncati
268268

269269
/-- A partial linear map is called a "partial Hahn embedding" if it extends
270270
`HahnEmbedding.Seed.baseEmbedding`, is strictly monotone, and is truncation-closed. -/
271-
structure IsPartial (f : M →ₗ.[K] Lex (HahnSeries (FiniteArchimedeanClass M) R)) : Prop where
271+
structure IsPartial (f : M →ₗ.[K] Lex R⟦FiniteArchimedeanClass M) : Prop where
272272
/-- A partial Hahn embedding is strictly monotone. -/
273273
strictMono : StrictMono f
274274
/-- A partial Hahn embedding always extends `baseEmbedding`. -/
@@ -395,7 +395,7 @@ theorem isPartial_baseEmbedding [IsOrderedAddMonoid R] : IsPartial seed seed.bas
395395
end Seed
396396

397397
/-- The type of all partial Hahn embeddings. -/
398-
abbrev Partial := {f : M →ₗ.[K] Lex (HahnSeries (FiniteArchimedeanClass M) R) // IsPartial seed f}
398+
abbrev Partial := {f : M →ₗ.[K] Lex R⟦FiniteArchimedeanClass M // IsPartial seed f}
399399

400400
namespace Partial
401401
variable {seed} (f : Partial seed)
@@ -405,7 +405,7 @@ instance [IsOrderedAddMonoid R] : Inhabited (Partial seed) where
405405
default := ⟨seed.baseEmbedding, seed.isPartial_baseEmbedding⟩
406406

407407
/-- `HahnEmbedding.Partial` as an `OrderedAddMonoidHom`. -/
408-
def toOrderAddMonoidHom : f.val.domain →+o Lex (HahnSeries (FiniteArchimedeanClass M) R) where
408+
def toOrderAddMonoidHom : f.val.domain →+o Lex R⟦FiniteArchimedeanClass M where
409409
__ := f.val.toFun
410410
map_zero' := by simp
411411
monotone' := f.prop.strictMono.monotone
@@ -586,7 +586,7 @@ theorem isWF_support_evalCoeff [IsOrderedAddMonoid R] [Archimedean R] (x : M) :
586586
/-- Promote `HahnEmbedding.Partial.evalCoeff`'s output to a new `HahnSeries`. -/
587587
noncomputable
588588
def eval [IsOrderedAddMonoid R] [Archimedean R] (x : M) :
589-
Lex (HahnSeries (FiniteArchimedeanClass M) R) :=
589+
Lex R⟦FiniteArchimedeanClass M :=
590590
toLex { coeff := f.evalCoeff x
591591
isPWO_support' := (f.isWF_support_evalCoeff x).isPWO }
592592

@@ -772,7 +772,7 @@ theorem eval_lt [IsOrderedAddMonoid R] [Archimedean R] {x : M} (hx : x ∉ f.val
772772
/-- Extend `f` to a larger partial linear map by adding a new `x`. -/
773773
noncomputable
774774
def extendFun [IsOrderedAddMonoid R] [Archimedean R] {x : M} (hx : x ∉ f.val.domain) :
775-
M →ₗ.[K] Lex (HahnSeries (FiniteArchimedeanClass M) R) :=
775+
M →ₗ.[K] Lex R⟦FiniteArchimedeanClass M :=
776776
.supSpanSingleton f.val x (eval f x) hx
777777

778778
theorem extendFun_strictMono [IsOrderedAddMonoid R] [Archimedean R] {x : M}
@@ -898,7 +898,7 @@ embeddings by adding new elements, the maximal embedding must have the maximal d
898898
`HahnEmbedding.Partial`. -/
899899
noncomputable
900900
def sSupFun {c : Set (Partial seed)} (hc : DirectedOn (· ≤ ·) c) :
901-
M →ₗ.[K] Lex (HahnSeries (FiniteArchimedeanClass M) R) :=
901+
M →ₗ.[K] Lex R⟦FiniteArchimedeanClass M :=
902902
LinearPMap.sSup ((·.val) '' c) (hc.mono_comp (by simp))
903903

904904
theorem sSupFun_strictMono [IsOrderedAddMonoid R] {c : Set (Partial seed)}
@@ -988,13 +988,13 @@ end HahnEmbedding
988988

989989
/-- **Hahn embedding theorem for an ordered module**
990990
991-
There exists a strictly monotone `M →ₗ[K] Lex (HahnSeries (FiniteArchimedeanClass M) R)` that maps
991+
There exists a strictly monotone `M →ₗ[K] Lex R⟦FiniteArchimedeanClass M` that maps
992992
`ArchimedeanClass M` to `HahnSeries.orderTop` in the expected way, as long as
993993
`HahnEmbedding.Seed K M R` is nonempty. The `HahnEmbedding.Partial` with maximal domain is the
994994
desired embedding. -/
995995
theorem hahnEmbedding_isOrderedModule [IsOrderedAddMonoid R] [Archimedean R]
996996
[h : Nonempty (HahnEmbedding.Seed K M R)] :
997-
∃ f : M →ₗ[K] Lex (HahnSeries (FiniteArchimedeanClass M) R), StrictMono f ∧
997+
∃ f : M →ₗ[K] Lex R⟦FiniteArchimedeanClass M, StrictMono f ∧
998998
∀ (a : M), mk a = FiniteArchimedeanClass.withTopOrderIso M (ofLex (f a)).orderTop := by
999999
obtain ⟨e, hdomain⟩ := HahnEmbedding.Partial.exists_domain_eq_top h.some
10001000
obtain harch := e.orderTop_eq_archimedeanClassMk

Mathlib/Algebra/Order/Ring/Archimedean.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ reasons:
3333
3434
* In the ring version of Hahn embedding theorem, the subtype `FiniteArchimedeanClass R` of non-top
3535
elements in `ArchimedeanClass R` naturally becomes the additive abelian group for the ring
36-
`HahnSeries (FiniteArchimedeanClass R) ℝ`.
36+
`ℝ⟦FiniteArchimedeanClass R`.
3737
* The order we defined on `ArchimedeanClass R` matches the order on `AddValuation`, rather than the
3838
one on `Valuation`.
3939
-/

0 commit comments

Comments
 (0)