@@ -3,8 +3,17 @@ Copyright (c) 2024 María Inés de Frutos-Fernández, Filippo A. E. Nuccio. All
33Released under Apache 2.0 license as described in the file LICENSE.
44Authors: María Inés de Frutos-Fernández, Filippo A. E. Nuccio
55-/
6- import LocalClassFieldTheory.ForMathlib.WithZero
7- import Mathlib.Algebra.Order.Group.Cyclic
6+ --import Mathlib.Algebra.Order.Group.Cyclic --**TODO** : reinstate after #26584 is merged.
7+ import LocalClassFieldTheory.FromMathlib.Cyclic --**TODO** : remove after #26584 is merged.
8+ import Mathlib.Analysis.Normed.Ring.Lemmas
9+ import Mathlib.RingTheory.DedekindDomain.AdicValuation
10+ import Mathlib.RingTheory.DiscreteValuationRing.Basic
11+ import Mathlib.RingTheory.PrincipalIdealDomainOfPrime
12+ import Mathlib.RingTheory.Valuation.Discrete.Basic
13+
14+ /- import LocalClassFieldTheory.ForMathlib.WithZero
15+ --import Mathlib.Algebra.Order.Group.Cyclic --**TODO** : reinstate after #26584 is merged.
16+ import LocalClassFieldTheory.FromMathlib.Cyclic --**TODO** : remove after #26584 is merged.
817import Mathlib.Analysis.Normed.Field.Lemmas
918import Mathlib.Data.Int.WithZero
1019import Mathlib.RingTheory.DedekindDomain.AdicValuation
@@ -13,7 +22,7 @@ import Mathlib.RingTheory.PrincipalIdealDomainOfPrime
1322import Mathlib.RingTheory.Valuation.Discrete.Basic
1423import Mathlib.RingTheory.Valuation.Integers
1524import Mathlib.RingTheory.Valuation.RankOne
16- import Mathlib.GroupTheory.SpecificGroups.Cyclic
25+ import Mathlib.GroupTheory.SpecificGroups.Cyclic -/
1726
1827import Mathlib.Algebra.GroupWithZero.Int
1928
@@ -127,16 +136,33 @@ lemma IsUniformizer_val_ne_zero {π : K} (hπ : v.IsUniformizer π) : v π ≠ 0
127136
128137open MonoidHomWithZero Subgroup
129138
139+ --TODO: move after `generator_zpowers_eq_valueGroup`
140+ lemma IsRankOneDiscrete.generator_zpowers_mem_valueGroup :
141+ (IsRankOneDiscrete.generator v) ∈ valueGroup v := by
142+ rw [← IsRankOneDiscrete.generator_zpowers_eq_valueGroup]
143+ exact mem_zpowers (IsRankOneDiscrete.generator v)
144+
145+ lemma valueGroup_genLTOne_eq_generator :
146+ Subgroup.genLTOne (valueGroup v) = IsRankOneDiscrete.generator v := by
147+ rw [eq_comm]
148+ apply (valueGroup v).genLTOne_unique
149+ ⟨IsRankOneDiscrete.generator v, IsRankOneDiscrete.generator_zpowers_mem_valueGroup⟩
150+ constructor
151+ · exact Subtype.coe_lt_coe.mp (IsRankOneDiscrete.generator_lt_one v)
152+ · have := IsRankOneDiscrete.generator_zpowers_eq_valueGroup v
153+ rw [eq_top_iff']
154+ intro x
155+ have hx : x.1 ∈ zpowers (IsRankOneDiscrete.generator v) := by
156+ rw [IsRankOneDiscrete.generator_zpowers_eq_valueGroup v]; exact x.2
157+ obtain ⟨k, hk⟩ := hx
158+ exact ⟨k, by ext1; exact hk⟩
159+
130160lemma IsUniformizer_val_generates_unitsMapRange {π : K} (hπ : v.IsUniformizer π) :
131161 valueGroup v = zpowers (Units.mk0 (v π) (v.IsUniformizer_val_ne_zero hπ)) := by
132- --rw [(valueGroup v).genLTOne_zpowers_eq_top]
133- sorry /- rw [← v.unitsMapRange.genLTOne_zpowers_eq_top]
162+ rw [← (valueGroup v).genLTOne_zpowers_eq_top]
134163 congr
135- simp_all [isUniformizer_val, Units.mk0_val] -/
136-
137- --Units.mk0 (zpowers (v π)) (v.IsUniformizer_val_ne_zero) := sorry--((/- WithZero.unitsMap -/(v.IsUniformizer_val_ne_zero hπ))) := by
138- -- convert (Mul.exists_generator_lt_one ℤ v.unitsMapRange_ne_bot).choose_spec.2.symm
139- -- rw [← WithZero.coe_inj, ← hπ, WithZero.coe_unitsMap]
164+ simp_all [isUniformizer_val, Units.mk0_val]
165+ exact valueGroup_genLTOne_eq_generator
140166
141167variable (v) in
142168/-- The structure `Uniformizer` bundles together the term in the ring and a proof that it is a
@@ -237,40 +263,23 @@ local notation "K₀" => v.valuationSubring
237263theorem exists_IsUniformizer_of_isNontrivial :
238264 ∃ π : K₀, IsUniformizer v (π : K) := by
239265 simp only [IsUniformizer_iff, Subtype.exists, mem_valuationSubring_iff, exists_prop]
240- set g := (⊤ : Subgroup (valueGroup v)).genLTOne with hg
241- have := valueGroup_eq_range (f := v)
242- have hg_mem : g.1 .1 ∈ ((range v) \ {0 }) := by
266+ set g := (valueGroup v).genLTOne with hg
267+ have hg_mem : g.1 ∈ ((range v) \ {0 }) := by
243268 rw [← valueGroup_eq_range, hg]
244- exact mem_image_of_mem Units.val (Subtype.coe_prop _)
269+ exact mem_image_of_mem Units.val (valueGroup v).genLTOne_mem
245270 obtain ⟨⟨π, hπ⟩, hγ0 ⟩ := hg_mem
246271 use π
247272 rw [hπ, hg]
248- constructor
249- · exact_mod_cast (le_of_lt (⊤ : Subgroup (valueGroup v)).genLTOne_lt_one)
250- ·
251- sorry
252- /- · apply le_of_lt
253- rw [← unitsMap_apply, hπ]
254- have := Subgroup.genLTOne_lt_one (H := v.unitsMapRange)
255- rw [ hg ]
256- rw [← Units.val_one]
257- rw [ Units.val_lt_val ]
258- rw [ Subgroup.genLTOne_val_eq_genLTOne ]
259- exact this
260- · rw [← unitsMap_apply, hπ, hg]
261- rw [ Subgroup.genLTOne_val_eq_genLTOne ]
262- -- **FAE : The above `splitting` should not be performed** -/
263-
264-
265- instance [IsNontrivial v] : Nonempty (Uniformizer v) :=
273+ exact ⟨le_of_lt (valueGroup v).genLTOne_lt_one, by rw [valueGroup_genLTOne_eq_generator]⟩
274+
275+ instance : Nonempty (Uniformizer v) :=
266276 ⟨⟨(exists_IsUniformizer_of_isNontrivial v).choose,
267277 (exists_IsUniformizer_of_isNontrivial v).choose_spec⟩⟩
268278
269279end Field
270280
271281end IsNontrivial
272282
273-
274283open LinearOrderedCommGroup
275284
276285
@@ -286,7 +295,6 @@ variable {K : Type w₁} [Field K] (v : Valuation K Γ)
286295the notion of `valuation_subring` instead of the weaker one of `integer`s to access the
287296corresponding API. -/
288297local notation "K₀" => v.valuationSubring
289-
290298section Uniformizer
291299
292300variable {v} [hv : v.IsRankOneDiscrete]
@@ -307,20 +315,21 @@ theorem associated_of_IsUniformizer (π₁ π₂ : Uniformizer v) : Associated
307315 apply_fun ((↑·) : K₀ → K) using Subtype.val_injective
308316 simp [hp, ← mul_assoc, mul_inv_cancel₀ (IsUniformizer_ne_zero π₁.2 )]
309317
318+ open MonoidHomWithZero in
310319theorem pow_Uniformizer {r : K₀} (hr : r ≠ 0 ) (π : Uniformizer v) :
311320 ∃ n : ℕ, ∃ u : K₀ˣ, r = (π.1 ^ n).1 * u.1 := by
312- sorry
313- /- have hr₀ : v r ≠ 0 := by rw [ne_eq, zero_iff, Subring.coe_eq_zero_iff]; exact hr
314- set vr := unitsMap v (Units.mk0 r.1 (by norm_cast)) with hvr_def
315- have hvr : vr ∈ v.unitsMapRange := by
316- simp only [unitsMapRange, Subgroup.mem_mk, Set.mem_range, unitsMap_apply]
317- have hr' : (r : K) ≠ 0 := by simpa [ne_eq, ZeroMemClass.coe_eq_zero] using hr
318- use Units.mk0 r hr'
321+ have hr₀ : v r ≠ 0 := by rw [ne_eq, zero_iff, Subring.coe_eq_zero_iff]; exact hr
322+ set vr : Γˣ := Units.mk0 (v r) hr₀ with hvr_def
323+ have hvr : vr ∈ (valueGroup v) := by
324+ apply mem_valueGroup
325+ rw [hvr_def, Units.val_mk0 hr₀]
326+ exact mem_range_self _
319327 rw [IsUniformizer_val_generates_unitsMapRange π.2 , Subgroup.mem_zpowers_iff] at hvr
320328 obtain ⟨m, hm⟩ := hvr
321329 have hm' : v π.val ^ m = v r := by
322330 rw [hvr_def] at hm
323- simp [← v.unitsMap_of_ne_zero (x := r.1) (by norm_cast), ← hm]
331+ rw [← Units.val_mk0 hr₀, ← hm]
332+ simp [Units.val_zpow_eq_zpow_val, Units.val_mk0]
324333 have hm₀ : 0 ≤ m := by
325334 rw [← zpow_le_one_iff_right_of_lt_one₀ (IsUniformizer_val_pos π.2 )
326335 (IsUniformizer_val_lt_one π.2 ), hm']
@@ -339,7 +348,7 @@ theorem pow_Uniformizer {r : K₀} (hr : r ≠ 0) (π : Uniformizer v) :
339348 Integers.isUnit_of_one (integer.integers v) (isUnit_iff_ne_zero.mpr ha₀) hpow
340349 use h_unit_a.unit
341350 rw [IsUnit.unit_spec, Subring.coe_pow, ha, ← mul_assoc, zpow_neg, hn, zpow_natCast,
342- mul_inv_cancel₀ (pow_ne_zero _ (Uniformizer_ne_zero π)), one_mul] -/
351+ mul_inv_cancel₀ (pow_ne_zero _ (Uniformizer_ne_zero π)), one_mul]
343352
344353theorem Uniformizer_is_generator (π : Uniformizer v) :
345354 maximalIdeal v.valuationSubring = Ideal.span {π.1 } := by
@@ -447,7 +456,7 @@ noncomputable instance _root_.DiscreteValuation.rankOne : RankOne v where
447456
448457end RankOne -/
449458
450- theorem ideal_isPrincipal [v.IsNontrivial] [IsCyclic Γˣ] (I : Ideal K₀) : I.IsPrincipal := by
459+ theorem ideal_isPrincipal /- [ v.IsNontrivial ] [IsCyclic Γˣ] -/ (I : Ideal K₀) : I.IsPrincipal := by
451460 suffices ∀ P : Ideal K₀, P.IsPrime → Submodule.IsPrincipal P by
452461 exact (IsPrincipalIdealRing.of_prime this).principal I
453462 intro P hP
@@ -467,11 +476,11 @@ theorem ideal_isPrincipal [v.IsNontrivial] [IsCyclic Γˣ] (I : Ideal K₀) : I.
467476 rw [← Ideal.IsMaximal.eq_of_le (IsLocalRing.maximalIdeal.isMaximal K₀) hP.ne_top hx_mem]
468477 exact ⟨π.1 , Uniformizer_is_generator π⟩
469478
470- theorem integer_isPrincipalIdealRing [v.IsNontrivial] [IsCyclic Γˣ] : IsPrincipalIdealRing K₀ :=
479+ theorem integer_isPrincipalIdealRing /- [ v.IsNontrivial ] [IsCyclic Γˣ] -/ : IsPrincipalIdealRing K₀ :=
471480 ⟨fun I ↦ ideal_isPrincipal v I⟩
472481
473482/-- This is Chapter I, Section 1, Proposition 1 in Serre's Local Fields -/
474- instance dvr_of_isDiscrete [v.IsNontrivial] [IsCyclic Γˣ] :
483+ instance dvr_of_isDiscrete /- [ v.IsNontrivial ] [IsCyclic Γˣ] -/ :
475484 IsDiscreteValuationRing K₀ where
476485 toIsPrincipalIdealRing := integer_isPrincipalIdealRing v
477486 toIsLocalRing := inferInstance
@@ -568,5 +577,4 @@ noncomputable def dvrEquivUnitBall :
568577 (topEquiv.symm.trans (equivMapOfInjective ⊤ (algebraMap A (FractionRing A))
569578 (IsFractionRing.injective A _))).trans (RingEquiv.subringCongr algebraMap_eq_integers)
570579
571-
572580end Valuation
0 commit comments