// The function NonADE takes a ring R and a squarefree homogeneous polynomial // in three variables F of even degree d with coefficients in R, // and it returns the non-ADE singular R-points of the projective // surface S defined as the double cover of IP^2 ramified above the curve // defined by F. function NonADE(R,F) // Check that the input is in the correct form assert IsHomogeneous(F); assert IsEven(Degree(F)); assert SquarefreePart(F) eq F; // Define base ring. A:=BaseRing(R); // Get the (even) polynomial degree d of F and compute d/2 d:=Degree(F); dd:=Numerator(d/2); // Define ambient space. PP:=WeightedProjectiveSpace(A,[1,1,1,dd]); // View double cover as hypersurface in weighted projective space. FF:=w^2-Evaluate(F,[x,y,z]); S:=Surface(PP,FF); // Compute the singular locus of S. SingS:=SingularSubscheme(S); // Consistency check: Check that S has no non-isolated singularities. // For surfaces, F being squarefree is equivalent to S:={w^2-F=0} having only isolated singularities. assert Dimension(SingS) eq 0; // Define list to store non-ADE singular points. SP:=[]; // Consider all singular points of the affine patch x=1 of S, and store all // non-ADE singularities in the list SP. Sx:=AffinePatch(S,4); SxSP:=SingularPoints(Sx); for P in SxSP do if not IsSimpleSurfaceSingularity(P) then Append(~SP,S!P); end if; end for; // Consider all singular points of the affine patch y=1 of S, and store all // non-ADE singularities in the list SP. Sy:=AffinePatch(S,3); SySP:=SingularPoints(Sy); for P in SySP do if not IsSimpleSurfaceSingularity(P) then Append(~SP,S!P); end if; end for; // Consider all singular points of the affine patch z=1 of S, and store all // non-ADE singularities in the list SP. Sz:=AffinePatch(S,2); SzSP:=SingularPoints(Sz); for P in SzSP do if not IsSimpleSurfaceSingularity(P) then Append(~SP,S!P); end if; end for; // Remove duplicate entries from SP SP:=[P : P in Set(SP)]; // Return all non-ADE singularities as a list of points or return. // If S is smooth or has at most ADE singularities, return the empty list. return SP; end function;