Computing top intersections on Mbar_g,n
This worksheet demonstrates how to compute top intersections on Deligne-Mumford compactification of the moduli space of curves using Sage code written by Drew Johnson. A pdf description of the algorithms can be found in the BitBucket repository (see link below). If you have any questions or problems, or if you find the code useful, please contact the author by email .
Executing the Code
If you accessed this worksheet online, you are probably viewing a read-only version. If you would like to use the code yourself, you have the following options.
- You can create a free SageMath Cloud account if you don't have one. The code in the first block should load all of my code from the online repository. Either copy this entire worksheet to your account, or make a new worksheet and paste the first block in. Then, you should be good to go. If you don't have Sage installed on your local machine this is the option for you.
- If you prefer to load the code locally with a terminal-style sage session, you can download the source code from https://bitbucket.org/drew_j/top-intersections-on-mbar_g-n (click on "get source"). Extract the files and start command line Sage from the same directory. Typing load intersection_ui.py at the sage: prompt will load all the necessary files.
Acknowledgments
I worked on this project as a graduate student at Brigham Young University while being funded by the NSA grant of my adviser, Tyler Jarvis. Dr. Jarvis also answered many questions and pointed me to helpful resources during this project. The mathematical basis of the algorithms implemented here come from the paper accompanying Carel Faber's Maple code, and also from Stephanie Yang's write up about her Macaulay 2 code. The code computes the Witten tau function using the recursion of Liu and Xu.
Basic operation
You can use the space command to set the space you are working in. The first argument is the genus, and the last is the number of marked points. The space command does three things:
- It prints a list of classes and indexes for easy reference.
- It sets the defaut space. This will be the space that the code will work in if you don't specify one in the function calls.
- It injects the variables names into your namespace so you can use them to make polynomials.
The class Dg1m1 is the class corresponding to the reducible boundary divisor where one component has genus 1 and the marked point 1. The class irr corresponds to the class of the irreducible boundary divisor. The classes psi, ka, ch, and la represent psi, kappa, chern character, and lambda classes respectively.
Now we are ready to compute some things. You can type in a polynomial in the classes given by the space command:
Some more examples
Here are some of the intersection numbers from Faber's paper:
Options
You can suppress the helpful message that tells you what you are computing using the confirm keyword argument.Saving and loading
So far we have computed numbers from scratch. The program automatically saves any answers that it has computed in this session, including numbers computed in recursion steps. For example, if you computed the example la1^9 above, you probably noticed that it took a few seconds. If we compute it again, it will be really fast because the program just looks it up in a dictionary.To load a previously saved data file, use the following command: