Skip to content

Commit e829a10

Browse files
committed
feat(RingTheory): frobenius elements (#21770)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 6832fbb commit e829a10

File tree

10 files changed

+390
-41
lines changed

10 files changed

+390
-41
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4641,6 +4641,7 @@ import Mathlib.RingTheory.FractionalIdeal.Norm
46414641
import Mathlib.RingTheory.FractionalIdeal.Operations
46424642
import Mathlib.RingTheory.FreeCommRing
46434643
import Mathlib.RingTheory.FreeRing
4644+
import Mathlib.RingTheory.Frobenius
46444645
import Mathlib.RingTheory.Generators
46454646
import Mathlib.RingTheory.GradedAlgebra.Basic
46464647
import Mathlib.RingTheory.GradedAlgebra.Homogeneous.Ideal

Mathlib/Algebra/CharP/Algebra.lean

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,23 @@ Instances constructed from this result:
2828
2929
-/
3030

31+
/-- Given `R →+* A`, then `char A ∣ char R`. -/
32+
theorem CharP.dvd_of_ringHom {R A : Type*} [NonAssocSemiring R] [NonAssocSemiring A]
33+
(f : R →+* A) (p q : ℕ) [CharP R p] [CharP A q] : q ∣ p := by
34+
refine (CharP.cast_eq_zero_iff A q p).mp ?_
35+
rw [← map_natCast f p, CharP.cast_eq_zero, map_zero]
36+
37+
/-- Given `R →+* A`, where `R` is a domain with `char R > 0`, then `char A = char R`. -/
38+
theorem CharP.of_ringHom_of_ne_zero {R A : Type*} [Ring R] [NoZeroDivisors R]
39+
[NonAssocSemiring A] [Nontrivial A]
40+
(f : R →+* A) (p : ℕ) (hp : p ≠ 0) [CharP R p] : CharP A p := by
41+
have := f.domain_nontrivial
42+
have H := (CharP.char_is_prime_or_zero R p).resolve_right hp
43+
obtain ⟨q, hq⟩ := CharP.exists A
44+
obtain ⟨k, e⟩ := dvd_of_ringHom f p q
45+
have := Nat.isUnit_iff.mp ((H.2 q k e).resolve_left (Nat.isUnit_iff.not.mpr (char_ne_one A q)))
46+
rw [this, mul_one] at e
47+
exact e ▸ hq
3148

3249
/-- If a ring homomorphism `R →+* A` is injective then `A` has the same characteristic as `R`. -/
3350
theorem charP_of_injective_ringHom {R A : Type*} [NonAssocSemiring R] [NonAssocSemiring A]

Mathlib/Algebra/Group/Subgroup/Basic.lean

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,18 @@ def noncenter (G : Type*) [Monoid G] : Set (ConjClasses G) :=
919919
{x | x.carrier.Nontrivial}
920920

921921
@[simp] lemma mem_noncenter {G} [Monoid G] (g : ConjClasses G) :
922-
g ∈ noncenter G ↔ g.carrier.Nontrivial := Iff.rfl
922+
g ∈ noncenter G ↔ g.carrier.Nontrivial := Iff.rfl
923923

924924
end ConjClasses
925+
926+
/-- Suppose `G` acts on `M` and `I` is a subgroup of `M`.
927+
The inertia subgroup of `I` is the subgroup of `G` whose action is trivial mod `I`. -/
928+
def AddSubgroup.inertia {M : Type*} [AddGroup M] (I : AddSubgroup M) (G : Type*)
929+
[Group G] [MulAction G M] : Subgroup G where
930+
carrier := { σ | ∀ x, σ • x - x ∈ I }
931+
mul_mem' {a b} ha hb x := by simpa [mul_smul] using add_mem (ha (b • x)) (hb x)
932+
one_mem' := by simp [zero_mem]
933+
inv_mem' {a} ha x := by simpa using sub_mem_comm_iff.mp (ha (a⁻¹ • x))
934+
935+
@[simp] lemma AddSubgroup.mem_inertia {M : Type*} [AddGroup M] {I : AddSubgroup M} {G : Type*}
936+
[Group G] [MulAction G M] {σ : G} : σ ∈ I.inertia G ↔ ∀ x, σ • x - x ∈ I := .rfl

Mathlib/RingTheory/Frobenius.lean

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
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

Mathlib/RingTheory/Invariant.lean

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,16 @@ Authors: Thomas Browning
66
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
77

88
/-!
9-
# Invariant Extensions of Rings and Frobenius Elements
10-
11-
In algebraic number theory, if `L/K` is a finite Galois extension of number fields, with rings of
12-
integers `𝓞L/𝓞K`, and if `q` is prime ideal of `𝓞L` lying over a prime ideal `p` of `𝓞K`, then
13-
there exists a **Frobenius element** `Frob p` in `Gal(L/K)` with the property that
14-
`Frob p x ≡ x ^ #(𝓞K/p) (mod q)` for all `x ∈ 𝓞L`.
15-
16-
This file proves the existence of Frobenius elements in a more general setting.
9+
# Invariant Extensions of Rings
1710
1811
Given an extension of rings `B/A` and an action of `G` on `B`, we introduce a predicate
1912
`Algebra.IsInvariant A B G` which states that every fixed point of `B` lies in the image of `A`.
2013
14+
The main application is in algebraic number theory, where `G := Gal(L/K)` is the galois group
15+
of some finite galois extension of number fields, and `A := 𝓞K` and `B := 𝓞L` are their ring of
16+
integers. This main result in this file implies the existence of Frobenius elements in this setting.
17+
See `RingTheory/Frobenius.lean`.
18+
2119
## Main statements
2220
2321
Let `G` be a finite group acting on a commutative ring `B` satisfying `Algebra.IsInvariant A B G`.

Mathlib/RingTheory/Localization/Defs.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,14 @@ namespace IsLocalization
849849

850850
variable {K : Type*} [IsLocalization M S]
851851

852+
theorem mk'_neg (x : R) (y : M) :
853+
mk' S (-x) y = - mk' S x y := by
854+
rw [eq_comm, eq_mk'_iff_mul_eq, neg_mul, map_neg, mk'_spec]
855+
856+
theorem mk'_sub (x₁ x₂ : R) (y₁ y₂ : M) :
857+
mk' S (x₁ * y₂ - x₂ * y₁) (y₁ * y₂) = mk' S x₁ y₁ - mk' S x₂ y₂ := by
858+
rw [sub_eq_add_neg, sub_eq_add_neg, ← mk'_neg, ← mk'_add, neg_mul]
859+
852860
include M in
853861
lemma injective_of_map_algebraMap_zero {T} [CommRing T] (f : S →+* T)
854862
(h : ∀ x, f (algebraMap R S x) = 0 → algebraMap R S x = 0) :

Mathlib/RingTheory/Polynomial/Cyclotomic/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ theorem prod_cyclotomic'_eq_X_pow_sub_one {K : Type*} [CommRing K] [IsDomain K]
151151
have hd : (n.divisors : Set ℕ).PairwiseDisjoint fun k => primitiveRoots k K :=
152152
fun x _ y _ hne => IsPrimitiveRoot.disjoint hne
153153
simp only [X_pow_sub_one_eq_prod hpos h, cyclotomic', ← Finset.prod_biUnion hd,
154-
h.nthRoots_one_eq_biUnion_primitiveRoots]
154+
IsPrimitiveRoot.nthRoots_one_eq_biUnion_primitiveRoots]
155155

156156
/-- If there is a primitive `n`-th root of unity in `K`, then
157157
`cyclotomic' n K = (X ^ k - 1) /ₘ (∏ i ∈ Nat.properDivisors k, cyclotomic' i K)`. -/

0 commit comments

Comments
 (0)