Skip to content

Commit 07abf15

Browse files
tb65536b-mehta
authored andcommitted
feat(RingTheory/LocalRing/ResidueField/Fiber): the localization of Ideal.Fiber is a quotient (leanprover-community#39196)
This PR proves that the localization of `Ideal.Fiber` is a quotient. This will be applied in leanprover-community#39189 to prove the ramification-inertia formula for finite flat extensions. Co-authored-by: tb65536 <thomas.l.browning@gmail.com>
1 parent 1db185c commit 07abf15

2 files changed

Lines changed: 80 additions & 0 deletions

File tree

Mathlib/RingTheory/LocalRing/ResidueField/Fiber.lean

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,53 @@ noncomputable def Fiber.algEquivQuotient :
9696
simp [Localization.tensorLeftAlgEquiv_apply_one_tmul p.primeCompl])
9797
commutes' := by simp }
9898

99+
/-- `p.Fiber S` is isomorphic to the quotient `Sₚ ⧸ pSₚ`. -/
100+
noncomputable def Fiber.algEquivAux₁ :
101+
letI Sp := Localization (algebraMapSubmonoid S p.primeCompl)
102+
letI pS := p.map (algebraMap R S)
103+
letI : Algebra S (p.Fiber S) := rightAlgebra
104+
p.Fiber S ≃ₐ[S] Sp ⧸ pS.map (algebraMap S Sp) :=
105+
letI : Algebra S (p.Fiber S) := rightAlgebra
106+
(Fiber.algEquivQuotient p).trans <| quotientEquivAlgOfEq S <| by
107+
rw [← Localization.AtPrime.map_eq_maximalIdeal, map_map, ← IsScalarTower.algebraMap_eq,
108+
IsScalarTower.algebraMap_eq R S, ← map_map]
109+
110+
/-- The localization of the fiber `p.Fiber S` is isomorphic to a quotient of a localization. -/
111+
noncomputable def Fiber.algEquivAux₂ (q : Ideal (p.Fiber S)) [q.IsPrime] :
112+
letI r := q.comap includeRight
113+
letI Sr := Localization.AtPrime r
114+
letI pS := p.map (algebraMap R S)
115+
Localization.AtPrime q ≃ₐ[R] Sr ⧸ pS.map (algebraMap S Sr) :=
116+
letI : Algebra S (p.Fiber S) := rightAlgebra
117+
letI Sp := Localization (algebraMapSubmonoid S p.primeCompl)
118+
letI pS := p.map (algebraMap R S)
119+
letI SpS := S ⧸ pS
120+
letI r := q.comap includeRight
121+
letI Sr := Localization.AtPrime r
122+
letI e₁ : p.Fiber S ≃ₐ[S] Sp ⧸ pS.map (algebraMap S Sp) := algEquivAux₁ p
123+
letI q' : Ideal (Sp ⧸ pS.map (algebraMap S Sp)) := q.comap e₁.symm
124+
haveI : (q'.under SpS).LiesOver r := under_liesOver_of_liesOver SpS q' (q.under S)
125+
haveI : algebraMapSubmonoid SpS r.primeCompl = (q'.under SpS).primeCompl :=
126+
algebraMapSubmonoid_primeCompl_of_liesOver_surjective (q'.under SpS) r Quotient.mk_surjective
127+
haveI : IsLocalization (algebraMapSubmonoid SpS r.primeCompl) (Localization.AtPrime q') := by
128+
convert IsLocalization.isLocalization_isLocalization_atPrime_isLocalization
129+
(algebraMapSubmonoid SpS (algebraMapSubmonoid S p.primeCompl)) (Localization.AtPrime q') q'
130+
haveI := IsScalarTower.to₁₃₄ R S SpS (Localization.AtPrime q')
131+
haveI := IsScalarTower.to₁₃₄ R S SpS (Sr ⧸ pS.map (algebraMap S Sr))
132+
((Localization.localAlgEquiv q' q e₁.symm rfl).symm.restrictScalars R).trans
133+
((IsLocalization.algEquiv (algebraMapSubmonoid SpS r.primeCompl) (Localization.AtPrime q')
134+
(Sr ⧸ pS.map (algebraMap S Sr))).restrictScalars R)
135+
136+
/-- The localization of the fiber `p.Fiber S` is isomorphic to a quotient of a localization. -/
137+
noncomputable def Fiber.localizationAlgEquivQuotient (q : Ideal (p.Fiber S)) [q.IsPrime]
138+
[Algebra (Localization.AtPrime p) (Localization.AtPrime (q.comap includeRight))]
139+
[Localization.AtPrime.IsLiesOverAlgebra p (q.comap includeRight)] :
140+
letI r := q.comap includeRight
141+
letI Sr := Localization.AtPrime r
142+
Localization.AtPrime q ≃ₐ[Localization.AtPrime p] Sr ⧸ p.map (algebraMap R Sr) :=
143+
((algEquivAux₂ p q).extendScalarsOfIsLocalization (Localization.AtPrime p) p.primeCompl).trans
144+
(quotientEquivAlgOfEq (Localization.AtPrime p) (map_map _ _))
145+
99146
end Ideal
100147

101148
@[deprecated (since := "2026-05-11")] alias Fiber.algEquivQuotient := Ideal.Fiber.algEquivQuotient

Mathlib/RingTheory/Localization/Basic.lean

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,4 +684,37 @@ theorem IsLocalization.algHom_ext {R A L B : Type*}
684684
f = g :=
685685
IsLocalization.algHom_ext W h
686686

687+
section extend
688+
689+
variable {R A B : Type*} [CommRing R] [CommRing A] [CommRing B]
690+
(S : Type*) [CommRing S] [Algebra R S] (M : Submonoid R) [IsLocalization M S]
691+
[Algebra R A] [Algebra S A] [IsScalarTower R S A]
692+
[Algebra R B] [Algebra S B] [IsScalarTower R S B]
693+
694+
/-- For an algebra homomorphism `f : A →ₐ[R] B`, if `A` and `B` are algebras over a localization
695+
`S` of `R`, then `f` is automatically an `S`-algebra homomorphism. -/
696+
def AlgHom.extendScalarsOfIsLocalization (f : A →ₐ[R] B) : A →ₐ[S] B where
697+
__ := f
698+
commutes' := by
699+
let f := f.comp (IsScalarTower.toAlgHom R S A)
700+
let g := IsScalarTower.toAlgHom R S B
701+
have : f.toRingHom.comp (algebraMap R S) = g.toRingHom.comp (algebraMap R S) := by simp
702+
suffices f = g by rwa [DFunLike.ext_iff] at this
703+
apply IsLocalization.algHom_ext M
704+
rwa [DFunLike.ext_iff] at this ⊢
705+
706+
@[simp]
707+
theorem AlgHom.extendScalarsOfIsLocalization_apply (f : A →ₐ[R] B) (a : A) :
708+
f.extendScalarsOfIsLocalization S M a = f a :=
709+
rfl
710+
711+
/-- For an algebra isomorphism `f : A ≃ₐ[R] B`, if `A` and `B` are algebras over a localization
712+
`S` of `R`, then `f` is automatically an `S`-algebra isomorphism. -/
713+
@[simps]
714+
def AlgEquiv.extendScalarsOfIsLocalization (f : A ≃ₐ[R] B) : A ≃ₐ[S] B where
715+
__ := f.toAlgHom.extendScalarsOfIsLocalization S M
716+
__ := f
717+
718+
end extend
719+
687720
end Algebra

0 commit comments

Comments
 (0)