France, December 2012.

This package provides functions to compute models of genus 3 hyperelliptic
curves given by 9-uples of Shioda invariants over fields. All the twists are
returned when needed. The main file of the package is "package/g3twists.m".
Comments at the beginning of this file give further details about the
functions implemented.


A basic use of the package is as follows.

  Run magma (package tested with magma v2.17-2),

        > magma
        Magma V2.17-2     Fri Nov 18 2011 16:52:32 on birdy    [Seed = 328933904]
        Type ? for help.  Type <Ctrl>-D to quit.
        > 

  Attach the package

        > AttachSpec("package/spec");

  Compute Shioda Invariants [J2, J3, J4, J5, J6, J7, J8, J9, J10] of a genus 3
  hyperelliptic curve

        > _<x> := PolynomialRing(Rationals());
        > H := HyperellipticCurve(x^8+x^6-x^2+x-1);
        > JI := ShiodaInvariants(H);
	> JI;
        [ -29/14, 0, 158041/230496, 25/87808, 242163085/1084253184, -97577/14751744, 
        -12622697959/330576748544, -2165139797/1942981705728, 
        -750879849570517/62201321006039040 ]

  Conversely, given the first 6 free invariants J2, J3, J4, J5, J6, J7, compute
  all the possible algebraically compatible invariants J8, J9, J10 (here, there
  is only one solution, the one we start from);

        > JIs := ShiodaAlgebraicInvariants(JI[1..6]);
        > JIs;
        [
            [ -29/14, 0, 158041/230496, 25/87808, 242163085/1084253184, -97577/14751744,
            -12622697959/330576748544, -2165139797/1942981705728, 
            -750879849570517/62201321006039040 ]
        ]

  Reconstruct from these invariants a model, possibly defined over the field
  of muduli of the curve and the geometric automorphism group of the curve.

        > C, aut := HyperellipticCurveFromShiodaInvariants(JIs[1]);
	> aut;
	Symmetric group aut acting on a set of cardinality 2
        Order = 2
	
  Check that H and C are twists.

        > ShiodaInvariantsEqual(JI, ShiodaInvariants(C));
	true

  Compute the twists of an hyperelliptic curve over finite fields.

        > _<x> := PolynomialRing(GF(11));
	> H := HyperellipticCurve(x^8 + 14*x^4 + 1);
        > Cs, aut := TwistsOfGenus3HyperellipticCurve(H);
        > Cs;
        [
        Hyperelliptic Curve defined by y^2 = x^8 + 3*x^4 + 1 over GF(11),
        Hyperelliptic Curve defined by y^2 = 2*x^8 + 6*x^4 + 2 over GF(11),
        Hyperelliptic Curve defined by y^2 = x^8 + 5*x^7 + 3*x^6 + 7*x^5 + 9*x^4 + 
            9*x^3 + 8*x^2 + 2*x over GF(11),
        Hyperelliptic Curve defined by y^2 = 2*x^8 + 10*x^7 + 6*x^6 + 3*x^5 + 7*x^4 
            + 7*x^3 + 5*x^2 + 4*x over GF(11),
        Hyperelliptic Curve defined by y^2 = x^8 + 9*x^7 + 6*x^6 + 3*x^5 + 4*x^4 + 
            9*x^3 + 6*x^2 + x + 8 over GF(11),
        Hyperelliptic Curve defined by y^2 = 2*x^8 + 7*x^7 + x^6 + 6*x^5 + 8*x^4 + 
            7*x^3 + x^2 + 2*x + 5 over GF(11),
        Hyperelliptic Curve defined by y^2 = x^8 + 3*x^7 + 3*x^6 + 6*x^5 + 9*x^4 + 
            2*x^3 + 4*x^2 + 5*x + 3 over GF(11),
        Hyperelliptic Curve defined by y^2 = 2*x^8 + 6*x^7 + 6*x^6 + x^5 + 7*x^4 + 
            4*x^3 + 8*x^2 + 10*x + 6 over GF(11),
        Hyperelliptic Curve defined by y^2 = x^8 + 8*x^7 + 3*x^5 + 2*x^4 + 6*x^3 + 
            8*x^2 + 7*x + 1 over GF(11),
        Hyperelliptic Curve defined by y^2 = 2*x^8 + 5*x^7 + 6*x^5 + 4*x^4 + x^3 + 
            5*x^2 + 3*x + 2 over GF(11)
    ]

We provide also three additional scripts, "proofs-locus.m", "countenum.m" and
"parenum.m", which make use of this package.  

Type "magma proofs-locus.m", "magma parenum.m" or "magma p:=11 countenum.m"
for running them.

Comments at the top of these scripts describe more precisely how to use them.


R. Lercier
C. Ritzenthaler
