@@ -3,7 +3,10 @@ Copyright (c) 2024 Andrew Yang. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
44Authors: Andrew Yang
55-/
6- import Mathlib.RingTheory.Kaehler.Basic
6+ import Mathlib.RingTheory.Kaehler.CotangentComplex
7+ import Mathlib.RingTheory.Smooth.Basic
8+ import Mathlib.Algebra.Module.Projective
9+ import Mathlib.Tactic.StacksAttribute
710
811/-!
912# Relation of smoothness and `Ω[S⁄R]`
@@ -14,13 +17,32 @@ import Mathlib.RingTheory.Kaehler.Basic
1417 Given a surjective algebra homomorphism `f : P →ₐ[R] S` with square-zero kernel `I`,
1518 there is a one-to-one correspondence between `P`-linear retractions of `I →ₗ[P] S ⊗[P] Ω[P/R]`
1619 and algebra homomorphism sections of `f`.
20+ - `retractionKerCotangentToTensorEquivSection`:
21+ Given a surjective algebra homomorphism `f : P →ₐ[R] S` with kernel `I`,
22+ there is a one-to-one correspondence between `P`-linear retractions of `I/I² →ₗ[P] S ⊗[P] Ω[P/R]`
23+ and algebra homomorphism sections of `f‾ : P/I² → S`.
24+ - `Algebra.FormallySmooth.iff_split_injection`:
25+ Given a formally smooth `R`-algebra `P` and a surjective algebra homomorphism `f : P →ₐ[R] S`
26+ with kernel `I` (typically a presentation `R[X] → S`),
27+ `S` is formally smooth iff the `P`-linear map `I/I² → S ⊗[P] Ω[P⁄R]` is split injective.
28+ - `Algebra.FormallySmooth.iff_injective_and_projective`:
29+ Given a formally smooth `R`-algebra `P` and a surjective algebra homomorphism `f : P →ₐ[R] S`
30+ with kernel `I` (typically a presentation `R[X] → S`),
31+ then `S` is formally smooth iff `Ω[S/R]` is projective and `I/I² → S ⊗[P] Ω[P⁄R]` is injective.
32+ - `Algebra.FormallySmooth.iff_subsingleton_and_projective`:
33+ An algebra is formally smooth if and only if `H¹(L_{R/S}) = 0` and `Ω_{S/R}` is projective.
1734
1835 ## Future projects
1936
20- - Show that relative smooth iff `H¹(L_{S/R}) = 0` and `Ω[S/R]` is projective.
2137- Show that being smooth is local on stalks.
2238- Show that being formally smooth is Zariski-local (very hard).
2339
40+ ## References
41+
42+ - https://stacks.math.columbia.edu/tag/00TH
43+ - [ B. Iversen, *Generic Local Structure of the Morphisms in Commutative Algebra* ] [iversen ]
44+
45+
2446 -/
2547
2648universe u
@@ -198,7 +220,6 @@ end ofRetraction
198220
199221variable [Algebra R S] [IsScalarTower R P S]
200222variable (hf' : (RingHom.ker (algebraMap P S)) ^ 2 = ⊥) (hf : Surjective (algebraMap P S))
201- include hf' hf
202223
203224/--
204225Given a surjective algebra homomorphism `f : P →ₐ[R] S` with square-zero kernel `I`,
@@ -224,3 +245,205 @@ def retractionKerToTensorEquivSection :
224245 simp only [this, Algebra.algebraMap_eq_smul_one, ← smul_tmul', LinearMapClass.map_smul,
225246 SetLike.val_smul, smul_eq_mul, sub_zero]
226247 right_inv g := by ext s; obtain ⟨s, rfl⟩ := hf s; simp
248+
249+ variable (R P S) in
250+ /--
251+ Given a tower of algebras `S/P/R`, with `I = ker(P → S)`,
252+ this is the `R`-derivative `P/I² → S ⊗[P] Ω[P⁄R]` given by `[x] ↦ 1 ⊗ D x`.
253+ -/
254+ noncomputable
255+ def derivationQuotKerSq :
256+ Derivation R (P ⧸ (RingHom.ker (algebraMap P S) ^ 2 )) (S ⊗[P] Ω[P⁄R]) := by
257+ letI := Submodule.liftQ ((RingHom.ker (algebraMap P S) ^ 2 ).restrictScalars R)
258+ (((mk P S _ 1 ).restrictScalars R).comp (KaehlerDifferential.D R P).toLinearMap)
259+ refine ⟨this ?_, ?_, ?_⟩
260+ · rintro x hx
261+ simp only [Submodule.restrictScalars_mem, pow_two] at hx
262+ simp only [LinearMap.mem_ker, LinearMap.coe_comp, LinearMap.coe_restrictScalars,
263+ Derivation.coeFn_coe, Function.comp_apply, mk_apply]
264+ refine Submodule.smul_induction_on hx ?_ ?_
265+ · intro x hx y hy
266+ simp only [smul_eq_mul, Derivation.leibniz, tmul_add, ← smul_tmul, Algebra.smul_def,
267+ mul_one, RingHom.mem_ker.mp hx, RingHom.mem_ker.mp hy, zero_tmul, zero_add]
268+ · intro x y hx hy; simp only [map_add, hx, hy, tmul_add, zero_add]
269+ · show (1 : S) ⊗ₜ[P] KaehlerDifferential.D R P 1 = 0 ; simp
270+ · intro a b
271+ obtain ⟨a, rfl⟩ := Submodule.Quotient.mk_surjective _ a
272+ obtain ⟨b, rfl⟩ := Submodule.Quotient.mk_surjective _ b
273+ show (1 : S) ⊗ₜ[P] KaehlerDifferential.D R P (a * b) =
274+ Ideal.Quotient.mk _ a • ((1 : S) ⊗ₜ[P] KaehlerDifferential.D R P b) +
275+ Ideal.Quotient.mk _ b • ((1 : S) ⊗ₜ[P] KaehlerDifferential.D R P a)
276+ simp only [← Ideal.Quotient.algebraMap_eq, IsScalarTower.algebraMap_smul,
277+ Derivation.leibniz, tmul_add, tmul_smul]
278+
279+ @[simp]
280+ lemma derivationQuotKerSq_mk (x : P) :
281+ derivationQuotKerSq R P S x = 1 ⊗ₜ .D R P x := rfl
282+
283+ variable (R P S) in
284+ /--
285+ Given a tower of algebras `S/P/R`, with `I = ker(P → S)` and `Q := P/I²`,
286+ there is an isomorphism of `S`-modules `S ⊗[Q] Ω[Q/R] ≃ S ⊗[P] Ω[P/R]`.
287+ -/
288+ noncomputable
289+ def tensorKaehlerQuotKerSqEquiv :
290+ S ⊗[P ⧸ (RingHom.ker (algebraMap P S) ^ 2 )] Ω[(P ⧸ (RingHom.ker (algebraMap P S) ^ 2 ))⁄R] ≃ₗ[S]
291+ S ⊗[P] Ω[P⁄R] :=
292+ letI f₁ := (derivationQuotKerSq R P S).liftKaehlerDifferential
293+ letI f₂ := AlgebraTensorModule.lift ((LinearMap.ringLmapEquivSelf S S _).symm f₁)
294+ letI f₃ := KaehlerDifferential.map R R P (P ⧸ (RingHom.ker (algebraMap P S) ^ 2 ))
295+ letI f₄ := ((mk (P ⧸ RingHom.ker (algebraMap P S) ^ 2 ) S _ 1 ).restrictScalars P).comp f₃
296+ letI f₅ := AlgebraTensorModule.lift ((LinearMap.ringLmapEquivSelf S S _).symm f₄)
297+ { __ := f₂
298+ invFun := f₅
299+ left_inv := by
300+ suffices f₅.comp f₂ = LinearMap.id from LinearMap.congr_fun this
301+ ext a
302+ obtain ⟨a, rfl⟩ := Ideal.Quotient.mk_surjective a
303+ simp [f₁, f₂, f₃, f₄, f₅]
304+ right_inv := by
305+ suffices f₂.comp f₅ = LinearMap.id from LinearMap.congr_fun this
306+ ext a
307+ simp [f₁, f₂, f₃, f₄, f₅] }
308+
309+ @[simp]
310+ lemma tensorKaehlerQuotKerSqEquiv_tmul_D (s t) :
311+ tensorKaehlerQuotKerSqEquiv R P S (s ⊗ₜ .D _ _ (Ideal.Quotient.mk _ t)) = s ⊗ₜ .D _ _ t := by
312+ show s • (derivationQuotKerSq R P S).liftKaehlerDifferential (.D _ _ (Ideal.Quotient.mk _ t)) = _
313+ simp [smul_tmul']
314+
315+ @[simp]
316+ lemma tensorKaehlerQuotKerSqEquiv_symm_tmul_D (s t) :
317+ (tensorKaehlerQuotKerSqEquiv R P S).symm (s ⊗ₜ .D _ _ t) =
318+ s ⊗ₜ .D _ _ (Ideal.Quotient.mk _ t) := by
319+ apply (tensorKaehlerQuotKerSqEquiv R P S).injective
320+ simp
321+
322+ /--
323+ Given a surjective algebra homomorphism `f : P →ₐ[R] S` with kernel `I`,
324+ there is a one-to-one correspondence between `P`-linear retractions of `I/I² →ₗ[P] S ⊗[P] Ω[P/R]`
325+ and algebra homomorphism sections of `f‾ : P/I² → S`.
326+ -/
327+ noncomputable
328+ def retractionKerCotangentToTensorEquivSection :
329+ { l // l ∘ₗ (kerCotangentToTensor R P S) = LinearMap.id } ≃
330+ { g // (IsScalarTower.toAlgHom R P S).kerSquareLift.comp g = AlgHom.id R S } := by
331+ let P' := P ⧸ (RingHom.ker (algebraMap P S) ^ 2 )
332+ have h₁ : Surjective (algebraMap P' S) := Function.Surjective.of_comp (g := algebraMap P P') hf
333+ have h₂ : RingHom.ker (algebraMap P' S) ^ 2 = ⊥ := by
334+ rw [RingHom.algebraMap_toAlgebra, AlgHom.ker_kerSquareLift, Ideal.cotangentIdeal_square]
335+ let e₁ : (RingHom.ker (algebraMap P S)).Cotangent ≃ₗ[P] (RingHom.ker (algebraMap P' S)) :=
336+ (Ideal.cotangentEquivIdeal _).trans ((LinearEquiv.ofEq _ _
337+ (IsScalarTower.toAlgHom R P S).ker_kerSquareLift.symm).restrictScalars P)
338+ let e₂ : S ⊗[P'] Ω[P'⁄R] ≃ₗ[P] S ⊗[P] Ω[P⁄R] :=
339+ (tensorKaehlerQuotKerSqEquiv R P S).restrictScalars P
340+ have H : kerCotangentToTensor R P S =
341+ e₂.toLinearMap ∘ₗ (kerToTensor R P' S ).restrictScalars P ∘ₗ e₁.toLinearMap := by
342+ ext x
343+ obtain ⟨x, rfl⟩ := Ideal.toCotangent_surjective _ x
344+ exact (tensorKaehlerQuotKerSqEquiv_tmul_D 1 x.1 ).symm
345+ refine Equiv.trans ?_ (retractionKerToTensorEquivSection (R := R) h₂ h₁)
346+ refine ⟨fun ⟨l, hl⟩ ↦ ⟨⟨(e₁.toLinearMap ∘ₗ l ∘ₗ e₂.toLinearMap).toAddMonoidHom, ?_⟩, ?_⟩,
347+ fun ⟨l, hl⟩ ↦ ⟨e₁.symm.toLinearMap ∘ₗ l.restrictScalars P ∘ₗ e₂.symm.toLinearMap, ?_⟩, ?_, ?_⟩
348+ · rintro x y
349+ obtain ⟨x, rfl⟩ := Ideal.Quotient.mk_surjective x
350+ simp only [← Ideal.Quotient.algebraMap_eq, IsScalarTower.algebraMap_smul]
351+ exact (e₁.toLinearMap ∘ₗ l ∘ₗ e₂.toLinearMap).map_smul x y
352+ · ext1 x
353+ rw [H] at hl
354+ obtain ⟨x, rfl⟩ := e₁.surjective x
355+ exact DFunLike.congr_arg e₁ (LinearMap.congr_fun hl x)
356+ · ext x
357+ rw [H]
358+ apply e₁.injective
359+ simp only [LinearMap.coe_comp, LinearEquiv.coe_coe, LinearMap.coe_restrictScalars,
360+ Function.comp_apply, LinearEquiv.symm_apply_apply, LinearMap.id_coe, id_eq,
361+ LinearEquiv.apply_symm_apply]
362+ exact LinearMap.congr_fun hl (e₁ x)
363+ · intro f
364+ ext x
365+ simp only [AlgebraTensorModule.curry_apply, Derivation.coe_comp, LinearMap.coe_comp,
366+ LinearMap.coe_restrictScalars, Derivation.coeFn_coe, Function.comp_apply, curry_apply,
367+ LinearEquiv.coe_coe, LinearMap.coe_mk, AddHom.coe_coe, LinearMap.toAddMonoidHom_coe,
368+ LinearEquiv.apply_symm_apply, LinearEquiv.symm_apply_apply]
369+ · intro f
370+ ext x
371+ simp only [AlgebraTensorModule.curry_apply, Derivation.coe_comp, LinearMap.coe_comp,
372+ LinearMap.coe_restrictScalars, Derivation.coeFn_coe, Function.comp_apply, curry_apply,
373+ LinearMap.coe_mk, AddHom.coe_coe, LinearMap.toAddMonoidHom_coe, LinearEquiv.coe_coe,
374+ LinearEquiv.symm_apply_apply, LinearEquiv.apply_symm_apply]
375+
376+ variable [Algebra.FormallySmooth R P]
377+
378+ include hf in
379+ /--
380+ Given a formally smooth `R`-algebra `P` and a surjective algebra homomorphism `f : P →ₐ[R] S`
381+ with kernel `I` (typically a presentation `R[X] → S`),
382+ `S` is formally smooth iff the `P`-linear map `I/I² → S ⊗[P] Ω[P⁄R]` is split injective.
383+ -/
384+ @[stacks 031I]
385+ theorem Algebra.FormallySmooth.iff_split_injection :
386+ Algebra.FormallySmooth R S ↔ ∃ l, l ∘ₗ (kerCotangentToTensor R P S) = LinearMap.id := by
387+ have := (retractionKerCotangentToTensorEquivSection (R := R) hf).nonempty_congr
388+ simp only [nonempty_subtype] at this
389+ rw [this, ← Algebra.FormallySmooth.iff_split_surjection _ hf]
390+
391+ include hf in
392+ /--
393+ Given a formally smooth `R`-algebra `P` and a surjective algebra homomorphism `f : P →ₐ[R] S`
394+ with kernel `I` (typically a presentation `R[X] → S`),
395+ then `S` is formally smooth iff `I/I² → S ⊗[P] Ω[S⁄R]` is injective and
396+ `S ⊗[P] Ω[P⁄R] → Ω[S⁄R]` is split surjective.
397+ -/
398+ theorem Algebra.FormallySmooth.iff_injective_and_split :
399+ Algebra.FormallySmooth R S ↔ Function.Injective (kerCotangentToTensor R P S) ∧
400+ ∃ l, (KaehlerDifferential.mapBaseChange R P S) ∘ₗ l = LinearMap.id := by
401+ rw [Algebra.FormallySmooth.iff_split_injection hf]
402+ refine (and_iff_right (KaehlerDifferential.mapBaseChange_surjective R _ _ hf)).symm.trans ?_
403+ refine Iff.trans (((exact_kerCotangentToTensor_mapBaseChange R _ _ hf).split_tfae'
404+ (g := (KaehlerDifferential.mapBaseChange R P S).restrictScalars P)).out 1 0 )
405+ (and_congr Iff.rfl ?_)
406+ rw [(LinearMap.extendScalarsOfSurjectiveEquiv hf).surjective.exists]
407+ simp only [LinearMap.ext_iff, LinearMap.coe_comp, LinearMap.coe_restrictScalars,
408+ Function.comp_apply, LinearMap.extendScalarsOfSurjective_apply, LinearMap.id_coe, id_eq]
409+
410+ private theorem Algebra.FormallySmooth.iff_injective_and_projective' :
411+ letI : Algebra (MvPolynomial S R) S := (MvPolynomial.aeval _root_.id).toAlgebra
412+ Algebra.FormallySmooth R S ↔
413+ Function.Injective (kerCotangentToTensor R (MvPolynomial S R) S) ∧
414+ Module.Projective S (Ω[S⁄R]) := by
415+ letI : Algebra (MvPolynomial S R) S := (MvPolynomial.aeval _root_.id).toAlgebra
416+ have : Function.Surjective (algebraMap (MvPolynomial S R) S) :=
417+ fun x ↦ ⟨.X x, MvPolynomial.aeval_X _ _⟩
418+ rw [Algebra.FormallySmooth.iff_injective_and_split this,
419+ ← Module.Projective.iff_split_of_projective]
420+ exact KaehlerDifferential.mapBaseChange_surjective _ _ _ this
421+
422+ instance : Module.Projective P (Ω[P⁄R]) :=
423+ (Algebra.FormallySmooth.iff_injective_and_projective'.mp ‹_›).2
424+
425+ include hf in
426+ /--
427+ Given a formally smooth `R`-algebra `P` and a surjective algebra homomorphism `f : P →ₐ[R] S`
428+ with kernel `I` (typically a presentation `R[X] → S`),
429+ then `S` is formally smooth iff `I/I² → S ⊗[P] Ω[P⁄R]` is injective and `Ω[S/R]` is projective.
430+ -/
431+ theorem Algebra.FormallySmooth.iff_injective_and_projective :
432+ Algebra.FormallySmooth R S ↔
433+ Function.Injective (kerCotangentToTensor R P S) ∧ Module.Projective S (Ω[S⁄R]) := by
434+ rw [Algebra.FormallySmooth.iff_injective_and_split hf,
435+ ← Module.Projective.iff_split_of_projective]
436+ exact KaehlerDifferential.mapBaseChange_surjective _ _ _ hf
437+
438+ /--
439+ An algebra is formally smooth if and only if `H¹(L_{R/S}) = 0` and `Ω_{S/R}` is projective.
440+ -/
441+ @[stacks 031J]
442+ theorem Algebra.FormallySmooth.iff_subsingleton_and_projective :
443+ Algebra.FormallySmooth R S ↔
444+ Subsingleton (Algebra.H1Cotangent R S) ∧ Module.Projective S (Ω[S⁄R]) := by
445+ refine (Algebra.FormallySmooth.iff_injective_and_projective
446+ (Generators.self R S).algebraMap_surjective).trans (and_congr ?_ Iff.rfl)
447+ show Function.Injective (Generators.self R S).cotangentComplex ↔ _
448+ rw [← LinearMap.ker_eq_bot, ← Submodule.subsingleton_iff_eq_bot]
449+ rfl
0 commit comments