Properties of Riemann Surfaces

Contents

Basic Invariants

In this section functions that access information about a Riemann surface are described. While most of these functions apply to both types of Riemann surface, some only apply to non-superelliptic Riemann surfaces.

BasePoint(X) : RieSrf -> RieSrfPt
The base point of the Riemann surface X.
Genus(X) : RieSrf -> RngIntElt
The genus of the Riemann surface X.
Degree(X) : RieSrf -> RngIntElt
The degree of the holomorphic map to the projective line that is used to construct the Riemann surface X.
Precision(X) : RieSrf -> RngIntElt
The precision to which the Riemann surface X has been constructed.
Embedding(X) : RieSrf -> PlcNumElt
The complex embedding σ that is used to define the Riemann surface X.
BigPeriodMatrix(X) : RieSrf -> Mtrx
The big period matrix associated to the Riemann surface X.
SmallPeriodMatrix(X) : RieSrf -> Mtrx
    Check: BoolElt                      Default: true
The small period matrix associated with the Riemann surface X. If parameter Check is set to true, the small period matrix is checked to be a symmetric matrix (up to the prescribed precision) with a positive definite imaginary part.
FunctionField(X) : RieSrf -> FldFun
The function field of the defining polynomial of the Riemann surface X. This is only available for non-superelliptic Riemann surfaces.

Example RieSrf_invariants (H124E5)

Some of these intrinsics will be demonstrated. Note that while the computation of the Riemann surface invariants has used a precision of 100 decimal digits, for reasons of brevity the period matrices are printed to just 12 decimal digits.
>  Qt<t> := PolynomialRing(Rationals());
>  K<s> := NumberField(t^2 + 1);
>  y<x,y> := PolynomialRing(K,2);
>  f := -s^2*x^7 + 2*s*x^3*y + y^3;
>  sigma := InfinitePlaces(K)[1];
>  X := RiemannSurface(f,sigma : Precision:=100);
>
>  BasePoint(X);
(-2.000000000, -3.424546085 - 4.898716927*I)
>
>  Genus(X);
2
>
>  BigPeriodMatrix(X);
[ 1.57333990636 - 1.14309835298*I, -2.91713261396 + 0.706473634625*I,
-1.34379270760 + 1.84957198760*I, -0.371415169614 - 1.14309835298*I ]
[ -1.15879743459 - 0.376516110443*I, -1.87497363525 - 1.82764759203*I,
-0.716176200654 - 2.20416370247*I, -1.15879743459 - 1.59494783846*I ]
>
>  SmallPeriodMatrix(X);
[ -0.164199030444 + 0.817677768561*I, 0.683580096956 + 0.0368649791982*I ]
[ 0.683580096956 + 0.0368649791982*I, 0.449259709133 + 0.252676326408*I
>

Fundamental Group

Intrinsics for constructing the branch points and fundamental group are described. While most of these functions apply to both types of Riemann surface, some only apply to non-superelliptic Riemann surfaces.

DiscriminantPoints(f) : RngMPolElt -> SeqEnum[FldComElt]
DiscriminantPoints(f, sigma) : RngMPolElt, PlcNumElt -> SeqEnum[FldComElt]
DiscriminantPoints(X) : RieSrf -> SeqEnum[FldComElt]
The discriminant points of the defining polynomial with respect to the second variable embedded into C using an infinite place.
BranchPoints(X) : RieSrf -> Tup
The projections of the ramification points of the Riemann surface X to the projective line.
RamificationPoints(X) : RieSrf -> SeqEnum[RieSrfPt]
The ramification points of the ramified holomorphic map to the projective line used for the construction of X.
SingularPoints(X) : RieSrf -> SeqEnum
While the Riemann surface itself is non-singular, this function returns the projective coordinates of the singular points of the projective closure of the underlying affine curve.
FundamentalGroup(P) : SeqEnum[FldComElt] -> FldComElt, SeqEnum[FldComElt], SeqEnum[CPath], SeqEnum[SeqEnum[RngIntElt]]
    BasePoint: MonStgElt                Default: "Clever"
Given a set P of discriminant points this intrinsic returns a description of the fundamental group π1(C - P, x0) of the punctured complex plane with base point x0. The paths are constructed by modifying an euclidean spanning tree between the discriminant points by adding arcs and circles around the points. Options for BasePoint are "Clever" (positions the base point in the middle of the longest line segment), "Left" (base point on the negative real axis, left of all discriminant points) or a complex number specified by the user.
FundamentalGroup(X) : RieSrf -> SeqEnum[CChain]
    Extended: BoolElt                   Default: true
Given a Riemann surface X with discriminant points D = { x1 ... xk } and punctured surface S = C - D return the chains of paths in the complex plane that generate the fundamental group π1(S, x0), where x0 is the x-coordinate of the base point of X. If the parameter Extended is set to true, a chain around infinity is returned as well, therefore generating π1(P1(C) - (S ∪{ ∞ }), x0). The lifts of these chains represent a homology basis for X. This intrinsic is only available for non-superelliptic Riemann surfaces.
MonodromyRepresentation(X): RieSrf -> SeqEnum
A description of the monodromy of the Riemann surface X is returned.

Example RieSrf_riesrf-ex-1 (H124E6)

> Qxy<x,y> := PolynomialRing(Rationals(),2);
> f := -x^7 + 2*x^3*y + y^3;
> X := RiemannSurface(f);
> FG := FundamentalGroup(X);
> FG;
[
    Closed chain consisting of 4 paths starting at -2.000000000 around
    -1.034563716
    Permutation: (2, 3)
    Integrals: true
    ,
    Closed chain consisting of 11 paths starting at -2.000000000 around
    0.0000000000
    Permutation: (1, 3)
    Integrals: true
    ,
    Closed chain consisting of 17 paths starting at -2.000000000 around
    -0.3196977700 - 0.9839285636*I
    Permutation: (2, 3)
    Integrals: true
    ,
    Closed chain consisting of 15 paths starting at -2.000000000 around
    0.8369796280 - 0.6081012948*I
    Permutation: (1, 2)
    Integrals: true
    ,
    Closed chain consisting of 13 paths starting at -2.000000000 around
    0.8369796280 + 0.6081012948*I
    Permutation: (2, 3)
    Integrals: true
    ,
    Closed chain consisting of 11 paths starting at -2.000000000 around
    -0.3196977700 + 0.9839285636*I
    Permutation: (1, 2)
    Integrals: true
    ,
    Closed chain consisting of 71 paths starting at -2.000000000 around Infinity
    Permutation: (1, 3, 2)
    Integrals: true
]
> d := #FG;
> &*[ FG[k] : k in [1..d-1] ]^(-1) eq FG[d];
true
> [ FG[k]`Center : k in [1..d-1] ] eq DiscriminantPoints(X);
true
> M := MonodromyRepresentation(X);
> M;
[
    (2, 3),
    (1, 3),
    (2, 3),
    (1, 2),
    (2, 3),
    (1, 2),
    (1, 3, 2)
]
> #M eq #[ Chain`Permutation : Chain in FG | Order(Chain`Permutation) ne 1 ];
true
> &and[ Chain`StartPt eq Representation(BasePoint(X))[1] : Chain in FG ];
true

Basis for Period Matrix

In the case of a superelliptic Riemann surface, a basis of the form ωi, j = xi dx / yj is used. The condition on the pair (i, j) ∈Z2 is provided by [Neu18, Proposition 5.18]. Hence in this case, a tuple containing all the pairs [i, j] corresponding to such differentials is returned.

In the case of a Riemann surface, the function HomologyBasis returns a third value, namely the symplectic base change matrix that has been used for the computation of the big period matrix. The Riemann surface package always uses the canonical basis of the form

J = [ 0 I_g | -I_g 0 ].

HolomorphicDifferentials(X) : RieSrf -> Tup
This intrinsic computes the basis of holomorphic differentials used for the computation of the period matrix and the Abel--Jacobi map. The actual information returned depends upon whether X is superelliptic or not. The general (non-superelliptic) case will be considered first. If the genus g of X equals the number of integral points on the interior of the Newton polygon associated with its defining polynomial, the basis used consists of ω = xi yj dx / dy f(x, y) where (i, j) ∈Z2 consists of aforementioned integral points. In this case a tuple is returned that contains a list of the pairs [i, j] as first entry and dy f(x, y) as second entry.

In the case where the genus is not equal to the number of integral interior points if, for example, the projective curve is singular outside {(0:0:1), (0:1:0), (1:0:0)}, the basis used is that computed by the function field machinery, and embedded into C using the mapping σ. Let FFX denote FunctionField(X). Specifically, this intrinsic returns the basis calculated by the intrinsic BasisOfDifferentialsFirstKind(FFX) represented as products of irreducible factors: a list of irreducible factors [ a1, ..., ak ] for some k > 0 and a (k x g) integer matrix of multiplicities (bi, j) such that a basis is given by ωj = ∏i=1k aibi, j, j = 1, .., g.

Example RieSrf_riesrf-ex-1 (H124E7)

In the following example the projective closure of the affine curve is singular at (0:0:1) and (0:1:0), so that the first basis described above can be used.
> Qxy<x,y> := PolynomialRing(Rationals(),2);
> f := -x^7 + 2*x^3*y + y^3;
> X := RiemannSurface(f);
> HolomorphicDifferentials(X);
<[ [ 2, 2 ], [ 4, 1 ] ], 2*x^3 + 3*y^2>
However, if the singularity is moved to ( - 1:0:1), the basis as provided by the function field machinery is used. In the following example it can be easily seen that this function returns the corresponding product representation.
> f_trans := Evaluate(f,[x+1,y]);
> X_trans := RiemannSurface(f_trans);
> HolomorphicDifferentials(X_trans);
 < [ y, 2/3*x^3 + 2*x^2 + 2*x + y^2 + 2/3, x + 1 ],
    [ 1  0]
    [-1 -1]
    [ 1  3] >
> BasisOfDifferentialsFirstKind(FunctionField(X));
[ ((x) * (y) * (2/3*x^3 + y^2)^-1) d(x), ((x)^3 * (2/3*x^3 + y^2)^-1) d(x) ]

Example RieSrf_riesrf-ex-1 (H124E8)

The holomorphic differentials of the superelliptic Riemann surface of genus 21 defined by y8 = B(8) where B(n) is the n-th Bernoulli polynomial will be computed.
> p<x> := BernoulliPolynomial(8);
> p;
x^8 - 4*x^7 + 14/3*x^6 - 7/3*x^4 + 2/3*x^2 - 1/30
> X := RiemannSurface(BernoulliPolynomial(8),8);
> Genus(X);
21
> HolomorphicDifferentials(X);
<[ 0, 2 ], [ 0, 3 ], [ 1, 3 ], [ 0, 4 ], [ 1, 4 ], [ 2, 4 ], [ 0, 5 ],
 [ 1, 5 ], [ 2, 5 ], [ 3, 5 ], [ 0, 6 ], [ 1, 6 ], [ 2, 6 ], [ 3, 6 ],
 [ 4, 6 ], [ 0, 7 ], [ 1, 7 ], [ 2, 7 ], [ 3, 7 ], [ 4, 7 ], [ 5, 7 ]>
> Genus(X) eq #HolomorphicDifferentials(X);
true
HomologyBasis(L) : SeqEnum[GrpPermElt] -> SeqEnum[SeqEnum[RngIntElt]], Mtrx, Mtrx
    Check: BoolElt                      Default: true
Given a sequence L containing permutation generators of the monodromy group, the homology basis used for computing the period matrix is returned. Two objects are returned: a sequence of integer sequences each of which defines an element of the homology group and an intersection matrix. If the parameter Check is set true, several tests for correctness are performed.
HomologyBasis(X) : RieSrf -> SeqEnum[SeqEnum[RngIntElt]], Mtrx, Mtrx
    Check: BoolElt                      Default: true
Given a Riemann surface X the homology basis used for computing the period matrix is returned. Three objects are returned: a sequence of integer sequences each of which defines an element of the homology group, an intersection matrix and the symplectic base change matrix that has been used for the computation of the big period matrix. If the parameterCheck is set true several tests for correctness are performed.

Example RieSrf_homology-basis1 (H124E9)

In this example the homology basis will be computed from the monodromy representation.
> Qxy<x,y> := PolynomialRing(Rationals(),2);
> f := x^4*y^8 - x - y^8 + y^2 + 1;
> Chains := MonodromyRepresentation(f);
> MonRep := [ Ch`Permutation : Ch in Chains ];
> MonRep;
[
    (1, 2, 6, 8, 7, 3),
    (3, 5)(4, 6),
    (2, 4)(5, 7),
    (1, 2, 6, 8, 7, 3),
    (2, 4)(5, 7),
    (1, 2, 6, 8, 7, 3)(4, 5),
    (2, 5)(4, 7),
    (1, 5)(4, 8),
    (3, 5)(4, 6),
    (1, 2, 6, 8, 7, 3),
    (3, 5)(4, 6),
    (1, 7, 4, 3, 8, 2, 5, 6)
]

Using the permutation generators the monodromy group will be constructed.

> MonGroup := PermutationGroup< Degree(f,2) | MonRep >;
> IsTransitive(MonGroup);
true
> #MonGroup;
384
> Cycles, IntersectionMatrix := HomologyBasis(MonRep);
> Cycles[20];
[ 1, 4, 8, 1, 1 ]

The sequence of integers Cycles[20] above defines a non-trivial element of the homology group in the following way. It encodes a path starting on sheet 1, circling discriminant point d4 until one arrives at sheet 8, then continues circling discriminant point d1 until it returns to sheet 1. More explicitly, it can be expressed as the analytic continuation of the chain {Chains[4]}3 * {Chains[1]}3, starting and ending on the first sheet. Indeed, the permutation associated with the concatenation of chains turns out to be the identity:

> Chains[4]^3 * Chains[1]^3;
Closed chain consisting of 36 paths starting at
                              -0.5034246870 - 0.4967763264*I
Permutation: Id($)

Example RieSrf_homology-basis2 (H124E10)

The homology basis for the big period matrix will be computed for the Riemann surface X defined by the polynomial y2 + x3 - 1.
> Qxy<x,y> := PolynomialRing(Rationals(),2);
> X := RiemannSurface(y^2 + x^3 - 1);
> Cycles, IntersectionMat, SymplecticTransform := HomologyBasis(X);

The canonical homology basis is now found by matrix multiplication.

> SymplecticTransform * IntersectionMat * Transpose(SymplecticTransform);
[ 0  1  0]
[-1  0  0]
[ 0  0  0]
V2.28, 13 July 2023