# Software for computations in algebraic geometry

Because somehow I ended up with a degree in computer science people sometimes ask me how to do certain computations in algebra or algebraic geometry on a computer (not that I ever learnt such a thing in my computer science degree to be honest). In this blog post I try to give a summary of the tools (together with direct links to documentation, libraries, extra packages, ... so I never have to look for them again myself and don't forget to consider one when someone asks a question) that I am aware of for these computations, and which one is the most suited for which type of problems.

Of course, there is a big list on Wikipedia, but I restrict myself here to things related to algebra and algebraic geometry, and discuss my experiences, and give explicit links to interesting related documents.

Moreover, if you have a very specific problem, there might be someone who wrote specific code for it, not related to an existing computer algebra system. Google is your friend. I have found really nice C++ implementations for specific problems that were really helpful for me. Maybe I should compile a list of these things and put it as an actual page on my website... This blog post would be a good start.

## GAP

GAP, or Groups, Algorithms, Programming is mostly for computational group theory. It is a nice programming language (I used it mostly when doing finite geometry and combinatorics), and it comes with big collection of libraries and packages. All of the libraries, and most of the packages are for group theoretical things, but it might be useful if your problem in geometry is phrased in these terms. They have a nice documentation and a convenient index.

## Maxima

Maxima has its origins in the sixties (which makes it the oldest in this list I guess, see Wikipedia for more historical facts on other systems), and is mostly for symbolic and numerical computations. I haven't used it myself, but I think it deserves to be in this list. There's the documentation, and they have a list of other computer algebra software which is longer than I intend this list to be.

## PARI/GP

If you like esoteric programming languages: try this one, it's the weirdest syntax I've seen in a math programming language. If you are doing number theory this might be a good choice. I don't have much experience with it, but it was *insanely fast* when I used it to determine Galois groups. The documentation is only available as a pdf, but it contains an index, so make sure you search properly if you're looking for functionality, and then have some libraries / packages that might be useful.

## Singular

Another language with an off-putting syntax (but that truly seems to be a theme amongst algebra languages...) is Singular. Don't be intimated by the syntax, they have a really good manual containing many examples, and there is an index

They have some additional libraries, with some interesting examples being the algebraic geometry library (containing cool methods for studying singularities, I should take a look at these at some point) or the visualisation library (which I should definitely check out!) So make sure that you look closely at Singular, because it does more than you'd think (certainly more than I'd think).

## Magma

This one is the only in the list which is not free, but it deserves to be mentioned. First of all, the language never frustrated me. But more importantly, it is probably (besides Sage) the most complete. Just look at the documentation and index. I have used Magma for wildly different problems, and while it is not always the best tool around for your specific problem, the structure of the language and libraries makes me regret not having a Magma license at the moment.

## Macaulay2

This system is definitely the most geometric of them all: together with Magma (and Sage to a lesser extent) it is possible to do computations for schemes and sheaves which I wouldn't think are possible on a computer! I don't know why, but I've never been too happy about their documentation, and the language itself is not as fancy as e.g. Sage or Magma, but together with its long list of packages I really like using it.

## Sage

This is the best known computer algebra system nowadays, and also the easiest to learn because it is based on Python. It does many, many things, although for things like sheaf cohomology you'll have to look at other tools. One nice thing about version 6.3 of Sage is that there is now support for path algebras, which is really really cool.