# PointsOfFiniteOrder(R0, F, UP, UPUP, R)ΒΆ

This package provides function for testing whether a divisor on a curve is a torsion divisor.

cmult: List SparseMultivariatePolynomial(R0, Kernel F) -> SparseMultivariatePolynomial(R0, Kernel F)

`cmult(x)` should be local but conditional

handle_imaginary: FiniteDivisor(F, UP, UPUP, R) -> Record(ncurve: UPUP, n_div_numer: Vector UPUP, n_div_denom: UPUP, need_change: Boolean)

`handle_imaginary(d)` should be local but conditional.

order: FiniteDivisor(F, UP, UPUP, R) -> Union(NonNegativeInteger, failed)

`order(fd)` returns order of divisor `fd` or `"failed"` if `fd` is not of finite order.

possibleOrder: FiniteDivisor(F, UP, UPUP, R) -> NonNegativeInteger

`possibleOrder(d)` returns `n` such that `d` is of order `n`, or of infinite order.

simplifyCoeffs: (Record(ncurve: UPUP, n_div_numer: Vector UPUP, n_div_denom: UPUP, need_change: Boolean), List Kernel F) -> NonNegativeInteger if F has AlgebraicallyClosedField and R0 has CharacteristicZero

`simplifyCoeffs(d, la)` should be local but conditional.

torsion?: FiniteDivisor(F, UP, UPUP, R) -> Boolean

`torsion?(fd)` returns `true` if `fd` is of finite order, `false` otherwise.

torsionIfCan: FiniteDivisor(F, UP, UPUP, R) -> Union(Record(order: NonNegativeInteger, function: R), failed)

`torsionIfCan(fd)` returns `[n, f]` such that `n*fd = div(f)` when `fd` is of finite order. torsionIfCan(`fd`) returns `"failed"` if `fd` is not of finite order.