Skip to content

Commit 2cc8973

Browse files
committed
added file FromMathlib/DiscreteBasic
1 parent 4cfbe87 commit 2cc8973

5 files changed

Lines changed: 109 additions & 12 deletions

File tree

LocalClassFieldTheory/DiscreteValuationRing/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Mathlib.Data.Int.WithZero
1010
import Mathlib.RingTheory.DedekindDomain.AdicValuation
1111
import Mathlib.RingTheory.DiscreteValuationRing.Basic
1212
import Mathlib.RingTheory.PrincipalIdealDomainOfPrime
13-
import Mathlib.RingTheory.Valuation.Discrete.Basic
13+
-- import Mathlib.RingTheory.Valuation.Discrete.Basic -- importing `Yakov` that imports `FromMathlib.DiscreteBasic` instead
1414
import Mathlib.RingTheory.Valuation.Integers
1515
import Mathlib.RingTheory.Valuation.RankOne
1616
import Mathlib.GroupTheory.SpecificGroups.Cyclic
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/-
2+
Copyright (c) 2025 María Inés de Frutos-Fernández, Filippo A. E. Nuccio. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: María Inés de Frutos-Fernández, Filippo A. E. Nuccio
5+
-/
6+
import Mathlib.Algebra.Order.Group.Cyclic
7+
import Mathlib.Algebra.Order.Group.Units
8+
import Mathlib.RingTheory.Valuation.Basic
9+
10+
/-!
11+
# Discrete Valuations
12+
13+
Given a linearly ordered commutative group with zero `Γ` such that `Γˣ` is nontrivial cyclic, a
14+
valuation `v : A → Γ` on a ring `A` is *discrete*, if `genLTOne Γˣ` belongs to the image, where
15+
`genLTOne Γˣ` is the generator of `Γˣ` that is `< 1`. When `Γ := ℤₘ₀` (defined in
16+
`Multiplicative.termℤₘ₀`), `genLTOne Γˣ = ofAdd (-1)` and the condition of being discrete is
17+
equivalent to asking that `ofAdd (-1 : ℤ)` belongs to the image, in turn equivalent to asking that
18+
`1 : ℤ` belongs to the image of the corresponding *additive* valuation.
19+
20+
21+
## Main Definitions
22+
* `IsDiscrete`: We define a `Γ`-valued valuation `v` to be discrete if `Γˣ` is cyclic and
23+
`genLTOne Γˣ` belongs to the image of `v`.
24+
25+
## TODO
26+
* Define (pre)uniformizers for nontrivial discrete valuations.
27+
* Relate discrete valuations and discrete valuation rings.
28+
-/
29+
30+
namespace Valuation
31+
32+
open Function Set LinearOrderedCommGroup
33+
34+
variable {Γ : Type*} [LinearOrderedCommGroupWithZero Γ]
35+
36+
variable {A : Type*} [Ring A] (v : Valuation A Γ)
37+
38+
/-- Given a linearly ordered commutative group with zero `Γ` such that `Γˣ` is
39+
nontrivial cyclic, a valuation `v : A → Γ` on a ring `A` is *discrete*, if
40+
`genLTOne Γˣ` belongs to the image. Note that the latter is equivalent to
41+
asking that `1 : ℤ` belongs to the image of the corresponding additive valuation. -/
42+
class IsDiscrete : Prop where
43+
exists_generator_lt_one' : ∃ (γ : Γˣ), Subgroup.zpowers γ = ⊤ ∧ γ < 1 ∧ ↑γ ∈ range v
44+
45+
lemma exists_generator_lt_one [IsDiscrete v] :
46+
∃ (γ : Γˣ), Subgroup.zpowers γ = ⊤ ∧ γ < 1 ∧ ↑γ ∈ range v := IsDiscrete.exists_generator_lt_one'
47+
48+
/-- Given a discrete valuation `v`, `Valuation.IsDiscrete.generator` is a generator of the value
49+
group that is `< 1`. -/
50+
noncomputable def generator [IsDiscrete v] : Γˣ := v.exists_generator_lt_one.choose
51+
52+
lemma generator_zpowers_eq_top [IsDiscrete v] :
53+
Subgroup.zpowers (generator v) = (⊤ : Subgroup Γˣ) := v.exists_generator_lt_one.choose_spec.1
54+
55+
lemma generator_lt_one [IsDiscrete v] : (generator v) < 1 :=
56+
v.exists_generator_lt_one.choose_spec.2.1
57+
58+
lemma generator_mem_range [IsDiscrete v] : ↑(generator v) ∈ range v :=
59+
v.exists_generator_lt_one.choose_spec.2.2
60+
61+
lemma IsDiscrete.cyclic_value_group [IsDiscrete v] : IsCyclic Γˣ := by
62+
rw [isCyclic_iff_exists_zpowers_eq_top]
63+
exact ⟨_, generator_zpowers_eq_top v⟩
64+
65+
66+
lemma IsDiscrete.nontrivial_value_group [IsDiscrete v] : Nontrivial Γˣ :=
67+
1, generator v, ne_of_gt <| generator_lt_one v⟩
68+
69+
variable {K : Type*} [Field K]
70+
71+
/-- A discrete valuation on a field `K` is surjective. -/
72+
lemma IsDiscrete.surj (w : Valuation K Γ) [IsDiscrete w] : Surjective w := by
73+
intro c
74+
by_cases hc : c = 0
75+
· exact ⟨0, by simp [hc]⟩
76+
obtain ⟨π, hπ_gen, hπ_lt_one, a, ha⟩ := w.exists_generator_lt_one
77+
set u : Γˣ := Units.mk0 c hc with hu
78+
obtain ⟨k, hk⟩ := Subgroup.mem_zpowers_iff.mp (hπ_gen ▸ Subgroup.mem_top u)
79+
use a^k
80+
rw [map_zpow₀, ha]
81+
norm_cast
82+
rw [hk, hu, Units.val_mk0]
83+
84+
/-- A valuation on a field `K` is discrete if and only if it is surjective. -/
85+
lemma isDiscrete_iff_surjective (w : Valuation K Γ) [IsCyclic Γˣ] [Nontrivial Γˣ] :
86+
IsDiscrete w ↔ Surjective w := by
87+
refine ⟨fun _ ↦ IsDiscrete.surj w, fun h ↦ ⟨LinearOrderedCommGroup.genLTOne Γˣ,
88+
by simp, ?_, by apply h⟩⟩
89+
simpa using (⊤ : Subgroup Γˣ).genLTOne_lt_one
90+
91+
instance [hv : IsDiscrete v] : IsNontrivial v where
92+
exists_val_nontrivial := by
93+
obtain ⟨γ, _, _, x, hx_v⟩ := hv
94+
exact ⟨x, hx_v ▸ ⟨Units.ne_zero γ, ne_of_lt (by norm_cast)⟩⟩
95+
96+
end Valuation

LocalClassFieldTheory/FromMathlib/Yakov.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import LocalClassFieldTheory.FromMathlib.DiscreteBasic
12
import Mathlib.GroupTheory.ArchimedeanDensely
23
import Mathlib.Algebra.Order.Group.Cyclic
34
import Mathlib.Algebra.Order.Group.Units
45
import Mathlib.RingTheory.Valuation.Basic
5-
import Mathlib.RingTheory.Valuation.Discrete.Basic
6+
-- import Mathlib.RingTheory.Valuation.Discrete.Basic
67

78
namespace Valuation
89

lake-manifest.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"type": "git",
1616
"subDir": null,
1717
"scope": "",
18-
"rev": "4505602926099e24ea9367ad3f523e70b5b2b183",
18+
"rev": "3703f458daf273e17895878b7d0ab1b7401af878",
1919
"name": "mathlib",
2020
"manifestFile": "lake-manifest.json",
2121
"inputRev": null,
@@ -25,7 +25,7 @@
2525
"type": "git",
2626
"subDir": null,
2727
"scope": "leanprover-community",
28-
"rev": "8cee626a680fe217814c4bd444b94ceb31efd6b6",
28+
"rev": "77e08eddc486491d7b9e470926b3dbe50319451a",
2929
"name": "plausible",
3030
"manifestFile": "lake-manifest.json",
3131
"inputRev": "main",
@@ -45,7 +45,7 @@
4545
"type": "git",
4646
"subDir": null,
4747
"scope": "leanprover-community",
48-
"rev": "c20832d6f0b3186a97ea9361cec0a5b87dd152a3",
48+
"rev": "e6a9f0f5ee3ccf7443a0070f92b62f8db12ae82b",
4949
"name": "importGraph",
5050
"manifestFile": "lake-manifest.json",
5151
"inputRev": "main",
@@ -55,17 +55,17 @@
5555
"type": "git",
5656
"subDir": null,
5757
"scope": "leanprover-community",
58-
"rev": "ea953247aac573c9b5adea60bacd3e085f58aca4",
58+
"rev": "c4919189477c3221e6a204008998b0d724f49904",
5959
"name": "proofwidgets",
6060
"manifestFile": "lake-manifest.json",
61-
"inputRev": "v0.0.56",
61+
"inputRev": "v0.0.57",
6262
"inherited": true,
6363
"configFile": "lakefile.lean"},
6464
{"url": "https://github.com/leanprover-community/aesop",
6565
"type": "git",
6666
"subDir": null,
6767
"scope": "leanprover-community",
68-
"rev": "d279b56adead908de8bd086ea46b82895cf4f12c",
68+
"rev": "5d50b08dedd7d69b3d9b3176e0d58a23af228884",
6969
"name": "aesop",
7070
"manifestFile": "lake-manifest.json",
7171
"inputRev": "master",
@@ -75,7 +75,7 @@
7575
"type": "git",
7676
"subDir": null,
7777
"scope": "leanprover-community",
78-
"rev": "aa4c87abed970d9dfad2506000d99d30b02f476b",
78+
"rev": "fa4f7f15d97591a9cf3aa7724ba371c7fc6dda02",
7979
"name": "Qq",
8080
"manifestFile": "lake-manifest.json",
8181
"inputRev": "master",
@@ -85,7 +85,7 @@
8585
"type": "git",
8686
"subDir": null,
8787
"scope": "leanprover-community",
88-
"rev": "f523fcb75db2b472cda7d94d6caa5d745b1a0c26",
88+
"rev": "f5d04a9c4973d401c8c92500711518f7c656f034",
8989
"name": "batteries",
9090
"manifestFile": "lake-manifest.json",
9191
"inputRev": "main",
@@ -95,7 +95,7 @@
9595
"type": "git",
9696
"subDir": null,
9797
"scope": "leanprover",
98-
"rev": "aff4176e5c41737a0d73be74ad9feb6a889bfa98",
98+
"rev": "02dbd02bc00ec4916e99b04b2245b30200e200d0",
9999
"name": "Cli",
100100
"manifestFile": "lake-manifest.json",
101101
"inputRev": "main",

lean-toolchain

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
leanprover/lean4:v4.19.0-rc3
1+
leanprover/lean4:v4.19.0

0 commit comments

Comments
 (0)