Evaluating a function on a divisor #
For a function f and a divisor D whose support avoids the zeros and poles of f, the
classical quantity
f(D) = ∏_{P ∈ supp D} N_{F_P/k}(f(P)) ^ (coeff D P)
is what Weil reciprocity f(div g) = g(div f) compares. This file defines it. The local factors
N_{F_P/k}(f(P)) are TauCeti.Place.normResidueOrOne, built in
FieldTheory/FunctionField/Place/Residue.lean.
The construction is total on Fˣ — every nonzero function, at every divisor — and classical
where both the admissibility and the finiteness conditions below hold: at a place
whose residue field is module-finite over k. TauCeti.Place.finiteDimensional_residueField
supplies that at every place of an algebraic function field; absent it, Algebra.norm is the junk
value 1 and the factor drops out silently, which is the convention TauCeti.Place.degree
already follows (junk 0 under the same hypothesis). No result below is stated only in the
classical regime — the divisor and function laws are formal and hold for every F.
Main definitions #
TauCeti.Divisor.eval:f(D), as a unit ofk.TauCeti.Divisor.IsUnitAtSupport: the admissibility condition —fis a unit at every place ofD. This is exactly disjointness ofDfrom the divisor off(isUnitAtSupport_iff_disjoint).
Main results #
TauCeti.Divisor.eval_add,eval_neg,eval_sub,eval_zero:f(-)is a homomorphism from the additive group of divisors tokˣ, unconditionally.TauCeti.Divisor.eval_eq_prod_normResidue: on an admissible divisor, the textbook product formula.TauCeti.Divisor.eval_one,eval_inv,eval_mulandeval_div: the group laws in the function variable. The bundled homomorphism supplies the divisor variable; these supply the other one, and the two together are the bilinearity Weil reciprocity is stated against. Note the asymmetry:eval_oneandeval_invneed no hypothesis, whileeval_mulandeval_divneed admissibility for both arguments.- Admissibility is a subgroup condition in each variable, which is what makes those laws usable
together:
isUnitAtSupport_one,IsUnitAtSupport.mul,isUnitAtSupport_inv_iffandIsUnitAtSupport.divin the function, andisUnitAtSupport_zero,IsUnitAtSupport.add,isUnitAtSupport_neg_iffandIsUnitAtSupport.subin the divisor. The divisor side is what moving a divisor within its class to obtain disjoint support needs.
Implementation notes #
Three choices are load-bearing, and each rules out an alternative that does not work.
Functions are taken in Fˣ, not F. The admissibility condition is P.ord f = 0, and
P.ord 0 = 0 by the junk-value convention on ord; so over F the condition would declare
f = 0 admissible at every place. Taking f : Fˣ excludes that, and it matches
TauCeti.Divisor.principal, which is already stated for Fˣ.
Values are taken in kˣ, not k, and the neutral value is 1, not 0. The coefficient of a
place is an integer, so the local factor is raised to a possibly negative power, and the divisor law
has to survive that. With 0 as the neutral value in k it does not: at a place where f is not a
unit, eval (single P 1) * eval (single P (-1)) would be 0 while eval 0 = 1. In kˣ every
zpow identity holds unconditionally and the law is automatic.
The definition is total, with admissibility carried by the theorems. Admissibility depends on
the divisor, so a definition that demanded it could not be a homomorphism on the divisor group: it
would be one on the subgroup of divisors admissible for that particular f — a domain that shrinks
with each f, which IsUnitAtSupport.zero, .add, isUnitAtSupport_neg_iff and .sub below
describe. Instead Place.normResidueOrOne is total, eval is a homomorphism on the whole group,
and eval_eq_prod_normResidue recovers the textbook formula wherever
admissibility holds.
References #
- J. Silverman, The Arithmetic of Elliptic Curves, III.8 — evaluation of a function on a divisor of disjoint support is the prerequisite of the divisor construction of the Weil pairing given there (III.8.1).
The value f(D) of a function on a divisor.
Two conditions separate this from the classical quantity, and both have to hold. f must be a
unit at every place of D (TauCeti.Divisor.IsUnitAtSupport): the local factor is total, so at a
zero or pole of f it is 1 rather than a norm, and that factor silently disappears. And every
residue field involved must be module-finite over k, or Algebra.norm degenerates to 1 for
the same reason (Algebra.norm_eq_one_of_not_module_finite).
TauCeti.Place.finiteDimensional_residueField supplies the second at every place of an algebraic
function field, so in the intended setting only admissibility is a real hypothesis — but it is
one. See TauCeti.Place.normResidue for the full statement of the finiteness convention, which is
the one TauCeti.Place.degree already follows.
Equations
- D.eval f = (TauCeti.Divisor.evalHom✝ f) (Multiplicative.ofAdd D)
Instances For
Raising the function to a power raises the value to that power: f ^ n (D) = f(D) ^ n. Like
eval_inv, and unlike eval_mul, this needs no admissibility hypothesis.
f is a unit at every place of D — the condition under which no local factor is
replaced by 1, and the one Weil reciprocity is stated against. It is what makes f(D) a product
of genuine norms; those norms are the classical ones under the separate finiteness condition
recorded on TauCeti.Divisor.eval.
Equations
- D.IsUnitAtSupport f = ∀ P ∈ D.support, P.ord ↑f = 0
Instances For
IsUnitAtSupport D f is exactly the pointwise condition P.ord f = 0 at every place of D,
in both directions.
On an admissible divisor, f(D) is the product ∏ N(f(P)) ^ n_P of local norms. This is the
textbook formula when the residue fields are module-finite over k, which
TauCeti.Place.finiteDimensional_residueField gives for an algebraic function field; without that
the factors are Algebra.norm's junk value and the identity still holds, but of the formal
product rather than of the classical one.
Every function is admissible for the zero divisor, which has empty support.
Admissibility is closed under sums of divisors: (D + E).support ⊆ D.support ∪ E.support.
Admissibility is closed under differences of divisors.
1 is admissible for every divisor.
Admissibility is closed under products of functions.
Admissibility is closed under scaling the divisor: n • D has no places D does not.
Admissibility is closed under integer powers of the function.
Admissibility is closed under quotients of functions.
f(D) is multiplicative in the function, on a divisor admissible for both factors:
(f g)(D) = f(D) · g(D). This is the half of the divisor/function bilinearity that the
bundled homomorphism behind eval does not give for free: it is a homomorphism in D, and this
is the statement in f.
Both hypotheses are needed. At a place where f and g have opposite nonzero orders their
product is a unit while neither factor is, so the left side sees a genuine norm there and the
right side sees 1 twice.
f(D) inverts with no hypothesis, unlike eval_mul: admissibility is invariant under
inversion (isUnitAtSupport_inv_iff), and off the admissible places both sides are 1.
f(D) respects quotients of functions, on a divisor admissible for both. Like eval_mul
and unlike eval_inv, this needs both hypotheses: f / g can be admissible where neither f nor
g is.
Admissibility is disjointness from the divisor of f. This is the form the Weil-reciprocity
statement uses, where the two divisors are the principal divisors of the two functions.