|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Chris Hughes. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Chris Hughes |
| 5 | +
|
| 6 | +! This file was ported from Lean 3 source module field_theory.is_alg_closed.classification |
| 7 | +! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a |
| 8 | +! Please do not edit these lines, except to modify the commit id |
| 9 | +! if you have ported upstream changes. |
| 10 | +-/ |
| 11 | +import Mathlib.RingTheory.AlgebraicIndependent |
| 12 | +import Mathlib.FieldTheory.IsAlgClosed.Basic |
| 13 | +import Mathlib.Data.Polynomial.Cardinal |
| 14 | +import Mathlib.Data.MvPolynomial.Cardinal |
| 15 | +import Mathlib.Data.ZMod.Algebra |
| 16 | + |
| 17 | +/-! |
| 18 | +# Classification of Algebraically closed fields |
| 19 | +
|
| 20 | +This file contains results related to classifying algebraically closed fields. |
| 21 | +
|
| 22 | +## Main statements |
| 23 | +
|
| 24 | +* `IsAlgClosed.equivOfTranscendenceBasis` Two algebraically closed fields with the same |
| 25 | + characteristic and the same cardinality of transcendence basis are isomorphic. |
| 26 | +* `IsAlgClosed.ringEquivOfCardinalEqOfCharEq` Two uncountable algebraically closed fields |
| 27 | + are isomorphic if they have the same characteristic and the same cardinality. |
| 28 | +-/ |
| 29 | + |
| 30 | + |
| 31 | +universe u |
| 32 | + |
| 33 | +open scoped Cardinal Polynomial |
| 34 | + |
| 35 | +open Cardinal |
| 36 | + |
| 37 | +section AlgebraicClosure |
| 38 | + |
| 39 | +namespace Algebra.IsAlgebraic |
| 40 | + |
| 41 | +variable (R L : Type u) [CommRing R] [CommRing L] [IsDomain L] [Algebra R L] |
| 42 | + |
| 43 | +variable [NoZeroSMulDivisors R L] (halg : Algebra.IsAlgebraic R L) |
| 44 | + |
| 45 | +theorem cardinal_mk_le_sigma_polynomial : |
| 46 | + (#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) := |
| 47 | + @mk_le_of_injective L (Σ p : R[X], {x : L | x ∈ (p.map (algebraMap R L)).roots}) |
| 48 | + (fun x : L => |
| 49 | + let p := Classical.indefiniteDescription _ (halg x) |
| 50 | + ⟨p.1, x, by |
| 51 | + dsimp |
| 52 | + have h : p.1.map (algebraMap R L) ≠ 0 := by |
| 53 | + rw [Ne.def, ← Polynomial.degree_eq_bot, |
| 54 | + Polynomial.degree_map_eq_of_injective (NoZeroSMulDivisors.algebraMap_injective R L), |
| 55 | + Polynomial.degree_eq_bot] |
| 56 | + exact p.2.1 |
| 57 | + erw [Polynomial.mem_roots h, Polynomial.IsRoot, Polynomial.eval_map, ← Polynomial.aeval_def, |
| 58 | + p.2.2]⟩) |
| 59 | + fun x y => by |
| 60 | + intro h |
| 61 | + simp at h |
| 62 | + refine' (Subtype.heq_iff_coe_eq _).1 h.2 |
| 63 | + simp only [h.1, iff_self_iff, forall_true_iff] |
| 64 | +#align algebra.is_algebraic.cardinal_mk_le_sigma_polynomial Algebra.IsAlgebraic.cardinal_mk_le_sigma_polynomial |
| 65 | + |
| 66 | +/-- The cardinality of an algebraic extension is at most the maximum of the cardinality |
| 67 | +of the base ring or `ℵ₀` -/ |
| 68 | +theorem cardinal_mk_le_max : (#L) ≤ max (#R) ℵ₀ := |
| 69 | + calc |
| 70 | + (#L) ≤ (#Σ p : R[X], { x : L // x ∈ (p.map (algebraMap R L)).roots }) := |
| 71 | + cardinal_mk_le_sigma_polynomial R L halg |
| 72 | + _ = Cardinal.sum fun p : R[X] => #{x : L | x ∈ (p.map (algebraMap R L)).roots} := by |
| 73 | + rw [← mk_sigma]; rfl |
| 74 | + _ ≤ Cardinal.sum.{u, u} fun _ : R[X] => ℵ₀ := |
| 75 | + (sum_le_sum _ _ fun p => (Multiset.finite_toSet _).lt_aleph0.le) |
| 76 | + _ = (#R[X]) * ℵ₀ := (sum_const' _ _) |
| 77 | + _ ≤ max (max (#R[X]) ℵ₀) ℵ₀ := (mul_le_max _ _) |
| 78 | + _ ≤ max (max (max (#R) ℵ₀) ℵ₀) ℵ₀ := |
| 79 | + (max_le_max (max_le_max Polynomial.cardinal_mk_le_max le_rfl) le_rfl) |
| 80 | + _ = max (#R) ℵ₀ := by simp only [max_assoc, max_comm ℵ₀, max_left_comm ℵ₀, max_self] |
| 81 | +#align algebra.is_algebraic.cardinal_mk_le_max Algebra.IsAlgebraic.cardinal_mk_le_max |
| 82 | + |
| 83 | +end Algebra.IsAlgebraic |
| 84 | + |
| 85 | +end AlgebraicClosure |
| 86 | + |
| 87 | +namespace IsAlgClosed |
| 88 | + |
| 89 | +section Classification |
| 90 | + |
| 91 | +noncomputable section |
| 92 | + |
| 93 | +variable {R L K : Type _} [CommRing R] |
| 94 | + |
| 95 | +variable [Field K] [Algebra R K] |
| 96 | + |
| 97 | +variable [Field L] [Algebra R L] |
| 98 | + |
| 99 | +variable {ι : Type _} (v : ι → K) |
| 100 | + |
| 101 | +variable {κ : Type _} (w : κ → L) |
| 102 | + |
| 103 | +variable (hv : AlgebraicIndependent R v) |
| 104 | + |
| 105 | +theorem isAlgClosure_of_transcendence_basis [IsAlgClosed K] (hv : IsTranscendenceBasis R v) : |
| 106 | + IsAlgClosure (Algebra.adjoin R (Set.range v)) K := |
| 107 | + letI := RingHom.domain_nontrivial (algebraMap R K) |
| 108 | + { alg_closed := by infer_instance |
| 109 | + algebraic := hv.isAlgebraic } |
| 110 | +#align is_alg_closed.is_alg_closure_of_transcendence_basis IsAlgClosed.isAlgClosure_of_transcendence_basis |
| 111 | + |
| 112 | +variable (hw : AlgebraicIndependent R w) |
| 113 | + |
| 114 | +/-- setting `R` to be `ZMod (ringChar R)` this result shows that if two algebraically |
| 115 | +closed fields have equipotent transcendence bases and the same characteristic then they are |
| 116 | +isomorphic. -/ |
| 117 | +def equivOfTranscendenceBasis [IsAlgClosed K] [IsAlgClosed L] (e : ι ≃ κ) |
| 118 | + (hv : IsTranscendenceBasis R v) (hw : IsTranscendenceBasis R w) : K ≃+* L := by |
| 119 | + letI := isAlgClosure_of_transcendence_basis v hv |
| 120 | + letI := isAlgClosure_of_transcendence_basis w hw |
| 121 | + have e : Algebra.adjoin R (Set.range v) ≃+* Algebra.adjoin R (Set.range w) |
| 122 | + · refine' hv.1.aevalEquiv.symm.toRingEquiv.trans _ |
| 123 | + refine' (AlgEquiv.ofAlgHom (MvPolynomial.rename e) |
| 124 | + (MvPolynomial.rename e.symm) _ _).toRingEquiv.trans _ |
| 125 | + · ext; simp |
| 126 | + · ext; simp |
| 127 | + exact hw.1.aevalEquiv.toRingEquiv |
| 128 | + exact IsAlgClosure.equivOfEquiv K L e |
| 129 | +#align is_alg_closed.equiv_of_transcendence_basis IsAlgClosed.equivOfTranscendenceBasis |
| 130 | + |
| 131 | +end |
| 132 | + |
| 133 | +end Classification |
| 134 | + |
| 135 | +section Cardinal |
| 136 | + |
| 137 | +variable {R L K : Type u} [CommRing R] |
| 138 | + |
| 139 | +variable [Field K] [Algebra R K] [IsAlgClosed K] |
| 140 | + |
| 141 | +variable {ι : Type u} (v : ι → K) |
| 142 | + |
| 143 | +variable (hv : IsTranscendenceBasis R v) |
| 144 | + |
| 145 | +theorem cardinal_le_max_transcendence_basis (hv : IsTranscendenceBasis R v) : |
| 146 | + (#K) ≤ max (max (#R) (#ι)) ℵ₀ := |
| 147 | + calc |
| 148 | + (#K) ≤ max (#Algebra.adjoin R (Set.range v)) ℵ₀ := |
| 149 | + letI := isAlgClosure_of_transcendence_basis v hv |
| 150 | + Algebra.IsAlgebraic.cardinal_mk_le_max _ _ IsAlgClosure.algebraic |
| 151 | + _ = max (#MvPolynomial ι R) ℵ₀ := by rw [Cardinal.eq.2 ⟨hv.1.aevalEquiv.toEquiv⟩] |
| 152 | + _ ≤ max (max (max (#R) (#ι)) ℵ₀) ℵ₀ := (max_le_max MvPolynomial.cardinal_mk_le_max le_rfl) |
| 153 | + _ = _ := by simp [max_assoc] |
| 154 | +#align is_alg_closed.cardinal_le_max_transcendence_basis IsAlgClosed.cardinal_le_max_transcendence_basis |
| 155 | + |
| 156 | +/-- If `K` is an uncountable algebraically closed field, then its |
| 157 | +cardinality is the same as that of a transcendence basis. -/ |
| 158 | +theorem cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt [Nontrivial R] |
| 159 | + (hv : IsTranscendenceBasis R v) (hR : (#R) ≤ ℵ₀) (hK : ℵ₀ < (#K)) : (#K) = (#ι) := |
| 160 | + have : ℵ₀ ≤ (#ι) := le_of_not_lt fun h => not_le_of_gt hK <| |
| 161 | + calc |
| 162 | + (#K) ≤ max (max (#R) (#ι)) ℵ₀ := cardinal_le_max_transcendence_basis v hv |
| 163 | + _ ≤ _ := max_le (max_le hR (le_of_lt h)) le_rfl |
| 164 | + le_antisymm |
| 165 | + (calc |
| 166 | + (#K) ≤ max (max (#R) (#ι)) ℵ₀ := cardinal_le_max_transcendence_basis v hv |
| 167 | + _ = (#ι) := by |
| 168 | + rw [max_eq_left, max_eq_right] |
| 169 | + · exact le_trans hR this |
| 170 | + · exact le_max_of_le_right this) |
| 171 | + (mk_le_of_injective (show Function.Injective v from hv.1.injective)) |
| 172 | +#align is_alg_closed.cardinal_eq_cardinal_transcendence_basis_of_aleph_0_lt IsAlgClosed.cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt |
| 173 | + |
| 174 | +end Cardinal |
| 175 | + |
| 176 | +variable {K L : Type} [Field K] [Field L] [IsAlgClosed K] [IsAlgClosed L] |
| 177 | + |
| 178 | +/-- Two uncountable algebraically closed fields of characteristic zero are isomorphic |
| 179 | +if they have the same cardinality. -/ |
| 180 | +@[nolint defLemma] |
| 181 | +theorem ringEquivOfCardinalEqOfCharZero [CharZero K] [CharZero L] (hK : ℵ₀ < (#K)) |
| 182 | + (hKL : (#K) = (#L)) : K ≃+* L := by |
| 183 | + apply Classical.choice |
| 184 | + cases' exists_isTranscendenceBasis ℤ |
| 185 | + (show Function.Injective (algebraMap ℤ K) from Int.cast_injective) with s hs |
| 186 | + cases' exists_isTranscendenceBasis ℤ |
| 187 | + (show Function.Injective (algebraMap ℤ L) from Int.cast_injective) with t ht |
| 188 | + have : (#s) = (#t) := by |
| 189 | + rw [← cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ hs (le_of_eq mk_int) hK, ← |
| 190 | + cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ ht (le_of_eq mk_int), hKL] |
| 191 | + rwa [← hKL] |
| 192 | + cases' Cardinal.eq.1 this with e |
| 193 | + exact ⟨equivOfTranscendenceBasis _ _ e hs ht⟩ |
| 194 | +#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_zero IsAlgClosed.ringEquivOfCardinalEqOfCharZero |
| 195 | + |
| 196 | +private theorem ringEquivOfCardinalEqOfCharP (p : ℕ) [Fact p.Prime] [CharP K p] [CharP L p] |
| 197 | + (hK : ℵ₀ < (#K)) (hKL : (#K) = (#L)) : K ≃+* L := by |
| 198 | + apply Classical.choice |
| 199 | + cases' exists_isTranscendenceBasis (ZMod p) |
| 200 | + (show Function.Injective (algebraMap (ZMod p) K) from RingHom.injective _) with s hs |
| 201 | + cases' exists_isTranscendenceBasis (ZMod p) |
| 202 | + (show Function.Injective (algebraMap (ZMod p) L) from RingHom.injective _) with t ht |
| 203 | + have : (#s) = (#t) := by |
| 204 | + rw [← cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ hs |
| 205 | + (lt_aleph0_of_finite (ZMod p)).le hK, |
| 206 | + ← cardinal_eq_cardinal_transcendence_basis_of_aleph0_lt _ ht |
| 207 | + (lt_aleph0_of_finite (ZMod p)).le, hKL] |
| 208 | + rwa [← hKL] |
| 209 | + cases' Cardinal.eq.1 this with e |
| 210 | + exact ⟨equivOfTranscendenceBasis _ _ e hs ht⟩ |
| 211 | + |
| 212 | +/-- Two uncountable algebraically closed fields are isomorphic |
| 213 | +if they have the same cardinality and the same characteristic. -/ |
| 214 | +@[nolint defLemma] |
| 215 | +theorem ringEquivOfCardinalEqOfCharEq (p : ℕ) [CharP K p] [CharP L p] (hK : ℵ₀ < (#K)) |
| 216 | + (hKL : (#K) = (#L)) : K ≃+* L := by |
| 217 | + apply Classical.choice |
| 218 | + rcases CharP.char_is_prime_or_zero K p with (hp | hp) |
| 219 | + · haveI : Fact p.Prime := ⟨hp⟩ |
| 220 | + exact ⟨ringEquivOfCardinalEqOfCharP p hK hKL⟩ |
| 221 | + · simp only [hp] at * |
| 222 | + letI : CharZero K := CharP.charP_to_charZero K |
| 223 | + letI : CharZero L := CharP.charP_to_charZero L |
| 224 | + exact ⟨ringEquivOfCardinalEqOfCharZero hK hKL⟩ |
| 225 | +#align is_alg_closed.ring_equiv_of_cardinal_eq_of_char_eq IsAlgClosed.ringEquivOfCardinalEqOfCharEq |
| 226 | + |
| 227 | +end IsAlgClosed |
0 commit comments