
D.5.1.3 paraPlaneCurve
Procedure from library paraplanecurves.lib (see paraplanecurves_lib).
 Usage:
 paraPlaneCurve(f [, s]); f poly , s optional string
optional string s can be:
'normal': compute integral basis via normalization.
'local': make local analysis of singularities first and apply
normalization separately.
The default is 2.
 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.
The curve C = {f = 0} must be rational, i.e., have geometric genus 0
(see genus).
These conditions will be checked automatically.
 Return:
 ring with an ideal PARA which contains a rational parametrization of
the rational plane curve given by f; the ground field of the returned
polynomial ring is either Q or some algebraic extension Q(a); PARA
consists of three generators that parametrize the three coordinates
of the rational curve
 Theory:
 After a first step, realized by a projective automorphism in the
procedure adjointIdeal, C satisfies:
 C does not have singularities at infinity z=0.
 C does not contain the point (0:1:0) (that is, the dehomogenization of f
with respect to z is monic as a polynomial in y).
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.
The linear system corresponding to the adjoint ideal maps the curve
birationally to a rational normal curve in P^(n2).
Iterating the anticanonical map, the algorithm projects the rational normal
curve to PP1 for n odd resp. to a conic C2 in PP2 for n even.
In case n is even, the algorithm tests whether there is a rational point on C2
and if so gives a parametrization of C2 which is defined over Q. Otherwise the
parametrization is defined over a quadratic field extension of Q.
By inverting the birational map of C to PP1 resp. to C2, a parametrization of
C is obtained (defined over Q or the quadratic field extension).
Example:
 LIB "paraplanecurves.lib";
ring R = 0,(x,y,z),dp;
poly f1 = 1/2*x^5+x^2*y*z^2+x^3*y*z+1/2*x*y^2*z^22*x*y^3*z+y^5;
def Rp1 = paraPlaneCurve(f1);
==> // 'paraPlaneCurve' created a ring together with an ideal PARA.
==> // Supposing you typed, say, def RP1 = paraPlaneCurve(f);
==> // you may access the ideal by typing
==> // setring RP1; PARA;
setring Rp1;
PARA;
==> PARA[1]=4s4t+2s3t2
==> PARA[2]=2s2t3st4
==> PARA[3]=4s5t5
setring R;
poly f2 = x6+3x4y2+3x2y4+y64x4z234x3yz27x2y2z2+12xy3z2+6y4z2;
f2 = f2+36x2z4+36xyz4+9y2z4;
def Rp2 = paraPlaneCurve(f2);
==> // 'paraPlaneCurve' created a ring together with an ideal PARA.
==> // Supposing you typed, say, def RP1 = paraPlaneCurve(f);
==> // you may access the ideal by typing
==> // setring RP1; PARA;
setring Rp2;
PARA;
==> PARA[1]=(a)*s6+(3821910a+568836)*s5t+(17261814423635a17036342693900)*\
s4t2+(40791433831085325700a41443502254869224120)*s3t3+(7095798487219992\
1706914985a63670892810117870548425400)*s2t4+(119395301366776391295025433\
032250a70343024051936434031711433716044)*st5+(14536738745802049687386582\
3959936915531a+80558165687949544164912330361180107460)*t6
==> PARA[2]=s6+(568836a+3821910)*s5t+(20661581653300a+24799008638835)*s4t2+(5\
7466832045400548680a+45699794797119440900)*s3t3+(82140322496947054109676\
600a+33367675319234688316737815)*s2t4+(153764457242487188699049348352844\
a+37012366361272671947391736404550)*st5+(1589516820449857995417712398245\
02169340a+125264680768653363798746666533010931669)*t6
==> PARA[3]=(90983469924655936000a+37676837794369664000)*s3t3+(18458128762166\
9915274432000a+46121405018308889263872000)*s2t4+(121948097419855203536634\
716352000a+11879229621327449840239705728000)*st5+(26268443692822012344779\
010112242496000a1331506747881842263336367321772544000)*t6

