# Singular

#### D.10.2.17 sysFL

Procedure from library `decodegb.lib` (see decodegb_lib).

Usage:
sysFL (check,y,t,e,s); check,y matrix, t,e,s int
 ``` - check is a parity check matrix of the code, - y is a received word, - t the number of errors to correct, - e is the extension degree, - s is the dimension of the point for the vanishing ideal ```

Return:
the system of Fitzgerald-Lax for the given decoding problem

Theory:
Based on 'check' of the given linear code, the procedure constructs the corresponding ideal constructed with a generalization of Cooper's philosophy. For basics of the method Fitzgerald-Lax method.

Example:
 ```LIB "decodegb.lib"; intvec vopt = option(get); list l=FLpreprocess(3,1,11,2,""); def r=l[1]; setring r; int s_work=l[2]; //the check matrix of [11,6,5] ternary code matrix h[5][11]=1,0,0,0,0,1,1,1,-1,-1,0, 0,1,0,0,0,1,1,-1,1,0,-1, 0,0,1,0,0,1,-1,1,0,1,-1, 0,0,0,1,0,1,-1,0,1,-1,1, 0,0,0,0,1,1,0,-1,-1,1,1; matrix g=dual_code(h); matrix x[1][6]; matrix y[1][11]=encode(x,g); //disturb with 2 errors matrix rec[1][11]=errorInsert(y,list(2,4),list(1,-1)); //the Fitzgerald-Lax system ideal sys=sysFL(h,rec,2,1,s_work); print(sys); ==> x1(3)^3-x1(3), ==> x1(2)^3-x1(2), ==> x1(3)^2*x1(1)-x1(3)*x1(1), ==> x1(2)*x1(1), ==> x1(1)^2-x1(1), ==> x1(6)^3-x1(6), ==> x1(5)^3-x1(5), ==> x1(6)^2*x1(4)-x1(6)*x1(4), ==> x1(5)*x1(4), ==> x1(4)^2-x1(4), ==> x1(1)^3-x1(1), ==> x1(4)^3-x1(4), ==> e(1)^2-1, ==> e(2)^2-1, ==> -e(2)*x1(6)^2+e(2)*x1(6)*x1(5)^2-e(2)*x1(6)*x1(4)+e(2)*x1(5)^2+e(2)*x1(5)\ +e(2)*x1(4)+e(2)-e(1)*x1(3)^2+e(1)*x1(3)*x1(2)^2-e(1)*x1(3)*x1(1)+e(1)*x1\ (2)^2+e(1)*x1(2)+e(1)*x1(1)+e(1), ==> -e(2)*x1(6)^2+e(2)*x1(6)*x1(5)^2+e(2)*x1(6)*x1(5)+e(2)*x1(6)*x1(4)-e(2)*x\ 1(6)-e(2)*x1(5)^2+e(2)*x1(5)-e(1)*x1(3)^2+e(1)*x1(3)*x1(2)^2+e(1)*x1(3)*x\ 1(2)+e(1)*x1(3)*x1(1)-e(1)*x1(3)-e(1)*x1(2)^2+e(1)*x1(2)-1, ==> -e(2)*x1(6)^2*x1(5)^2+e(2)*x1(6)^2*x1(5)-e(2)*x1(6)^2-e(2)*x1(6)*x1(5)^2+\ e(2)*x1(6)*x1(5)+e(2)*x1(6)*x1(4)+e(2)*x1(6)+e(2)*x1(5)^2-e(2)*x1(5)+e(2)\ *x1(4)-e(1)*x1(3)^2*x1(2)^2+e(1)*x1(3)^2*x1(2)-e(1)*x1(3)^2-e(1)*x1(3)*x1\ (2)^2+e(1)*x1(3)*x1(2)+e(1)*x1(3)*x1(1)+e(1)*x1(3)+e(1)*x1(2)^2-e(1)*x1(2\ )+e(1)*x1(1), ==> -e(2)*x1(6)^2*x1(5)^2-e(2)*x1(6)^2*x1(5)+e(2)*x1(6)*x1(5)^2-e(2)*x1(6)*x1\ (4)+e(2)*x1(5)-e(2)*x1(4)-e(1)*x1(3)^2*x1(2)^2-e(1)*x1(3)^2*x1(2)+e(1)*x1\ (3)*x1(2)^2-e(1)*x1(3)*x1(1)+e(1)*x1(2)-e(1)*x1(1)+1, ==> e(2)*x1(6)^2*x1(5)+e(2)*x1(4)+e(1)*x1(3)^2*x1(2)+e(1)*x1(1) option(redSB); ideal red_sys=std(sys); red_sys; ==> red_sys[1]=x1(1) ==> red_sys[2]=x1(2)^2-x1(2) ==> red_sys[3]=x1(3)+x1(2)-1 ==> red_sys[4]=e(1)-x1(2)-1 ==> red_sys[5]=x1(4) ==> red_sys[6]=x1(5)+x1(2)-1 ==> red_sys[7]=x1(6)-x1(2) ==> red_sys[8]=e(2)+x1(2)+1 // read the solutions from this redGB // the points are (0,0,1) and (0,1,0) with error values 1 and -1 resp. // use list points to find error positions; points; ==> [1]: ==> _[1,1]=0 ==> _[2,1]=0 ==> _[3,1]=0 ==> [2]: ==> _[1,1]=0 ==> _[2,1]=0 ==> _[3,1]=1 ==> [3]: ==> _[1,1]=0 ==> _[2,1]=0 ==> _[3,1]=-1 ==> [4]: ==> _[1,1]=0 ==> _[2,1]=1 ==> _[3,1]=0 ==> [5]: ==> _[1,1]=0 ==> _[2,1]=1 ==> _[3,1]=1 ==> [6]: ==> _[1,1]=0 ==> _[2,1]=1 ==> _[3,1]=-1 ==> [7]: ==> _[1,1]=0 ==> _[2,1]=-1 ==> _[3,1]=0 ==> [8]: ==> _[1,1]=0 ==> _[2,1]=-1 ==> _[3,1]=1 ==> [9]: ==> _[1,1]=0 ==> _[2,1]=-1 ==> _[3,1]=-1 ==> [10]: ==> _[1,1]=1 ==> _[2,1]=0 ==> _[3,1]=0 ==> [11]: ==> _[1,1]=1 ==> _[2,1]=0 ==> _[3,1]=1 ==> [12]: ==> _[1,1]=1 ==> _[2,1]=0 ==> _[3,1]=-1 ==> [13]: ==> _[1,1]=1 ==> _[2,1]=1 ==> _[3,1]=0 ==> [14]: ==> _[1,1]=1 ==> _[2,1]=1 ==> _[3,1]=1 ==> [15]: ==> _[1,1]=1 ==> _[2,1]=1 ==> _[3,1]=-1 ==> [16]: ==> _[1,1]=1 ==> _[2,1]=-1 ==> _[3,1]=0 ==> [17]: ==> _[1,1]=1 ==> _[2,1]=-1 ==> _[3,1]=1 ==> [18]: ==> _[1,1]=1 ==> _[2,1]=-1 ==> _[3,1]=-1 ==> [19]: ==> _[1,1]=-1 ==> _[2,1]=0 ==> _[3,1]=0 ==> [20]: ==> _[1,1]=-1 ==> _[2,1]=0 ==> _[3,1]=1 ==> [21]: ==> _[1,1]=-1 ==> _[2,1]=0 ==> _[3,1]=-1 ==> [22]: ==> _[1,1]=-1 ==> _[2,1]=1 ==> _[3,1]=0 ==> [23]: ==> _[1,1]=-1 ==> _[2,1]=1 ==> _[3,1]=1 ==> [24]: ==> _[1,1]=-1 ==> _[2,1]=1 ==> _[3,1]=-1 ==> [25]: ==> _[1,1]=-1 ==> _[2,1]=-1 ==> _[3,1]=0 ==> [26]: ==> _[1,1]=-1 ==> _[2,1]=-1 ==> _[3,1]=1 ==> [27]: ==> _[1,1]=-1 ==> _[2,1]=-1 ==> _[3,1]=-1 option(set,vopt); ```