-
Notifications
You must be signed in to change notification settings - Fork 297
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(algebra/direct_sum): state what it means for a direct sum to be internal #7190
Conversation
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 need this concept for grading a ring by a module. Modulo the yaml comment this looks good to me.
Co-authored-by: Kevin Buzzard <k.buzzard@imperial.ac.uk>
/-- The `direct_sum` formed by a collection of `submodule`s of `M` is said to be internal if the | ||
canonical map `(⨁ i, A i) →ₗ[R] M` is bijective. -/ | ||
def submodule_is_internal {R M : Type*} | ||
[semiring R] [add_comm_monoid M] [semimodule R M] | ||
(A : ι → submodule R M) : Prop := | ||
function.bijective (to_module R ι M (λ i, (A i).subtype)) | ||
|
||
lemma submodule_is_internal.to_add_submonoid {R M : Type*} | ||
[semiring R] [add_comm_monoid M] [semimodule R M] (A : ι → submodule R M) : | ||
submodule_is_internal A ↔ add_submonoid_is_internal (λ i, (A i).to_add_submonoid) := | ||
iff.rfl | ||
|
||
lemma submodule_is_internal.to_add_subgroup {R M : Type*} | ||
[ring R] [add_comm_group M] [semimodule R M] (A : ι → submodule R M) : | ||
submodule_is_internal A ↔ add_subgroup_is_internal (λ i, (A i).to_add_subgroup) := | ||
iff.rfl |
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 figure I don't need to mention add_submonoid_is_internal
in the docstring of submodule_is_internal
, since doc-gen will immediately show the lemmas below it.
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 all looks good to me. I do think it would be worthwhile to add a def for the isomorphism between the (external) direct sum (⨁ i, A i)
and the Sup of the family A i
(as a subobject of the ambient object), given the is_internal
assumption.
(This could be left to a subsequent PR, if you would like.)
If we're going to provide isomorphisms, then I'd be inclined to provide a second structure in structure add_submonoid_grading {M : Type*} [decidable_eq ι] [add_comm_monoid M]
(A : ι → add_submonoid M) :=
(to_fun : M →+ (⨁ i, A i))
(left_inv : function.left_inverse (direct_sum.to_add_monoid (λ i, (A i).subtype) : (⨁ i, A i) →+ M) to_fun)
(right_inv : function.right_inverse (direct_sum.to_add_monoid (λ i, (A i).subtype) : (⨁ i, A i) →+ M) to_fun)
variables {M : Type*} [decidable_eq ι] [add_comm_monoid M] (A : ι → add_submonoid M) (g : add_submonoid_grading A)
def add_submonoid_grading.to_equiv : M ≃+ (⨁ i, A i) :=
{ to_fun := g.to_fun,
inv_fun := _,
left_inv := g.left_inv,
right_inv := g.right_inv }
lemma add_submonoid_grading.is_internal : add_submonoid_is_internal A := to_equiv.symm.bijective
/-- Noncomputably obtain a grading from a proof that a direct sum is internal, via equiv.of_bijective -/
noncomputable def add_submonoid_is_internal.to_grading (h : add_submonoid_is_internal A) : add_submonoid_grading A :=
{ to_fun := sorry, left_inv := sorry, right_inv := sorry} -- bijective has the API for this somewhere But I think we should leave that until we've worked out what the grading structure should look like for rings too. |
@eric-wieser So do I understand correctly that you prefer to leave the definitions of the isoms to a later PR which will also include the grading code above? If so then that sounds good to me! bors d+ |
✌️ eric-wieser can now approve this pull request. To approve and merge a pull request, simply reply with |
@eric-wieser ping? |
bors r+ |
…internal (#7190) The goal here is primarily to tick off the item in undergrad.yml. We'll want some theorems relating this statement to independence / spanning of the submodules, but I'll leave those for someone else to follow-up with. We end up needing three variants of this - one for each of add_submonoids, add_subgroups, and submodules.
Build failed (retrying...): |
…internal (#7190) The goal here is primarily to tick off the item in undergrad.yml. We'll want some theorems relating this statement to independence / spanning of the submodules, but I'll leave those for someone else to follow-up with. We end up needing three variants of this - one for each of add_submonoids, add_subgroups, and submodules.
Build failed: |
bors r+ |
…internal (#7190) The goal here is primarily to tick off the item in undergrad.yml. We'll want some theorems relating this statement to independence / spanning of the submodules, but I'll leave those for someone else to follow-up with. We end up needing three variants of this - one for each of add_submonoids, add_subgroups, and submodules.
Pull request successfully merged into master. Build succeeded: |
The goal here is primarily to tick off the item in undergrad.yml.
We'll want some theorems relating this statement to independence / spanning of the submodules, but I'll leave those for someone else to follow-up with.
We end up needing three variants of this - one for each of add_submonoids, add_subgroups, and submodules.