--Basics R=ZZ/31991[x,y] I=ideal(x^2,x*y) M=coker gens I hilbertSeries M (res M).dd R=ZZ/31991[x,y,z,w] I=minors(2,matrix{{y,z,w},{x,y,z}}) rI = res I rI.dd betti rI ------------------------------------------------------------------------ --Computation of D(A) A3= matrix{{1,0,0},{0,1,0},{0,0,1},{0,1,-1},{1,0,-1},{1,-1,0}} D3= matrix{{1,0,0},{0,1,0},{0,0,1},{0,1,-1},{1,0,-1},{1,-1,0},{1,1,-1}} S3= matrix{{1,0,0},{0,1,0},{1,1,0},{1,2,0},{1,3,0},{1,2,3},{1,17,25}} JacA = (A)->(l=rank source A; --number of vars S=ZZ/31991[x_1..x_l]; --make a ring v=transpose vars S; --get the vars forms =A*v; --get the equations Q=det diagonalMatrix(forms); --get defining poly ideal jacobian ideal Q) --return Jacobian(Q) JA3 = JacA A3 betti res JA3 --check if free (res I 'means' R/I) Saitomatrix = (transpose vars S)|syz gens JA3 --build matrix of ders ideal (det Saitomatrix) == ideal Q --check Saito crit. betti res JacA D3 betti res JacA S3 ------------------------------------------------------------------------ --D(A) is not combinatorial ziegler1 = matrix {{1,0,0},{0,1,0},{0,0,1},{1,1,1}, {2,1,1},{2,3,1},{2,3,4},{3,0,5},{3,4,5}} J1=JacA ziegler1 betti res coker gens J1 ziegler2 = matrix {{1,0,0},{0,1,0},{0,0,1},{1,1,1}, {2,1,1},{2,3,1},{2,3,4},{1,0,3},{1,2,3}} J2=JacA ziegler2 betti res J2 --to see that ziegler2 has multiple points on a conic, we need the ideal of --the multiple points; just need to colon the saturation against the radical radical ((saturate J2):(radical J2)) --has a conic! radical ((saturate J1):(radical J1)) --no conic! ------------------------------------------------------------------------- --D(A) for graphic arrangements graphic = (G)->(e0 := min mingle G; if e0 =!= 0 then print "Start with vertex 0!" else (H:=apply(G,sort); --must have edge pairs {i(E=E||matrix{join(toList(i#0:0),{1}, toList((i#1-i#0-1):0),{-1},toList((e1-i#1):0))}))); transpose compress transpose E) oct1skel={{0,1},{1,2},{2,3},{3,0},{4,5},{5,6},{6,7},{7,0},{0,4},{1,5},{2,6},{3,7}} J3=JacA graphic oct1skel betti res coker gens J3 triprism={{0,1},{0,2},{1,2},{3,4},{3,5},{4,5},{0,3},{1,4},{2,5}} J4=JacA graphic triprism betti res J4 --------------------------------------------------------------------------- --multiarrangement computation multiA=(A,m)->(l=#A#0; --determine ambient space S=ZZ/31991[x_1..x_l]; v=transpose vars S; forms = matrix(A)*v; M=entries forms; if #M =!= #m then print "ERROR" else( forms1 = apply(rank target forms, i->{(M#i#0)^(m#i)}); --produce a diagonal matrix, forms^multiplicities --now just concatenate it with the matrix of equations. N=(matrix A)**S|diagonalMatrix(matrix(forms1))); DAm=submatrix(gens kernel N,{0..l-1},) ) --A is a list of hyperplane coordinates, and m a list of --multiplicities. Ziegler1 = {{1,0},{0,1},{1,1},{1,-1}} multiA(Ziegler1,{1,1,3,3}) degrees source DAm Ziegler2 = {{1,0},{0,1},{1,1},{1,2}} multiA(Ziegler2,{1,1,3,3}) degrees source DAm ---------------------------------------------------------------------------- --Nonlinear examples: --D(C) for A_3 + single conic Jbraid = JacA A3; rbraid = gens radical ((saturate Jbraid):(radical Jbraid)) -- get the ideal of multiple points C=rbraid*random(S^2,S^1) -- take a random conic thru the 4 multiple points betti res ideal jacobian ideal Q*C -- we see that D(C) is free, gens (1,2,5). --Milnor v. Tjurina --degree ideal jacobian ideal(x_1*x_2*(x_1-x_2)*(x_1-2*x_2)(x_1^2-x_1*x_1*x_3+x_2^2-x_2*x_3)) --D(C) for the symmetric example betti res ideal jacobian ideal (x_1*x_2*(x_2^2+x_1*x_3)*(x_2^2+x_1^2+2*x_1*x_3)) --D(C) for the nonsymmetric example betti res ideal jacobian ideal (x_1*(x_1-13*x_2)*(x_2^2+x_1*x_3)*(x_2^2+x_1^2+2*x_1*x_3)) -------------------------------------------------------------------------------- --Orlik-Terao algebra invdiag = (f) ->(R = ring f; map(R^{(rank target f):1}, R^(rank target f), (i,j) -> if i== j then 1/f_(i,0) else 0)) --Take an n by 1 matrix, return the diagonal matrix of reciprocals. OTalg = (M)->(t0=rank source M; t1=(rank target M)-1; S1= ZZ/31991[a_1..a_(t0)]; S = frac S1; v=transpose vars S1; forms = (M**S)*v; d=gens minors(1,invdiag forms); T = ZZ/31991[y_0..y_(t1)]; OT = mingens kernel map(S,T,d); squares = mingens ideal flatten (diagonalMatrix(transpose vars T))^2; AOT= mingens((ideal squares)+(ideal OT)); OT) --produce OT and AOT from a matrix with eqns of hyperplanes OTziegler1 = OTalg ziegler1 betti res coker OT --do this betti res coker AOT --computation takes too long, don't do -- OTziegler2 = OTalg ziegler2 betti res coker OT --do this betti res coker AOT --they are the same. Darn it!!! But wait!!! betti res coker super basis(2, ideal OTziegler1) 0 1 2 3 4 5 6 o47 = total: 1 6 15 20 15 6 1 0: 1 . . . . . . 1: . 6 . . . . . 2: . . 15 . . . . 3: . . . 20 . . . 4: . . . . 15 . . 5: . . . . . 6 . 6: . . . . . . 1 betti res coker super basis(2, ideal OTziegler2) 0 1 2 3 4 5 o50 = total: 1 6 20 31 21 5 0: 1 . . . . . 1: . 6 . . . . 2: . . 20 16 5 . 3: . . . 15 16 5 --The quadratic OT algebras differ!!!! ------------------------------------------------------------------------- OT1 = matrix {{1,0,0},{0,1,0},{0,0,1},{1,1,1}} OT1eqns = OTalg OT1 degree ideal jacobian OT1eqns --a cubic surface in P^3 with 4 singular points OTA3= OTalg A3 C3 = coker OTA3 hilbertPolynomial(C3,Projective=>false) -- 2 -- 3i + 2i + 1 --a surface in P^5 of degree 6. betti res C3 -- 0 1 2 3 -- total: 1 4 5 2 -- 0: 1 . . . -- 1: . 4 2 . -- 2: . . 3 2 -------------------------------------------------------------------------------- --Compactifications mring = (n)->(v = flatten apply(n-1, i->subsets(n,i+2)); v2= apply(v, i->z_i); R=ZZ/31991[v2]) --produce ring with vars = list of subsets of size 2..n of n qrelns = (n)->(mring(n); Q=ideal 0_R; w=v; scan(w, i->(scan(v,j->( if ((not isSubset(i,j)) and (not isSubset(j,i)) and (not(#unique(flatten{i,j})==(#i+#j)))) then Q=Q+ideal(z_i*z_j))))); mingens Q) --get the quadratic relations for the ideal. lrelns = (n)->(L=ideal 0_R; twoelt = subsets(n,2); scan(twoelt, i->(temp = sum unique apply(v,j->(if isSubset(i,j) then z_j else 0_R )); L = L+ideal temp)); mingens L) --get the linear relations for the ideal. KL1 = (I)->(I1=super basis(1,I); gens I % ideal I1) --kill off variables using linear relations. Mn = (n)->(qq= qrelns(n-1); ll = lrelns(n-1); I = (ideal qq)+(ideal ll); print reduceHilbert hilbertSeries coker gens I; print betti res coker mingens ideal KL1(I)) Mn 5 -- 2 --1 + 5T + T ------------- -- 1 -- -- 0 1 2 3 4 5 --total: 1 14 35 35 14 1 -- 0: 1 . . . . . -- 1: . 14 35 35 14 . -- 2: . . . . . 1