CASA Function: GoppaPrimary
Prepares a primary Goppa code.
Calling Sequence:
 C := GoppaPrimary(C, D, G)
 C := GoppaPrimary(C, D, G, basis)
Parameters:
 C : casa/finite/Curve
 The curve to define the code.
 D : {casa/finite/Divisor, list, string}
 Points used to define the code. This can be a divisor, or a list of the points, or a string.
 The following strings are accepted:
 "affine": The affine Fqrational points of the curve.
 "rest": The Fqrational points of the curve, except those used by the divisor G.
 G : {casa/finite/Divisor, integer}
 Divisor used to define the code. If only an integer is specified, and the curve has only a single pont at infinty, then this is value taken to be the multiplicity of the single point at infinity.
 basis : {string, list}
 Method to determine the basis of L(G). Passed as additional argument to DivBasisL.
Result:
 C : casa/finite/Goppa/primary

Description:
 Prepares the primary Goppa code CO(D,G).
 The code is a table with the following entries:
 G: The generator matrix.
 GIn: The generator matrix, in RootOf form.
 H: The pariy check matrix.
 HIn: The pary check matrix, in RootOf form.
 C: The curve defining the code.
 LG: The divisor G and a basis of the space. The divisor can be accessed as C[LG][1], the basis using C[LG][2].
 P: The support of the divisor D, that is the points on which the rational function in L(G) are evaluated.
 n: The length of the code
 k: The dimension of the code
 d[Gamma], d_Gamma: The designed distance of the code
Examples:
> C1 := finiteCurve(x^3+y^2+y, finiteField(4));
> P1 := GoppaPrimary(C1, "affine", 4);
See Also:
[CASA]
[GoppaEncode]
[GoppaDecode]
[DivBasisL]