Skip to content

Commit a59f0f1

Browse files
committed
feat(RingTheory/StandardSmooth): presentation independent characterization (leanprover-community#31081)
We show that if `S` is of finite presentation over `R` such that `H¹(S/R) = 0` and `Ω[S⁄R]` is free on `{d sᵢ}ᵢ` for some `sᵢ : S`, then `S` is `R`-standard smooth. The converse of this is already in mathlib. In the next PR, we will deduce from this that smooth is equivalent to locally standard smooth. From Pi1.
1 parent 8f62007 commit a59f0f1

File tree

7 files changed

+156
-0
lines changed

7 files changed

+156
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6247,6 +6247,7 @@ public import Mathlib.RingTheory.Smooth.NoetherianDescent
62476247
public import Mathlib.RingTheory.Smooth.Pi
62486248
public import Mathlib.RingTheory.Smooth.StandardSmooth
62496249
public import Mathlib.RingTheory.Smooth.StandardSmoothCotangent
6250+
public import Mathlib.RingTheory.Smooth.StandardSmoothOfFree
62506251
public import Mathlib.RingTheory.Spectrum.Maximal.Basic
62516252
public import Mathlib.RingTheory.Spectrum.Maximal.Defs
62526253
public import Mathlib.RingTheory.Spectrum.Maximal.Localization

Mathlib/LinearAlgebra/Basis/Exact.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,14 @@ noncomputable def Module.Basis.ofSplitExact (hg : Function.Surjective g) (v : Ba
9999
.mk (v.linearIndependent.linearIndependent_of_exact_of_retraction hs hfg hainj hsa)
100100
(Submodule.top_le_span_of_exact_of_retraction hs hfg hg hsa hlib hab (by rw [v.span_eq]))
101101

102+
@[simp]
103+
lemma Module.Basis.ofSplitExact_apply (hg : Function.Surjective g) (v : Basis ι R M)
104+
(hainj : Function.Injective a) (hsa : ∀ i, s (v (a i)) = 0)
105+
(hlib : LinearIndependent R (s ∘ v ∘ b))
106+
(hab : Codisjoint (Set.range a) (Set.range b)) (k : κ) :
107+
ofSplitExact hs hfg hg v hainj hsa hlib hab k = g (v (a k)) := by
108+
simp [ofSplitExact]
109+
102110
end
103111

104112
section

Mathlib/RingTheory/Extension/Cotangent/Free.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,17 @@ lemma disjoint_ker_toKaehler_of_linearIndependent
9191
obtain rfl := (linearIndependent_iff.mp h) c hx
9292
simp
9393

94+
lemma cotangentRestrict_bijective_of_basis_kaehlerDifferential
95+
(huv : IsCompl (Set.range v) (Set.range u)) (b : Module.Basis κ S (Ω[S⁄R]))
96+
(hb : ∀ k, b k = (D R S) (P.val (v k))) [Subsingleton (H1Cotangent R S)] :
97+
Function.Bijective (cotangentRestrict P hu) := by
98+
refine P.cotangentRestrict_bijective_of_isCompl _ huv ?_ ?_
99+
· simp_rw [← hb]
100+
exact b.span_eq
101+
· apply disjoint_ker_toKaehler_of_linearIndependent
102+
simp_rw [← hb]
103+
exact b.linearIndependent
104+
94105
end Generators
95106

96107
namespace PreSubmersivePresentation

Mathlib/RingTheory/Extension/Generators.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,20 @@ def baseChange (T) [CommRing T] [Algebra R T] (P : Generators R S ι) :
251251
use (a + b)
252252
rw [map_add, ha, hb]
253253

254+
/-- Extend generators by more variables. -/
255+
noncomputable def extend (P : Generators R S ι) (b : ι' → S) : Generators R S (ι ⊕ ι') :=
256+
.ofSurjective (Sum.elim P.val b) fun s ↦ by
257+
use rename Sum.inl (P.σ s)
258+
simp [aeval_rename]
259+
260+
@[simp]
261+
lemma extend_val_inl (P : Generators R S ι) (b : ι' → S) (i : ι) :
262+
(P.extend b).val (.inl i) = P.val i := rfl
263+
264+
@[simp]
265+
lemma extend_val_inr (P : Generators R S ι) (b : ι' → S) (i : ι') :
266+
(P.extend b).val (.inr i) = b i := rfl
267+
254268
/-- Given generators `P` and an equivalence `ι ≃ P.vars`, these
255269
are the induced generators indexed by `ι`. -/
256270
noncomputable def reindex (P : Generators R S ι') (e : ι ≃ ι') :

Mathlib/RingTheory/Smooth/StandardSmooth.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,11 @@ instance IsStandardSmoothOfRelativeDimension.baseChange
168168

169169
end BaseChange
170170

171+
@[nontriviality]
171172
instance (priority := 100) [Subsingleton S] : IsStandardSmooth R S :=
172173
⟨Unit, Unit, inferInstance, inferInstance, ⟨.ofSubsingleton R S⟩⟩
173174

175+
@[nontriviality]
174176
instance (priority := 100) [Subsingleton S] : IsStandardSmoothOfRelativeDimension 0 R S :=
175177
⟨Unit, Unit, inferInstance, inferInstance, .ofSubsingleton R S, by simp [Presentation.dimension]⟩
176178

Mathlib/RingTheory/Smooth/StandardSmoothCotangent.lean

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,12 @@ noncomputable def basisKaehlerOfIsCompl {κ : Type*} {f : κ → ι}
214214
simp [Finsupp.single_eq_pi_single]
215215
· exact hcompl.2
216216

217+
@[simp]
218+
lemma basisKaehlerOfIsCompl_apply {κ : Type*} {f : κ → ι}
219+
(hf : Function.Injective f) (hcompl : IsCompl (Set.range f) (Set.range P.map)) (k : κ) :
220+
P.basisKaehlerOfIsCompl hf hcompl k = KaehlerDifferential.D _ _ (P.val (f k)) := by
221+
simp [basisKaehlerOfIsCompl]
222+
217223
/-- Given a submersive presentation of `S` as `R`-algebra, the images of `dxᵢ`
218224
for `i` in the complement of `σ` in `ι` form a basis of `Ω[S⁄R]`. -/
219225
@[stacks 00T7 "(2)"]
@@ -223,6 +229,11 @@ noncomputable def basisKaehler :
223229
rw [Subtype.range_coe_subtype]
224230
exact IsCompl.symm isCompl_compl
225231

232+
@[simp]
233+
lemma basisKaehler_apply (k : ((Set.range P.map)ᶜ : Set _)) :
234+
P.basisKaehler k = KaehlerDifferential.D _ _ (P.val k) := by
235+
simp [basisKaehler]
236+
226237
/-- If `P` is a submersive presentation of `S` as an `R`-algebra, `Ω[S⁄R]` is free. -/
227238
@[stacks 00T7 "(2)"]
228239
theorem free_kaehlerDifferential (P : SubmersivePresentation R S ι σ) :
@@ -306,6 +317,15 @@ theorem IsStandardSmoothOfRelativeDimension.rank_kaehlerDifferential [Nontrivial
306317
obtain ⟨_, _, _, _, ⟨P, hP⟩⟩ := ‹IsStandardSmoothOfRelativeDimension n R S›
307318
rw [P.rank_kaehlerDifferential, hP]
308319

320+
lemma IsStandardSmoothOfRelativeDimension.iff_of_isStandardSmooth [Nontrivial S]
321+
[IsStandardSmooth R S] (n : ℕ) :
322+
IsStandardSmoothOfRelativeDimension n R S ↔ Module.rank S Ω[S⁄R] = n := by
323+
refine ⟨fun h ↦ IsStandardSmoothOfRelativeDimension.rank_kaehlerDifferential _, fun h ↦ ?_⟩
324+
obtain ⟨_, _, _, _, ⟨P⟩⟩ := ‹IsStandardSmooth R S›
325+
refine ⟨_, _, _, ‹_›, ⟨P, ?_⟩⟩
326+
apply Nat.cast_injective (R := Cardinal)
327+
rwa [← P.rank_kaehlerDifferential]
328+
309329
instance IsStandardSmoothOfRelationDimension.subsingleton_kaehlerDifferential
310330
[IsStandardSmoothOfRelativeDimension 0 R S] : Subsingleton Ω[S⁄R] := by
311331
cases subsingleton_or_nontrivial S
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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+
module
7+
8+
public import Mathlib.RingTheory.Extension.Cotangent.Basis
9+
public import Mathlib.RingTheory.Extension.Cotangent.Free
10+
11+
/-!
12+
# Standard smooth of free Kaehler differentials
13+
14+
In this file we show a presentation independent characterization of being
15+
standard smooth: An `R`-algebra `S` of finite presentation is standard smooth if and only if
16+
`H¹(S/R) = 0` and `Ω[S⁄R]` is free on `{d sᵢ}ᵢ` for some `sᵢ : S`.
17+
18+
From this we deduce relations of standard smooth with other local properties.
19+
20+
## Main results
21+
22+
- `IsStandardSmooth.iff_exists_basis_kaehlerDifferential`: An `R`-algebra `S` of finite
23+
presentation is standard smooth if and only if `H¹(S/R) = 0` and `Ω[S⁄R]` is free on
24+
`{d sᵢ}ᵢ` for some `sᵢ : S`.
25+
- `Etale.iff_isStandardSmoothOfRelativeDimension_zero`: An `R`-algebra `S` is
26+
étale if and only if it is standard smooth of relative dimension zero.
27+
28+
## Notes
29+
30+
For an example of an algebra with `H¹(S/R) = 0` and `Ω[S⁄R]` finite and free, but
31+
`S` not standard smooth over `R`, consider `R = ℝ` and `S = R[x,y]/(x² + y² - 1)` the
32+
coordinate ring of the circle. One can show that then `Ω[S⁄R]` is `S`-free on `ω = xdy - ydx`,
33+
but there are no `f g : S` such that `ω = g df`.
34+
35+
## TODOs
36+
37+
- Deduce from this that smooth is equivalent to locally standard smooth (TODO @chrisflav).
38+
-/
39+
40+
@[expose] public section
41+
42+
namespace Algebra
43+
44+
open KaehlerDifferential
45+
46+
variable {R S : Type*} [CommRing R] [CommRing S] [Algebra R S]
47+
48+
/-- If `H¹(S/R) = 0` and `Ω[S⁄R]` is free on `{d sᵢ}ᵢ` for some `sᵢ : S`, then `S`
49+
is `R`-standard smooth. -/
50+
theorem IsStandardSmooth.of_basis_kaehlerDifferential [FinitePresentation R S]
51+
[Subsingleton (H1Cotangent R S)]
52+
{I : Type*} (b : Module.Basis I S (Ω[S⁄R])) (hb : Set.range b ⊆ Set.range (D R S)) :
53+
IsStandardSmooth R S := by
54+
nontriviality S
55+
obtain ⟨n, ⟨P⟩⟩ := (FiniteType.iff_exists_generators (R := R) (S := S)).mp inferInstance
56+
choose f' hf' using hb
57+
let P := P.extend fun i ↦ f' ⟨i, rfl⟩
58+
have hb (i : I) : b i = D R S (P.val (Sum.inr i)) := by simp [P, hf']
59+
have : Function.Bijective (P.cotangentRestrict _) :=
60+
P.cotangentRestrict_bijective_of_basis_kaehlerDifferential Sum.inl_injective
61+
Set.isCompl_range_inl_range_inr.symm b hb
62+
let bcot' : Module.Basis (Fin n) S P.toExtension.Cotangent :=
63+
.ofRepr (.ofBijective (P.cotangentRestrict _) this)
64+
have : Finite I := Module.Finite.finite_basis b
65+
obtain ⟨Q, bcot, hcomp, hbcot⟩ := P.exists_presentation_of_basis_cotangent bcot'
66+
let P' : PreSubmersivePresentation R S (Unit ⊕ Fin n ⊕ I) (Unit ⊕ Fin n) :=
67+
{ __ := Q
68+
map := Sum.map _root_.id Sum.inl
69+
map_inj := Sum.map_injective.mpr ⟨fun _ _ h ↦ h, Sum.inl_injective⟩ }
70+
have hcompl : IsCompl (Set.range (Sum.inr ∘ Sum.inr)) (Set.range P'.map) := by
71+
simp [P', ← eq_compl_iff_isCompl, Set.ext_iff, Set.mem_compl_iff]
72+
have hbij : Function.Bijective (P'.cotangentRestrict P'.map_inj) := by
73+
apply P'.cotangentRestrict_bijective_of_basis_kaehlerDifferential P'.map_inj hcompl b
74+
intro k
75+
simp only [hb, ← hcomp, P', Function.comp_def]
76+
let P'' : SubmersivePresentation R S _ _ :=
77+
⟨P', P'.isUnit_jacobian_of_cotangentRestrict_bijective bcot hbcot hbij⟩
78+
exact P''.isStandardSmooth
79+
80+
/-- An `R`-algebra `S` of finite presentation is standard smooth if and only if
81+
`H¹(S/R) = 0` and `Ω[S⁄R]` is free on `{d sᵢ}ᵢ` for some `sᵢ : S`. -/
82+
theorem IsStandardSmooth.iff_exists_basis_kaehlerDifferential [FinitePresentation R S] :
83+
IsStandardSmooth R S ↔ Subsingleton (H1Cotangent R S) ∧
84+
∃ (I : Type) (b : Module.Basis I S (Ω[S⁄R])), Set.range b ⊆ Set.range (D R S) := by
85+
refine ⟨fun h ↦ ⟨inferInstance, ?_⟩, fun ⟨h, ⟨_, b, hb⟩⟩ ↦ .of_basis_kaehlerDifferential b hb⟩
86+
obtain ⟨ι, σ, _, _, ⟨P⟩⟩ := Algebra.IsStandardSmooth.out (R := R) (S := S)
87+
exact ⟨_, P.basisKaehler, by simp [Set.range_subset_iff]⟩
88+
89+
/-- `S` is an étale `R`-algebra if and only if it is standard smooth of relative dimension `0`. -/
90+
theorem Etale.iff_isStandardSmoothOfRelativeDimension_zero :
91+
Etale R S ↔ IsStandardSmoothOfRelativeDimension 0 R S := by
92+
refine ⟨fun h ↦ ?_, fun _ ↦ inferInstance⟩
93+
nontriviality S
94+
suffices h : IsStandardSmooth R S by
95+
simp [IsStandardSmoothOfRelativeDimension.iff_of_isStandardSmooth]
96+
rw [IsStandardSmooth.iff_exists_basis_kaehlerDifferential]
97+
refine ⟨inferInstance, ⟨Empty, Module.Basis.empty Ω[S⁄R], ?_⟩⟩
98+
simp [Set.range_subset_iff]
99+
100+
end Algebra

0 commit comments

Comments
 (0)