Skip to content

Commit c8e5e59

Browse files
feat(RingTheory/Finiteness/Basic): add lemmas for restricting scalars (leanprover-community#33980)
This PR adds three lemmas that transfer `Submodule.FG` across restricting scalars from a semiring `A` to a semiring `R` under the assumption `Module.Finite R A` . This includes * `FG.restrictScalars` which proves that `restrictScalars` preserves `FG` * `FG.restrictScalars_iff` as the iff version of the above * `FG.span_submodule` which proves that the `A`-span of an `FG` `R`-submodule is `FG`. The PR also contains the following changes to related lemmas: * renaming `fg_restrictScalars` to `FG.restrictScalars_of_surjective` emphasizing the hypothesis `Function.Surjective (algebraMap R A)` * adding a `sections RestrictScalars` that also contains the above lemma * restructuring variables in the above section * changing some submodule / ring hypotheses to implicit Co-authored-by: Martin Winter <martin.winter.math@gmail.com>
1 parent c72ae9e commit c8e5e59

3 files changed

Lines changed: 48 additions & 17 deletions

File tree

Mathlib/RingTheory/Extension/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ lemma Cotangent.map_comp (f : Hom P P') (g : Hom P' P'') :
439439

440440
lemma Cotangent.finite (hP : P.ker.FG) :
441441
Module.Finite S P.Cotangent := by
442-
refine ⟨.of_restrictScalars (R := P.Ring) _ ?_⟩
442+
refine ⟨.of_restrictScalars (R := P.Ring) ?_⟩
443443
rw [Submodule.restrictScalars_top, ← LinearMap.range_eq_top.mpr Extension.Cotangent.mk_surjective,
444444
← Submodule.map_top]
445445
exact ((Submodule.fg_top P.ker).mpr hP).map _

Mathlib/RingTheory/Finiteness/Basic.lean

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -141,24 +141,31 @@ theorem fg_induction (R M : Type*) [Semiring R] [AddCommMonoid M] [Module R M]
141141
rw [Finset.coe_insert, Submodule.span_insert]
142142
exact h₂ _ _ (h₁ _) ih
143143

144-
theorem fg_restrictScalars {R S M : Type*} [CommSemiring R] [Semiring S] [Algebra R S]
145-
[AddCommMonoid M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
146-
(hfin : N.FG) (h : Function.Surjective (algebraMap R S)) :
147-
(Submodule.restrictScalars R N).FG := by
148-
obtain ⟨X, rfl⟩ := hfin
149-
use X
150-
exact (Submodule.restrictScalars_span R S h (X : Set M)).symm
151-
152-
lemma FG.of_restrictScalars (R) {A M} [Semiring R] [Semiring A] [AddCommMonoid M]
153-
[SMul R A] [Module R M] [Module A M] [IsScalarTower R A M] (S : Submodule A M)
144+
section RestrictScalars
145+
146+
variable {R A M : Type*} [Semiring A] [AddCommMonoid M] [Module A M]
147+
variable {S : Submodule A M}
148+
149+
theorem FG.restrictScalars_of_surjective [CommSemiring R] [Algebra R A] [Module R M]
150+
[IsScalarTower R A M] (hS : S.FG) (h : Function.Surjective (algebraMap R A)) :
151+
(restrictScalars R S).FG := by
152+
obtain ⟨s, rfl⟩ := hS
153+
exact ⟨s, .symm <| restrictScalars_span R A h _⟩
154+
155+
@[deprecated (since := "2026-01-24")]
156+
alias fg_restrictScalars := FG.restrictScalars_of_surjective
157+
158+
theorem FG.of_restrictScalars (R) [Semiring R] [Module R M] [SMul R A] [IsScalarTower R A M]
154159
(hS : (S.restrictScalars R).FG) : S.FG := by
155160
obtain ⟨s, e⟩ := hS
156-
refine ⟨s, Submodule.restrictScalars_injective R _ _ (le_antisymm ?_ ?_)⟩
157-
· change Submodule.span A s ≤ S
158-
have := Submodule.span_le.mp e.le
159-
rwa [Submodule.span_le]
161+
refine ⟨s, restrictScalars_injective R _ _ (le_antisymm ?_ ?_)⟩
162+
· change span A s ≤ S
163+
have := span_le.mp e.le
164+
rwa [span_le]
160165
· rw [← e]
161-
exact Submodule.span_le_restrictScalars _ _ _
166+
exact span_le_restrictScalars _ _ _
167+
168+
end RestrictScalars
162169

163170
theorem FG.stabilizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
164171
(H : iSup N = M') : ∃ n, M' = N n := by
@@ -407,6 +414,29 @@ instance finite_finset_sup {ι : Type*} (s : Finset ι) (S : ι → Submodule R
407414
intro S₁ hS₁ S₂ hS₂
408415
exact Submodule.finite_sup S₁ S₂
409416

417+
section RestrictScalars
418+
419+
variable {R : Type*} [Semiring R]
420+
variable {M : Type*} [AddCommMonoid M] [Module R M]
421+
variable {A : Type*} [Semiring A] [Module R A] [Module A M] [IsScalarTower R A M]
422+
variable {S : Submodule A M}
423+
424+
theorem FG.restrictScalars [Module.Finite R A] (hS : S.FG) : (S.restrictScalars R).FG := by
425+
rw [← Module.Finite.iff_fg] at *
426+
exact Module.Finite.trans A S
427+
428+
@[simp]
429+
theorem FG.restrictScalars_iff [Module.Finite R A] : (S.restrictScalars R).FG ↔ S.FG :=
430+
⟨of_restrictScalars R, restrictScalars⟩
431+
432+
/-- If a ring `R` is finite over a subring `S` then the `R`-span of an FG `S`-submodule is FG. -/
433+
protected theorem FG.span (hS : S.FG) : (span A (S : Set M)).FG := by
434+
obtain ⟨t, ht⟩ := hS
435+
use t
436+
rw [← ht, Submodule.span_span_of_tower]
437+
438+
end RestrictScalars
439+
410440
end Submodule
411441

412442
namespace RingHom

Mathlib/RingTheory/Finiteness/Ideal.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ theorem fg_ker_comp {R S A : Type*} [CommRing R] [CommRing S] [CommRing A] (f :
4444
letI : IsScalarTower R S A := IsScalarTower.of_algebraMap_eq fun _ => rfl
4545
let f₁ := Algebra.linearMap R S
4646
let g₁ := (IsScalarTower.toAlgHom R S A).toLinearMap
47-
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars (RingHom.ker g) hg hsur) hsur
47+
exact Submodule.fg_ker_comp f₁ g₁ hf
48+
(Submodule.FG.restrictScalars_of_surjective hg hsur) hsur
4849

4950
theorem exists_radical_pow_le_of_fg {R : Type*} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
5051
∃ n : ℕ, I.radical ^ n ≤ I := by

0 commit comments

Comments
 (0)