|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Andrew Yang. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Andrew Yang |
| 5 | +-/ |
| 6 | +import Mathlib.FieldTheory.Finite.Basic |
| 7 | +import Mathlib.RingTheory.Invariant |
| 8 | +import Mathlib.RingTheory.RootsOfUnity.PrimitiveRoots |
| 9 | +import Mathlib.RingTheory.Unramified.Locus |
| 10 | + |
| 11 | +/-! |
| 12 | +# Frobenius elements |
| 13 | +
|
| 14 | +In algebraic number theory, if `L/K` is a finite Galois extension of number fields, with rings of |
| 15 | +integers `𝓞L/𝓞K`, and if `q` is prime ideal of `𝓞L` lying over a prime ideal `p` of `𝓞K`, then |
| 16 | +there exists a **Frobenius element** `Frob p` in `Gal(L/K)` with the property that |
| 17 | +`Frob p x ≡ x ^ #(𝓞K/p) (mod q)` for all `x ∈ 𝓞L`. |
| 18 | +
|
| 19 | +Following `RingTheory/Invariant.lean`, we develop the theory in the setting that |
| 20 | +there is a finite group `G` acting on a ring `S`, and `R` is the fixed subring of `S`. |
| 21 | +
|
| 22 | +## Main results |
| 23 | +
|
| 24 | +Let `S/R` be an extension of rings, `Q` be a prime of `S`, |
| 25 | +and `P := R ∩ Q` with finite residue field of cardinality `q`. |
| 26 | +
|
| 27 | +- `AlgHom.IsArithFrobAt`: We say that a `φ : S →ₐ[R] S` is an (arithmetic) Frobenius at `Q` |
| 28 | + if `φ x ≡ x ^ q (mod Q)` for all `x : S`. |
| 29 | +- `AlgHom.IsArithFrobAt.apply_of_pow_eq_one`: |
| 30 | + Suppose `S` is a domain and `φ` is a Frobenius at `Q`, |
| 31 | + then `φ ζ = ζ ^ q` for any `m`-th root of unity `ζ` with `q ∤ m`. |
| 32 | +- `AlgHom.IsArithFrobAt.eq_of_isUnramifiedAt`: |
| 33 | + Suppose `S` is noetherian, `Q` contains all zero-divisors, and the extension is unramified at `Q`. |
| 34 | + Then the Frobenius is unique (if exists). |
| 35 | +
|
| 36 | +Let `G` be a finite group acting on a ring `S`, and `R` is the fixed subring of `S`. |
| 37 | +
|
| 38 | +- `IsArithFrobAt`: We say that a `σ : G` is an (arithmetic) Frobenius at `Q` |
| 39 | + if `σ • x ≡ x ^ q (mod Q)` for all `x : S`. |
| 40 | +- `IsArithFrobAt.mul_inv_mem_inertia`: |
| 41 | + Two Frobenius elements at `Q` differ by an element in the inertia subgroup of `Q`. |
| 42 | +- `IsArithFrobAt.conj`: If `σ` is a Frobenius at `Q`, then `τστ⁻¹` is a Frobenius at `σ • Q`. |
| 43 | +- `IsArithFrobAt.exists_of_isInvariant`: Frobenius element exists. |
| 44 | +-/ |
| 45 | + |
| 46 | +variable {R S : Type*} [CommRing R] [CommRing S] [Algebra R S] |
| 47 | + |
| 48 | +/-- `φ : S →ₐ[R] S` is an (arithmetic) Frobenius at `Q` if |
| 49 | +`φ x ≡ x ^ #(R/p) (mod Q)` for all `x : S` (`AlgHom.IsArithFrobAt`). -/ |
| 50 | +def AlgHom.IsArithFrobAt (φ : S →ₐ[R] S) (Q : Ideal S) : Prop := |
| 51 | + ∀ x, φ x - x ^ Nat.card (R ⧸ Q.under R) ∈ Q |
| 52 | + |
| 53 | +namespace AlgHom.IsArithFrobAt |
| 54 | + |
| 55 | +variable {φ ψ : S →ₐ[R] S} {Q : Ideal S} (H : φ.IsArithFrobAt Q) |
| 56 | + |
| 57 | +include H |
| 58 | + |
| 59 | +lemma mk_apply (x) : Ideal.Quotient.mk Q (φ x) = x ^ Nat.card (R ⧸ Q.under R) := by |
| 60 | + rw [← map_pow, Ideal.Quotient.eq] |
| 61 | + exact H x |
| 62 | + |
| 63 | +lemma finite_quotient : _root_.Finite (R ⧸ Q.under R) := by |
| 64 | + rw [← not_infinite_iff_finite] |
| 65 | + intro h |
| 66 | + obtain rfl : Q = ⊤ := by simpa [Nat.card_eq_zero_of_infinite, ← Ideal.eq_top_iff_one] using H 0 |
| 67 | + simp only [Ideal.comap_top] at h |
| 68 | + exact not_finite (R ⧸ (⊤ : Ideal R)) |
| 69 | + |
| 70 | +lemma card_pos : 0 < Nat.card (R ⧸ Q.under R) := |
| 71 | + have := H.finite_quotient |
| 72 | + Nat.card_pos |
| 73 | + |
| 74 | +lemma le_comap : Q ≤ Q.comap φ := by |
| 75 | + intro x hx |
| 76 | + simp_all only [Ideal.mem_comap, ← Ideal.Quotient.eq_zero_iff_mem (I := Q), H.mk_apply, |
| 77 | + zero_pow_eq, ite_eq_right_iff, H.card_pos.ne', false_implies] |
| 78 | + |
| 79 | +/-- A Frobenius element at `Q` restricts to the Frobenius map on `S ⧸ Q`. -/ |
| 80 | +def restrict : S ⧸ Q →ₐ[R ⧸ Q.under R] S ⧸ Q where |
| 81 | + toRingHom := Ideal.quotientMap Q φ H.le_comap |
| 82 | + commutes' x := by |
| 83 | + obtain ⟨x, rfl⟩ := Ideal.Quotient.mk_surjective x |
| 84 | + exact DFunLike.congr_arg (Ideal.Quotient.mk Q) (φ.commutes x) |
| 85 | + |
| 86 | +lemma restrict_apply (x : S ⧸ Q) : |
| 87 | + H.restrict x = x ^ Nat.card (R ⧸ Q.under R) := by |
| 88 | + obtain ⟨x, rfl⟩ := Ideal.Quotient.mk_surjective x |
| 89 | + exact H.mk_apply x |
| 90 | + |
| 91 | +lemma restrict_mk (x : S) : H.restrict ↑x = ↑(φ x) := rfl |
| 92 | + |
| 93 | +lemma restrict_injective [Q.IsPrime] : |
| 94 | + Function.Injective H.restrict := by |
| 95 | + rw [injective_iff_map_eq_zero] |
| 96 | + intro x hx |
| 97 | + simpa [restrict_apply, H.card_pos.ne'] using hx |
| 98 | + |
| 99 | +lemma comap_eq [Q.IsPrime] : Q.comap φ = Q := by |
| 100 | + refine le_antisymm (fun x hx ↦ ?_) H.le_comap |
| 101 | + rwa [← Ideal.Quotient.eq_zero_iff_mem, ← H.restrict_injective.eq_iff, map_zero, restrict_mk, |
| 102 | + Ideal.Quotient.eq_zero_iff_mem, ← Ideal.mem_comap] |
| 103 | + |
| 104 | +/-- Suppose `S` is a domain, and `φ : S →ₐ[R] S` is a Frobenius at `Q : Ideal S`. |
| 105 | +Let `ζ` be a `m`-th root of unity with `Q ∤ m`, then `φ` sends `ζ` to `ζ ^ q`. -/ |
| 106 | +lemma apply_of_pow_eq_one [IsDomain S] {ζ : S} {m : ℕ} (hζ : ζ ^ m = 1) (hk' : ↑m ∉ Q) : |
| 107 | + φ ζ = ζ ^ Nat.card (R ⧸ Q.under R) := by |
| 108 | + set q := Nat.card (R ⧸ Q.under R) |
| 109 | + have hm : m ≠ 0 := by rintro rfl; exact hk' (by simp) |
| 110 | + obtain ⟨k, hk, hζ⟩ := IsPrimitiveRoot.exists_pos hζ hm |
| 111 | + have hk' : ↑k ∉ Q := fun h ↦ hk' (Q.mem_of_dvd (Nat.cast_dvd_cast (hζ.2 m ‹_›)) h) |
| 112 | + have : NeZero k := ⟨hk.ne'⟩ |
| 113 | + obtain ⟨i, hi, e⟩ := hζ.eq_pow_of_pow_eq_one (ξ := φ ζ) (by rw [← map_pow, hζ.1, map_one]) |
| 114 | + have (j) : 1 - ζ ^ ((q + k - i) * j) ∈ Q := by |
| 115 | + rw [← Ideal.mul_unit_mem_iff_mem _ ((hζ.isUnit k.pos_of_neZero).pow (i * j)), |
| 116 | + sub_mul, one_mul, ← pow_add, ← add_mul, tsub_add_cancel_of_le (by linarith), add_mul, |
| 117 | + pow_add, pow_mul _ k, hζ.1, one_pow, mul_one, pow_mul, e, ← map_pow, mul_comm, pow_mul] |
| 118 | + exact H _ |
| 119 | + have h₁ := sum_mem (t := Finset.range k) fun j _ ↦ this j |
| 120 | + have h₂ := geom_sum_mul (ζ ^ (q + k - i)) k |
| 121 | + rw [pow_right_comm, hζ.1, one_pow, sub_self, mul_eq_zero, sub_eq_zero] at h₂ |
| 122 | + cases' h₂ with h₂ h₂ |
| 123 | + · simp [h₂, pow_mul, hk'] at h₁ |
| 124 | + replace h₂ := congr($h₂ * ζ ^ i) |
| 125 | + rw [one_mul, ← pow_add, tsub_add_cancel_of_le (by linarith), pow_add, hζ.1, mul_one] at h₂ |
| 126 | + rw [h₂, e] |
| 127 | + |
| 128 | +/-- A Frobenius element at `Q` restricts to an automorphism of `S_Q`. -/ |
| 129 | +noncomputable |
| 130 | +def localize [Q.IsPrime] : Localization.AtPrime Q →ₐ[R] Localization.AtPrime Q where |
| 131 | + toRingHom := Localization.localRingHom _ _ φ H.comap_eq.symm |
| 132 | + commutes' x := by |
| 133 | + simp [IsScalarTower.algebraMap_apply R S (Localization.AtPrime Q), |
| 134 | + Localization.localRingHom_to_map] |
| 135 | + |
| 136 | +@[simp] |
| 137 | +lemma localize_algebraMap [Q.IsPrime] (x : S) : |
| 138 | + H.localize (algebraMap _ _ x) = algebraMap _ _ (φ x) := |
| 139 | + Localization.localRingHom_to_map _ _ _ H.comap_eq.symm _ |
| 140 | + |
| 141 | +open IsLocalRing nonZeroDivisors |
| 142 | + |
| 143 | +lemma isArithFrobAt_localize [Q.IsPrime] : H.localize.IsArithFrobAt (maximalIdeal _) := by |
| 144 | + have h : Nat.card (R ⧸ (maximalIdeal _).comap (algebraMap R (Localization.AtPrime Q))) = |
| 145 | + Nat.card (R ⧸ Q.under R) := by |
| 146 | + congr 2 |
| 147 | + rw [IsScalarTower.algebraMap_eq R S (Localization.AtPrime Q), ← Ideal.comap_comap, |
| 148 | + Localization.AtPrime.comap_maximalIdeal] |
| 149 | + intro x |
| 150 | + obtain ⟨x, s, rfl⟩ := IsLocalization.mk'_surjective Q.primeCompl x |
| 151 | + simp [localize, coe_mk, -mem_maximalIdeal, mem_nonunits_iff, Localization.localRingHom_mk', |
| 152 | + ← IsLocalization.mk'_pow, h] |
| 153 | + rw [← IsLocalization.mk'_sub, |
| 154 | + IsLocalization.AtPrime.mk'_mem_maximal_iff (Localization.AtPrime Q) Q] |
| 155 | + simp only [SubmonoidClass.coe_pow, ← Ideal.Quotient.eq_zero_iff_mem] |
| 156 | + simp [H.mk_apply] |
| 157 | + |
| 158 | +/-- Suppose `S` is noetherian and `Q` is a prime of `S` containing all zero divisors. |
| 159 | +If `S/R` is unramified at `Q`, then the Frobenius `φ : S →ₐ[R] S` over `Q` is unique. -/ |
| 160 | +lemma eq_of_isUnramifiedAt |
| 161 | + (H' : ψ.IsArithFrobAt Q) [Q.IsPrime] (hQ : Q.primeCompl ≤ S⁰) |
| 162 | + [Algebra.IsUnramifiedAt R Q] [IsNoetherianRing S] : φ = ψ := by |
| 163 | + have : H.localize = H'.localize := by |
| 164 | + have : IsNoetherianRing (Localization.AtPrime Q) := |
| 165 | + IsLocalization.isNoetherianRing Q.primeCompl _ inferInstance |
| 166 | + apply Algebra.FormallyUnramified.ext_of_iInf _ |
| 167 | + (Ideal.iInf_pow_eq_bot_of_isLocalRing (maximalIdeal _) Ideal.IsPrime.ne_top') |
| 168 | + intro x |
| 169 | + rw [H.isArithFrobAt_localize.mk_apply, H'.isArithFrobAt_localize.mk_apply] |
| 170 | + ext x |
| 171 | + apply IsLocalization.injective (Localization.AtPrime Q) hQ |
| 172 | + rw [← H.localize_algebraMap, ← H'.localize_algebraMap, this] |
| 173 | + |
| 174 | +end AlgHom.IsArithFrobAt |
| 175 | + |
| 176 | +variable (R) in |
| 177 | +/-- |
| 178 | +Suppose `S` is an `R` algebra, `M` is a monoid acting on `S` whose action is trivial on `R` |
| 179 | +`σ : M` is an (arithmetic) Frobenius at an ideal `Q` of `S` if `σ • x ≡ x ^ q (mod Q)` for all `x`. |
| 180 | +-/ |
| 181 | +abbrev IsArithFrobAt {M : Type*} [Monoid M] [MulSemiringAction M S] [SMulCommClass M R S] |
| 182 | + (σ : M) (Q : Ideal S) : Prop := |
| 183 | + (MulSemiringAction.toAlgHom R S σ).IsArithFrobAt Q |
| 184 | + |
| 185 | +namespace IsArithFrobAt |
| 186 | + |
| 187 | +open scoped Pointwise |
| 188 | + |
| 189 | +variable {G : Type*} [Group G] [MulSemiringAction G S] [SMulCommClass G R S] |
| 190 | +variable {Q : Ideal S} {σ σ' : G} |
| 191 | + |
| 192 | +lemma mul_inv_mem_inertia (H : IsArithFrobAt R σ Q) (H' : IsArithFrobAt R σ' Q) : |
| 193 | + σ * σ'⁻¹ ∈ Q.toAddSubgroup.inertia G := by |
| 194 | + intro x |
| 195 | + simpa [mul_smul] using sub_mem (H (σ'⁻¹ • x)) (H' (σ'⁻¹ • x)) |
| 196 | + |
| 197 | +lemma conj (H : IsArithFrobAt R σ Q) (τ : G) : IsArithFrobAt R (τ * σ * τ⁻¹) (τ • Q) := by |
| 198 | + intro x |
| 199 | + have : (Q.map (MulSemiringAction.toRingEquiv G S τ)).under R = Q.under R := by |
| 200 | + rw [← Ideal.comap_symm, ← Ideal.comap_coe, Ideal.under, Ideal.comap_comap] |
| 201 | + congr 1 |
| 202 | + exact (MulSemiringAction.toAlgEquiv R S τ).symm.toAlgHom.comp_algebraMap |
| 203 | + rw [Ideal.pointwise_smul_eq_comap, Ideal.mem_comap] |
| 204 | + simpa [smul_sub, mul_smul, this] using H (τ⁻¹ • x) |
| 205 | + |
| 206 | +variable [Finite G] [Algebra.IsInvariant R S G] |
| 207 | + |
| 208 | +variable (R G Q) in |
| 209 | +attribute [local instance] Ideal.Quotient.field in |
| 210 | +/-- Let `G` be a finite group acting on `S`, and `R` be the fixed subring. |
| 211 | +If `Q` is a prime of `S` with finite residue field, |
| 212 | +then there exists a Frobenius element `σ : G` at `Q`. -/ |
| 213 | +lemma exists_of_isInvariant [Q.IsPrime] [Finite (S ⧸ Q)] : ∃ σ : G, IsArithFrobAt R σ Q := by |
| 214 | + let P := Q.under R |
| 215 | + have := Algebra.IsInvariant.isIntegral R S G |
| 216 | + have : Q.IsMaximal := Ideal.Quotient.maximal_of_isField _ (Finite.isField_of_domain (S ⧸ Q)) |
| 217 | + have : P.IsMaximal := Ideal.isMaximal_comap_of_isIntegral_of_isMaximal Q |
| 218 | + obtain ⟨p, hc⟩ := CharP.exists (R ⧸ P) |
| 219 | + have : Finite (R ⧸ P) := .of_injective _ Ideal.algebraMap_quotient_injective |
| 220 | + cases nonempty_fintype (R ⧸ P) |
| 221 | + obtain ⟨k, hp, hk⟩ := FiniteField.card (R ⧸ P) p |
| 222 | + have := CharP.of_ringHom_of_ne_zero (algebraMap (R ⧸ P) (S ⧸ Q)) p hp.ne_zero |
| 223 | + have : ExpChar (S ⧸ Q) p := .prime hp |
| 224 | + let l : (S ⧸ Q) ≃ₐ[R ⧸ P] S ⧸ Q := |
| 225 | + { __ := iterateFrobeniusEquiv (S ⧸ Q) p k, |
| 226 | + commutes' r := by |
| 227 | + dsimp [iterateFrobenius_def] |
| 228 | + rw [← map_pow, ← hk, FiniteField.pow_card] } |
| 229 | + obtain ⟨σ, hσ⟩ := Ideal.Quotient.stabilizerHom_surjective G P Q l |
| 230 | + refine ⟨σ, fun x ↦ ?_⟩ |
| 231 | + rw [← Ideal.Quotient.eq, Nat.card_eq_fintype_card, hk] |
| 232 | + exact DFunLike.congr_fun hσ (Ideal.Quotient.mk Q x) |
| 233 | + |
| 234 | +variable (S G) in |
| 235 | +lemma exists_primesOver_isConj (P : Ideal R) |
| 236 | + (hP : ∃ Q : Ideal.primesOver P S, Finite (S ⧸ Q.1)) : |
| 237 | + ∃ σ : Ideal.primesOver P S → G, (∀ Q, IsArithFrobAt R (σ Q) Q.1) ∧ |
| 238 | + (∀ Q₁ Q₂, IsConj (σ Q₁) (σ Q₂)) := by |
| 239 | + obtain ⟨⟨Q, hQ₁, hQ₂⟩, hQ₃⟩ := hP |
| 240 | + have (Q' : Ideal.primesOver P S) : ∃ σ : G, Q'.1 = σ • Q := |
| 241 | + Algebra.IsInvariant.exists_smul_of_under_eq R S G _ _ (hQ₂.over.symm.trans Q'.2.2.over) |
| 242 | + choose τ hτ using this |
| 243 | + obtain ⟨σ, hσ⟩ := exists_of_isInvariant R G Q |
| 244 | + refine ⟨fun Q' ↦ τ Q' * σ * (τ Q')⁻¹, fun Q' ↦ hτ Q' ▸ hσ.conj (τ Q'), fun Q₁ Q₂ ↦ |
| 245 | + .trans (.symm (isConj_iff.mpr ⟨τ Q₁, rfl⟩)) (isConj_iff.mpr ⟨τ Q₂, rfl⟩)⟩ |
| 246 | + |
| 247 | +variable (R G Q) |
| 248 | + |
| 249 | +/-- Let `G` be a finite group acting on `S`, `R` be the fixed subring, and `Q` be a prime of `S` |
| 250 | +with finite residue field. This is an arbitrary choice of a Frobenius over `Q`. It is chosen so that |
| 251 | +the Frobenius elements of `Q₁` and `Q₂` are conjugate if they lie over the same prime. -/ |
| 252 | +noncomputable |
| 253 | +def _root_.arithFrobAt [Q.IsPrime] [Finite (S ⧸ Q)] : G := |
| 254 | + (exists_primesOver_isConj S G (Q.under R) |
| 255 | + ⟨⟨Q, ‹_›, ⟨rfl⟩⟩, ‹Finite (S ⧸ Q)›⟩).choose ⟨Q, ‹_›, ⟨rfl⟩⟩ |
| 256 | + |
| 257 | +protected lemma arithFrobAt [Q.IsPrime] [Finite (S ⧸ Q)] : IsArithFrobAt R (arithFrobAt R G Q) Q := |
| 258 | + (exists_primesOver_isConj S G (Q.under R) |
| 259 | + ⟨⟨Q, ‹_›, ⟨rfl⟩⟩, ‹Finite (S ⧸ Q)›⟩).choose_spec.1 ⟨Q, ‹_›, ⟨rfl⟩⟩ |
| 260 | + |
| 261 | +lemma _root_.isConj_arithFrobAt |
| 262 | + [Q.IsPrime] [Finite (S ⧸ Q)] (Q' : Ideal S) [Q'.IsPrime] [Finite (S ⧸ Q')] |
| 263 | + (H : Q.under R = Q'.under R) : IsConj (arithFrobAt R G Q) (arithFrobAt R G Q') := by |
| 264 | + obtain ⟨P, hP, h₁, h₂⟩ : ∃ P : Ideal R, P.IsPrime ∧ P = Q.under R ∧ P = Q'.under R := |
| 265 | + ⟨Q.under R, inferInstance, rfl, H⟩ |
| 266 | + convert (exists_primesOver_isConj S G P |
| 267 | + ⟨⟨Q, ‹_›, ⟨h₁⟩⟩, ‹Finite (S ⧸ Q)›⟩).choose_spec.2 ⟨Q, ‹_›, ⟨h₁⟩⟩ ⟨Q', ‹_›, ⟨h₂⟩⟩ |
| 268 | + · subst h₁; rfl |
| 269 | + · subst h₂; rfl |
| 270 | + |
| 271 | +end IsArithFrobAt |
0 commit comments