Skip to content

Commit da22c4e

Browse files
committed
feat(RingTheory/Smooth/StandardSmooth): transport IsStandardSmooth along algebra isomorphisms (#32925)
1 parent 6712d82 commit da22c4e

File tree

4 files changed

+85
-0
lines changed

4 files changed

+85
-0
lines changed

Mathlib/RingTheory/Extension/Generators.lean

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,20 @@ def toExtension : Extension R S where
169169
σ := P.σ
170170
algebraMap_σ := by simp
171171

172+
/-- Transport generators along an algebra isomorphism. -/
173+
def ofAlgEquiv (P : Generators R S ι) {T : Type*} [CommRing T] [Algebra R T] (e : S ≃ₐ[R] T) :
174+
Generators R T ι where
175+
val := e ∘ P.val
176+
σ' := P.σ ∘ e.symm
177+
aeval_val_σ' t := by
178+
rw [Function.comp_def, ← AlgHom.coe_coe e, ← MvPolynomial.comp_aeval_apply]
179+
simp
180+
181+
@[simp]
182+
lemma ofAlgEquiv_val (P : Generators R S ι) {T : Type*} [CommRing T] [Algebra R T] (e : S ≃ₐ[R] T) :
183+
(P.ofAlgEquiv e).val = e ∘ P.val :=
184+
rfl
185+
172186
section Localization
173187

174188
variable (r : R) [IsLocalization.Away r S]
@@ -567,6 +581,14 @@ lemma ker_ofAlgHom {I : Type*} (f : MvPolynomial I R →ₐ[R] S) (h : Function.
567581
congr
568582
exact MvPolynomial.ringHom_ext (by simp) (by simp [ofAlgHom])
569583

584+
@[simp]
585+
lemma ker_ofAlgEquiv (P : Generators R S ι) {T : Type*} [CommRing T] [Algebra R T] (e : S ≃ₐ[R] T) :
586+
(P.ofAlgEquiv e).ker = P.ker := by
587+
rw [ker_eq_ker_aeval_val, ofAlgEquiv_val, Function.comp_def, ← AlgHom.coe_coe,
588+
← MvPolynomial.comp_aeval, ← AlgHom.comap_ker, ← RingHom.ker_coe_toRingHom,
589+
AlgHomClass.toRingHom_toAlgHom, AlgHom.ker_coe_equiv, ← RingHom.ker_eq_comap_bot,
590+
← ker_eq_ker_aeval_val]
591+
570592
lemma map_toComp_ker (Q : Generators S T ι') (P : Generators R S ι) :
571593
P.ker.map (Q.toComp P).toAlgHom = RingHom.ker (Q.ofComp P).toAlgHom := by
572594
letI : DecidableEq (ι' →₀ ℕ) := Classical.decEq _

Mathlib/RingTheory/Extension/Presentation/Basic.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,20 @@ def ofFinitePresentation [FinitePresentation R S] :
160160

161161
section Construction
162162

163+
/-- Transport a presentation along an algebra isomorphism. -/
164+
@[simps toGenerators relation]
165+
def ofAlgEquiv (P : Presentation R S ι σ) {T : Type*} [CommRing T] [Algebra R T]
166+
(e : S ≃ₐ[R] T) :
167+
Presentation R T ι σ where
168+
__ := Generators.ofAlgEquiv P.toGenerators e
169+
relation i := P.relation i
170+
span_range_relation_eq_ker := by simp [P.span_range_relation_eq_ker]
171+
172+
@[simp]
173+
lemma dimension_ofAlgEquiv (P : Presentation R S ι σ) {T : Type*} [CommRing T] [Algebra R T]
174+
(e : S ≃ₐ[R] T) : (P.ofAlgEquiv e).dimension = P.dimension :=
175+
rfl
176+
163177
/-- If `algebraMap R S` is bijective, the empty generators are a presentation with no relations. -/
164178
noncomputable def ofBijectiveAlgebraMap (h : Function.Bijective (algebraMap R S)) :
165179
Presentation R S PEmpty.{w + 1} PEmpty.{t + 1} where

Mathlib/RingTheory/Extension/Presentation/Submersive.lean

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,33 @@ end
177177

178178
section Constructions
179179

180+
/-- Transport a pre-submersive presentation along an algebra isomorphism. -/
181+
@[simps toPresentation map]
182+
def ofAlgEquiv (P : PreSubmersivePresentation R S ι σ) {T : Type*} [CommRing T] [Algebra R T]
183+
(e : S ≃ₐ[R] T) :
184+
PreSubmersivePresentation R T ι σ where
185+
__ := P.toPresentation.ofAlgEquiv e
186+
map := P.map
187+
map_inj := P.map_inj
188+
189+
@[simp]
190+
lemma jacobiMatrix_ofAlgEquiv (P : PreSubmersivePresentation R S ι σ) {T : Type*} [CommRing T]
191+
[Algebra R T] (e : S ≃ₐ[R] T) [Fintype σ] [DecidableEq σ] :
192+
(P.ofAlgEquiv e).jacobiMatrix = P.jacobiMatrix :=
193+
rfl
194+
195+
@[simp]
196+
lemma jacobian_ofAlgEquiv (P : PreSubmersivePresentation R S ι σ) {T : Type*} [CommRing T]
197+
[Algebra R T] (e : S ≃ₐ[R] T) [Finite σ] :
198+
(P.ofAlgEquiv e).jacobian = e P.jacobian := by
199+
classical
200+
cases nonempty_fintype σ
201+
rw [jacobian_eq_jacobiMatrix_det, jacobian_eq_jacobiMatrix_det]
202+
simp only [ofAlgEquiv_toPresentation, Presentation.ofAlgEquiv_toGenerators,
203+
jacobiMatrix_ofAlgEquiv, Generators.algebraMap_apply, Generators.ofAlgEquiv_val,
204+
← AlgHom.coe_coe e, MvPolynomial.comp_aeval_apply]
205+
simp [Function.comp_def]
206+
180207
/-- If `algebraMap R S` is bijective, the empty generators are a pre-submersive
181208
presentation with no relations. -/
182209
noncomputable def ofBijectiveAlgebraMap (h : Function.Bijective (algebraMap R S)) :
@@ -479,6 +506,15 @@ open PreSubmersivePresentation
479506

480507
section Constructions
481508

509+
variable {R S ι σ} in
510+
/-- Transport a submersive presentation along an algebra isomorphism. -/
511+
@[simps toPreSubmersivePresentation]
512+
def ofAlgEquiv (P : SubmersivePresentation R S ι σ) {T : Type*} [CommRing T] [Algebra R T]
513+
(e : S ≃ₐ[R] T) :
514+
SubmersivePresentation R T ι σ where
515+
__ := P.toPreSubmersivePresentation.ofAlgEquiv e
516+
jacobian_isUnit := by simp [P.jacobian_isUnit]
517+
482518
variable {R S} in
483519
/-- If `algebraMap R S` is bijective, the empty generators are a submersive
484520
presentation with no relations. -/

Mathlib/RingTheory/Smooth/StandardSmooth.lean

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class IsStandardSmooth : Prop where
6464

6565
variable [Finite σ]
6666

67+
variable {R S ι σ} in
6768
lemma SubmersivePresentation.isStandardSmooth [Finite ι] (P : SubmersivePresentation R S ι σ) :
6869
IsStandardSmooth R S := by
6970
exact ⟨_, _, _, inferInstance, ⟨P.reindex (Fintype.equivFin _).symm (Fintype.equivFin _).symm⟩⟩
@@ -88,6 +89,7 @@ class IsStandardSmoothOfRelativeDimension : Prop where
8889
out : ∃ (ι σ : Type) (_ : Finite σ) (_ : Finite ι) (P : SubmersivePresentation R S ι σ),
8990
P.dimension = n
9091

92+
variable {R S ι σ n} in
9193
lemma SubmersivePresentation.isStandardSmoothOfRelativeDimension [Finite ι]
9294
(P : SubmersivePresentation R S ι σ) (hP : P.dimension = n) :
9395
IsStandardSmoothOfRelativeDimension n R S := by
@@ -118,6 +120,17 @@ instance (priority := 100) IsStandardSmooth.finitePresentation [IsStandardSmooth
118120
obtain ⟨_, _, _, _, ⟨P⟩⟩ := ‹IsStandardSmooth R S›
119121
exact P.finitePresentation_of_isFinite
120122

123+
lemma IsStandardSmooth.of_algEquiv {T : Type*} [CommRing T] [Algebra R T] (e : S ≃ₐ[R] T)
124+
[IsStandardSmooth R S] : IsStandardSmooth R T := by
125+
obtain ⟨_, _, _, _, ⟨P⟩⟩ := ‹IsStandardSmooth R S›
126+
exact (P.ofAlgEquiv e).isStandardSmooth
127+
128+
lemma IsStandardSmoothOfRelativeDimension.of_algEquiv {T : Type*} [CommRing T] [Algebra R T]
129+
(e : S ≃ₐ[R] T) [IsStandardSmoothOfRelativeDimension n R S] :
130+
IsStandardSmoothOfRelativeDimension n R T := by
131+
obtain ⟨_, _, _, _, ⟨P, hP⟩⟩ := ‹IsStandardSmoothOfRelativeDimension n R S›
132+
exact (P.ofAlgEquiv e).isStandardSmoothOfRelativeDimension (by simpa)
133+
121134
section Composition
122135

123136
variable (R S T) [CommRing T] [Algebra R T] [Algebra S T] [IsScalarTower R S T]

0 commit comments

Comments
 (0)