# Singular

#### D.4.20.3 facGBIdeal

Procedure from library `pointid.lib` (see pointid_lib).

Usage:
facGBIdeal(id); id = <list of vectors> or <list of lists> or <module> or <matrix>.
Let A= {a1,...,as} be a set of points in K^n, ai:=(ai1,...,ain), then A can be given as
- a list of vectors (the ai are vectors) or
- a list of lists (the ai are lists of numbers) or
- a module s.t. the ai are generators or
- a matrix s.t. the ai are columns

Assume:
basering must have ordering rp, i.e., be of the form 0,x(1..n),rp; (the first entry of a point belongs to the lex-smallest variable, etc.)

Return:
a list where the first entry contains the Groebner basis G of I(A) and the second entry contains the linear factors of each element of G

Note:
combinatorial algorithm due to the Axis-of-Evil Theorem of M.G. Marinari, T. Mora

Example:
 ```LIB "pointid.lib"; ring R = 0,x(1..3),rp; vector a1 = [4,0,0]; vector a2 = [2,1,4]; vector a3 = [2,4,0]; vector a4 = [3,0,1]; vector a5 = [2,1,3]; vector a6 = [1,3,4]; vector a7 = [2,4,3]; vector a8 = [2,4,2]; vector a9 = [1,0,2]; list A = a1,a2,a3,a4,a5,a6,a7,a8,a9; facGBIdeal(A); ==> [1]: ==> _[1]=x(1)^4-10*x(1)^3+35*x(1)^2-50*x(1)+24 ==> _[2]=x(1)^2*x(2)-3*x(1)*x(2)+2*x(2) ==> _[3]=x(2)^2-1/2*x(1)^2*x(2)-1/2*x(1)*x(2)-2*x(2)+2*x(1)^3-16*x(1)^2+38\ *x(1)-24 ==> _[4]=x(1)*x(3)-2*x(3)-2/3*x(1)*x(2)+4/3*x(2)+1/6*x(1)^3-1/2*x(1)^2-5/3\ *x(1)+4 ==> _[5]=x(2)*x(3)^2-4*x(3)^2-2/3*x(2)^2*x(3)-5/6*x(1)^3*x(2)*x(3)+41/6*x(\ 1)^2*x(2)*x(3)-16*x(1)*x(2)*x(3)+23/3*x(2)*x(3)+10/3*x(1)^3*x(3)-82/3*x(1\ )^2*x(3)+64*x(1)*x(3)-20*x(3)+2*x(2)^2+5/2*x(1)^3*x(2)-41/2*x(1)^2*x(2)+4\ 8*x(1)*x(2)-32*x(2)-10*x(1)^3+82*x(1)^2-192*x(1)+96 ==> _[6]=x(3)^3+4/3*x(2)*x(3)^2-5/6*x(1)^3*x(3)^2+35/6*x(1)^2*x(3)^2-9*x(1\ )*x(3)^2-9*x(3)^2-20/3*x(2)*x(3)+25/6*x(1)^3*x(3)-175/6*x(1)^2*x(3)+45*x(\ 1)*x(3)+26*x(3)+8*x(2)-5*x(1)^3+35*x(1)^2-54*x(1)-24 ==> [2]: ==> [1]: ==> _[1]=x(1)-4 ==> _[2]=x(1)-2 ==> _[3]=x(1)-3 ==> _[4]=x(1)-1 ==> [2]: ==> _[1]=x(1)-2 ==> _[2]=x(1)-1 ==> _[3]=x(2) ==> [3]: ==> _[1]=x(2)-4*x(1)+4 ==> _[2]=2*x(2)-x(1)^2+7*x(1)-12 ==> [4]: ==> _[1]=x(1)-2 ==> _[2]=6*x(3)-4*x(2)+x(1)^2-x(1)-12 ==> [5]: ==> _[1]=x(2)-4 ==> _[2]=x(3)-3 ==> _[3]=6*x(3)-4*x(2)-5*x(1)^3+41*x(1)^2-96*x(1)+48 ==> [6]: ==> _[1]=x(3)-2 ==> _[2]=x(3)-3 ==> _[3]=6*x(3)+8*x(2)-5*x(1)^3+35*x(1)^2-54*x(1)-24 matrix MAT[9][3] = 4,0,0,2,1,4,2,4,0,3,0,1,2,1,3,1,3,4,2,4,3,2,4,2,1,0,2; MAT = transpose(MAT); print(MAT); ==> 4,2,2,3,2,1,2,2,1, ==> 0,1,4,0,1,3,4,4,0, ==> 0,4,0,1,3,4,3,2,2 facGBIdeal(MAT); ==> [1]: ==> _[1]=x(1)^4-10*x(1)^3+35*x(1)^2-50*x(1)+24 ==> _[2]=x(1)^2*x(2)-3*x(1)*x(2)+2*x(2) ==> _[3]=x(2)^2-1/2*x(1)^2*x(2)-1/2*x(1)*x(2)-2*x(2)+2*x(1)^3-16*x(1)^2+38\ *x(1)-24 ==> _[4]=x(1)*x(3)-2*x(3)-2/3*x(1)*x(2)+4/3*x(2)+1/6*x(1)^3-1/2*x(1)^2-5/3\ *x(1)+4 ==> _[5]=x(2)*x(3)^2-4*x(3)^2-2/3*x(2)^2*x(3)-5/6*x(1)^3*x(2)*x(3)+41/6*x(\ 1)^2*x(2)*x(3)-16*x(1)*x(2)*x(3)+23/3*x(2)*x(3)+10/3*x(1)^3*x(3)-82/3*x(1\ )^2*x(3)+64*x(1)*x(3)-20*x(3)+2*x(2)^2+5/2*x(1)^3*x(2)-41/2*x(1)^2*x(2)+4\ 8*x(1)*x(2)-32*x(2)-10*x(1)^3+82*x(1)^2-192*x(1)+96 ==> _[6]=x(3)^3+4/3*x(2)*x(3)^2-5/6*x(1)^3*x(3)^2+35/6*x(1)^2*x(3)^2-9*x(1\ )*x(3)^2-9*x(3)^2-20/3*x(2)*x(3)+25/6*x(1)^3*x(3)-175/6*x(1)^2*x(3)+45*x(\ 1)*x(3)+26*x(3)+8*x(2)-5*x(1)^3+35*x(1)^2-54*x(1)-24 ==> [2]: ==> [1]: ==> _[1]=x(1)-4 ==> _[2]=x(1)-2 ==> _[3]=x(1)-3 ==> _[4]=x(1)-1 ==> [2]: ==> _[1]=x(1)-2 ==> _[2]=x(1)-1 ==> _[3]=x(2) ==> [3]: ==> _[1]=x(2)-4*x(1)+4 ==> _[2]=2*x(2)-x(1)^2+7*x(1)-12 ==> [4]: ==> _[1]=x(1)-2 ==> _[2]=6*x(3)-4*x(2)+x(1)^2-x(1)-12 ==> [5]: ==> _[1]=x(2)-4 ==> _[2]=x(3)-3 ==> _[3]=6*x(3)-4*x(2)-5*x(1)^3+41*x(1)^2-96*x(1)+48 ==> [6]: ==> _[1]=x(3)-2 ==> _[2]=x(3)-3 ==> _[3]=6*x(3)+8*x(2)-5*x(1)^3+35*x(1)^2-54*x(1)-24 module MOD = gen(3),gen(2)-2*gen(3),2*gen(1)+2*gen(3),2*gen(2)-2*gen(3),gen(1)+3*gen(3),gen(1)+gen(2)+3*gen(3),gen(1)+gen(2)+gen(3); print(MOD); ==> 0,0, 2,0, 1,1,1, ==> 0,1, 0,2, 0,1,1, ==> 1,-2,2,-2,3,3,1 facGBIdeal(MOD); ==> [1]: ==> _[1]=x(1)^3-3*x(1)^2+2*x(1) ==> _[2]=x(1)^2*x(2)-x(1)*x(2) ==> _[3]=x(1)*x(2)^2-x(1)*x(2) ==> _[4]=x(2)^3-3*x(2)^2+2*x(2) ==> _[5]=x(1)*x(3)-x(3)-3/2*x(1)*x(2)^2+3/2*x(2)^2+9/2*x(1)*x(2)-9/2*x(2)-\ 1/2*x(1)^2-1/2*x(1)+1 ==> _[6]=x(2)*x(3)-x(3)+3/2*x(2)^2+3/2*x(1)^2*x(2)-7/2*x(1)*x(2)-5/2*x(2)-\ 3/2*x(1)^2+7/2*x(1)+1 ==> _[7]=x(3)^2+3*x(1)^2*x(3)-8*x(1)*x(3)+x(3)-3*x(1)^2+8*x(1)-2 ==> [2]: ==> [1]: ==> _[1]=x(1) ==> _[2]=x(1)-2 ==> _[3]=x(1)-1 ==> [2]: ==> _[1]=x(1) ==> _[2]=x(1)-1 ==> _[3]=x(2) ==> [3]: ==> _[1]=x(1) ==> _[2]=x(2)-1 ==> _[3]=x(2) ==> [4]: ==> _[1]=x(2)-2 ==> _[2]=x(2)-1 ==> _[3]=x(2) ==> [5]: ==> _[1]=x(1)-1 ==> _[2]=2*x(3)-3*x(2)^2+9*x(2)-x(1)-2 ==> [6]: ==> _[1]=x(2)-1 ==> _[2]=2*x(3)+3*x(2)+3*x(1)^2-7*x(1)-2 ==> [7]: ==> _[1]=x(3)-1 ==> _[2]=x(3)+3*x(1)^2-8*x(1)+2 list l1 = 0,0,1; list l2 = 0,1,-2; list l3 = 2,0,2; list l4 = 0,2,-2; list l5 = 1,0,3; list l6 = 1,1,3; list L = l1,l2,l3,l4,l5,l6; facGBIdeal(L); ==> [1]: ==> _[1]=x(1)^3-3*x(1)^2+2*x(1) ==> _[2]=x(1)^2*x(2)-x(1)*x(2) ==> _[3]=x(1)*x(2)^2-x(1)*x(2) ==> _[4]=x(2)^3-3*x(2)^2+2*x(2) ==> _[5]=x(3)-3/2*x(2)^2-3*x(1)*x(2)+9/2*x(2)+3/2*x(1)^2-7/2*x(1)-1 ==> [2]: ==> [1]: ==> _[1]=x(1) ==> _[2]=x(1)-2 ==> _[3]=x(1)-1 ==> [2]: ==> _[1]=x(1) ==> _[2]=x(1)-1 ==> _[3]=x(2) ==> [3]: ==> _[1]=x(1) ==> _[2]=x(2)-1 ==> _[3]=x(2) ==> [4]: ==> _[1]=x(2)-2 ==> _[2]=x(2)-1 ==> _[3]=x(2) ==> [5]: ==> _[1]=2*x(3)-3*x(2)^2-6*x(1)*x(2)+9*x(2)+3*x(1)^2-7*x(1)-2 ```