Hi Travis:
Thanks for your kind advice! I did spend some time studying the topics you afore mentioned, but for the moment I'd like to pursue the "commutative semiring" topic as it aligns with my interests the most currently. I'm not sure if one's allowed to put in 2 different proposals for the same organization. If permitted, I might look into the lie group on manifolds topic.
So here's what I've accomplished in the past few days:
1. prepared the development platform (wsl on windows in my case) and set up sage locally on my machine
2. acquainted myself with more documentation and relevant codes in sage repo
3. quick review on linear algebra and abstract algebra
4. created my first PR on sage repo, though far from completion
And here's my current thinking on the project itself:
To allow for linear algebra over commutative semirings, what we need is a new class under MatrixSpace that supports the operations, and a new matrix class in matrix. The allowed operations are limited to only matrix.mul, matrix.add, and scalar multiplications due to semiring properties. So, the outline of my project can break into 5 parts:
1. Create 2 new classes under MatrixSpace and Matrix. The valid (defined) operations are mainly mul, add, and scalar mul. My current thought on subtraction is just to raise an error when subtraction performed on known semiring.
2. Check for implementation of other properties & methods , especially those that may employ subtraction or additive inverses. e.g. "inverse" "determinant". Make sure related methods perform well under semirings, or raise errors when necessary.
3. Tropical semiring, a special class of semiring already defined in the sagemath repo, can serve as a "proof-of-concept" in early stages of the implementation and can be tested against the new classes. Other common semirings like boolean rings and NonNegativeIntegers (implemented too in sage already) can also serve as tests.
4. Provide sagemath standard documentation on the newly implemented class. Add tests as well.
5. Possible future work: performance optimization, check for compatibility with other existing classes, etc.
This is a naive outline of the milestones/timeline for my project. Please let me know if I'm on the right track here or I'm missing significant information on some aspects.
Also, if I'm to discuss other details in my proposal, do I keep posting here on the public channel, or do I message you privately?
Regards
Henry