Macaulay2 » Documentation
Packages » Book3264Examples > Intersection Theory Section 4.1
next | previous | forward | backward | up | index | toc

Intersection Theory Section 4.1 -- The coordinate ring of the Grassmannian

Subsection 4.1.1

We can use Macaulay2 to build the coordinate ring of $G(k,n)$ using the Plücker embedding. Exercise 4.4 is the simplest interesting case, $G(2,4) = {\mathbb G}(1,3)$. We'll start there before writing more general code for this.

Exercise 4.4:

i1 : kk = ZZ/32003 --Our base field

o1 = kk

o1 : QuotientRing
i2 : R = kk[x_1 .. x_8]

o2 = R

o2 : PolynomialRing
i3 : M = genericMatrix(R,x_1,2,4) -- A generic 2x4 matrix in the x_i

o3 = | x_1 x_3 x_5 x_7 |
     | x_2 x_4 x_6 x_8 |

             2      4
o3 : Matrix R  <-- R
i4 : I = minors(2,M) -- The ideal of 2x2 minors of M

o4 = ideal (- x x  + x x , - x x  + x x , - x x  + x x , - x x  + x x , -
               2 3    1 4     2 5    1 6     4 5    3 6     2 7    1 8   
     ------------------------------------------------------------------------
     x x  + x x , - x x  + x x )
      4 7    3 8     6 7    5 8

o4 : Ideal of R
i5 : P5 = kk[p_0 .. p_5] -- The coordinate ring of PP^5

o5 = P5

o5 : PolynomialRing
i6 : f = map(R,P5, gens I) -- The Plücker map for GG(1,3)

o6 = map (R, P5, {- x x  + x x , - x x  + x x , - x x  + x x , - x x  + x x , - x x  + x x , - x x  + x x })
                     2 3    1 4     2 5    1 6     4 5    3 6     2 7    1 8     4 7    3 8     6 7    5 8

o6 : RingMap R <-- P5
i7 : J = saturate ker f -- The ideal of GG(1,3) in PP^3

o7 = ideal(p p  - p p  + p p )
            2 3    1 4    0 5

o7 : Ideal of P5

We see that the ideal $J$ of ${\mathbb G}(1,3)$ in ${\mathbb P}^5$ is indeed generated by the single relation given in the text.

More generally, we can build $G(k,n)$ in its Plücker embedding for any $n$ and $k$:

i8 : kk = ZZ/32003

o8 = kk

o8 : QuotientRing
i9 : pluckerIdeal = (k,n) -> (
       assert (k <= n);
       N := k*n; --number of variables in our generic matrix
       R := kk[x_1 .. x_N];
       M := genericMatrix(R,x_1,k,n); --the generic k-by-n matrix
       s := binomial(n,k) - 1; --the dimension of PP(Wedge^k(kk^n))
       Ps = kk[p_0 .. p_s];
       f := map(R,Ps, gens minors(k,M)); --the Plücker map
       J = saturate ker f) --the kernel of the Plücker map is the ideal we want

o9 = pluckerIdeal

o9 : FunctionClosure

Now we can do Exercise 4.4 in one line:

i10 : pluckerIdeal(2,4)

o10 = ideal(p p  - p p  + p p )
             2 3    1 4    0 5

o10 : Ideal of Ps

The reader is invited to try running pluckerIdeal(4,7). On our machine, this computation had not terminated after 15 minutes of runtime.

We can do a little better by using the built-in function Grassmannian, which computes the Plücker ideal in a more efficient way:

i11 : Grassmannian(1,4)

o11 = ideal (p   p    - p   p    + p   p   , p   p    - p   p    + p   p   ,
              2,3 1,4    1,3 2,4    1,2 3,4   2,3 0,4    0,3 2,4    0,2 3,4 
      -----------------------------------------------------------------------
      p   p    - p   p    + p   p   , p   p    - p   p    + p   p   ,
       1,3 0,4    0,3 1,4    0,1 3,4   1,2 0,4    0,2 1,4    0,1 2,4 
      -----------------------------------------------------------------------
      p   p    - p   p    + p   p   )
       1,2 0,3    0,2 1,3    0,1 2,3

o11 : Ideal of ZZ[p   ..p   , p   , p   , p   , p   , p   , p   , p   , p   ]
                   0,1   0,2   1,2   0,3   1,3   2,3   0,4   1,4   2,4   3,4

The reader should try running Grassmannian(4,7) (which runs very quickly) to see just how large this ideal is. Running Grasmannian(4,10), on the other hand, is likely to never terminate.

Given how large these rings are and how difficult it is to compute in them, we need to simplify our computational system if we want to get answers to harder questions.

Subsection 4.1.3

It is possible to use Macaulay2 to build the universal sub- and quotient- bundles of the Grassmannian using explicit equations. However, as above, computations very quickly become intractable. We need some simplifications if we hope to compute anything. Schubert2 makes two major simplifications that allow us to do intersection theory with computers:

1) Varieties are replaced by their Chow rings 2) Bundles are replaced by their (total) Chern classes (see Ch. 5)

Here is Schubert code that will build the Grassmannian and its universal sub- and quotient bundles.

i12 : grass = (k,n) -> flagBundle({k,n-k}) --In Schubert, we build Grassmannians as special cases

o12 = grass

o12 : FunctionClosure
i13 : G = grass(2,4) -- Our favorite GG(1,3)

o13 = G

o13 : a flag bundle with subquotient ranks {2:2}
i14 : (S,Q) = G.Bundles -- S is the universal subbundle, Q is the universal quotient bundle

o14 = (S, Q)

o14 : Sequence
i15 : S -- Schubert tells us that S is an abstract sheaf of rank 2

o15 = S

o15 : an abstract sheaf of rank 2 on G
i16 : Q -- And so is Q.

o16 = Q

o16 : an abstract sheaf of rank 2 on G