#### 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), containing 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
    ==> // coefficients: ZZ/2(a) considered as a field
    ==> // 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);

See also: sysBin; sysNewton.

User manual for Singular version 4.4.1, 2025, generated by texi2html.