Goppa code

From HandWiki

In mathematics, an algebraic geometric code (AG-code), otherwise known as a Goppa code, is a general type of linear code constructed by using an algebraic curve X over a finite field 𝔽q. Such codes were introduced by Valerii Denisovich Goppa. In particular cases, they can have interesting extremal properties, making them useful for a variety of error detection and correction problems.[1]

They should not be confused with binary Goppa codes that are used, for instance, in the McEliece cryptosystem.

Construction

Traditionally, an AG-code is constructed from a non-singular projective curve X over a finite field 𝔽q by using a number of fixed distinct 𝔽q-rational points on 𝐗:

𝒫:={P1,,Pn}𝐗(𝔽q).

Let G be a divisor on X, with a support that consists of only rational points and that is disjoint from the Pi (i.e., 𝒫supp(G)=).

By the Riemann–Roch theorem, there is a unique finite-dimensional vector space, L(G), with respect to the divisor G. The vector space is a subspace of the function field of X.

There are two main types of AG-codes that can be constructed using the above information.

Function code

The function code (or dual code) with respect to a curve X, a divisor G and the set 𝒫 is constructed as follows.

Let D=P1++Pn, be a divisor, with the Pi defined as above. We usually denote a Goppa code by C(D,G). We now know all we need to define the Goppa code:

C(D,G)={(f(P1),,f(Pn)) : fL(G)}𝔽qn

For a fixed basis f1,,fk for L(G) over 𝔽q, the corresponding Goppa code in 𝔽qn is spanned over 𝔽q by the vectors

(fi(P1),,fi(Pn))

Therefore,

[f1(P1)f1(Pn)fk(P1)fk(Pn)]

is a generator matrix for C(D,G).

Equivalently, it is defined as the image of

{α:L(G)𝔽nf(f(P1),,f(Pn))

The following shows how the parameters of the code relate to classical parameters of linear systems of divisors D on C (cf. Riemann–Roch theorem for more). The notation ℓ(D) means the dimension of L(D).

Proposition A. The dimension of the Goppa code C(D,G) is k=(G)(GD).

Proof. Since C(D,G)L(G)/ker(α), we must show that

ker(α)=L(GD).

Let fker(α) then f(P1)==f(Pn)=0 so div(f)>D. Thus, fL(GD). Conversely, suppose fL(GD), then div(f)>D since

Pi<G,i=1,,n.

(G doesn't “fix” the problems with the D, so f must do that instead.) It follows that f(P1)==f(Pn)=0.

Proposition B. The minimal distance between two code words is dndeg(G).

Proof. Suppose the Hamming weight of α(f) is d. That means that for nd indices i1,,ind we havef(Pik)=0 for k{1,,nd}. Then fL(GPi1Pind), and

div(f)+GPi1Pind>0.

Taking degrees on both sides and noting that

deg(div(f))=0,

we get

deg(G)(nd)0.

so

dndeg(G).

Residue code

The residue code can be defined as the dual of the function code, or as the residue of some functions at the Pi's.

References

  • Key One Chung, Goppa Codes, December 2004, Department of Mathematics, Iowa State University.