Algebraic Curves
>


>


When f is a polynomial in x and y, then f defines an algebraic curve in a plane.
>


 (1) 

Puiseux Expansion


The function has two singularities and one regular point on the line . We can obtain information (such as the tangent lines, the delta invariant, and other invariants) on singularities by computing the Puiseux expansions. One can view these Puiseux expansions as a sort of Taylor expansion (note that Puiseux expansions can also have fractional powers of x, whereas a Taylor expansion does not) of the algebraic function RootOf(f, y). Because this algebraic function is multivalued, we will get several expansions corresponding to the different branches of at . The following command gives these expansions of at :
>


 (1.1) 
The fourth argument tells puiseux to compute a minimal number of terms. The number of terms that will be computed in this way is precisely the number of terms that are required to be able to distinguish the different Puiseux expansions from one another.
Note: It appears as though only three different Puiseux expansions were given, whereas the function has five different branches. The other two expansions are implicitly given by taking the conjugates of these expansions over the field Q((x)).
>


 (1.2) 
This command means the following: Give the Puiseux expansions up to accuracy 3, which means modulo . So the coefficients of are given, but not the coefficients of . To view the terms of the Puiseux expansions, we must compute the Puiseux expansions up to accuracy > 3.
>


 (1.3) 
As one can see from the Puiseux expansions, the point , is singular, because two Puiseux expansions are going through this point:
and its conjugate. Similarly, is a singular point.


Singularities


>


 (2.1) 
The output consists of lists of the form [ the location of the singularity, the multiplicity, the delta invariant, the number of local branches ]. The location is given as a list of three homogeneous coordinates, (x, y, z). The points (x, y, 1) are points in the affine plane , where is the field of constants. The points (x, y, 0) are on the line at infinity. (In this example, there are no singularities at infinity.)
A point is singular if and only if the multiplicity of that point is > 1, and also if and only if the delta invariant is > 0. In this example, all of the singularities are double points. A double point has multiplicity 2 and delta invariant 1.


Genus


The genus of an algebraic curve equals minus the sum of the delta invariants. Because these have already been determined by the previous command, computing the genus is easy now:
>


 (3.1) 
The genus only depends on the algebraic function field of the curve. This field does not change if we apply birational transformations, so the genus is invariant under such transformations. This means, for example, that must have genus 0 as well:
>


 (3.2) 
>


 (3.3) 


Parametrization for Curves with Genus 0


An irreducible algebraic curve allows a parametrization if and only if the genus is 0. A parametrization is a birational map from the projective line (= the field of constants union {infinity}) to the algebraic curve. This map is 11, except for a finite number of points. It is a 11 map between the places of the projective line and the places of the algebraic curve .
>


 (4.1) 
This parametrization algorithm computes a parametrization over an algebraic extension of the constants of degree <= 2 if degree(f,{x,y}) is even, and a rational (that is, no field extension) parametrization if the degree of the curve is odd, as in this example.
If we substitute an arbitrary number for (avoiding roots of the denominators to avoid "division by zero" messages), we get a point on the curve.
>


 (4.2) 
Verify if this is indeed a point on the curve:
>


 (4.3) 


Integral Basis


The function field of an irreducible algebraic curve f can be identified with the field C(x)[y]/(f). This is an algebraic extension of C(x) of degree degree(f,y). In some applications (integration of algebraic functions and the method that algcurves[parametrization] uses), one must be able to recognize the poles of elements in the function field. For this purpose, one can compute a basis (as a C[x] module) for the ring of functions in C(x)[y]/(f) that have only poles on the line at infinity. This basis is computed as follows:
>


>


 (5.1) 
Note: This did not require computation time because it has already been determined for use in the parametrization algorithm. The map( normal, b ) command makes the output look somewhat smaller.
The integral basis has a factor in the denominator if and only if there is a singularity on the line x=RootOf(k). This can only happen if divides the discriminant discrim(f, y). The integral basis contains information about the singularities in a form that is useful for computations. The advantage of this form is that it is rationalone requires no algebraic extensions of the field of constants to denote the integral basis, whereas we do need algebraic numbers to denote the Puiseux expansions.
Suppose that we are only interested in the singularities on the line x=0. Then we can compute a local integral basis for the factor . A local integral basis for a factor is a basis for all elements in the function field that are integral over C[[]]. An element of the function field is integral over C[[]] if it has no pole at the places on the line .
>


 (5.2) 
An example of the kind of information that the integral basis contains is the sum of the multiplicities of the factor in the denominators. This sum equals the sum of the delta invariants of the points on the line . So this local integral basis for the set of factors {x} tells us that the sum of the delta invariants on the line x=0 is 2.


Homogeneous Representation


Until now an algebraic curve was represented by a polynomial in two variables, x and y. An algebraic curve is normally not viewed as lying in the affine plane (where C is the field of constants), but in the projective plane (C). The notation as a nonhomogeneous polynomial in two variables is convenient if we want to study the affine part of the curve (for example, in the integral basis computation), but not if we are interested in the part of the curve on the line at infinity. Often (for example, for computing the genus), the part of the curve at infinity is needed as well. The nonhomogeneous notation in two variables can be converted to the homogeneous notation as follows:
>


 (6.1) 
This can be converted again to f with
>


 (6.2) 
Now the line at infinity is the line z=0 on homogeneous(f,x,y,z).
>


 (6.3) 
By switching x and z we can move the line x=0 to infinity.
>


 (6.4) 
>


 (6.5) 
We see that now there are two singularities at infinity, namely (1,0,0) and (1,1,0). This may look different in the output of singularities, because in homogeneous coordinates, the points (x, y, z) and () are the same for nonzero .
>


This curve is given as a homogeneous polynomial; however, the input for the algorithms in this package must be the curve in its nonhomogeneous representation:
>


 (6.6) 
This polynomial is a curve of degree 10 having a maximal number of cusps according to the Plucker formulas. It was found by Rob Koelman. It has 26 cusps and no other singularities.
>


 (6.7) 
Now check if these points are indeed cusps. The multiplicities are 2 and the delta invariants are 1, so that part is correct. To decide if these points are cusps, we can use Puiseux expansions. Take one of these points:
>


 (6.8) 
Now compute the Puiseux expansions at the line x = <the x coordinate of this point> :
>


 (6.9) 
To obtain the y coordinates of the points on the line from this, we need only substitute .
>


 (6.10) 
We see that there are eight different points on this line. The stands for six conjugated points (namely the roots of the polynomial inside the ). However, the expression is only one point, because our field of definition is not anymore, but . This is because we needed to extend the field to be able to "look" on the line x=.
The Puiseux series in this set (which have only been determined up to minimal accuracy) are series (with fractional powers) in (). Substitute the following to get series in x instead of in (). That makes it somewhat easier to read.
>


 (6.11) 
For determining the type of the singularity, the coefficients here are not relevant. We have an expansion of the form
The higher order terms (which have not yet been determined) have no influence on the type of the singularity, nor do the precise values of these constants. These expansions show that there are six regular points on this line and two cusps.
One can easily get more terms of the Puiseux expansions, although that is not necessary for determining the type of the singularities.
>


 (6.12) 
We see that if we compute more terms, the results can get bigger quickly.


Graphics: Singularity Knots


A different way to show information about a singularity is the plot_knot command. The input of this procedure is a polynomial f in and , for which the singularity that we are interested in is located at . For example, the curve on the top of this worksheet has a singularity at 0, a double point.
>


 
The curve is irreducible, and so it consists of only one component. But locally, around the point 0, it has two components. Information on these components and their intersection multiplicities can be given in the form of Puiseux pairs, obtained by computing the Puiseux expansions. A different way of representing this information is as follows: By identifying with , the curve can be viewed as a twodimensional surface over the real numbers. Now we can draw a small sphere inside around the point 0. The surface of the sphere has dimension 3 over R. The intersection with the curve (which has dimension 1 over the complex numbers, so dimension 2 over the real numbers) consists of a number of closed curves over the real numbers, inside a space (the sphere surface) of dimension 3. After applying a projection from the sphere surface to , these curves can be plotted. (See also: E. Brieskorn, H. Knorrer: Ebene Algebraische Kurven, Birkhauser 1981.)
In this plot, each component will correspond to one of the local components. Furthermore, the winding number in the plot equals the intersection multiplicity of the two branches of the curve. In this example this number is 1. Of course, we want to see more complicated 3D plots. For this, we need only make the singularity more complicated, and the intersection multiplicities of the branches higher. Because we are interested in the curve only locally, it does not matter if the curve is irreducible. However, the input of plot_knot must be squarefree.
>


We see that a cusp gives a 23 torus knot. More generally, if , then gives a pq torus knot.
It gets more interesting when we have plots consisting of more components. For this, we need only have a singularity consisting of more components. In this example, we start with a 23 torus knot using . To obtain a high intersection multiplicity, we add a high power of , and multiply these two components. Then we get:
>


Getting good plots sometimes requires tweaking with the various options (see plot_knot), or changing some of the coefficients (for example, the coefficient of ). Plot options can be experimented with interactively by clicking the plot and using the plot menus, or rightclicking the plot. A useful option is Light Schemes available using the Color menu (or specified as the lightmodel option to the plot_knot call).


Weierstrassform, j_invariant


>


 (8.1) 
>


 (8.2) 
>


 (8.3) 
>


 (8.4) 
For curves with genus , one can compute a parametrizationa bijection between the curve and a projective line. One can view this projective line as a normal form for curves with genus . For curves with genus , we can also compute a normal form, the Weierstrass normal form. In this form the curve is written as F= (polynomial in of degree ). To avoid ambiguity, we will denote the Weierstrass normal form with the variables and instead of and .
>


 (8.5) 
Now the curves f and F are birationally equivalent. The Weierstrass form algorithm computes such an equivalence in two directions, [w[2] , w[3]] is a morphism from f to F, and [w[4] , w[5]] is the inverse morphism. Check this for the point (2,2,1) on .
>


 (8.6) 
Now check if this is on F:
>


 (8.7) 
Now try the inverse, and see if we get the point (2,2,1):
>


 (8.8) 
The Weierstrassform procedure handles hyperelliptic curves as well. A curve f is called hyperelliptic if and only if the genus is >1 and f is birational to a curve F of the form where P is a polynomial in X. This means that the algebraic function field C(x)[y]/(f) is isomorphic to C(X)[Y]/(F). So this is similar to the elliptic case, the only difference is that the degree of F is higher.
The procedure is_hyperelliptic tests if a curve f is hyperelliptic.
>


 (8.9) 
>


 (8.10) 
>


 (8.11) 
>


 (8.12) 
>


 (8.13) 
>


 (8.14) 
The curve given by h is birational to the curve F. The other entries of W give the images of x, y, X, and Y under the isomorphism and inverse isomorphism from C(x)[y]/(h) to C(X)[Y]/(F).


Further Results


In the subsequent sections, the following additional functions of algcurves are demonstrated:
differentials: Compute basis of holomorphic differentials
homology: Compute canonical basis of the homology.
is_hyperelliptic: Test if a curve is hyperelliptic.
monodromy: Compute the monodromy.
periodmatrix: Determine the periodmatrix (Riemann matrix).
The algebraic function field L of the following curve is the field of all meromorphic functions on the algebraic curve (Riemann surface). It is the fraction field of the ring C[x,y]/(f), where C is the field of complex numbers. We can write L=C(x)[y]/(f). The category of Riemann surfaces is equivalent to the category of algebraic curves, and also equivalent to the category of algebraic function fields.
>


 (9.1) 
Now L is an algebraic extension of C(x) of degree 4. By interchanging the roles of x and y we can also view L as an algebraic extension of C(y) of degree 6.


Holomorphic Differentials


A regular point on the curve corresponds to one point on the Riemann surface. A singular point corresponds to one or more points on the Riemann surface. These points can be represented by Puiseux expansions.
>


 (10.1) 
>


 (10.2) 
>


 (10.3) 
>


 (10.4) 
>


 (10.5) 
>


 (10.6) 
>


 (10.7) 
The following function A has a pole at one of the two points P1, P2 on the Riemann surface.
>


 (10.8) 
>


 (10.9) 
>


 (10.10) 
The following is a basis for all functions that have no poles at all points where x has no pole.
>


 (10.11) 
>


 (10.12) 
>


 (10.13) 
>


 (10.14) 
A differential is an expression "A * dx" where A is an element of L. Using a Puiseux expansion with local parameter T we can write it as A(T) * dT. If A(T) has no poles at any point, then the differential A*dx is called holomorphic. A basis of the holomorphic differentials is given by:
>


 (10.15) 
>


 (10.16) 
Now we will verify using Puiseux expansions that this differential (which has no poles anywhere on the Riemann surface) has no poles at P1 or P2.
>


 (10.17) 
>


 (10.18) 
>


 (10.19) 
>


 (10.20) 
>


 (10.21) 
>


 (10.22) 
We see that the differential dif1 has no pole at P1 and P2. It should also have no poles at infinity, which we can verify as follows.
>


 (10.23) 
>


 (10.24) 
>


 (10.25) 
>


 (10.26) 
>


 (10.27) 
>


 (10.28) 
>


 (10.29) 
>


 (10.30) 


The Monodromy


Let f be a polynomial in x and y. If we take a point x=b, then subs(x=b,f) will in general have n different solutions , where . The points where there are fewer than n different solutions are called discriminant points, since they are roots of .
Let b be some fixed point that is not a discriminant point, and let be the solutions of f at x=b, obtained by: fsolve(subs(x=b,f),y,complex). If we take a path, starting at b, avoiding all , going in a loop around one discriminant point , then we can analytically continue along this path. When we return to b, this analytic continuation will transform into new solutions of subs(x=b,f). Since the solutions in the complex numbers of subs(x=b,f) are unique up to permutations, the analytic continuation of along this path will result in a permutation of . If this permutation is nontrivial then is called a branch point.
The monodromy procedure will compute these permutations for all branch points .
The group generated by these permutations is isomorphic to the Galois group of C(x)[y]/(f) over C(x), where C stands for the complex numbers.
>


 (11.1) 
Now M[1] is the basepoint.
M[2] are the solutions of fsolve(subs(x=M[1],f),complex).
M[3] is a list with elements of the form [, permutation for ].
The group generated by these permutations is:
>


 (11.2) 
G is the Galois group of C(x)[y]/(f) over C(x). This is a subgroup of the Galois group H of Q(x)[y]/(f) over Q(x).
>


 (11.3) 
We see that G is a subgroup of H with index 2. This means that the intersection of the complex numbers C with the splitting field of f over Q(x) is a quadratic extension of Q. This quadratic extension is Q(I) because the splitting field of f over Q(x) is Q(x, I, RootOf(f,y)), which we can verify by:
>


 (11.4) 


The Homology


Given the homology, one can determine closed paths, called cycles, on the Riemann surface. The procedure homology computes 2*g cycles that form a canonical basis of the homology of the Riemann surface. Every closed path on the Riemann surface is homologically equivalent to a Zlinear combination of these 2*g cycles.
>


 (12.1) 


The Period Matrix


If omega is a holomorphic differential, then its periods defined by the integrals of omega over closed paths on the Riemann surface. A basis (as a Zmodule) of the periods of omega is obtained by integrating omega over every element of the homology basis.
The basis of the holomorphic differentials contains g elements.
The homology basis has 2*g elements.
By computing the integrals of these g holomorphic differentials over these 2*g paths, we get 2g by g integrals, which form a matrix called the period matrix.
>


 (13.1) 
By taking a different basis of the holomorphic differentials we can obtain a normalized period matrix of the form (I, Z) where I is the g by g identity and where the g by g matrix Z is called the Riemann matrix.
>


 (13.2) 
>


 (13.3) 
>


 (13.4) 
>


In this example we can give an exact Riemann matrix. In most cases the entries of the Riemann matrix will be transcendental numbers that can only be computed approximately. The accuracy will depend on the global variable Digits. Increasing this value will lead to more accurate digits, but also to a longer computation time.
The algebraic curve f is determined up to birational equivalence by the matrix P and also by the matrix Z. A curve is birational to f if and only if its Riemann matrix is equivalent (not necessarily equal) to Z.

Return to Index of Example Worksheets
