Skip to content

Commit ed00a78

Browse files
committed
feat(RingTheory/HahnSeries): embDomain as OrderAddMonoidHom; orderTop of embDomain (#29421)
These will be used in #27268 Hahn embedding theorem
1 parent f70fb8e commit ed00a78

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

Mathlib/RingTheory/HahnSeries/Basic.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,21 @@ theorem embDomain_injective {f : Γ ↪o Γ'} :
484484
have xyg := xy (f g)
485485
rwa [embDomain_coeff, embDomain_coeff] at xyg
486486

487+
@[simp]
488+
theorem orderTop_embDomain {Γ : Type*} [LinearOrder Γ] {f : Γ ↪o Γ'} {x : HahnSeries Γ R} :
489+
(embDomain f x).orderTop = WithTop.map f x.orderTop := by
490+
obtain rfl | hx := eq_or_ne x 0
491+
· simp
492+
rw [← WithTop.coe_untop x.orderTop (by simpa using hx), WithTop.map_coe]
493+
apply orderTop_eq_of_le
494+
· simpa using coeff_orderTop_ne (by simp)
495+
intro y hy
496+
obtain ⟨z, hz, rfl⟩ :=
497+
(Set.mem_image _ _ _).mp <| Set.mem_of_subset_of_mem support_embDomain_subset hy
498+
rw [OrderEmbedding.le_iff_le, WithTop.untop_le_iff]
499+
apply orderTop_le_of_coeff_ne_zero
500+
simpa using hz
501+
487502
end Domain
488503

489504
end Zero

Mathlib/RingTheory/HahnSeries/Lex.lean

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,4 +353,47 @@ end Archimedean
353353

354354
end OrderedGroup
355355

356+
section EmbDomain
357+
variable [PartialOrder R] {Γ' : Type*} [LinearOrder Γ'] (f : Γ ↪o Γ')
358+
359+
/-- `HahnSeries.embDomain` as an `OrderEmbedding`. -/
360+
@[simps]
361+
noncomputable
362+
def embDomainOrderEmbedding [Zero R] : Lex (HahnSeries Γ R) ↪o Lex (HahnSeries Γ' R) where
363+
toFun a := toLex (embDomain f (ofLex a))
364+
inj' := toLex.injective.comp (embDomain_injective.comp (ofLex.injective))
365+
map_rel_iff' {a b} := by
366+
simp_rw [le_iff_lt_or_eq, lt_iff]
367+
simp only [Function.Embedding.coeFn_mk, ofLex_toLex, EmbeddingLike.apply_eq_iff_eq]
368+
constructor
369+
· rintro (⟨i, hj, hi⟩ | heq)
370+
· have himem : i ∈ Set.range f := by
371+
contrapose! hi
372+
simp [embDomain_notin_range hi]
373+
obtain ⟨k, rfl⟩ := himem
374+
refine Or.inl ⟨k, fun j hjk ↦ ?_, by simpa using hi⟩
375+
simpa using hj (f j) (f.lt_iff_lt.mpr hjk)
376+
· exact Or.inr <| embDomain_injective.comp (ofLex.injective) heq
377+
· rintro (⟨i, hj, hi⟩ | rfl)
378+
· refine Or.inl ⟨f i, fun k hki ↦ ?_, by simpa using hi⟩
379+
by_cases hkmem : k ∈ Set.range f
380+
· obtain ⟨j', rfl⟩ := hkmem
381+
simpa using hj _ <| f.lt_iff_lt.mp hki
382+
· simp_rw [embDomain_notin_range hkmem]
383+
· simp
384+
385+
/-- `HahnSeries.embDomain` as an `OrderAddMonoidHom`. -/
386+
@[simps]
387+
noncomputable
388+
def embDomainOrderAddMonoidHom [AddMonoid R] : Lex (HahnSeries Γ R) →+o Lex (HahnSeries Γ' R) where
389+
__ := (embDomainOrderEmbedding f).toOrderHom
390+
map_zero' := by simp
391+
map_add' := by simp [embDomainOrderEmbedding, embDomain_add]
392+
393+
theorem embDomainOrderAddMonoidHom_injective [AddMonoid R] :
394+
Function.Injective (embDomainOrderAddMonoidHom f (R := R)) :=
395+
(embDomainOrderEmbedding f).injective
396+
397+
end EmbDomain
398+
356399
end HahnSeries

0 commit comments

Comments
 (0)