Skip to content

Tighten 2-isogeny descent local solubility checks (improve rank upper bounds)#5

Open
asiryan wants to merge 3 commits into
rank_boundsfrom
codex/verify-and-implement-rank-calculation-algorithm
Open

Tighten 2-isogeny descent local solubility checks (improve rank upper bounds)#5
asiryan wants to merge 3 commits into
rank_boundsfrom
codex/verify-and-implement-rank-calculation-algorithm

Conversation

@asiryan
Copy link
Copy Markdown
Owner

@asiryan asiryan commented Dec 19, 2025

Motivation

  • The lightweight rank-upper bound (2-isogeny descent) produced very coarse bounds in nontrivial cases due to heuristic/skipped local tests and a weak 2-adic sieve.
  • Improve correctness of local solubility screening for the quartic coverings that appear in the 2-isogeny Selmer enumeration so the computed upper bounds are tighter.
  • Avoid unsafe casting of large prime factors when building the list of local primes to test.
  • This change focuses on the local-solubility stage used by RankBounds/TwoIsogenySelmerDimension (partial improvement toward a full descent implementation).

Description

  • File modified: sources/EllipticCurveQ.Analysis.cs.
  • Replace the previous LINQ cast of prime factors into int with an explicit loop that filters out p<2 and returns null if any prime exceeds int.MaxValue, avoiding unsafe casts.
  • Remove the previous heuristic skip for very large primes and add a deterministic per-prime routine HasSolutionModuloPrime to check solvability modulo p (and handle singular roots via a lift to p^2).
  • Handle the special case when p | d in the quartic by reducing the equation and checking the correct residue classes; add IsSquareInQp to detect trivial solvability via a Q_p square test for b/d.
  • Increase 2-adic modulus used for the 2-adic local check from 2^6 (64) to 2^8 (256) to reduce missed 2-adic obstructions; add helpers ModToLong / reuse ModToInt for safe modular reductions.

Testing

  • No automated tests were executed as part of this change.
  • Suggested validations (manual/automated to run after this PR): run dotnet build, execute the examples program, and compare RankBounds results on known curves against trusted data (e.g. LMFDB) to verify improved upper bounds.

Notes: this PR tightens local solubility checks used in the 2-isogeny descent and should reduce false-positive Selmer classes; it is not a complete implementation of all descent methods (full multi-descent / global 2-descent is not yet implemented).


Codex Task

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant