Historical documentation review#
This page retains the review history from development of the replacement
manual. The manual is now in docs/, and the historical book is in
docs-history/. Use the current build instructions
and closing review for the present workflow and status.
The commands, paths and work states below describe their original review
stages. In particular, the docs-next targets have been removed. Later entries
record completed work without rewriting the earlier observations.
Preview either version#
make docs-next # incremental build in docs-next/_build/html/
make docs-next-serve # serves the draft on http://localhost:8001
make docs-next-full # rebuild every draft page for validation
The existing preview uses make docs-serve on port 8000. Stop a server with
Ctrl-C. Set DOCS_NEXT_PORT to use another draft port, for example
make docs-next-serve DOCS_NEXT_PORT=8011.
Both builds use scripts/build_docs.sh, the shared .venv-docs environment,
and docs/requirements.txt. Each has its own configuration, navigation, and
generated output. Notebook execution is disabled. The draft carries copies
of Primo’s two original wordmark SVGs and the p avatar PNG used as the favicon;
keep those assets synchronized until
the draft replaces the existing book.
The build wrapper defaults to docs; setting PRIMO_DOCS_DIR=docs-next
selects the draft when invoking the wrapper directly. The Make targets select
their book explicitly, so a shell environment setting cannot make make docs
overwrite the draft or make make docs-next overwrite the existing book.
Draft previews reuse Sphinx’s cached documents and rebuild changed pages and
their dependants. The first build, or a configuration change, can rebuild
everything. Warnings remain errors. Use make docs-next-full for a complete
warning check before accepting edits; make docs-check-links rebuilds both
books fully before checking links. Direct wrapper calls can pass --all to
force a full draft build.
Publication references#
Use the shared docs/references.bib and MyST citation roles:
The arithmetic procedure uses exact bounds {cite:p}`DutertreM06`.
The bibliography resolves these keys to publication metadata
and DOI or stable source links.
The existing book’s docs/development/documentation.md describes authoring
and checks. Local reading-copy names are not publication identifiers; keep
edition and section details in the reading record instead.
Page review ledger#
Documentation review state is separate from solver work state. An implemented feature can have a draft explanation; an accepted explanation can describe an unimplemented proposal accurately.
Draft: the page exists but factual verification is incomplete.
Verified: the recorded source/command/example checks passed; remaining editorial and reader checks are listed in the ledger. This does not certify solver correctness or complete content coverage.
Reviewed: page review has occurred and its findings are resolved.
Accepted: the user or designated reviewer explicitly accepts the page for the replacement book. A successful build never assigns this state.
Page |
Stage |
Source |
Checks |
Review still needed |
|---|---|---|---|---|
index.md |
Verified |
ac0daf4 |
Source admission and entry-point links; first example; strict build; editorial consistency pass 2026-09-26 |
Reader acceptance; reference and contributor procedures now extracted; historical evidence is not a new solver qualification |
development/correctness.md |
Verified |
ac0daf4; Brummayer thesis Chapter 4 |
Make targets and scripts inspected; policy comparison; source links; strict build; supplied thesis sections read for fuzzing/reduction attribution; editorial consistency pass 2026-09-26 |
Reader acceptance; reference and contributor procedures now extracted; historical evidence is not a new solver qualification |
implementation/architecture.md |
Verified |
ac0daf4 |
Owning headers and control flow inspected; source and test links; TikZ/SVG figures rendered and inspected; strict builds; editorial consistency pass 2026-09-26; general driver and QF_UFLIA/quantified-UF callers checked; dedicated Real migration distinguished; Real migration linked to separate open lead |
Reader acceptance; frontend and sessions now have separate chapters |
implementation/core.md |
Verified |
ac0daf4 |
Owning code and 50 source/test links checked; C++ example compiled and run; 4 focused CTest suites; strict builds and rendered review; editorial consistency pass 2026-09-26 |
User review of identity/lifetime explanation; binder algorithms now have a separate quantifier chapter; model algorithms now have a separate construction chapter |
implementation/sat.md |
Verified |
ac0daf4; e6d9fcb bridge removal |
Owning code and paper sections inspected; source links; executable clause/guard example; 5 CTest suites; strict builds and rendered review; superseded encoding removed; SLURM qualification and source-link refresh recorded; editorial consistency pass 2026-09-26 |
Reader acceptance; reference and contributor procedures now extracted; historical evidence is not a new solver qualification |
implementation/dpllt.md |
Verified |
45e25a6; shared assignment migration; previous rollback audit retained; e6d9fcb bridge removal |
All routes use shared assignment views; coordinator protocol and disconnect/reconnect tests; 43 normal/ASan suites; 188 Python tests; whole-tree static review; strict books; superseded encoding removed; signed-premise example; SLURM qualification and source-link refresh recorded; editorial consistency pass 2026-09-26; general driver and QF_UFLIA/quantified-UF callers checked; dedicated Real migration distinguished |
Reader acceptance; reference and contributor procedures now extracted; historical evidence is not a new solver qualification |
implementation/euf.md |
Verified |
e6d9fcb; Nieuwenhuis and Oliveras 2007 Sections 3-5; Sebastiani 2007 Section 6.10 and Proposition 2.3; SMT-LIB 2.6 Definition 8 |
Owning source and primary paper sections inspected; invariant-to-test map; source links; both strict books; HTML links and old page/anchor compatibility checked; editorial consistency pass 2026-09-26; filtering proof and Boolean coverage checked against frontend registration and model completion; primary filtering and Boolean-domain sections read; model TODO resolved by linked construction chapter |
User review of conflict trace and depth; model and combination chapters drafted separately; no solver batch rerun |
implementation/lra.md |
Verified |
bc5d21d; supplied primary arithmetic papers and theses |
Owning code and primary sections read; invariant-to-test mapping; retained evidence inventory; both strict books; source/HTML links and old anchors checked; browser figure review; editorial consistency pass 2026-09-26; default equality producer linked to worked combination examples; outer-loop mutation schedule linked; row-bound sign derivation and reverse example checked; callbacks and cap gates traced; strict-bound explanation and combination crosslinks added; stored target-atom threshold distinguished from stronger derived bound; SOI objective and breakpoint selection derived from code and primary sections; worked pivot and combined conflict; minimizer and termination deviations; rollback state; dated evidence limits; single bounded endpoint debug reproduction found extra zero-step pivot; diagnostic and follow-up recorded; SOI endpoint correction: starting-bound direction changes and fixed bounds tested; 43 normal/ASan groups; 201 Python tests; 36 Z3 seed/regression comparisons; 1000-case SOI gate: 958 agreements and 42 timeouts; no hard failures; integer companion and section preservation map drafted 2026-09-29; 2026-10-01: Fixed-basic elimination and model-phase explanations checked against owners and existing regressions; arithmetic evidence curated; no new solver run |
Reader acceptance; historical measurements retain their original scope; published artifact identities remain evidence work |
implementation/combination.md |
Verified |
e6d9fcb; Nelson-Oppen report; de Moura-Bjorner; DTC; Griggio/King/Bromberger thesis sections; Jovanovic-Barrett 2013 sections 3-4 |
Owning types and both arithmetic routes inspected; primary sections read; clause examples checked algebraically; regression map reviewed; strict books and source/HTML links checked; existing anchors preserved; care-pair example and generator/consumer mapping added; general driver and QF_UFLIA/quantified-UF callers checked; dedicated Real migration distinguished; default equality rules checked against section 5.1 and tableau regressions; bound explanation and basis-gap examples added; mutation scheduling traced through outer loop and both partition calls; sections 4 and 5.2 reread; scratch-state and mutation regressions inspected; proposals extracted into separate open-lead pages; evidence anchor retained; online paired-bound equality delivery and lazy atom registration traced; arithmetic-to-EUF clause chain added with reciprocal propagation links; online-LRA construction guard and already-assigned equality cases clarified; integer stage schedule linked to LIA chapter; 2026-10-01: Connected arithmetic evidence summary to combination records |
Reader acceptance; Real migration remains an implementation lead; no new solver qualification |
implementation/lia.md |
Verified |
bc5d21d; Bjorner and Nachmanson 2024 Sections 4.1-4.5; King thesis Section 4.4.3; Bromberger thesis Chapters 4-6 and 7.2 |
Primary sections and owning implementation read; stage schedule; integer guards; cut and explanation derivations; existing regression map; both strict books; local and Git source links; all prior anchors preserved; browser math and table review; 161 expressions without MathJax errors; existing thesis coverage linked through new reading guide 2026-09-30; GCD derivation and earlier Pugh/Griggio attribution checked; explanation and row-selection ownership clarified; hard-coded target window distinguished from move budget and linked to MIP survey/lead |
Reader acceptance; reference and contributor procedures now extracted; historical evidence is not a new solver qualification |
leads/library-api.md |
Draft |
ac0daf4 |
Initial build targets and interface pointers inspected; editorial consistency pass 2026-09-26 |
API and embedding audit not started; external-consumer prototype and user review pending |
leads/incremental-memory.md |
Draft |
ac0daf4; e6d9fcb flat-term ownership |
Term/session ownership and historical memory-report pointers inspected; official Z3/cvc5 reference-counting documentation checked; flattened index and prepared/working state inspected; editorial consistency pass 2026-09-26 |
Current memory reproduction and ownership design pending; GC risks and flattened-representation lifetime recorded; no reclamation design selected |
leads/term-storage.md |
Draft |
ac0daf4 |
Term/key representation inspected; reproducible layout probe compiled and run; strict book builds; editorial consistency pass 2026-09-26 |
Payload design and solver memory/runtime evaluation deferred; user review pending |
leads/rational-storage.md |
Draft |
e6d9fcb; local GCC 13.3.0/libstdc++ layout |
Fields and deep-copy ownership inspected; reproducible sizeof probe compiled with warnings as errors; strict books and links checked; editorial consistency pass 2026-09-26 |
Lifetime design and implementation deferred; solver memory/runtime evaluation and reader acceptance pending |
papers/yices.md |
Verified |
ac0daf4; local Yices PDFs; CaDiCaL rel-3.0.0 public API |
All three PDFs read; source and historical run-log review; shared note in both books; strict builds and link/render checks; editorial consistency pass 2026-09-26 |
User review; backend deletion behavior and remaining representation audits deferred |
leads/theory-lemmas.md |
Draft |
ac0daf4; papers/yices.md |
Existing Ackermann subset and backend retention contract inspected; scope and acceptance criteria separated; editorial consistency pass 2026-09-26 |
Conflict-driven selection and lemma-retention investigations not started; user review pending |
papers/clause-forgetting.md |
Verified |
ac0daf4; NOT 2006; Blanchette et al. JAR 2018; Gstrein et al. SAT 2025 |
Primary sections read; source links; both strict builds; shared rendering and HTML link/compatibility checks; editorial consistency pass 2026-09-26 |
User review; actual retention and progress policy audit remains open |
leads/theory-lemma-forgetting.md |
Draft |
ac0daf4; papers/clause-forgetting.md |
Theory redundancy; live-reason lifetime; termination; metrics and acceptance conditions separated; editorial consistency pass 2026-09-26 |
Investigation and implementation deferred; user review pending |
papers/polarity-aware-cnf.md |
Verified |
ac0daf4; Masina et al. JAIR 2025; SMTInterpol primary documentation |
Primary sections and owning code read; directional examples checked; strict builds; source and HTML checks; editorial consistency pass 2026-09-26 |
User review; original 1986 full text unavailable; general PG implementation deferred |
leads/statistics-instrumentation.md |
Draft |
ac0daf4; original engineering proposal |
Typed/string updates; timers; diagnostic traversal; conflict-budget consumer inspected; EUF scheduling counter reader identified; editorial consistency pass 2026-09-26 |
Whole-tree classification; build design; correctness qualification and overhead measurement deferred |
leads/lra-floating-point.md |
Draft |
e6d9fcb; Monniaux CAV 2009 Section 3 Algorithm 2; existing D2 lead |
Primary section and current preparation/pivot interfaces inspected; historical investigation retained; strict builds and link checks; editorial consistency pass 2026-09-26 |
User review; integration design and implementation deferred; no solver evaluation |
review.md |
Verified |
current docs branch |
Book selection and previews; source-link convention; ledger coverage; editorial consistency pass 2026-09-26; 2026-10-01: Gap-completion review and full preservation inventory recorded |
Reader acceptance; external access failures are recorded separately from passing local/Git checks |
papers/primo-qflra-results.md |
Verified |
arXiv:2609.16706v1; e6d9fcb option defaults |
Primary PDF read; Tables 1-2 and Figure 3 checked; defaults inspected; strict books and HTML checks; editorial consistency pass 2026-09-26 |
User acceptance; match published tables to exact Primo revisions and raw artifacts; no solver rerun |
leads/care-pair-generation.md |
Draft |
e6d9fcb; Jovanovic-Barrett 2013 Section 4.2 |
Generator and consumer inspected; existing Real cache distinguished from proposed filtering and lazy generation; comparison and correctness criteria recorded |
User review; profiling and prototype selection pending; no solver evaluation |
leads/care-guided-combination.md |
Draft |
e6d9fcb; Jovanovic-Barrett 2013 Section 3 Definitions 6-8 and Section 3.1 Theorem 1; Section 4 |
Primary fixed point and model-extension argument read; current heuristic API and complete model checks inspected; proof and model-construction obligations recorded |
User review; component contract and two-theory-to-collection mapping pending; implementation and evaluation deferred |
leads/lra-equality-basis.md |
Draft |
e6d9fcb; Bromberger thesis Section 5.4; original lead 17 |
Primary normalization and explanation sections reread; existing producer and exact-probe boundary retained; historical investigation linked |
User review; probe-cost profiling; integration design; implementation and evaluation pending |
leads/real-combination-migration.md |
Draft |
e6d9fcb; current component driver; completed n-way migration record |
Current route split and recipe interface inspected; preservation obligations extracted; earlier qualification kept separate |
User review; contract-gap audit and migration planning; implementation and evaluation pending |
leads/model-based-combination.md |
Draft |
e6d9fcb; de Moura-Bjorner Section 4 and Appendix A; retained transition checklist |
Existing driver and mutation protocol distinguished from further transitions; scheduling freedom and progress obligations retained |
User review; bounded component scope and transition mapping; implementation and evaluation pending |
implementation/quantifiers.md |
Verified |
e6d9fcb; TACAS 2018; FMCAD 2021; Chargueraud; SMT-LIB 2.6; Reynolds and Barbosa theses; c944fa7 preprocessing diagnostic routing |
Owning code and primary sections read; binder and polarity examples checked; invariant-to-test map; strict books; source and HTML links; prior anchors preserved; enclosing and nested negation traced through signed SAT encoding and kind/value classification; guarded witness/instance examples and existing polarity regressions inspected; missing dynamic relevance and effect on unknown documented; NNF and fixed-root leads separated; growing-pool basis and fairness stated through TACAS 2018 Theorem 1 and Corollaries 1-2 with implementation limits; 2026-10-01: Indexed-binder rationale and tuple-order evidence extracted; pool checker/exporter inspected; conservative-extension trust boundary corrected in both books and ledger; 2026-10-02: Diagnostic contract and quantified stop reviewed; 43 CTest groups, 202 Python tests, 12 examples and 1000 generated cases on SLURM; normal answers agree with Z3 under six tuple orders; all diagnostic runs stop without search; both strict books and local/Git links pass |
Reader acceptance; unconfirmed answers and export checking obligations remain evidence work; no new solver qualification |
leads/quantifier-instantiation.md |
Draft |
bc5d21d; retained entailment design; TACAS 2018 Sections 3-4.1; FMCAD 2021 Section IV; Ge-de Moura CAV 2009 Section 6 |
Current syntactic pools and persistent tried tuples inspected; representative enumeration and model-based filtering linked to entailment filtering and fail masks; MBQI distinguished; fairness and revisitation obligations; strict books and links |
User review; equality and model query contracts; completeness argument and bounded-work design; implementation and evaluation pending |
implementation/models.md |
Verified |
e6d9fcb; original model-interpretation and typed conversion contracts |
Both construction adapters and callers inspected; Boolean completion; evaluated tuple invariant; reverse replay and epoch example; freeze/check/print boundaries; existing test map; strict books and local/source links |
Reader acceptance; section-level preservation audit; no new solver qualification; user model guide remains separate work |
leads/quantifier-nnf.md |
Draft |
e6d9fcb; existing preprocessing contract; Masina et al. JAIR 2025 Sections 4 and 5.5 and Appendix C |
Existing NNF and quantified route inspected; binder and polarity obligations; normalization variants and evaluation criteria recorded |
User review; binder-extension design and normalization policy pending; no implementation or new solver evaluation |
leads/asserted-quantifiers.md |
Draft |
e6d9fcb; local assertion and quantifier contracts |
Root clausifier and complete-candidate scheduling inspected; signed-root table; scope and progress obligations recorded |
User review; corpus proportion and specialization design pending; no implementation or new solver evaluation |
papers/relevance-filtering.md |
Verified |
e6d9fcb; de Moura-Bjorner 2007 Sections 1-3; Sebastiani 2007 Sections 6.9 and 7.2; Niemetz et al. FMCAD 2014 Sections II-IV; Sebastiani 2020 Sections 3-4 |
Primary sections and current quantifier assignment/completion code read; shared literature note; structural support and projection boundaries distinguished |
User review; relevance-aware completion proof and API pending; no solver changes or qualification |
leads/quantifier-relevance.md |
Draft |
e6d9fcb; papers/relevance-filtering.md; proposed local support contract |
Current all-assigned-atom behavior inspected; worked support examples; generated-obligation and final-acceptance conditions; staged evaluation plan |
User review; support design and completion proof pending; no implementation or new solver evaluation |
coverage/lia.md |
Verified |
bc5d21d; docs/qf-lia-branch-and-bound.md |
Every old heading mapped; mechanism/history split; superseded claims recorded; retained run IDs checked; both strict books; local and Git source links; all prior anchors preserved; all 25 old headings accounted for; 2026-10-01: Contributor extraction completed; complete section inventory linked |
Reader acceptance; installing archive routes at cutover |
papers/bromberger-linear-arithmetic.md |
Verified |
bc5d21d; supplied Bromberger thesis; existing 2026-08-29 literature review |
Selected primary sections reread; cube derivation and coordinate example; current integer callers checked; existing coverage acknowledged; strict books and local/source links |
Reader acceptance; full transformation and preprocessing algorithm reviews before implementation claims; no solver evaluation |
leads/lia-extended-gcd.md |
Draft |
bc5d21d; Bjorner-Nachmanson 2024 Section 4.3; original lead 12e |
Existing check and regression inspected; interval/residue derivation and antecedent requirements recorded; printed inequality direction corrected |
User review; grouping design and census; implementation and SLURM qualification pending |
papers/lia-primal-heuristics.md |
Verified |
bc5d21d; Achterberg-Berthold-Hendel 2011 Sections 2-3; Fischetti-Glover-Lodi 2005 Section 1; Berthold thesis 2014 Sections 7.1-7.3 |
Primary algorithm sections read; code and callers inspected; feasibility and neighborhood-failure boundaries; direct literature-to-state mapping |
User review; selected algorithms need implementation checklists before prototyping; no solver qualification |
leads/lia-patching.md |
Draft |
bc5d21d; papers/lia-primal-heuristics.md |
Hard-coded width and separate move limit checked; parameter proposal and staged comparisons; work and correctness gates recorded |
User review; option implementation and heuristic experiments remain open; SLURM evaluation required |
references.md |
Verified |
docs/references.bib; supplied publication metadata |
Shared citation resolution; metadata-only import; editions and identifiers checked; strict books; local and Git links; rendered references; missing-key rejection; incremental bibliography dependency |
Reader acceptance; add newly cited works as chapters are reviewed; inclusion does not establish reading or implementation |
leads/lia-infinitesimals.md |
Draft |
bc5d21d; King 4.3; Pugh 2.1; Griggio 2.6.1; Dutertre-de Moura report 4.1 |
Bound preparation; patching; integrality; cuts and branch code inspected; primary sections read; current delta regressions read; worked trace and rounding counterexample; strict books and links |
User review; implementation and all-producer invariant audit; dedicated regressions and remote qualification pending |
implementation/tactics.md |
Verified |
bc5d21d; deMoura2013 Section 3 |
Owning code and primary section read; immutable payload and context lifetime; alternatives and fallback; typed outcomes; incremental restrictions; existing test mapping; both strict books; local/source link checker; browser tables and mathematics; documentation self-review 2026-10-01; style review: direct verbs; goal and strategy terminology at first use; branch count clarified; 2026-10-01 |
Reader acceptance; reference and contributor procedures now extracted; historical evidence is not a new solver qualification |
implementation/preprocessing.md |
Verified |
bc5d21d; Bromberger Sections 8.2.2-8.2.4; symmetry Theorem 5 and Lemma 6; c944fa7 preprocessing diagnostic routing |
Owning code and primary sections read; pass order; off and integer profiles; CITE subset; finite-domain snapshots; model reconstruction; existing test mapping; both strict books; local/source link checker; browser tables and mathematics; documentation self-review 2026-10-01; style review: direct verbs; CITE and symmetry explanations; acceptance checks distinguished from logical guards; 2026-10-01; 2026-10-02: Diagnostic contract and quantified stop reviewed; 43 CTest groups, 202 Python tests, 12 examples and 1000 generated cases on SLURM; normal answers agree with Z3 under six tuple orders; all diagnostic runs stop without search; both strict books and local/Git links pass |
Reader acceptance; reference and contributor procedures now extracted; historical evidence is not a new solver qualification |
coverage/tactics-preprocessing.md |
Verified |
bc5d21d; retained chapters and run-log identities |
Section destinations; superseded claims; retained experiments; reference and workflow gaps made explicit; both strict books; local/source link checker; browser tables and mathematics; documentation self-review 2026-10-01; style review: compressed labels replaced with descriptions; historical status retained; 2026-10-01; 2026-10-01: Reference and workflow destinations completed; complete section inventory linked |
Reader acceptance; installing archive routes at cutover |
implementation/frontend.md |
Draft |
bc5d21d |
Definitions; callers; existing tests; primary sections; strict books; 735 Git links and 22257 local links checked |
Reader acceptance; no solver rerun |
implementation/sessions.md |
Draft |
bc5d21d |
Definitions; callers; existing tests; primary sections; strict books; 735 Git links and 22257 local links checked |
Reader acceptance; no solver rerun |
capabilities.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
guide/sessions.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
guide/getting-started.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
guide/input.md |
Verified |
bc5d21d; c944fa7 preprocessing diagnostic routing |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures; 2026-10-02: Diagnostic contract and quantified stop reviewed; 43 CTest groups, 202 Python tests, 12 examples and 1000 generated cases on SLURM; normal answers agree with Z3 under six tuple orders; all diagnostic runs stop without search; both strict books and local/Git links pass |
Reader acceptance; no solver or benchmark rerun |
guide/models.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
reference/policies.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
reference/backend.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
reference/statistics.md |
Verified |
bc5d21d; c944fa7 preprocessing diagnostic routing |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures; 2026-10-02: Diagnostic contract and quantified stop reviewed; 43 CTest groups, 202 Python tests, 12 examples and 1000 generated cases on SLURM; normal answers agree with Z3 under six tuple orders; all diagnostic runs stop without search; both strict books and local/Git links pass |
Reader acceptance; no solver or benchmark rerun |
reference/options.md |
Verified |
bc5d21d; c944fa7 preprocessing diagnostic routing |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures; 2026-10-02: Diagnostic contract and quantified stop reviewed; 43 CTest groups, 202 Python tests, 12 examples and 1000 generated cases on SLURM; normal answers agree with Z3 under six tuple orders; all diagnostic runs stop without search; both strict books and local/Git links pass |
Reader acceptance; no solver or benchmark rerun |
reference/tactics.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
development/tuning.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
development/fuzzing.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
development/documentation.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
development/experiments.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
development/contributing-changes.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
development/validation.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
development/debugging.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
work/results-storage.md |
Verified |
bc5d21d |
Source contracts and script flags inspected; strict books and local/Git link checks; examples reuse existing fixtures |
Reader acceptance; no solver or benchmark rerun |
coverage/frontend-sessions.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
coverage/index.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks; 2026-10-01: All 91 source pages and 1150 headings mapped; 126 supporting entries and 1306 compatibility targets validated |
Reader acceptance; archive routes prepared but not installed |
coverage/practice-literature.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
coverage/solver.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
evidence/archive.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
evidence/arithmetic.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
evidence/quantifiers.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
leads/compact-distinct.md |
Draft |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; implementation and evaluation remain pending |
leads/incremental-equations.md |
Draft |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; implementation and evaluation remain pending |
leads/index.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
leads/shared-euf-structure.md |
Draft |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; implementation and evaluation remain pending |
literature.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
work/documentation.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
work/evidence.md |
Verified |
bc5d21d (implementation); 1f9f116 (retained records) |
2026-10-01: current contracts and historical records inspected; destinations and status distinctions checked; strict books and local/Git links; see dated review record for inventory and rendered checks |
Reader acceptance; historical evidence is not a fresh evaluation; archive installation and publication remain separate |
The CSV ledger is the record behind this table. Its
Source column records the commit inspected during verification. Those entries
are evidence of a review, so they change only when a new review is recorded.
The preview/review workflow is newer than the inspected solver baseline and
belongs to the current documentation branch. No page is accepted yet.
The preservation audit accounts for all 91 original pages, 1,150 section headings, 126 supporting entries and 1,306 compatibility targets. Its subject maps explain current destinations, corrected claims and retained history. These are ready for reader review; mapping a historical section does not independently certify every sentence or experiment in it.
The documented algorithms, option contracts and contributor procedures now have replacement chapters. Evidence work names unresolved publication-to-run identities and quantifier checking limits. Review those boundaries along with the prose before accepting the replacement; installation of archive routes and the book switch remain separate publication steps.
Review order and questions#
Home page: does it explain Primo, offer a useful first action, and distinguish implemented behavior, ongoing work, and open leads?
Correctness guide: can a contributor identify the required tests, fuzzing and independent model checks, recognize a failed or inconclusive gate, and preserve reproducible evidence?
Architecture: can a developer follow a query and find the owning code, understand object lifetimes, and avoid mixing session, SAT, and theory responsibilities?
Core representation: are identity, borrowing, constructor simplification, and storage retention clear enough to use safely?
Tactics and preprocessing: can the reader distinguish conjunction, alternatives, and fallback; follow actual profile/pass order; and explain the model and incremental-scope obligations?
Boolean abstraction and SAT integration: can a reader derive the worked clauses, distinguish definitions from assertions and assumptions, and find the lifetime and explanation obligations?
DPLL(T): are assignment ownership, callback ordering, reason signs and lifetimes, and final consistency checks clear?
EUF, LRA and LIA: can the reader follow each worked example through the owning code and understand the representations, invariants, defaults, limitations, and paper basis? For integer reasoning, can they explain the stage order, auxiliary-variable guards, cut and branch antecedents, and the cases that return
unknown?Theory combination: is the difference between entailment and a model choice clear, and can the reader identify the two production routes, their acceptance conditions, and their fallback and model-construction obligations?
Quantifiers: can the reader follow binding, both polarities, term-pool growth, and queue scheduling, and explain why exhausting candidates does not establish
sat?Model construction: can the reader follow authoritative values, evaluated function tuples, and reverse replay, and explain why an evaluator cannot survive a change of interpretation?
Library API and incremental memory, together with compact term storage: do the work items capture the intended direction, available evidence, and unresolved design questions? Apply the same questions to the remaining lead pages. Reviewing a lead does not complete its investigation.
Literature notes: are the cited sections, implemented subsets, deviations, and open questions clear? Keep published results attached to their original configurations and evidence.
Record findings by page and section, distinguishing factual corrections, missing explanations, and editorial preferences. Fix them in that page’s next commit, update the ledger, and rebuild. Acceptance concerns the page’s declared scope; unfinished component chapters remain separate work.
Work states and writing conventions#
Use three work states consistently in the home page, navigation, and lead pages:
Implemented: behavior present in the linked code. State whether it is enabled by default or opt-in, and identify its supported scope.
Active work: an investigation, implementation, or documentation task currently being carried out, with its next step recorded.
Open leads: candidates for investigation. Each lead names its owner and separates completed inspection or probes from pending design and evaluation.
These describe project work; the page-review states above describe documentation. An initial probe does not by itself make a lead an active implementation.
Implementation chapters explain current behavior in the present tense. Lead with the problem and a concrete example, connect operations to their owning types, and explain invariants, lifetimes, limitations, and sources. Link type and function names directly to code; give regression links descriptive labels. Define acronyms and internal terms at first use. Put historical identifiers such as H1 or D2 after the mechanism’s descriptive name.
“Lowering” is established compiler terminology, used for example in the
MLIR tutorial. In this book
it means translating a construct to simpler terms or constraints accepted by
a later stage; it is not the name of a standardized SMT transformation.
Name the actual operation where possible (equality encoding, ite elimination,
or polynomial normalization), and explain its semantic contract. Introducing
fresh variables generally requires an extension/projection argument, rather
than a claim that the formulas have identical models over the same symbols.
Name the function or decision rule behind phrases such as “the selector”; do
not introduce an apparent component without explaining what it selects.
Keep design tradeoffs in the chapter. Put repair chronology, commands already run, and verification outcomes in dated review or experiment records, linked from the explanation. State each limitation where it helps the reader; avoid repeating general disclaimers about what writing a chapter does not establish. Paper-specific limitations and incomplete validation remain explicit.
Visible TODO callouts record unfinished documentation from the coverage review; they do not mark solver features as unimplemented or create new research leads. Keep each TODO beside the explanation it qualifies, with a concrete completion criterion. Before removing it, check that a reader can reconstruct the argument or worked step without inferring missing conventions from source code. Preserve the full reasoning in its owning chapter or a linked algorithm note, while keeping dated experiments and abandoned designs in the evidence archive.
Code links are part of the review#
Every implementation explanation should link to the owning type or function,
and to relevant regression tests. Use the centrally configured source role:
{source}`SmtSession <src/smt/smt_session.hpp>`
{source}`execute_stream <src/main.cpp#L87-L119>`
These expand to GitHub URLs using the single commit-pinned URL under
sphinx.config.extlinks.source in _config.yml. Authors write paths and
optional line ranges; they do not repeat a commit hash in chapter prose.
Line anchors are appropriate for short functions and declarations; use a file
link when a mechanism spans many operations.
Write the manual as a description of the code it accompanies. Update an explanation when behavior, ownership, or an interface changes. Advancing the source-link revision is one configuration edit, and a documentation-only edit does not require it. Keep exact revisions in this ledger and in dated experiment records; changing the link configuration does not revalidate either record.
Before marking a page verified, check each path and line range against
git show <revision>:<path> and read the referenced code. Confirm that the
link points to the claimed operation, not merely a nearby symbol. When the
source revision advances, review changed code and update affected explanations
and anchors together. Ordinary Sphinx builds do not perform this Git/source
validation automatically. GitHub viewing requires repository access while
Primo is private.
Automated link checks#
make docs-check-links # fully rebuild both books; check local and pinned Git links
make docs-check-external # also check external URLs with Sphinx
The local check uses scripts/check_doc_links.py, a standard-library Python
script. It checks rendered HTML links, assets referenced by href/src, and
HTML fragments, including percent-encoded paths and anchors. Theme templates
and downloaded examples are not scanned as book pages. Links to Primo files
and commits on GitHub are resolved in the local Git checkout: files must exist
at the named commit, and line ranges must fit that version. Moving branch
references and unsupported Git fragments fail explicitly. The check does not
establish that a cited function still supports the surrounding explanation.
The local JSON report is docs/_build/linkcheck-local.json. A missing book,
file, anchor, or Git object makes the command fail. A shallow checkout may need
the referenced history fetched first. To inspect an existing build without
rebuilding it:
python3 scripts/check_doc_links.py docs/_build/html docs-next/_build/html
The external stage uses Sphinx’s built-in
linkcheck builder,
already included in the documentation environment. Each book writes
_build/linkcheck/output.txt and output.json (one JSON object per line),
identifying the source page, line, URL, and result. Both books are checked even
if one reports failures. Requests use four workers, a 15-second timeout, one
attempt, and a 30-second backoff limit; server Retry-After headers take
precedence. External HTML anchors are checked where supported by Sphinx;
PDF page fragments are not validated.
Primo’s Git file/commit URLs are excluded from HTTP checking because the local
stage checks them without GitHub credentials. The repository landing page is
also excluded while the repository is private. These are the only configured
URL exclusions, documented in each book’s _config.yml.
The linked CaDiCaL API header has a separate anchor-only exception: GitHub
implements its code-line fragments dynamically. Sphinx still checks that the
page is reachable, but does not validate its line range. Primo’s own source
line ranges are checked locally as described above. GitHub README and wiki
heading links use their literal user-content- HTML anchors so they can be
checked without JavaScript.
Review external failures before changing a citation: a 403, rate limit, or
timeout can be an access problem rather than a missing paper. Sphinx records
some temporary outages, such as HTTP 503, as ignored; those remain unverified.
Do not treat an ignored or inaccessible URL as a successful check or add broad
domain exclusions to hide failures. Preserve the report and resolve or record
each outstanding link. No credentials are stored in the book configuration.
First draft batch: checks and limits#
The records below describe successive reviews at their recorded revisions. Statements about source pins, page counts, and pending work belong to those reviews; later records may supersede them. The configuration holds the current source-link pin, and the page ledger records outstanding acceptance checks.
The three content pages were checked against the linked local source interfaces, workflow definitions, and existing design notes. Code paths and anchor bounds are checked against the pinned commit. The first-solve input is executed separately from the book build. The test pointers in the architecture chapter identify existing coverage; they are not a claim of new full solver qualification.
The infrastructure checks cover both strict book builds, shell syntax, lint, separate preview outputs, and a rejected invalid book selection. The rendered draft is inspected. Paper algorithms, historical measurements, and outside-reader reproduction are not requalified by this work. Solver source and behavior are unchanged; fresh solver fuzz, ASan, and clang-tidy campaigns are not part of this documentation/build-wrapper change.
Core chapter checks#
The core representation draft was checked against the owning headers,
constructors, symbol-scope operations, session teardown paths, and model
ownership. Source links are checked against their configured commit. Its C++
example is extracted from the page, compiled against primo_terms, primo_util,
and GMP, and executed with assertions enabled. The existing regression suites
are rebuilt and run with:
cmake --build build --target primo_core_tests primo_binder_tests primo_model_tests primo_smt_session_tests --parallel 2
ctest --test-dir build -R '^primo_(core|binder|model|smt_session)_tests$' --output-on-failure
Both strict book builds and rendered-page checks complete this documentation batch. This checks the example and its cited regression coverage; it does not measure incremental memory or qualify a library API. No solver implementation changes or fresh fuzz/ASan/static-analysis campaigns are included. The page still needs user review and acceptance.
SAT chapter checks#
The Boolean abstraction/SAT draft was checked against the clausifier, atom registry, backend adapter, scoped engines, and relevant regression tests. Tseitin §1 (English reprint p. 467) and IPASIR-UP §§2.1–2.4 were read for its paper-to-code checklist. The chapter distinguishes current root rules from the rejected root-polarity prototype and records interface omissions and compatibility differences.
The executable example uses the current internals without frontend or preprocessing passes. It checks four variables/four clauses before search, all eight primary assignments, both guard settings over those assignments, and permanent selector retirement. With the normal dependencies installed:
cmake --build build --target primo_boolean_solver_tests primo_sat_backend_tests primo_smt_session_tests primo_quantifier_solver_tests primo_component_combination_tests --parallel 2
c++ -std=c++20 -Wall -Wextra -Werror -UNDEBUG \
-Isrc -isystem contrib/local/include \
docs-next/examples/boolean-abstraction.cpp \
build/libprimo_smt.a build/libprimo_sat.a contrib/local/lib/libcadical.a \
build/libprimo_terms.a build/libprimo_util.a \
contrib/local/lib/libgmpxx.a contrib/local/lib/libgmp.a \
-o /tmp/primo-boolean-abstraction
/tmp/primo-boolean-abstraction
ctest --test-dir build -R '^primo_(boolean_solver|sat_backend|smt_session|quantifier_solver|component_combination)_tests$' --output-on-failure
This command assumes the existing build/ configuration and default static
dependency installation. The example reports 24 checked assignments and a
rejected attempt to reactivate a retired selector. It fails explicitly if
CaDiCaL is unavailable; it must run with assertions enabled (-UNDEBUG).
All five regression suites passed. Both strict book builds, source-link
validation, and rendered-page inspection passed. This documentation/example
change does not alter solver behavior; no new performance, fuzz, ASan, or
whole-tree static-analysis qualification is claimed. The chapter and SAT
implementation-template pilot still require user review and acceptance.
DPLL(T) chapter checks#
The DPLL(T) draft was checked against the dedicated EUF/LRA drivers,
ComponentDispatcher, TheoryComponent, the component solver/coordinator,
the SAT adapter, and session model finalization. The reading covers
Nieuwenhuis–Oliveras–Tinelli (2006), §§4.1, 4.4, 5.1–5.2, and IPASIR-UP
(2023), §§2.1–2.4, from the primary PDFs already used by this book. The
chapter is the local representation/invariant/operation checklist for these
integration mechanisms, with explicit limits on completeness and retention.
No other solver implementation was used as an implementation source.
The unused DPLL(T) scaffold
and its include-only .cpp were
removed after a whole-tree reference search found no users. CMake discovers
SMT sources with CONFIGURE_DEPENDS; a successful rebuild verifies removal.
No active driver, callback, solver option, or runtime behavior changed. Existing
driver links remain pinned to the unchanged implementations at the configured
revision; the historical link above records the removed scaffold. Harmonizing the actual
drivers remains a separate design decision.
From the repository root, reproduce the example matrix with:
make check
python3 - <<'PY'
import subprocess
profiles = [
[],
['--preprocessing-mode=off', '--euf-prop=online'],
['--preprocessing-mode=off', '--euf-prop=conflict'],
['--preprocessing-mode=off', '--euf-engine=lazy', '--euf-prop=off'],
['--preprocessing-mode=off', '--incremental-mode=assumptions', '--euf-prop=online'],
]
for flags in profiles:
result = subprocess.run(
['./build/primo', '--quiet', '--check-model', *flags,
'docs-next/examples/dpllt-equality.smt2'],
check=True, text=True, capture_output=True, timeout=30)
assert result.stdout.split() == ['sat', 'unsat', 'sat'], result.stdout
print('5 profiles: 15 expected answers; requested SAT models checked internally')
PY
make docs
make docs-next
All five profiles produced the expected answers. This checks the input’s
semantics and selected routes, not the illustrative SAT decision order or
an exact learned-clause trace. The chapter links existing callback, explanation,
and session regressions; make check passed lint, all 41 CTest suites, and
188 Python tests after the scaffold removal. No new solver fuzz campaign,
ASan run, or external corpus/model-validation claim is made for this
documentation and unreachable-scaffold cleanup.
Verification also covers source paths/line bounds, both strict book builds, local HTML links, navigation/ledger coverage, and preservation of the original book targets. The draft still needs user acceptance. The review distinguishes partial callback checks from final reconciliation, live reasons from candidate queues, and the component dispatcher’s forgettable clauses from protected dedicated EUF/LRA conflicts. No common retention policy is claimed.
The code review identified a separate EUF marker/closure rollback mismatch:
with r root literals, the marker boundaries became {0, r} at the first
decision, so apply_backtrack(0) cleared to zero rather than r. The subsequent
focused correctness investigation below reproduces lost propagation and
repairs the indexing. The scaffold-removal verification above is historical;
it does not itself qualify the later behavior change.
make tidy completed over all 123 tracked source/test .cpp files remaining
after removal. It reports 18 enum-cast diagnostics in the unchanged generic
option-name tests and one potential leak in the external CLI11 header. These
are outside the removed stub; they were not fixed or presented as a clean
static-analysis baseline. make include-cleaner completed with 390 advisory
diagnostics. Of its 22 unused-header suggestions, 21 are paired self-includes;
the remaining <variant> include supplies std::get in
instance_simplifier_tests.cpp. Those includes were retained. The other
advisories concern direct includes and remain a separate hygiene task.
Code-review verdict for the scaffold removal: no blocking issues found. The automated scans cover the whole tracked C++ tree; manual review focuses on the removed API’s users/build wiring and the chapter’s integration paths. The identified EUF synchronization issue remains explicitly open, so this verdict is not a claim that all solver invariants have been verified.
Architecture figures#
The architecture page has a data-flow map of the default rebuild route and a
simplified lazy SMT loop adapted from the user-provided sandbox/pic.tex.
The map follows the linked command/session/frontend and solver-dispatch code.
The loop is explanatory: the accompanying text identifies online callbacks,
omitted outcomes, and the separate quantified-UF completion limits.
Editable sources are retained with the book:
query-flow.tex and
lazy-smt-loop.tex. Their comments record
the meaning and routing corridor of each edge. SVG exports are checked in under
_static/; the ordinary book build needs no TeX installation. Regeneration
requires pdflatex with TikZ and the standalone class, and Poppler’s
pdftocairo. From the repository root:
figure_build=$(mktemp -d)
for figure in query-flow lazy-smt-loop; do
pdflatex -halt-on-error -interaction=nonstopmode \
-output-directory="$figure_build" "docs-next/figures/$figure.tex" || break
pdftocairo -svg "$figure_build/$figure.pdf" \
"docs-next/_static/$figure.svg" || break
done
Temporary PDFs and logs stay in $figure_build for inspection. After any
diagram edit, regenerate its SVG, inspect the PDF and HTML for legible labels,
arrow direction, overlaps, and clipping, then run both strict book builds.
Keep source and export in the same commit. The current figures passed those
checks and their accompanying source links were verified locally. This is a
documentation check, not a new solver correctness gate or page acceptance.
Yices literature checks#
The 2026-09-24 survey reads all three local Yices PDFs and checks their Ackermann/explanation claims against the configured solver source revision. The 2006 paper’s p. 3 and the 2016 talk’s printed slides 13–14 were also inspected as rendered pages. Official Yices links identify the original publications. Local reading-copy SHA-256 values are:
yices-tool-paper-2006.pdf f85699440a641ce4247e57ec5aecf5fd99d126ae1a39692b91a47c8399818fde
yices-cav2014.pdf c8f968f526218c5cb00ad84f904e44c501b37c26f5ed31fe1baa3f6d19990060
yices-smt2016-talk.pdf b8ee6c2f1fa7442a76776130387b9e55499f434a7ca07c89bddc82e1c153e8c7
docs/papers/yices.md is the single maintained note; the draft’s
papers/yices.md includes it. Both books use the same source-link role.
Check both builds and both rendered copies after edits. The draft review and
support ledgers record the wrapper; the old-book page map records the source.
Move the maintained content into the accepted tree before removing docs-next/
at final cutover.
The backend comparison uses the installed public cadical.hpp API from
CaDiCaL rel-3.0.0, checkout 7b99c07f0bcab5824a5a3ce62c7066554017f641,
and Primo’s adapter. It establishes a documented reason-retention mechanism,
not measured deletion behavior. The header’s conflicting default descriptions
are recorded as an investigation question. No Yices implementation source was
used. The older Ackermann run remains historical and needs_revalidation.
Verification covers make docs, make docs-next, source paths/line ranges,
local HTML links/anchors, navigation/ledger coverage, preserved baseline HTML
targets, and rendered inspection. No solver code or option changes, fresh
performance results, or fuzz/ASan/clang-tidy claims belong to this survey.
Representation equivalence for Yices parent hooks and ITE transformations is
explicitly deferred to the corresponding chapter audits. User acceptance of
the literature page and the open leads remains pending.
Clause-forgetting literature checks#
The 2026-09-24 follow-up reads the sections named in the literature note from primary PDFs. The Blanchette et al. source is the four-author JAR 2018 version, whose restart/ forget strategy is §4.5; the shorter conference version numbers it §4.4. The three reading copies have these SHA-256 values:
NieOT-JACM-06.pdf 30df2e90891fd19228f2f76c442a1fa8d13af9bc0dc0abf4aef191a57afcdb15
Blanchette-et-al-JAR.pdf df39fe3e417c0a386fd92cd1d98a588916228a6dc00d79a3d08a6e1208777fe1
LIPIcs.SAT.2025.14.pdf 06a34e609ffcaee547e40d789513e20330c9c6dcb5f19672d0d357a83ba0791a
The maintained page is docs/papers/clause-forgetting.md; the draft includes
it through papers/clause-forgetting.md, with the same cutover rule as the
Yices note. Source inspection covers callback flags, reason streaming, the
adapter API, and the component bridge. It does not measure effective backend
deletion or establish a termination theorem for Primo. No other solver’s
implementation source was used.
Checks cover both strict builds, source paths and anchor bounds, local HTML links, navigation/ledger coverage, preserved baseline targets, identical shared note rendering, and visual inspection. The new lead remains open, with user review and all implementation/evaluation work pending. This is documentation only; solver tests, fuzz campaigns, ASan, and clang-tidy are not rerun.
Literal-capacity documentation check#
The SAT chapter’s range note was checked against sat::Lit, both backend
allocation paths, and the installed CaDiCaL public literal contract on
2026-09-24. It records unchecked signed increments and the distinction between
the representation’s upper bound and supported backend capacity. This is an
open hardening item, with no observed overflow, capacity stress run, code fix,
or completed boundary tests. Both book builds and source/local-link checks
cover the documentation change; the implementation remains deferred.
Directional CNF and statistics review#
The 2026-09-24 follow-up adds a shared polarity-aware CNF note, with precise reading scope and an explicit access gap for the original 1986 paper. Algorithmic claims use the accessible 2025 primary SMT paper; the original first-order translation is not claimed reviewed. Reading-copy SHA-256 values:
arXiv-2303.14971v7.pdf 007fd0b665579bea739c7e2fa0c2d835f2d1b1171716dc55f09107378f3fe2bf
SMTInterpol-2023.pdf 33da7a2b387a04722d2b888c5d573d160ab63ff3dd4040185fe995a02e41366f
The canonical page is docs/papers/polarity-aware-cnf.md, included by the draft
wrapper. Relocate it at book cutover, as for the other shared literature notes.
The chapter’s current full definitions were checked against the clausifier;
the positive-only and negative-only examples were exhaustively checked over
their original atoms with existential projection of the auxiliary.
The statistics lead records source inspection of typed/string updates, local EUF counters, timers, diagnostic traversals, CLI printing, and conflict-budget consumers. It is an initial audit and design preference, not an implemented switch, whole-tree classification, or performance measurement. String-key diagnostics should be absent from production; operational accounting must remain. Public library layout and counter availability remain design work.
Verification covers both strict book builds, source links, local HTML targets, shared note rendering, navigation/ledger coverage, and baseline compatibility. No solver code changed; solver tests, fuzzing, ASan, and clang-tidy are not rerun for these documentation additions. User review remains pending.
Replacing the old book#
The preserved baseline is tagged docs-before-restructure-2026-09-24; the tag
remains local until pushed. Use the original page map and compatibility
snapshot in docs/ to account for material and old targets. Write a new page
from its code, original design notes, and useful prior explanations; extract
dated evidence separately. Do not bulk-copy the old book and call it rewritten.
Before switching, every required page needs acceptance, its source and examples
must be reconciled with the release revision, and historical material and old
links must have destinations. Test the clean-checkout and editable-archive
workflows. Then replace docs/ with the accepted tree and remove the temporary
draft targets and duplicate assets. Until then, the two versions have separate
previews and there is no publication or automatic cutover.
EUF callback rollback regression#
The new primo_euf_callback_tests suite uses the existing production EUF
component factory, without exposing private state or depending on SAT decisions.
On the code before repair, root retention, retained-level retention, and
empty-level/repeated-backtrack cases fail with lost equality propagation.
Conflict explanations and reassignment/exported-model-fact controls pass.
The corrected decision-boundary convention passes all five groups. Every
returned explanation is independently checked by exhaustive interpretations
of the five fixture constants and against the notified literal assignment.
No incorrect SAT/UNSAT answer was reproduced.
The existing mixed QF_UFLRA rejected-candidate-merge regression is also strengthened to produce and validate a model. Its previous expectation of a positive model-callback recovery count depended on the lost markers; the corrected trace requires zero recovery assignments while retaining the closure reuse and compatibility-split checks. This is end-to-end coverage of model reconciliation, not a deterministic test of the deferred-callback queue.
Reproduce the focused check with:
cmake --build build --target primo_euf_callback_tests
ctest --test-dir build -R primo_euf_callback_tests --output-on-failure
benchmarks/smoke/qf_uf/euf_retained_equalities_unsat.smt2 adds an end-to-end
UNSAT input whose root equalities refute either disjunct. Its decision order is
unspecified; it complements the deterministic callback tests. The consolidated
assignment-view design remains an open lead. Direct tests of borrowed model
scope callback deferral and every combined-theory schedule remain limitations.
Regression verification: make check passes all 42 CTest suites and 188 Python
tests, including formatting/lint; make asan-test passes all 42 suites with
leak detection. Both strict books build, local links resolve, and all 83
baseline pages/1223 HTML IDs are preserved. The new UNSAT smoke case agrees
with Z3 and cvc5 under default, forced online, conflict-only, lazy, and
assumptions profiles. Fresh fuzz qualification is recorded separately in the
run ledger after the repair commit; these unit results alone are not a full
solver correctness claim.
The pre-commit code/documentation review found no blocking issue in the focused
repair. make tidy scanned all 124 tracked source/test translation units: the
19 emitted diagnostics match the previous baseline (18 enum-cast warnings in
unchanged option-name tests and one external CLI11 potential-leak warning).
make include-cleaner reported the same 390 advisories as the previous scan;
its 22 unused-header suggestions are 21 paired self-includes and the actually
used <variant> include in instance_simplifier_tests.cpp. No new diagnostic
was introduced. The source change adds no scans or instrumentation; this is a
correctness repair, with no performance/default-promotion claim. Baseline
static-analysis cleanup and assignment-owner consolidation remain separate.
Fresh merge-gate evidence is recorded in docs/run-log.json, entry
2026-09-24-euf-assignment-rollback-ac2aaaf. The release binary built from
ac2aaaf passed 1,000 QF_UF FuzzSMT cases against Z3/cvc5, 1,000 mixed QF_UFLRA
cases against Z3 with online EUF enabled, and 1,000 QF_UFLIA component cases
against Z3/cvc5. All use seed 20260924 and five-second process timeouts, with
preprocessing disabled and online EUF propagation selected. There were no
wrong answers, crashes, parser/type errors, timeouts, unsupported cases, unknown
answers, or reference disagreements. All generated inputs and CSV summaries
remain in fuzz-results/euf-rollback-20260924-ac2aaaf/; exact commands, versions,
binary and summary hashes, resource limits, and local artifact status are in
the ledger. This is answer comparison, not independent printed-model validation
or a performance/default-promotion campaign.
Both books now pin source links centrally to the repair commit; the 37 solver-engine line ranges were advanced against its diff and checked. Other chapter source bodies are unchanged from the prior audit. The earlier dated reviews retain their original source/evidence revisions.
Boolean-domain cleanup and explanation wording#
The completed A/B comparison no longer needs a selectable bridge encoding.
e6d9fcb removes that encoding, its option and its counters. The registration
traversal and per-term operation are unchanged; generated-term, polarity,
congruence and preparation-idempotence tests remain. Both books now pin their
source links to this cleanup revision, with shifted ranges checked against the
diff. Historical comparison results remain tied to their original revisions.
The DPLL(T) explanation section now uses a ∧ ¬b ⇒ q, whose SAT clause is
¬a ∨ b ∨ q. Its table distinguishes storing the premises [a, ¬b] from
storing the other clause literals [¬a, b], and states where negation occurs.
The run-log entry 2026-09-25-bridge-atoms-removal records the SLURM build,
43 normal and 43 ASan CTest groups, 194 Python tests, 1,000 Boolean QF_UF cases,
1,000 mixed cases plus 112 finite cases, and 1,000 quantified cases across six
profiles. The quantified generator produced 564 distinct inputs; every Primo
answer was reference-confirmed. All 1,209 independently checked SAT models
passed Dolmen. This is targeted cleanup qualification, not a full-corpus or
performance evaluation. Quantified models were not independently validated.
The first Boolean model gate mistakenly requested models for UNSAT inputs.
6f46e32 fixes its selection and adds mocked regressions. The failed attempt
is preserved separately; the repaired gate passed on a fresh run. Whole-tree
static analysis covers 128 C++ translation units, with 17 expected analyzer
diagnostics and no blocking code-review finding. No page acceptance is implied
by these checks; reader review remains pending.
EUF chapter checks#
The new EUF chapter follows FlatCongruenceClosure
through a conflict and backtrack. Its source review uses the existing
e6d9fcb pin: FlatTermIndex, FlatCongruenceClosure, ProofForest, the
prepared/working closures and callback paths in solver_engines.cpp, Boolean
argument registration, and the typed model-builder boundary. The chapter maps
the relevant tests to representation, explanation, rollback, and propagation
obligations. The worked trace is explanatory; it does not claim a particular
preprocessor or SAT search order.
The journal edition of [34] was read at Sections 3.1–3.5,
4, and 5.2–5.5. The representation introduction now cites Sections 3.1.1 and
3.1.2 at the point of use, distinguishes currying from flattening, and states
that FlatTermIds are local to their FlatTermIndex.
The review separates the default BFS mechanism from the
optional proof forests and the paper’s complexity results. It also records
Primo’s sparse undo policy, structural-alias restrictions, and the bounded
existing-atom Ackermann mode. Broader heuristic proposals and experiment
histories remain in the existing book; their migration is not marked complete.
This is a documentation-only change. The existing SLURM qualification is
recorded above; no solver batch was rerun for this chapter. make docs and
make docs-next pass their strict full builds. Source-link targets and line
ranges were checked against the shared pin; rendered local links resolve.
All 17 draft pages have navigation and ledger entries. The old book’s 83
captured pages and 1,223 anchors remain available.
The documentation self-review found no remaining blocking discrepancy in this chapter. Reader review of the explanation, depth, and chapter boundaries remains pending; the checks do not mark the page accepted.
QF_LRA publication and next chapter#
On 2026-09-25, the PDF of Janota and Jakubův’s
results paper, arXiv:2609.16706v1, was read.
The shared note records selected rows of Tables 1–2, the Figure 3 configuration,
resource limits and reference versions. Current option defaults were checked
in CheckSatOptions. The paper’s aggregate results still need a verified
mapping to exact Primo revisions and raw experiment records; no solver runs
or new qualification claims were made. The maintained note lives in
docs/papers/primo-qflra-results.md; the draft includes it, following the
same relocation rule as the other shared notes at book cutover.
Both strict book builds pass. All 18 draft pages have navigation, review and support entries; 3,679 local HTML links/assets resolve, and the old book’s 83 captured pages and 1,223 anchors remain available. The two books render identical publication-note content. Source-link paths and line ranges resolve against the shared pin. These editorial checks do not constitute acceptance of the performance claims or completion of the LRA chapter.
The initial LRA audit was blocked by HTTP 403 responses for Griggio and Bromberger, an older Griggio URL timeout, and a HAL bot challenge. The user subsequently supplied the primary texts, resolving that blocker. The completed source reading for the chapter is recorded below; the earlier access failures are not the current status.
LRA chapter checks#
The linear real arithmetic chapter was drafted against
the shared source pin on 2026-09-25. It covers preparation and direct bounds,
exact numbers and infinitesimals, sparse rows and reverse occurrences, repair
and termination, conflict signs, online propagation, rollback and model values.
The trace x + y <= 2, x >= 2, y > 0 is a mathematical explanation of the
operations, not a captured SAT execution or a new solver test.
The rewrite preserves the substantial arithmetic work. An explicit inventory links H1/H2/H3, H5/H7/H8/H9/H10, SOI, preprocessing, equality sharing, assumption-based sessions and their experiment records. The existing arithmetic page, diagrams, detailed notes, rejected approaches and run ledger remain in place. Historical extraction and the integer/model/combination chapters are not marked complete by this LRA draft.
Primary sources read#
The supplied PDFs remain ignored local reference material. These are the sections used in this audit, not a claim that every supplied paper was read in full:
Publication |
Reading and use |
|---|---|
King [30] |
§§2.2.7, 2.2.12, 3.2–3.3: sparse structures, eventual Bland fallback and SOI. |
Griggio [27] |
§2.5.1–2.5.3: fixed-equation invariants, exact-number/storage choices and least-violated selection. |
Bromberger [9] |
§§7.1.3–7.1.4: rollback alternatives and representation; opening parts of §§7.1.1 and 8.1.1 for context. The earlier Chapter 5 reading remains in its existing note; no fresh audit of the complete equality-basis algorithm was done. |
Brummayer [11] |
§4.1, introduction to §4.2, §4.3 and FuzzSMT scope in §4.4.2: contributor correctness guidance, not a simplex source. |
Monniaux [33] |
§§2.1–2.2, the sparse forced-pivot ordering discussion in §3, and §4’s rational representation. The downloaded arXiv copy was also consulted. |
Bjørner and Nachmanson [8] |
§§2–3 and 6: exact sparse arithmetic, direct/indirect propagation, optional model-unit equality producer and combination boundary. The integer/nonlinear sections are not re-audited here. |
Bromberger, Fleury, Schwarz, and Weidenbach [10] |
§3, especially footnote 3: model-based phase recommendations. |
Andersen and Andersen [2] |
§3.1, especially (iv): fixed-variable elimination as motivation; distinction from Primo’s reversible pivot-based adaptation. |
Dutertre–de Moura, SRI-CSL-06-01 [20] |
§§3.1–3.3: preparation, repair/termination, explanations, rollback, propagation and strict bounds. |
The source review corrected stale King and Griggio comparisons: Primo now has indexed occurrence removal rather than a linear column scan, and the least-violated rule is implemented as an opt-in alternative. The chapter also distinguishes Bromberger’s sorted linked rows and common denominators from Primo’s sorted vectors and per-entry rationals. Monniaux’s normalization, sparsity rationale and two-tier arithmetic are credited without claiming his floating-point acceleration. The 2024 model-unit producer remains optional. The base-paper note also now distinguishes the report’s saved successful assignment from Primo’s retained-assignment rollback and records when the occurrence index actually needs rebuilding.
The original tableau diagram is reused from the existing book. A browser check found that its SVG-font export lost glyphs and typography in Chrome; it was regenerated from the unchanged TikZ source with outlined glyphs:
mkdir -p /tmp/primo-lra-figure
pdflatex -interaction=nonstopmode -halt-on-error \
-output-directory=/tmp/primo-lra-figure \
docs/figures/lra-tableau-occurrence-index.tex
dvisvgm --pdf --no-fonts \
--output=docs/_static/lra-tableau-occurrence-index.svg \
/tmp/primo-lra-figure/lra-tableau-occurrence-index.pdf
The regenerated SVG was inspected in headless Chrome. Both books use the same maintained figure; the draft does not introduce a second editable copy.
Verification and acceptance boundary#
Both strict book builds, source-link checks, navigation/ledger coverage, rendered content/asset checks and the old-page compatibility audit pass for this chapter. All 19 draft pages have navigation and ledger entries; all 83 baseline pages and 1,223 captured anchors remain available. Solver source is unchanged; no local or remote solver batch was run. Existing tests are linked by the invariant they exercise, without claiming a fresh fuzz or benchmark qualification. Reader acceptance, complete historical extraction and the published table-to-artifact mapping remain open.
Normalization clarification and D2 lead#
The LRA preparation explanation now replaces the unexplained H1a/H1b labels
with the two concrete savings and compares normalization on
4*x + 6*y <= 10: the paper’s integer coefficients become 2, 3, whereas
Primo’s become 1, 3/2. Both scale the threshold as well. The explanation
was checked against canonical_polynomial, append_atom and Monniaux §2.1.
The existing D2 lead is now visible in the draft’s Open work navigation and linked from the LRA chapter. Monniaux §3, Algorithm 2 and its basis-feasibility argument were read for this extraction. The original investigation and dated comparisons remain in place; no algorithm was added or solver experiment run. Integration, evaluation and reader acceptance remain open. Both strict books and source/HTML link checks pass with 20 draft pages; the existing page and anchor compatibility baseline is preserved.
Why leading-coefficient normalization was chosen#
The follow-up history check inspected the original design (d5e1a54), the
H1b implementation commit,
the early-canonicalization note and
current code. The original objective was proportional-row sharing; no
isolated comparison with coprime-integer tableau normalization was found.
The chapter now distinguishes the simple scaling operation from a demonstrated
performance advantage, records the possible cost of introducing fractions,
and separates it from the default-off primitive-integer core rewrite.
The earlier LIA arithmetic profile
also raised the cost question; it did not isolate the two normalization forms.
Stale descriptions of that early pass as mandatory were corrected in the
retained arithmetic and H1 notes. These are documentation corrections;
normalization behavior and option defaults are unchanged.
Both strict books and source/HTML link checks pass; the old page/anchor
baseline is preserved. No solver batch or new performance experiment was run.
Rational layout lead#
The rational-storage question is recorded separately from the outer term-payload
union. The current fields and constructor/copy ownership were inspected; the
new examples/rational-layout.cpp was formatted, compiled with C++20 and
warnings as errors, and run locally without invoking the solver.
On GCC 13.3.0/libstdc++, current and raw-pointer layouts are both 24 bytes;
the pointer itself is eight bytes in either case. The separate-tag union
remains 24 bytes, the denominator-tag union is 16, and the inline-GMP union
is 40. Candidate delta values and row entries measure 32 bytes each versus
48 and 40 currently. No candidate is constructed or used for arithmetic.
The draft now has 21 pages with navigation/review/support entries. Both strict book builds, source/HTML links and old page/anchor compatibility checks pass. Lifetime design, implementation, solver qualification and memory/runtime evaluation remain open; no solver batch ran for this documentation change.
Editorial consistency pass — 2026-09-26#
This pass covers the draft implementation and contributor chapters, home page,
eight lead pages, and four shared literature notes. It resolves the style review
by standardizing work states, defining terminology, linking representation types
directly, and replacing repeated editorial caveats with specific limitations.
The LRA equality-sharing explanation uses row examples checked against
model_filtered_unit_equalities; no executable example changed.
Repair chronology and detailed qualification counts now live in this review record, with links from DPLL(T). The normalization rationale keeps the technical tradeoffs in LRA and the historical evidence here. Published measurements, rejected experiments, source attribution, validation gaps, and option defaults are preserved. The source-link revision remains unchanged.
Contributor fuzzing requirements concern coverage, outcomes, and reproducible evidence, independent of which machine a contributor uses. This clarification does not change the workspace’s agent execution instructions. Public contribution governance and sign-off remain outside the correctness guide’s scope.
Edition details remain here rather than in chapter introductions: the EUF review used the 2007 journal edition [34]; the Yices copies listed above have 5, 8, and 30 PDF pages respectively. The original Plaisted–Greenbaum paper’s publisher returned HTTP 403, and the author’s reprint listing offered no download; the directional-encoding account therefore uses the accessible 2025 primary paper.
Verification passed: make docs, make docs-next, source-link targets and line
bounds, rendered local links, shared-note consistency, navigation and ledger
coverage, and preservation of old-book and pre-edit draft anchors.
git diff --check also passed. Only documentation changed; executable examples
are unchanged, and no solver qualification was rerun. Page-acceptance states
are unchanged; reader acceptance and remaining factual investigations stay
listed in the ledger.
Hyperlink-checking pass, 2026-09-26#
The new make docs-check-links command passed for both books: 113 generated
pages, 17,230 local links, and 356 distinct Primo Git URLs. Seven focused Python
tests cover successful checks and failures, including missing anchors, URL
encoding, unavailable Git history, and line ranges checked at the cited commit.
Both strict book builds, make lint, and the checker self-review passed.
No solver behavior changed or solver qualification was rerun.
make docs-check-external completed both Sphinx audits and returned failure:
12 URLs in the existing book and two in the draft remain unverified. Ten
returned HTTP 403, two were rate-limited with HTTP 429, one had a TLS certificate
error, and one refused the connection. These are access failures, not evidence
that the cited papers have disappeared. The
audit snapshot records the
URLs, source locations, tool versions, and results. It is evidence from this
run, not an exclusion list; subsequent runs check those URLs again.
The pass also fixed accidental web links created from bare AGENTS.md text
and used literal HTML anchors for two GitHub headings. The linked CaDiCaL
header’s dynamic line fragment has a documented anchor-only exception; its
page remains subject to HTTP checking. The solver source pin and page-acceptance
states are unchanged. External access failures remain open for review.
Theory-combination chapter, 2026-09-27#
The new chapter consolidates the current contracts of docs/nelson-oppen.md,
docs/modular-theory-combination.md, and docs/n-way-combination-migration.md.
It explains purification, convex equality exchange, non-convex arrangements,
model choices, component ownership and shared scopes, freshness checks, exact
and complete-arrangement fallbacks, and typed model assembly. Source and test
links use the unchanged e6d9fcb06f476375aded43a13c22a6d6b4939144 pin. Solver
sources are identical to that revision; newer documentation-tool and UF-fuzzer
tests do not change the combination code reviewed here.
Primary sections read#
Publication and edition |
Sections used in this pass |
|---|---|
Nelson and Oppen, 1978 Stanford report STAN-CS-78-652; retrieved from the report mirror linked in the chapter |
§§2.2–2.4: purification, equality exchange, and convex/non-convex search. The Stanford download endpoint refused the connection; the mirror supplied the authors’ original report. This was not a reading of the 1979 journal layout. |
de Moura and Bjørner [15] |
§§2.1, 4, 5.1–5.2 and Appendix A: arrangements, model decisions, opportunistic equality rules, freedom intervals, and the broader transition system. |
Bruttomesso et al., LPAR 2006 author manuscript, linked in the chapter |
§§2–3 and Figure 4: SAT-mediated interface search and the extra hypotheses of the paper’s NO-emulation strategy. No branching-bound claim is transferred to Primo. |
Griggio [27] |
§1.5.1, printed pp. 28–35: purification, shared variables, stable infiniteness, convex closure, and delayed combination. |
King [30] |
§§1.5.5–1.5.6, printed pp. 26–28: theory-engine responsibility, partial/full checks, and shared-term explanations. |
Bromberger [9] |
§5.4: equality-basis normalization and justifications. The full basis algorithm remains an open lead; this pass does not re-audit all of Chapter 5. |
The original reports were read as papers, not as solver implementation sources. The current chapter uses Primo’s own code for representation and control-flow claims. Its clause examples were checked algebraically against the materializer and explanation conventions; they are reasoning traces, not newly measured execution traces.
Corrections and evidence boundary#
The old dedicated Real page still described a private SAT-assignment snapshot
and a separate assignment trail in TheoryCombinationManager. It now describes
the shared TrailView and the distinct undo log for arrangement values. The
draft also distinguishes the production ComponentModelCoordinator from the
older experimental ModelBasedCombinationCoordinator, and distinguishes
protocol-level mutation support from the production adapters, which disable it.
Existing tests were inspected for guarded equality exchange, congruence effects of model merges, non-convex choices, independent partition-oracle coverage, projection freshness, mutation side effects, rollback, arrangement fallback, and reconstruction of purified arguments. No solver batch, fuzz gate, model validation, or performance evaluation was run for this documentation change. The qualification and migration records remain in place with their original revisions, results, and limits. LIA’s internal search and the full model chapter remain separate writing tasks; reader acceptance is still pending.
Verification#
make docs-check-links checks both strict books, generated local links and
anchors, and pinned source files and line ranges. The chapter adds 51 source
links. The compatibility check also preserves the old book’s 83 baseline pages
and 1,223 captured anchors, plus every pre-existing draft anchor. Navigation,
review-ledger coverage, and identical rendering of the shared literature notes
were checked separately. git diff --check passed.
make docs-check-external completed both audits, returning failure for 14
external URLs: 11 in the existing book and three in the draft. Ten returned
HTTP 403, two returned HTTP 429, one failed TLS verification, and one refused
the connection. The newly cited Nelson–Oppen report mirror and DTC manuscript
both passed. The rate-limited draft URL was the existing CaDiCaL API-header
reference; the two thesis repository landing pages again returned HTTP 403.
Their local PDFs supplied the reading copies. Reports are in each book’s
_build/linkcheck/output.json; no URL was excluded to clear this run.
The document-critic pass found no remaining blocking documentation issue after correcting the assignment-ownership description and checking the source ranges. The external access failures, final historical extraction, and reader acceptance remain explicit limitations. No C++ changed, so solver tests, ASan, fuzzing, and clang-tidy were not rerun.
Care-pair explanation, 2026-09-27#
Reader review found that the chapter named care pairs without explaining why
a pair matters. The new subsection defines a pair and its graph, works through
f(x), f(y), and g(z), and maps the example to the current flattened EUF
generator and the general component driver’s choice ordering. It explains why
an equality question supplies no entailment and why agreement on care pairs
does not replace complete model-partition comparison.
The author PDF of Jovanović and Barrett’s Being Careful about Theory Combination was read in §3 (Definitions 6–8) and §§4.1–4.2. The chapter now cites it directly together with the earlier Sharing is Caring paper. The paper’s empty-care-graph guarantee and EUF exclusions are distinguished from Primo’s simpler pair generator and heuristic use of its output. Existing EUF generation and component selection/validation tests are linked; their source was inspected, without rerunning solver batches.
The solver source pin and reader-acceptance state remain unchanged. The other review findings about the architecture introduction, default equality rules, and option conditions remain pending.
make docs-check-links passed both strict books and checked 114 pages,
17,409 local links, and 405 unique Git links with zero failures. The new section
and its source/paper links were inspected in the generated HTML, and the review
CSV was checked for unique page entries. Both newly cited paper PDFs returned
HTTP 200. The full external audit was not repeated; its earlier access failures
remain recorded above. git diff --check passed.
General combination is implemented, 2026-09-27#
The chapter now leads with solve_component_recipe as the implemented general
driver. Its route table identifies QF_UFLIA and quantified UF as current users
and QF_UFLRA as the retained dedicated route. CombinationRecipe supplies the
component collection and priorities; existing three/four-component tests exercise
the actual driver. The quantified recipe reuses the lifecycle and SAT loop for
instantiation lemmas; it is not an additional arithmetic-combination claim.
The body heading now names the general driver while preserving the previous
the-component-collection-route anchor. The architecture overview, DPLL(T)
introduction, landing page, and restructuring record use the same distinction.
The defaults table separates QF_UFLIA model guidance from the incremental-EUF
requirement for online execution. The older experimental Real-only coordinator
and its flag are distinguished from the production general driver.
The architectural follow-up is migration of QF_UFLRA onto that existing driver,
preserving its current behavior and optimizations. The care leads concern
choice generation and acceptance obligations. Full DPLL(T^M) integration
remains separate algorithmic work. These edits resolve the earlier review’s
architecture and option-condition findings; the default equality-rule
explanation and reader acceptance remain pending.
The recipe definitions, both production callers, coordinator interface, and three/four-component test bodies were inspected. Solver sources and their documentation pin are unchanged. No solver batches or new qualification were part of this documentation clarification.
make docs-check-links passed both strict books: 116 pages, 17,614 local
links, 412 unique Git links, and zero failures. Generated HTML includes the
new general-driver heading, the previous collection-route anchor, and the
production caller links. All prior anchors on the affected draft pages were
preserved. git diff --check passed, and comparison with the source pin found
no changes under src/. External URLs are unchanged; the earlier external
audit’s access failures remain recorded separately.
Default LRA equality rules, 2026-09-27#
Expanded the combination chapter’s default equality producer into worked
examples for FixedEq, EqRow, EqOffsetRows, and EqRows. The explanation
defines fixedness using matching bounds, identifies which shared variables
must be basic, and shows how bound premises guard a propagated equality.
It describes Primo’s grouping and representative selection, distinguishes
its scan from the paper’s scheduling, and uses the existing fixed-slack
regression to illustrate a basis-dependent missed equality. Model agreement
and exact fallback remain separate acceptance mechanisms.
Re-read de Moura and Bjørner, Model-based Theory Combination, §5.1 from the
local primary PDF and checked the examples against entailed_equalities,
its result type, the combination caller, and the existing rule and
fixed-elimination regressions. The LRA chapter now links to this explanation;
the combination test map links to the positive and negative rule cases.
This resolves the default equality-rule explanation item in the earlier
review. Reader acceptance and the remaining chapter rewrites are still open.
Solver sources and their documentation pin are unchanged. No solver batches
or new solver qualification were part of this documentation edit.
make docs-check-links passed both strict books: 116 pages, 17,625 local
links, 415 unique Git links, and zero failures. The generated HTML contains
the rule examples, new section targets, and pinned implementation/test links;
the LRA crosslink resolves and all prior anchors on the affected pages remain.
The review CSV has unique page entries, and git diff --check passed.
External URLs are unchanged; the earlier external audit’s access failures
remain recorded separately.
Model mutation scheduling, 2026-09-27#
The combination chapter now states when the dedicated Real route attempts scratch LRA diversification: after the outer SAT candidate passes component checks, before the final explained-equality passes and EUF reconciliation. It records the enable condition, one call per eligible round, repeated calls after a SAT recheck, and the mutation-disabled projection after targeted disequality repair. The bounded sweep, early exits, scratch ownership, and acceptance conditions are distinguished from the later EUF model adaptation and from the general driver’s mutation protocol.
Re-read de Moura and Bjørner, Model-based Theory Combination, §§4 and 5.2.
The primary text explicitly leaves M-Mutate scheduling unspecified; the
chapter distinguishes that freedom from Primo’s concrete call order. The
default order can spend mutation work on a candidate discarded by subsequent
equality propagation. No alternative schedule or performance improvement is
claimed here.
Inspected the outer solve loop, both partition-construction calls, the diversifier, option defaults and CLI flags, and existing regressions for a single mutation call, pair pruning, untouched tableau state, and mandatory disequalities. The LRA chapter links to the schedule, and the review ledger and combination test map include these checks. Solver sources and their pin are unchanged. No solver tests, fuzzing, or benchmarks were run for this documentation-only clarification.
make docs-check-links passed both strict books: 116 pages, 17,633 local
links, 428 unique Git links, and zero failures. The generated scheduling
section, LRA crosslink, source/test links, and explanatory text were checked;
all prior anchors on the affected pages are preserved. The review CSV has
unique page entries, and git diff --check passed. External URLs are
unchanged; the earlier full external audit’s access failures remain recorded
separately.
Separate combination proposals from implementation, 2026-09-28#
The combination chapter now ends with an evidence section and brief links to
separate open leads. The previous evidence-and-open-leads anchor is retained.
The implemented-route summary describes the current split between the general
driver and the dedicated Real engine; the proposal details live elsewhere.
Added open, unassigned pages for a complete implied-equality basis, migration of QF_UFLRA to the existing general driver, and further model-based transition integration. The two existing care leads remain separate. All five are linked from the chapter and the landing page’s Open leads section. The three new pages appear in navigation, the review ledger, and the supporting-file map; the architecture overview links to the migration lead.
The extraction preserves the original equality-basis investigation and the dated component/transition records as references. Bromberger §5.4 and de Moura–Bjørner §4 and Appendix A supply the paper context; the current driver and route boundaries remain those checked in the preceding chapter reviews. This is documentation organization, not a new implementation plan or a claim of fresh solver qualification. The new lead pages await reader review and further design work. Solver source and its documentation pin are unchanged.
make docs-check-links passed both strict books and the local/source-link
check. The previous HTML anchors were preserved throughout the draft, and
the navigation, review ledger, and support inventory cover all 27 draft
pages. The three new pages render with open/unassigned status and source
links; all five leads are reachable from the chapter and landing page.
git diff --check passed. External URLs are unchanged; the earlier external
audit’s access failures remain recorded separately. No solver batches were
part of this cleanup.
Quantifiers chapter, 2026-09-28#
Added a chapter covering the current quantified-UF route, indexed binders, capture-safe substitution, all four quantifier/polarity cases, term-pool growth, tuple orders, redundancy caches, queue scheduling, and budgets. The answer table distinguishes refutation, Skolem-covered existential SAT, unresolved universal obligations, and unsupported model requests. A worked refutation and nested-binder examples accompany links to the owning source and existing regressions. The general-driver, DPLL(T), core, and landing pages now link to this chapter.
Inspected quantified_solver, QuantifierComponent, binder/frontend
operations, tuple generators, instance simplification, the component driver
and dispatcher, option defaults, and the pool export/checker. Checked the
worked clauses and index substitutions against those operations and their
existing tests. The chapter describes the current sum default and keeps
earlier default descriptions in the dated development records. Pools and
caches survive backtracking but belong to one solve; generated terms remain
in the session’s term manager.
Read these primary sources for the chapter:
SMT-LIB 2.6 revision 2021-05-12, §3.6: quantifier declaration lists, scope, and parallel
letbindings.Charguéraud, The Locally Nameless Representation, §§2.3 and 3.3: de Bruijn indices and local closure.
Reynolds, Barbosa and Fontaine, TACAS 2018, §§2–4.1, particularly Theorem 1 and the entailment/completion distinction.
Janota et al., FMCAD 2021, §§III–IV: enumeration orders and redundancy.
Reynolds’s 2013 thesis, §§3.1.1–3.1.2: instantiation and model acceptance.
Barbosa’s 2017 thesis, §5.1 and §§7.1.1–7.1.2: shared terms, capture-safe transformations, and contextual Skolemization.
The source table distinguishes implemented ideas from comparison points; the thesis algorithms are not claimed as fully implemented. The primary PDFs were read from their linked author/standard URLs. The retained local paper checklists and original binder note remain traceability records. The new open-lead page carries forward entailment filtering and fail masks, alongside bounded work before the first useful lemma and cancellation. No investigation is presented as active implementation.
Historical correctness and performance records remain attached to their original revisions. Pool-guided cvc5 confirmations are distinguished from inconclusive runs and from proof certificates. Solver sources and the documentation source pin remain unchanged. No solver tests, fuzzing, or benchmarks were run for this documentation-only chapter. Reader acceptance, final historical extraction, and the LIA/model/preprocessing/frontend chapters remain pending.
make docs-check-links passed both strict books: 121 HTML pages, 18,205
local links, 471 unique Git links, and zero failures. All prior anchors
across the 31 pre-existing draft HTML files were preserved. Navigation,
review entries, and the supporting-file inventory cover all 29 draft pages.
The generated chapter sections, source/test/paper links, and separate
open-lead status were inspected. git diff --check passed, and comparison
with the documentation pin found no changes to solver source or the cited
unit suites. Linked primary PDFs were retrieved successfully for reading;
the full external audit was not rerun, and its earlier access failures
remain recorded separately.
Incremental draft builds, 2026-09-28#
make docs-next and its preview target now reuse Sphinx’s cached documents.
make docs-next-full, both link-check targets, and the documentation
qualification script retain full builds with warnings treated as errors.
make docs retains its existing full-build behavior.
Checked actual HTML modification times: an unchanged draft build rewrote no
book pages; a temporary edit to the quantifier chapter rebuilt that page and
the index, leaving the other 27 pages untouched. The edit was then restored
and rebuilt. Full-build and link checks, shell syntax checks, make lint, and
git diff --check passed. This changes documentation tooling only; C++ tests,
sanitizers, static analysis, and solver fuzzing are not applicable.
Documentation coverage TODOs, 2026-09-28#
The comparison with the older book identified missing explanations alongside chapters still awaiting their first draft. Visible TODO callouts now identify the required arguments, worked steps, design rationale, operational references, and evidence extraction at the relevant locations. Whole missing chapters are recorded at their existing entry points; no empty chapter placeholders were added. The review ledger retains these as unresolved coverage work, separate from earlier factual checks. The writing conventions now require an explanatory home and a section-level content audit before replacement acceptance.
These edits record work to do; they do not complete the explanations or change solver behavior. Existing source and historical evidence remain in place.
EUF filtering and Boolean-domain coverage, 2026-09-28#
Replaced the filtering/domain TODO with the monotonicity argument, a complete Boolean-argument counterexample, the protection flag’s contract, and a coverage argument for ground frontend-prepared input. Read Sebastiani’s §6.10 and Proposition 2.3 and SMT-LIB 2.6 Definition 8. Traced frontend naming, polarity collection, registration, assignment filtering, signed reasons, propagation exclusions, and model completion in the source baseline. Existing regressions are linked as obligations, not reported as newly run.
The older coverage claim was too strong under filtering: a predicate-result class can remain unanchored in the search closure. The new text distinguishes protected Boolean arguments from those safely completable results and explains why completion cannot change an application signature. It also makes explicit that predicate applications used as ground arguments receive frontend names. The model-construction TODO remains for the next chapter.
Both strict books and local/source links were checked with make docs-check-links;
existing HTML anchors were preserved. No solver behavior changed, no solver
batches ran, and no historical qualification was promoted. Reader acceptance
remains pending.
Model-construction chapter checks, 2026-09-28#
Resolved the second EUF TODO with a separate model chapter. It describes the typed owning representation, both construction adapters, Boolean completion, authoritative component values, function defaults and evaluated tuple keys, component-local domain labels, reverse conversion replay, and the boundary between construction, freezing, checking and printing. The worked example restores eliminated constants through a fixed function table, with Boolean completion and arithmetic values explained explicitly.
The source pass covered core::Model and its evaluator, both builders and
their callers, the typed conversion log, solved-constant cycle rejection,
fragment validation and assembly, session finalization, and serialization.
The reader pass checked stage order, simultaneous updates, the reason for
fresh evaluation epochs, and the distinction between a cyclic EUF equation
and a self-dependent substitution. The older contract’s references to
invalidation are explained by the implemented epoch mechanism; no selective
dependency worklist is claimed. Existing unit regressions are mapped to their
obligations, and earlier qualification stays attached to its original revisions.
Navigation, chapter entry points, the review ledger, and migration inventories include the new chapter. Both EUF TODOs are now resolved. Reader acceptance, the broader section-level coverage audit, user guides, and other chapters’ TODOs remain open. Solver sources and the source-link revision are unchanged. No solver test, fuzzing, or benchmark batch was run for these documentation edits.
make docs-check-links passed both full strict builds: 122 HTML pages,
18,380 local links, 522 unique Git links, and zero failures. The 33 existing
draft HTML files retained all their anchors; navigation, ledger, and support
inventory cover all 30 draft pages. Rendered Boolean-domain coverage and
model-replay tables, code examples, and chapter navigation were inspected in
Chromium. git diff --check passed. Source and unit-test files still match
the documentation pin. The full external URL audit was not rerun; the cited
primary filtering PDF was retrieved and read separately.
Quantifier negation checks, 2026-09-28#
Clarified that Q in the polarity table denotes the quantified formula without
its surrounding negation. The clausifier represents not Q by the opposite
SAT literal; the component classifies the quantifier kind together with its
assigned truth value. The chapter now derives both negated cases, explains
why an occurrence under negation in a larger Boolean formula need not force
that value, and follows negation through an alternating nested example.
Read the negation constructor, clausifier, quantifier classification and lemma
construction, and existing polarity regressions. Guards and retained witness
records were checked against the backtracking explanation. This is a local
exposition correction; the remaining quantifier TODOs and reader acceptance
are unchanged. Both strict books and local/source links pass
make docs-check-links; rendered sections and existing chapter anchors were
checked. No solver behavior changed or solver batches ran.
Quantifier specialization and relevance leads, 2026-09-28#
Recorded three separate investigations: optional NNF through binders, fixed
obligations from directly asserted quantifiers, and omission of quantified
don’t-cares. The implementation chapter now states that the current component
processes all assigned quantifiers, including irrelevant ones, and explains
the possible effect on unknown. No optimization is claimed as implemented.
Read de Moura–Bjørner’s relevance report §§1–3; Sebastiani’s 2007 survey §6.9 and §§7.2.1–7.2.2 alongside §6.10; Niemetz–Preiner–Biere’s FMCAD 2014 paper §§II–III and §IV.A–B; and Sebastiani’s 2020 partial-assignment analysis §§3–4. The shared literature note distinguishes online watches, structural candidate reduction, dual extraction, and entailment versus three-valued evaluation. Masina–Spallitta–Sebastiani §4, §5.5 and Appendix C provide limited context for the NNF proposal, with enumeration results separated from decision solving.
Checked the current preprocessing and instance-simplification boundaries, root clausification, kind/value classification, witness guards, full-model decision, and the complete-candidate scheduling regression. The proposed relevance contract requires support of all active roots and required nested obligations; it does not infer quantified satisfiability from exhausted enumeration. The older arithmetic relevance lead retains its independent evaluation sequence and now links the paper survey. Navigation and migration inventories include the new pages. All three leads remain unassigned and require design, proof, implementation and evaluation before acceptance as solver mechanisms.
make docs-check-links passed both full strict builds and checked 127 HTML
pages, 19,248 local links and 534 unique Git links with zero failures. Existing
anchors in 126 prior HTML files were preserved. The ledger and support inventory
cover all 34 navigated draft pages; rendered titles, tables and links were
inspected. Source and unit-test files still match the source-link pin.
The external URL audit was not rerun; the cited primary texts were accessed
and read for this survey. No solver batches ran or new qualification was claimed.
Row propagation and combination links, 2026-09-28#
Resolved the LRA row-propagation TODO with a signed-coefficient table, a forward bound and its SAT clause, a strict-bound variant, and a reverse derivation that divides by a negative coefficient. The description follows the implied-bound helpers through atom entailment, queued delivery and reason streaming. It records selective triggers, missing-bound behavior, index gates, size/fanout caps and defaults, without claiming complete interval saturation.
Added reciprocal links to theory combination. A separate combination subsection explains the optional online paired-bound equality producer, lazy equality-atom registration and an arithmetic-to-EUF conflict chain. It distinguishes this producer from final tableau equality scans, exact fallback and model guesses. Existing forward, reverse, cap and online-equality regressions are linked; the review ledger and migration inventory reflect the resolved coverage gap.
Reread Dutertre–de Moura’s technical report §3.2.5 and the strict-bound
convention in §3.3, and Bjørner–Nachmanson §3.3. Checked the owning code,
callers and option defaults, then reviewed the example arithmetic, clause
signs and rendered sections. Both strict books and local/source links were
checked with make docs-check-links; existing page anchors were retained.
Solver sources and the documentation pin remain unchanged. No solver tests,
fuzzing or benchmark batches ran for this documentation-only change.
The SOI TODO was resolved in the following pass. The integer-arithmetic and
retained-evidence TODOs remain open.
The follow-up review clarified three boundaries: propagation installs the existing atom’s threshold (8 in the worked example), online LRA propagation is disabled by model-equality branching, and an already-false interface equality remains a mandatory disequality for later combination checks. The relevant assertion and construction paths were rechecked, with both strict books and local/source links verified after these edits.
SOI objective, selection and conflicts, 2026-09-28#
Expanded the optional SOI algorithm from King–Barrett–Dutertre, FMCAD 2013, §V, and King’s thesis §§3.2–3.3, including §3.3.5 and Figure 3.6. Checked the objective/direction updates, breakpoint ordering, entering and leaving choices, restricted-row conflict test, minimizers, finite fallback, and undo records against their owning source and existing regression tests.
The chapter now derives the objective, works through Figure 6, explains a conflict requiring two rows, and distinguishes implemented selection and minimization choices from the primary algorithms. Historical evidence is identified by run-log ID, revision and qualification limit. Older claims of implementing the full paper algorithm were qualified. Both books now enable MyST dollar-delimited mathematics, with the authoring convention documented.
A single bounded component debug run exposed a zero-breakpoint discrepancy:
the current walk applies a slope change when a variable starts on a bound and
moves into its feasible interval. The retained download and run-log entry
2026-09-28-soi-zero-breakpoint-debug reproduce two pivots where the objective
admits a one-pivot repair. The example reaches a valid assignment. Endpoint
correction, dedicated regression coverage and subsequent remote qualification
remain separate implementation work; no solver behavior was changed here.
Both strict books and local/source links passed make docs-check-links.
All anchors in the 131 prior HTML files were preserved, solver source and unit
tests still agree with the source pin, and the downloadable debug example
passes clang-format --dry-run --Werror. Browser review covered the objective,
worked pivot/table and conflict derivation with MathJax rendering; a long
display was split into three lines. The full external-link audit was not rerun.
No solver test suite, fuzz campaign or benchmark batch ran for this change.
SOI endpoint correction, 2026-09-29#
The endpoint discrepancy found above is corrected in bc5d21d. The implementation
checklist in docs/arithmetic.md follows FMCAD 2013 §V-A and King’s thesis
§3.3.1: starting exactly on a bound requires its one-sided direction change.
The breakpoint record now distinguishes lower and upper bounds. Inward zero
events leave the slope alone; outward events change it once, including fixed
variables. Nonzero fixed-bound crossings still contribute both changes.
Four new tableau regressions exercise 32 checks, covering both coefficient signs and walk directions, coincident bounds, rational and infinitesimal steps, and replay after rollback. The retained component reproduction now asserts one pivot and the original valid assignment. Two SMT-LIB regressions also run with preprocessing off. Both books link the corrected source and tests; ranges were remapped when advancing the shared source pin.
SLURM qualification passed 43 normal and 43 AddressSanitizer test groups,
201 Python tests, and 36 Z3 comparisons across the arithmetic seed/smoke
suites and endpoint regressions. The fresh SOI-forced FuzzSMT gate generated
1,000 distinct QF_LRA inputs: 958 agreements and 42 five-second timeouts,
including two mutual timeouts, with no wrong answers, crashes or input
rejections. Timeouts remain separate from passes. The run-log entry
2026-09-29-soi-endpoint-correction and
qualification metadata
record commands, revisions, resources, jobs, setup retries, static-review
results and evidence limits. SOI remains opt-in; this is a selection correction,
not a new overall performance result.
Integer arithmetic and first preservation map, 2026-09-29#
The LIA chapter was checked against bc5d21d: arithmetic stage implementations,
pure and combined callers, preparation and strict bounds, frontend admission,
mandatory extended-term lowering, option defaults, model adaptation and the
existing regression suites. Bjørner and Nachmanson’s CAV 2024 §§4.1–4.5 and
King’s thesis §4.4.3, including Lemma 4.1 and equation (4.9), were read from
the supplied primary PDFs.
The chapter explains the private tableau lifetime, integer-variable guards, delta-aware thresholds, patch scoring, GCD scaling, four cut-coefficient cases, branch rollback and explanation antecedents. Worked examples include the paper’s patching example, both cut orientations, divisibility, incomplete branching and the need to close both split branches before dropping their assumptions. Clause containment is identified as a defensive membership check, not a proof of theory validity. Unsupported mixed-input arithmetic and deferred integer methods remain explicit.
The preservation map accounts for all 25 headings in the original LIA chapter, splitting mixed mechanism/history sections further where needed. It retains failed experiments and qualification limits, records superseded claims, and leaves visible TODOs for preprocessing policy and contributor workflows. Other old pages still need their own section audits; no page is accepted by this check.
make docs-check-links passed both strict book builds and local/Git source-link
validation. All 131 pre-existing HTML files retained their anchors. Browser
inspection covered patching, the cut derivation and coefficient table, and
the explanation argument; MathJax rendered 161 expressions without errors.
The whole external-link audit was not rerun. This is a documentation change:
the solver suites, fuzz campaigns and historical benchmarks were not rerun.
Bromberger thesis coverage, 2026-09-30#
The thesis was already covered by the existing book’s detailed literature note, including the 2026-08-29 reading and 2026-09-25 source refresh, and by the replacement LRA/combination chapters and equality-basis lead. The new reading guide makes that work directly visible in the draft’s literature navigation and expands its connection to LIA.
Selected primary sections were reread from the supplied PDF: Chapter 4’s cube transformation and unit/mixed tests, §5.7, Chapter 6’s overview and selected definitions/termination results, §§7.2.3–7.2.4, and selected §8.2 passages. The guide records that scope, explains the cube guarantee and a coordinate change for the existing incomplete example, and distinguishes SPASS-IQ’s schedule from Primo’s callers and branch routine. Full implementation review of the transformation algorithms and preprocessing passes remains pending. The old note’s claim that source-solver gains bound Primo gains was corrected.
Both strict books and the local/Git link check passed. Prior HTML anchors are preserved, including the renamed benchmark-interpretation section. Browser review checks the new guide’s equations. There are no solver changes or new solver qualification runs; the full external-link audit was not repeated.
Integer arithmetic terminology and heuristic literature, 2026-09-30#
Clarified the shared LiaExplanation object and named find_eligible_row
at its first use. Rewrote the GCD section around the divisibility argument,
then the actual row preparation, guards and explanation. Read Pugh’s expanded
Omega paper §2.1 and reread Griggio §2.6.1 to separate the classical rule
from its more recent tableau presentation. Carried original lead 12e into
the draft with exact residue/interval reasoning and explanation obligations.
The old GCD heading anchor remains available.
Added a shared literature note on MIP primal heuristics after reading Achterberg–Berthold–Hendel §§2–3, Fischetti–Glover–Lodi §1 and Figure 1, and Berthold’s 2014 thesis §§7.1–7.3. Bjørner–Nachmanson §2 supplies the SMT/MIP design comparison; the OMT paper is a context pointer based on its abstract, not an algorithm claimed as reviewed. The patching lead proposes a separate window parameter, candidate/score comparisons and bounded neighborhood search. All remain proposals; the solver and its defaults are unchanged.
Both strict books and local/Git-source link checks passed during this pass. Rendered review checks the changed chapter and new mathematical lead; final verification also checks preservation of the pre-edit page anchors. This is a documentation review, with no solver batches or new performance claims.
Bibliography and reading-copy audit, 2026-09-30#
Both books now use docs/references.bib, with 26 publication records and one
rendered bibliography per book. Relevant entries from the supplied BibTeX
collection were imported as metadata only. The import corrects the 2008
journal edition of Model-based Theory Combination, Tim King’s author name,
and TeX escaping in identifiers. Brummayer’s thesis is recorded as 2009,
consistent with the institutional record and the reading copy. Conference,
report, thesis and slide editions remain distinct where section references
require it.
The audit covered tracked documentation, review and migration records, source comments and run-log source descriptions. Publication identifiers replace local reading filenames. Historical command inputs use explicitly marked bibliography-key placeholders; their dates, solver revisions, measurements and qualification status are unchanged. One old HTML fragment retains its filename-derived spelling solely to preserve incoming links.
Long paper quotations in the retained literature and design notes were rewritten as attributed summaries, preserving the section references and mathematical conditions. No reference PDF or imported paper figure was found among tracked assets: the diagrams have project TikZ/SVG sources and the benchmark plots have project plotting scripts. Local reference PDFs and raw bibliography imports remain ignored. The source-comment changes only replace publication identifiers; solver behavior is unchanged.
Verification: strict builds of both books, generated local and pinned-source
links, pre-existing HTML anchors, BibTeX parsing and field checks, browser
inspection of references and citation tables, and make lint. An isolated
Sphinx check rejects a missing citation key. An incremental draft build detects
a change to the shared bibliography. These are documentation checks; no solver
qualification or fresh paper-algorithm review is claimed. Existing direct DOI
and stable author links remain valid citation forms; the shared file is the
place for new structured references.
Infinitesimals in integer solving, 2026-09-30#
Reviewed PreparedLraTheory::append_atom, bound_assertion, the shared
integer-value helpers, patching, cut eligibility and branch-and-bound.
The LIA chapter now gives a possible tableau trace from an integer strict
inequality through a delta-bearing auxiliary to an integer variable, followed
by patching and the fallback split. The retained integer chapter’s old claim
that all intermediate integer assignments are delta-free is corrected.
The new lead derives exact grid-aware thresholds and records the requirements for avoiding those deltas during preparation. The distinction between integer terms and fractional auxiliaries remains essential. This is a proposed adaptation to Primo’s normalization; no solver change or new qualification is claimed. Existing delta-only branching, strict-bound patching and cut-skip regressions were inspected, not rerun. Documentation validation uses the strict books, local/source link checker and rendered equation review.
Quantifier representatives and model-based filtering, 2026-09-30#
Reread the TACAS 2018 enumeration paper’s §3 completeness statement, §4 Figure 2 and Examples 2–3, and §4.1 term selection and entailment checks. The instantiation lead now records enumeration modulo current equalities, distinguishing entailment by the ground assignment from equality in one candidate model. It connects the proposal to entailment filtering and the objective of choosing lemmas that rule out that model, while preserving the distinction between non-entailed and model-falsified instances.
Read Ge and de Moura’s CAV 2009 §6 as the primary MBQI source. The proposal keeps enumerative candidate generation and uses model evaluation only as a filter; MBQI instead obtains instances from a counterexample search in the candidate model. The literature attribution and implementation-status table preserve this distinction.
Reread FMCAD 2021 §IV and connected the existing fail-mask lead: each wildcard completion needs the rejection criterion, with evidence scoped to rewriting, the ground assignment or the candidate model. Model-truth masks are a proposed extension. The retained design’s earlier claims that retries alone guarantee fairness are replaced with explicit scheduling and starvation obligations.
Inspected the current syntactic pools, enumeration progress and persistent tried-tuple set. The open obligations cover class splits, representative and model changes, new terms, skipped-work lifetime, fairness and model coverage. No solver behavior changes or CVC completeness counterexample is claimed. Verification uses both strict documentation builds, local/source-link checks and rendered review; no solver batch is needed for this documentation change.
Quantifier completeness citation scope, 2026-10-01#
Replaced the growing-pool TODO with a concise statement of the assumptions and
results in Reynolds, Barbosa and Fontaine, TACAS 2018, §3, Theorem 1 and
Corollaries 1–2. The chapter refers readers to the paper for the argument and
retains Primo’s pool, nesting, scheduling and resource-limit distinctions.
The tuple-order TODO now concerns only the implementation-specific evidence
for the sum default. Completeness of the proposed representative/model filters
remains an open lead; the citation does not settle that adaptation.
Verification covers the strict documentation builds and local/source links. No solver behavior, qualification evidence or source pin changes.
Documentation gap completion, 2026-10-01#
The replacement now includes frontend and session contracts, practical user
guides, a capability matrix, complete CLI/tactic/statistics/backend references,
effective option policies, and contributor procedures for fuzzing, reduction,
model validation, debugging, experiments, tuning and documentation. The first
two milestones are 21a5fd4 and e9d7bbb. Executable examples reuse the original
fixtures; they were not rerun by this documentation task.
The remaining algorithm callouts are resolved: indexed-binder rationale, tuple-order evidence, quantifier checking, fixed-basic elimination, model-phase hints, and curated arithmetic history. The pool checker and exporter inspection identified an overclaim in the old trust argument. Both books and the ledger’s scope now state the dependence on conservative witness exports. Recorded run commands and results are unchanged; this is not a newly discovered wrong solver answer or a new independent proof certificate.
The literature map connects papers and theses to implemented
subsets and open directions. The research register reconciles
completed, rejected and remaining numbered leads, including compact distinct,
incremental equation elimination and shared EUF preparation. Stale root design
and milestone files now point to the current manual and work registers.
The preservation inventory accounts for all 91 original
Markdown pages and 1,150 headings at the retained snapshot. Its 126 supporting
entries match the original support map. All 1,306 old HTML page/fragment targets
remain present, with explicit archive routes prepared for cutover. A separate
validation pass checked source ranges, original-file coverage, every replacement
file/anchor, and the exact compatibility target set. The retained snapshot has
its own record link role; implementation links keep their existing source pin.
Verification: make docs-check-links passed for both strict books, including
174 HTML pages and every local/Git link. Browser inspection covered sessions,
policy tables, the literature map, preservation index, quantifier checking and
LRA phase hints. Equations rendered without MathJax errors and inspected pages
had no horizontal overflow. git diff --check passed. No solver, fuzzing,
benchmark or model-checking batches ran, and no implementation files changed.
make docs-check-external did not pass: Sphinx reported 14 failures plus two
timeouts for the original book and five failures plus two timeouts for the
replacement. Most are HTTP 403/429 access failures; the author survey host has
a certificate-chain error and one old SOI paper host refused connections. The
latter was replaced with the verified author-hosted PDF. The
external audit records the exact
URLs, classifications and repair. Remaining failures need a later access check;
they were not hidden by new exclusions or disabled certificate validation.
Reader acceptance, the actual book switch and publication remain pending. Missing publication-to-run mappings and quantified checking obligations remain explicit evidence work; results-storage implementation is separate. The archive catalogue preserves detailed history without claiming that every old experiment is independently reproducible or qualifies today’s solver.
Preprocessing diagnostic review — 2026-10-02#
--preprocess-only remains a developer diagnostic. Ground preprocessing may
return unsat; surviving goals return unknown. Quantified UF now stops
after the frontend, before instantiation or SAT/theory search. The input guide
no longer uses this diagnostic to introduce unknown. The option reference,
statistics reference, preprocessing and quantifier chapters, and CLI help
state the supported behavior.
The implementation at c944fa7 passed 43 CTest groups, 202 Python tests and
12 documentation examples in SLURM. The generated gate covered 1,000 cases
(569 distinct input hashes): normal solving agreed with Z3 under all six
tuple orders, while every diagnostic invocation returned unknown with no
SAT calls, instances or witness lemmas. All 8,000 candidate/reference
invocations exited successfully; there were no disagreements or timeouts.
The run-log entry 2026-10-02-preprocessing-diagnostic-routing records commands,
limits, binary identities and retained artifacts.
The source-file analyzer scan reached the test files before its allocation expired; a separate allocation completed all test files. The advisory include scan covered all 126 C++ translation units. Existing ownership and enum-probe warnings were reviewed and retained in the evidence, along with the include advice; no blocking issue was found in this change. ASan was not rerun because ownership, term storage, parsing and the SAT backend were not changed.
Both strict books and their local/Git links pass. The central source pin now identifies the tested implementation; affected line anchors were refreshed. Historical record pins and their evidence scope remain unchanged.
Publication closing review: initial corrections (2026-10-02)#
The frontend now distinguishes typed core terms, theory literals, and the SAT
literal/clause boundary. The model guide and statistics reference distinguish
rebuild and assumptions engines: internal model construction for --check-model
does not relax the SMT-LIB get-model option requirement. Session accounting is
now documented, including cumulative counters versus drained preprocessing work.
The dependency introduction now includes GMP. These corrections change no solver
behavior. Consolidated reader acceptance remains pending.