Skip to content

Commit 4cfbe87

Browse files
committed
fixed other lemmas
1 parent f738b61 commit 4cfbe87

1 file changed

Lines changed: 27 additions & 14 deletions

File tree

  • LocalClassFieldTheory/DiscreteValuationRing

LocalClassFieldTheory/DiscreteValuationRing/Basic.lean

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -412,12 +412,16 @@ variable {K : Type*} [Field K] (v : Valuation K Γ)
412412

413413
/-- `Valuation.unitsMap` is the `MonoidHom` obtained by restricting a valuation to the non-zero
414414
elements of the ring. -/
415-
@[simps]
416415
noncomputable def unitsMap : Kˣ →* Γˣ where
417416
toFun := fun x ↦ Units.mk0 _ (ne_zero_of_unit v x)
418417
map_one' := by simp
419418
map_mul' := fun x y ↦ by simp
420419

420+
@[simp]
421+
lemma unitsMap_apply (x : Kˣ) : v.unitsMap x = v x.1 := by
422+
simp only [unitsMap, Units.val_mk0, MonoidHom.coe_mk, OneHom.coe_mk, Units.val_mk0]
423+
424+
421425
/-- The range of `Valuation.unitsMap` as a subgroup of the target. -/
422426
def unitsMapRange : Subgroup Γˣ where
423427
carrier := range v.unitsMap
@@ -539,7 +543,6 @@ end Field
539543

540544
open LinearOrderedCommGroup
541545

542-
variable {Γ : Type*} [LinearOrderedCommGroupWithZero Γ]
543546

544547
section Ring
545548

@@ -650,7 +653,8 @@ namespace Subgroup
650653

651654
variable (H : Subgroup G) [Nontrivial H]
652655

653-
656+
-- Move together results in `Yakov.lean` (probably inside `Valuation.Discrete.Basic` or
657+
-- `Order.Group.Cyclic`
654658
lemma genLTOne_val_eq_genLTOne : ((⊤ : Subgroup H).genLTOne) = H.genLTOne := by
655659
set γ := H.genLTOne with
656660
set η := ((⊤ : Subgroup H).genLTOne) with
@@ -709,19 +713,16 @@ theorem exists_isPreuniformizer_of_isNontrivial [v.IsNontrivial] :
709713
have hg_mem : g.1 ∈ v.unitsMapRange := SetLike.coe_mem ..
710714
obtain ⟨π, hπ⟩ := hg_mem
711715
use π.1
712-
have moveup : v.unitsMap π = v π.1 := by -- *MOVE ME UP!*
713-
simp only [unitsMap_apply, Units.val_mk0]
714716
constructor
715717
· apply le_of_lt
716-
rw [← moveup]
717-
rw [hπ]
718+
rw [← unitsMap_apply, hπ]
718719
have := Subgroup.genLTOne_lt_one (H := v.unitsMapRange)
719720
rw [hg]
720721
rw [← Units.val_one]
721722
rw [Units.val_lt_val]
722723
rw [LinearOrderedCommGroup.Subgroup.genLTOne_val_eq_genLTOne]
723724
exact this
724-
· rw [← moveup, hπ, hg]
725+
· rw [← unitsMap_apply, hπ, hg]
725726
rw [LinearOrderedCommGroup.Subgroup.genLTOne_val_eq_genLTOne]
726727
-- **FAE : The above `splitting` should not be performed**
727728

@@ -762,13 +763,13 @@ end IsDiscrete
762763

763764
section IsNontrivial
764765

765-
variable {v} [IsNontrivial v]
766+
variable {v} [IsNontrivial v] [Nontrivial Γˣ]
766767

767768
theorem IsUniformizer.isPreuniformizer {π : K} (hπ : IsUniformizer v π) :
768769
IsPreuniformizer v π := by
769770
rw [isPreuniformizer_iff]
770771
rw [isUniformizer_iff] at hπ
771-
haveI := isDiscrete_of_exists_isUniformizer hπ
772+
have := isDiscrete_of_exists_isUniformizer hπ
772773
sorry
773774
/- set g := (Mul.exists_generator_lt_one ℤ v.unitsMapRange_ne_bot).choose with hg
774775
obtain ⟨h1, htop⟩ := (Mul.exists_generator_lt_one ℤ v.unitsMapRange_ne_bot).choose_spec
@@ -789,7 +790,9 @@ section IsDiscrete
789790
variable {v} [hv : IsDiscrete v]
790791

791792
theorem IsPreuniformizer.isUniformizer {π : K} (hπ : IsPreuniformizer v π) :
793+
haveI := IsDiscrete.nontrivial_value_group v
792794
IsUniformizer v π := by
795+
have := IsDiscrete.nontrivial_value_group v
793796
rw [isUniformizer_iff]
794797
rw [isPreuniformizer_iff] at hπ
795798
sorry
@@ -801,21 +804,25 @@ theorem IsPreuniformizer.isUniformizer {π : K} (hπ : IsPreuniformizer v π) :
801804
exact MultInt.eq_ofAdd_neg_one_of_generates_top h1 htop -/
802805

803806
theorem isUniformizer_iff_isPreuniformizer {π : K} :
807+
haveI := IsDiscrete.nontrivial_value_group v
804808
IsUniformizer v π ↔ IsPreuniformizer v π :=
809+
have := IsDiscrete.nontrivial_value_group v
805810
fun hπ ↦ IsUniformizer.isPreuniformizer hπ, fun hπ ↦ IsPreuniformizer.isUniformizer hπ⟩
806811

807812
/-- A constructor for uniformizers. -/
808-
def Preuniformizer.to_uniformizer (π : Preuniformizer v) : Uniformizer v where
809-
val := π.val
810-
valuation_eq_gen := IsPreuniformizer.isUniformizer π.2
813+
def Preuniformizer.to_uniformizer (π : Preuniformizer v) :
814+
haveI := IsDiscrete.nontrivial_value_group v
815+
Uniformizer v := by
816+
have := IsDiscrete.nontrivial_value_group v
817+
apply Uniformizer.mk
818+
exact IsPreuniformizer.isUniformizer π.2
811819

812820
end IsDiscrete
813821

814822
section PreUniformizer
815823

816824
variable {v} [IsNontrivial v]
817825

818-
omit [Nontrivial Γˣ] in
819826
theorem isPreuniformizer_of_associated {π₁ π₂ : K₀} (h1 : IsPreuniformizer v π₁)
820827
(H : Associated π₁ π₂) : IsPreuniformizer v π₂ := by
821828
obtain ⟨u, hu⟩ := H
@@ -907,6 +914,8 @@ end PreUniformizer
907914

908915
section IsUniformizer
909916

917+
variable [Nontrivial Γˣ]
918+
910919
theorem isUniformizer_of_associated {π₁ π₂ : K₀} (h1 : IsUniformizer v π₁) (H : Associated π₁ π₂) :
911920
IsUniformizer v π₂ :=
912921
have : IsDiscrete v := isDiscrete_of_exists_isUniformizer h1
@@ -915,6 +924,8 @@ theorem isUniformizer_of_associated {π₁ π₂ : K₀} (h1 : IsUniformizer v
915924

916925
end IsUniformizer
917926

927+
variable [Nontrivial Γˣ]
928+
918929
section Uniformizer
919930

920931
theorem associated_of_uniformizer (π₁ π₂ : Uniformizer v) : Associated π₁.1 π₂.1 :=
@@ -936,6 +947,7 @@ theorem uniformizer_is_generator (π : Uniformizer v) :
936947

937948
end Uniformizer
938949

950+
939951
theorem isUniformizer_is_generator {π : v.valuationSubring} (hπ : IsUniformizer v π) :
940952
maximalIdeal v.valuationSubring = Ideal.span {π} :=
941953
have : IsDiscrete v := isDiscrete_of_exists_isUniformizer hπ
@@ -1003,6 +1015,7 @@ theorem isUniformizer_of_generator [IsDiscrete v] {r : K₀}
10031015
Ideal.mem_span_singleton', dvd_iff_exists_eq_mul_left]
10041016
tauto -/
10051017

1018+
omit [Nontrivial Γˣ] in
10061019
theorem val_le_iff_dvd (L : Type w₁) [Field L] {w : Valuation L ℤₘ₀} [IsDiscrete w]
10071020
[IsDiscreteValuationRing w.valuationSubring] (x : w.valuationSubring) (n : ℕ) :
10081021
w x ≤ ofAdd (-(n : ℤ)) ↔ IsLocalRing.maximalIdeal w.valuationSubring ^ n ∣ Ideal.span {x} := by

0 commit comments

Comments
 (0)