SymPy Group Theory (GSoC 2017) gsoc, sympy, computational group theory

The plan

This blog will follow the progress of my GSoC 2017 project for SymPy. My primary goal is to implement group homomorphisms and set it up in such a way that certain finite presentation groups (implemented as an FpGroup class in SymPy) could be considered as permutation groups via an isomorphism. That would be good because SymPy already has many group-theoretic algorithms implemented for perm groups. To get this to work, I will also need to implement rewriting systems for FpGroups. You can see my application for details.

This post is a revised timeline for the project. I am currently in the middle of a term at uni and I’m going to have exams at the end of it: that’s 12-21 June (with 3 exam-free days in that period). For that reason I won’t be fully productive until 21 June but I’ll do my best (and certainly will catch up afterwards). As such, I think I should do a bit of coding before 30 May. I’ll start with some functionality unrelated to homomorphisms, as explained in my application. My current plan until the end of the First Evaluation period (26-30 June) is as follows:

  • By 30 May: Add a .subgroup() method and a .parent attribute to FpGroups and PermutationGroups. Probably make some improvements in the Reidemeister-Schreier elimination techniques. Submit a PR.

  • 31 May - 11 June: Implement better checks for infinite FpGroups. That will include the abelian_invariants function somewhere in the rings module (I’ll do it for integers unless there is an obvious way to make the same algorithm work for general rings) and a search for a finite cyclic subgroup (which might not terminate but it’s better to give it a try since if a group is infinite, this might works but coset_enumeration is unlikely to terminate). Create a PR by the end of it if it’s finished.

  • 12-25 June My exams start. I’ll start writing the GroupHomomorphism class and its functions with the assumption that rewriting systems and other things I might need are already implemented (which I will actually do later on). I’ll also start writing my evaluation at the end of this period.