Skip to content

Commit eaffd69

Browse files
committed
sorry-free
1 parent 15818cd commit eaffd69

1 file changed

Lines changed: 24 additions & 38 deletions

File tree

  • LocalClassFieldTheory/DiscreteValuationRing

LocalClassFieldTheory/DiscreteValuationRing/Basic.lean

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -214,44 +214,22 @@ end IsRankOneDiscrete
214214

215215
section IsNontrivial
216216

217-
open MonoidHomWithZero
217+
open LinearOrderedCommGroup MonoidHomWithZero
218218

219219
section Ring
220220

221221
variable {K : Type*} [Ring K] (v : Valuation K Γ) [IsCyclic (valueGroup v)]
222222
[Nontrivial (valueGroup v)]
223223

224-
-- **TODO**: wait for Nontrivial (valueMonoid v) and restate.
225-
instance IsRankOneDiscrete.mk' /- {π : K}
226-
(hπ : v π = (LinearOrderedCommGroup.genLTOne (valueGroup v)).1) -/ :
227-
IsRankOneDiscrete v := by
228-
/- have hπ0 : v π ≠ 0 := sorry
229-
have h1 : ((1 : (valueGroup v)) : Γˣ) = 1 := rfl
230-
apply IsRankOneDiscrete.mk
231-
use Units.mk0 (v π) hπ0
232-
constructor
233-
· --rw [← LinearOrderedCommGroup.Subgroup.genLTOne_zpowers_eq_top (H := valueGroup v)]
234-
sorry
235-
· simp only [hπ, LinearOrderedCommGroup.genLTOne_eq_of_top, Units.mk0_val, ← h1]
236-
exact Subtype.coe_lt_coe.mpr (LinearOrderedCommGroup.Subgroup.genLTOne_lt_one ⊤) -/
237-
sorry
238-
239-
/- apply IsRankOneDiscrete.mk
240-
use Units.mk0 (v π) (IsUniformizer_val_ne_zero hπ)
241-
constructor
242-
· sorry
243-
· sorry -/
244-
/- simp [hπ, genLTOne_eq_of_top, Units.mk0_val]
245-
refine ⟨?_, by use π⟩
246-
simpa [Units.mk0_val, Subgroup.genLTOne_zpowers_eq_top, Subgroup.mem_top]
247-
using Subgroup.genLTOne_lt_one ⊤ -/
224+
instance IsRankOneDiscrete.mk' : IsRankOneDiscrete v :=
225+
⟨(valueGroup v).genLTOne,
226+
⟨(valueGroup v).genLTOne_zpowers_eq_top, (valueGroup v).genLTOne_lt_one⟩⟩
227+
248228

249229
end Ring
250230

251231
section Field
252232

253-
open LinearOrderedCommGroup
254-
255233
variable {K : Type*} [Field K] (v : Valuation K Γ) [IsCyclic (valueGroup v)]
256234
[Nontrivial (valueGroup v)]
257235

@@ -456,7 +434,8 @@ noncomputable instance _root_.DiscreteValuation.rankOne : RankOne v where
456434
457435
end RankOne -/
458436

459-
theorem ideal_isPrincipal /- [v.IsNontrivial] [IsCyclic Γˣ] -/ (I : Ideal K₀) : I.IsPrincipal := by
437+
theorem ideal_isPrincipal [IsCyclic (valueGroup v)] [Nontrivial (valueGroup v)] (I : Ideal K₀) :
438+
I.IsPrincipal := by
460439
suffices ∀ P : Ideal K₀, P.IsPrime → Submodule.IsPrincipal P by
461440
exact (IsPrincipalIdealRing.of_prime this).principal I
462441
intro P hP
@@ -476,11 +455,11 @@ theorem ideal_isPrincipal /- [v.IsNontrivial] [IsCyclic Γˣ] -/ (I : Ideal K₀
476455
rw [← Ideal.IsMaximal.eq_of_le (IsLocalRing.maximalIdeal.isMaximal K₀) hP.ne_top hx_mem]
477456
exact ⟨π.1, Uniformizer_is_generator π⟩
478457

479-
theorem integer_isPrincipalIdealRing /- [v.IsNontrivial] [IsCyclic Γˣ] -/ : IsPrincipalIdealRing K₀ :=
480-
fun I ↦ ideal_isPrincipal v I⟩
458+
theorem integer_isPrincipalIdealRing [IsCyclic (valueGroup v)] [Nontrivial (valueGroup v)] :
459+
IsPrincipalIdealRing K₀ := fun I ↦ ideal_isPrincipal v I⟩
481460

482461
/-- This is Chapter I, Section 1, Proposition 1 in Serre's Local Fields -/
483-
instance dvr_of_isDiscrete /- [v.IsNontrivial] [IsCyclic Γˣ] -/:
462+
instance dvr_of_isDiscrete [IsCyclic (valueGroup v)] [Nontrivial (valueGroup v)]:
484463
IsDiscreteValuationRing K₀ where
485464
toIsPrincipalIdealRing := integer_isPrincipalIdealRing v
486465
toIsLocalRing := inferInstance
@@ -500,19 +479,26 @@ def _root_.IsDiscreteValuationRing.maximalIdeal : HeightOneSpectrum A where
500479
ne_bot := by
501480
simpa [ne_eq, ← isField_iff_maximalIdeal_eq] using IsDiscreteValuationRing.not_isField A
502481

503-
-- variable {A}
504-
505482
noncomputable instance instAdicValued : Valued (FractionRing A) ℤₘ₀ :=
506483
(IsDiscreteValuationRing.maximalIdeal A).adicValued
507484

508485
instance :
509486
IsRankOneDiscrete ((IsDiscreteValuationRing.maximalIdeal A).valuation (FractionRing A)) := by
487+
have : Nontrivial ↥(MonoidHomWithZero.valueGroup
488+
(valuation (FractionRing A) (IsDiscreteValuationRing.maximalIdeal A))) := by
489+
let v := (IsDiscreteValuationRing.maximalIdeal A).valuation (FractionRing A)
490+
set π := valuation_exists_uniformizer (FractionRing A) (maximalIdeal A)|>.choose with hπ_def
491+
have hπ : v π = ↑(ofAdd (-1 : ℤ)) :=
492+
valuation_exists_uniformizer (FractionRing A) (maximalIdeal A)|>.choose_spec
493+
rw [Subgroup.nontrivial_iff_exists_ne_one]
494+
use Units.mk0 (v π) (by simp [hπ])
495+
constructor
496+
· apply MonoidHomWithZero.mem_valueGroup
497+
simp only [Units.val_mk0, mem_range]
498+
use π
499+
· simp only [hπ]
500+
exact not_eq_of_beq_eq_false rfl
510501
apply IsRankOneDiscrete.mk'
511-
/- apply isDiscrete_of_exists_isUniformizer
512-
(π := valuation_exists_uniformizer (FractionRing A) (maximalIdeal A)|>.choose)
513-
convert valuation_exists_uniformizer (FractionRing A) (maximalIdeal A)|>.choose_spec
514-
rw [← genLTOne_eq_of_top, ← Multiplicative.genLTOne_eq_neg_one]
515-
norm_cast -/
516502

517503
theorem exists_of_le_one {x : FractionRing A} (H : Valued.v x ≤ (1 : ℤₘ₀)) :
518504
∃ a : A, algebraMap A (FractionRing A) a = x := by

0 commit comments

Comments
 (0)