Occams · adr
status: decided · revisit trigger named below, not left open-ended

Assumptions are discharged in configuration, not in a proof assistant

Disambiguation first, because this project has been caught by a name twice. Lean here means Lean 4, the theorem prover and implementation of dependent type theory. It is not LEAN, QuantConnect's algorithmic-trading engine, which is what the word means almost everywhere else in this domain. Anything written here about "Lean" says nothing about that engine, which is a separate question for M0.9.

The argument

Formal verification proves that an implementation matches a specification. It is silent on whether the specification is true of the world.

That distinction decides this, because the failures this project has actually recorded are validity failures, not correctness failures:

The apparatus this project builds — pre-registration, the sealed reserve, the declared floor, the null harness, the positive control — exists because the hard problem here is epistemic, not computational. A proof assistant is an excellent tool for the problem this project does not have.

The exception, and it is real

One failure class does fit, and it has now occurred twice.

Both are statistical results resting on an assumption nobody was tracking, and that is exactly what dependent types are for — making an assumption a proof obligation rather than a comment, so a call site that cannot discharge it does not compile.

The lesson is real. The tool is not the only way to take it.

Decision

Assumptions are discharged as declared parameters with recorded provenance, in configuration and in the register, not as proof obligations in a type system. sigma and rho are the first two and M0.15 already carries the pattern: a declared value, its provenance, and — where it is declared before it can be measured — a range across which the go/no-go must hold.

No proof assistant is a build, test or CI dependency of this project, in v1 or after. That half is not deferred; it is decided.

Considered options

Consequences

The revisit trigger is named, not open-ended. The alpha-algebra proof becomes worth its cost after M1 ships and if the algebra proves fiddly in practice — meaning a real inconsistency, or a rule change whose effect on the invariant is not obvious by inspection. At that point the rules are stable and load-bearing, which is when a one-off proof is cheapest and worth most. Before then it is optimising a stage this project has not reached.

It stays an artifact, never a dependency. Even if adopted, no build step, test or CI check may require it. A proof that gates the build is a proof that gets deleted the first time it blocks a release.

The general rule, which outlives Lean. A tool that improves correctness without improving validity ranks behind the M0 gates. Type checkers, property-based testing, fuzzing, static analysis and model checking all fall under it. None is discouraged where cheap; none justifies delaying a free lookup that can stop the project.

What this does not say. It does not say formal methods are unsound or unhelpful. It says this project's bottleneck is elsewhere, and that spending the scarce resource — the author's time — on correctness while validity and affordability remain unmeasured would be the same mistake in a more respectable dialect.

Naming, if it is ever adopted. Disambiguate from QuantConnect's LEAN on first mention, in the ADR that adopts it and in CLAUDE.md. The naming trap has caught this project twice and both times it was a collision nobody thought worth writing down.