next | previous | forward | backward | up | top | index | toc | Macaulay2 website
ReesAlgebra :: PlaneCurveSingularities

PlaneCurveSingularities -- Using the Rees Algebra to resolve plane curve singularities

Description

The Rees Algebra of an ideal I appeared classically as the bihomogeneous coordinate ring of the blow up of the ideal I, used in resolution of singularities. Though the general case is still out of reach, we illustrate with some simple examples of plane curve singularities.

First the cusp in the affine plane

i1 : R = ZZ/32003[x,y]

o1 = R

o1 : PolynomialRing
i2 : cusp = ideal(x^2-y^3)

              3    2
o2 = ideal(- y  + x )

o2 : Ideal of R
i3 : mm = radical ideal singularLocus cusp

o3 = ideal (y, x)

o3 : Ideal of R

The cusp is singular at the maximal ideal (x,y), so we blow that up, and examine the ``total transform'', that is, the ideal generated by the x^2-y^3 in the Rees algebra.

i4 : B = first flattenRing reesAlgebra(mm)

o4 = B

o4 : QuotientRing

Application of first flattenRing serves to make B a quotient of the polynomial ring T in 4 variables; otherwise it would be a quotient of R[w_0,w_1], which Macaulay2 treats as a polynomial ring in 2 variables, and the calculation of the singular locus later on would be wrong.

i5 : vars B

o5 = | w_0 w_1 x y |

             1       4
o5 : Matrix B  <--- B
i6 : proj = map(B,R,{x,y})

o6 = map (B, R, {x, y})

o6 : RingMap B <--- R
i7 : totalTransform = proj cusp

              3    2
o7 = ideal(- y  + x )

o7 : Ideal of B
i8 : D = decompose totalTransform

                            3    2     2         2     2
o8 = {ideal (y, x), ideal (y  - x , w y  - w x, w y - w )}
                                     0      1    0     1

o8 : List
i9 : D/codim

o9 = {1, 1}

o9 : List

We see that the reduced preimage consists of two codimension 1 components, the `exceptional divisor', which is the pullback of the point we blew up, (x,y), and the `strict transform'. The two components meet in a double point in the 2 dimensional variety B \subset{} A^2\times P^1. We have to saturate with respect to the irrelevant ideal to understand what's going on.

i10 : irrelB = ideal(B_0,B_1)

o10 = ideal (w , w )
              0   1

o10 : Ideal of B
i11 : doublePoint = saturate(D_0+D_1, irrelB)

                    2
o11 = ideal (y, x, w )
                    1

o11 : Ideal of B
i12 : codim doublePoint

o12 = 2
i13 : degree doublePoint

o13 = 2

We can see the multiplicities of these components by comparing their degrees to the degrees of the reduced components

i14 : divisors = primaryDecomposition totalTransform

               2        2           3    2     2         2     2
o14 = {ideal (y , x*y, x ), ideal (y  - x , w y  - w x, w y - w )}
                                             0      1    0     1

o14 : List
i15 : strictTransform = divisors_0

              2        2
o15 = ideal (y , x*y, x )

o15 : Ideal of B
i16 : exceptional = divisors_1

              3    2     2         2     2
o16 = ideal (y  - x , w y  - w x, w y - w )
                       0      1    0     1

o16 : Ideal of B
i17 : divisors/(i-> degree i/degree radical i)

o17 = {2, 1}

o17 : List

That is, the exceptional component occurs with multiplicity 2 (in general we'd get the exceptional component with multiplicity equal to the multiplicity of the singular point we blew up.)

We next investigate the singularity of the strict transform. We want to see it as a curve in P^1 x A^2, that is, as an ideal of T = kk[w_0,w_1,x,y]

i18 : T = ring ideal B

o18 = T

o18 : PolynomialRing
i19 : irrelT  = ideal(w_0,w_1)

o19 = ideal (w , w )
              0   1

o19 : Ideal of T
i20 : sing = saturate(ideal singularLocus strictTransform, irrelT)

o20 = ideal (y, x)

o20 : Ideal of T

We see that the singular locus of the strict transform is empty; that is, the curve is smooth.

We could have made the computation in B as well:

i21 : jacobianMatrix = diff(vars B, transpose gens strictTransform)

o21 = {0, -2} | 0 0 0  2y |
      {0, -2} | 0 0 y  x  |
      {0, -2} | 0 0 2x 0  |

              3       4
o21 : Matrix B  <--- B
i22 : codim strictTransform

o22 = 1
i23 : jacobianIdeal  = strictTransform+ minors(1,jacobianMatrix)

              2        2
o23 = ideal (y , x*y, x , y, 2x, 2y, x)

o23 : Ideal of B
i24 : sing1 = saturate(jacobianIdeal, irrelB)

o24 = ideal (y, x)

o24 : Ideal of B

Next we look at the desingularization of a tacnode; it will take two blowups.

i25 : R = ZZ/32003[x,y]

o25 = R

o25 : PolynomialRing
i26 : tacnode = ideal(x^2-y^4)

               4    2
o26 = ideal(- y  + x )

o26 : Ideal of R
i27 : sing = ideal singularLocus tacnode

                4    2         3
o27 = ideal (- y  + x , 2x, -4y )

o27 : Ideal of R
i28 : mm = radical sing

o28 = ideal (y, x)

o28 : Ideal of R
i29 : B1 = first flattenRing reesAlgebra mm

o29 = B1

o29 : QuotientRing
i30 : proj1 = map(B1,R,{x,y})

o30 = map (B1, R, {x, y})

o30 : RingMap B1 <--- R
i31 : irrelB1 = ideal(w_0,w_1)

o31 = ideal (w , w )
              0   1

o31 : Ideal of B1
i32 : totalTransform1 = proj1 tacnode

               4    2
o32 = ideal(- y  + x )

o32 : Ideal of B1
i33 : netList (D1 = decompose totalTransform1)

      +------------------------+
o33 = |ideal (y, x)            |
      +------------------------+
      |        2               |
      |ideal (y  - x, w y - w )|
      |                0     1 |
      +------------------------+
      |        2               |
      |ideal (y  + x, w y + w )|
      |                0     1 |
      +------------------------+
i34 : strictTransform1 = saturate(totalTransform1,proj1 mm )

              4    2     3         2 2    2
o34 = ideal (y  - x , w y  - w x, w y  - w )
                       0      1    0      1

o34 : Ideal of B1

Here proj1 mm is the ideal of the exceptional divisor. The strict transform is, by definition, obtained by saturating it away, The strict transform of the tacnode is not yet smooth: it consists of two smooth branches, meeting transversely at a point:

i35 : strictTransform1 == intersect(D1_1,D1_2)

o35 = true
i36 : degree (D1_1+D1_2)

o36 = 1

We compute the singular point of the strict transform:

i37 : mm1 = sub(radical ideal singularLocus strictTransform1, B1)

o37 = ideal (y, x, w )
                    1

o37 : Ideal of B1

...and blow up B1, getting a variety in P^2 x P^1 x A^2

i38 : B2 = first flattenRing reesAlgebra(mm1, Variable => p)

o38 = B2

o38 : QuotientRing
i39 : vars B2

o39 = | p_0 p_1 p_2 w_0 w_1 x y |

               1        7
o39 : Matrix B2  <--- B2
i40 : proj2 = map(B2,B1,{w_0,w_1,x,y})

o40 = map (B2, B1, {w , w , x, y})
                     0   1

o40 : RingMap B2 <--- B1
i41 : irrelB2 = ideal(p_0,p_1,p_2)

o41 = ideal (p , p , p )
              0   1   2

o41 : Ideal of B2
i42 : irrelTot = (proj2 irrelB1) *irrelB2

o42 = ideal (p w , p y, p w , p y, p x, p w )
              0 0   2    2 0   2    2    2 1

o42 : Ideal of B2
i43 : totalTransform2 = saturate(proj2 proj1 tacnode, irrelTot)

              4    2       3    2    2 2 2    4
o43 = ideal (y  - x , p p y  - p x, p p y  - p )
                       0 1      1    0 1      1

o43 : Ideal of B2
i44 : exceptional2 = saturate(proj2 proj1 mm, irrelTot)

o44 = ideal (y, x, p )
                    1

o44 : Ideal of B2
i45 : netList(D2 = decompose totalTransform2)

      +---------------------------------------------+
o45 = |ideal (y, x, w , p )                         |
      |              1   1                          |
      +---------------------------------------------+
      |ideal (y, x, p , p )                         |
      |              1   0                          |
      +---------------------------------------------+
      |        2                                    |
      |ideal (y  - x, w y - w , p y - p , p w  - p )|
      |                0     1   0     1   0 0    2 |
      +---------------------------------------------+
      |        2                                    |
      |ideal (y  + x, w y + w , p y + p , p w  + p )|
      |                0     1   0     1   0 0    2 |
      +---------------------------------------------+
i46 : netList(E2 = decompose exceptional2)

      +--------------------+
o46 = |ideal (y, x, w , p )|
      |              1   1 |
      +--------------------+
      |ideal (y, x, p , p )|
      |              1   0 |
      +--------------------+
i47 : strictTransform2 = saturate(totalTransform2, exceptional2)

              4    2     3         2 2    2     3             2           2 
o47 = ideal (y  - x , w y  - w x, w y  - w , p y  - p x, p w y  - p x, p w y
                       0      1    0      1   0      1    0 0      2    0 0 
      -----------------------------------------------------------------------
               2 2    2   2             2 2    2
      - p w , p y  - p , p w y - p p , p w  - p )
         2 1   0      1   0 0     1 2   0 0    2

o47 : Ideal of B2

We compute the singular locus once again:

i48 : time sing2 = ideal singularLocus strictTransform2;
     -- used 1.16344 seconds

                 ZZ
o48 : Ideal of -----[p ..p , w ..w , x..y]
               32003  0   2   0   1
i49 : saturate(sing2, sub(irrelTot, ring sing2))

o49 = ideal 1

                 ZZ
o49 : Ideal of -----[p ..p , w ..w , x..y]
               32003  0   2   0   1

The answer, ideal 1 shows that the second blowup desingularizes the tacnode.

It is not necessary to repeatedly blow up closed points: there is always a single ideal that can be blown up to desingularize (Hartshorne, Algebraic Geometry,Thm II.7.17). In this case, blowing-up (x,y^2) desingularizes the tacnode x^2-y^4 in a single step.

i50 : R = ZZ/32003[x,y];
i51 : tacnode = ideal(x^2-y^4);

o51 : Ideal of R
i52 : mm = ideal(x,y^2);

o52 : Ideal of R
i53 : B = first flattenRing reesAlgebra mm;
i54 : irrelB = ideal(w_0,w_1);

o54 : Ideal of B
i55 : proj = map(B,R,{x,y});

o55 : RingMap B <--- R
i56 : totalTransform = proj tacnode

               4    2
o56 = ideal(- y  + x )

o56 : Ideal of B
i57 : netList (D = decompose totalTransform)

      +-----------------------+
o57 = |ideal (y, x)           |
      +-----------------------+
      |        2              |
      |ideal (y  - x, w  - w )|
      |                0    1 |
      +-----------------------+
      |        2              |
      |ideal (y  + x, w  + w )|
      |                0    1 |
      +-----------------------+
i58 : exceptional = proj mm

                 2
o58 = ideal (x, y )

o58 : Ideal of B
i59 : strictTransform = saturate(totalTransform, exceptional);

o59 : Ideal of B
i60 : netList decompose strictTransform

      +-----------------------+
      |        2              |
o60 = |ideal (y  - x, w  - w )|
      |                0    1 |
      +-----------------------+
      |        2              |
      |ideal (y  + x, w  + w )|
      |                0    1 |
      +-----------------------+
i61 : sing0 = sub(ideal singularLocus strictTransform, B);

o61 : Ideal of B
i62 : sing = saturate(sing0,irrelB)

o62 = ideal 1

o62 : Ideal of B

So this single blowup is already nonsingular.

For the programmer

The object PlaneCurveSingularities is a symbol.