
D.5.1.1 adjointIdeal
Procedure from library paraplanecurves.lib (see paraplanecurves_lib).
 Usage:
 adjointIdeal(f [, choices]); f polynomial in three variables, choices
optional list consisting of one integer or of one string or of one
integer followed by one string.
Optional integer can be:
1: compute integral basis via normalization.
2: make local analysis of singularities first and apply normalization
separately.
3: normalization via ideal quotient.
4: normalization via local ideal quotient.
The default is 2.
Optional string may contain substrings:
 rattestyes > causes error message if curve is not rational.
 firstchecksdone > prevents that check of assumptions will be done
more than once.
 Assume:
 The basering must be a polynomial ring in three variables, say x,y,z,
with coefficients in Q.
The polynomial f must be homogeneous and absolutely irreducible.
All these conditions will be checked automatically.
 Return:
 ideal, the adjoint ideal of the curve defined by f.
 Theory:
 Considering C in the chart z<>0, the algorithm regards x as
transcendental and y as algebraic and computes an integral basis in C(x)[y] of
the integral closure of C[x] in C(x,y) using the normalization algorithm
from normal_lib: see integralbasis_lib. In a future edition of the library,
also van Hoeij's algorithm for computing the integral basis will be available.
From the integral basis, the adjoint ideal is obtained by linear algebra.
Alternatively, the algorithm starts with a local analysis of the singular
locus of C. Then, for each primary component of the singular locus which
does not correspond to ordinary multiple points or cusps, the integral
basis algorithm is applied separately. The ordinary multiple points and
cusps, in turn, are addressed by a straightforward direct algorithm. The
adjoint ideal is obtained by intersecting all ideals obtained locally.
The local variant of the algorithm is used by default.
Example:
 LIB "paraplanecurves.lib";
ring R = 0,(x,y,z),dp;
poly f = y^8x^3*(z+x)^5;
adjointIdeal(f);
==> _[1]=y6
==> _[2]=xy5+y5z
==> _[3]=x2y4+xy4z
==> _[4]=x3y3+2x2y3z+xy3z2
==> _[5]=x4y2+3x3y2z+3x2y2z2+xy2z3
==> _[6]=x5y+3x4yz+3x3yz2+x2yz3
==> _[7]=x6+4x5z+6x4z2+4x3z3+x2z4

