OpenDescent is an open-source arithmetic descent engine for reproducible elliptic-curve BSD workflows.
It is built as an open-source alternative to Magma for the part of the workflow
we need first: auditable descent/rank certificates for elliptic curves over
Q. OpenDescent does not copy Magma, does not claim Magma compatibility, and
does not depend on proprietary internals. It implements public mathematics and
emits machine-readable JSON certificates.
- integral Weierstrass curves over
Q - standard invariants
b2,b4,b6,b8,c4,c6,Delta,j - point counting over finite fields
- good-prime
a_psamples - basic bad-prime local reduction metadata
- exact affine group law over
Q - naive integral point search
- JSON certificate CLI
- optional Sage/eclib backend for rank intervals and 2-Selmer ranks
- direct mwrank/eclib backend for independent rank/Selmer cross-checks
- higher 2-descent evidence capture from mwrank second-descent traces
- higher 2-power transcript parsing for structures like
Z/4 + Z/4 - calculator primitive for
FiveSelmerGroup(E)transcript evidence - native 5-descent task records with local-prime selection and proof gaps
- native Cassels-pairing task records for 5-covering representatives
- explicit Cassels-pairing status fields in certificates
Native OpenDescent 2-descent is intentionally marked as a gap until the full
algorithm is implemented. Cassels pairings are also marked as not computed
unless a backend explicitly provides pairing data.
Plain 2-Selmer output is not treated as evidence for Z/4 + Z/4 or another
higher 2-primary structure.
FiveSelmerGroup(E) can parse explicit transcript/backend output such as
Z/5 + Z/5 and can run a native task scaffold. The native path records
local-prime inputs and rational 5-torsion candidates, but it remains partial
until degree-5 covering construction and local solubility kernels are complete.
Native arithmetic scaffold:
cd /path/to/opendescent
python3 -m opendescent.cli examples/calibration_curves.json --out certificate.native.jsonSage-backed open-source rank/Selmer certificate:
python3 -m opendescent.cli examples/calibration_curves.json --backend sage --out certificate.sage.jsonDirect mwrank/eclib certificate summary:
python3 -m opendescent.cli examples/calibration_curves.json --backend mwrank_direct --summary-onlyRun the three imported codex-2 timeout cases:
python3 -m opendescent.cli examples/codex2_timeout_cases.json --backend sage --summary-only
python3 -m opendescent.cli examples/codex2_timeout_cases.json --backend mwrank_direct --summary-only
python3 -m opendescent.cli examples/codex2_timeout_cases.json --backend native --evidence-transcripts --out timeout_evidence.jsonAttach native 5-descent and 5-covering Cassels-pairing task output:
python3 -m opendescent.cli examples/calibration_curves.json --native-descent-tasks --summary-onlyExport local Magma batches for unresolved p=3 and p=5 BSD descent probes:
python3 bsd_local_magma_batch_export.pyRun the codex-2 BSD worklist with open-source tools only:
python3 codex2_no_magma_completion.py --codex2-dir /Users/mbf_mini/p3/codex-2Run the codex-2 higher 2-descent certificate pass:
python3 codex2_higher2_completion.py --codex2-dir /Users/mbf_mini/p3/codex-2Expected Sage-backed calibration summary:
11a1: rankInterval=[0, 0] certified=True
37a1: rankInterval=[1, 1] certified=True
389a1: rankInterval=[2, 2] certified=True
{
"curves": [
{
"label": "11a1",
"conductor": 11,
"weierstrass": [0, -1, 1, -10, -20]
}
]
}The Weierstrass model is:
y^2 + a1*x*y + a3*y = x^3 + a2*x^2 + a4*x + a6
| Backend | Status | Purpose |
|---|---|---|
native |
partial | OpenDescent's own arithmetic and explicit descent gaps |
sage |
working | Open-source Sage/eclib rank bounds, Selmer rank, torsion |
mwrank_direct |
working | Direct eclib/mwrank rank, 2-Selmer, and second-descent trace adapter |
pari_gp |
planned | PARI/GP number-theory support |
magma |
optional detector only | Future licensed-user adapter; not required and not bundled |
Certification is true only when the backend returns equal lower and upper rank bounds.
Committed calibration fixtures live in examples/expected/.
The three timeout cases from p3/codex-2 live in
examples/codex2_timeout_cases.json; their GRH-conditional transcript fixtures
live in examples/transcripts/.
- Full Tate algorithm for additive and non-minimal bad-prime cases.
- Native 2-covering construction.
- Local solubility tests for coverings.
- Native 2-Selmer upper bounds.
- Native higher 2-descent and Cassels-pairing routines for unresolved Selmer gaps.
- Native higher 2-power structure certification, including
Z/4 + Z/4-type evidence. - Complete native 5-covering construction and local solubility.
- Complete native Cassels-pairing entry computation for 5-coverings.
- Mordell-Weil rank certificate closing lower and upper bounds.