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.
The base point of the Riemann surface X.
The genus of the Riemann surface X.
The degree of the holomorphic map to the projective line that is used to construct the Riemann surface X.
The precision to which the Riemann surface X has been constructed.
The complex embedding σ that is used to define the Riemann surface X.
The big period matrix associated to the Riemann surface X.
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.
The function field of the defining polynomial of the Riemann surface X. This is only available for non-superelliptic Riemann surfaces.
> 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 >
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.
The discriminant points of the defining polynomial with respect to the second variable embedded into C using an infinite place.
The projections of the ramification points of the Riemann surface X to the projective line.
The ramification points of the ramified holomorphic map to the projective line used for the construction of X.
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.
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.
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.
A description of the monodromy of the Riemann surface X is returned.
> 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
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 ].
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.
> 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) ]
> 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
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.
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.
> 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($)
> 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]