Adam Van TuylDepartment of Mathematics and StatisticsMcMaster University Hamilton, ON, Canada L8S 4L8 vantuyl@math.mcmaster.ca |
Code for ACM sets of points |
In my paper
-
ACM sets of points in multiprojective space (with E. Guardo)
Collectanea Mathematica 59 (2008) 191-213.
To acheive this goal, we used the computer algebra systems CoCoA to help discover a number of examples. As promised in our paper, below is the code we used to generate these examples. We are providing this code to encourage future experimentation.
Feel free to borrow and change the code. If you find anything, we would be interested in hearing about your results!
CoCoA code
The following code has been checked on CoCoA 4.5. Before presenting our examples, we give some code that allows one to compute the bigraded Hilbert function and the bigraded shifts.
----------------------------------------------------------------------- -- BiHilbert(I,K1,K2) -- -- (Assume that the appropriate ring R has been defined) -- BiHilbert computes the Hilbert function of the bigraded ring S = R/I -- for all (I,J) <= (K1,K2) ----------------------------------------------------------------------- Define BiHilbert(I,K1,K2) -- N = #indeterminates of degree (1,1,0) in R -- M = #indeterminates of degree (1,0,1) in R N:= Len([X In Indets() | MDeg(X) =[1,1,0]]); M:= NumIndets() - N; -- Compute Hilbert-Poincare Series P:=Poincare(CurrentRing()/I); BiHiRing::=Q[t[1..3]]; Using BiHiRing Do -- Determine the numerator (Num) of the HP-series RationalP:=$hp.ToRatFun(P); Num := RationalP*(1-t[1]t[2])^N*(1-t[1]t[3])^M; -- Derive the correct numerator by substituting 1 into Num Num:=Subst(Num,t[1],1); -- Write out the appropriate number of terms of the denominator -- and multiply by the numerator. We use the -- routine Expansion Expanded:=Num*Expansion(N,M,K1,K2); -- Read off the coefficient of the term t[2]^I1*t[3]^I2 -- for all (I1,I2) <= (K1,K2). Store result in a matrix HilbertMatrix:=NewMat(K1+1,K2+1,0); Foreach M In Monomials(Expanded) Do If Deg(M,t[2]) <= K1 And Deg(M,t[3]) <= K2 Then HilbertMatrix[Deg(M,t[2])+1,Deg(M,t[3])+1] := LC(M); End; End; -- Return desired values as a matrix Return(HilbertMatrix); End; End; ------------------------------------------------------------- -- Expansion(N,M,K1,K2) -- -- Expansion computes the first K1 terms of 1/(1-t[2])^N and -- the first K2 terms of 1/(1-t[3]^M. It then returns -- the product of these two polynomials. ------------------------------------------------------------- Define Expansion(N,M,K1,K2) L1:=[Bin(D+N-1,N-1)*t[2]^D | D In 0..K1]; L2:=[Bin(D+M-1,M-1)*t[3]^D | D In 0..K2]; P1:=Sum(L1); P2:=Sum(L2); Return(P1*P2); End; -- Expansion ------------------------------------------------------------------- --- PI returns the ideal of the point [1:A] x [1:B] in P^1 x P^1 ------------------------------------------------------------------- Define PI(A,B); Return(Ideal(x[2]-A*x[1],y[2]-B*y[1])); End; -- FP ------------------------------------------------------------------ -- BiRes(I) returns the bigraded shifts in the bigrade -- minimal free resolution of I ------------------------------------------------------------------ Define BiRes(I); R:=Res(I); For L:=1 To Len(R[2]) Do PrintLn "--Degres of ", L-1, "th Syzygies --"; MM:=MinGens(R[2][L][1]); DegMM:=[Tail(MDeg(X)) | X In MM]; PrintLn DegMM; End; End; |
The next two examples correspond to Examples 3.3 and 3.4 in our paper
-------------------------------------------------------------- --- Example of 27 points which are Not ACM but --- whose first difference function is the Hilbert --- function of a bigraded arinian quotient W:=Mat([[1,1,1,1,1,1],[1,1,1,0,0,0],[0,0,0,1,1,1]]); Use S::=Q[x[1..3],y[1..3]],Weights(W); -- We Use the following 6 points In generic position -- [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 1], [19, 64, 42], [7, 18, 61]] P1:=Ideal(x[2],x[3]); Q1:=Ideal(y[2],y[3]); P2:=Ideal(x[1],x[3]); Q2:=Ideal(y[1],y[3]); P3:=Ideal(x[1],x[2]); Q3:=Ideal(y[1],y[2]); P4:=Ideal(x[1]-x[2],x[1]-x[3]); Q4:=Ideal(y[1]-y[2],y[1]-y[3]); P5:=Ideal(64x[1]-19x[2],42x[1]-19x[3]); Q5:=Ideal(64y[1]-19y[2],42y[1]-19y[3]); P6:=Ideal(18x[1]-7x[2],61x[1]-7x[3]); Q6:=Ideal(18y[1]-7y[2],61y[1]-7y[3]); R11:=P1+Q1; R12:=P1+Q2; R13:=P1+Q3; R14:=P1+Q4; R15:=P1+Q5; R16:=P1+Q6; R21:=P2+Q1; R22:=P2+Q2; R23:=P2+Q3; R24:=P2+Q4; R25:=P2+Q5; R26:=P2+Q6; R31:=P3+Q1; R32:=P3+Q2; R33:=P3+Q3; R34:=P3+Q4; R35:=P3+Q5; R36:=P3+Q6; R41:=P4+Q1; R42:=P4+Q2; R43:=P4+Q3; R44:=P4+Q4; R45:=P4+Q5; R46:=P4+Q6; R51:=P5+Q1; R52:=P5+Q2; R53:=P5+Q3; R54:=P5+Q4; R55:=P5+Q5; R56:=P5+Q6; R61:=P6+Q1; R62:=P6+Q2; R63:=P6+Q3; R64:=P6+Q4; R65:=P6+Q5; R66:=P6+Q6; K:=Intersection(R11,R12,R13,R14,R15,R16,R21,R23,R24,R26, R31,R32,R35,R36,R41,R42,R45,R46,R51,R53,R56, R61,R62,R63,R64,R65,R66); Res(K); BiHilbert(K,6,6); 0 --> S(-8) --> S^12(-7)(+)S(-8) --> S^38(-6) --> S^6(-4)(+)S^36(-5) --> S^8(-3)(+)S^9(-4) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6, 6], [3, 9, 18, 18, 18, 18, 18], [6, 18, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27] ]) ------------------------------- ---------------------------------------------- --Example of ACM points In P^2 x P^2 with --same Hilbert function of nonACM Set of points. W:=Mat([[1,1,1,1,1,1],[1,1,1,0,0,0],[0,0,0,1,1,1]]); Use S::=Q[x[1..3],y[1..3]],Weights(W); -- (1:1:1) P11:=Ideal(x[2]-x[1],x[3]-x[1]); -- (1:1:2) P12:=Ideal(x[2]-x[1],x[3]-2x[1]); -- (1:1:3) P13:=Ideal(x[2]-x[1],x[3]-3x[1]); -- (1:2:1) P21:=Ideal(x[2]-2x[1],x[3]-x[1]); -- (1:2:2) P22:=Ideal(x[2]-2x[1],x[3]-2x[1]); -- (1:3:1) P31:=Ideal(x[2]-3x[1],x[3]-x[1]); -- (1:1:1) R11:=Ideal(y[2]-y[1],y[3]-y[1]); -- (1:1:2) R12:=Ideal(y[2]-y[1],y[3]-2y[1]); -- (1:1:3) R13:=Ideal(y[2]-y[1],y[3]-3y[1]); -- (1:2:1) R21:=Ideal(y[2]-2y[1],y[3]-y[1]); -- (1:2:2) R22:=Ideal(y[2]-2y[1],y[3]-2y[1]); -- (1:3:1) R31:=Ideal(y[2]-3y[1],y[3]-y[1]); Q1111:=P11+R11; Q1112:=P11+R12; Q1113:=P11+R13; Q1121:=P11+R21; Q1122:=P11+R22; Q1131:=P11+R31; Q1211:=P12+R11; Q1212:=P12+R12; Q1213:=P12+R13; Q1221:=P12+R21; Q1222:=P12+R22; Q1231:=P12+R31; Q1311:=P13+R11; Q1312:=P13+R12; Q1313:=P13+R13; Q1321:=P13+R21; Q1322:=P13+R22; Q1331:=P13+R31; Q2111:=P21+R11; Q2112:=P21+R12; Q2113:=P21+R13; Q2121:=P21+R21; Q2122:=P21+R22; Q2131:=P21+R31; Q2211:=P22+R11; Q2212:=P22+R12; Q2213:=P22+R13; Q2221:=P22+R21; Q2222:=P22+R22; Q2231:=P22+R31; Q3111:=P31+R11; Q3112:=P31+R12; Q3113:=P31+R13; Q3121:=P31+R21; Q3122:=P31+R22; Q3131:=P31+R31; J:=Intersection(Q1121,Q1122,Q1131, Q1221,Q1222,Q1231, Q1321,Q1322,Q1331, Q2111,Q2112,Q2113,Q2121,Q2122,Q2131, Q2211,Q2212,Q2213,Q2221,Q2222,Q2231 Q3111,Q3112,Q3113,Q3121,Q3122,Q3131); BiHilbert(J,10,10); Res(J); Mat([ [1, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6], [3, 9, 18, 18, 18, 18, 18, 18, 18, 18, 18], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27], [6, 18, 27, 27, 27, 27, 27, 27, 27, 27, 27] ]) ------------------------------- 0 --> S^12(-7) --> S^38(-6) --> S^6(-4)(+)S^36(-5) --> S^8(-3)(+)S^9(-4) ------------------------------- |
The following example is Example 4.9 of a set of points that fails the geometric property (*), but is ACM
----------------------------------------------------------- ---- Geometric Condition (*) Fails In P1 x P2 -------------------------------------------------------------- W:=Mat([[1,1,1,1,1],[1,1,0,0,0],[0,0,1,1,1]]); Use S::=Q[x[1..2],y[1..3]],Weights(W); -- We Use the following 6 points In generic position -- [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 1], [19, 64, 42], [7, 18, 61]] P1:=Ideal(x[1]-x[2]); Q1:=Ideal(y[2],y[3]); P2:=Ideal(x[1]-2x[2]); Q2:=Ideal(y[1],y[3]); P3:=Ideal(x[1]-3x[2]); Q3:=Ideal(y[1],y[2]); P4:=Ideal(x[1]-4x[2]); Q4:=Ideal(y[1]-y[2],y[1]-y[3]); P5:=Ideal(x[1]-5x[2]); Q5:=Ideal(64y[1]-19y[2],42y[1]-19y[3]); P6:=Ideal(x[1]-6x[2]); Q6:=Ideal(18y[1]-7y[2],61y[1]-7y[3]); R11:=P1+Q1; R12:=P1+Q2; R13:=P1+Q3; R14:=P1+Q4; R15:=P1+Q5; R16:=P1+Q6; R21:=P2+Q1; R22:=P2+Q2; R23:=P2+Q3; R24:=P2+Q4; R25:=P2+Q5; R26:=P2+Q6; R31:=P3+Q1; R32:=P3+Q2; R33:=P3+Q3; R34:=P3+Q4; R35:=P3+Q5; R36:=P3+Q6; R41:=P4+Q1; R42:=P4+Q2; R43:=P4+Q3; R44:=P4+Q4; R45:=P4+Q5; R46:=P4+Q6; R51:=P5+Q1; R52:=P5+Q2; R53:=P5+Q3; R54:=P5+Q4; R55:=P5+Q5; R56:=P5+Q6; R56:=P5+Q6; R61:=P6+Q1; R62:=P6+Q2; R63:=P6+Q3; R64:=P6+Q4; R65:=P6+Q5; R66:=P6+Q6; K:=Intersection(R11,R12,R21,R22,R23,R24,R25,R31,R32,R33, R34,R35,R41,R42,R44,R45,R52,R53,R54, R56,R61,R63,R64,R65,R66,R51,R62); Res(K); BiHilbert(K,6,6); 0 --> S(-6)(+)S^3(-8)(+)S(-9) --> S^3(-4)(+)S^2(-5)(+)S^7(-7)(+)S(-8) --> S^4(-3)(+)S(-4)(+)S^4(-6) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6, 6], [2, 6, 12, 12, 12, 12, 12], [3, 9, 17, 17, 17, 17, 17], [4, 12, 22, 22, 22, 22, 22], [5, 15, 25, 25, 25, 25, 25], [6, 17, 27, 27, 27, 27, 27], [6, 17, 27, 27, 27, 27, 27] ]) ------------------------------- |
Below is an example of 18 points in P2 x P2 that is not ACM, but each point has only one minimal separator. This is Example 5.10 in our paper.
W:=Mat([[1,1,1,1,1,1],[1,1,1,0,0,0],[0,0,0,1,1,1]]); Use S::=Q[x[1..3],y[1..3]],Weights(W); -- We Use the following 6 points In generic position -- [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 1], [19, 64, 42], [7, 18, 61]] P1:=Ideal(x[2],x[3]); Q1:=Ideal(y[2],y[3]); P2:=Ideal(x[1],x[3]); Q2:=Ideal(y[1],y[3]); P3:=Ideal(x[1],x[2]); Q3:=Ideal(y[1],y[2]); P4:=Ideal(x[1]-x[2],x[1]-x[3]); Q4:=Ideal(y[1]-y[2],y[1]-y[3]); P5:=Ideal(64x[1]-19x[2],42x[1]-19x[3]); Q5:=Ideal(64y[1]-19y[2],42y[1]-19y[3]); P6:=Ideal(18x[1]-7x[2],61x[1]-7x[3]); Q6:=Ideal(18y[1]-7y[2],61y[1]-7y[3]); R11:=P1+Q1; R12:=P1+Q2; R13:=P1+Q3; R14:=P1+Q4; R15:=P1+Q5; R16:=P1+Q6; R21:=P2+Q1; R22:=P2+Q2; R23:=P2+Q3; R24:=P2+Q4; R25:=P2+Q5; R26:=P2+Q6; R31:=P3+Q1; R32:=P3+Q2; R33:=P3+Q3; R34:=P3+Q4; R35:=P3+Q5; R36:=P3+Q6; R41:=P4+Q1; R42:=P4+Q2; R43:=P4+Q3; R44:=P4+Q4; R45:=P4+Q5; R46:=P4+Q6; R51:=P5+Q1; R52:=P5+Q2; R53:=P5+Q3; R54:=P5+Q4; R55:=P5+Q5; R56:=P5+Q6; R61:=P6+Q1; R62:=P6+Q2; R63:=P6+Q3; R64:=P6+Q4; R65:=P6+Q5; R66:=P6+Q6; K:=Intersection(R11,R12,R21,R22,R31,R32,R41,R42,R52,R53, R54,R55,R56,R61,R63,R64,R65,R66); Res(K); BiHilbert(K,5,5); BiHilbert(K:R11,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R12,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R21,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R22,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R31,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R32,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R41,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R42,5,5); -- Hilbert function drops at (2,1) BiHilbert(K:R52,5,5); -- Hilbert function drops at (2,2) BiHilbert(K:R53,5,5); -- Hilbert function drops at (1,2) BiHilbert(K:R54,5,5); -- Hilbert function drops at (1,2) BiHilbert(K:R55,5,5); -- Hilbert function drops at (1,2) BiHilbert(K:R56,5,5); -- Hilbert function drops at (1,2) BiHilbert(K:R61,5,5); -- Hilbert function drops at (2,2) BiHilbert(K:R63,5,5); -- Hilbert function drops at (1,2) BiHilbert(K:R64,5,5); -- Hilbert function drops at (1,2) BiHilbert(K:R65,5,5); -- Hilbert function drops at (1,2) BiHilbert(K:R66,5,5); -- Hilbert function drops at (1,2) 0 --> S^2(-8) --> S^14(-7) --> S^6(-5)(+)S^27(-6) --> S^16(-4)(+)S^18(-5) --> S(-2)(+)S^10(-3)(+)S^3(-4) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 14, 18, 18, 18, 18], [6, 14, 18, 18, 18, 18], [6, 14, 18, 18, 18, 18], [6, 14, 18, 18, 18, 18] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17], [6, 13, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 14, 14, 14, 14], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 13, 13, 13, 13], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 13, 13, 13, 13], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 13, 13, 13, 13], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 13, 13, 13, 13], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17] ]) ------------------------------- Mat([ [1, 3, 6, 6, 6, 6], [3, 8, 13, 13, 13, 13], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17], [6, 14, 17, 17, 17, 17] ]) -- |