@@ -6,6 +6,8 @@ Authors: Ashvni Narayanan, Anne Baanen
6
6
7
7
import ring_theory.dedekind_domain.integral_closure
8
8
import algebra.char_p.algebra
9
+ import analysis.normed_space.basic
10
+ import topology.algebra.polynomial
9
11
10
12
/-!
11
13
# Number fields
@@ -199,7 +201,7 @@ open set polynomial
199
201
200
202
/-- Let `A` an algebraically closed field and let `x ∈ K`, with `K` a number field. For `F`,
201
203
subfield of `K`, the images of `x` by the `F`-algebra morphisms from `K` to `A` are exactly
202
- the roots in `A` of the minimal polynomial of `x` over `F` -/
204
+ the roots in `A` of the minimal polynomial of `x` over `F`. -/
203
205
lemma range_eq_roots (F K A : Type *) [field F] [number_field F] [field K] [number_field K]
204
206
[field A] [is_alg_closed A] [algebra F K] [algebra F A] (x : K) :
205
207
range (λ ψ : K →ₐ[F] A, ψ x) = (minpoly F x).root_set A :=
@@ -238,9 +240,8 @@ variables (K A : Type*) [field K] [number_field K] [field A] [char_zero A] [is_a
238
240
239
241
/-- Let `A` be an algebraically closed field and let `x ∈ K`, with `K` a number field.
240
242
The images of `x` by the embeddings of `K` in `A` are exactly the roots in `A` of
241
- the minimal polynomial of `x` over `ℚ` -/
242
- lemma rat_range_eq_roots :
243
- range (λ φ : K →+* A, φ x) = (minpoly ℚ x).root_set A :=
243
+ the minimal polynomial of `x` over `ℚ`. -/
244
+ lemma rat_range_eq_roots : range (λ φ : K →+* A, φ x) = (minpoly ℚ x).root_set A :=
244
245
begin
245
246
convert range_eq_roots ℚ K A x using 1 ,
246
247
ext a,
249
250
250
251
end roots
251
252
253
+ section bounded
254
+
255
+ open finite_dimensional polynomial set
256
+
257
+ variables {K : Type *} [field K] [number_field K]
258
+ variables {A : Type *} [normed_field A] [is_alg_closed A] [normed_algebra ℚ A]
259
+
260
+ lemma coeff_bdd_of_norm_le {B : ℝ} {x : K} (h : ∀ φ : K →+* A, ∥φ x∥ ≤ B) (i : ℕ):
261
+ ∥(minpoly ℚ x).coeff i∥ ≤ (max B 1 ) ^ (finrank ℚ K) * (finrank ℚ K).choose ((finrank ℚ K) / 2 ) :=
262
+ begin
263
+ have hx : is_integral ℚ x := is_separable.is_integral _ _,
264
+ rw (by rw [coeff_map, norm_algebra_map'] :
265
+ ∥(minpoly ℚ x).coeff i∥ = ∥(map (algebra_map ℚ A) (minpoly ℚ x)).coeff i∥),
266
+ refine coeff_bdd_of_roots_le _ (minpoly.monic hx) (is_alg_closed.splits_codomain _)
267
+ (minpoly.nat_degree_le hx) _ i,
268
+ intros z hz,
269
+ rsuffices ⟨φ, rfl⟩ : ∃ (φ : K →+* A), φ x = z, {exact h φ },
270
+ letI : char_zero A := char_zero_of_injective_algebra_map (algebra_map ℚ _).injective,
271
+ rw [← set.mem_range, rat_range_eq_roots, mem_root_set_iff, aeval_def],
272
+ convert (mem_roots_map _).mp hz,
273
+ repeat { exact monic.ne_zero (minpoly.monic hx), },
274
+ end
275
+
276
+ variables (K A)
277
+
278
+ /-- Let `B` be a real number. The set of algebraic integers in `K` whose conjugates are all
279
+ smaller in norm than `B` is finite. -/
280
+ lemma finite_of_norm_le (B : ℝ) :
281
+ {x : K | is_integral ℤ x ∧ ∀ φ : K →+* A, ∥φ x∥ ≤ B}.finite :=
282
+ begin
283
+ let C := nat.ceil ((max B 1 ) ^ (finrank ℚ K) * (finrank ℚ K).choose ((finrank ℚ K) / 2 )),
284
+ have := bUnion_roots_finite (algebra_map ℤ K) (finrank ℚ K) (finite_Icc (-C : ℤ) C),
285
+ refine this.subset (λ x hx, _),
286
+ have h_map_rat_minpoly := minpoly.gcd_domain_eq_field_fractions' ℚ hx.1 ,
287
+ rw mem_Union,
288
+ use minpoly ℤ x,
289
+ rw [mem_Union, exists_prop],
290
+ refine ⟨⟨_, λ i, _⟩, _⟩,
291
+ { rw [← nat_degree_map_eq_of_injective (algebra_map ℤ ℚ).injective_int _, ← h_map_rat_minpoly],
292
+ exact minpoly.nat_degree_le (is_integral_of_is_scalar_tower _ hx.1 ), },
293
+ { rw [mem_Icc, ← abs_le, ← @int.cast_le ℝ],
294
+ apply le_trans _ (nat.le_ceil _),
295
+ convert coeff_bdd_of_norm_le hx.2 i,
296
+ simp only [h_map_rat_minpoly, coeff_map, eq_int_cast, int.norm_cast_rat, int.norm_eq_abs,
297
+ int.cast_abs], },
298
+ { rw [finset.mem_coe, multiset.mem_to_finset, mem_roots, is_root.def, ← eval₂_eq_eval_map,
299
+ ← aeval_def],
300
+ { exact minpoly.aeval ℤ x, },
301
+ { exact monic.ne_zero (monic.map (algebra_map ℤ K) (minpoly.monic hx.1 )), }},
302
+ end
303
+
304
+ /-- An algebraic integer whose conjugates are all of norm one is a root of unity. -/
305
+ lemma pow_eq_one_of_norm_eq_one {x : K}
306
+ (hxi : is_integral ℤ x) (hx : ∀ φ : K →+* A, ∥φ x∥ = 1 ) :
307
+ ∃ (n : ℕ) (hn : 0 < n), x ^ n = 1 :=
308
+ begin
309
+ obtain ⟨a, -, b, -, habne, h⟩ := @set.infinite.exists_ne_map_eq_of_maps_to _ _ _ _
310
+ ((^) x : ℕ → K) set.infinite_univ _ (finite_of_norm_le K A (1 :ℝ)),
311
+ { replace habne := habne.lt_or_lt,
312
+ wlog : a < b := habne using [a b],
313
+ refine ⟨b - a, tsub_pos_of_lt habne, _⟩,
314
+ have hxne : x ≠ 0 ,
315
+ { contrapose! hx,
316
+ simp only [hx, norm_zero, ring_hom.map_zero, ne.def, not_false_iff, zero_ne_one],
317
+ use (is_alg_closed.lift (number_field.is_algebraic K)).to_ring_hom, },
318
+ { rw [pow_sub₀ _ hxne habne.le, h, mul_inv_cancel (pow_ne_zero b hxne)], }},
319
+ { rw set.maps_univ_to,
320
+ exact λ a, ⟨hxi.pow a, λ φ, by simp [hx φ, norm_pow, one_pow]⟩, },
321
+ end
322
+
323
+ end bounded
324
+
252
325
end number_field.embeddings
0 commit comments