# Singular

#### D.10.2.7 sysQE

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

Usage:
sysQE(check,y,t,[fieldeq,formal]);check,y matrix;t,fieldeq,formal int
 ``` - check is a parity check matrix of the code - y is a received word, - t the number of errors to be corrected, - if fieldeq=1, then field equations are added, - if formal=0, field equations on (known) syndrome variables are not added, in order to add them (note that the exponent should be equal to the number of elements in the INITIAL alphabet) one needs to set formal>0 for the exponent ```

Return:
the ring to work with together with the resulting system called 'qe'

Theory:
Based on 'check' of the given linear code, the procedure constructs the corresponding ideal that gives an opportunity to compute unknown syndrome of the received word y. After computing the unknown syndromes one is able to solve the decoding problem. For basics of the method Decoding method based on quadratic equations.

Example:
 ```LIB "decodegb.lib"; intvec v = option(get); //correct 2 errors in [7,3] 8-ary code RS code int t=2; int q=8; int n=7; int redun=4; ring r=(q,a),x,dp; matrix h_full=genMDSMat(n,a); matrix h=submat(h_full,1..redun,1..n); matrix g=dual_code(h); matrix x[1][3]=0,0,1,0; matrix y[1][7]=encode(x,g); //disturb with 2 errors matrix rec[1][7]=errorInsert(y,list(2,4),list(1,a)); //generate the system def A=sysQE(h,rec,t); setring A; print(qe); ==> U(1)+a^3, ==> U(2)+a^2, ==> U(3)+a^6, ==> U(4), ==> V(1)*U(1)+V(2)*U(2)+U(3), ==> V(1)*U(2)+V(2)*U(3)+U(4), ==> V(1)*U(3)+V(2)*U(4)+U(5), ==> V(1)*U(4)+V(2)*U(5)+U(6), ==> V(1)*U(5)+V(2)*U(6)+U(7), ==> V(1)*U(6)+V(2)*U(7)+U(1), ==> V(2)*U(1)+V(1)*U(7)+U(2) //let us decode option(redSB); ideal sys_qe=std(qe); print(sys_qe); ==> U(7)+a, ==> U(6)+a^3, ==> U(5)+a^3, ==> U(4), ==> U(3)+a^6, ==> U(2)+a^2, ==> U(1)+a^3, ==> V(2)+1, ==> V(1)+a^4 option(set,v); ```