Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit cf94743

Browse files
committed
feat(ring_theory/finiteness): A morphism is finitely presented if the composition with a finite morphism is. (#15949)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 6d94ff7 commit cf94743

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

src/ring_theory/adjoin/basic.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,16 @@ begin
270270
congr' 1 with z, simp [submonoid.closure_union, submonoid.mem_sup, set.mem_mul]
271271
end
272272

273+
lemma adjoin_adjoin_of_tower [semiring B] [algebra R B] [algebra A B] [is_scalar_tower R A B]
274+
(s : set B) : adjoin A (adjoin R s : set B) = adjoin A s :=
275+
begin
276+
apply le_antisymm (adjoin_le _),
277+
{ exact adjoin_mono subset_adjoin },
278+
{ change adjoin R s ≤ (adjoin A s).restrict_scalars R,
279+
refine adjoin_le _,
280+
exact subset_adjoin }
281+
end
282+
273283
variable {R}
274284

275285
lemma pow_smul_mem_of_smul_subset_of_mem_adjoin

src/ring_theory/finiteness.lean

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Johan Commelin
66

77
import group_theory.finiteness
88
import ring_theory.algebra_tower
9+
import ring_theory.mv_polynomial.tower
910
import ring_theory.ideal.quotient
1011
import ring_theory.noetherian
1112

@@ -424,7 +425,86 @@ end
424425

425426
open mv_polynomial
426427

428+
-- We follow the proof of https://stacks.math.columbia.edu/tag/0561
429+
-- TODO: extract out helper lemmas and tidy proof.
430+
lemma of_restrict_scalars_finite_presentation [algebra A B] [is_scalar_tower R A B]
431+
(hRB : finite_presentation R B) [hRA : finite_type R A] : finite_presentation A B :=
432+
begin
433+
obtain ⟨n, f, hf, s, hs⟩ := hRB,
434+
let RX := mv_polynomial (fin n) R, let AX := mv_polynomial (fin n) A,
435+
refine ⟨n, mv_polynomial.aeval (f ∘ X), _, _⟩,
436+
{ rw [← algebra.range_top_iff_surjective, ← algebra.adjoin_range_eq_range_aeval, set.range_comp,
437+
_root_.eq_top_iff, ← @adjoin_adjoin_of_tower R A B, adjoin_image,
438+
adjoin_range_X, algebra.map_top, (algebra.range_top_iff_surjective _).mpr hf],
439+
exact subset_adjoin },
440+
{ obtain ⟨t, ht⟩ := hRA.out,
441+
have := λ i : t, hf (algebra_map A B i),
442+
choose t' ht',
443+
have ht'' : algebra.adjoin R ((algebra_map A AX) '' t ∪ set.range (X : _ → AX)) = ⊤,
444+
{ rw [adjoin_union_eq_adjoin_adjoin, ← subalgebra.restrict_scalars_top R],
445+
congr' 1,
446+
swap, { exact subalgebra.is_scalar_tower_mid _ },
447+
rw [adjoin_algebra_map, ht],
448+
apply subalgebra.restrict_scalars_injective R,
449+
rw [← adjoin_restrict_scalars, adjoin_range_X, subalgebra.restrict_scalars_top,
450+
subalgebra.restrict_scalars_top] },
451+
let g : t → AX := λ x, C (x : A) - map (algebra_map R A) (t' x),
452+
refine ⟨s.image (map (algebra_map R A)) ∪ t.attach.image g, _⟩,
453+
rw [finset.coe_union, finset.coe_image, finset.coe_image, finset.attach_eq_univ,
454+
finset.coe_univ, set.image_univ],
455+
let s₀ := _, let I := _, change ideal.span s₀ = I,
456+
have leI : ideal.span s₀ ≤ I,
457+
{ rw [ideal.span_le],
458+
rintros _ (⟨x, hx, rfl⟩|⟨⟨x, hx⟩, rfl⟩),
459+
all_goals
460+
{ dsimp [g], rw [ring_hom.mem_ker, alg_hom.to_ring_hom_eq_coe, alg_hom.coe_to_ring_hom] },
461+
{ rw [mv_polynomial.aeval_map_algebra_map, ← aeval_unique],
462+
have := ideal.subset_span hx,
463+
rwa hs at this },
464+
{ rw [map_sub, mv_polynomial.aeval_map_algebra_map, ← aeval_unique,
465+
aeval_C, ht', subtype.coe_mk, sub_self] } },
466+
apply leI.antisymm,
467+
intros x hx,
468+
rw [ring_hom.mem_ker, alg_hom.to_ring_hom_eq_coe, alg_hom.coe_to_ring_hom] at hx,
469+
let s₀ := _, change x ∈ ideal.span s₀,
470+
have : x ∈ (map (algebra_map R A) : _ →+* AX).srange.to_add_submonoid ⊔
471+
(ideal.span s₀).to_add_submonoid,
472+
{ have : x ∈ (⊤ : subalgebra R AX) := trivial,
473+
rw ← ht'' at this,
474+
apply adjoin_induction this,
475+
{ rintros _ (⟨x, hx, rfl⟩|⟨i, rfl⟩),
476+
{ rw [algebra_map_eq, ← sub_add_cancel (C x) (map (algebra_map R A) (t' ⟨x, hx⟩)),
477+
add_comm],
478+
apply add_submonoid.add_mem_sup,
479+
{ exact set.mem_range_self _ },
480+
{ apply ideal.subset_span,
481+
apply set.mem_union_right,
482+
exact set.mem_range_self ⟨x, hx⟩ } },
483+
{ apply add_submonoid.mem_sup_left,
484+
exact ⟨X i, map_X _ _⟩ } },
485+
{ intro r, apply add_submonoid.mem_sup_left, exact ⟨C r, map_C _ _⟩ },
486+
{ intros _ _ h₁ h₂, exact add_mem h₁ h₂ },
487+
{ intros x₁ x₂ h₁ h₂,
488+
obtain ⟨_, ⟨p₁, rfl⟩, q₁, hq₁, rfl⟩ := add_submonoid.mem_sup.mp h₁,
489+
obtain ⟨_, ⟨p₂, rfl⟩, q₂, hq₂, rfl⟩ := add_submonoid.mem_sup.mp h₂,
490+
rw [add_mul, mul_add, add_assoc, ← map_mul],
491+
apply add_submonoid.add_mem_sup,
492+
{ exact set.mem_range_self _ },
493+
{ refine add_mem (ideal.mul_mem_left _ _ hq₂) (ideal.mul_mem_right _ _ hq₁) } } },
494+
obtain ⟨_, ⟨p, rfl⟩, q, hq, rfl⟩ := add_submonoid.mem_sup.mp this,
495+
rw [map_add, aeval_map_algebra_map, ← aeval_unique, (show aeval (f ∘ X) q = 0, from leI hq),
496+
add_zero] at hx,
497+
suffices : ideal.span (s : set RX) ≤ (ideal.span s₀).comap (map $ algebra_map R A),
498+
{ refine add_mem _ hq, rw hs at this, exact this hx },
499+
rw ideal.span_le,
500+
intros x hx,
501+
apply ideal.subset_span,
502+
apply set.mem_union_left,
503+
exact set.mem_image_of_mem _ hx }
504+
end
505+
427506
/-- This is used to prove the strictly stronger `ker_fg_of_surjective`. Use it instead. -/
507+
-- TODO: extract out helper lemmas and tidy proof.
428508
lemma ker_fg_of_mv_polynomial {n : ℕ} (f : mv_polynomial (fin n) R →ₐ[R] A)
429509
(hf : function.surjective f) (hfp : finite_presentation R A) : f.to_ring_hom.ker.fg :=
430510
begin
@@ -631,6 +711,13 @@ lemma comp {g : B →+* C} {f : A →+* B} (hg : g.finite_presentation) (hf : f.
631711
end }
632712
hf hg
633713

714+
lemma of_comp_finite_type (f : A →+* B) {g : B →+* C} (hg : (g.comp f).finite_presentation)
715+
(hf : f.finite_type) : g.finite_presentation :=
716+
@@algebra.finite_presentation.of_restrict_scalars_finite_presentation _ _ f.to_algebra _
717+
(g.comp f).to_algebra g.to_algebra
718+
(@@is_scalar_tower.of_algebra_map_eq' _ _ _ f.to_algebra g.to_algebra (g.comp f).to_algebra rfl)
719+
hg hf
720+
634721
end finite_presentation
635722

636723
end ring_hom
@@ -727,6 +814,10 @@ lemma of_finite_type [is_noetherian_ring A] {f : A →ₐ[R] B} :
727814
f.finite_type ↔ f.finite_presentation :=
728815
ring_hom.finite_presentation.of_finite_type
729816

817+
lemma of_comp_finite_type (f : A →ₐ[R] B) {g : B →ₐ[R] C} (h : (g.comp f).finite_presentation)
818+
(h' : f.finite_type) : g.finite_presentation :=
819+
h.of_comp_finite_type _ h'
820+
730821
end finite_presentation
731822

732823
end alg_hom

0 commit comments

Comments
 (0)