ChangeOfVariable(F, UP, UPUP)

curve.spad line 435 [edit on github]

Tools to send a point to infinity on an algebraic curve.

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 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 : (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

eval : (UPUP, Fraction(UP), Fraction(UP)) -> UPUP

eval(p(x, y), f(x), g(x)) returns p(f(x), y * g(x)).

goodPoint : (List(UPUP), UPUP) -> F

goodPoint([p1, ..., pn], q) returns an integer a such that a is neither a pole of pi(x, y) for some i nor a branch point of q(x, y) = 0.

mkIntegral : UPUP -> Record(coef : Fraction(UP), poly : UPUP)

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 : UPUP -> Union(Record(radicand : Fraction(UP), deg : NonNegativeInteger), "failed")

radPoly(p(x, y)) returns [c(x), n] if p is of the form y^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 that c * g ^ (1/n) = P ^ (1/m) thus if y^n = g, then z^m = P where z = c * y.