Specialized decoding algorithms exist for differential code, those which are the duals of the standard algebraic-geometric codes. These algorithms generally require as input another divisor on the curve whose support is disjoint from the divisor defining the code.
Decode the received vector v of the dual algebraic geometric code C using the divisor Fd.
> q := 8; > F<a> := GF(q); > PS<x,y,z> := ProjectiveSpace(F, 2); > W := x^3*y + y^3*z + x*z^3; > Cv := Curve(PS, W); > FF<X,Y> := FunctionField(Cv); > Pl := Places(Cv, 1); > plc := Place(Cv ! [0,1,0]); > P := [ Pl[i] : i in [1..#Pl] | Pl[i] ne plc ]; > G := 11*plc; > C := AGDualCode(P, G); > > v := Random(C); > rec_vec := v; > rec_vec[Random(1,Length(C))] +:= Random(F); > res := AGDecode(C, v, 4*plc); > res eq v; true