NAF-Bench Leaderboard 🧠

Can a language model follow a specified reading of negation β€” instead of falling back on its own default?

solver-certified contamination-free (fresh hidden set) JOINT accuracy  Β·  GitHub Β· Inputs Β· Submit

⬇️ Download all data + submit guide (one zip) train Β· validation Β· test (hidden-set inputs) Β· README with submit steps

What it tests

The word "not" doesn't mean one thing. In law, regulation, and medicine, the intended meaning depends on the reading in force: open- vs closed-world, two- vs three-valued, credulous vs skeptical. NAF-Bench gives a model a small logic program and tells it which reading to use, then checks whether it applies that reading rather than its gut default. Every instance is generated and certified by solvers (SWI-Prolog, a well-founded solver, and clingo), so the answer key is ground truth, and the test set is regenerated with fresh seeds to stay contamination-free.

Each program is asked under four specified readings:

Answers are A (definitely yes), B (definitely no), or C (cannot be determined). The primary metric is JOINT accuracy: a program counts only if all four readings are correct β€” this strips the lucky/vacuous coincidences a per-prompt average would reward.

Subtasks (benchmark versions)

NAF-Bench is generated by one solver-certified pipeline; it has grown through versions. The guess-baseline is what a program-blind constant (best fixed answer per reading) scores β€” a subtask is only meaningful when models beat it, so this column is the honest test of a version's validity.

SubtaskWhat it variesProgramsGuess-baselineFrontier (o4-mini)Status
v1cycle length + number of independent cycles13676.5%β€”diagnostic (largely guessable)
v2combinatorial (2ⁿ stable models)144100.0%83.3% ⟡ below baselinesuperseded (a constant wins)
hard_v3mixed certified signatures + bounded 3-SAT search (cnf_n8)7722.1%68.8% ⟡ beats baselineactive β€” the live competition

The Frontier column is the tell: on v2 even o4-mini (83.3%) scores below the 100% constant β€” a frontier model loses to a program-blind guess, so the subtask measures nothing. On hard_v3 o4-mini (68.8%) clearly clears the 22.1% baseline, so the subtask is real. That is why hard_v3 is the scored competition; v1/v2 are kept for provenance. (Open models track the same story: 5.8–12.5% on the paper's base set, and no better than the guess on v1/v2.)

hard_v3 is a single set of 77 programs (385 prompts). It keeps the small 3-SAT search tier cnf_n8 but excludes the prohibitively-large instances cnf_n14/cnf_n22 (search spaces of 2¹⁴–2Β²Β²): those are not informative β€” every model just fails or runs out of context β€” so dropping them makes the cnf condition sharper.

Families: decided/loopy (read the program, resolve a negation cycle), parity/coupled (combinatorial bookkeeping), cnf_n8 (genuine but bounded 3-SAT search), plus a propagation-decidable control.

Live competition β€” hard_v3 (hidden test set β€” auto-scored on submission)

Ranked by JOINT % only. The trace-sound % column is auxiliary information, not a ranking criterion: if you submit a trace, we check whether its reasoning commits to the certified query verdict. The check is regex-based and imperfect β€” a rough approximation of soundness, not a verified proof audit. – = answer-only submission. For closed frontier models (o4-mini, sonnet-5) the trace is the model's visible output only (hidden chain-of-thought is not returned), so their trace-sound can understate and is not directly comparable to the open models.

Loading…

Reference results β€” hard_v3 (public dev set)

These are baselines, not a ceiling β€” initial reference points we measured on the public hard_v3 set (o4-mini is a closed frontier reference; the rest are open-weight). Beat them by submitting to the live competition above.

#ModelopenJOINT %
1o4-mini (frontier ref)β€”68.8
2DeepSeek-V4-Flashβœ“62.3
3Gemma4-31Bβœ“58.4
4Qwen3.5-35Bβœ“54.5
5Qwen2.5-Coder-32Bβœ“39.0
6DeepSeek-R1-32Bβœ“33.8
7Qwen3.6 *βœ“1.3
8Llama3-8Bβœ“1.3

Values are JOINT accuracy (%) on the public dev set. Decoding: temperature 0 for all, with a per-model token budget large enough to conclude. * Qwen3.6's 1.3 is a non-termination result, not a reasoning score: even at its recommended temperature with a 16k budget it fails to finish ~50% of readings (per-reading it concludes ~49%). On loopy, the open models V4-Flash (19/20) and Gemma4 (16/20) actually beat o4-mini (11/20); o4-mini's edge is the search family cnf_n8.

Data & downloads

Everything flows from one open-source generator, so data is unlimited and contamination-free β€” the test gold is the only thing held back. Can't reach GitHub (blocked in some regions)? The dataset is also fully on Hugging Face above, or email bqmbill714@gmail.com and we'll send it.

πŸ› οΈ Open-source generator
solver-certified (SWI-Prolog Β· WFS Β· clingo) Β· fresh seeds Β· regenerable
↓   splits into   ↓
TRAIN 🌐 public · with gold
1320 rows, fresh instances. Or regenerate unlimited with the open-source generator.
DEV 🌐 public · with gold
hard_v3 (+ v1/v2) with labels β€” develop & self-check.
πŸ€— download on HF (validation.jsonl, dev_v1/v2)
TEST 🌐 inputs public Β· πŸ”’ gold private
Predict on the public inputs; gold is server-side only (contamination-free).
πŸ€— inputs on HF (test.jsonl, inputs_hard.jsonl)

Submit

Run your model on the public inputs, produce a JSONL of {"id": ..., "prediction": "A|B|C"}, add it as submissions/<team>__<subtask>.jsonl and open a PR on GitHub. A GitHub Action scores it against the hidden gold (never public) and updates this board automatically.