\\ input file for PARI/GP \\ list of the points points = [[1,2,3,4,5],[1,6],[1,7],[1,8],[2,6],[2,7],[2,8],[3,6],[3,7],[3,8],[4,6],[4,7],[4,8],[5,6],[5,7],[5,8],[6,7],[6,8],[7,8]] \\ canonical divisor K = [-3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] \\ curve of degree 8 with multiplicities at the points C = [8, 5, 0, 2, 2, 0, 2, 0, 2, 0, 0, 2, 0, 2, 2, 0, 2, 2, 2, 2] \\ lines numlines = 11 L=matrix(numlines,#C,i,j,0) L[1,]=[1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] L[2,]=[1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0] L[3,]=[1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0] L[4,]=[1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0] L[5,]=[1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0] L[6,]=[1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,1,0] L[7,]=[1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,1] L[8,]=[1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,1] L[9,]=[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0] L[10,]=[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0] L[11,]=[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1] \\ self-intersection of the lines selfint = [-2,-1,-1,-2,-2,-3,-4,-3,-1,-1,-1] \\ ad_m(C) adjoint = m*(K+C) \\ remove negative values from adjoint for(i=1,#adjoint, if(polcoeff(adjoint[i],1,m)<0,{adjoint[i]=0})) \\ algorithm that computes recursively which line splits from the adjoint linear system totalsplit = vector(numlines) partialsplit = vector(numlines) issplit = true while(issplit && polcoeff(adjoint[1],1,m)>0, \ issplit = false; \ for(i=1,numlines, partialsplit[i] = 0); \ for(i=1,numlines, intersection = adjoint[1]*L[i,1]-sum(j=2,#adjoint,adjoint[j]*L[i,j]); \ if(polcoeff(intersection,1,m)<0, \ {issplit = true; partialsplit[i]=intersection/selfint[i]})); \ print(adjoint,partialsplit); \ for(i=1,numlines, totalsplit[i]=totalsplit[i]+partialsplit[i]; \ for(j=1,#adjoint,adjoint[j]=adjoint[j]-L[i,j]*partialsplit[i]; \ if(polcoeff(adjoint[j],1,m)<0,adjoint[j]=0)))); print(adjoint,totalsplit)