Skip to content

Commit 08d91a2

Browse files
committed
feat(RingTheory/Localization/AtPrime): bijection between prime ideals (#29322)
Let `R ⊆ S` be an extension of rings and `p` be a prime ideal of `R`. Denote by `Rₚ` the localization of `R` at the complement of `p` and by `Sₚ` the localization of `S` at the (image) of the complement of `p`. In this PR, we study the extension `Rₚ ⊆ Sₚ` and the relation between the (nonzero) prime ideals of `Sₚ` and the prime ideals of `S` above `p`. In particular, we prove that (under suitable conditions) they are in bijection. In a following PR #27706, we prove that the residual degree and ramification index are preserved by this bijection. Note. The new file `RingTheory.Localization.AtPrime.Extension` is imported in `RingTheory.Trace.Quotient` because one function from the latter was moved to the former, but the plan is eventually to move the isomorphisms proved in `RingTheory.Trace.Quotient` to `RingTheory.Localization.AtPrime.Basic` and `RingTheory.Localization.AtPrime.Extension` where they belong. This will be done in #27706.
1 parent ae4938d commit 08d91a2

File tree

7 files changed

+190
-7
lines changed

7 files changed

+190
-7
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5851,6 +5851,7 @@ import Mathlib.RingTheory.Localization.Algebra
58515851
import Mathlib.RingTheory.Localization.AsSubring
58525852
import Mathlib.RingTheory.Localization.AtPrime
58535853
import Mathlib.RingTheory.Localization.AtPrime.Basic
5854+
import Mathlib.RingTheory.Localization.AtPrime.Extension
58545855
import Mathlib.RingTheory.Localization.Away.AdjoinRoot
58555856
import Mathlib.RingTheory.Localization.Away.Basic
58565857
import Mathlib.RingTheory.Localization.Away.Lemmas

Mathlib/RingTheory/DedekindDomain/Instances.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ instance [NoZeroSMulDivisors S T] : NoZeroSMulDivisors Sₚ Tₚ :=
189189
algebraMapSubmonoid_le_nonZeroDivisors_of_faithfulSMul _ <|
190190
Ideal.primeCompl_le_nonZeroDivisors P
191191

192+
instance [Algebra.IsIntegral R S] : Algebra.IsIntegral Rₚ Sₚ :=
193+
Algebra.isIntegral_def.mpr <| (algebraMap_eq_map_map_submonoid P.primeCompl S Rₚ Sₚ ▸
194+
isIntegral_localization : (algebraMap Rₚ Sₚ).IsIntegral)
195+
192196
variable [NoZeroSMulDivisors R T]
193197

194198
instance : IsScalarTower Rₚ Sₚ Tₚ := by

Mathlib/RingTheory/Ideal/Maps.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,14 @@ lemma comap_map_eq_self_iff_of_isPrime {S : Type*} [CommSemiring S] {f : R →+*
671671
· rintro ⟨q, hq, rfl⟩
672672
simp
673673

674+
/--
675+
For a maximal ideal `p` of `R`, `p` extended to `S` and restricted back to `R` is `p` if
676+
its image in `S` is not equal to `⊤`.
677+
-/
678+
theorem comap_map_eq_self_of_isMaximal (f : R →+* S) {p : Ideal R} [hP' : p.IsMaximal]
679+
(hP : Ideal.map f p ≠ ⊤) : (map f p).comap f = p :=
680+
(IsCoatom.le_iff_eq hP'.out (comap_ne_top _ hP)).mp <| le_comap_map
681+
674682
end CommRing
675683

676684
end MapAndComap

Mathlib/RingTheory/Ideal/Over.lean

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,48 @@ theorem LiesOver.trans [𝔓.LiesOver P] [P.LiesOver p] : 𝔓.LiesOver p where
176176
theorem LiesOver.tower_bot [hp : 𝔓.LiesOver p] [hP : 𝔓.LiesOver P] : P.LiesOver p where
177177
over := by rw [𝔓.over_def p, 𝔓.over_def P, under_under]
178178

179+
/--
180+
Consider the following commutative diagram of ring maps
181+
```
182+
A → B
183+
↓ ↓
184+
C → D
185+
```
186+
and let `P` be an ideal of `B`. The image in `C` of the ideal of `A` under `P` is included
187+
in the ideal of `C` under the image of `P` in `D`.
188+
-/
189+
theorem map_under_le_under_map {C D : Type*} [CommSemiring C] [Semiring D] [Algebra A C]
190+
[Algebra C D] [Algebra A D] [Algebra B D] [IsScalarTower A C D] [IsScalarTower A B D] :
191+
map (algebraMap A C) (under A P) ≤ under C (map (algebraMap B D) P) := by
192+
apply le_comap_of_map_le
193+
rw [map_map, ← IsScalarTower.algebraMap_eq, map_le_iff_le_comap,
194+
IsScalarTower.algebraMap_eq A B D, ← comap_comap]
195+
exact comap_mono <| le_comap_map
196+
197+
/--
198+
Consider the following commutative diagram of ring maps
199+
```
200+
A → B
201+
↓ ↓
202+
C → D
203+
```
204+
and let `P` be an ideal of `B`. Assume that the image in `C` of the ideal of `A` under `P`
205+
is maximal and that the image of `P` in `D` is not equal to `D`, then the image in `C` of the
206+
ideal of `A` under `P` is equal to the ideal of `C` under the image of `P` in `D`.
207+
-/
208+
theorem under_map_eq_map_under {C D : Type*} [CommSemiring C] [Semiring D] [Algebra A C]
209+
[Algebra C D] [Algebra A D] [Algebra B D] [IsScalarTower A C D] [IsScalarTower A B D]
210+
(h₁ : (map (algebraMap A C) (under A P)).IsMaximal) (h₂ : map (algebraMap B D) P ≠ ⊤) :
211+
under C (map (algebraMap B D) P) = map (algebraMap A C) (under A P) :=
212+
(IsCoatom.le_iff_eq (isMaximal_def.mp h₁) (comap_ne_top (algebraMap C D) h₂)).mp <|
213+
map_under_le_under_map P
214+
215+
theorem disjoint_primeCompl_of_liesOver [p.IsPrime] [hPp : 𝔓.LiesOver p] :
216+
Disjoint ((Algebra.algebraMapSubmonoid C p.primeCompl) : Set C) (𝔓 : Set C) := by
217+
rw [liesOver_iff, under_def, SetLike.ext'_iff, coe_comap] at hPp
218+
simpa only [Algebra.algebraMapSubmonoid, primeCompl, hPp, ← le_compl_iff_disjoint_left]
219+
using Set.subset_compl_comm.mp (by simp)
220+
179221
variable (B)
180222

181223
instance under_liesOver_of_liesOver [𝔓.LiesOver p] : (𝔓.under B).LiesOver p :=

Mathlib/RingTheory/Localization/AtPrime/Basic.lean

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ theorem comap_maximalIdeal (h : IsLocalRing S := isLocalRing S I) :
163163
(IsLocalRing.maximalIdeal S).comap (algebraMap R S) = I :=
164164
Ideal.ext fun x => by simpa only [Ideal.mem_comap] using to_map_mem_maximal_iff _ I x
165165

166+
theorem liesOver_maximalIdeal (h : IsLocalRing S := isLocalRing S I) :
167+
(IsLocalRing.maximalIdeal S).LiesOver I :=
168+
(Ideal.liesOver_iff _ _).mpr (comap_maximalIdeal _ _).symm
169+
166170
theorem isUnit_mk'_iff (x : R) (y : I.primeCompl) : IsUnit (mk' S x y) ↔ x ∈ I.primeCompl :=
167171
fun h hx => mk'_mem_iff.mpr ((to_map_mem_maximal_iff S I x).mpr hx) h, fun h =>
168172
isUnit_iff_exists_inv.mpr ⟨mk' S ↑y ⟨x, h⟩, mk'_mul_mk'_eq_one ⟨x, h⟩ y⟩⟩
@@ -305,6 +309,8 @@ end AtPrime
305309

306310
end Localization
307311

312+
section
313+
308314
variable (q : Ideal R) [q.IsPrime] (M : Submonoid R) {S : Type*} [CommSemiring S] [Algebra R S]
309315
[IsLocalization.AtPrime S q]
310316

@@ -329,3 +335,27 @@ lemma IsLocalization.subsingleton_primeSpectrum_of_mem_minimalPrimes
329335
fun ⦃x⦄ a ↦ a⟩, fun i ↦ Subtype.ext <| PrimeSpectrum.ext <|
330336
(minimalPrimes_eq_minimals (R := R) ▸ hp).eq_of_le i.1.2 i.2
331337
(IsLocalization.AtPrime.primeSpectrumOrderIso S p).subsingleton
338+
339+
end
340+
341+
namespace IsLocalization.AtPrime
342+
343+
open Algebra IsLocalRing Ideal IsLocalization IsLocalization.AtPrime
344+
345+
variable (p : Ideal R) [p.IsPrime] (Rₚ : Type*) [CommSemiring Rₚ] [Algebra R Rₚ]
346+
[IsLocalization.AtPrime Rₚ p] [IsLocalRing Rₚ] (Sₚ : Type*) [CommSemiring Sₚ] [Algebra S Sₚ]
347+
[IsLocalization (Algebra.algebraMapSubmonoid S p.primeCompl) Sₚ] [Algebra Rₚ Sₚ]
348+
(P : Ideal S)
349+
350+
theorem isPrime_map_of_liesOver [P.IsPrime] [P.LiesOver p] : (P.map (algebraMap S Sₚ)).IsPrime :=
351+
isPrime_of_isPrime_disjoint _ _ _ inferInstance (Ideal.disjoint_primeCompl_of_liesOver P p)
352+
353+
theorem map_eq_maximalIdeal : p.map (algebraMap R Rₚ) = maximalIdeal Rₚ := by
354+
convert congr_arg (Ideal.map (algebraMap R Rₚ)) (comap_maximalIdeal Rₚ p).symm
355+
rw [map_comap p.primeCompl]
356+
357+
theorem comap_map_of_isMaximal [P.IsMaximal] [P.LiesOver p] :
358+
Ideal.comap (algebraMap S Sₚ) (Ideal.map (algebraMap S Sₚ) P) = P :=
359+
comap_map_eq_self_of_isMaximal _ (isPrime_map_of_liesOver S p Sₚ P).ne_top
360+
361+
end IsLocalization.AtPrime
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/-
2+
Copyright (c) 2025 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 Mathlib.RingTheory.DedekindDomain.Dvr
7+
8+
/-!
9+
# Primes in an extension of localization at prime
10+
11+
Let `R ⊆ S` be an extension of Dedekind domains and `p` be a prime ideal of `R`. Let `Rₚ` be the
12+
localization of `R` at the complement of `p` and `Sₚ` the localization of `S` at the (image)
13+
of the complement of `p`.
14+
15+
In this file, we study the relation between the (nonzero) prime ideals of `Sₚ` and the prime
16+
ideals of `S` above `p`. In particular, we prove that (under suitable conditions) they are in
17+
bijection.
18+
19+
# Main definitions and results
20+
21+
- `IsLocalization.AtPrime.mem_primesOver_of_isPrime`: The nonzero prime ideals of `Sₚ` are
22+
primes over the maximal ideal of `Rₚ`.
23+
24+
- `IsDedekindDomain.primesOverEquivPrimesOver`: the order-preserving bijection between the primes
25+
over `p` in `S` and the primes over the maximal ideal of `Rₚ` in `Sₚ`.
26+
27+
-/
28+
29+
open Algebra IsLocalRing Ideal Localization.AtPrime
30+
31+
variable {R S : Type*} [CommRing R] [CommRing S] [Algebra R S] (p : Ideal R) [p.IsPrime]
32+
(Rₚ : Type*) [CommRing Rₚ] [Algebra R Rₚ] [IsLocalization.AtPrime Rₚ p] [IsLocalRing Rₚ]
33+
(Sₚ : Type*) [CommRing Sₚ] [Algebra S Sₚ] [IsLocalization (algebraMapSubmonoid S p.primeCompl) Sₚ]
34+
[Algebra Rₚ Sₚ] (P : Ideal S) [hPp : P.LiesOver p]
35+
36+
namespace IsLocalization.AtPrime
37+
38+
/--
39+
The nonzero prime ideals of `Sₚ` are prime ideals over the maximal ideal of `Rₚ`.
40+
See `Localization.AtPrime.primesOverEquivPrimesOver` for the bijection between the prime ideals
41+
of `Sₚ` over the maximal ideal of `Rₚ` and the primes ideals of `S` above `p`.
42+
-/
43+
theorem mem_primesOver_of_isPrime {Q : Ideal Sₚ} [Q.IsMaximal] [Algebra.IsIntegral Rₚ Sₚ] :
44+
Q ∈ (maximalIdeal Rₚ).primesOver Sₚ := by
45+
refine ⟨inferInstance, ?_⟩
46+
rw [liesOver_iff, ← eq_maximalIdeal]
47+
exact IsMaximal.under Rₚ Q
48+
49+
theorem liesOver_comap_of_liesOver {T : Type*} [CommRing T] [Algebra R T] [Algebra Rₚ T]
50+
[Algebra S T] [IsScalarTower R S T] [IsScalarTower R Rₚ T] (Q : Ideal T)
51+
[Q.LiesOver (maximalIdeal Rₚ)] : (comap (algebraMap S T) Q).LiesOver p := by
52+
have : Q.LiesOver p := by
53+
have : (maximalIdeal Rₚ).LiesOver p := liesOver_maximalIdeal Rₚ p _
54+
exact LiesOver.trans Q (IsLocalRing.maximalIdeal Rₚ) p
55+
exact comap_liesOver Q p <| IsScalarTower.toAlgHom R S T
56+
57+
variable [Algebra R Sₚ] [IsScalarTower R S Sₚ] [IsScalarTower R Rₚ Sₚ]
58+
59+
include p in
60+
theorem liesOver_map_of_liesOver [P.IsPrime] :
61+
(P.map (algebraMap S Sₚ)).LiesOver (IsLocalRing.maximalIdeal Rₚ) := by
62+
rw [liesOver_iff, eq_comm, ← map_eq_maximalIdeal p, over_def P p]
63+
exact under_map_eq_map_under _
64+
(over_def P p ▸ map_eq_maximalIdeal p Rₚ ▸ maximalIdeal.isMaximal Rₚ)
65+
(isPrime_map_of_liesOver S p Sₚ P).ne_top
66+
67+
end IsLocalization.AtPrime
68+
namespace IsDedekindDomain
69+
70+
open IsLocalization AtPrime
71+
72+
variable [Algebra R Sₚ] [IsScalarTower R S Sₚ] [IsScalarTower R Rₚ Sₚ] [IsDedekindDomain S]
73+
[NoZeroSMulDivisors R S]
74+
75+
/--
76+
For `R ⊆ S` an extension of Dedekind domains and `p` a prime ideal of `R`, the bijection
77+
between the primes of `S` over `p` and the primes over the maximal ideal of `Rₚ` in `Sₚ` where
78+
`Rₚ` and `Sₚ` are resp. the localizations of `R` and `S` at the complement of `p`.
79+
-/
80+
noncomputable def primesOverEquivPrimesOver (hp : p ≠ ⊥) :
81+
p.primesOver S ≃o (maximalIdeal Rₚ).primesOver Sₚ where
82+
toFun P := ⟨map (algebraMap S Sₚ) P.1, isPrime_map_of_liesOver S p Sₚ P.1,
83+
liesOver_map_of_liesOver p Rₚ Sₚ P.1
84+
map_rel_iff' {Q Q'} := by
85+
refine ⟨fun h ↦ ?_, fun h ↦ map_mono h⟩
86+
have : Q'.1.IsMaximal :=
87+
(primesOver.isPrime p Q').isMaximal (ne_bot_of_mem_primesOver hp Q'.prop)
88+
simpa [comap_map_of_isMaximal S p] using le_comap_of_map_le h
89+
invFun Q := ⟨comap (algebraMap S Sₚ) Q.1, IsPrime.under S Q.1,
90+
liesOver_comap_of_liesOver p Rₚ Q.1
91+
left_inv P := by
92+
have : P.val.IsMaximal := Ring.DimensionLEOne.maximalOfPrime
93+
(ne_bot_of_mem_primesOver hp P.prop) (primesOver.isPrime p P)
94+
exact SetCoe.ext <| IsLocalization.AtPrime.comap_map_of_isMaximal S p Sₚ P.1
95+
right_inv Q := SetCoe.ext <| map_comap (algebraMapSubmonoid S p.primeCompl) Sₚ Q
96+
97+
@[simp]
98+
theorem primesOverEquivPrimesOver_apply (hp : p ≠ ⊥) (P : p.primesOver S) :
99+
primesOverEquivPrimesOver p Rₚ Sₚ hp P = Ideal.map (algebraMap S Sₚ) P := rfl
100+
101+
@[simp]
102+
theorem primesOverEquivPrimesOver_symm_apply (hp : p ≠ ⊥) (Q : (maximalIdeal Rₚ).primesOver Sₚ) :
103+
((primesOverEquivPrimesOver p Rₚ Sₚ hp).symm Q).1 = Ideal.comap (algebraMap S Sₚ) Q := rfl
104+
105+
end IsDedekindDomain

Mathlib/RingTheory/Trace/Quotient.lean

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ Copyright (c) 2024 Riccardo Brasca. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Andrew Yang, Riccardo Brasca
55
-/
6-
76
import Mathlib.RingTheory.DedekindDomain.Dvr
87
import Mathlib.RingTheory.IntegralClosure.IntegralRestrict
98
import Mathlib.RingTheory.LocalRing.Quotient
@@ -87,12 +86,6 @@ def equivQuotMaximalIdealOfIsLocalization : R ⧸ p ≃+* Rₚ ⧸ maximalIdeal
8786
rw [Ne, Ideal.Quotient.eq_zero_iff_mem]
8887
exact s.prop
8988

90-
lemma IsLocalization.AtPrime.map_eq_maximalIdeal :
91-
p.map (algebraMap R Rₚ) = maximalIdeal Rₚ := by
92-
convert congr_arg (Ideal.map (algebraMap R Rₚ))
93-
(IsLocalization.AtPrime.comap_maximalIdeal Rₚ p).symm
94-
rw [map_comap p.primeCompl]
95-
9689
local notation "pS" => Ideal.map (algebraMap R S) p
9790
local notation "pSₚ" => Ideal.map (algebraMap Rₚ Sₚ) (maximalIdeal Rₚ)
9891

0 commit comments

Comments
 (0)