Skip to content

Upstream ironwood's CompEllipticExtras lemmas and the Pallas curve twins #12

Description

@daira

zcash/ironwood carries Zcash/Circuits/Specs/CompEllipticExtras.lean (from zcash/ironwood#89), written in CompElliptic's own namespaces as explicit upstreaming candidates. Assessment:

Move as-is to CompElliptic/CurveForms/ShortWeierstrass.lean:

  • SWPoint.add_x / SWPoint.add_yrfl projection lemmas about add; pure API completeness.
  • y_eq_or_y_eq_neg_of_onCurve — two on-curve points sharing an x-coordinate have equal or opposite y. Generic for the y² = f(x) form; worth stating that way, since the property is not short-Weierstrass-specific.
  • SWPoint.onCurve_of_ne_zero — a nonzero representable point is on the curve.
  • SWPoint.eq_or_eq_neg_of_x_eq — nonzero points sharing an x-coordinate are equal or negated. The load-bearing one: it is the concrete form of the extractor ±-property (Extractor.toIVK_pm) that ironwood's key-binding instantiation at Pallas will need, so upstreaming serves both the circuits side and the key-binding instantiation.

Add for symmetry, from ironwood's Zcash/Circuits/Specs/Pallas.lean:

  • neg_five_not_isCube (no x with x³ = −5 over the Pallas base field) and no_onCurve_y_zero (no Pallas point with y = 0). CompElliptic already proves the Vesta-side twins, so symmetry argues for hosting the Pallas side in CompElliptic/Curves/Pasta.lean too. Relatedly, "no Pallas point has x = 0" (5 a non-square) is exactly the identity-point obligation recorded on Extractor.toIVK_pm's docstring in ironwood — hosting these facts upstream gives the key-binding instantiation and the circuits one shared source.

Not to move: the Fp/Fq abbreviations (PallasBaseField/PallasScalarField). These are Zcash-specific usage; consumers can keep them as local aliases.

🤖 Filed with Claude Code (Claude Fable 5).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions