-
Notifications
You must be signed in to change notification settings - Fork 299
[Merged by Bors] - feat(linear_algebra): submodules of f.g. free modules are free #6178
Conversation
A free `R`-module `M` is a module with a basis over `R`, | ||
equivalently it is an `R`-module linearly equivalent to `ι →₀ R` for some `ι`. |
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.
Is it worth adding abbreviation free_module := ι →₀ R
to this file, just so that people using doc search find 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.
I don't think this file actually proves anything for ι →₀ R
itself, only indirectly via is_basis
. (Spoiler alert: I'm even experimenting with redefining a basis to be the linear equivalence with ι →₀ R
.)
Moves the theorem on division rings `smul_eq_zero` to a typeclass `no_zero_smul_divisors` with instances for the previously existing cases. The motivation for this change is that #6178 added another `smul_eq_zero`, which could be captured neatly as an instance of the typeclass. I didn't spend a lot of time yet on figuring out all the necessary instances, first let's see whether this compiles.
fd41f78
to
93ea342
Compare
Moves the theorem on division rings `smul_eq_zero` to a typeclass `no_zero_smul_divisors` with instances for the previously existing cases. The motivation for this change is that #6178 added another `smul_eq_zero`, which could be captured neatly as an instance of the typeclass. I didn't spend a lot of time yet on figuring out all the necessary instances, first let's see whether this compiles. Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
Moves the theorem on division rings `smul_eq_zero` to a typeclass `no_zero_smul_divisors` with instances for the previously existing cases. The motivation for this change is that #6178 added another `smul_eq_zero`, which could be captured neatly as an instance of the typeclass. I didn't spend a lot of time yet on figuring out all the necessary instances, first let's see whether this compiles. Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
🎉 Great news! Looks like all the dependencies have been resolved: 💡 To add or remove a dependency please update this issue/PR description. Brought to you by Dependent Issues (:robot: ). Happy coding! |
open submodule.is_principal | ||
|
||
lemma eq_bot_of_rank_eq_zero [no_zero_divisors R] (hb : is_basis R b) (N : submodule R M) | ||
(rank_eq : ∀ {m : ℕ} (v : fin m → N), |
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.
Does it make sense to have a similar lemma for fintype
s instead of only fin 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.
It's a bit awkward because the condition would look like
(rank_eq : ∀ {ι : Type*} {ft : fintype ι} (v : ι → N),
linear_independent R (coe ∘ v : ι → M) → @fintype.card ι ft = 0) :
and the counterexample becomes fintype.card (ulift (fin 1)) ≠ 0
instead of just 1 ≠ 0
. I'll add a version for finset N
s, let me know if you still want a fintype
version.
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.
(Also, using fin
works well with the condition of submodule.induction_on_rank_aux
. I recall trying to state that with finset
s instead and it became a mess of coe
s, erase
s and insert
s.)
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.
Bah, I can't figure out how to turn sum_eq : ∑ (i : ↥↑{⟨x, hx⟩}), g i • ↑i = 0,
into g ⟨⟨x, hx⟩, _⟩ = 0
and it's almost dinner time. Let me know if you still want a different variant, I'll take a fresh look at it tomorrow.
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.
Ooh well, we can always add it later. It's probably useful to have both variants.
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
This PR proves the first half of the structure theorem for modules over a PID: if `R` is a principal ideal domain and `M` an `R`-module which is free and finitely generated (expressed by `is_basis R (b : ι → M)`, for a `[fintype ι]`), then all submodules of `M` are also free and finitely generated. This result requires some lemmas about the rank of (free) modules (which in that case is basically the same as `fintype.card ι`). If `M` were a vector space, this could just be expressed as `findim R M`, but it isn't necessarily, so it can't be.
Pull request successfully merged into master. Build succeeded: |
This PR proves the first half of the structure theorem for modules over a PID: if `R` is a principal ideal domain and `M` an `R`-module which is free and finitely generated (expressed by `is_basis R (b : ι → M)`, for a `[fintype ι]`), then all submodules of `M` are also free and finitely generated. This result requires some lemmas about the rank of (free) modules (which in that case is basically the same as `fintype.card ι`). If `M` were a vector space, this could just be expressed as `findim R M`, but it isn't necessarily, so it can't be.
Moves the theorem on division rings `smul_eq_zero` to a typeclass `no_zero_smul_divisors` with instances for the previously existing cases. The motivation for this change is that #6178 added another `smul_eq_zero`, which could be captured neatly as an instance of the typeclass. I didn't spend a lot of time yet on figuring out all the necessary instances, first let's see whether this compiles. Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
This PR proves the first half of the structure theorem for modules over a PID: if `R` is a principal ideal domain and `M` an `R`-module which is free and finitely generated (expressed by `is_basis R (b : ι → M)`, for a `[fintype ι]`), then all submodules of `M` are also free and finitely generated. This result requires some lemmas about the rank of (free) modules (which in that case is basically the same as `fintype.card ι`). If `M` were a vector space, this could just be expressed as `findim R M`, but it isn't necessarily, so it can't be.
This PR proves the first half of the structure theorem for modules over a PID: if
R
is a principal ideal domain andM
anR
-module which is free and finitely generated (expressed byis_basis R (b : ι → M)
, for a[fintype ι]
), then all submodules ofM
are also free and finitely generated.This result requires some lemmas about the rank of (free) modules (which in that case is basically the same as
fintype.card ι
). IfM
were a vector space, this could just be expressed asfindim R M
, but it isn't necessarily, so it can't be.smul_eq_zero
#6199