Skip to content

[Merged by Bors] - feat: semisimple rings are Artinian#17557

Closed
alreadydone wants to merge 40 commits intomasterfrom
finite_semisimple_module
Closed

[Merged by Bors] - feat: semisimple rings are Artinian#17557
alreadydone wants to merge 40 commits intomasterfrom
finite_semisimple_module

Conversation

@alreadydone
Copy link
Copy Markdown
Contributor

@alreadydone alreadydone commented Oct 8, 2024

The main result IsSemisimpleModule.finite_tfae shows that for a semisimple module, Module.Finite R M ↔ IsNoetherian R M ↔ IsArtinian R M ↔ IsFiniteLength R M ↔ direct sum decomposition into finitely many simple modules (F25 in Chapter 28 of Lorenz's Algebra II). The instance from IsSemisimpleModule + Module.Finite to IsNoetherian is proven before and used in the proof, while the instance to IsArtinian is added after the proof. As a consequence, semisimple rings are Artinian.

Also add easy lemmas isNoetherian_range, LinearEquiv.isNoetherian_iff, isNoetherian_sup, isNoetherian_iSup (and Artinian counterparts) and IsSemisimpleModule.exists_setIndependent_sSup_simples_eq_top.


Open in Gitpod

@alreadydone alreadydone added the t-algebra Algebra (groups, rings, fields, etc) label Oct 8, 2024
@alreadydone alreadydone removed the merge-conflict The PR has a merge conflict with master, and needs manual merging. (this label is managed by a bot) label Oct 19, 2024
Copy link
Copy Markdown
Member

@jcommelin jcommelin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks 🎉

bors merge

@ghost ghost added the ready-to-merge This PR has been sent to bors. label Oct 21, 2024
mathlib-bors bot pushed a commit that referenced this pull request Oct 21, 2024
The main result `IsSemisimpleModule.finite_tfae` shows that for a semisimple module, `Module.Finite R M ↔ IsNoetherian R M ↔ IsArtinian R M ↔ IsFiniteLength R M ↔` direct sum decomposition into finitely many simple modules (F25 in Chapter 28 of Lorenz's *Algebra II*). The instance from IsSemisimpleModule + Module.Finite to IsNoetherian is proven before and used in the proof, while the instance to IsArtinian is added after the proof. As a consequence, semisimple rings are Artinian.

Also add easy lemmas `isNoetherian_range`, `LinearEquiv.isNoetherian_iff`, `isNoetherian_sup`, `isNoetherian_iSup` (and Artinian counterparts) and `IsSemisimpleModule.exists_setIndependent_sSup_simples_eq_top`.
@mattrobball
Copy link
Copy Markdown
Contributor

I'm not sure why there is not a test file @jcommelin

@mattrobball
Copy link
Copy Markdown
Contributor

I'd like to see a plan for one first

bors r-

@mathlib-bors
Copy link
Copy Markdown
Contributor

mathlib-bors bot commented Oct 21, 2024

Canceled.

@alreadydone
Copy link
Copy Markdown
Contributor Author

@mattrobball You can see in these search results plenty of occurrences (in 206 files) of using example locally to showcase what the instances can do. Are the examples in this PR really that special or important to warrant that they be put in a separate test file?

@alreadydone alreadydone removed the ready-to-merge This PR has been sent to bors. label Oct 21, 2024
@mattrobball
Copy link
Copy Markdown
Contributor

Yes, there are existing uses as such but we have already seen that often hide undesirable behavior and are often poorly motivated. I think they should all be moved/removed (and some have) but that is out of scope here. Inclusion of new examples should meet a higher bar for justification.

My rationale: Most of the examples I've seen are to demonstrate that instance synthesis succeeds. However, success is highly dependent on the imports. For the end user, who most likely will be working with additional imports, examples declared directly after the relevant instance declaration in the original file will not serve as a guarantee their code works as expected. For mathematically well-motived instances (as this one definitely is), we want to lock in that success of type class search throughout the whole library. This can only be done when all available instances are in scope.

Additionally, since examples add nothing to the environment they confuse anything, like a linter, that uses the environment. We don't want to keep adding to noshake.json for each of them, for example. (This is not the case here but still.)

TLDR: yes these instances searches are of sufficient importance that we want to make sure they keep working indefinitely. We also want to model best practices going forward.

@mattrobball
Copy link
Copy Markdown
Contributor

I appreciate your patience with me. I think the request is important enough relative to the effort required. Please let me know if there is anything I can do to help.

@alreadydone
Copy link
Copy Markdown
Contributor Author

alreadydone commented Oct 21, 2024

Thanks for the explanation. I'll add the tests in test/instances. Though I still have some doubts: it's possible that when importing the whole Mathlib, a declared instance itself may fail to synthesize (it might timeout, or fail due to some bad non-defeq instance introduced in between). Does it mean we should add every instance to the tests? Or is CI already checking every instance can be synthesized after importing Mathlib, somewhat like what the simpNF linter is doing to every simp lemma?

@mattrobball
Copy link
Copy Markdown
Contributor

There is no such check. I think we should do this mainly for mathematically-important instances.

If it fails with import Mathlib, then we can postpone and merge as is. But hopefully that is not the case.

@mattrobball
Copy link
Copy Markdown
Contributor

Thanks!

bors merge

@github-actions github-actions bot added the ready-to-merge This PR has been sent to bors. label Oct 21, 2024
mathlib-bors bot pushed a commit that referenced this pull request Oct 21, 2024
The main result `IsSemisimpleModule.finite_tfae` shows that for a semisimple module, `Module.Finite R M ↔ IsNoetherian R M ↔ IsArtinian R M ↔ IsFiniteLength R M ↔` direct sum decomposition into finitely many simple modules (F25 in Chapter 28 of Lorenz's *Algebra II*). The instance from IsSemisimpleModule + Module.Finite to IsNoetherian is proven before and used in the proof, while the instance to IsArtinian is added after the proof. As a consequence, semisimple rings are Artinian.

Also add easy lemmas `isNoetherian_range`, `LinearEquiv.isNoetherian_iff`, `isNoetherian_sup`, `isNoetherian_iSup` (and Artinian counterparts) and `IsSemisimpleModule.exists_setIndependent_sSup_simples_eq_top`.
@mathlib-bors
Copy link
Copy Markdown
Contributor

mathlib-bors bot commented Oct 21, 2024

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title feat: semisimple rings are Artinian [Merged by Bors] - feat: semisimple rings are Artinian Oct 21, 2024
@mathlib-bors mathlib-bors bot closed this Oct 21, 2024
@mathlib-bors mathlib-bors bot deleted the finite_semisimple_module branch October 21, 2024 17:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge This PR has been sent to bors. t-algebra Algebra (groups, rings, fields, etc)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants