| LIB "elim.lib";
LIB "sing.lib";
// Affine polar curve:
ring R = 0,(x,z,t),dp; // global ordering dp
poly f = z5+xz3+x2-tz6;
dim_slocus(f); // dimension of singular locus
==> 1
ideal j = diff(f,x),diff(f,z);
dim(std(j)); // dim V(j)
==> 1
dim(std(j+ideal(f))); // V(j,f) also 1-dimensional
==> 1
// j defines a curve, but to get the polar curve we must remove the
// branches contained in f=0 (they exist since dim V(j,f) = 1). This
// gives the polar curve set theoretically. But for the structure we
// may take either j:f or j:f^k for k sufficiently large. The first is
// just the ideal quotient, the second the iterated ideal quotient
// or saturation. In our case both coincide.
ideal q = quotient(j,ideal(f)); // ideal quotient
ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib
ideal sq = std(q);
dim(sq);
==> 1
// 1-dimensional, hence q defines the affine polar curve
//
// to check that q and qsat are the same, we show both inclusions, i.e.,
// both reductions must give the 0-ideal
size(reduce(qsat,sq));
==> 0
size(reduce(q,std(qsat)));
==> 0
qsat;
==> qsat[1]=12zt+3z-10
==> qsat[2]=5z2+12xt+3x
==> qsat[3]=144xt2+72xt+9x+50z
// We see that the affine polar curve does not pass through the origin,
// hence we expect the local polar "curve" to be empty
// ------------------------------------------------
// Local polar curve:
ring r = 0,(x,z,t),ds; // local ordering ds
poly f = z5+xz3+x2-tz6;
ideal j = diff(f,x),diff(f,z);
dim(std(j)); // V(j) 1-dimensional
==> 1
dim(std(j+ideal(f))); // V(j,f) also 1-dimensional
==> 1
ideal q = quotient(j,ideal(f)); // ideal quotient
q;
==> q[1]=1
// The local polar "curve" is empty, i.e., V(j) is contained in V(f)
// ------------------------------------------------
// Projective polar curve: (we need "sing.lib" and "elim.lib")
ring P = 0,(x,z,t,y),dp; // global ordering dp
poly f = z5y+xz3y2+x2y4-tz6;
// but consider t as parameter
dim_slocus(f); // projective 1-dimensional singular locus
==> 2
ideal j = diff(f,x),diff(f,z);
dim(std(j)); // V(j), projective 1-dimensional
==> 2
dim(std(j+ideal(f))); // V(j,f) also projective 1-dimensional
==> 2
ideal q = quotient(j,ideal(f));
ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib
dim(std(qsat));
==> 2
// projective 1-dimensional, hence q and/or qsat define the projective
// polar curve. In this case, q and qsat are not the same, we needed
// 2 quotients.
// Let us check both reductions:
size(reduce(qsat,std(q)));
==> 4
size(reduce(q,std(qsat)));
==> 0
// Hence q is contained in qsat but not conversely
q;
==> q[1]=12zty+3zy-10y2
==> q[2]=60z2t-36xty-9xy-50zy
==> q[3]=12xty2+5z2y+3xy2
==> q[4]=z3y+2xy3
qsat;
==> qsat[1]=12zt+3z-10y
==> qsat[2]=12xty+5z2+3xy
==> qsat[3]=144xt2+72xt+9x+50z
==> qsat[4]=z3+2xy2
//
// Now consider again the affine polar curve,
// homogenize it with respect to y (deg t=0) and compare:
// affine polar curve:
ideal qa = 12zt+3z-10,5z2+12xt+3x,-144xt2-72xt-9x-50z;
// homogenized:
ideal qh = 12zt+3z-10y,5z2+12xyt+3xy,-144xt2-72xt-9x-50z;
size(reduce(qh,std(qsat)));
==> 0
size(reduce(qsat,std(qh)));
==> 0
// both ideals coincide
|