MG: moment graph computations

MG is a collection of routines for computing with moment graphs and their cohomology and intersection cohomology.  It is written in Macaulay 2.  

What is a moment graph?
Summary of MG commands
An example run

Download the code (text file) right-click to save it on your computer

Acknowledgements:  the beginnings of this project were inspired by code written by Bill Rulla at the University of Georgia.  
This material is based upon work supported by the National Science Foundation under Grant No. DMS-0201823. Any opinions,
findings and conclusions or recomendations expressed in this material are those of the author(s) and do not necessarily reflect the
views of the National Science Foundation (NSF).

What is a moment graph?

If a manifold M has an action of a compact torus T for which the set of fixed points is discrete and the union of the one-dimensional orbits is two-dimensional, then the structure of these orbits can be encoded in a graph G, with vertices corresponding to fixed points and edges corresponding to families of circles ("balloons") joining the fixed points.  The  edges can be given an additional structure: the Lie algebra of the stabilizer of a point in a 1-dimensional orbit has codimension one, so its annihilator is a 1-d subspace of t*, the dual of the Lie algebra of T.  This can be thought of as giving a "direction" to the corresponding edge of G.  

If M is nice ("equivariantly formal"), many properties of M can be calculated from the graph G.  In particular, the T-equivariant cohomology and the ordinary cohomology are computable from G.  

Summary of MG commands.

MG creates two new types in Macaulay 2, MomentGraph and MomentGraphSheaf.  Objects of type MomentGraph are, not surprisingly, moment graphs.  They include a list of vertices and edges, as well as a direction attached to each edge.  This direction is an element of degree 1 in a polynomial ring which is also stored as part of the structure.

Creating a new moment graph.

There are three commands that produce a new moment graph.  Links take you to the place each command is used in the example run.
  1. BruhatGraph(Perm): Produces the moment graph of the Schubert variety represented by the permutation Perm, which should be represented as a list of the integers 1 to n without repeats.   

  2. getPoly(filename): loads data from a polymake file representing a polytope, and constructs the graph of the 1-skeleton. 

  3. reflectionGraph(R, v): Constructs the reflection graph from a reflection arrangement R and a vector v.  Vertices are all the points obtainable from v by reflecting through hyperplanes perpendicular to vectors of R.  Two vertices are joined by an edge if and only if they are mirror images across such a hyperplane.  This can be used to produce the moment graphs for complete homogeneous spaces (flag varieties).

    A reflection arrangement is a list of vectors, with the property that for any two vectors, reflecting the first in the hyperplane perpendicular to the second gives another member of the arrangement.  Note that  the code does not check that this property holds; if it doesn't, the results may be strange.  It's not necessary to type all the vectors in an arrangement: the command reflectionArrangement(L) completes a list of vectors to a reflection arrangement. (Note that most sets of vectors are not contained in a finite arrangement; this function will stop after finding 100 vectors.  This limit can be overridden).

    Note that we represent vectors in Qn  by lists of rational numbers like {1,0, -1/2}.    

Creating a sheaf on a moment graph

  1. constSheaf(G): returns the constant sheaf on G.  The global sections of this sheaf gives the equivariant cohomology of the graph, as a module over the base ring.  Eventually it may carry the complete ring structure. 

  2. ICSheaf(G): the intersection cohomology sheaf of G.  In order to get meaningful results, G must be the graph of a variety X satisfying the hypotheses of [BM].  In particular,  X must have a stratification by T-invariant cells, each of which contains a single T-fixed point.  Also, it is assumed that the vertices are ordered so the unions of the cells corresponding to the first k vertices is open in X for any k.  Graphs produced with BruhatGraph and reflectionGraph qualify, but graphs of polytopes may not (unless they are simple), and even then there is no guarantee polymake will put the vertices in the right order.

    ICSheaf(G, topVertex => v): produces the IC sheaf starting at vertex v, assigning 0 to all stalks which are not below v in the edge partial order.  The vertex v can be specified either by name or by its index number in the list of vertices (starting from 0!).

Getting information about a moment graph sheaf

  1. show(S): displays a summary of the data in S, including the module of global sections, its Poincare' polynomial, and the rank and degrees for the stalk module at each vertex.  Can also be used to display information about a moment graph.

  2. globalSections(S): the global sections module.  Can also be accessed directly from the hash table by: S.gs

  3. stalk(S, v):  give the stalk of S at the vertex v, which can be specified either by name or by its index number in the list of vertices (starting from 0!).

  4. restrictionMap(S, v): gives the restriction map from the global sections to the stalk at v.

  5. restrictionMap(S): gives the total restriction map to the direct sum of the stalks at all of the vertices.  restrictionMap(S)_{i}gives the ith basis vector of the global sections.

  6. Hom(S1, S2): calculates the module of homomorphisms from a sheaf S1 to S2.  They must be sheaves on the same graph.

An example run