|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Judith Ludwig, Christian Merten. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Judith Ludwig, Christian Merten |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.RingTheory.Extension.Presentation.Core |
| 9 | +public import Mathlib.RingTheory.MvPolynomial.Homogeneous |
| 10 | +public import Mathlib.RingTheory.Smooth.Basic |
| 11 | +public import Mathlib.Tactic.DepRewrite |
| 12 | + |
| 13 | +/-! |
| 14 | +# Smooth algebras have Noetherian models |
| 15 | +
|
| 16 | +In this file, we show if `S` is a smooth `R`-algebra, there exists a `ℤ`-subalgebra of finite type |
| 17 | +`R₀` and a smooth `R₀`-algebra `S₀` such that `S ≃ₐ R ⊗[R₀] S₀`. |
| 18 | +-/ |
| 19 | + |
| 20 | +universe u |
| 21 | + |
| 22 | +open TensorProduct MvPolynomial |
| 23 | + |
| 24 | +namespace Algebra.Smooth |
| 25 | + |
| 26 | +variable {R : Type u} {S : Type*} [CommRing R] [CommRing S] [Algebra R S] |
| 27 | + |
| 28 | +variable (R S) in |
| 29 | +/-- (Implementation detail): If `S` is an `R`-algebra with presentation `P` |
| 30 | +and section `σ` of the projection `R[Xᵢ] ⧸ I^2 → S`, then a |
| 31 | +`DescentAux` structure contains the data necessary to reconstruct `σ`. -/ |
| 32 | +structure DescentAux where |
| 33 | + vars : Type |
| 34 | + rels : Type |
| 35 | + P : Presentation R S vars rels |
| 36 | + σ : S →ₐ[R] MvPolynomial vars R ⧸ P.ker ^ 2 |
| 37 | + h : vars → MvPolynomial vars R |
| 38 | + p : rels → MvPolynomial rels (MvPolynomial vars R) |
| 39 | + hphom : ∀ (j : rels), (p j).IsHomogeneous 2 |
| 40 | + hp : ∀ (j : rels), (eval P.relation) (p j) = (aeval h) (P.relation j) |
| 41 | + q : vars → MvPolynomial rels P.Ring |
| 42 | + hqhom : ∀ (i : vars), (q i).IsHomogeneous 1 |
| 43 | + hq : ∀ (i : vars), (eval P.relation) (q i) = h i - X i |
| 44 | + |
| 45 | +namespace DescentAux |
| 46 | + |
| 47 | +variable (A : DescentAux R S) |
| 48 | + |
| 49 | +/-- (Implementation detail): The finite type `ℤ`-algebra. -/ |
| 50 | +def R₀ (A : DescentAux R S) : Type _ := |
| 51 | + Algebra.adjoin A.P.Core |
| 52 | + ((⋃ i, (A.h i).coeffs) ∪ |
| 53 | + (⋃ i, ⋃ x ∈ (A.q i).coeffs, x.coeffs) ∪ |
| 54 | + (⋃ i, ⋃ x ∈ (A.p i).coeffs, x.coeffs) : Set R) |
| 55 | + |
| 56 | +instance : CommRing A.R₀ := inferInstanceAs <| CommRing (Algebra.adjoin _ _) |
| 57 | +instance algebra : Algebra A.R₀ R := inferInstanceAs <| Algebra (Algebra.adjoin _ _) R |
| 58 | +instance : Algebra A.R₀ S := inferInstanceAs <| Algebra (Algebra.adjoin _ _) S |
| 59 | +instance : IsScalarTower A.R₀ R S := |
| 60 | + inferInstanceAs <| IsScalarTower (Algebra.adjoin _ _) _ _ |
| 61 | +instance : FaithfulSMul A.R₀ R := inferInstanceAs <| FaithfulSMul (Algebra.adjoin _ _) _ |
| 62 | + |
| 63 | +instance [Finite A.vars] [Finite A.rels] : Algebra.FiniteType ℤ A.R₀ := by |
| 64 | + dsimp only [R₀] |
| 65 | + refine Algebra.FiniteType.trans (S := A.P.Core) inferInstance <| .adjoin_of_finite ?_ |
| 66 | + refine Set.Finite.union (Set.Finite.union ?_ ?_) ?_ |
| 67 | + · refine Set.finite_iUnion fun i ↦ Finset.finite_toSet _ |
| 68 | + · refine Set.finite_iUnion fun i ↦ ?_ |
| 69 | + exact Set.Finite.biUnion (Finset.finite_toSet _) (fun i hi ↦ Finset.finite_toSet _) |
| 70 | + · refine Set.finite_iUnion fun i ↦ ?_ |
| 71 | + exact Set.Finite.biUnion (Finset.finite_toSet _) (fun i hi ↦ Finset.finite_toSet _) |
| 72 | + |
| 73 | +instance hasCoeffs : A.P.HasCoeffs A.R₀ := by dsimp [R₀]; infer_instance |
| 74 | + |
| 75 | +set_option quotPrecheck false in |
| 76 | +local notation "f₀" => |
| 77 | + Ideal.Quotient.mkₐ A.R₀ (Ideal.span <| .range <| A.P.relationOfHasCoeffs A.R₀) |
| 78 | + |
| 79 | +lemma subset_range_algebraMap : |
| 80 | + ((⋃ i, (A.h i).coeffs) ∪ |
| 81 | + (⋃ i, ⋃ x ∈ (A.q i).coeffs, x.coeffs) ∪ |
| 82 | + (⋃ i, ⋃ x ∈ (A.p i).coeffs, x.coeffs) : Set R) ⊆ Set.range ⇑(algebraMap A.R₀ R) := by |
| 83 | + simp only [R₀, Subalgebra.setRange_algebraMap, Algebra.subset_adjoin] |
| 84 | + |
| 85 | +lemma coeffs_h_subset (i) : ((A.h i).coeffs : Set R) ⊆ Set.range ⇑(algebraMap A.R₀ R) := by |
| 86 | + trans ⋃ i, ↑(A.h i).coeffs |
| 87 | + · exact Set.subset_iUnion_of_subset i subset_rfl |
| 88 | + · exact subset_trans (subset_trans Set.subset_union_left Set.subset_union_left) |
| 89 | + A.subset_range_algebraMap |
| 90 | + |
| 91 | +lemma coeffs_p_subset (i) : |
| 92 | + ((A.p i).coeffs : Set _) ⊆ .range (MvPolynomial.map (σ := A.vars) (algebraMap A.R₀ R)) := by |
| 93 | + intro p hp |
| 94 | + rw [MvPolynomial.mem_range_map_iff_coeffs_subset] |
| 95 | + refine subset_trans ?_ A.subset_range_algebraMap |
| 96 | + refine subset_trans ?_ Set.subset_union_right |
| 97 | + exact Set.subset_iUnion_of_subset i (Set.subset_iUnion₂_of_subset p hp subset_rfl) |
| 98 | + |
| 99 | +lemma coeffs_q_subset (i) : |
| 100 | + ((A.q i).coeffs : Set _) ⊆ .range (MvPolynomial.map (σ := A.vars) (algebraMap A.R₀ R)) := by |
| 101 | + intro q hq |
| 102 | + rw [MvPolynomial.mem_range_map_iff_coeffs_subset] |
| 103 | + refine subset_trans ?_ A.subset_range_algebraMap |
| 104 | + refine subset_trans ?_ Set.subset_union_left |
| 105 | + refine subset_trans ?_ Set.subset_union_right |
| 106 | + exact Set.subset_iUnion_of_subset i (Set.subset_iUnion₂_of_subset q hq subset_rfl) |
| 107 | + |
| 108 | +noncomputable def σ₀ : |
| 109 | + A.P.ModelOfHasCoeffs A.R₀ →ₐ[A.R₀] MvPolynomial A.vars A.R₀ ⧸ (RingHom.ker f₀ ^ 2) := |
| 110 | + Ideal.Quotient.liftₐ _ ((Ideal.Quotient.mkₐ _ _).comp <| aeval fun i ↦ |
| 111 | + ((A.h i).preimageOfCoeffsSubsetRange (A.coeffs_h_subset i))) <| by |
| 112 | + simp_rw [← RingHom.mem_ker, ← SetLike.le_def, Ideal.span_le, Set.range_subset_iff] |
| 113 | + intro i |
| 114 | + simp only [← AlgHom.comap_ker, Ideal.coe_comap, |
| 115 | + Set.mem_preimage, SetLike.mem_coe] |
| 116 | + rw [← RingHom.ker_coe_toRingHom, Ideal.Quotient.mkₐ_ker, |
| 117 | + ← RingHom.ker_coe_toRingHom, Ideal.Quotient.mkₐ_ker] |
| 118 | + have hinj : Function.Injective (MvPolynomial.map (σ := A.vars) (algebraMap A.R₀ R)) := |
| 119 | + map_injective _ (FaithfulSMul.algebraMap_injective A.R₀ R) |
| 120 | + rw [Ideal.mem_span_pow_iff] |
| 121 | + refine ⟨(A.p i).preimageOfCoeffsSubsetRange (A.coeffs_p_subset i), .of_map hinj ?_, hinj ?_⟩ |
| 122 | + · rw [map_preimageOfCoeffsSubsetRange] |
| 123 | + exact A.hphom i |
| 124 | + · simp_rw [map_eval, Function.comp_def, Presentation.map_relationOfHasCoeffs, |
| 125 | + map_preimageOfCoeffsSubsetRange, A.hp, MvPolynomial.map_aeval] |
| 126 | + simp [MvPolynomial.eval₂_map_comp_C, Presentation.map_relationOfHasCoeffs, aeval_def] |
| 127 | + |
| 128 | +lemma kerSquareLift_comp_σ₀ : |
| 129 | + (AlgHom.kerSquareLift f₀).comp A.σ₀ = .id A.R₀ (Presentation.ModelOfHasCoeffs A.R₀) := by |
| 130 | + have hf₀ : Function.Surjective f₀ := Ideal.Quotient.mk_surjective |
| 131 | + rw [← AlgHom.cancel_right hf₀] |
| 132 | + refine MvPolynomial.algHom_ext fun i ↦ ?_ |
| 133 | + suffices h : ∃ p, p.IsHomogeneous 1 ∧ (eval (A.P.relationOfHasCoeffs A.R₀)) p = |
| 134 | + preimageOfCoeffsSubsetRange (A.coeffs_h_subset i) - X i by |
| 135 | + -- Reducible def-eq issues caused by `RingHom.ker f.toRingHom` dicsrepancies |
| 136 | + apply (Ideal.Quotient.mk_eq_mk_iff_sub_mem _ _).mpr |
| 137 | + simpa [Ideal.mem_span_iff] |
| 138 | + have hinj : Function.Injective (MvPolynomial.map (σ := A.vars) (algebraMap A.R₀ R)) := |
| 139 | + map_injective _ (FaithfulSMul.algebraMap_injective A.R₀ R) |
| 140 | + refine ⟨(A.q i).preimageOfCoeffsSubsetRange (A.coeffs_q_subset i), .of_map hinj ?_, hinj ?_⟩ |
| 141 | + · rw [map_preimageOfCoeffsSubsetRange] |
| 142 | + exact A.hqhom i |
| 143 | + · simp [MvPolynomial.map_eval, map_preimageOfCoeffsSubsetRange, Function.comp_def, |
| 144 | + Presentation.map_relationOfHasCoeffs, hq] |
| 145 | + |
| 146 | +end DescentAux |
| 147 | + |
| 148 | +/-- If `S` is a smooth `R`-algebra, there exists a `ℤ`-subalgebra of finite type |
| 149 | +`R₀` and a smooth `R₀`-algebra `S₀` such that `S ≃ₐ R ⊗[R₀] S₀`. -/ |
| 150 | +@[stacks 00TP] |
| 151 | +public theorem exists_finiteType [Smooth R S] : |
| 152 | + ∃ (R₀ : Type u) (S₀ : Type u) (_ : CommRing R₀) (_ : CommRing S₀) |
| 153 | + (_ : Algebra R₀ R) (_ : Algebra R₀ S₀), |
| 154 | + FiniteType ℤ R₀ ∧ Smooth R₀ S₀ ∧ Nonempty (S ≃ₐ[R] R ⊗[R₀] S₀) := by |
| 155 | + let P := Presentation.ofFinitePresentation R S |
| 156 | + let f : P.Ring →ₐ[R] S := IsScalarTower.toAlgHom _ _ _ |
| 157 | + have hkerf : RingHom.ker f = Ideal.span (.range P.relation) := |
| 158 | + P.span_range_relation_eq_ker.symm |
| 159 | + obtain ⟨(σ : S →ₐ[R] MvPolynomial _ R ⧸ RingHom.ker f ^ 2), hsig⟩ := |
| 160 | + (FormallySmooth.iff_split_surjection f P.algebraMap_surjective).mp inferInstance |
| 161 | + have (i : _) := Ideal.Quotient.mk_surjective (σ <| P.val i) |
| 162 | + choose h hh using this |
| 163 | + have hdiag : (Ideal.Quotient.mkₐ _ _).comp (aeval h) = σ.comp (aeval P.val) := |
| 164 | + algHom_ext (by simp [hh]) |
| 165 | + have (j : _) : Ideal.Quotient.mk (RingHom.ker f ^ 2) (aeval h (P.relation j)) = 0 := by |
| 166 | + suffices ho : σ (aeval P.val (P.relation j)) = 0 by |
| 167 | + convert ho |
| 168 | + exact congr($hdiag _) |
| 169 | + simp |
| 170 | + simp_rw [Ideal.Quotient.eq_zero_iff_mem, hkerf, Ideal.mem_span_pow_iff] at this |
| 171 | + choose p homog hp using this |
| 172 | + have hsig (i : _) : f (h i) = P.val i := by |
| 173 | + rw [← AlgHom.kerSquareLift_mk] |
| 174 | + -- Reducible def-eq issues caused by `RingHom.ker f.toRingHom` dicsrepancies |
| 175 | + exact hh i ▸ congr($hsig (P.val i)) |
| 176 | + have (i : Fin (Presentation.ofFinitePresentationVars R S)) : |
| 177 | + h i - X i ∈ Ideal.span (.range P.relation) := by |
| 178 | + simpa [P.span_range_relation_eq_ker, sub_eq_zero, f] using hsig i |
| 179 | + simp_rw [Ideal.mem_span_iff] at this |
| 180 | + choose q hqhom hq using this |
| 181 | + let A : DescentAux R S := |
| 182 | + { vars := _, rels := _, P := P, σ := σ, p := p, h := h, hphom := homog, hp := hp, |
| 183 | + q := q, hqhom := hqhom, hq := hq } |
| 184 | + have : P.HasCoeffs A.R₀ := A.hasCoeffs |
| 185 | + exact ⟨A.R₀, P.ModelOfHasCoeffs A.R₀, inferInstance, inferInstance, inferInstance, inferInstance, |
| 186 | + inferInstance, ⟨.of_split _ A.σ₀ A.kerSquareLift_comp_σ₀, inferInstance⟩, |
| 187 | + ⟨(P.tensorModelOfHasCoeffsEquiv A.R₀).symm⟩⟩ |
| 188 | + |
| 189 | +end Algebra.Smooth |
0 commit comments