Creation of an Algebraic Geometric Code#
- AlgebraicGeometricCode(S, D): [PlcCrvElt], DivCrvElt -> Code#
- AGCode(S, D): [PlcCrvElt], DivCrvElt -> Code#
Suppose \(X\) is an irreducible plane curve. Let \(S\) be a sequence of places of \(X\) having degree \(1\) and let \(D\) be a divisor of \(X\) whose support is disjoint from the support of \(S\). The function returns the (weakly) algebraic–geometric code obtained by evaluating functions of the Riemann–Roch space of \(D\) at the points of \(S\). The degree of \(D\) need not be bounded by the cardinality of \(S\).
- AlgebraicGeometricDualCode(S, D): [PlcCrvElt], DivCrvElt -> Code#
- AGDualCode(S, D): [PlcCrvElt], DivCrvElt -> Code#
Construct the dual of the algebraic geometric code constructed from the sequence of places \(S\) and the divisor \(D\), which corresponds to a differential code. In order to take advantage of the algebraic geometric structure, the dual must be constructed in this way, and not by directly calling the function
Dual.
- HermitianCode(q, r): RngIntElt, RngIntElt -> Code#
Given the prime power \(q\) and a positive integer \(r\), construct a Hermitian code \(C\) with respect to the Hermitian curve \(X = x^{(q+1)} + y^{(q+1)} + z^{(q+1)}\) defined over \({\bf F}_{q^2}\). The support of \(C\) consists of all places of degree one of \(X\) over \({\bf F}_{q^2}\), with the exception of the place over \(P = (1:1:0)\). The divisor used to define a Riemann–Roch space is \(r*P\).
- Example: Algebraic Geometric Code (ex-239058)#
We construct a \([25,9,16]\) code over \(F_{16}\) using the genus \(1\) curve \(x^3+x^2z+y^3+y^2z+z^3\).
> F<w> := GF(16); > P2<x,y,z> := ProjectiveSpace(F, 2); > f := x^3+x^2*z+y^3+y^2*z+z^3; > X := Curve(P2, f); > g := Genus(X); > g; 1 > places1 := Places(X, 1); > #places1; 25
We now need to find an appropriate divisor \(D\). Since we require a code of dimension \(k=9\) we take the divisor corresponding to a place of degree \(k+g-1 = 9\) (\(g\) is the genus of the curve).
> found, place_k := HasPlace(X, 9+g-1); > D := DivisorGroup(X) ! place_k; > C := AlgebraicGeometricCode(places1, D); > C; [25, 9] Linear Code over GF(2^4) Generator matrix: [1 0 0 0 0 0 0 0 0 w^9 w w^8 0 w^5 1 1 w^5 w^7 w^8 w^10 w^4 w^11 w^5 w^10 w^8] [0 1 0 0 0 0 0 0 0 w^4 w^5 1 w^10 w^4 w^11 w^12 0 1 w^2 w^4 w^6 w^4 w^5 w^14 w^4] [0 0 1 0 0 0 0 0 0 w^5 w^13 w^7 w^10 w^7 w^5 w^14 w^14 w 1 w^10 w^9 1 0 w^5 w] [0 0 0 1 0 0 0 0 0 w^8 w^3 w^3 w^12 w^7 w^10 w w^6 0 w^7 w^10 w^4 w^9 w^14 w^8 w^12] [0 0 0 0 1 0 0 0 0 w^8 1 w^4 w^7 w^5 w w^8 w w^5 w w^13 0 w^14 w^14 w^14 w^6] [0 0 0 0 0 1 0 0 0 1 1 w^12 w^14 w^9 w^10 w^6 w^6 w^7 w^10 w^4 w^3 w^13 w^13 w^3 w^4] [0 0 0 0 0 0 1 0 0 w w w^10 w^4 w^12 w w^13 w^4 w w^2 w^3 w^3 w^12 w^10 w^5 w^13] [0 0 0 0 0 0 0 1 0 w^13 w^6 w^12 w^2 w^3 w^7 w^3 w^4 w^14 w^4 w^11 w^4 w w^6 w^4 w^14] [0 0 0 0 0 0 0 0 1 0 w^11 w w^7 w^12 w^4 w^3 w^6 w^12 w^3 w^13 w^2 w^11 w^10 w^3 1] > MinimumDistance(C); 16
- Example: Algebraic Geometric Code (ex-24ba2f)#
We construct a \([44,12,29]\) code over \(F_{16}\) using the genus \(4\) curve \((y^2+xy+x^2)z^3+y^3z^2+(xy^3+x^2y^2+x^3y+x^4)z+x^3y^2+x^4y+x^5\) and taking as the divisor a multiple of a degree \(1\) place.
> k<w> := GF(16); > P2<x,y,z> := ProjectiveSpace(k, 2); > f := (y^2+x*y+x^2)*z^3+y^3*z^2+(x*y^3+x^2*y^2+x^3*y+x^4)*z+x^3*y^2+x^4*y+x^5; > X := Curve(P2, f); > g := Genus(X); > g; 4
We find all the places of degree \(1\).
> places1 := Places(X, 1); > #places1; 45
We choose as our divisor \(15*P1\), where \(P1\) is a place of degree \(1\). Before applying the AG-Code construction we must remove \(P1\) from the set of places of degree \(1\).
> P1 := Random(places1); > Exclude(~places1, P1); > #places1; 44 > D := 15 * (DivisorGroup(X) ! P1); > C := AlgebraicGeometricCode(places1, D); > C:Minimal; [44, 12] Linear Code over GF(2^4) > MinimumWeight(C); 29