|
This section contains descriptions of functions pertaining to the
creation and use of analytic Jacobians for hyperelliptic curves.
Suppose C is a curve of genus g defined over the complex
numbers. The analytic Jacobian of the curve is an abelian torus and is
constructed as follows: We view the complex points on the curve,
C(C), as a compact Riemann surface of genus g. It is known
that the dimension of the vector space of holomorphic differentials is
equal to the genus of the curve. So let φi, i = 1, 2, ... , g be a basis for this vector space and set /line(φ) =
()t(φ1, ..., φg), a vector of holomorphic 1-forms. For a
hyperelliptic curve there is a natural choice of holomorphic
differentials, namely φi = xi - 1dx/y. We can now define a
mapping (Int) : C -> Cg by P |-> intP^∞/line(φ). To remove the dependency of this
mapping on the path of integration, we define Λ to be the
image of the map from the first homology group of C, H1(C, Z), to
Cg which sends a closed path, σ ∈H1(C, Z), on the
Riemann surface to intσ /line(φ). Then Λ
turns out to be a lattice in Cg and so we get the complex torus
Cg/Λ. We then see that (Int) is a well-defined mapping from
C into Cg/Λ. We extend this mapping additively to the
divisors of degree zero on C. The Abel part of the Abel-Jacobi
theorem states that two divisors map to the same image under (Int)
if and only if they are linearly equivalent. The Jacobi part of the
theorem asserts that the map is onto. So there is a bijection between
the points of Cg/Λ and the points of the (algebraic) Jacobian.
So far the analytic Jacobian Cg/Λ is just a torus, but it
can be made into an abelian manifold by choosing a polarization. Let
A1, ..., Ag, B1, ..., Bg be a symplectic homology basis. That is,
the Ai and Bi are closed paths on the Riemann surface such that
all intersection numbers are 0 except that Ai intersects Bi
with intersection number 1 for each i. Let ω1 and
ω2 be the g x g-matrices with entries
(ω1)ij = intBj φi,
and
(ω2)ij = intAj φi.
Then the columns of P = (ω1, ω2) form a
Z-basis for the lattice Λ = P Z2g. The matrix P is
called the (big) period matrix. The space of complex, symmetric g x g
matrices with positive definite imaginary part is called the Siegel
upper-half space of degree g. Because we chose a symplectic basis
for the homology it follows that τ = ω2 - 1ω1 is an element
of Siegel upper half-space. We will refer to τ as the small period matrix.
Set
J = (0 1_g)
(-1_g 0).
If
we define E(P x, P y) = ()tx J y, for
any x, y ∈R2g, then E is a Riemann form for the torus
Cg/Λ and so the torus acquires a polarization. The
existence of a Riemann form on a torus is a necessary and sufficient
condition for the torus to be embeddable into projective space. The
image is isomorphic to the (algebraic) Jacobian.
In order
for the theory describing the map from the analytic Jacobian to the
algebraic Jacobian (see Mumford [Mum84]) to work we actually
need a special symplectic basis linked to a particular ordering of the
roots of the hyperelliptic polynomial. For an example of such a basis
see Mumford [Mum84, Chap III.5]. The basis used can be obtained
using the function HomologyBasis and the roots in the
corresponding order are stored as the attribute A`Roots (where
A is an analytic Jacobian).
Note: many of the function with analytic Jacobians use complex approximations,
and indelicacies involving these can cause the functions to fail. One common
remedy is to first transform the hyperelliptic curve before applying the
analytic Jacobian machinery, either by translating or by inverting
x -> 1/x. This can often have the effect of changing the internal
computations sufficiently that any errors are avoided.
Given f ∈C[x] where C is a complex field
(see Chapter REAL AND COMPLEX FIELDS),
this function returns the analytic Jacobian of the hyperelliptic curve
defined by y2 = f(x). The polynomial must have degree at least 3
and the complex field precision at least 20 and, for the moment,
less than 2000.
Returns the polynomial defining the hyperelliptic curve whose Jacobian is A.
HomologyBasis(A) : AnHcJac -> SeqEnum, SeqEnum, Mtrx
The symplectic homology basis used for the computation of the period
matrix of the Jacobian A. First assume that HyperellipticPolynomial(A)
has odd degree. The function HomologyBasis(A) returns three values
which we label basepoints, loops and S. Then
basepoints is a list of points in the complex
plane. The return valueloops is a list of 2g lists of indices
into basepoints. So the list [i1, i2, i3, ...] corresponds
to the loop consisting of joining the straight lines from basepoints[in] to basepoints[in+1] for i = 1, 2, ....
These closed loops form a homology basis for the curve but probably
not a symplectic basis. The third return value, S, is a matrix
giving the linear combinations of the loops that were used to form a
symplectic homology basis and to compute the period matrix.
If HyperellipticPolynomial(A) has even degree then
the returned homology basis is not for the Riemann surface for this
curve, but for the curve of odd degree obtained by sending a = A`InfiniteRoot to infinity through the linear fractional
transformation given by x |-> 1/(x - a). So one needs to apply the
inverse transformation to the returned basis in order to get the basis
that was used to compute the period matrix.
Genus(A) : AnHcJac -> RngIntElt
The dimension of the Jacobian A as a complex abelian variety. This
is equal to the genus of the curve C for which A is the Jacobian.
BaseRing(A) : JacHyp -> Rng
CoefficientRing(A) : JacHyp -> Rng
The base field of the Jacobian A.
The small period matrix of the analytic Jacobian A. If A has dimension g or
equivalently the hyperelliptic curve has genus g, then this is a
symmetric g x g matrix with positive definite imaginary
part. If P = (ω1, ω2) is the full period matrix (see
BigPeriodMatrix) then the small period matrix
is defined by ω2 - 1 ω1.
The full period matrix of the hyperelliptic curve of the Jacobian A. If A has dimension g or
equivalently the hyperelliptic curve has genus g, then this is a
g x 2g matrix. The analytic Jacobian as a torus equals
Cg/Λ, where Λ is the Z-lattice spanned by the
columns of the period matrix. The period matrix is computed with
respect to the holomorphic differentials φi = xi - 1dx/y and
a symplectic basis for the homology that can be retrieved using
HomologyBasis.
Precision: RngIntElt Default: 0
The complex period mapping to precision Precision, computed using n terms of q-expansion
and complex precision 30 if the optional parameter Precision is 0 (default)
or using an appropriate number of terms if Precision is non-zero.
The period map is a homomorphism M -> Cd, where d is the
dimension of A.
The period mapping attached to the space of modular symbols A, computed using n
terms of the q-expansions of modular forms associated to A. If the parameter
Precision is set to some positive integer, the parameter n is ignored. Instead,
the number of terms of the q-expansions needed to have a result of complex
precision Precision (i.e., < 10^(-(Precision))) is computed. The
period mapping is a homomorphism from AmbientSpace(A) to a complex vector
space of dimension equal to the number of newform conjugates.
Precision: RngIntElt Default: 0
The complex period lattice associated to M using n terms of the q-expansions
and complex precision 30 if the optional parameter Precision is 0 (default)
or using an appropriate number of terms is Precision is non-zero.
The complex period lattice associated to the space of modular symbols M, computed
using Precision terms of the q-expansions of modular forms associated to M.
If the parameter Precision is set to some positive integer, the parameter n is
ignored. Instead, the number of terms of the q-expansions needed to have a
result of complex precision Precision (i.e., < 10^(-(Precision)))
is computed.
Let A be the analytic Jacobian of y2 = f(x). This function maps
the point (x, y) on the curve to the analytic Jacobian. More
precisely, let a = ∞ when HyperellipticPolynomial
has odd degree and a = A`InfiniteRoot otherwise. Then it maps
the divisor (x, y) - (a, 0) to the analytic Jacobian. As any point on the
algebraic Jacobian is simply a sum of such divisors, we can get its
image by linearity of the map. The function returns a g x 1
matrix. This should be thought of as an element of Cg / Λ
where Λ is the Z-lattice generated by the columns of the
BigPeriodMatrix.
Let A be an analytic Jacobian of y2 = f(x), with small period
matrix τ. Let z be a g x 1 complex matrix (thought of as
an element of Cg / Λ where
Λ is the Z-lattice generated by the columns of the
BigPeriodMatrix). This function returns a list of g
(the dimension of A), or fewer,
pairs Pi = < xi, yi > satisfying y2 = f(x). This is an
element of the algebraic Jacobian when interpreted as the divisor
∑i=1g Pi - g∞.
We give an example of moving between the algebraic and analytic
Jacobians. We take two points on an algebraic Jacobian, map them
to the analytic Jacobian, add them there and map the answer back
to the algebraic Jacobian. We check that the answer corresponds
to adding the points on the algebraic Jacobian.
> P<x> := PolynomialRing(RationalField());
> f := -8*x^5 - 14*x^4 + 28*x^3 - 30*x^2 + 6*x;
> C := HyperellipticCurve(f);
> J := Jacobian(C);
> pts := ReducedBasis(RationalPoints(J:Bound:=500)); pts;
[ (x^2 + 1, -3*x + 5, 2), (x^2 - 4/9*x + 1/9, -55/27*x + 43/27, 2) ]
This Jacobian has rank 2 and these are two generators. We will use them as
our two points.
> P1 := pts[1]; P2 := pts[2];
> C<I> := ComplexField(50);
> K<x> := PolynomialRing(C);
> f2 := Evaluate(f,x);
> div1 := [r[1] : r in Roots(Evaluate(ElementToSequence(P1)[1],x))];
> div1 := [<d1,Evaluate(ElementToSequence(P1)[2],d1)> : d1 in div1];
> div2 := [r[1] : r in Roots(Evaluate(ElementToSequence(P2)[1],x))];
> div2 := [<d1,Evaluate(ElementToSequence(P2)[2],d1)> : d1 in div2];
> A := AnalyticJacobian(f2);
We are working with 50 decimal places. The sequences div1 and
div2 are the two points on the algebraic Jacobian represented
as pairs of < x, y > coordinates.
> pt1 := &+[ToAnalyticJacobian(d[1],d[2],A) : d in div1];
> pt2 := &+[ToAnalyticJacobian(d[1],d[2],A) : d in div2];
Now pt1 and pt2 are the images of the two points P1 and
P2 on the analytic Jacobian (two 2 x 1 matrices).
> sum := FromAnalyticJacobian(pt1+pt2,A);
> sum;
[ <0.62500000000000000000000000000000000000000000000024 +
-1.4999999999999999999999999999999999999999999999992*I,
1.7343750000000000000000000000000000000000000000053 +
-11.718749999999999999999999999999999999999999999985*I>,
<0.62500000000000000000000000000000000000000000000036 +
1.4999999999999999999999999999999999999999999999992*I,
1.7343750000000000000000000000000000000000000000075 +
11.718749999999999999999999999999999999999999999986*I> ]
Now we have mapped sum back to the algebraic Jacobian where it is
given as a sequence of two < x, y > coordinates.
We compare the polynomial having these two x-coordinates as
roots, with the algebraic sum of P1 and P2.
> clst := Coefficients((x-sum[1][1])*(x-sum[2][1]));
> xpol := P![BestApproximation(Re(c),1000) : c in clst];
> xpol;
x^2 - 5/4*x + 169/64
> P1+P2;
(x^2 - 5/4*x + 169/64, 125/16*x - 403/128, 2)
In this section we discuss the functionality provided for finding
isomorphisms and isogenies between different analytic Jacobians and
also for computing the endomorphism ring of an analytic Jacobian.
Suppose we have two abelian varieties A1 = Cg/Λ1 and A2
= Cg/Λ2 with a morphism φ : A1 |-> A2. This map
lifts to a map Cg |-> Cg, given by some complex g x g
matrix, α. This is called the complex representation of
φ. Suppose Λi is spanned by the columns of the g x 2g matrix Pi. As φ(Λ1) ⊂Λ2, we see that
there must exist an integral 2g x 2g matrix M such that
α P1 = P2 M. M is called the rational representation of
φ. If A1 and A2 are isomorphic and P1 and P2 are
Frobenius bases, that is, they provide a basis with respect to which
the polarization is given by the matrix J = (0 1_g; -1_g 0),
then it follows that M must be a symplectic matrix. That is, M
must be such that MJ()tM = J. The symplectic matrices act on Siegel
upper half-space. If M = (a b; c d)
is a symplectic matrix and τ an element of Siegel upper half-space,
then the action is given by τ |-> (a τ + b)(c τ +
d) - 1. Note that if there is an isomorphism from A1 to A2
with rational representation M then τ1 equals the result of
letting ()tM (not M) act on τ2.
In the case of finding isomorphisms between abelian surfaces, the code
makes use of a fundamental domain for 2-dimensional upper half-space
(see [Got59]). This often works well even with relatively low
precision. The other functions all rely on the function
LinearRelation and work with greater reliability if a high
precision is chosen. This also means that it can happen that these
functions miss finding a map. Even if a map is reported it might be
an artifact of insufficient precision causing LinearRelation
to identify a relation that disappears at higher precision. Of course,
every effort was made to make these functions work as well as
possible and no cases are known where sufficient precision fails
to give correct results.
Given a complex matrix in 2-dimensional Siegel upper half-space (that
is a symmetric matrix with positive definite imaginary part), this function
returns two matrices. The first is an element of the fundamental
domain for 2-dimensional Siegel upper half-space described by
Gottschling in [Got59] and the second is a symplectic
matrix that takes the input to the first return value. Note that if
the input is equivalent to an element on the border of the fundamental
domain the returned value might depend heavily on the least
significant digits of the input.
Given two small period matrices t1 and t2, this function returns a basis
for the Z-module of 2g x 2g integer
matrices M such that there exists a complex g x g matrix α
such that α (t1, 1) = (t2, 1) M.
For two small period matrices t1 and t2, this function finds a
2g x 2g symplectic integer matrix M such that there exists
a complex g x g matrix α such that α (t1, 1) = (t2, 1) M.
Such matrices define isomorphisms between the corresponding analytic
Jacobians. The first return value is true if such a matrix is found, false
otherwise. The second return value is the matrix, if found. Zero
matrix otherwise.
For two big period matrices P1 and P2, this function finds a
2g x 2g symplectic
integer matrix M such that there exists a complex g x g matrix
α such that α P1 = P2 M. Such matrices define isomorphisms
between the corresponding analytic Jacobians. The first return value is true
if such a matrix is found, false otherwise. The second and third
return values are M and α, if found.
For two analytic Jacobians A1 and A2 with big period matrices P1
and P2, this function finds a 2g x 2g symplectic integer matrix
M such that there exists a complex g x g matrix α such that
α P1 = P2 M. Such matrices define isomorphisms between the analytic
Jacobians. The first return value is true if such a matrix is found,
false otherwise. The second and third return values are M and α,
if found.
For two period matrices (small or big) P1 and P2, this function finds
a nonsingular 2g x 2g integer matrix M such that there exists a
complex g x g matrix α such that α (P1, 1) = (P2, 1) M,
in case of small period matrices, or α P1 = P2 M for big period
matrices. Such a matrix
defines an isogeny between the corresponding analytic Jacobians. The
first return value is true if such a matrix is found, false
otherwise. The second return value is M, if found. In the case of big
period matrices α is the third return value.
For two analytic Jacobians A1 and A2 with big period matrices P1
and P2, this function finds a nonsingular 2g x 2g integer matrix
M such that there exists a complex g x g matrix α such that
α P1 = P2 M. Such a matrix defines an isogeny between the analytic
Jacobians. The first return value is true if such a matrix is found,
false otherwise. The second and third return values are M and α,
if found.
This function returns the endomorphism ring, as a matrix algebra,
of the analytic Jacobian associated to the given period matrix P.
If a big period matrix, P, is given then it also returns a list
of α-matrices such that α P = P M, for each generator,
M, of the matrix algebra.
This function returns the endomorphism ring, as a matrix algebra, of
the given analytic Jacobian A. Suppose the analytic Jacobian has big period
matrix P. The second return value is a list of α-matrices
such that α P = P M, for each generator, M, of the matrix algebra.
We give an example of how magma can be used to find rational isogenies
between the Jacobians of genus 2 curves. Let us consider the two curves
y 2 = x 5 - 4x 4 + 8x 2 - 4x,
and
y 2 = x 5 + 4x 4 + 10x 3 + 12x 2 + x.
These are curves 1 and 3 in the twenty second isogeny class of
Smart [Sma97]. We compute their analytic Jacobians to 100 decimal
places.
> K<x> := PolynomialRing(RationalField());
> C<i> := ComplexField(100);
> KC<xc> := PolynomialRing(C);
> f1 := x^5 - 4*x^4 + 8*x^2 - 4*x;
> f1C := Evaluate(f1,xc);
> A1 := AnalyticJacobian(f1C);
> f2 := x^5 + 4*x^4 + 10*x^3 + 12*x^2 + x;
> f2C := Evaluate(f2,xc);
> A2 := AnalyticJacobian(f2C);
We now get a basis for the Z-module of isogenies from A1 to
A2. Note that IsIsogenous returns true for these two
Jacobians, but it does not return an isogeny defined over Q.
> Mlst := AnalyticHomomorphisms(SmallPeriodMatrix(A1),SmallPeriodMatrix(A2));
> Mlst;
[
[ 1 0 -1 0]
[ 0 1 0 0]
[ 1 1 1 0]
[ 1 1 -1 2],
[ 1 0 1 0]
[ 0 0 0 -1]
[-1 0 1 -1]
[ 1 2 1 -1],
[ 0 1 0 -1]
[ 1 0 0 0]
[ 1 1 0 1]
[ 1 1 2 -1],
[ 0 1 0 1]
[ 0 0 -1 0]
[ 0 -1 -1 1]
[ 2 1 -1 1]
]
>
For each of these four "M" matrices let us find the corresponding α
matrices.
> P1 := BigPeriodMatrix(A1);
> P2 := BigPeriodMatrix(A2);
> alst := [Submatrix(P2*Matrix(C,M),1,1,2,2)
> *Submatrix(P1,1,1,2,2)^-1 : M in Mlst];
> alst[1][1,1];
9.49857267318279326916448048991143479789137754919824276557860348643797948105949
8481543257426864218501E-101 + -1.4142135623730950488016887242096980785696718753
76948073176679737990732478462107038850387534327641573*i
>
So at least alst[1] does not correspond to a rational
isogeny. In general none of the four α-matrices might correspond to a
rational isogeny. But it is possible that some Z-linear combination of
them is defined over the rationals and we want to know whether this
actually happens. We can find out by recognizing the entries of the
α-matrices as algebraic numbers. This can be done using the PowerRelation function.
> SetDefaultRealFieldPrecision(100);
> pol := PowerRelation(C!alst[4][1,1],8:Al:="LLL");
> Evaluate(pol,x);
x^4 + 2*x^2 - 1
It turns out that every entry of each of the alst matrices is in the
number field defined by the polynomial x 8 + 12x 6 + 34x 4 + 52x 2 + 1.
We can use LinearRelation to write each entry as a
linear combination of the elements of a power basis for this number
field. For example:
> aroot := C!Roots(Evaluate(x^8 + 12*x^6 + 34*x^4 + 52*x^2 + 1,xc))[1][1];
> basis := [aroot^i : i in [0..7]];
> LinearRelation(Append(basis,alst[1][1,1]));
[ 0, 411, 0, 293, 0, 107, 0, 9, -40 ]
So we can write each α-matrix as an algebraic number in the
number field defined by x 8 + 12x 6 + 34x 4 + 52x 2 + 1. It is
then a simple matter to find a linear combination of the α-matrices
that is defined over Q. In this particular case we get lucky and
alst[3] itself is already rational:
> alpha := alst[3];
> alpha;
[1.1429873912822749822157835483053409594519099948227986612151258432276326359067
38195675448021860172030E-100 + 1.23928539763340698646676489320756860362798512
5201250666217517621001351893530963357790883492962362769E-100*i
-0.99999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999 + -1.186746029522145753827915120679934647863639129
872566393745293697438092777106745249196918175632802507E-100*i]
[-2.000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000 + 8.334710799700090834903499884806428065464872993741
227568734726305245439778438567887663105063271942125E-101*i
1.000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000 + -1.29064186778300376477121365149925086148800581946
5331943514008039451662739730964143625816137036994307E-100*i]
> Matrix(2,2,[Round(Real(x)) : x in Eltseq(alpha)]);
[ 0 1]
[ 2 -1]
So the two Jacobians are Q-isogenous. We can use alpha to map
points from the one Jacobian to the other. We check that it maps rational
points to rational points.
> C1 := HyperellipticCurve(f1);
> J1 := Jacobian(C1);
> pts1 := RationalPoints(J1:Bound:=500);
> pts1;
{@ (1, 0, 0), (x^2 - 2*x + 1, 1/2*x + 1/2, 2), (x^2 - 2*x + 1, -1/2*x - 1/2, 2),
(x, 0, 1), (x - 1, 1, 1), (x - 1, -1, 1), (x^2 - 2, 0, 2), (x^2 + 2, 4*x, 2),
(x^2 + 2, -4*x, 2), (x^2 - x, x, 2), (x^2 - x, -x, 2), (x^2 - 4*x - 2, 4*x, 2),
(x^2 - 4*x - 2, -4*x, 2), (x^2 - 4*x + 2, 0, 2), (x^2 - 9/4*x - 4, 3/8*x - 2,
2), (x^2 - 9/4*x - 4, -3/8*x + 2, 2), (x^2 - 52/9*x + 50/9, 152/27*x - 160/27,
2), (x^2 - 52/9*x + 50/9, -152/27*x + 160/27, 2), (x^2 + 16/25*x - 18/25,
152/125*x - 96/125, 2), (x^2 + 16/25*x - 18/25, -152/125*x + 96/125, 2) @}
> P1 := pts1[8]; P1;
(x^2 + 2, 4*x, 2)
> div1 := [r[1] : r in Roots(Evaluate(ElementToSequence(P1)[1],xc))];
> div1 := [<d1,Evaluate(ElementToSequence(P1)[2],d1)> : d1 in div1];
> pt1 := &+[ToAnalyticJacobian(d[1],d[2],A1) : d in div1];
> P2 := FromAnalyticJacobian(alpha*pt1,A2);
> clst := Coefficients((xc-P2[1][1])*(xc-P2[2][1]));
> xpol := K![BestApproximation(Re(c),10^50) : c in clst];
> xpol;
x^2 + x + 1
> C2 := HyperellipticCurve(f2);
> J2 := Jacobian(C2);
> pts2 := RationalPoints(J2:Bound:=500);
> pts2;
{@ (1, 0, 0), (x^2 + 2*x + 1, x - 1, 2), (x^2 + 2*x + 1, -x + 1, 2), (x + 1, 2,
1), (x + 1, -2, 1), (x, 0, 1), (x^2 + x, 2*x, 2), (x^2 + x, -2*x, 2), (x^2 + x +
1, 2*x - 1, 2), (x^2 + x + 1, -2*x + 1, 2), (x^2 - 23*x - 16, 122*x + 84, 2),
(x^2 - 23*x - 16, -122*x - 84, 2), (x^2 + 23/4*x + 9, 59/8*x + 57/2, 2), (x^2 +
23/4*x + 9, -59/8*x - 57/2, 2), (x^2 - 106/9*x + 1/9, 2599/54*x - 19/54, 2),
(x^2 - 106/9*x + 1/9, -2599/54*x + 19/54, 2), (x^2 - 9/16*x - 1/16, 269/64*x +
21/64, 2), (x^2 - 9/16*x - 1/16, -269/64*x - 21/64, 2) @}
Given a point pt on the Jacobian of a hyperelliptic curve over Q with
Analytic Jacobian AJ, return the image of pt under the Abel-Jacobi map of AJ,
i.e., a complex (g x 1)-column vector representing a point on the
complex torus associated to AJ.
Map the point on the Jacobian over a number field K to the analytic Jacobian
using the conj'th embedding of K into the complex numbers.
This function is the same as the previous one, except that the hyperelliptic
curve can be defined over a number field K and that the third parameter
gives the index of the embedding of K into the complex numbers.
This returns a divisor consisting of points on the projective curve
over the complex numbers with coordinates (x:y:z) corresponding to z.
This function is the same as FromAnalyticJacobian except that it returns
points in weighted projective space (P)1, g + 1, 1 where g is
the genus of the hyperelliptic curve X. In contrast to FromAnalyticJacobian,
it also works if the divisor on X representing the point has a point
lying on the line at infinity, i.e., z != 1.
Given a small period matrix t corresponding to an analytic Jacobian A
of genus g, this function returns a set S of 2g - 1 complex numbers
such that the hyperelliptic curve y2 = x(x - 1) ∏s ∈S (x - s)
has Jacobian isomorphic to A. The name of the function comes from the
fact that a hyperelliptic curve in the form
y2 = x(x - 1)(x - λ1)...(x - λ2g - 1) is said to be in
Rosenhain normal form.
We give an example of how magma can be used to find the equation of a
genus 2 curve whose Jacobian has Complex Multiplication by a given
field. We use the field Q(Sqrt( - 2 + √(2))).
> SetSeed(1);
> Q := RationalField();
> P<x> := PolynomialRing(Q);
> R<s> := NumberField(x^2-2);
> PP<x> := PolynomialRing(R);
> RF := NumberField(x^2-(-2+s));
> CMF<t> := AbsoluteField(RF);
> O := MaximalOrder(CMF);
Now, for a CM type Φ, and O the ring of integers,
C 2/Φ((O)) is a torus with Complex
Multiplication by the maximal order of our field
Q(Sqrt( - 2 + √(2))). In order for this to be an abelian variety
we have to find a principal polarization. This can be done using
Algorithm 1 in [Wam99]. In this case it turns out that a
principal polarization is essentially given by a generator of the
inverse different.
> D := Different(O);
> IsPrincipal(D);
true
> xi := -1/8*O.2; // a chosen generator of D^-1
> xi*O eq D^-1;
true
> auts := Automorphisms(CMF : Abelian := true);
> cc := auts[3];
> cc(cc(t)) eq t;
true
> cc(xi^2) eq xi^2;
true
So cc is complex multiplication and xi squared
is in the real subfield.
By Theorem 3 of [Wam99] we see that this gives a principal
polarization. We now find a Frobenius basis for our lattice with respect to
the non-degenerate Riemann form given by xi.
> Z := IntegerRing();
> E := Matrix(Z,4,4,[Trace(xi*cc(a)*b) : b in Basis(O), a in Basis(O)]);
> D, C := FrobeniusFormAlternating(E); D;
[ 0 0 1 0]
[ 0 0 0 1]
[-1 0 0 0]
[ 0 -1 0 0]
> newb := ElementToSequence(Matrix(O,C)*Matrix(O,4,1,Basis(O)));
> SetKantPrecision(O,100);
> Abs(Re(Conjugate(xi,2))) lt 10^-10 and Im(Conjugate(xi,2)) gt 0;
true
> Abs(Re(Conjugate(xi,4))) lt 10^-10 and Im(Conjugate(xi,4)) gt 0;
true
The CM type Φ is given by the second and fourth complex
embeddings. We can finally write down a big period matrix and find the
element in the Siegel upper half-space corresponding to our CM Jacobian:
> C := ComplexField(100);
> BigPM := Matrix(C,2,4,[Conjugate(b,2) : b in newb] cat
> [Conjugate(b,4) : b in newb]);
> tau := Submatrix(BigPM,1,3,2,2)^-1*Submatrix(BigPM,1,1,2,2);
We can use EndomorphismRing to check that the analytic Jacobian
corresponding to tau does have CM by the correct field:
> MA := EndomorphismRing(tau); Dimension(MA);
4
> MAGens := SetToSequence(Generators(MA)); MAGens;
[
[-1 0 0 0]
[ 0 -1 0 0]
[ 0 0 -1 0]
[ 0 0 0 -1],
[ 0 0 -17 -7]
[ 0 0 -7 -3]
[ 5 -12 0 0]
[-12 29 0 0]
]
> MP := [MinimalPolynomial(g): g in MAGens];
> IsIsomorphic(NumberField(rep{f: f in MP | Degree(f) gt 1}), CMF);
true
Now let us find a curve with this Jacobian.
> S := RosenhainInvariants(tau);
> P<x> := PolynomialRing(C);
> f := x*(x-1)*&*{x-a : a in S};
> IC := IgusaClebschInvariants(f);
> ICp := [BestApproximation(Re(r),10^50) : r in
> [IC[1]/IC[1], IC[2]/IC[1]^2, IC[3]/IC[1]^3, IC[4]/IC[1]^5]];
> ICp;
[ 1, 5/324, 31/5832, 1/1836660096 ]
> C1 := HyperellipticCurveFromIgusaClebsch(ICp);
> C2 := ReducedWamelenModel(C1);
> C2;
Hyperelliptic Curve defined by y^2 = -x^5 - 3*x^4 + 2*x^3 + 6*x^2 - 3*x - 1
over Rational Field
Let's check that this curve's analytic Jacobian is isomorphic to the one
corresponding to tau.
> P<x> := PolynomialRing(C);
> f := -x^5 - 3*x^4 + 2*x^3 + 6*x^2 - 3*x - 1;
> A := AnalyticJacobian(f);
> IsIsomorphicSmallPeriodMatrices(tau,SmallPeriodMatrix(A));
true
[ 1 -2 0 0]
[ 0 0 2 1]
[ 1 -2 5 2]
[ 2 -5 4 2]
This section describes two functions that are concerned with the
computation of Voronoi cells.
Delaunay(sites) : SeqEnum -> SeqEnum
This function computes the Delaunay triangulation for the sites given by
sites. The argument sites should be a sequence of pairs
(of type Tup) of real numbers. The real numbers should all belong
to the same real field. For n sites, a sequence of n sequences is
returned. The ith sequence contains the list of indices of the sites
to which site i should be joined to form the triangulation.
This function computes the Voronoi cells for the sites given by
sites. A Voronoi cell of a site consists of all those points
in the plane closer to that site than to any other. The argument
sites should be a sequence of pairs (of type Tup) of
real numbers. The real numbers can be either fixed precision or
free reals, but they should all be in the same real field.
Three sequences, siteedges, dualsites and cells are
returned. The sequence siteedges is what the intrinsic
Delaunay would have returned (so it defines the
Delaunay triangulation). The sequence dualsites
is a sequence of triples <x, y, m>, interpreted as follows: If
m is zero the triple represents the point x, y. If m
is non-zero the triple represents a point "at infinity" in
the direction of the vector x, y. For n sites, cells
is a sequence of n sequences. The ith sequence is a list
[i1, i2, i3, ..., im] such that the cell around site i is formed
by connecting dualsites[i1] to dualsites[i2], ... If a
cell is infinite the first and last indices in the sequence point to
infinite points. That is, the two infinite sides are given by the
lines (x0, y0) + t (x1, y1), for t ≥0 where (x0, y0)
equals dualsites[i2][1], dualsites[i2][2] and (x1, y1)
equals dualsites[i1][1], dualsites[i1][2] or (x0, y0)
equals dualsites[i{m-1][1], dualsites[i{m-1}][2]} and
(x1, y1) equals dualsites[im][1], dualsites[im][2].
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|