# 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.