-
Notifications
You must be signed in to change notification settings - Fork 382
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
[Merged by Bors] - feat(RingTheory/LocalRing/Module): Finitely presented flat modules over local rings are free. #14375
Conversation
erdOne
commented
Jul 3, 2024
…er local rings are free.
PR summary 812755553cImport changes for modified filesNo significant changes to the import graph Import changes for all files
|
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.
I have read the first 200 lines of Module.lean
up to the declaration Module.free_of_lTensor_residueField_injective
@@ -419,6 +419,16 @@ theorem TensorProduct.map_ker : | |||
|
|||
variable (M) | |||
|
|||
variable (R) in |
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.
Any specific reason for putting R
as a localized variable and leaving S
inside the statement? What about having variable (R S) in
before the theorem?
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.
variable (R) in
makes the variable explicit, but there is not a global variable {S}
living around.
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.
I agree, but variable (R S)
has the same effect... Not very important, at any rate.
Co-authored-by: Filippo A. E. Nuccio <[email protected]>
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.
Thanks so much for all the work!
rw [← LinearMap.lTensor_comp, hl, LinearMap.lTensor_id] | ||
exact Function.HasLeftInverse.injective ⟨_, LinearMap.congr_fun this⟩ | ||
· intro h | ||
-- By the lemma above, `k ⊗ l` injective => `N ⧸ l(M)` free. |
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.
Can you rather refer to the name of the declaration instead of "lemma above"?
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 is directly on the next line though.
I've changed the wording a bit but I'll include the lemma name if you still think it's better to do so.
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.
I think so, because in the future people might move things around and it won't be "above" anymore (and given the lack of attention that is normally taken at the doc, it is likely they would forget to update).
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.
To clarify, the current wording is
-- By the a previously proved lemma, `k ⊗ l` injective => `N ⧸ l(M)` free.
have := Module.free_of_lTensor_residueField_injective l (LinearMap.range l).mkQ
And you suggest
-- By `Module.free_of_lTensor_residueField_injective`, `k ⊗ l` injective => `N ⧸ l(M)` free.
have := Module.free_of_lTensor_residueField_injective l (LinearMap.range l).mkQ
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.
Yes, thanks!
maintainer merge |
🚀 Pull request has been placed on the maintainer queue by faenuccio. |
Thanks for the swift review! |
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.
Thanks 🎉
bors merge
rw [(LinearMap.exact_subtype_ker_map i).linearMap_comp_eq_zero] | ||
simp only [LinearMap.lTensor_zero, LinearMap.zero_apply, map_zero] | ||
|
||
theorem free_of_flat_of_localRing [Module.FinitePresentation R P] [Module.Flat R P] : |
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.
I think this is true for any finite module, maybe we can add a TODO (the proof is much harder IIRC).
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.
We're actually not that far away. We already have the equational criterion of flatness and finite flat = free is a (relatively) easy application of that. Anyways I added a TODO.
Canceled. |
bors d+ |
✌️ erdOne can now approve this pull request. To approve and merge a pull request, simply reply with |
bors merge |
…er local rings are free. (#14375) Co-authored-by: Andrew Yang <[email protected]>
Pull request successfully merged into master. Build succeeded: |