ADR-079: Deterministic Solver Provider — Zero-LLM Template/sympy Discharge, Honestly Attributed

Field Value
Decision ID ADR-079
Initiative Fold in deterministic (sympy/template) solving as an optional provider — discussion #3217 direction #1
Proposed By Ocean (@ohdearquant), drafted by Leo
Date 2026-06-20
Status Proposed

Context

Ocean’s runs produced a large set of template-* proofs that were deterministic sympy/Python solves, not LLM solves — disclosed publicly in #3217 (“not solved by LLM, solved by sympy”). They had been written into provenance as provider≜claude; model≜template-*, which the board renders as a model attribution. That record is being corrected to provider≜python; model≜sympy (the honest one), and Chris asked, as direction #1 of the thread, to “fold in your method for deterministic solving (optional, non-breaking).” This ADR contributes the method. It is scoped narrowly and on purpose: it adds a solver and an attribution convention, and it does not claim to add a new anti-farming guarantee — credit and provenance integrity stay with the ADRs that own them (ADR-035, ADR-078, ADR-023/037).

The method is deterministic and carries no model in the solve loop. It has two tiers:

  1. Tactic pre-pass. Elaborate the goal and try the ADR-035 triviality battery as a solver rather than as a gate: if one tactic (rfl/decide/norm_num/ring/omega/…) closes it, emit by <tactic> and stop. The battery already exists in tools/sourcing/check_triviality.py; this reuses it the other way round. Every tier-1 output is trivial by ADR-035 by construction — a single battery tactic closed it.
  2. sympy-assisted construction. For declared elementary families (integer factorisation/divisibility, CRT/ZMod, polynomial/ring identities, linear_combination witnesses), compute the witness or normal form in sympy and emit the corresponding kernel-checkable Lean proof. This reaches a band the bare battery cannot — a specific large factorisation decide will not brute-force becomes a one-line proof once sympy hands over the witness. Tier-2 outputs are mechanical template work, but they are not all trivial-by-ADR-035: a linear_combination with a computed witness, for instance, is not in the ADR-035 set and need not fall to ADR-078’s fuller battery either. Where an output is a genuine non-trivial proof, the honest record of who found it is “a deterministic procedure”, and that is the attribution this ADR standardises.

Whatever the tier, soundness is untouched: a candidate is just a by … block, and the existing path re-elaborates it and the kernel re-checks (ADR-006/048). Nothing is trusted on the provider’s word, exactly as ADR-013 already requires for every provider.

The reason to want this is cost and coverage. A goal a deterministic procedure closes instantly is a goal no LLM has to attempt, and ADR-013 records that a failed LLM attempt costs a full UNSORRY_WALL window plus a Lean build. The elementary families the Identity Engine (ADR-043) targets — ZMod-decide divisibility, SOS inequalities, telescoping identities — are exactly the band a deterministic provider clears for free, freeing model budget for the hard, credited obligations.

On credit, the honest accounting is narrow. This ADR does not decide what scores; ADR-035 (the triviality probe), ADR-078 (credited vs glue obligations of sponsor-registered targets), and ADR-023/037 (provenance) already do. A deterministic solve earns whatever those mechanisms grant any proof with the same statement and the same recorded provenance. What this ADR adds is the convention that such a solve is recorded provider≜python; model≜sympy, so the board is not told an LLM did it. That convention is the same kind of un-kernel-enforceable, spoofable record ADR-013 already lives with for model identity — a contributor can write a false provider, and defeating that is the job of the provenance subsystem (ADR-023/037), not this ADR. So this ADR neither closes nor widens the provenance-spoofing hole; it states the honest default and points at where spoof-resistance is owned.

One coupling must be named plainly, because it is the real risk. A free, fast proof factory for easy goals is a farming accelerant if credit attaches to easy or atomic goals. Under today’s advisory atomic model it partly does, so a deterministic factory pointed at the board would be a farm vector. That is precisely why this ADR is proposed as a companion to ADR-078: once credit attaches to non-trivial, sponsor-authored obligations and ADR-035 is blocking at registration, the factory can only discharge zero-credit glue and pre-pass work, which is its sanctioned use. The value of the deterministic provider is therefore real only alongside that credit reform; on its own it would need ADR-035 made blocking before it is safe to enable against the board.

WH(Y) Decision Statement

In the context of a provider/model seam where model choice is a performance knob and never a soundness one and provider identity is explicitly not kernel-enforceable (ADR-013), an ADR-035 tactic battery already in the tree, the elementary-identity families the swarm is strongest at (ADR-043), and the companion proposal ADR-078 moving credit onto non-trivial sponsor-authored obligations,

facing a large class of goals (template-matchable identities and witness-constructible statements) that an LLM closes only after burning a full wall plus a build, while a deterministic procedure closes them instantly and for free — and our own runs showing deterministic solving works at scale but was mis-attributed to a model,

we decided for an optional, off-by-default deterministic provider (provider≜python; model≜sympy) with the two tiers above, re-verified by Gate A like any proof, recorded with honest python/sympy provenance, and used for a zero-LLM glue discharger on ADR-078 targets, a fast pre-pass before an LLM is dispatched, and Phase-1 autoformalisation coverage,

and neglected (a) claiming this ADR itself makes deterministic output non-creditable — it does not; credit is decided by ADR-035/078/023, and asserting a guarantee this layer cannot enforce would be the over-claim we are avoiding; (b) attributing deterministic solves to any LLM provider — the dishonest record we are fixing; (c) sourcing tier-2 output as standalone atoms through ADR-043 — most fail that pipeline’s triviality gate, and the rest should not be minted as atoms regardless; (d) enabling it against the board before ADR-035 is blocking or ADR-078 is in force — without one of those a free factory is a farm vector, named above; (e) building cryptographically attested, spoof-proof provenance scoring into this ADR — that is a separate subsystem belonging to ADR-023/037’s evolution, out of scope here; (f) making it on-by-default or coupling it to soundness — it is a cost/coverage knob, off unless asked for,

to achieve free, instant discharge of the elementary/template band so LLM budget is spent on hard credited obligations, on the existing provider seam, with an honest attribution standard,

accepting that coverage is bounded to template-matchable and witness-constructible families (no general reasoning); that the non-credit treatment of its output rides on honest, spoofable provenance (the ADR-013 residue, deferred to ADR-023/037), not on a new gate; that the deterministic factory is only safe against the board alongside ADR-078 or a blocking ADR-035; and that the family→template surface is a governed surface that must be reviewed as it grows.

Consequences

References

Reference ID Title Type Location
REF-1 Model & Effort Policy (the provider/model seam; provider identity not kernel-enforceable) Decision ADR-013-Model-Effort-Policy.md
REF-2 Non-Trivial Theorem Enforcement (the battery reused as a solver) Decision ADR-035-Non-Trivial-Theorem-Enforcement.md
REF-3 The Identity Engine (the elementary families this discharges) Decision ADR-043-Identity-Engine.md
REF-4 Sponsor-Registered Targets and Obligation-Discharge Credit (glue / non-credit; farm-bounding) Decision (proposed) ADR-078-Sponsor-Registered-Targets-And-Obligation-Discharge-Credit.md
REF-5 Optional Proof Provenance and Leaderboard (attribution record; spoof-resistance owner) Decision ADR-023-Proof-Provenance-Leaderboard.md
REF-6 Corroborated Solver Provenance — phantom-attribution guard Decision ADR-037-Corroborated-Solver-Provenance.md
REF-7 Distributed Autonomous Research Swarm plan (Phase 1 autoformalisation) Proposal docs/proposals/distributed-research-swarm-plan.md
REF-8 Discussion: fold in deterministic solving (direction #1) Discussion #3217

Status History

Status Approver Date
Proposed Ocean (@ohdearquant) 2026-06-20