Skip to content

Commit 34f670d

Browse files
committed
feat(RingTheory/Finiteness): a finite and finitely presented algebra is finitely presented (#29781)
We show that if `S` is finite as a module over `R` and finitely presented as an algebra over `R`, then it is finitely presented as a module over `R`.
1 parent f482e48 commit 34f670d

File tree

6 files changed

+164
-0
lines changed

6 files changed

+164
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5612,6 +5612,7 @@ import Mathlib.RingTheory.Finiteness.Defs
56125612
import Mathlib.RingTheory.Finiteness.Finsupp
56135613
import Mathlib.RingTheory.Finiteness.Ideal
56145614
import Mathlib.RingTheory.Finiteness.Lattice
5615+
import Mathlib.RingTheory.Finiteness.ModuleFinitePresentation
56155616
import Mathlib.RingTheory.Finiteness.Nakayama
56165617
import Mathlib.RingTheory.Finiteness.Nilpotent
56175618
import Mathlib.RingTheory.Finiteness.Prod

Mathlib/Algebra/Algebra/Tower.lean

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,25 @@ theorem restrictScalars_injective :
202202
Function.Injective (restrictScalars R : (A →ₐ[S] B) → A →ₐ[R] B) := fun _ _ h =>
203203
AlgHom.ext (AlgHom.congr_fun h :)
204204

205+
section
206+
207+
variable {R}
208+
209+
/-- Any `f : A →ₐ[R] B` is also an `R ⧸ I`-algebra homomorphism if the `R`-algebra structure on
210+
`A` and `B` factors via `R ⧸ I`. -/
211+
@[simps! apply]
212+
def extendScalarsOfSurjective (h : Function.Surjective (algebraMap R S))
213+
(f : A →ₐ[R] B) : A →ₐ[S] B where
214+
toRingHom := f
215+
commutes' := by simp [h.forall, ← IsScalarTower.algebraMap_apply]
216+
217+
@[simp]
218+
lemma restrictScalars_extendScalarsOfSurjective (h : Function.Surjective (algebraMap R S))
219+
(f : A →ₐ[R] B) :
220+
(f.extendScalarsOfSurjective h).restrictScalars R = f := rfl
221+
222+
end
223+
205224
end AlgHom
206225

207226
namespace AlgEquiv
@@ -236,6 +255,30 @@ lemma coe_restrictScalars_symm (f : A ≃ₐ[S] B) :
236255
lemma coe_restrictScalars_symm' (f : A ≃ₐ[S] B) :
237256
((restrictScalars R f).symm : B → A) = f.symm := rfl
238257

258+
section
259+
260+
variable {R}
261+
262+
/-- Any `f : A ≃ₐ[R] B` is also an `R ⧸ I`-algebra isomorphism if the `R`-algebra structure on
263+
`A` and `B` factors via `R ⧸ I`. -/
264+
@[simps! apply]
265+
def extendScalarsOfSurjective (h : Function.Surjective (algebraMap R S))
266+
(f : A ≃ₐ[R] B) : A ≃ₐ[S] B where
267+
toRingEquiv := f
268+
commutes' := (f.toAlgHom.extendScalarsOfSurjective h).commutes'
269+
270+
@[simp]
271+
lemma restrictScalars_extendScalarsOfSurjective (h : Function.Surjective (algebraMap R S))
272+
(f : A ≃ₐ[R] B) :
273+
(f.extendScalarsOfSurjective h).restrictScalars R = f := rfl
274+
275+
@[simp]
276+
lemma extendScalarsOfSurjective_symm (h : Function.Surjective (algebraMap R S))
277+
(f : A ≃ₐ[R] B) :
278+
(f.extendScalarsOfSurjective h).symm = f.symm.extendScalarsOfSurjective h := rfl
279+
280+
end
281+
239282
end AlgEquiv
240283

241284
end Homs

Mathlib/Algebra/Polynomial/AlgebraMap.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,10 @@ theorem aeval_X_left : aeval (X : R[X]) = AlgHom.id R R[X] :=
364364
theorem aeval_X_left_apply (p : R[X]) : aeval X p = p :=
365365
AlgHom.congr_fun (@aeval_X_left R _) p
366366

367+
lemma aeval_X_left_eq_map [CommSemiring S] [Algebra R S] (p : R[X]) :
368+
aeval X p = map (algebraMap R S) p :=
369+
rfl
370+
367371
theorem eval_unique (φ : R[X] →ₐ[R] A) (p) : φ p = eval₂ (algebraMap R A) (φ X) p := by
368372
rw [← aeval_def, aeval_algHom, aeval_X_left, AlgHom.comp_id]
369373

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
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.Algebra.Module.FinitePresentation
7+
import Mathlib.RingTheory.AdjoinRoot
8+
9+
/-!
10+
# Finitely presented algebras and finitely presented modules
11+
12+
In this file we establish relations between finitely presented as an algebra and
13+
finitely presented as a module.
14+
15+
## Main results:
16+
17+
- `Algebra.FinitePresentation.of_finitePresentation`: If `S` is finitely presented as a
18+
module over `R`, then it is finitely presented as an algebra over `R`.
19+
- `Module.FinitePresentation.of_finite_of_finitePresentation`: If `S` is finite as a module over `R`
20+
and finitely presented as an algebra over `R`, then it is finitely presented as a module over `R`.
21+
22+
## References
23+
24+
- [Grothendieck, EGA IV₁ 1.4.7][ega-iv-1]
25+
-/
26+
27+
universe u
28+
29+
variable (R : Type u) (S : Type*) [CommRing R] [CommRing S] [Algebra R S]
30+
31+
/-- EGA IV₁, 1.4.7.1 -/
32+
lemma Module.Finite.exists_free_surjective [Module.Finite R S] :
33+
∃ (S' : Type u) (_ : CommRing S') (_ : Algebra R S') (_ : Module.Finite R S')
34+
(_ : Module.Free R S') (_ : Algebra.FinitePresentation R S')
35+
(f : S' →ₐ[R] S), Function.Surjective f := by
36+
classical
37+
obtain ⟨s, hs⟩ : (⊤ : Submodule R S).FG := Module.finite_def.mp inferInstance
38+
suffices h : ∃ (S' : Type u) (_ : CommRing S') (_ : Algebra R S') (_ : Module.Finite R S')
39+
(_ : Module.Free R S') (_ : Algebra.FinitePresentation R S')
40+
(f : S' →ₐ[R] S), (s : Set S) ⊆ AlgHom.range f by
41+
obtain ⟨S', _, _, _, _, _, f, hsf⟩ := h
42+
have hf : Function.Surjective f := by
43+
have := (Submodule.span_le (p := LinearMap.range f.toLinearMap)).mpr hsf
44+
rwa [hs, top_le_iff, LinearMap.range_eq_top] at this
45+
use S', ‹_›, ‹_›, ‹_›, ‹_›, ‹_›, f
46+
clear hs
47+
induction s using Finset.induction with
48+
| empty =>
49+
exact ⟨R, _, _, inferInstance, inferInstance, inferInstance, Algebra.ofId R S, by simp⟩
50+
| insert a s has IH =>
51+
obtain ⟨S', _, _, _, _, _, f, hsf⟩ := IH
52+
have ha := Algebra.IsIntegral.isIntegral (R := R) a
53+
have := ((minpoly.monic ha).map (algebraMap R S')).finite_adjoinRoot
54+
have := ((minpoly.monic ha).map (algebraMap R S')).free_adjoinRoot
55+
algebraize [f.toRingHom]
56+
refine ⟨AdjoinRoot ((minpoly R a).map (algebraMap R S')), inferInstance, inferInstance,
57+
.trans S' _, .trans (S := S'), .trans _ S' _,
58+
(AdjoinRoot.liftAlgHom _ (Algebra.ofId _ _) a
59+
(by simp [← Polynomial.aeval_def])).restrictScalars R, ?_⟩
60+
simp only [Finset.coe_insert, AlgHom.coe_range, AlgHom.coe_restrictScalars',
61+
Set.insert_subset_iff, Set.mem_range]
62+
exact ⟨⟨.root _, by simp⟩, hsf.trans fun y ⟨x, hx⟩ ↦ ⟨.of _ x, by simpa⟩⟩
63+
64+
/-- If `S` is finitely presented as a module over `R`, it is finitely
65+
presented as an algebra over `R`. -/
66+
instance Algebra.FinitePresentation.of_finitePresentation
67+
[Module.FinitePresentation R S] : Algebra.FinitePresentation R S := by
68+
obtain ⟨S', _, _, _, _, _, f, hf⟩ := Module.Finite.exists_free_surjective R S
69+
refine .of_surjective hf ?_
70+
apply Submodule.FG.of_restrictScalars R
71+
exact Module.FinitePresentation.fg_ker f.toLinearMap hf
72+
73+
/-- If `S` is finite as a module over `R` and finitely presented as an algebra over `R`, then
74+
it is finitely presented as a module over `R`. -/
75+
@[stacks 0564 "The case M = S"]
76+
lemma Module.FinitePresentation.of_finite_of_finitePresentation
77+
[Module.Finite R S] [Algebra.FinitePresentation R S] :
78+
Module.FinitePresentation R S := by
79+
classical
80+
obtain ⟨R', _, _, _, _, _, f, hf⟩ := Module.Finite.exists_free_surjective R S
81+
letI := f.toRingHom.toAlgebra
82+
have : IsScalarTower R R' S := .of_algebraMap_eq' f.comp_algebraMap.symm
83+
have : Module.FinitePresentation R R' :=
84+
Module.finitePresentation_of_projective R R'
85+
have : Module.FinitePresentation R' S :=
86+
Module.finitePresentation_of_surjective (Algebra.linearMap R' S) hf
87+
(Algebra.FinitePresentation.ker_fG_of_surjective f hf)
88+
exact .trans R S R'
89+
90+
/-- If `S` is a finite `R`-algebra, finitely presented as a module and as an algebra
91+
is equivalent. -/
92+
lemma Module.FinitePresentation.iff_finitePresentation_of_finite [Module.Finite R S] :
93+
Module.FinitePresentation R S ↔ Algebra.FinitePresentation R S :=
94+
fun _ ↦ .of_finitePresentation R S, fun _ ↦ .of_finite_of_finitePresentation R S⟩

Mathlib/RingTheory/Polynomial/Basic.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,9 @@ end Polynomial
759759

760760
namespace MvPolynomial
761761

762+
instance {ι R : Type*} [CommSemiring R] [IsEmpty ι] : Module.Finite R (MvPolynomial ι R) :=
763+
Module.Finite.equiv (MvPolynomial.isEmptyAlgEquiv R ι).toLinearEquiv.symm
764+
762765
private theorem prime_C_iff_of_fintype {R : Type u} (σ : Type v) {r : R} [CommRing R] [Fintype σ] :
763766
Prime (C r : MvPolynomial σ R) ↔ Prime r := by
764767
rw [← MulEquiv.prime_iff (renameEquiv R (Fintype.equivFin σ))]

docs/references.bib

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,25 @@ @Article{ Echenique2005
15591559
doi = {10.1007/s001820400192}
15601560
}
15611561

1562+
@Article{ ega-iv-1,
1563+
author = {Grothendieck, A.},
1564+
title = {{\'E}l{\'e}ments de g{\'e}om{\'e}trie alg{\'e}brique.
1565+
{IV}: {\'E}tude locale des sch{\'e}mas et des morphismes de
1566+
sch{\'e}mas. ({Premi{\`e}re} partie). {R{\'e}dig{\'e}} avec
1567+
la colloboration de {J}. {Dieudonn{\'e}}},
1568+
fjournal = {Publications Math{\'e}matiques},
1569+
journal = {Publ. Math., Inst. Hautes {\'E}tud. Sci.},
1570+
issn = {0073-8301},
1571+
volume = {20},
1572+
pages = {101--355},
1573+
year = {1964},
1574+
language = {French},
1575+
doi = {10.1007/BF02684747},
1576+
keywords = {14-02,14Axx},
1577+
zbmath = {3220890},
1578+
zbl = {0136.15901}
1579+
}
1580+
15621581
@Book{ egno15,
15631582
author = {Etingof, Pavel and Gelaki, Shlomo and Nikshych, Dmitri and
15641583
Ostrik, Victor},

0 commit comments

Comments
 (0)