# affineFatPoints -- produces the ideal and initial ideal from the coordinates of a finite set of fat points

## Synopsis

• Usage:
(Q,inG,G) = affineFatPoints(M,mults,R)
• Inputs:
• M, , in which each column consists of the coordinates of a point
• mults, a list, in which each element determines the multiplicity of the corresponding point
• R, a ring, coordinate ring of the affine space containing the points
• Outputs:
• Q, a list, list of standard monomials
• inG, an ideal, initial ideal of the set of fat points
• G, a list, list of generators for Grobner basis for ideal of fat points

## Description

This function uses a modified Buchberger-Moeller algorithm to compute a grobner basis for the ideal of a finite number of fat points in affine space.

 i1 : R = QQ[x,y] o1 = R o1 : PolynomialRing i2 : M = transpose matrix{{0,0},{1,1}} o2 = | 0 1 | | 0 1 | 2 2 o2 : Matrix ZZ <--- ZZ i3 : mults = {3,2} o3 = {3, 2} o3 : List i4 : (Q,inG,G) = affineFatPoints(M,mults,R) 2 2 3 2 4 2 3 3 5 2 o4 = ({1, y, x, y , x*y, x , y , x*y , y }, ideal (x y, x , x*y , y ), {x y - ------------------------------------------------------------------------ 2 3 3 2 3 3 4 2 3 5 4 3 2x*y + y , x - 3x*y + 2y , x*y - y - x*y + y , y - 2y + y }) o4 : Sequence i5 : monomialIdeal G == inG o5 = true

This algorithm may be faster than computing the intersection of the ideals of each fat point.

 i6 : K = ZZ/32003 o6 = K o6 : QuotientRing i7 : R = K[z_1..z_5] o7 = R o7 : PolynomialRing i8 : M = random(K^5,K^12) o8 = | 107 -5307 10359 -6203 8231 9534 6230 13177 10866 -5326 1031 | 4376 8570 -7464 12365 5864 -7216 9033 13990 5398 2998 -2036 | -5570 -15344 -8251 -13508 5026 -10125 5107 -11521 5549 5679 -6325 | 3187 8444 2653 -9480 10259 7256 -3996 -1309 -7061 -7152 -11740 | 3783 -10480 5071 -11950 -7501 -5321 9398 -1779 2627 15317 -6922 ------------------------------------------------------------------------ -5080 | 1236 | 8922 | -5006 | 8880 | 5 12 o8 : Matrix K <--- K i9 : mults = {1,2,3,1,2,3,1,2,3,1,2,3} o9 = {1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3} o9 : List i10 : elapsedTime (Q,inG,G) = affineFatPoints(M,mults,R); -- 1.59663 seconds elapsed i11 : elapsedTime H = affineFatPointsByIntersection(M,mults,R); -- 7.22474 seconds elapsed i12 : G==H o12 = true

## Caveat

For reduced points, this function may be a bit slower than affinePoints.