１６個の要素をもつ体 GF (2^4) を用いて符号を構成する。

α は (α^4) + α + 1 をみたす数とする。

minimal = (α^4) + α + 1

GF (2^4) のすべての要素を加法表示と乗法表示したもののリストを作る。

additive=Table[
PolynomialMod[α^(14-i),{minimal ,2}],
{i,0,14}]~
Join~{0}

multiplicative=Table[α^(14-i),{i,0,14}]~
Join~{0}

toA は加法表示に直すため、toM は乗法表示に直すための関数。

toA[elem_]:=PolynomialMod[elem,{minimal ,2}]

For[i= 1, i<16,i++,toM0[additive[[i]]]=α^(15-i)];
toM0[0]=0;
toM[elem_]:=toM0[PolynomialMod[elem,{minimal ,2}]]

符号を生成する多項式(x-1)(x-α)…(x+α^5)

generator =Collect[Product[x+α^i,{i,0,5}],x,toM]

encode は9次元ベクトルを14次の符号多項式 （符号語） に直す関数。
まず9次元ベクトルから8次多項式を作り、それにx^6をかけて14次多項式を作り、
それを生成多項式で割ったあまりを足す。
decode はこれを元に戻す関数。生成多項式による商を取る。

encode[vector_]:=
PolynomialMod[
vector.Table[x^(Length[vector]+6-i),{i,1,Length[vector]}]+
PolynomialMod[vector.Table[x^(Length[vector]+6-i),{i,1,Length[vector]}],{generator,2}],2]

decode[polynomial_]:=
Map[toM,Table[Coefficient[polynomial,x,14-i],{i,0,8}]]

情報ベクトル１={{1,0,0,0},{0,1,1,0},{0,1,0,0},{0,0,1,0},{1,1,1,0},{1,0,0,0},{0,0,1,1},{1,1,0,1},{0,1,0,1}};

情報ベクトル２=Map[toM[#.Table[(α^((4-i))),{i,1,4}]]&,情報ベクトル１]

具体例：情報ベクトル２を14次の符号多項式に直す。

sent=Collect[encode[情報ベクトル２],x,toM]

Table[Coefficient[sent,x,14-i],{i,0,14}]

received=PolynomialMod[sent+(α^2)(x^2)+(α^12)(x^7)+(α^6)(x^12),2]

間違いを訂正せずにベクトルに戻してみる。

decode[received]

元と較べると

decode[sent]

シンドロームを計算する

(Subscript[s, 0])=toM[received/.x->1]
(Subscript[s, 1])=toM[received/.x->α]
(Subscript[s, 2])=toM[received/.x->(α^2)]
(Subscript[s, 3])=toM[received/.x->(α^3)]
(Subscript[s, 4])=toM[received/.x->(α^4)]
(Subscript[s, 5])=toM[received/.x->(α^5)]

誤りを解に持つ３次方程式を作る。

sigma=Det[{{(X^3),(X^2),X,1},{(Subscript[s, 3]),(Subscript[s, 2]),(Subscript[s, 1]),(Subscript[s, 0])},
{(Subscript[s, 4]),(Subscript[s, 3]),(Subscript[s, 2]),(Subscript[s, 1])},{(Subscript[s, 5]),(Subscript[s, 4]),(Subscript[s, 3]),(Subscript[s, 2])}}]

(α^i)を次々に代入し０になる場所を見る。

Table[PolynomialMod[sigma/.X->(α^i),{minimal,2}],{i,0,14}]

Solve[{(Subscript[e, 2])+(Subscript[e, 7])+(Subscript[e, 12])==(Subscript[s, 0]),
(α^2)(Subscript[e, 2])+(α^7)(Subscript[e, 7])+(α^12)(Subscript[e, 12])==(Subscript[s, 1]),
((((α^2)))^2)(Subscript[e, 2])+((((α^7)))^2)(Subscript[e, 7])+((((α^12)))^2)(Subscript[e, 12])==(Subscript[s, 2])},{(Subscript[e, 2]),(Subscript[e, 7]),(Subscript[e, 12])}]