New registered package VKcurve

This is to announce the package VKcurve which is a port to Julia of the GAP3 package VKcurve written by David Bessis and Jean Michel in 2002.

The main function computes the fundamental group of the complement of a complex algebraic curve in ℂ², using an implementation of the Van Kampen method (see for example

D. Cheniot. “Une démonstration du théorème de Zariski sur les sections hyperplanes d’une hypersurface projective et du théorème de Van Kampen sur le groupe fondamental du complémentaire d’une courbe projective plane.” Compositio Math., 27:141–158, 1973.

for a clear and modernized account of this method). Here is an example for curves given by the zeroes of two-variable polynomials in x and y.

julia> using Chevie, VKcurve

julia> @Mvp x,y

julia> fundamental_group(x^2-y^3)
Presentation: 2 generators, 1 relator, total length 6
1: bab=aba

julia> fundamental_group((x+y)*(x-y*im)*(x+2*y))
Presentation: 3 generators, 2 relators, total length 12
1: abc=bca
2: cab=abc

Here we define the variables and then give the curves as argument. Though approximate calculations are used at various places, they are controlled and the final result is exact; technically speaking, the computations use Rational{BigInt} or Complex{Rational{BigInt}} since the precision given by floats in unsufficient. It might be possible to use intervals of bigfloats to make faster computations, but it would make the programming more difficult. If you have a polynomial with float coefficients, you should convert the coefficients to Complex{Rational{BigInt}} (if they are of any integer or rational type, or of type Complex{<:Integer} they will be converted internally to Complex{Rational{BigInt}}).

The output is a struct which contains lots of information about the computation, including a presentation of the computed fundamental group, which is what is displayed by default when printing it.

Our motivation for writing this package in 2002 was to find explicit presentations for generalized braid groups attached to certain complex reflection groups. Though presentations were known for almost all cases, six exceptional cases were missing (in the notations of Shephard and Todd, these cases are G₂₄, G₂₇, G₂₉, G₃₁, G₃₃ and G₃₄). Since the existence of nice presentations for braid groups was proved (non-constructively) in

D. Bessis. “Zariski theorems and diagrams for braid groups.”, Invent. Math. 145:487–507, 2001

it was upsetting not to know them explicitly. In the absence of any good grip on the geometry of these six examples, brute force (using VKcurve) gave us we have obtained presentations for all of them (they have been confirmed by less computational methods since). These computations can be reproduced by fundamental_group(VKcurve.data[i]) where i∈{23,24,27,29,31,33,34}.

If you are not interested in the details of the algorithm, and if ‘fundamental_group’ as in the above examples gives you satisfactory answers in a reasonable time, then you do not need to read the manual any further.

3 Likes