@@ -28,110 +28,6 @@ instance NumberField.AdeleRing.locallyCompactSpace : LocallyCompactSpace (AdeleR
28
28
29
29
end LocallyCompact
30
30
31
- section Discrete
32
-
33
- open DedekindDomain
34
-
35
- theorem Rat.AdeleRing.zero_discrete : ∃ U : Set (AdeleRing (𝓞 ℚ) ℚ),
36
- IsOpen U ∧ (algebraMap ℚ (AdeleRing (𝓞 ℚ) ℚ)) ⁻¹' U = {0 } := by
37
- let integralAdeles := {f : FiniteAdeleRing (𝓞 ℚ) ℚ |
38
- ∀ v , f v ∈ IsDedekindDomain.HeightOneSpectrum.adicCompletionIntegers ℚ v}
39
- use {f | ∀ v, f v ∈ (Metric.ball 0 1 )} ×ˢ integralAdeles
40
- refine ⟨?_, ?_⟩
41
- · apply IsOpen.prod
42
- . rw [Set.setOf_forall]
43
- apply isOpen_iInter_of_finite
44
- intro v
45
- exact Metric.isOpen_ball.preimage (continuous_apply v)
46
- let basis := FiniteAdeleRing.submodulesRingBasis (𝓞 ℚ) ℚ
47
- let integralAdeles' := basis.toRing_subgroups_basis.openAddSubgroup 1
48
- suffices h : integralAdeles = ↑integralAdeles' by
49
- rw [h]
50
- exact integralAdeles'.isOpen
51
- ext x
52
- simp only [← FiniteAdeleRing.exists_finiteIntegralAdele_iff, FiniteAdeleRing.ext_iff,
53
- SetCoe.ext_iff, Set.mem_setOf_eq, RingSubgroupsBasis.openAddSubgroup, Submonoid.one_def,
54
- map_one, SetLike.mem_coe, ← OpenAddSubgroup.mem_toAddSubgroup, Submodule.mem_toAddSubgroup,
55
- Submodule.mem_span_singleton, Algebra.smul_def', mul_one, integralAdeles, integralAdeles']
56
- apply exists_congr
57
- intro a
58
- exact eq_comm
59
- · apply subset_antisymm
60
- · intro x hx
61
- rw [Set.mem_preimage] at hx
62
- simp only [Set.mem_singleton_iff]
63
- have : (algebraMap ℚ (AdeleRing (𝓞 ℚ) ℚ)) x =
64
- (algebraMap ℚ (InfiniteAdeleRing ℚ) x, algebraMap ℚ (FiniteAdeleRing (𝓞 ℚ) ℚ) x)
65
- · rfl
66
- rw [this] at hx
67
- clear this
68
- rw [Set.mem_prod] at hx
69
- obtain ⟨h1, h2⟩ := hx
70
- dsimp only at h1 h2
71
- simp only [Metric.mem_ball, dist_zero_right, Set.mem_setOf_eq,
72
- InfiniteAdeleRing.algebraMap_apply, UniformSpace.Completion.norm_coe] at h1
73
- simp only [integralAdeles, Set.mem_setOf_eq] at h2
74
- specialize h1 Rat.infinitePlace
75
- change ‖(x : ℂ)‖ < 1 at h1
76
- simp at h1
77
- have intx: ∃ (y:ℤ), y = x
78
- · obtain ⟨z, hz⟩ := IsDedekindDomain.HeightOneSpectrum.mem_integers_of_valuation_le_one
79
- ℚ x <| fun v ↦ by
80
- specialize h2 v
81
- letI : UniformSpace ℚ := v.adicValued.toUniformSpace
82
- rw [IsDedekindDomain.HeightOneSpectrum.mem_adicCompletionIntegers] at h2
83
- rwa [← IsDedekindDomain.HeightOneSpectrum.valuedAdicCompletion_eq_valuation']
84
- use Rat.ringOfIntegersEquiv z
85
- rw [← hz]
86
- apply Rat.ringOfIntegersEquiv_eq_algebraMap
87
- obtain ⟨y, rfl⟩ := intx
88
- simp only [abs_lt] at h1
89
- norm_cast at h1 ⊢
90
- -- We need the next line because `norm_cast` is for some reason producing a `negSucc 0`.
91
- -- I haven't been able to isolate this behaviour even in a standalone lemma.
92
- -- We could also make `omega` more robust against accidental appearances of `negSucc`.
93
- rw [Int.negSucc_eq] at h1
94
- omega
95
- · intro x
96
- simp only [Set.mem_singleton_iff, Set.mem_preimage]
97
- rintro rfl
98
- simp only [map_zero]
99
- change (0 , 0 ) ∈ _
100
- simp only [Prod.mk_zero_zero, Set.mem_prod, Prod.fst_zero, Prod.snd_zero]
101
- constructor
102
- · simp only [Metric.mem_ball, dist_zero_right, Set.mem_setOf_eq]
103
- intro v
104
- have : ‖(0 :InfiniteAdeleRing ℚ) v‖ = 0
105
- · simp only [norm_eq_zero]
106
- rfl
107
- simp [this, zero_lt_one]
108
- · simp only [integralAdeles, Set.mem_setOf_eq]
109
- intro v
110
- apply zero_mem
111
-
112
- -- Maybe this discreteness isn't even stated in the best way?
113
- -- I'm ambivalent about how it's stated
114
- open Pointwise in
115
- theorem Rat.AdeleRing.discrete : ∀ q : ℚ, ∃ U : Set (AdeleRing (𝓞 ℚ) ℚ),
116
- IsOpen U ∧ (algebraMap ℚ (AdeleRing (𝓞 ℚ) ℚ)) ⁻¹' U = {q} := by
117
- obtain ⟨V, hV, hV0⟩ := zero_discrete
118
- intro q
119
- set ι := algebraMap ℚ (AdeleRing (𝓞 ℚ) ℚ) with hι
120
- set qₐ := ι q with hqₐ
121
- set f := Homeomorph.subLeft qₐ with hf
122
- use f ⁻¹' V, f.isOpen_preimage.mpr hV
123
- have : f ∘ ι = ι ∘ Homeomorph.subLeft q := by ext; simp [hf, hqₐ]
124
- rw [← Set.preimage_comp, this, Set.preimage_comp, hV0]
125
- ext
126
- simp only [Set.mem_preimage, Homeomorph.subLeft_apply, Set.mem_singleton_iff, sub_eq_zero, eq_comm]
127
-
128
- variable (K : Type *) [Field K] [NumberField K]
129
-
130
- theorem NumberField.AdeleRing.discrete : ∀ k : K, ∃ U : Set (AdeleRing (𝓞 K) K),
131
- IsOpen U ∧ (algebraMap K (AdeleRing (𝓞 K) K)) ⁻¹' U = {k} := sorry -- issue #257
132
-
133
- end Discrete
134
-
135
31
section BaseChange
136
32
137
33
namespace NumberField.AdeleRing
@@ -257,6 +153,134 @@ end NumberField.AdeleRing
257
153
258
154
end BaseChange
259
155
156
+ section Discrete
157
+
158
+ open DedekindDomain
159
+
160
+ theorem Rat.AdeleRing.zero_discrete : ∃ U : Set (AdeleRing (𝓞 ℚ) ℚ),
161
+ IsOpen U ∧ (algebraMap ℚ (AdeleRing (𝓞 ℚ) ℚ)) ⁻¹' U = {0 } := by
162
+ let integralAdeles := {f : FiniteAdeleRing (𝓞 ℚ) ℚ |
163
+ ∀ v , f v ∈ IsDedekindDomain.HeightOneSpectrum.adicCompletionIntegers ℚ v}
164
+ use {f | ∀ v, f v ∈ (Metric.ball 0 1 )} ×ˢ integralAdeles
165
+ refine ⟨?_, ?_⟩
166
+ · apply IsOpen.prod
167
+ . rw [Set.setOf_forall]
168
+ apply isOpen_iInter_of_finite
169
+ intro v
170
+ exact Metric.isOpen_ball.preimage (continuous_apply v)
171
+ let basis := FiniteAdeleRing.submodulesRingBasis (𝓞 ℚ) ℚ
172
+ let integralAdeles' := basis.toRing_subgroups_basis.openAddSubgroup 1
173
+ suffices h : integralAdeles = ↑integralAdeles' by
174
+ rw [h]
175
+ exact integralAdeles'.isOpen
176
+ ext x
177
+ simp only [← FiniteAdeleRing.exists_finiteIntegralAdele_iff, FiniteAdeleRing.ext_iff,
178
+ SetCoe.ext_iff, Set.mem_setOf_eq, RingSubgroupsBasis.openAddSubgroup, Submonoid.one_def,
179
+ map_one, SetLike.mem_coe, ← OpenAddSubgroup.mem_toAddSubgroup, Submodule.mem_toAddSubgroup,
180
+ Submodule.mem_span_singleton, Algebra.smul_def', mul_one, integralAdeles, integralAdeles']
181
+ apply exists_congr
182
+ intro a
183
+ exact eq_comm
184
+ · apply subset_antisymm
185
+ · intro x hx
186
+ rw [Set.mem_preimage] at hx
187
+ simp only [Set.mem_singleton_iff]
188
+ have : (algebraMap ℚ (AdeleRing (𝓞 ℚ) ℚ)) x =
189
+ (algebraMap ℚ (InfiniteAdeleRing ℚ) x, algebraMap ℚ (FiniteAdeleRing (𝓞 ℚ) ℚ) x)
190
+ · rfl
191
+ rw [this] at hx
192
+ clear this
193
+ rw [Set.mem_prod] at hx
194
+ obtain ⟨h1, h2⟩ := hx
195
+ dsimp only at h1 h2
196
+ simp only [Metric.mem_ball, dist_zero_right, Set.mem_setOf_eq,
197
+ InfiniteAdeleRing.algebraMap_apply, UniformSpace.Completion.norm_coe] at h1
198
+ simp only [integralAdeles, Set.mem_setOf_eq] at h2
199
+ specialize h1 Rat.infinitePlace
200
+ change ‖(x : ℂ)‖ < 1 at h1
201
+ simp at h1
202
+ have intx: ∃ (y:ℤ), y = x
203
+ · obtain ⟨z, hz⟩ := IsDedekindDomain.HeightOneSpectrum.mem_integers_of_valuation_le_one
204
+ ℚ x <| fun v ↦ by
205
+ specialize h2 v
206
+ letI : UniformSpace ℚ := v.adicValued.toUniformSpace
207
+ rw [IsDedekindDomain.HeightOneSpectrum.mem_adicCompletionIntegers] at h2
208
+ rwa [← IsDedekindDomain.HeightOneSpectrum.valuedAdicCompletion_eq_valuation']
209
+ use Rat.ringOfIntegersEquiv z
210
+ rw [← hz]
211
+ apply Rat.ringOfIntegersEquiv_eq_algebraMap
212
+ obtain ⟨y, rfl⟩ := intx
213
+ simp only [abs_lt] at h1
214
+ norm_cast at h1 ⊢
215
+ -- We need the next line because `norm_cast` is for some reason producing a `negSucc 0`.
216
+ -- I haven't been able to isolate this behaviour even in a standalone lemma.
217
+ -- We could also make `omega` more robust against accidental appearances of `negSucc`.
218
+ rw [Int.negSucc_eq] at h1
219
+ omega
220
+ · intro x
221
+ simp only [Set.mem_singleton_iff, Set.mem_preimage]
222
+ rintro rfl
223
+ simp only [map_zero]
224
+ change (0 , 0 ) ∈ _
225
+ simp only [Prod.mk_zero_zero, Set.mem_prod, Prod.fst_zero, Prod.snd_zero]
226
+ constructor
227
+ · simp only [Metric.mem_ball, dist_zero_right, Set.mem_setOf_eq]
228
+ intro v
229
+ have : ‖(0 :InfiniteAdeleRing ℚ) v‖ = 0
230
+ · simp only [norm_eq_zero]
231
+ rfl
232
+ simp [this, zero_lt_one]
233
+ · simp only [integralAdeles, Set.mem_setOf_eq]
234
+ intro v
235
+ apply zero_mem
236
+
237
+ variable (K : Type *) [Field K] [NumberField K]
238
+
239
+ theorem NumberField.AdeleRing.zero_discrete : ∃ U : Set (AdeleRing (𝓞 K) K),
240
+ IsOpen U ∧ (algebraMap K (AdeleRing (𝓞 K) K)) ⁻¹' U = {0 } := by
241
+ obtain ⟨V, hV, hV0⟩ := Rat.AdeleRing.zero_discrete
242
+ use (piEquiv ℚ K) '' {f | ∀i, f i ∈ V }
243
+ constructor
244
+ . rw [← (piEquiv ℚ K).coe_toHomeomorph, Homeomorph.isOpen_image, Set.setOf_forall]
245
+ apply isOpen_iInter_of_finite
246
+ intro i
247
+ exact hV.preimage (continuous_apply i)
248
+ rw [Set.eq_singleton_iff_unique_mem]
249
+ constructor
250
+ . rw [Set.eq_singleton_iff_unique_mem, Set.mem_preimage, map_zero] at hV0
251
+ simp only [Set.mem_preimage, map_zero, Set.mem_image,
252
+ EmbeddingLike.map_eq_zero_iff, exists_eq_right, Pi.zero_apply]
253
+ exact fun _ => hV0.left
254
+ intro x ⟨y, hy, hyx⟩
255
+ apply (Module.Finite.equivPi ℚ K).injective
256
+ set f := Module.Finite.equivPi ℚ K x
257
+ let g := fun i => algebraMap ℚ (AdeleRing (𝓞 ℚ) ℚ) (f i)
258
+ have hfg : ∀ i, (algebraMap _ _) (f i) = g i := fun i => rfl
259
+ have hg := piEquiv_apply_of_algebraMap hfg
260
+ simp only [LinearEquiv.symm_apply_apply, f, ← hyx, EquivLike.apply_eq_iff_eq] at hg
261
+ subst hg
262
+ ext i
263
+ rw [map_zero, Pi.zero_apply, ← Set.mem_singleton_iff, ← hV0, Set.mem_preimage]
264
+ exact hy i
265
+
266
+ -- Maybe this discreteness isn't even stated in the best way?
267
+ -- I'm ambivalent about how it's stated
268
+ open Pointwise in
269
+ theorem NumberField.AdeleRing.discrete : ∀ x : K, ∃ U : Set (AdeleRing (𝓞 K) K),
270
+ IsOpen U ∧ (algebraMap K (AdeleRing (𝓞 K) K)) ⁻¹' U = {x} := by
271
+ obtain ⟨V, hV, hV0⟩ := zero_discrete K
272
+ intro x
273
+ set ι := algebraMap K (AdeleRing (𝓞 K) K) with hι
274
+ set xₐ := ι x with hxₐ
275
+ set f := Homeomorph.subLeft xₐ with hf
276
+ use f ⁻¹' V, f.isOpen_preimage.mpr hV
277
+ have : f ∘ ι = ι ∘ Equiv.subLeft x := by ext; simp [hf, hxₐ]
278
+ rw [← Set.preimage_comp, this, Set.preimage_comp, hV0]
279
+ ext
280
+ simp only [Set.mem_preimage, Equiv.subLeft_apply, Set.mem_singleton_iff, sub_eq_zero, eq_comm]
281
+
282
+ end Discrete
283
+
260
284
section Compact
261
285
262
286
open NumberField
0 commit comments