Dissent
Find the formalization errors nobody is looking for.
Downstream SMT verification proves properties of the formalization you handed it. It is therefore structurally unable to notice the failure that dominates autoformalization in practice: the model is internally impeccable and encodes the wrong reading of the words. Rigour, aimed at the wrong object.
Dissent points the solver somewhere else. It produces N independent formalizations of the same clause and searches for an input on which they disagree — then minimizes that input until it is a fact pattern a person can check by hand, re-executes it outside the solver, and traces it back to the phrase responsible. Its output is never “this clause is correct”. It is only ever “here is where the readings split”, or “these readings were proved to agree, under these assumptions”.
app.py — run it locally with python app.py, or switch this
Space to the Gradio SDK by setting sdk: gradio and
app_file: app.py in the README frontmatter.
(n=15)
(n=13)
Explore the run
All 28 synthetic clauses, 15 of which need a human. Pick one: the disputed phrase is highlighted, and the numbers that split the readings are below it.
Benchmark
Three conditions on the same run. (A) single formalization + self-verification. (B) single formalization + downstream SMT verification. (C) Dissent.
| condition | detection rate | false-positive rate | misformalizations missed |
|---|---|---|---|
| (A) self-verification, at a matched false-positive rate | 46.7% | 0.0% | 41% |
| (A) same, at maximum sensitivity | 100.0% | 92.3% | — |
| (B) downstream SMT verification | 4.0% | 0.0% | 92% |
| (C) Dissent | 100.0% | 0.0% | 0% |
Run it yourself
pip install -e . dissent audit contract.txt --n 5 # your document, as a review queue python app.py # the interactive version, locally python benchmarks/run.py --n 5 # reproduce every number above
Honest limitations
- Synthetic by construction. These rates describe behaviour on this corpus and are not a guarantee on any real agreement.
- Condition (A) is a model, not a measurement of any LLM. It is reported as a curve across its entire sensitivity range precisely so the comparison does not hinge on a chosen operating point.
- The corpus is ~54% ambiguous by design, to make both rates measurable. That is not a prevalence estimate.
- “Proved equivalent” always means “under these axioms”, and the axioms are shown with every clause.
- Dissent does not resolve ambiguity. It locates it. Choosing the intended reading is a human decision, and it stays one.