Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

What we prove

Assura uses layered checking. Not every green assura check means “mathematically proved forever for every feature.” This page is the honest map for security and formal-methods readers.

Result kinds (SMT)

ResultMeaningTypical user action
VerifiedSolver showed the obligation holds under the model (e.g. validity of ensures under requires)None; keep the contract
CounterexampleSolver found values that break a clauseFix the contract or the implementation / IR
TimeoutSolver hit the time budgetSimplify; raise timeout; try portfolio (Z3+CVC5)
UnknownInconclusive for other reasonsRead the reason string

Known SMT limitation (warning, not hard fail)

When the reason includes the marker not yet encoded in SMT, the CLI treats the result as a warning (exit 0 by default). That means the compiler intentionally skipped modeling a feature, not that the clause was proved.

Other Unknown reasons (non-linear arithmetic, genuine solver unknown) are treated more severely. See FAQ: “Unknown” verification result.

Layers

LayerWhat runsTime scaleProves?
0 StructuralParse, resolve, type, domain checkersmsTypes, names, many security structure rules (taint, lock order shape, …)
1 Decidable / SMTClause encoding to Z3/CVC5sub-second to secondsModeled boolean obligations (requires/ensures/invariants in the supported fragment)
2+ Heavy / advancedExtra passes (liveness-style, BMC-related, …)seconds+Additional obligations when enabled

Default config values are short (often 1s at the options layer). Layer 1 clause solvers floor at 10 seconds so multi-clause demos are not starved; set [verify] timeout = 30000 (or higher) when you need more. See FAQ: Z3 timeout on a contract.

What is not automatically proved

  • Features that still return Unknown with the known-limitation marker
  • Host code outside Assura contracts / IR / check-rust body modeling
  • Absolute absence of all security bugs (only the properties you state and that the solver models)
  • Correctness of the SMT solvers themselves or of rustc

Vacuous success

An empty file or a contract with no SMT proof obligations can still report check success with no type errors. Human and JSON output call this out (vacuous / “no SMT proof obligations”). Agents must not treat that as coverage of ensures/invariants.

AI-generated implementations

For auto-implement / IR injection, acceptance is typically no Counterexample, not “every clause is Verified”. Unknown from unmodeled features is common; runtime assertions from codegen still apply.