-
Notifications
You must be signed in to change notification settings - Fork 1k
feat(RingTheory/Finiteness/Basic): add lemmas for restricting scalars #33980
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
feat(RingTheory/Finiteness/Basic): add lemmas for restricting scalars #33980
Conversation
PR summary e760ec41dbImport changes for modified filesNo significant changes to the import graph Import changes for all files
|
|
|
||
| variable {R A M : Type*} [Semiring A] [AddCommMonoid M] [Module A M] | ||
|
|
||
| theorem fg_restrictScalars_of_surjective [CommSemiring R] [Algebra R A] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like you are renaming Submodule.fg_restrictScalars here and defining a new Submodule.fg_restrictScalars at around line 414. To avoid confusion I suggest renaming your other new theorem to Submodule.FG.restrictScalars and adding a deprecation notice for this theorem:
@[deprecated (since := "2026-01-24")] alias fg_restrictScalars := fg_restrictScalars_of_surjective
| section RestrictScalars | ||
|
|
||
| variable {R A M : Type*} [Semiring A] [AddCommMonoid M] [Module A M] | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May as well refactor by having variable {S : Submodule A M} and changing N to S in fg_restrictScalars_of_surjective.
| variable {M : Type*} [AddCommMonoid M] [Module R M] | ||
| variable {A : Type*} [Semiring A] [Module R A] [Module A M] [IsScalarTower R A M] | ||
|
|
||
| theorem fg_restrictScalars [Module.Finite R A] {S : Submodule A M} (hS : S.FG) : |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
|
|
||
| section RestrictScalars | ||
|
|
||
| variable (R : Type*) [Semiring R] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps R could be made implicit?
| theorem span_submodule_fg_of_fg {S : Submodule R M} (hfg : S.FG) : | ||
| (span A S : Submodule A M).FG := by | ||
| obtain ⟨t, ht⟩ := hfg | ||
| use t; rw [← ht, Submodule.span_span_of_tower] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| theorem span_submodule_fg_of_fg {S : Submodule R M} (hfg : S.FG) : | |
| (span A S : Submodule A M).FG := by | |
| obtain ⟨t, ht⟩ := hfg | |
| use t; rw [← ht, Submodule.span_span_of_tower] | |
| theorem span_submodule_fg_of_fg {S : Submodule R M} (hS : S.FG) : | |
| (span A S : Submodule A M).FG := by | |
| obtain ⟨t, ht⟩ := hS | |
| use t | |
| rw [← ht, span_span_of_tower] |
| variable (R : Type*) [Semiring R] | ||
| variable {M : Type*} [AddCommMonoid M] [Module R M] | ||
| variable {A : Type*} [Semiring A] [Module R A] [Module A M] [IsScalarTower R A M] | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider having variable {S : Submodule R M}
| use X | ||
| exact (Submodule.restrictScalars_span R S h (X : Set M)).symm | ||
| exact (restrictScalars_span R A h (X : Set M)).symm |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| use X | |
| exact (Submodule.restrictScalars_span R S h (X : Set M)).symm | |
| exact (restrictScalars_span R A h (X : Set M)).symm | |
| exact ⟨X, (restrictScalars_span R A h _).symm⟩ |
| variable {R A M : Type*} [Semiring A] [AddCommMonoid M] [Module A M] | ||
|
|
||
| theorem fg_restrictScalars_of_surjective [CommSemiring R] [Algebra R A] | ||
| [Module R M] [IsScalarTower R A M] (N : Submodule A M) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like N could be implicit
| let g₁ := (IsScalarTower.toAlgHom R S A).toLinearMap | ||
| exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars (RingHom.ker g) hg hsur) hsur | ||
| exact Submodule.fg_ker_comp f₁ g₁ hf | ||
| (Submodule.fg_restrictScalars_of_surjective (RingHom.ker g) hg hsur) hsur |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR adds three lemmas that transfer
Submodule.FGacross restricting scalars from a semiringAto a semiringRunder the assumptionModule.Finite R A. This includesfg_restrictScalarswhich proves thatrestrictScalarspreservesFGfg_restrictScalars_iffas the iff version of the abovespan_submodule_fg_of_fgwhich proves that theA-span of anFGR-submodule isFG.The PR also contains the following changes to related lemmas:
fg_restrictScalarstofg_restrictScalars_of_surjectiveemphasizing the hypothesisFunction.Surjective (algebraMap R A)sections RestrictScalarsthat also contains the above lemma