Documentation

TauCeti.AlgebraicGeometry.EllipticCurve.Affine.FunctionField.InfinityPlace.Basic

The valuation at infinity on the function field of a Weierstrass curve #

The function field F(W) of an affine Weierstrass curve is a quadratic extension of the rational function field F(x) (WeierstrassCurve.Affine.finrank_functionField), so every function has an algebra norm there. Composing that norm with Mathlib's place at infinity of F(x) gives the place at infinity of the curve: ord_∞ f = -deg N f, the place where x and y have their poles.

Main definitions #

Main results #

The valuation's map_add_le_max' rests on an ultrametric inequality in degree form, proved here; the other three axioms are the norm's multiplicativity and Mathlib's place at infinity.

The two coordinate-function values each come in a second @[simp] form, stated in the shape simp actually normalises them to (the note above infinityPlace.X explains why the coordinate forms cannot carry the tag themselves). The quotient value gets no restatement of its own: map_div₀ is a simp lemma, so simp decomposes the quotient through the two atomic restatements. The machinery that builds the ultrametric inequality is private, and the norm-degree theory it rests on lives in FunctionField/Norm.lean.

Roadmap #

TauCetiRoadmap/EllipticCurves/README.md, Layer 0 (the function field, places, and divisors), whose §Places asks for the one further place W.infinityPlace beyond the affine ones, sitting "where x and y have their poles", with ord_∞ x = -2, ord_∞ y = -3. This file supplies the valuation, those two degrees, and the uniformiser x / y — §Places lists "ord_v, uniformisers, residue fields, the degree deg v" as the API the later layers consume. Suggested.lean seeds no declaration it competes with, recording that the function-field layer's "types are new API and are built there, not pinned here".

Provenance #

The route is that of the AINTLIB HasseWeil project (github.com/CBirkbeck/AINTLIB, Apache-2.0, dev/hasse-weil at a582951fe96b), HasseWeil/Curves/Infinity.lean: normAsRatFunc, ordAtInfty, ordAtInfty_mul, ordAtInfty_add_ge_min (tagged T-ORD-ARITH-12) and ordAtInfty_coordX/ordAtInfty_coordY.

The ramification statement corresponds to that project's Curves/OrdAtInftyRamification.lean and Curves/RamificationAtInfinity.lean; there it is an order identity for a WithTop-valued ordAtInfty over the SmoothPlaneCurve wrapper, where here it is an equality of Mathlib Valuations and follows from Algebra.norm_algebraMap with finrank_functionField.

Changes from the source. There ordAtInfty is a definition of its own, valued in WithTop, built over a SmoothPlaneCurve structure wrapping WeierstrassCurve.Affine, with multiplicativity, vanishing and the ultrametric bound all proved by hand. Here the norm is Mathlib's Algebra.norm and the target is Mathlib's ℤᵐ⁰, so the result is a genuine Valuation uniform with RatFunc.inftyValuation and IsDedekindDomain.HeightOneSpectrum.valuation; multiplicativity and vanishing are map_mul and Algebra.norm_zero, and only the ultrametric inequality is reproved.

The uniformiser corresponds to that project's projects/HasseWeil/HasseWeil/Foundation/LocalExpansion.lean at main 1c1c7466, localParam — the local parameter t = -x/y at O (Silverman IV.1) — whose uniformising property is recorded there through a Laurent-series embedding (localExpand_localParam), over a SmoothPlaneCurve and that development's own WithTop-valued ordAtInfty. None of that apparatus is needed here: the value of x / y is two rewrites from the two pole orders, and Mathlib's Valuation.IsRankOneDiscrete.generator_eq_exp_neg_one_of_mem_range turns that single value into the generator, so the conclusion is Mathlib's Valuation.IsUniformizer directly. The sign is dropped, x / y and -x / y having the same valuation.

The valuation at infinity on the function field of a Weierstrass curve: Mathlib's place at infinity of F(x), composed with the algebra norm.

Equations
Instances For

    The evaluation rule for infinityPlace: it is RatFunc.inftyValuation applied to the algebra norm of the function. The definition's body is not exposed across the module boundary, so this is how downstream modules compute with it. Deliberately not @[simp]: unfolding the valuation would defeat the special-value lemmas below, which are the normal forms automation should reach.

    x has a double pole at infinity: v_∞ x = exp 2, which is ord_∞ x = -2.

    y has a triple pole at infinity: v_∞ y = exp 3, which is ord_∞ y = -3.

    @[simp]

    The place at infinity lies over the infinite place of F(x), with ramification index two. On a rational function of x the value is the square of Mathlib's infinite valuation, the extension F(W) / F(x) being quadratic.

    The valuation at infinity of a nonzero rational function of x is exp of twice its degree: v_∞ r = exp (2 * r.intDegree), which is ord_∞ r = -2 * r.intDegree.

    The factor two is the ramification index of the place at infinity over the infinite place of F(x), so a nonzero rational function of x lies in the maximal ideal at infinity exactly when its degree is negative.

    The valuation at infinity of a polynomial in x is exp of twice its degree: a nonzero polynomial of degree n has a pole of order 2 * n at infinity. infinityPlace.X is the case p = X.

    theorem WeierstrassCurve.Affine.infinityPlace.C {F : Type u_1} [Field F] (W : Affine F) {c : F} (hc : c 0) :

    The valuation is trivial on the base field: a nonzero constant has value 1, so v_∞ restricted to F is trivial. The analogue of RatFunc.inftyValuation.C.

    The valuation at infinity is nontrivial: x has value exp 2.

    @[simp]

    The simp-normal form of infinityPlace.X, stated for AdjoinRoot.of, which is what simp rewrites the coordinate function to.

    x / y is a uniformiser at infinity: v_∞ (x / y) = exp (-1), that is ord_∞ (x / y) = 1, a simple zero at the point at infinity. The double pole of x and the triple pole of y differ by one, which is what makes the quotient a uniformiser.

    x / y is a uniformiser at the place at infinity, in Mathlib's sense: its value generates the value group and is < 1.

    @[simp]

    The place at infinity is distinct from every affine place. Together with CoordinateRing.pointPlace_eq_iff this gives the injectivity of the whole point-to-place assignment, the point at infinity included.