ChangeOfVariable(F, UP, UPUP)¶
curve.spad line 438 [edit on github]
UPUP: UnivariatePolynomialCategory Fraction UP
Tools to send a point to infinity on an algebraic curve.
- chvar: (List UPUP, UPUP) -> Record(func: List UPUP, poly: UPUP, c1: Fraction UP, c2: Fraction UP, deg: NonNegativeInteger)
chvar(lf, p)
is like chvar(f
,p
) but handles list of functions
- chvar: (UPUP, UPUP) -> Record(func: UPUP, poly: UPUP, c1: Fraction UP, c2: Fraction UP, deg: NonNegativeInteger)
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 variablez = c1(x)
,t = y * c2(x)
, one getsf(x, y) = c1'(x)g(c1(x), c2(x)y)
The algebraic relation betweenx
andy
isp(x, y) = 0
. The algebraic relation betweenz
andt
isq(z, t) = 0
.
- goodPoint: (List UPUP, UPUP) -> F
goodPoint([p1, ..., pn], q)
returns an integer a such that a is neither a pole ofpi(x, y)
for somei
nor a branch point ofq(x, y) = 0
.
- mkIntegral: UPUP -> Record(coef: Fraction UP, poly: UPUP)
mkIntegral(p(x, y))
returns[c(x), q(x, z)]
such thatz = c * y
is integral. The algebraic relation betweenx
andy
isp(x, y) = 0
. The algebraic relation betweenx
andz
isq(x, z) = 0
.
- radPoly: UPUP -> Union(Record(radicand: Fraction UP, deg: NonNegativeInteger), failed)
radPoly(p(x, y))
returns[c(x), n]
ifp
is of the formy^n - c(x)
, “failed” otherwise.
- rootPoly: (Fraction UP, NonNegativeInteger) -> Record(exponent: NonNegativeInteger, coef: Fraction UP, radicand: UP)
rootPoly(g, n)
returns[m, c, P]
such thatc * g ^ (1/n) = P ^ (1/m)
thus ify^n = g
, thenz^m = P
wherez = c * y
.