# 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 Fq-rational points of the curve.
• "rest": The Fq-rational 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
• The code CO(D,G).

### 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], the basis using C[LG].
• 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);       