Skip to content

Commit fe34675

Browse files
author
Release Manager
committed
Trac #34002: Sirocco and projective curves
Let `C`be a proyective plane curve with equation `F(x,y,z)=0` of degree `d`. The method `fundamental_group` computes the fundamental group of the complement. When the point `[0:1:0]` belongs to the curve it may produce wrong results. The computation works as follows. Consider the affine curve `f(x,y):=F(x,y,1)=0` and compute its fundamental group via the projection `(x,y)->x`. In this group we have an ordered system of generators `t1,...,td` and to pass from the fundamental group of the complement of the affine curve to the fundamental group of the complement of the projective curve it is enough to add as relation the ordered product of the generators. In order to apply it directly we need `[0:1:0]` outside the curve which is equivalent to have `f` to be of degree `d` in the variable `y` but up to now the method only checks if the maximal coefficient of `y` is a non-zero constant. The following example shows the problem. It computes the fundamental group of a quintic which is known to be finite and non-abelian by Degtyarev. {{{ sage: P.<x,y,z>=ProjectiveSpace(QQ,2) sage: f=z^2*y^3-z*(33*x*z+2*x^2+8*z^2)*y^2+(21*z^2+21*x*z-x^2)*(z^2+11*x *z-x^2)*y+(x-18*z)*(z^2+11*x*z-x^2)^2 sage: C=Curve(f) sage: C.fundamental_group() Finitely presented group < x0 | x0^3 > }}} If we make a change of coordinates to avoid this problem, everything is OK {{{ sage: f1=f(z=z+y) sage: g1p=Curve(f1).fundamental_group() Singularity detected. Abort Sirocco sage: g1p.order() 320 }}} URL: https://trac.sagemath.org/34002 Reported by: enriqueartal Ticket author(s): Miguel Marco Reviewer(s): Enrique Artal
2 parents 4cd8fa6 + c6b53ad commit fe34675

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/sage/schemes/curves/projective_curve.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1691,6 +1691,15 @@ def fundamental_group(self):
16911691
.. WARNING::
16921692
16931693
This functionality requires the ``sirocco`` package to be installed.
1694+
1695+
TESTS::
1696+
1697+
sage: P.<x,y,z>=ProjectiveSpace(QQ,2)
1698+
sage: f=z^2*y^3-z*(33*x*z+2*x^2+8*z^2)*y^2+(21*z^2+21*x*z-x^2)*(z^2+11*x*z-x^2)*y+(x-18*z)*(z^2+11*x*z-x^2)^2
1699+
sage: C = P.curve(f)
1700+
sage: C.fundamental_group() # optional - sirocco
1701+
Finitely presented group < x1, x3 | (x3^-1*x1^-1*x3*x1^-1)^2*x3^-1, x3*(x1^-1*x3^-1)^2*x1^-1*(x3*x1)^2 >
1702+
16941703
"""
16951704
from sage.schemes.curves.zariski_vankampen import fundamental_group
16961705
F = self.base_ring()

src/sage/schemes/curves/zariski_vankampen.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1018,7 +1018,12 @@ def fundamental_group(f, simplified=True, projective=False):
10181018
sage: fundamental_group(f) # optional - sirocco
10191019
Finitely presented group < x0 | >
10201020
"""
1021-
bm = braid_monodromy(f)
1021+
g = f
1022+
if projective:
1023+
x,y = g.parent().gens()
1024+
while g.degree(y) < g.degree():
1025+
g = g.subs({x : x + y})
1026+
bm = braid_monodromy(g)
10221027
n = bm[0].parent().strands()
10231028
F = FreeGroup(n)
10241029

0 commit comments

Comments
 (0)