|
This section covers the construction of the Abel--Jacobi map for Riemann surfaces
(intrinsic AbelJacobi).
For a Riemann surface X and a base point P0 ∈X the Abel--Jacobi map is defined as
A : X -> J = Cg / Λ, P |-> ( intP0P ωj )j = 1, .., g mod Λ
The Abel--Jacobi map extends to divisors on X by linearity and is independent of
the base point for divisors of degree 0. In particular, A(D) = 0 if and only if D
is a principal divisor.
AbelJacobi(DX) : DivRieSrfElt -> Mtrx
AbelJacobi(DF, X) : DivFunElt, RieSrf -> Mtrx
Reduction: MonStgElt Default: "Complex"
Method: MonStgElt Default: "Swap"
Let X be a Riemann surface, let P be a point on X and let B be the
base point returned by BasePoint. These intrinsics construct the
Abel--Jacobi maps with respect to base point B given either a point P,
a divisor DX of X, or a divisor DF of an associated function field
of X, respectively. The map is returned as a matrix.
In the case of non-superelliptic Riemann surfaces two options
are provided as to how the Abel--Jacobi map of ramification points should be handled.
If the parameter Method is assigned the value "Swap" and P=(x, y) then A(P) is
obtained by computing A'(y, x) where A' is the Abel--Jacobi map on X' : f(y, x)=0;
compare [Neu18, Para 4.9.3]. This method is numerically robust and is the default
option. However, if deg(f, x) gg deg(f, y), it might be a bad choice. The other option
is "Direct" which will try adaptive double-exponential integration as described in
[Neu18, Para 4.9.5]; it is completely heuristic and somewhat unstable but often
returns the correct results.
We provide several options for reduction modulo the period lattice. These are selected
by assigning one of the following three values to the parameter Reduction.
- (i)
- "None" : This will simply compute the vector of integrals in Cg x 1
and not reduce it at all. Note that this option is used internally and the results may not be
mathematically correct.
- (ii)
- "Real" : Returns the image of the Abel--Jacobi map in the canonical torus
R2g/Z2g as described in [Neu18, Para 4.9.6].
- (iii)
- "Complex" : The default value for Reduction. Returns the image of the
Abel--Jacobi map in Cg / Λ where Λ = < 1, τ >
and τ is the small period matrix associated to X.
Reduction: MonStgElt Default: "Complex"
Method: MonStgElt Default: "Swap"
Given points P and Q belonging to a Riemann surface X, the Abel--Jacobi map
for the divisor [Q - P] on X is computed. The possible values for the parameters
Reduction and Method are as given in the description of the previous
Abel--Jacobi intrinsic.
Reduction: MonStgElt Default: "Complex"
Method: MonStgElt Default: "Swap"
Let X be a Riemann surface with base point P and divisor D. The Abel--Jacobi
map is constructed on X with respect to the base point P. The possible values
for the parameters Reduction and Method are as given in the description
of the previous Abel--Jacobi intrinsic.
Using the Abel--Jacobi map for superelliptic curves of the form y m = p(x) we can
easily verify that the divisors are of the form D = P k - P j for m-torsion
divisors for ramification points P k and P j. We do this for the following
genus 16 example with precision set to 100 almost instantaneously.
> Qx<x> := PolynomialRing(Rationals());
> p := &*[ x - k : k in [1..10] ];
> m := 4;
> X := RiemannSurface(p,m : Precision:=100);
> D := X![Random([1..5]),0] - X![Random([6..10]),0];
> A := m * AbelJacobi(D:Reduction:="Real");
> &and[ Abs(c-Round(c)) lt X`Error : c in Eltseq(A) ];
true
or even more directly
> A := AbelJacobi(m * D : Reduction := "Complex");
> &and[ Abs(c) lt X`Error : c in Eltseq(A) ];
true
Or that the divisor D = ∑ k=1δ P ∞(k) is a m/δ-torsion
divisor, where δ = gcd(m, deg(p)):
> D := Divisor( InfinitePoints(X), [1, 1] );
> E := X![1] + X![2];
> D eq E;
true
> AJ := AbelJacobi(D : Reduction:="Real");
The projective coordinates of the points at infinity may be obtained by using the intrinsic
Coordinates. However, in our example these coordinates define a singular point on the
projective curve and so cannot be used to define a point on the Riemann surface:
> X!Coordinates(X![1]);
Runtime error in '!': Singular point of the projective closure.
> Coordinates(Random(InfinitePoints(X))) in SingularPoints(X);
true
Whenever projective coordinates correspond one-to-one to points on the Riemann surface,
i.e., they are non-singular points of the projective curve, they can be used to obtain
the coordinates of the points at infinity on the Riemann surface:
> X := RiemannSurface(LegendrePolynomial(4),4);
> InfinitePoints(X);
[
1st point at infinity,
2nd point at infinity,
3rd point at infinity,
4th point at infinity
]
> [ X!Coordinates(P) : P in InfinitePoints(X) ] eq InfinitePoints(X);
true
Let us now consider how to use the Abel--Jacobi map for general Riemann surfaces defined
over number fields. For example, we may verify that the Abel--Jacobi map of the principal
divisor (y - y1)/(y - y2) lies in the period lattice.
> Qxy<x, y> := PolynomialRing(Rationals(), 2);
> f := 2*x^3*y^5 + x^2*y^6 - 1;
> X := RiemannSurface(f);
> m := X`Degree[1];
> n := X`Degree[2];
> f := ComplexPolynomial(X);
> C<I> := BaseRing(Parent(f));
We now generate two random complex numbers y1 and y2.
> Ht := 10^5;
> y1 := Random([-Ht..Ht])/Random([1..Ht]) + I*Random([-Ht..Ht])/Random([1..Ht]);
> y2 := Random([-Ht..Ht])/Random([1..Ht]) + I*Random([-Ht..Ht])/Random([1..Ht]);
> F1 := RootsNonExact(UnivariatePolynomial(Evaluate(f, [Parent(f).1, y1])));
> F2 := RootsNonExact(UnivariatePolynomial(Evaluate(f, [Parent(f).1, y2])));
> S1 := []; S2 := [];
> for j in [1..n] do
> Append(~S1, X![F1[j], y1]);
> Append(~S2, X![F2[j], y2]);
> end for;
> D := &+S1 - &+S2;
> A := AbelJacobi(D);
> &and[ Abs(c) lt X`Error : c in Eltseq(A) ];
true
One of the highlights of the package is that one can directly compute the Abel--Jacobi
map of function field divisors. We will illustrate this using a genus 4 example defined
over a degree 3 number field:
> Qt<t> := PolynomialRing(Rationals());
> K<s> := NumberField(t^3 + 43274/61569*t^2 + 1024/6841*t + 9122/6841);
> Kxy<x, y> := PolynomialRing(K,2);
> f := 1/26116*(9985*s^2 + 49265*s - 17877)*x^3*y^4 + 1/34512*(26093*s^2 -
> 6604*s + 46087)*x*y^4 + 1/23026*(22829*s^2 + 2142*s - 18264)*x*y +
> 1/46947*(5011*s^2 + 5883*s - 39463)*x + 1/85753*(2423*s^2 - 21329*s
> + 41637);
> sigma := InfinitePlaces(K)[1];
> X := RiemannSurface(f, sigma : Precision := 50);
> FF<v, w> := FunctionField(X);
/* Take all infinite places in the function field */
> D1 := &+SetToSequence(Set(Poles(v) cat Poles(w)));
/* Take all infinite points on the Riemann surface */
> D2 := &+InfinitePoints(X);
> A1 := AbelJacobi(D1, X);
> A2 := AbelJacobi(D2);
> &and[ Abs(c) lt X`Error : c in Eltseq(A1-A2) ];
true
Another good test is to vereify that divisors of meromorphic functions always
map to the period lattice under the Abel--Jacobi map.
> A1 := AbelJacobi(Divisor(v), X);
> &and[ Abs(c) lt X`Error : c in Eltseq(A1) ];
true
> A2 := AbelJacobi(Divisor(w), X);
> &and[ Abs(c) lt X`Error : c in Eltseq(A2) ];
true
> A3 := AbelJacobi(Divisor(s^2*v^2*w+v/w/3), X);
> &and[ Abs(c) lt X`Error : c in Eltseq(A3) ];
true
One also might want to compute the Abel--Jacobi map of the canonical divisor, reduce it
modulo the small period matrix and then compute its multi-dimensional Theta function.
> D := CanonicalDivisor(FF);
> A := AbelJacobi(D, X : Reduction := "Complex");
Finally we define the desired characteristic and compute the Theta function!
> char := Transpose(Matrix([[ 1/2 : j in [1..2*Genus(X)]]]));
> Theta(char, A, SmallPeriodMatrix(X));
0.29810003713725582196195932655751593711064828563915 +
0.68480591255255827524715345957080419035255625041761*I
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|