Skip to content

Commit f924b1d

Browse files
committed
feat(Valuation): uniformizer of discrete valuation (#30259)
1 parent f579ecf commit f924b1d

File tree

1 file changed

+40
-0
lines changed
  • Mathlib/RingTheory/Valuation/ValuativeRel

1 file changed

+40
-0
lines changed

Mathlib/RingTheory/Valuation/ValuativeRel/Basic.lean

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,13 @@ variable (R) in
820820
class IsNontrivial where
821821
condition : ∃ γ : ValueGroupWithZero R, γ ≠ 0 ∧ γ ≠ 1
822822

823+
lemma IsNontrivial.exists_lt_one [IsNontrivial R] :
824+
∃ γ : ValueGroupWithZero R, 0 < γ ∧ γ < 1 := by
825+
obtain ⟨γ, h0, h1⟩ := IsNontrivial.condition (R := R)
826+
obtain h1 | h1 := lt_or_lt_iff_ne.mpr h1
827+
· exact ⟨γ, zero_lt_iff.mpr h0, h1⟩
828+
· exact ⟨γ⁻¹, by simpa [zero_lt_iff], by simp [inv_lt_one_iff₀, h0, h1]⟩
829+
823830
lemma isNontrivial_iff_nontrivial_units :
824831
IsNontrivial R ↔ Nontrivial (ValueGroupWithZero R)ˣ := by
825832
constructor
@@ -883,6 +890,39 @@ class IsDiscrete where
883890
has_maximal_element :
884891
∃ γ : ValueGroupWithZero R, γ < 1 ∧ (∀ δ : ValueGroupWithZero R, δ < 1 → δ ≤ γ)
885892

893+
variable (R) in
894+
/-- The maximal element that is `< 1` in the value group of a discrete valuation. -/
895+
-- TODO: Link to `Valuation.IsUniformizer` once we connect `Valuation.IsRankOneDiscrete` with
896+
-- `ValuativeRel`.
897+
noncomputable
898+
def uniformizer [IsDiscrete R] : ValueGroupWithZero R :=
899+
IsDiscrete.has_maximal_element.choose
900+
901+
lemma uniformizer_lt_one [IsDiscrete R] :
902+
uniformizer R < 1 := IsDiscrete.has_maximal_element.choose_spec.1
903+
904+
lemma le_uniformizer_iff [IsDiscrete R] {a : ValueGroupWithZero R} :
905+
a ≤ uniformizer R ↔ a < 1 :=
906+
fun h ↦ h.trans_lt uniformizer_lt_one,
907+
IsDiscrete.has_maximal_element.choose_spec.2 a⟩
908+
909+
lemma uniformizer_pos [IsDiscrete R] [IsNontrivial R] :
910+
0 < uniformizer R := by
911+
obtain ⟨γ, hγ, hγ'⟩ := IsNontrivial.exists_lt_one (R := R)
912+
exact hγ.trans_le (le_uniformizer_iff.mpr hγ')
913+
914+
@[simp]
915+
lemma uniformizer_ne_zero [IsDiscrete R] [IsNontrivial R] :
916+
uniformizer R ≠ 0 :=
917+
uniformizer_pos.ne'
918+
919+
lemma uniformizer_inv_le_iff [IsDiscrete R] [IsNontrivial R] {a : ValueGroupWithZero R} :
920+
(uniformizer R)⁻¹ ≤ a ↔ 1 < a := by
921+
by_cases ha : a = 0
922+
· simp [ha]
923+
replace ha : 0 < a := bot_lt_iff_ne_bot.mpr ha
924+
rw [inv_le_comm₀ uniformizer_pos ha, le_uniformizer_iff, inv_lt_one₀ ha]
925+
886926
end ValuativeRel
887927

888928
open Topology ValuativeRel in

0 commit comments

Comments
 (0)