Skip to content

Commit 3894771

Browse files
committed
feat(RingTheory/RingHom): etale ring homomorphisms (#26635)
1 parent 7e9586b commit 3894771

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5495,6 +5495,7 @@ import Mathlib.RingTheory.Regular.Category
54955495
import Mathlib.RingTheory.Regular.Depth
54965496
import Mathlib.RingTheory.Regular.IsSMulRegular
54975497
import Mathlib.RingTheory.Regular.RegularSequence
5498+
import Mathlib.RingTheory.RingHom.Etale
54985499
import Mathlib.RingTheory.RingHom.Finite
54995500
import Mathlib.RingTheory.RingHom.FinitePresentation
55005501
import Mathlib.RingTheory.RingHom.FiniteType
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/-
2+
Copyright (c) 2025 Christian Merten. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Christian Merten
5+
-/
6+
import Mathlib.RingTheory.RingHom.Smooth
7+
import Mathlib.RingTheory.RingHom.Unramified
8+
9+
/-!
10+
# Etale ring homomorphisms
11+
12+
We show the meta properties of étale morphisms.
13+
-/
14+
15+
universe u
16+
17+
namespace RingHom
18+
19+
variable {R S : Type u} [CommRing R] [CommRing S]
20+
21+
-- Note: `algebraize` currently does not work here, because it is broken mathlib wide
22+
/-- A ring hom `R →+* S` is etale, if `S` is an etale `R`-algebra. -/
23+
@[algebraize Algebra.Etale.toAlgebra]
24+
def Etale {R S : Type u} [CommRing R] [CommRing S] (f : R →+* S) : Prop :=
25+
@Algebra.Etale R _ S _ f.toAlgebra
26+
27+
/-- Helper lemma for the `algebraize` tactic -/
28+
lemma Etale.toAlgebra {f : R →+* S} (hf : Etale f) :
29+
@Algebra.Etale R _ S _ f.toAlgebra := hf
30+
31+
variable {R S : Type u} [CommRing R] [CommRing S] (f : R →+* S)
32+
33+
lemma etale_algebraMap [Algebra R S] : (algebraMap R S).Etale ↔ Algebra.Etale R S := by
34+
simp only [RingHom.Etale]
35+
congr!
36+
exact Algebra.algebra_ext _ _ fun _ ↦ rfl
37+
38+
lemma etale_iff_formallyUnramified_and_smooth : f.Etale ↔ f.FormallyUnramified ∧ f.Smooth := by
39+
algebraize [f]
40+
simp only [Etale, Smooth, FormallyUnramified]
41+
refine ⟨fun h ↦ ⟨inferInstance, ?_⟩, fun ⟨h1, h2⟩ ↦ ⟨?_, inferInstance⟩⟩
42+
· constructor <;> infer_instance
43+
· rw [Algebra.FormallyEtale.iff_unramified_and_smooth]
44+
constructor <;> infer_instance
45+
46+
lemma Etale.eq_formallyUnramified_and_smooth :
47+
@Etale = fun R S (_ : CommRing R) (_ : CommRing S) f ↦ f.FormallyUnramified ∧ f.Smooth := by
48+
ext
49+
rw [etale_iff_formallyUnramified_and_smooth]
50+
51+
lemma Etale.isStableUnderBaseChange : IsStableUnderBaseChange Etale := by
52+
rw [eq_formallyUnramified_and_smooth]
53+
exact FormallyUnramified.isStableUnderBaseChange.and Smooth.isStableUnderBaseChange
54+
55+
lemma Etale.propertyIsLocal : PropertyIsLocal Etale := by
56+
rw [eq_formallyUnramified_and_smooth]
57+
exact FormallyUnramified.propertyIsLocal.and Smooth.propertyIsLocal
58+
59+
lemma Etale.respectsIso : RespectsIso Etale :=
60+
propertyIsLocal.respectsIso
61+
62+
lemma Etale.ofLocalizationSpanTarget : OfLocalizationSpanTarget Etale :=
63+
propertyIsLocal.ofLocalizationSpanTarget
64+
65+
lemma Etale.ofLocalizationSpan : OfLocalizationSpan Etale :=
66+
propertyIsLocal.ofLocalizationSpan
67+
68+
lemma Etale.stableUnderComposition : StableUnderComposition Etale := by
69+
rw [eq_formallyUnramified_and_smooth]
70+
exact FormallyUnramified.stableUnderComposition.and Smooth.stableUnderComposition
71+
72+
end RingHom

0 commit comments

Comments
 (0)