# Singular

#### D.10.2.1 sysCRHT

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

Usage:
sysCRHT(n,defset,e,q,m,[k]); n,e,q,m,k are int, defset list of int's
 ``` - n length of the cyclic code, - defset is a list representing the defining set, - e the error-correcting capacity, - q field size - m degree extension of the splitting field, - if k>0 additional equations representing the fact that every two error positions are either different or at least one of them is zero ```

Return:
the ring to work with the CRHT-ideal (with Sala's additions), containig an ideal with name 'crht'

Theory:
Based on 'defset' of the given cyclic code, the procedure constructs the corresponding Cooper-Reed-Heleseth-Truong ideal 'crht'. With its help one can solve the decoding problem. For basics of the method Cooper philosophy.

Example:
 ```LIB "decodegb.lib"; // binary cyclic [15,7,5] code with defining set (1,3) intvec v = option(get); list defset=1,3; // defining set int n=15; // length int e=2; // error-correcting capacity int q=2; // basefield size int m=4; // degree extension of the splitting field int sala=1; // indicator to add additional equations def A=sysCRHT(n,defset,e,q,m); setring A; A; // shows the ring we are working in ==> // characteristic : 2 ==> // 1 parameter : a ==> // minpoly : 0 ==> // number of vars : 6 ==> // block 1 : ordering lp ==> // : names Y(2) Y(1) Z(1) Z(2) X(2) X(1) ==> // block 2 : ordering C print(crht); // the CRHT-ideal ==> Y(2)*Z(2)+Y(1)*Z(1)+X(1), ==> Y(2)*Z(2)^3+Y(1)*Z(1)^3+X(2), ==> X(1)^16+X(1), ==> X(2)^16+X(2), ==> Z(1)^16+Z(1), ==> Z(2)^16+Z(2), ==> Y(1)+1, ==> Y(2)+1 option(redSB); ideal red_crht=std(crht); // reduced Groebner basis print(red_crht); ==> X(1)^16+X(1), ==> X(2)*X(1)^15+X(2), ==> X(2)^8+X(2)^4*X(1)^12+X(2)^2*X(1)^3+X(2)*X(1)^6, ==> Z(2)^2*X(1)+Z(2)*X(1)^2+X(2)+X(1)^3, ==> Z(2)^2*X(2)+Z(2)*X(2)*X(1)+X(2)^2*X(1)^14+X(2)*X(1)^2, ==> Z(2)^16+Z(2), ==> Z(1)+Z(2)+X(1), ==> Y(1)+1, ==> Y(2)+1 //============================ A=sysCRHT(n,defset,e,q,m,sala); setring A; print(crht); // CRHT-ideal with additional equations from Sala ==> Y(2)*Z(2)+Y(1)*Z(1)+X(1), ==> Y(2)*Z(2)^3+Y(1)*Z(1)^3+X(2), ==> X(1)^16+X(1), ==> X(2)^16+X(2), ==> Z(1)^16+Z(1), ==> Z(2)^16+Z(2), ==> Y(1)+1, ==> Y(2)+1, ==> Z(1)^15*Z(2)+Z(1)^14*Z(2)^2+Z(1)^13*Z(2)^3+Z(1)^12*Z(2)^4+Z(1)^11*Z(2)^5+\ Z(1)^10*Z(2)^6+Z(1)^9*Z(2)^7+Z(1)^8*Z(2)^8+Z(1)^7*Z(2)^9+Z(1)^6*Z(2)^10+Z\ (1)^5*Z(2)^11+Z(1)^4*Z(2)^12+Z(1)^3*Z(2)^13+Z(1)^2*Z(2)^14+Z(1)*Z(2)^15 option(redSB); ideal red_crht=std(crht); // reduced Groebner basis print(red_crht); ==> X(1)^16+X(1), ==> X(2)*X(1)^15+X(2), ==> X(2)^8+X(2)^4*X(1)^12+X(2)^2*X(1)^3+X(2)*X(1)^6, ==> Z(2)*X(1)^15+Z(2), ==> Z(2)^2+Z(2)*X(1)+X(2)*X(1)^14+X(1)^2, ==> Z(1)+Z(2)+X(1), ==> Y(1)+1, ==> Y(2)+1 red_crht[5]; // general error-locator polynomial for this code ==> Z(2)^2+Z(2)*X(1)+X(2)*X(1)^14+X(1)^2 option(set,v); ```