Current implementation and qualification#
Note
This is the archived status page. See the current capabilities and the assignment ownership explanation. Migration revisions, execution details and comparison results are collected in Assignment migration evidence.
This is the done entrance: the implemented user interface, its limitations, and the evidence available for it. Start with Build and run Primo to build and run Primo. Work underway belongs in Active work; possible next work belongs in Open leads register.
Documented solver source: c944fa790c2043ebac93b8d6f63c7b02b0c2c235. The manual links to this reviewed source revision. Its command interface and solver entry points are linked to that commit. New guide examples are small reproducibility checks, not a fresh full-corpus qualification. Historical results keep their own measured revisions.
Supported routes#
Declared logic |
Implemented solving scope |
Models |
Session engines |
|---|---|---|---|
|
Quantifier-free equality and uninterpreted functions |
Yes |
Rebuild; opt-in assumptions |
|
Linear Real arithmetic |
Yes |
Rebuild; opt-in assumptions |
|
Linear Int arithmetic, with bounded integer completion |
Yes |
Rebuild |
|
Uninterpreted functions with linear Real arithmetic |
Yes |
Rebuild |
|
Uninterpreted functions with linear Int arithmetic |
Yes |
Rebuild |
|
Enumerative instantiation: contradictions and restricted covered SAT cases; otherwise |
No for quantified formulas |
Rebuild |
All rows remain subject to frontend admission, resource limits and the limitations below. A declared logic does not uniquely identify the execution path: preprocessing may discharge the problem or expose a pure-theory/Boolean leaf. SAT support is delegated to CaDiCaL through IPASIR-UP.
Models require :produce-models true before set-logic, followed by a
successful check-sat and get-model. See Request a model.
Repeated queries, push/pop and scoped declarations are supported in the
default rebuild engine. Assumptions mode retains more internal state but
has additional input/option restrictions; see Repeated queries and scopes.
Limits and unsupported features#
Integer search is bounded and can return
unknown. Accepted input is not a guarantee that Primo will decide it within the configured resources.Quantified UF has no general SAT-completeness claim and no printed-model support. Quantified arithmetic, E-matching and conflict-based instantiation are not implemented.
Arrays, bit-vectors, nonlinear arithmetic, proof production, and dedicated
QF_IDL/QF_RDLadmission are not implemented.get-value,get-unsat-core,get-proof,check-sat-assumingand global declarations are not implemented.div,modandabsare accepted Int extensions, not a claim of strict QF_LIA/QF_UFLIA grammar conformance. Division/remainder requires a nonzero literal divisor. Full SMT-LIB conformance is not claimed.
Read SMT-LIB input and results for commands and result semantics. In particular,
unknown, unsupported and command errors must never be interpreted as UNSAT.
Extensibility and retained specialized paths#
Primo separates parsing, terms/models, SAT, SMT coordination and theory solvers. Current architecture explanations remain in Architecture, SAT backend: IPASIR-UP and CaDiCaL and DPLL(T) integration while their rewrite proceeds.
Component |
Current implementation reference |
|---|---|
EUF and Boolean arguments |
|
Real and integer arithmetic |
Arithmetic, QF_LIA: Branch-and-Bound, GCD-Consistency, and Gomory Cuts on the Existing Simplex |
Dedicated convex Real combination |
|
N-component interface and the production Int combination route |
Modular theory combination, N-component combination migration |
Quantified UF |
|
Owning models and reconstruction |
The general component interface is an extension boundary, not evidence that additional production theories have been implemented. The Real combination route remains specialized. Opt-in experiments and proposals in the existing chapters are not additional defaults.
Selecting and checking a profile#
Begin with the default command line. The option reference owns the user-facing defaults and links to the captured CLI help. Opt-in modes need their own qualification; neither a successful build nor a small example justifies promoting one to default.
Evidence boundary#
The archived qualification snapshot preserves the
previous detailed counts, merge history, negative results and measured
revision boundaries. Exact commands, corpora, resource limits, model checks and
artifacts remain in Run Log and its run-log.json records.
Use the relevant evidence rather than combining unrelated gates:
Sessions, assumptions LRA and assumptions UF have distinct qualification.
Component migration records its baseline comparisons and later optimizations separately.
Quantified UF records its correctness and corpus evidence, including limitations of independent corroboration.
Run-log entry
2026-09-16-qf-uflra-forced-equality-mergerecords the forced model-equality extraction merged into the documented source baseline.
No performance claim on this page automatically applies historical timings to c944fa790c2043ebac93b8d6f63c7b02b0c2c235. The rewrite’s example/build checks are recorded in Documentation restructuring before public release, separately from solver evaluation.
Testing and maintenance#
Run make test for the ordinary test suite and make docs for the strict book
build. Run python3 scripts/check_doc_examples.py --solver ./build/primo for
the manual’s examples and CLI-help snapshot. New solver behavior additionally
requires the repository’s review, fuzzing and model-validation gates; see
Contributing to Primo: draft.
Sources and implementation status#
The session interpreter, frontend, and solver options ground the capability map. Algorithm chapters above retain paper references, implemented subsets and limitations. Paper notes are a supporting library, not evidence of feature completion by themselves; start at Literature.