|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Xavier Roblot. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Xavier Roblot |
| 5 | +-/ |
| 6 | +import number_theory.number_field.embeddings |
| 7 | + |
| 8 | +/-! |
| 9 | +# Canonical embedding of a number field |
| 10 | +
|
| 11 | +The canonical embedding of a number field `K` of signature `(r₁, r₂)` is the ring homomorphism |
| 12 | +`K →+* ℝ^r₁ × ℂ^r₂` that sends `x ∈ K` to `(φ_₁(x),...,φ_r₁(x)) × (ψ_₁(x),..., ψ_r₂(x))` where |
| 13 | +`φ_₁,...,φ_r₁` are its real embeddings and `ψ_₁,..., ψ_r₂` are its complex embeddings (up to |
| 14 | +complex conjugation). |
| 15 | +
|
| 16 | +## Main definitions and results |
| 17 | +
|
| 18 | +* `number_field.canonical_embedding.ring_of_integers.inter_ball_finite`: the intersection of the |
| 19 | +image of the ring of integers by the canonical embedding and any ball centered at `0` of finite |
| 20 | +radius is finite. |
| 21 | +
|
| 22 | +## Tags |
| 23 | +
|
| 24 | +number field, infinite places |
| 25 | +-/ |
| 26 | + |
| 27 | +noncomputable theory |
| 28 | + |
| 29 | +open function finite_dimensional finset fintype number_field number_field.infinite_place metric |
| 30 | +module |
| 31 | +open_locale classical number_field |
| 32 | + |
| 33 | +variables (K : Type*) [field K] |
| 34 | + |
| 35 | +namespace number_field.canonical_embedding |
| 36 | + |
| 37 | +-- The ambient space `ℝ^r₁ × ℂ^r₂` with `(r₁, r₂)` the signature of `K`. |
| 38 | +localized "notation `E` := |
| 39 | + ({w : infinite_place K // is_real w} → ℝ) × ({w : infinite_place K // is_complex w} → ℂ)" |
| 40 | + in canonical_embedding |
| 41 | + |
| 42 | +lemma space_rank [number_field K] : |
| 43 | + finrank ℝ E = finrank ℚ K := |
| 44 | +begin |
| 45 | + haveI : module.free ℝ ℂ := infer_instance, |
| 46 | + rw [finrank_prod, finrank_pi, finrank_pi_fintype, complex.finrank_real_complex, |
| 47 | + finset.sum_const, finset.card_univ, ← card_real_embeddings, algebra.id.smul_eq_mul, mul_comm, |
| 48 | + ← card_complex_embeddings, ← number_field.embeddings.card K ℂ, fintype.card_subtype_compl, |
| 49 | + nat.add_sub_of_le (fintype.card_subtype_le _)], |
| 50 | +end |
| 51 | + |
| 52 | +lemma non_trivial_space [number_field K] : nontrivial E := |
| 53 | +begin |
| 54 | + obtain ⟨w⟩ := infinite_place.nonempty K, |
| 55 | + obtain hw | hw := w.is_real_or_is_complex, |
| 56 | + { haveI : nonempty {w : infinite_place K // is_real w} := ⟨⟨w, hw⟩⟩, |
| 57 | + exact nontrivial_prod_left }, |
| 58 | + { haveI : nonempty {w : infinite_place K // is_complex w} := ⟨⟨w, hw⟩⟩, |
| 59 | + exact nontrivial_prod_right } |
| 60 | +end |
| 61 | + |
| 62 | +/-- The canonical embedding of a number field `K` of signature `(r₁, r₂)` into `ℝ^r₁ × ℂ^r₂`. -/ |
| 63 | +def _root_.number_field.canonical_embedding : K →+* E := |
| 64 | +ring_hom.prod (pi.ring_hom (λ w, w.prop.embedding)) (pi.ring_hom (λ w, w.val.embedding)) |
| 65 | + |
| 66 | +lemma _root_.number_field.canonical_embedding_injective [number_field K] : |
| 67 | + injective (number_field.canonical_embedding K) := |
| 68 | + @ring_hom.injective _ _ _ _ (non_trivial_space K) _ |
| 69 | + |
| 70 | +open number_field |
| 71 | + |
| 72 | +variable {K} |
| 73 | + |
| 74 | +@[simp] |
| 75 | +lemma apply_at_real_infinite_place (w : {w : infinite_place K // is_real w}) (x : K) : |
| 76 | + (number_field.canonical_embedding K x).1 w = w.prop.embedding x := |
| 77 | +by simp only [canonical_embedding, ring_hom.prod_apply, pi.ring_hom_apply] |
| 78 | + |
| 79 | +@[simp] |
| 80 | +lemma apply_at_complex_infinite_place (w : { w : infinite_place K // is_complex w}) (x : K) : |
| 81 | + (number_field.canonical_embedding K x).2 w = embedding w.val x := |
| 82 | +by simp only [canonical_embedding, ring_hom.prod_apply, pi.ring_hom_apply] |
| 83 | + |
| 84 | +lemma nnnorm_eq [number_field K] (x : K) : |
| 85 | + ‖canonical_embedding K x‖₊ = finset.univ.sup (λ w : infinite_place K, ⟨w x, map_nonneg w x⟩) := |
| 86 | +begin |
| 87 | + rw [prod.nnnorm_def', pi.nnnorm_def, pi.nnnorm_def], |
| 88 | + rw ( _ : finset.univ = {w : infinite_place K | is_real w}.to_finset |
| 89 | + ∪ {w : infinite_place K | is_complex w}.to_finset), |
| 90 | + { rw [finset.sup_union, sup_eq_max], |
| 91 | + refine congr_arg2 _ _ _, |
| 92 | + { convert (finset.univ.sup_map (function.embedding.subtype (λ w : infinite_place K, is_real w)) |
| 93 | + (λ w, (⟨w x, map_nonneg w x⟩ : nnreal))).symm using 2, |
| 94 | + ext w, |
| 95 | + simp only [apply_at_real_infinite_place, coe_nnnorm, real.norm_eq_abs, |
| 96 | + function.embedding.coe_subtype, subtype.coe_mk, is_real.abs_embedding_apply], }, |
| 97 | + { convert (finset.univ.sup_map (function.embedding.subtype (λ w : infinite_place K, |
| 98 | + is_complex w)) (λ w, (⟨w x, map_nonneg w x⟩ : nnreal))).symm using 2, |
| 99 | + ext w, |
| 100 | + simp only [apply_at_complex_infinite_place, subtype.val_eq_coe, coe_nnnorm, |
| 101 | + complex.norm_eq_abs, function.embedding.coe_subtype, subtype.coe_mk, abs_embedding], }}, |
| 102 | + { ext w, |
| 103 | + simp only [w.is_real_or_is_complex, set.mem_set_of_eq, finset.mem_union, set.mem_to_finset, |
| 104 | + finset.mem_univ], }, |
| 105 | +end |
| 106 | + |
| 107 | +lemma norm_le_iff [number_field K] (x : K) (r : ℝ) : |
| 108 | + ‖canonical_embedding K x‖ ≤ r ↔ ∀ w : infinite_place K, w x ≤ r := |
| 109 | +begin |
| 110 | + obtain hr | hr := lt_or_le r 0, |
| 111 | + { obtain ⟨w⟩ := infinite_place.nonempty K, |
| 112 | + exact iff_of_false (hr.trans_le $ norm_nonneg _).not_le |
| 113 | + (λ h, hr.not_le $ (map_nonneg w _).trans $ h _) }, |
| 114 | + { lift r to nnreal using hr, |
| 115 | + simp_rw [← coe_nnnorm, nnnorm_eq, nnreal.coe_le_coe, finset.sup_le_iff, finset.mem_univ, |
| 116 | + forall_true_left, ←nnreal.coe_le_coe, subtype.coe_mk] } |
| 117 | +end |
| 118 | + |
| 119 | +variables (K) |
| 120 | + |
| 121 | +/-- The image of `𝓞 K` as a subring of `ℝ^r₁ × ℂ^r₂`. -/ |
| 122 | +def integer_lattice : subring E := |
| 123 | +(ring_hom.range (algebra_map (𝓞 K) K)).map (canonical_embedding K) |
| 124 | + |
| 125 | +/-- The linear equiv between `𝓞 K` and the integer lattice. -/ |
| 126 | +def equiv_integer_lattice [number_field K] : |
| 127 | + 𝓞 K ≃ₗ[ℤ] integer_lattice K := |
| 128 | +linear_equiv.of_bijective |
| 129 | + { to_fun := λ x, ⟨canonical_embedding K (algebra_map (𝓞 K) K x), algebra_map (𝓞 K) K x, |
| 130 | + by simp only [subring.mem_carrier, ring_hom.mem_range, exists_apply_eq_apply], rfl⟩, |
| 131 | + map_add' := λ x y, by simpa only [map_add], |
| 132 | + map_smul' := λ c x, by simpa only [zsmul_eq_mul, map_mul, map_int_cast] } |
| 133 | + begin |
| 134 | + refine ⟨λ _ _ h, _, λ ⟨_, _, ⟨a, rfl⟩, rfl⟩, ⟨a, rfl⟩⟩, |
| 135 | + rw [linear_map.coe_mk, subtype.mk_eq_mk] at h, |
| 136 | + exact is_fraction_ring.injective (𝓞 K) K (canonical_embedding_injective K h), |
| 137 | + end |
| 138 | + |
| 139 | +lemma integer_lattice.inter_ball_finite [number_field K] (r : ℝ) : |
| 140 | + ((integer_lattice K : set E) ∩ (closed_ball 0 r)).finite := |
| 141 | +begin |
| 142 | + obtain hr | hr := lt_or_le r 0, |
| 143 | + { simp [closed_ball_eq_empty.2 hr] }, |
| 144 | + have heq : |
| 145 | + ∀ x, canonical_embedding K x ∈ closed_ball (0 : E) r ↔ ∀ φ : K →+* ℂ, ‖φ x‖ ≤ r, |
| 146 | + { simp only [← place_apply, ← infinite_place.coe_mk, mem_closed_ball_zero_iff, norm_le_iff], |
| 147 | + exact λ x, le_iff_le x r, }, |
| 148 | + convert (embeddings.finite_of_norm_le K ℂ r).image (canonical_embedding K), |
| 149 | + ext, split, |
| 150 | + { rintro ⟨⟨_, ⟨x, rfl⟩, rfl⟩, hx2⟩, |
| 151 | + exact ⟨x, ⟨set_like.coe_mem x, (heq x).mp hx2⟩, rfl⟩, }, |
| 152 | + { rintro ⟨x, ⟨hx1, hx2⟩, rfl⟩, |
| 153 | + exact ⟨⟨x, ⟨⟨x, hx1⟩, rfl⟩, rfl⟩, (heq x).mpr hx2⟩, } |
| 154 | +end |
| 155 | + |
| 156 | +instance [number_field K] : countable (integer_lattice K) := |
| 157 | +begin |
| 158 | + have : (⋃ n : ℕ, ((integer_lattice K : set E) ∩ (closed_ball 0 n))).countable, |
| 159 | + { exact set.countable_Union (λ n, (integer_lattice.inter_ball_finite K n).countable) }, |
| 160 | + refine (this.mono _).to_subtype, |
| 161 | + rintro _ ⟨x, hx, rfl⟩, |
| 162 | + rw set.mem_Union, |
| 163 | + exact ⟨⌈‖canonical_embedding K x‖⌉₊, ⟨x, hx, rfl⟩, mem_closed_ball_zero_iff.2 (nat.le_ceil _)⟩, |
| 164 | +end |
| 165 | + |
| 166 | +end number_field.canonical_embedding |
0 commit comments