next | previous | forward | backward | up | top | index | toc | Macaulay2 website
Matroids :: Working with Chow rings of matroids

Working with Chow rings of matroids

This documentation page contains various tips for effectively working with Chow rings of matroids within this package. We take the graphic matroid of the complete graph on 4 vertices as the running example:

i1 : M = matroid completeGraph 4

o1 = a matroid of rank 3 on 6 elements

o1 : Matroid
i2 : I = idealChowRing M;

o2 : Ideal of QQ[x   , x   , x   , x   , x   , x   , x      , x      , x      , x         , x         , x         , x         ]
                  {5}   {4}   {3}   {2}   {1}   {0}   {0, 5}   {1, 4}   {2, 3}   {3, 4, 5}   {1, 2, 5}   {0, 2, 4}   {0, 1, 3}

As seen from above, the output of idealChowRing is an Ideal, rather than a Ring. One can get the ambient polynomial ring, as well as the associated quotient ring:

i3 : R = ring I

o3 = R

o3 : PolynomialRing
i4 : S = R/I

o4 = S

o4 : QuotientRing

Next, one often wants to access and perform computations with elements in the quotient ring. The variables in the ambient ring of the ideal of the Chow ring are indexed by flats of the matroid, which retains useful information but makes the variables themselves difficult to access. However, as with any ring in Macaulay2, one can always access variables using subscripts:

i5 : R_0

o5 = x
      {5}

o5 : R
i6 : S_1

o6 = x    + x       - x       - x          + x
      {0}    {0, 5}    {1, 4}    {3, 4, 5}    {0, 1, 3}

o6 : S
i7 : S_5*S_6

       2
o7 = -x
       {0, 1, 3}

o7 : S

Notice that elements of $S$ are already rewritten in the normal form modulo the ideal of the Chow ring.

One can access the flat corresponding to a given variable as follows:

i8 : R_7

o8 = x
      {1, 4}

o8 : R
i9 : last baseName R_7

o9 = {1, 4}

o9 : List

It is also possible to access variables via their flats by creating an auxiliary HashTable:

i10 : chowVars = hashTable apply(#gens R, i -> last baseName R_i => S_i)

o10 = HashTable{{0, 1, 3} => x                                                 }
                              {0, 1, 3}
                {0, 2, 4} => x
                              {0, 2, 4}
                {0, 5} => x
                           {0, 5}
                {0} => x
                        {0}
                {1, 2, 5} => x
                              {1, 2, 5}
                {1, 4} => x
                           {1, 4}
                {1} => x    + x       - x       - x          + x
                        {0}    {0, 5}    {1, 4}    {1, 2, 5}    {0, 2, 4}
                {2, 3} => x
                           {2, 3}
                {2} => x    + x       - x       - x          + x
                        {0}    {0, 5}    {2, 3}    {1, 2, 5}    {0, 1, 3}
                {3, 4, 5} => x
                              {3, 4, 5}
                {3} => x    + x       - x       - x          + x
                        {0}    {0, 5}    {2, 3}    {3, 4, 5}    {0, 2, 4}
                {4} => x    + x       - x       - x          + x
                        {0}    {0, 5}    {1, 4}    {3, 4, 5}    {0, 1, 3}
                {5} => x    - x          - x          + x          + x
                        {0}    {3, 4, 5}    {1, 2, 5}    {0, 2, 4}    {0, 1, 3}

o10 : HashTable
i11 : chowVars#{5} * chowVars#{0,5}

        2
o11 = -x
        {0, 1, 3}

o11 : S

See also