|
| 1 | +/- |
| 2 | +Copyright (c) 2021 Anne Baanen. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Anne Baanen, Paul Lezeau |
| 5 | +-/ |
| 6 | + |
| 7 | +import ring_theory.adjoin_root |
| 8 | +import ring_theory.dedekind_domain.ideal |
| 9 | +import ring_theory.algebra_tower |
| 10 | + |
| 11 | +/-! |
| 12 | +# Kummer-Dedekind theorem |
| 13 | +
|
| 14 | +This file proves the monogenic version of the Kummer-Dedekind theorem on the splitting of prime |
| 15 | +ideals in an extension of the ring of integers. This states that if `I` is a prime ideal of |
| 16 | +Dedekind domain `R` and `S = R[α]` for some `α` that is integral over `R` with minimal polynomial |
| 17 | +`f`, then the prime factorisations of `I * S` and `f mod I` have the same shape, i.e. they have the |
| 18 | +same number of prime factors, and each prime factors of `I * S` can be paired with a prime factor |
| 19 | +of `f mod I` in a way that ensures multiplicities match (in fact, this pairing can be made explicit |
| 20 | +with a formula). |
| 21 | +
|
| 22 | +## Main definitions |
| 23 | +
|
| 24 | + * `normalized_factors_map_equiv_normalized_factors_min_poly_mk` : The bijection in the |
| 25 | + Kummer-Dedekind theorem. This is the pairing between the prime factors of `I * S` and the prime |
| 26 | + factors of `f mod I`. |
| 27 | +
|
| 28 | +## Main results |
| 29 | +
|
| 30 | + * `normalized_factors_ideal_map_eq_normalized_factors_min_poly_mk_map` : The Kummer-Dedekind |
| 31 | + theorem. |
| 32 | + * `ideal.irreducible_map_of_irreducible_minpoly` : `I.map (algebra_map R S)` is irreducible if |
| 33 | + `(map I^.quotient.mk (minpoly R pb.gen))` is irreducible, where `pb` is a power basis of `S` |
| 34 | + over `R`. |
| 35 | +
|
| 36 | +## TODO |
| 37 | +
|
| 38 | + * Define the conductor ideal and prove the Kummer-Dedekind theorem in full generality. |
| 39 | +
|
| 40 | + * Prove the converse of `ideal.irreducible_map_of_irreducible_minpoly`. |
| 41 | +
|
| 42 | + * Prove that `normalized_factors_map_equiv_normalized_factors_min_poly_mk` can be expressed as |
| 43 | + `normalized_factors_map_equiv_normalized_factors_min_poly_mk g = ⟨I, G(α)⟩` for `g` a prime |
| 44 | + factor of `f mod I` and `G` a lift of `g` to `R[X]`. |
| 45 | +
|
| 46 | +## References |
| 47 | +
|
| 48 | + * [J. Neukirch, *Algebraic Number Theory*][Neukirch1992] |
| 49 | +
|
| 50 | +## Tags |
| 51 | +
|
| 52 | +kummer, dedekind, kummer dedekind, dedekind-kummer, dedekind kummer |
| 53 | +-/ |
| 54 | + |
| 55 | +namespace kummer_dedekind |
| 56 | + |
| 57 | +open_locale big_operators polynomial classical |
| 58 | + |
| 59 | +open ideal polynomial double_quot unique_factorization_monoid |
| 60 | + |
| 61 | +variables {R : Type*} [comm_ring R] |
| 62 | +variables {S : Type*} [comm_ring S] [is_domain S] [is_dedekind_domain S] [algebra R S] |
| 63 | +variables (pb : power_basis R S) {I : ideal R} |
| 64 | + |
| 65 | +local attribute [instance] ideal.quotient.field |
| 66 | + |
| 67 | +variables [is_domain R] |
| 68 | + |
| 69 | +/-- The first half of the **Kummer-Dedekind Theorem** in the monogenic case, stating that the prime |
| 70 | + factors of `I*S` are in bijection with those of the minimal polynomial of the generator of `S` |
| 71 | + over `R`, taken `mod I`.-/ |
| 72 | +noncomputable def normalized_factors_map_equiv_normalized_factors_min_poly_mk (hI : is_maximal I) |
| 73 | + (hI' : I ≠ ⊥) : {J : ideal S | J ∈ normalized_factors (I.map (algebra_map R S) )} ≃ |
| 74 | + {d : (R ⧸ I)[X] | d ∈ normalized_factors (map I^.quotient.mk (minpoly R pb.gen)) } := |
| 75 | +((normalized_factors_equiv_of_quot_equiv ↑(pb.quotient_equiv_quotient_minpoly_map I) |
| 76 | + --show that `I * S` ≠ ⊥ |
| 77 | + (show I.map (algebra_map R S) ≠ ⊥, |
| 78 | + by rwa [ne.def, map_eq_bot_iff_of_injective pb.basis.algebra_map_injective, ← ne.def]) |
| 79 | + --show that the ideal spanned by `(minpoly R pb.gen) mod I` is non-zero |
| 80 | + (by {by_contra, exact (show (map I^.quotient.mk (minpoly R pb.gen) ≠ 0), from |
| 81 | + polynomial.map_monic_ne_zero (minpoly.monic pb.is_integral_gen)) |
| 82 | + (span_singleton_eq_bot.mp h) } )).trans |
| 83 | + (normalized_factors_equiv_span_normalized_factors |
| 84 | + (show (map I^.quotient.mk (minpoly R pb.gen)) ≠ 0, from |
| 85 | + polynomial.map_monic_ne_zero (minpoly.monic pb.is_integral_gen))).symm) |
| 86 | + |
| 87 | +/-- The second half of the **Kummer-Dedekind Theorem** in the monogenic case, stating that the |
| 88 | + bijection `factors_equiv'` defined in the first half preserves multiplicities. -/ |
| 89 | +theorem multiplicity_factors_map_eq_multiplicity (hI : is_maximal I) (hI' : I ≠ ⊥) {J : ideal S} |
| 90 | + (hJ : J ∈ normalized_factors (I.map (algebra_map R S))) : |
| 91 | + multiplicity J (I.map (algebra_map R S)) = |
| 92 | + multiplicity ↑(normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI' ⟨J, hJ⟩) |
| 93 | + (map I^.quotient.mk (minpoly R pb.gen)) := |
| 94 | +by rw [normalized_factors_map_equiv_normalized_factors_min_poly_mk, equiv.coe_trans, |
| 95 | + function.comp_app, |
| 96 | + multiplicity_normalized_factors_equiv_span_normalized_factors_symm_eq_multiplicity, |
| 97 | + normalized_factors_equiv_of_quot_equiv_multiplicity_eq_multiplicity] |
| 98 | + |
| 99 | +/-- The **Kummer-Dedekind Theorem**. -/ |
| 100 | +theorem normalized_factors_ideal_map_eq_normalized_factors_min_poly_mk_map (hI : is_maximal I) |
| 101 | + (hI' : I ≠ ⊥) : normalized_factors (I.map (algebra_map R S)) = multiset.map |
| 102 | + (λ f, ((normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI').symm f : ideal S)) |
| 103 | + (normalized_factors (polynomial.map I^.quotient.mk (minpoly R pb.gen))).attach := |
| 104 | +begin |
| 105 | + ext J, |
| 106 | + -- WLOG, assume J is a normalized factor |
| 107 | + by_cases hJ : J ∈ normalized_factors (I.map (algebra_map R S)), swap, |
| 108 | + { rw [multiset.count_eq_zero.mpr hJ, eq_comm, multiset.count_eq_zero, multiset.mem_map], |
| 109 | + simp only [multiset.mem_attach, true_and, not_exists], |
| 110 | + rintros J' rfl, |
| 111 | + exact hJ |
| 112 | + ((normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI').symm J').prop }, |
| 113 | + |
| 114 | + -- Then we just have to compare the multiplicities, which we already proved are equal. |
| 115 | + have := multiplicity_factors_map_eq_multiplicity pb hI hI' hJ, |
| 116 | + rw [multiplicity_eq_count_normalized_factors, multiplicity_eq_count_normalized_factors, |
| 117 | + unique_factorization_monoid.normalize_normalized_factor _ hJ, |
| 118 | + unique_factorization_monoid.normalize_normalized_factor, |
| 119 | + part_enat.coe_inj] |
| 120 | + at this, |
| 121 | + refine this.trans _, |
| 122 | + -- Get rid of the `map` by applying the equiv to both sides. |
| 123 | + generalize hJ' : (normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI') |
| 124 | + ⟨J, hJ⟩ = J', |
| 125 | + have : ((normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI').symm |
| 126 | + J' : ideal S) = J, |
| 127 | + { rw [← hJ', equiv.symm_apply_apply _ _, subtype.coe_mk] }, |
| 128 | + subst this, |
| 129 | + -- Get rid of the `attach` by applying the subtype `coe` to both sides. |
| 130 | + rw [multiset.count_map_eq_count' (λ f, |
| 131 | + ((normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI').symm f |
| 132 | + : ideal S)), |
| 133 | + multiset.attach_count_eq_count_coe], |
| 134 | + { exact subtype.coe_injective.comp (equiv.injective _) }, |
| 135 | + { exact (normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI' _).prop }, |
| 136 | + { exact irreducible_of_normalized_factor _ |
| 137 | + (normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI' _).prop }, |
| 138 | + { exact polynomial.map_monic_ne_zero (minpoly.monic pb.is_integral_gen) }, |
| 139 | + { exact irreducible_of_normalized_factor _ hJ }, |
| 140 | + { rwa [← bot_eq_zero, ne.def, map_eq_bot_iff_of_injective pb.basis.algebra_map_injective] }, |
| 141 | +end |
| 142 | + |
| 143 | +theorem ideal.irreducible_map_of_irreducible_minpoly (hI : is_maximal I) (hI' : I ≠ ⊥) |
| 144 | + (hf : irreducible (map I^.quotient.mk (minpoly R pb.gen))) : |
| 145 | + irreducible (I.map (algebra_map R S)) := |
| 146 | +begin |
| 147 | + have mem_norm_factors : normalize (map I^.quotient.mk (minpoly R pb.gen)) ∈ normalized_factors |
| 148 | + (map I^.quotient.mk (minpoly R pb.gen)) := by simp [normalized_factors_irreducible hf], |
| 149 | + suffices : ∃ x, normalized_factors (I.map (algebra_map R S)) = {x}, |
| 150 | + { obtain ⟨x, hx⟩ := this, |
| 151 | + have h := normalized_factors_prod (show I.map (algebra_map R S) ≠ 0, by |
| 152 | + rwa [← bot_eq_zero, ne.def, map_eq_bot_iff_of_injective pb.basis.algebra_map_injective]), |
| 153 | + rw [associated_iff_eq, hx, multiset.prod_singleton] at h, |
| 154 | + rw ← h, |
| 155 | + exact irreducible_of_normalized_factor x |
| 156 | + (show x ∈ normalized_factors (I.map (algebra_map R S)), by simp [hx]) }, |
| 157 | + rw normalized_factors_ideal_map_eq_normalized_factors_min_poly_mk_map pb hI hI', |
| 158 | + use ((normalized_factors_map_equiv_normalized_factors_min_poly_mk pb hI hI').symm |
| 159 | + ⟨normalize (map I^.quotient.mk (minpoly R pb.gen)), mem_norm_factors⟩ : ideal S), |
| 160 | + rw multiset.map_eq_singleton, |
| 161 | + use ⟨normalize (map I^.quotient.mk (minpoly R pb.gen)), mem_norm_factors⟩, |
| 162 | + refine ⟨_, rfl⟩, |
| 163 | + apply multiset.map_injective subtype.coe_injective, |
| 164 | + rw [multiset.attach_map_coe, multiset.map_singleton, subtype.coe_mk], |
| 165 | + exact normalized_factors_irreducible hf |
| 166 | +end |
| 167 | + |
| 168 | +end kummer_dedekind |
0 commit comments