Skip to content

Challenges: Odlyzko root-discriminant bound and Mazur's torsion bound - #289

Merged
Vilin97 merged 1 commit into
mainfrom
vilin/challenge-odlyzko-mazur
Jul 28, 2026
Merged

Vilin97 merged 1 commit into
mainfrom
vilin/challenge-odlyzko-mazur

Conversation

@Vilin97

@Vilin97 Vilin97 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

The first two entries on the challenge board, and the first real exercise of the machinery in #288 (stacked on it; retarget to main once that merges).

Both are results the FLT project assumes and does not plan to prove itself — FLT/Assumptions/ states each as an axiom with a literature reference. They are stated here verbatim as FLT needs them, Apache-2.0 with the upstream headers retained.

Challenge.Odlyzko.abs_discr_ge

A totally complex number field of degree ≥ 18 has |discr K| ≥ 8.25 ^ finrank ℚ K — root discriminant at least 8.25. Minkowski's elementary bound is too weak; this comes from Poitou's simplification of Odlyzko's analysis of the zeros of the Dedekind zeta function (equation 26 and the table on p17 of "Sur les petits discriminants").

FLT tracking issue #458 links Thomas Browning's notes on an approach. Buzzard calls it one of the easiest of the results FLT assumes.

Challenge.Mazur.torsion_ncard_le

The torsion subgroup of E(ℚ) has at most 16 elements — the numerical consequence of Mazur's 1977 classification (cyclic of order ≤ 10 or 12, and ℤ/2ℤ × ℤ/nℤ for n = 2, 4, 6, 8). Every known proof of FLT uses it. FLT tracking issue #477.

Note Set.ncard returns 0 on an infinite set, so the statement reads "at most 16, or infinite". That is the form FLT assumes — finiteness of the torsion subgroup is classical and far easier — and both the card and the registry's informal statement say so.

What this exercises in #288

The statement gates (Mathlib-only imports, sorry restricted to the registered declarations, #print axioms confirming each registered statement is open and nothing else in the file rests on sorryAx), the generated cards, mk_all on the Challenge library, and the challenge review path. challenge-verify.yml has nothing to verify yet — both are open.

🤖 Generated with Claude Code

@greptile-apps

greptile-apps Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

Greptile Summary

This PR adds the first two entries to the Lean Pool challenge board: an Odlyzko root-discriminant bound for totally complex number fields and Mazur's torsion bound for elliptic curves over ℚ, both stated verbatim as the FLT project assumes them.

  • Challenge.Odlyzko.abs_discr_ge: States that a totally complex number field of degree ≥ 18 has |disc K| ≥ 8.25^(finrank ℚ K), correctly importing IsTotallyComplex and the discriminant definitions from Mathlib; the 8.25 decimal literal elaborates to 33/4 in ℝ via OfScientific, and the ℤ → ℝ coercion on discr K is standard.
  • Challenge.Mazur.torsion_ncard_le: States that the torsion subgroup of (E⁄ℚ).Point has Set.ncard ≤ 16; the intentional weakening (ncard returns 0 for infinite sets, so this reads "at most 16 or infinite") is explicitly documented in both the docstring and the YAML informal statement, matching the FLT assumption exactly.
  • Both registry entries carry all required YAML fields, module docstrings are consistent with what --write-challenge-cards would generate from challenges.yml, imports are strictly Mathlib-only, and the Challenge.lean index is updated.

Confidence Score: 5/5

Safe to merge; adds two well-formed open challenge statements with no closed proof code beyond the sorry stubs.

Both Lean statements typecheck structurally, the module docstrings are consistent with the YAML entries (the quality gate will verify this), imports are Mathlib-only, and the intentional Set.ncard weakening in the Mazur statement is explicitly documented. No regressions to existing pool code are possible since challenge files are isolated by design.

Files Needing Attention: No files require special attention.

Important Files Changed

Filename Overview
Challenge/Odlyzko.lean New challenge file for the Odlyzko root-discriminant bound; statement faithfully encodes the informal description, imports are Mathlib-only, module docstring matches what the card generator would produce from challenges.yml.
Challenge/Mazur.lean New challenge file for Mazur's torsion bound; Set.ncard semantics (returns 0 on infinite sets) are intentionally and explicitly documented in both the docstring and the informal YAML entry, matching the FLT project's stated assumption.
Challenge/challenges.yml Two new registry entries; all required fields present and consistent with the Lean files.
Challenge.lean Top-level index updated with import statements for both new challenge modules; consistent with running lake exe mk_all on the Challenge library.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    CL["Challenge.lean\n(top-level index)"]
    CM["Challenge/Mazur.lean\ntorsion_ncard_le := sorry"]
    CO["Challenge/Odlyzko.lean\nabs_discr_ge := sorry"]
    CY["Challenge/challenges.yml\nregistry"]

    CL -->|"import Challenge.Mazur"| CM
    CL -->|"import Challenge.Odlyzko"| CO

    CM -->|"registered in"| CY
    CO -->|"registered in"| CY

    M1["Mathlib.AlgebraicGeometry\n.EllipticCurve.Affine.Point"]
    M2["Mathlib.GroupTheory.Torsion"]
    M3["Mathlib.NumberTheory.NumberField\n.Discriminant.Defs"]
    M4["Mathlib.NumberTheory.NumberField\n.InfinitePlace.TotallyRealComplex"]

    CM -->|"import"| M1
    CM -->|"import"| M2
    CO -->|"import"| M3
    CO -->|"import"| M4

    CY -->|"card sync gate\n(quality.py)"| CM
    CY -->|"card sync gate\n(quality.py)"| CO
Loading

Reviews (4): Last reviewed commit: "Challenges: Odlyzko root-discriminant bo..." | Re-trigger Greptile

@Vilin97
Vilin97 force-pushed the vilin/challenge-odlyzko-mazur branch 2 times, most recently from d1137f8 to bfdb024 Compare July 28, 2026 06:30
@Vilin97
Vilin97 changed the base branch from vilin/challenge-mode to main July 28, 2026 07:30
Two open statements the Fermat's Last Theorem project assumes and does
not plan to prove itself, stated verbatim as FLT needs them (its
`FLT/Assumptions/` axioms, Apache-2.0, headers retained):

- `Challenge.Odlyzko.abs_discr_ge` — a totally complex number field of
  degree at least 18 has absolute discriminant at least 8.25 to the
  degree. Minkowski's elementary bound is too weak; this follows from
  Poitou's simplification of Odlyzko's analysis of the zeros of the
  Dedekind zeta function (table p17 of "Sur les petits discriminants").
  FLT issue #458, which also links Thomas Browning's notes on an
  approach; Buzzard calls it one of the easiest of the results FLT
  assumes.

- `Challenge.Mazur.torsion_ncard_le` — the torsion subgroup of the
  rational points of an elliptic curve over ℚ has at most 16 elements,
  the numerical consequence of Mazur's 1977 classification. Every known
  proof of FLT uses it. `Set.ncard` is 0 on an infinite set, so the
  statement reads "at most 16, or infinite" — the form FLT assumes,
  since finiteness is classical and far easier; the card says so.

Both are `sorry` in the `Challenge` library, registered in
`Challenge/challenges.yml` with the informal statement each is judged
against, and carry a rough estimate of what a solution would cost.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Vilin97
Vilin97 force-pushed the vilin/challenge-odlyzko-mazur branch from bfdb024 to 47416c2 Compare July 28, 2026 07:31
@github-actions

github-actions Bot commented Jul 28, 2026 •

Copy link
Copy Markdown
Contributor

🤖 LLM review — challenge (gpt-5.6-sol)

Reviewed head: 47416c29e8c31b994d4a2f3dd1302d5c5ce72ce7

Verdict: ✅ approve

This PR adds two established but unformalized inputs used by the FLT project: the Poitou–Odlyzko discriminant bound for totally complex fields of degree at least 18, and the numerical consequence of Mazur’s torsion classification giving a maximum finite torsion size of 16. Both Lean declarations match their registry prose, including the intentional infinite-set behavior of Set.ncard, and both belong on the board.

Aspect Value
Significance ✅ high
Faithful to the prose ✅ faithful
Matches cited source ✅ matches
Vacuity risk ✅ none
Difficulty research
Estimated solution size ~55,000 lines — This aggregates roughly 50000 lines for Mazur’s theorem, whose modular-curve, Jacobian, and Eisenstein-ideal infrastructure is absent from Mathlib, and roughly 5000 for the explicit-formula and numerical analysis behind the Odlyzko bound.

Statement check: The Odlyzko declaration states the exact degree, signature, and discriminant inequality from the prose, while the Mazur declaration states that finite rational torsion has cardinality at most 16 and deliberately assigns cardinality zero in the infinite case.

Both challenges are significant, faithful numerical consequences of the cited results and have no evident vacuity, trivial proof, or gameable formulation.


Tokens: 5,073 in / 6,546 out · Tier: flex · Effort: xhigh · Cost: $0.1109
Automated review against .github/CHALLENGE_REVIEW_RULES.md. Disagree? Reply on the PR; rules can be updated in a PR of their own.

@Vilin97
Vilin97 merged commit 490b3a3 into main Jul 28, 2026
11 checks passed
@Vilin97
Vilin97 deleted the vilin/challenge-odlyzko-mazur branch July 28, 2026 08:17
Vilin97 added a commit that referenced this pull request Jul 28, 2026
…ol/pull/289)) came back with the mathematics unreadable: (#291)

> elliptic curves over `^R09` … `|(discr K : ^])| ^U 8.25 ^ finrank ^R0a K`

where it should read `over ℚ` and `|(discr K : ℝ)| ≥ 8.25 ^ finrank ℚ K`.

The mangling is the model's own: nothing between `json.loads` and the posted comment touches those strings, the bytes in the stored comment are literal ASCII, and Greptile's comment through the same fetch path renders `ℚ` fine. It is also not a systematic escape — `ℚ` came out as `^R0a` in three places and `^R09` in another — so it cannot be decoded after the fact, only prevented.

So: one notation rule, appended to every system prompt, asking for the characters as they appear in the diff and offering a graceful fallback (describe the symbol in words) rather than an approximation. A review of Lean that cannot render `ℚ` or `≥` is worth much less in this repository.

Tested by asserting the rule reaches the model for every mode in `REVIEW_MODES`, so a new review kind cannot quietly skip it. Verified for real by re-running `/review` on #289 after this merges.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
BODY
LLM review: ask for literal Unicode so the mathematics is readable

The first challenge review (#289) came back with the mathematics
unreadable: `over ^R09` for `over ℚ`, and
`|(discr K : ^])| ^U 8.25 ^ finrank ^R0a K` for
`|(discr K : ℝ)| ≥ 8.25 ^ finrank ℚ K`.

The mangling is the model's own — nothing between `json.loads` and the
posted comment touches those strings, the stored bytes are literal ASCII,
and another bot's comment through the same fetch path renders `ℚ` fine.
It is not a systematic escape either (`ℚ` came out as both `^R0a` and
`^R09`), so it cannot be decoded after the fact, only prevented.

Append one notation rule to every system prompt: copy the characters as
they appear in the diff, and if a symbol cannot be reproduced, describe
it in words rather than approximate it. A test asserts the rule reaches
the model for every mode in REVIEW_MODES.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@Vilin97

Vilin97 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator Author

/review

Re-running the challenge review to confirm the notation fix in #291: the first pass rendered over ℚ as over ^R09.

@Vilin97

Vilin97 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator Author

/review — re-run to live-test the gpt-5.6-sol @ xhigh upgrade (752d7bf); comparing cost against the gpt-5.5 baseline on the same head.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant