# ChangeOfVariable(F, UP, UPUP)ΒΆ

- F: UniqueFactorizationDomain
- UP: UnivariatePolynomialCategory F
- 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 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`

.

- 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`

.