The coordinate-ring map: surjectivity, the generators of XYIdeal, and the Galois action #
Mathlib's WeierstrassCurve.Affine.CoordinateRing.map sends a ring homomorphism f : R →+* S to
R[W] →+* S[W.map f]. Around it Mathlib proves map_mk, map_smul and injectivity
(CoordinateRing.map_injective), and it separately defines the classes XClass, YClass and the
ideal XYIdeal they span. This file fills the two gaps between those: map is also surjective
when f is, and map commutes with all three of those constructions.
Neither gap is deep. Since R[W] is AdjoinRoot W.polynomial, the surjectivity argument lives at
the AdjoinRoot level in TauCeti/RingTheory/AdjoinRoot/Basic.lean and the coordinate-ring
statement follows in a line; the commutation statements unfold the classes and push map_mk
through.
Main results #
WeierstrassCurve.Affine.CoordinateRing.map_surjectiveandWeierstrassCurve.Affine.CoordinateRing.map_bijective: the coordinate-ring specialisations, stated like Mathlib'sCoordinateRing.map_injectivefor an arbitraryf : R →+* S.WeierstrassCurve.Affine.CoordinateRing.map_XClassandWeierstrassCurve.Affine.CoordinateRing.map_YClass:map W fsends the class ofX - xto the class ofX - f x, and the class ofY - y(X)to the class ofY - (y.map f)(X).WeierstrassCurve.Affine.CoordinateRing.map_XYIdeal:map W fcarriesXYIdeal W x y = ⟨XClass W x, YClass W y⟩toXYIdeal (W.map f) (f x) (y.map f).WeierstrassCurve.Affine.CoordinateRing.map_of_X,WeierstrassCurve.Affine.CoordinateRing.map_rootandWeierstrassCurve.Affine.CoordinateRing.map_algebraMap:map W ffixes the two coordinates and is compatible with the scalars — it is a map ofR-algebras up tofitself.WeierstrassCurve.Affine.CoordinateRing.map_id,WeierstrassCurve.Affine.CoordinateRing.map_map, and its homomorphism-level companionmap_comp_map:mapis a functor inf. The curve equalitiesW.map (RingHom.id R) = Wand(W.map f).map g = W.map (g.comp f)hold definitionally, so neither statement carries a transport.WeierstrassCurve.Affine.CoordinateRing.ringHom_ext: ring homomorphisms out of the coordinate ring are determined by the constants and the classes ofxandy.WeierstrassCurve.coordinateRingGaloisActionandWeierstrassCurve.coordinateRingGaloisAction_mk: forWoverRand anR-algebraA, the action ofA ≃ₐ[R] Aon the coordinate ring ofW⁄A, applying an automorphism to the coefficients.
For a base equivalence e the first two give RingEquiv.ofBijective (map W e) (map_bijective W e.bijective) in one line at the use site, so no equivalence is defined here; Mathlib's generic
AdjoinRoot.mapRingEquiv is the other route to the same object. The Galois action is the one case
built here, because its target is the coordinate ring of W⁄A itself rather than of
(W⁄A).map σ: it is AdjoinRoot.mapRingEquiv along the coefficientwise automorphism, which fixes
the Weierstrass polynomial of a curve defined over R, so no transport along
(W⁄A).map σ = W⁄A is needed.
XYIdeal W x y is the ideal generated by XClass W x and YClass W y for an arbitrary x : R
and y : R[X], and that is all map_XYIdeal uses. Reading it as "the ideal of a point" needs
hypotheses stated nowhere here — that (x, y) satisfy the curve equation — and reading it as a
maximal ideal needs a field as well; Mathlib's XYIdeal' and XYIdeal_eq₂ are the statements
that carry those. So this is a result about the generators, not about points.
Stated over arbitrary commutative rings; the curve need not be elliptic.
The commutation results serve 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, compatible with identity, composition, degree,
separability, MapsInfinity, duals, and induced point maps": these are that compatibility for the
coordinate ring and the distinguished elements Mathlib singles out in it. They do not on their own
supply the "induced point maps" clause, which needs the curve equation these statements do not
assume.
The surjectivity results support the Hasse strand of the same file, Layer 3. That
roadmap's Layer-0 narrative makes the Frobenius "the key input to Layer 3", and the arithmetic
Frobenius of the function field over a finite field is obtained by transporting the q-power map
of the base to the coordinate ring, which needs exactly this bijectivity. The roadmap's §"What
Mathlib already has (consume)" lists Affine.CoordinateRing as consumed infrastructure that "is
load-bearing API here, not an implementation detail"; this is a complement to that API, not a
reimplementation of it.
Provenance #
The need for these statements is from the AINTLIB HasseWeil project
(github.com/CBirkbeck/AINTLIB, Apache-2.0, pinned by that roadmap at
dev/hasse-weil @ 513e83879e2f), HasseWeil/WeilPairing/FrobeniusFunctionFieldEquiv.lean,
declaration coordRingMap_bijective. There they are bundled as bijectivity of one map, for a ring
equivalence only — surjectivity being obtained by lifting along e.symm — inside a 267-line
file that also constructs the function-field Frobenius. Here there is no inverse to lift along:
the statement is for an arbitrary surjective f : R →+* S, matching the generality of Mathlib's
CoordinateRing.map_injective, and preimages come from Polynomial.map_surjective. The argument
itself lives one level down, in TauCeti/RingTheory/AdjoinRoot/Basic.lean; the equivalence the
source bundled it for is left to the use site.
map_XClass, map_YClass and map_XYIdeal are adapted from the same project's
HasseWeil/WeilPairing/DivisorGalois.lean (declarations of the same names), where they are stated
for a WeierstrassCurve.Affine and its image under a ring homomorphism. The proofs are that file's.
Ring homomorphisms out of the coordinate ring are determined by the constants and the
classes of x and y.
CoordinateRing.map is surjective when the base map is, the companion of Mathlib's
CoordinateRing.map_injective.
CoordinateRing.map is bijective when the base map is.
CoordinateRing.map f commutes with YClass: the class of Y - y(X) goes to the class of
Y - (y.map f)(X) on the mapped curve.
CoordinateRing.map f commutes with XYIdeal: the ideal generated by XClass W x and
YClass W y pushes forward to the one generated by XClass (W.map f) (f x) and
YClass (W.map f) (y.map f). No curve equation on (x, y) is assumed.
CoordinateRing.map sends the class of X to the class of X.
CoordinateRing.map along the identity is the identity.
CoordinateRing.map is functorial. The curve equality (W.map f).map g = W.map (g.comp f)
holds definitionally, so the statement needs no transport.
The Galois action on the coordinate ring of a base-changed Weierstrass curve. An
R-automorphism σ of A acts on A[W] by applying σ to the coefficients and fixing the
classes of x and y: it is AdjoinRoot.mapRingEquiv along the coefficientwise σ, which fixes
the Weierstrass polynomial because W is defined over R.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The coordinate-ring Galois action on the class of a polynomial: it applies the
automorphism to the coefficients, as Mathlib's CoordinateRing.map_mk does for map.
On the polynomial subring, the coordinate-ring Galois action maps coefficients and fixes x.
The coordinate-ring Galois action fixes the class of y.
The coordinate-ring Galois action applies the automorphism to constants.