Skip to content

Commit 5fd6bde

Browse files
tb65536grunweg
authored andcommitted
feat(RingTheory/LocalRing/ResidueField/Basic): add algebra homs between residue fields (leanprover-community#39716)
This PR adds algebra homs between residue fields. Co-authored-by: tb65536 <thomas.l.browning@gmail.com>
1 parent 107a95a commit 5fd6bde

2 files changed

Lines changed: 63 additions & 0 deletions

File tree

Mathlib/Algebra/Algebra/Equiv.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -763,6 +763,11 @@ def algHomUnitsEquiv (R S : Type*) [CommSemiring R] [Semiring S] [Algebra R S] :
763763
instance _root_.Finite.algEquiv [Finite (A₁ →ₐ[R] A₂)] : Finite (A₁ ≃ₐ[R] A₂) :=
764764
Finite.of_injective _ AlgEquiv.coe_algHom_injective
765765

766+
-- TODO Morally this is just `isLocalHom_equiv`: can we obviate the need for this instance?
767+
instance : IsLocalHom e.toAlgHom := by
768+
have : IsLocalHom e.toRingEquiv := inferInstance
769+
exact ⟨this.map_nonunit⟩
770+
766771
end Semiring
767772

768773
end AlgEquiv

Mathlib/RingTheory/LocalRing/ResidueField/Basic.lean

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ theorem map_comp_residue (f : R →+* S) [IsLocalHom f] :
113113
(ResidueField.map f).comp (residue R) = (residue S).comp f :=
114114
rfl
115115

116+
@[simp]
116117
theorem map_residue (f : R →+* S) [IsLocalHom f] (r : R) :
117118
ResidueField.map f (residue R r) = residue S (f r) :=
118119
rfl
@@ -206,6 +207,63 @@ lemma finite_of_finite [Module.Finite R S] (hfin : Finite (ResidueField R)) :
206207

207208
end FiniteDimensional
208209

210+
omit [IsLocalRing R]
211+
212+
variable [Algebra R S] [Algebra R T]
213+
214+
/-- A local algebra homomorphism induces an algebra homomorphism on the residue fields.
215+
216+
See `mapAlgHom'` for a variant where the base ring `R` is also quotiented. -/
217+
noncomputable def mapAlgHom (e : S →ₐ[R] T) [IsLocalHom e] :
218+
ResidueField S →ₐ[R] ResidueField T where
219+
__ := map e
220+
commutes' x := by
221+
simp [IsScalarTower.algebraMap_apply R S (ResidueField S),
222+
IsScalarTower.algebraMap_apply R T (ResidueField T)]
223+
224+
@[simp]
225+
theorem mapAlgHom_residue (e : S →ₐ[R] T) [IsLocalHom e] (x : S) :
226+
mapAlgHom e (residue S x) = residue T (e x) :=
227+
rfl
228+
229+
/-- A local algebra isomorphism induces an algebra isomorphism on the residue fields.
230+
231+
See `mapAlgEquiv'` for a variant where the base ring `R` is also quotiented. -/
232+
noncomputable def mapAlgEquiv (e : S ≃ₐ[R] T) : ResidueField S ≃ₐ[R] ResidueField T where
233+
__ := mapAlgHom e.toAlgHom
234+
__ := mapEquiv e.toRingEquiv
235+
236+
@[simp]
237+
theorem mapAlgEquiv_residue (e : S ≃ₐ[R] T) (x : S) :
238+
mapAlgEquiv e (residue S x) = residue T (e x) :=
239+
rfl
240+
241+
variable [IsLocalHom (algebraMap R S)] [IsLocalHom (algebraMap R T)]
242+
243+
/-- A local algebra homomorphism induces an algebra homomorphism on the residue fields.
244+
245+
See `mapAlgHom` for a variant where the base ring `R` is not quotiented. -/
246+
noncomputable def mapAlgHom' (e : S →ₐ[R] T) [IsLocalHom e] :
247+
ResidueField S →ₐ[ResidueField R] ResidueField T :=
248+
(mapAlgHom e).extendScalarsOfSurjective residue_surjective
249+
250+
@[simp]
251+
theorem mapAlgHom'_residue [IsLocalRing R] (e : S →ₐ[R] T) [IsLocalHom e] (x : S) :
252+
mapAlgHom' e (residue S x) = residue T (e x) :=
253+
rfl
254+
255+
/-- A local algebra isomorphism induces an algebra isomorphism on the residue fields.
256+
257+
See `mapAlgEquiv` for a variant where the base ring `R` is not quotiented. -/
258+
noncomputable def mapAlgEquiv' (e : S ≃ₐ[R] T) :
259+
ResidueField S ≃ₐ[ResidueField R] ResidueField T :=
260+
(mapAlgEquiv e).extendScalarsOfSurjective residue_surjective
261+
262+
@[simp]
263+
theorem mapAlgEquiv'_residue [IsLocalRing R] (e : S ≃ₐ[R] T) (x : S) :
264+
mapAlgEquiv' e (residue S x) = residue T (e x) :=
265+
rfl
266+
209267
end ResidueField
210268

211269
end

0 commit comments

Comments
 (0)