Khuri-Makdisi algorithms for arithmetic in Jacobians

This module implements Khuri-Makdisi’s algorithms of [Khu2004].

In the implementation, we use notations close to the ones used by Khuri-Makdisi. We describe them below for readers of the code.

Let D0 be the base divisor of the Jacobian in Khuri-Makdisi model. So D0 is an effective divisor of appropriate degree d0 depending on the model. Let g be the genus of the underlying function field. For large and medium models, d02g+1. For small model d0g+1. A point of the Jacobian is a divisor class containing a divisor DD0 of degree 0 with an effective divisor D of degree d0.

Let Vn denote the vector space H0(O(nD0)) with a chosen basis, and let μn,m is a bilinear map from Vn×VmVn+m defined by (f,g)fg. The map μn,m can be represented by a 3-dimensional array as depicted below:

     f
   *------*
d /|e    /|
 *-|----* |
 | *----|-*
 |/     |/
 *------*

where d=dimVn, e=dimVm, f=dimVn+m. In the implementation, we instead use a matrix of size d×ef. Each row of the matrix denotes a matrix of size e×f.

A point of the Jacobian is represented by an effective divisor D. In Khuri-Makdisi algorithms, the divisor D is represented by a subspace WD=H0(O(n0D0D)) of Vn0 with fixed n0 depending on the model. For large and small models, n0=3 and L=O(3D0), and for medium model, n0=2 and L=O(2D0).

The subspace WD is the row space of a matrix wD. Thus in the implementation, the matrix wD represents a point of the Jacobian. The row space of the matrix wL is Vn0=H0(O(n0D0)).

The function mu_image(w_D, w_E, mu_mat_n_m, expected_dim) computes the image μn,m(WD,WE) of the expected dimension.

The function mu_preimage(w_E, w_F, mu_mat_n_m, expected_codim) computes the preimage WD such that μn,m(WD,WE)=WF of the expected codimension dimVndimWD, which is a multiple of d0.

AUTHORS:

  • Kwankyu Lee (2022-01): initial version

class sage.rings.function_field.khuri_makdisi.KhuriMakdisi_base

Bases: object

add(wd1, wd2)[source]

Theorem 4.5 (addition).

multiple(wd, n)[source]

Compute multiple by additive square-and-multiply method.

negate(wd)[source]

Theorem 4.4 (negation), first method.

subtract(wd1, wd2)[source]

Theorem 4.6 (subtraction), first method.

zero_divisor()[source]

Return the matrix wL representing zero divisor.

class sage.rings.function_field.khuri_makdisi.KhuriMakdisi_large[source]

Bases: KhuriMakdisi_base

Khuri-Makdisi’s large model.

add_divisor(wd1, wd2, d1, d2)[source]

Theorem 3.6 (addition of divisors, first method).

We assume that wD1, wD2 represent divisors of degree at most 3d02g1.

addflip(wd1, wd2)[source]

Theorem 4.3 (addflip).

equal(wd, we)[source]

Theorem 4.1, second method.

class sage.rings.function_field.khuri_makdisi.KhuriMakdisi_medium[source]

Bases: KhuriMakdisi_base

Khuri-Makdisi’s medium model

add_divisor(wd1, wd2, d1, d2)[source]

Theorem 3.6 (addition of divisors, first method).

We assume that wD1, wD2 represent divisors of degree at most 4d02g1.

addflip(wd1, wd2)[source]

Theorem 5.1 (addflip in medium model).

equal(wd, we)[source]

Theorem 4.1, second method.

class sage.rings.function_field.khuri_makdisi.KhuriMakdisi_small[source]

Bases: KhuriMakdisi_base

Khuri-Makdisi’s small model

add_divisor(wd1, wd2, d1, d2)[source]

Theorem 3.6 (addition of divisors, first method).

We assume that wD1, wD2 represent divisors of degree at most 6d02g1.

addflip(wd1, wd2)[source]

Theorem 5.3 (addflip in small model), second method.

equal(wd, we)[source]

Theorem 4.1, second method.

negate(wd)[source]

Theorem 5.4 (negation in small model).