curve.spad line 435 [edit on github]
Tools to send a point to infinity on an algebraic curve.
chvar(f(x, y), p(x, y))
returns [g(z, t), q(z, t), c1(x), c2(x), n]
such that under the change of variable z = c1(x)
, t = y * c2(x)
, one gets f(x, y) = c1'(x)g(c1(x), c2(x)y)
The algebraic relation between x
and y
is p(x, y) = 0
. The algebraic relation between z
and t
is q(z, t) = 0
.
chvar(lf, p)
is like chvar(f
, p
) but handles list of functions
eval(p(x, y), f(x), g(x))
returns p(f(x), y * g(x))
.
goodPoint([p1, ..., pn], q)
returns an integer a such that a is neither a pole of
for some pi
(x, y)i
nor a branch point of q(x, y) = 0
.
mkIntegral(p(x, y))
returns [c(x), q(x, z)]
such that z = c * y
is integral. The algebraic relation between x
and y
is p(x, y) = 0
. The algebraic relation between x
and z
is q(x, z) = 0
.
radPoly(p(x, y))
returns [c(x), n]
if p
is of the form y^n - c(x)
, "failed" otherwise.
rootPoly(g, n)
returns [m, c, P]
such that c * g ^ (1/n) = P ^ (1/m)
thus if y^n = g
, then z^m = P
where z = c * y
.