Due Friday, March 15, 2002

[1] Let R = k[x1, ..., xn] and let Rd denote the subset of all polynomials in R of degree d or less, including 0. Now let S = k[x0, ..., xn] and let Sd denote the subset of all homogeneous polynomials in S of degree d, including 0. Note that both Rd and Sd are k vector spaces. (Part (b) is optional; it's really just for those people who haven't seen "stars and bars" before.)
• (a) Show that dimkRd = dimkSd.
• (b) Show that dimkSd is equal to the binomial coefficient "n+d choose d". [Hint: count the number of monomials of degree d by writing each monomial as a product, not using exponents. For example, say n = 3, and consider x02x2x33 to be x0x0x2x3x3x3. But you can indicate the same information by replacing the variables by *'s, and separating the different variables by |'s. So x0x0x2x3x3x3 becomes **||*|***, meaning two x0's, no x1's, one x2, and three x3's.]
[2] In this problem, assume F is in k[x,y], where k is the complex numbers.
• (a) Find each singular point p of F = x^2*y - y^2 + 2*y - 1, and for each one, find its multiplicity mp(F) and all tangent lines at p. Check your answer using Macaulay2.
• (b) Use Macaulay2 to find the singular points of F = x^4 + 2*x^2*y^2 + 2*x^3 + 2*x*y^2 + x^2 + y^2. For each singular point p, find its multiplicity mp(F) and all tangent lines at p.
• Notes: Recall that a point p is singular if and only if p is in V(F, Fx, Fy), where Fx and Fy represent partial derivatives with respect to x and y, resp. In Macaulay2, for any ideal I, we can find V(I) via the command decompose I. You can also use Macaulay2 to simplify substitutions: given F(x,y) = x^2 - y^3, to find F(x+1,y-3), simply input (x+1)^2 - (y-3)^3, as in the following example:
```                                                   3    2     2
i11 : (x+1)^2 - (y-3)^3              o11 = - y  + x  + 9y  + 2x - 27y + 28
```
[3] Calculate the intersection multiplicity I(p, F^G) [note: I'm using ^ to denote intersection] for each F and G below. In each case, assume p = (0,0). Check your answers with Macaulay2.
• (a) F = y^2-x^5, G = y^2*x^2-x^5-y^5
• (b) F = y^2-x^3, G = (y^2+x^2)^2+3*x^2*y-y^3
• (c) F = y^4+x^4-x^3 G = y^3*x^2+y^5+x^2
Here are some useful Macaulay2 routines to compute intersection multiplicities. Assuming R = k[x,y] is your ring, P = I(p) is the ideal of a point p in the plane, and I = ideal(f,g) for some polynomials f and g in R which have no common factor vanishing at p, then mylocalize(I,P,R) gives the ideal Qi corresponding to p in the minimal primary decomposition I = Q1^...^Qr of I. Thus I(p, F^G) = dimkR/Qi, as discussed in class, but the Macaulay2 command for "dim" in this case is degree so I(p, F^G) = degree( R/mylocalize(I,P,R) ).

Now, mylocalize is not built in, it's actually a Macaulay2 script that I define below. You can copy it from the web page for the homework and paste it into Macaulay2 (the whole thing all at once). For convenience we can also define a second script that calls mylocalize to calculate I(p, F^G) in one step. Here are the scripts. Below I give a sample session using them.
```findIntMult = (I,P,R) -> (
if(dim(R/mylocalize(I,P,R)) > 0 ) then
print "The intersection multiplicity is infinite!!!!!!" else
degree( R/mylocalize(I,P,R) ))

mylocalize = (I,P,R) -> (
L:=primaryDecomposition I;
j:=-1;
J:= I;
B:= ideal (matrix {{1}}**R);  -- Make B the ideal (1) but in current ring, not ZZ.
scan(#L, i->(
J=(L_i)*ideal (matrix {{1}}**R);  -- convert L_i into an ideal if it's of type MonomialIdeal
if( (P:J) == (ideal (matrix {{1}}**R)) ) then B=intersect(B,J);
));
B)
```
Sample Session:
```Macaulay 2, version 0.9.2
--Copyright 1993-2001, D. R. Grayson and M. E. Stillman
--Singular-Factory 1.3c, copyright 1993-2001, G.-M. Greuel, et al.
--Singular-Libfac 0.3.2, copyright 1996-2001, M. Messollen

i1 : R = QQ[x,y]

o1 = R

o1 : PolynomialRing

i2 : findIntMult = (I,P,R) -> (
if(dim(R/mylocalize(I,P,R)) > 0 ) then
print "The intersection multiplicity is infinite!!!!!!" else
degree( R/mylocalize(I,P,R) ))

mylocalize = (I,P,R) -> (
L:=primaryDecomposition I;
j:=-1;
J:= I;
B:= ideal (matrix {{1}}**R);  -- Make B the ideal (1) but in current ring, not ZZ.
scan(#L, i->(
J=(L_i)*ideal (matrix {{1}}**R);  -- convert L_i into an ideal if it's of type MonomialIdeal
if( (P:J) == (ideal (matrix {{1}}**R)) ) then B=intersect(B,J);
));
B)

o2 = findIntMult

o2 : Function

i3 :
o3 = mylocalize

o3 : Function

i4 : findIntMult(ideal(x^3,y^4),ideal(x,y),R)

o4 = 12

i5 : quit
```
Notes:
(1) matrix {{1}} makes a 1x1 matrix whose entry is 1. But ideal (matrix {{1}}) would be the unit ideal in ZZ, not R. To get the unit ideal in R we need to tensor by R, hence I use ideal (matrix {{1}}**R) in the script; "**" denotes tensoring.
(2) The colon in L:=primaryDecomposition I makes L into a local variable, so you don't overwrite other L's you may have defined outside of the script.
(3) Now, primaryDecomposition I is a list of ideals. Thus L is a list whose (i+1)st item is L_i (so L_0 is the first item in the list); #L is the number of entries in the list, and scan(#L, i->( various commands go here ) ) makes i run from 0 to #L-1.
(4) P:J is the usual colon operation in commutative algebra; it is the ideal of all f in R such that fJ is contained in P. Thus P:J = (1) if and only if P contains J, so if( (P:J) == (ideal (matrix {{1}}**R)) ) then B=intersect(B,J) intersects B with J if P contains J. Together with the scan statement the effect is to make B the intersection of all ideals in the minimal primary decomposition of I which are contained in P.