none_equal(G0,G1,G2,G3,G4,G5) = { shit = vector(6,j,0); shit[1] = G0; shit[2] = G1; shit[3] = G2; shit[4] = G3; shit[5] = G4; shit[6] = G5; for(a = 1,6, for(b = 1,6, if(a != b && shit[a] == shit[b], return(0)); )); return(1); } find_some_curves() = { v = vector(5,j,S^(j-1)*T^(4-j+1)); vec = vector(31,j,0); n = 1; for(b1 =0,1, for(b2 =0,1, for(b3 =0,1, for(b4 =0,1, for(b5 =0,1, if(b1==0 && b2==0 && b3==0 && b4==0 && b5==0,, vec[n] = (b1*v[1] + b2*v[2] + b3*v[3] + b4*v[4] + b5*v[5]); n = n+1;); ))))); for(a1 = 1,31, for(a2 = 1,31, for(a3 = 1,31, for(a4 = 1,31, for(a5 = 1,31, for(a6 = 1,31, if(gcd(gcd(gcd(gcd(gcd(vec[a1],vec[a2]),vec[a3]),vec[a4]),vec[a5]),vec[a6])==1 && (Mod(1,2))*(vec[a1]^5 + vec[a2]^5 + vec[a3]^5 + vec[a4]^5 + vec[a5]^5 + vec[a6]^5) == 0 && none_equal(vec[a1],vec[a2],vec[a3],vec[a4],vec[a5],vec[a6]), print([vec[a1],vec[a2],vec[a3], vec[a4], vec[a5], vec[a6]]); print(find_splittingTypeE(vec[a1],vec[a2],vec[a3],vec[a4],vec[a5],vec[a6],4));print();); )))))); print("we are done") } find_splittingTypeE(G0,G1,G2,G3,G4,G5,d) = { return( 4 *(find_splittingTypeOmega(G0,G1,G2,G3,G4,G5,d) + [d,d,d,d,d]) + [d,d,d,d,d]) } find_splittingTypeOmega(G0,G1,G2,G3,G4,G5,d) = { local(r,j,i,m,e); e = vector(5); m = d; r = 0; i = 0; while(r < 5, rTemp = r; r = rTemp + hilbert_function(G0,G1,G2,G3,G4,G5,d,m) - i; j = 0; while(j < r - rTemp, e[rTemp + 1 + j] = -m; j++); i = i + rTemp + 2 *(r-rTemp); m++); return(e) } hilbert_function(G0,G1,G2,G3,G4,G5,d,m) = { local(G,A,i,j,k); G = [G0,G1,G2,G3,G4,G5]; A = matrix(m+1,(6) * (-d + m + 1)); i = 0; j = 1; k= 0; while(i <= 5, while(j <= -d + m + 1, while(k <= d, A[j + k,i*(-d + m + 1) + j] = polcoeff(polcoeff(G[i+1],d-k,S),k,T); k++); j++;k=0); i++;j=1); return((6 * (-d + m + 1) - matrank(A))) }