The function field along a homomorphism of the base field #
Mathlib carries a Weierstrass curve along a ring homomorphism f : R →+* S (WeierstrassCurve.map)
and carries its coordinate ring along with it (CoordinateRing.map, injective when f is). This
file carries the function field: for f : F →+* K a homomorphism of fields, F(W) embeds into
K(W.map f).
There is nothing to choose. F(W) is the fraction field of the domain F[W], and F[W] lands
in the field K(W.map f) injectively, so the embedding is the unique extension of that
composite across fractions — IsFractionRing.lift. What the file records is how the embedding
meets everything else: the two coordinates, the scalars, and composition of base maps.
The scalar compatibility map_algebraMap is the load-bearing one. Read as an equality of ring
homomorphisms out of F it says the square
F ──────────────▸ K
│ │
▾ ▾
F(W) ────────────▸ K(W.map f)
commutes, and map_map_algebraMap is that square applied to the coefficients of a second curve:
a curve W₂ over F base-changed to F(W₁) and then carried along the embedding is the same
curve as W₂.map f base-changed to K(W₁.map f). That equality is what lets a point of W₂
over F(W₁) — equivalently, by the universal property in Isogeny/Basic.lean, a coordinate
pullback — be pushed to a point of W₂.map f over K(W₁.map f).
The homomorphism of base fields is an arbitrary f : F →+* K, not an algebraMap. Base change
along a field extension is the case f = algebraMap F K, while an automorphism f = σ gives the
semilinear transport of F(W) to the function field of the conjugate curve W.map σ. The latter
is the raw material for a Galois action but is not itself one: the target is K(W.map σ), not
K(W), so an action would additionally need the identification W.map σ = W for a curve defined
over the fixed field together with its coherence laws, and none of that is built into the
statements here. A single map covers both readings, and neither is built in.
Main definitions #
WeierstrassCurve.Affine.FunctionField.map: the embeddingF(W) → K(W.map f).
Main results #
WeierstrassCurve.Affine.FunctionField.map_algebraMap_coordinateRing: it restricts toCoordinateRing.mapon the coordinate ring, which is what pins it down.WeierstrassCurve.Affine.FunctionField.map_algebraMapandWeierstrassCurve.Affine.FunctionField.map_comp_algebraMap: it is compatible with the scalars, in element and in composed form.WeierstrassCurve.Affine.FunctionField.map_genericXandWeierstrassCurve.Affine.FunctionField.map_genericY: it sends the generic point ofWto the generic point ofW.map f.WeierstrassCurve.Affine.FunctionField.map_id,WeierstrassCurve.Affine.FunctionField.map_map, and its homomorphism-level companionmap_comp_map: functoriality inf.WeierstrassCurve.Affine.FunctionField.map_map_algebraMap: the commuting square above, at the level of a second curve base-changed to the function field.
Roadmap #
TauCetiRoadmap/EllipticCurves/README.md, Layer 0.5 (README:369), whose first milestone
(README:376-378) asks for "base change of Weierstrass equations, coordinate rings, function
fields, points, and isogenies". This is the function-field entry of that list; the isogeny entry
is Isogeny/BaseChange.lean, which is what consumes everything here.
The function field carried along a homomorphism of the base field. F(W) is the fraction
field of F[W], which lands injectively in the field K(W.map f), so there is exactly one
extension of that map across fractions.
Equations
Instances For
FunctionField.map restricts to CoordinateRing.map, which is the property that
determines it.
FunctionField.map is compatible with the scalars: a constant of F goes to the
corresponding constant of K.
FunctionField.map is compatible with the scalars, in composed form: the square with
f along the top and the two constant embeddings down the sides commutes.
Changing the coefficient field of a Weierstrass function field commutes with the embedding of its rational-function subfield.
FunctionField.map along the identity is the identity.
FunctionField.map is functorial. As for CoordinateRing.map_comp_map, the curve equality
(W.map f).map g = W.map (g.comp f) holds definitionally, so no transport appears.
Pointwise functoriality of FunctionField.map.
The commuting square, carried on the coefficients of a second curve. A curve W₂ over F
base-changed to the function field of W, then carried along FunctionField.map W f, is
W₂.map f base-changed to the function field of W.map f.
This is what makes a point of W₂ over F(W) — equivalently a coordinate pullback — push
forward along f.