|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Andrew Yang. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Andrew Yang |
| 5 | +-/ |
| 6 | +import Mathlib.RingTheory.Valuation.DiscreteValuativeRel |
| 7 | +import Mathlib.Topology.Algebra.Valued.LocallyCompact |
| 8 | +import Mathlib.Topology.Algebra.Valued.ValuativeRel |
| 9 | + |
| 10 | +/-! |
| 11 | +
|
| 12 | +# Definition of (Non-archimedean) local fields |
| 13 | +
|
| 14 | +Given a topological field `K` equipped with an equivalence class of valuations (a `ValuativeRel`), |
| 15 | +we say that it is a non-archimedean local field if the topology comes from the given valuation, |
| 16 | +and it is locally compact and non-discrete. |
| 17 | +
|
| 18 | +-/ |
| 19 | + |
| 20 | +/-- |
| 21 | +Given a topological field `K` equipped with an equivalence class of valuations (a `ValuativeRel`), |
| 22 | +we say that it is a non-archimedean local field if the topology comes from the given valuation, |
| 23 | +and it is locally compact and non-discrete. |
| 24 | +
|
| 25 | +This implies the following typeclasses via `inferInstance` |
| 26 | +- `IsValuativeTopology K` |
| 27 | +- `LocallyCompactSpace K` |
| 28 | +- `IsTopologicalDivisionRing K` |
| 29 | +- `ValuativeRel.IsNontrivial K` |
| 30 | +- `ValuativeRel.IsRankLeOne K` |
| 31 | +- `ValuativeRel.IsDiscrete K` |
| 32 | +- `IsDiscreteValuationRing 𝒪[K]` |
| 33 | +- `Finite 𝓀[K]` |
| 34 | +
|
| 35 | +Assuming we have a compatible `UniformSpace K` instance |
| 36 | +(e.g. via `IsTopologicalAddGroup.toUniformSpace` and `isUniformAddGroup_of_addCommGroup`) then |
| 37 | +- `CompleteSpace K` |
| 38 | +- `CompleteSpace 𝒪[K]` |
| 39 | +-/ |
| 40 | +class IsNonarchimedeanLocalField |
| 41 | + (K : Type*) [Field K] [ValuativeRel K] [TopologicalSpace K] : Prop extends |
| 42 | + IsValuativeTopology K, |
| 43 | + LocallyCompactSpace K, |
| 44 | + ValuativeRel.IsNontrivial K |
| 45 | + |
| 46 | +open ValuativeRel Valued.integer |
| 47 | + |
| 48 | +open scoped WithZero |
| 49 | + |
| 50 | +namespace IsNonarchimedeanLocalField |
| 51 | + |
| 52 | +section TopologicalSpace |
| 53 | + |
| 54 | +variable (K : Type*) [Field K] [ValuativeRel K] [TopologicalSpace K] [IsNonarchimedeanLocalField K] |
| 55 | + |
| 56 | +attribute [local simp] zero_lt_iff |
| 57 | + |
| 58 | +instance : IsTopologicalDivisionRing K := by |
| 59 | + letI := IsTopologicalAddGroup.toUniformSpace K |
| 60 | + haveI := isUniformAddGroup_of_addCommGroup (G := K) |
| 61 | + infer_instance |
| 62 | + |
| 63 | +lemma isCompact_closedBall (γ : ValueGroupWithZero K) : IsCompact { x | valuation K x ≤ γ } := by |
| 64 | + obtain ⟨γ, rfl⟩ := ValuativeRel.valuation_surjective γ |
| 65 | + by_cases hγ : γ = 0 |
| 66 | + · simp [hγ] |
| 67 | + letI := IsTopologicalAddGroup.toUniformSpace K |
| 68 | + letI := isUniformAddGroup_of_addCommGroup (G := K) |
| 69 | + obtain ⟨s, hs, -, hs'⟩ := LocallyCompactSpace.local_compact_nhds (0 : K) .univ Filter.univ_mem |
| 70 | + obtain ⟨r, hr, hr1, H⟩ : |
| 71 | + ∃ r', r' ≠ 0 ∧ valuation K r' < 1 ∧ { x | valuation K x ≤ valuation K r' } ⊆ s := by |
| 72 | + obtain ⟨r, hr, hrs⟩ := (IsValuativeTopology.hasBasis_nhds_zero' K).mem_iff.mp hs |
| 73 | + obtain ⟨r', hr', hr⟩ := Valuation.IsNontrivial.exists_lt_one (v := valuation K) |
| 74 | + simp only [ne_eq, map_eq_zero] at hr' |
| 75 | + obtain hr1 | hr1 := lt_or_ge r 1 |
| 76 | + · obtain ⟨r, rfl⟩ := ValuativeRel.valuation_surjective r |
| 77 | + simp only [ne_eq, map_eq_zero] at hr |
| 78 | + refine ⟨r ^ 2, by simpa using hr, by simpa [pow_two], fun x hx ↦ hrs ?_⟩ |
| 79 | + simp only [map_pow, Set.mem_setOf_eq] at hx ⊢ |
| 80 | + exact hx.trans_lt (by simpa [pow_two, hr]) |
| 81 | + · refine ⟨r', hr', hr, .trans ?_ hrs⟩ |
| 82 | + intro x hx |
| 83 | + dsimp at hx ⊢ |
| 84 | + exact hx.trans_lt (hr.trans_le hr1) |
| 85 | + convert (hs'.of_isClosed_subset (Valued.isClosed_closedBall K _) H).image |
| 86 | + (Homeomorph.mulLeft₀ (γ / r) (by simp [hr, div_eq_zero_iff, hγ])).continuous using 1 |
| 87 | + refine .trans ?_ (Equiv.image_eq_preimage _ _).symm |
| 88 | + ext x |
| 89 | + simp [div_mul_eq_mul_div, div_le_iff₀, IsValuativeTopology.v_eq_valuation, hγ, hr] |
| 90 | + |
| 91 | +instance : CompactSpace 𝒪[K] := isCompact_iff_compactSpace.mp (isCompact_closedBall K 1) |
| 92 | + |
| 93 | +instance (K : Type*) [Field K] [ValuativeRel K] [UniformSpace K] [IsUniformAddGroup K] |
| 94 | + [IsValuativeTopology K] : (Valued.v (R := K) (Γ₀ := ValueGroupWithZero K)).Compatible := |
| 95 | + inferInstanceAs (valuation K).Compatible |
| 96 | + |
| 97 | +instance : IsDiscreteValuationRing 𝒪[K] := |
| 98 | + letI := IsTopologicalAddGroup.toUniformSpace K |
| 99 | + haveI := isUniformAddGroup_of_addCommGroup (G := K) |
| 100 | + haveI : CompactSpace (Valued.integer K) := inferInstanceAs (CompactSpace 𝒪[K]) |
| 101 | + Valued.integer.isDiscreteValuationRing_of_compactSpace |
| 102 | + |
| 103 | +/-- The value group of a local field is (uniquely) isomorphic to `ℤᵐ⁰`. -/ |
| 104 | +noncomputable |
| 105 | +def valueGroupWithZeroIsoInt : ValueGroupWithZero K ≃*o ℤᵐ⁰ := by |
| 106 | + apply Nonempty.some |
| 107 | + letI := IsTopologicalAddGroup.toUniformSpace K |
| 108 | + haveI := isUniformAddGroup_of_addCommGroup (G := K) |
| 109 | + obtain ⟨_⟩ := Valued.integer.locallyFiniteOrder_units_mrange_of_isCompact_integer |
| 110 | + (isCompact_iff_compactSpace.mpr (inferInstanceAs (CompactSpace 𝒪[K]))) |
| 111 | + let e : (MonoidHom.mrange (valuation K)) ≃*o ValueGroupWithZero K := |
| 112 | + ⟨.ofBijective (MonoidHom.mrange (valuation K)).subtype ⟨Subtype.val_injective, fun x ↦ |
| 113 | + ⟨⟨x, ValuativeRel.valuation_surjective x⟩, rfl⟩⟩, .rfl⟩ |
| 114 | + have : Nontrivial (ValueGroupWithZero K)ˣ := isNontrivial_iff_nontrivial_units.mp inferInstance |
| 115 | + have : Nontrivial (↥(MonoidHom.mrange (valuation K)))ˣ := |
| 116 | + (Units.map_injective (f := e.symm.toMonoidHom) e.symm.injective).nontrivial |
| 117 | + exact ⟨e.symm.trans (LocallyFiniteOrder.orderMonoidWithZeroEquiv _)⟩ |
| 118 | + |
| 119 | +instance : ValuativeRel.IsDiscrete K := |
| 120 | + (ValuativeRel.nonempty_orderIso_withZeroMul_int_iff.mp ⟨valueGroupWithZeroIsoInt K⟩).1 |
| 121 | + |
| 122 | +instance : ValuativeRel.IsRankLeOne K := |
| 123 | + ValuativeRel.isRankLeOne_iff_mulArchimedean.mpr |
| 124 | + (.comap (valueGroupWithZeroIsoInt K).toMonoidHom (valueGroupWithZeroIsoInt K).strictMono) |
| 125 | + |
| 126 | +instance : Finite 𝓀[K] := |
| 127 | + letI := IsTopologicalAddGroup.toUniformSpace K |
| 128 | + haveI := isUniformAddGroup_of_addCommGroup (G := K) |
| 129 | + letI : (Valued.v (R := K)).RankOne := |
| 130 | + ⟨IsRankLeOne.nonempty.some.emb, IsRankLeOne.nonempty.some.strictMono⟩ |
| 131 | + (compactSpace_iff_completeSpace_and_isDiscreteValuationRing_and_finite_residueField.mp |
| 132 | + (inferInstanceAs (CompactSpace 𝒪[K]))).2.2 |
| 133 | + |
| 134 | +proof_wanted isAdicComplete : IsAdicComplete 𝓂[K] 𝒪[K] |
| 135 | + |
| 136 | +end TopologicalSpace |
| 137 | + |
| 138 | +section UniformSpace |
| 139 | + |
| 140 | +variable (K : Type*) [Field K] [ValuativeRel K] |
| 141 | + [UniformSpace K] [IsUniformAddGroup K] [IsNonarchimedeanLocalField K] |
| 142 | + |
| 143 | +instance : CompleteSpace K := |
| 144 | + letI : (Valued.v (R := K)).RankOne := |
| 145 | + ⟨IsRankLeOne.nonempty.some.emb, IsRankLeOne.nonempty.some.strictMono⟩ |
| 146 | + open scoped Valued in |
| 147 | + have : ProperSpace K := .of_nontriviallyNormedField_of_weaklyLocallyCompactSpace K |
| 148 | + (properSpace_iff_completeSpace_and_isDiscreteValuationRing_integer_and_finite_residueField.mp |
| 149 | + inferInstance).1 |
| 150 | + |
| 151 | +instance : CompleteSpace 𝒪[K] := |
| 152 | + letI : (Valued.v (R := K)).RankOne := |
| 153 | + ⟨IsRankLeOne.nonempty.some.emb, IsRankLeOne.nonempty.some.strictMono⟩ |
| 154 | + (compactSpace_iff_completeSpace_and_isDiscreteValuationRing_and_finite_residueField.mp |
| 155 | + (inferInstanceAs (CompactSpace 𝒪[K]))).1 |
| 156 | + |
| 157 | +end UniformSpace |
| 158 | + |
| 159 | +end IsNonarchimedeanLocalField |
0 commit comments