Documentation

TauCeti.FieldTheory.FunctionField.RiemannRoch.RatFunc

The Riemann–Roch spaces and the genus of the rational function field #

The rational function field k(x) is the base case of the theory, and its Riemann–Roch spaces can be written down by hand, long before the Riemann–Roch theorem is available. For n : ℕ, a rational function lies in L(n · P_∞) exactly when it is a polynomial of degree at most n: having no pole at any finite place makes it a polynomial, and ord_∞ f = -deg f turns the remaining condition into the degree bound. Hence

ℓ(n · P_∞) = n + 1 = deg (n · P_∞) + 1,

and comparing this with Riemann's theorem in large degree gives g(k(x)) = 0: the rational function field has genus zero, and Riemann's inequality ℓ(D) ≥ deg D + 1 - g is sharp at n · P_∞ for every n ≥ 0.

This is Stichtenoth, Algebraic Function Fields and Codes, 2nd ed., Example 1.4.18 (with Proposition 1.4.9 for the description of L(n · P_∞)).

The polynomiality step is TauCeti.Place.forall_ord_adicOfIrreducible_nonneg_iff, which reads Mathlib's IsDedekindDomain.HeightOneSpectrum.mem_integers_of_valuation_le_one for the Dedekind domain k[X] in place vocabulary. It combines with TauCeti.Place.eq_infty_or_exists_eq_ofPrime: the places of k(x) are the height-one primes of k[X] together with P_∞, so the two conditions defining L(n · P_∞) split exactly along that classification.

Main results #

Provenance #

The mathematics is Stichtenoth's and the Lean development is independent, as in TauCeti.FieldTheory.FunctionField.RiemannRoch.Genus. The separate vaca22/riemann-roch-function-fields project (Guanghao Li, Apache-2.0) carries a complete function-field Riemann–Roch development by the same Stichtenoth route; no code is copied or adapted from it here.

References #

L(n · P_∞) is the space of polynomials of degree at most n #

The Riemann–Roch spaces of k(x) at infinity (Stichtenoth, Example 1.4.18): a rational function lies in L(n · P_∞) for n : ℕ exactly when it is a polynomial of degree at most n.

Regularity at the finite places is exactly polynomiality, by TauCeti.Place.forall_ord_adicOfIrreducible_nonneg_iff; the remaining condition at infinity is deg f ≤ n, because ord_∞ is minus the degree.

The Riemann–Roch spaces of k(x) at infinity, as an equality of k-subspaces of k(x): for n : ℕ, L(n · P_∞) is the image of the polynomials of degree at most n.

ℓ(n · P_∞) = n + 1 (Stichtenoth, Example 1.4.18): the polynomials of degree at most n form a k-space of dimension n + 1, with basis 1, x, …, xⁿ.

@[simp]

ℓ(n · P_∞) for every integer n: it is n + 1 for n ≥ 0, and 0 once n < 0.

The genus is zero #

@[simp]
theorem TauCeti.genus_ratFunc (k : Type u_2) [Field k] :
genus k (RatFunc k) = 0

The rational function field has genus zero (Stichtenoth, Example 1.4.18).

Riemann's theorem gives a degree beyond which ℓ(D) = deg D + 1 - g; evaluating it at D = n · P_∞ for large n and comparing with ℓ(n · P_∞) = n + 1 = deg (n · P_∞) + 1 forces g = 0.

Riemann's theorem on k(x), with the genus evaluated: every divisor D of the rational function field satisfies ℓ(D) ≥ deg D + 1. Equality holds at D = n · P_∞ for n ≥ 0 by TauCeti.Divisor.dim_natCast_zsmul_ofPoint_infty, so Riemann's inequality is sharp on k(x).

Divisor classes on k(x) #

A divisor class on k(x) is determined by its degree: every divisor D of the rational function field is linearly equivalent to (deg D) · P_∞.

Since deg P_∞ = 1, the difference D - (deg D) · P_∞ has degree zero, and Riemann's theorem on k(x) gives it a nonzero Riemann–Roch space; a degree-zero divisor with a nonzero Riemann–Roch space is principal (Stichtenoth, Corollary 1.4.12(c)).

theorem TauCeti.Divisor.dim_ratFunc {k : Type u_1} [Field k] (D : Divisor k (RatFunc k)) :
D.dim = (degree D + 1).toNat

ℓ(D) on the rational function field, for every divisor: ℓ(D) = (deg D + 1)⁺.

Every divisor of k(x) is linearly equivalent to (deg D) · P_∞, where the dimension was computed by hand in TauCeti.Divisor.dim_zsmul_ofPoint_infty. This is the Riemann–Roch answer on k(x), obtained without the Riemann–Roch theorem.

The class number of k(x) #

The degree-zero divisor class group of k(x) is the ideal class group of k[X]: the model k[X] has a single place at infinity (TauCeti.Place.exists_algebraMap_notMem_integers_iff_eq_infty), and that place is rational, so the affine bridge TauCeti.Divisor.degreeZeroClassGroupEquiv applies.

Equations
Instances For
    @[simp]

    Every degree-zero divisor class of the rational function field is trivial: through the affine bridge it is an ideal class of k[X], and k[X] is a principal ideal domain. The description of the divisor classes of k(x) in TauCeti.Divisor.linearlyEquivalent_zsmul_ofPoint_infty gives the same conclusion directly.

    @[simp]

    The rational function field has class number one (Stichtenoth, Example 5.1).