@@ -353,4 +353,47 @@ end Archimedean
353353
354354end 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+
356399end HahnSeries
0 commit comments