Marijn Heule, Warren A. Hunt, Jr., and Matt Kaufmann Initial version (including soundness proof) completed November, 2016 This work is based on Nathan Wetzler's ITP 2013 RAT checker work in ACL2 community books directory books/projects/sat/proof-checker-itp13/. Here we accommodate a more recent input proof format, which provides hints to speed up unit propagation -- "lrat" is mnemonic for "Linear RAT" -- and we add deletion (to obtain a DRAT checker). Because of deletion, the hints, and other features (in particular, using a fast-alist to represent formulas, which is occasionally compressed), our checker can run much faster than Nathan's checker. We have verified several checkers, each with a name that we sometimes use informally in talks and in a paper submission. drat (directory early/drat/) Modification of Wetzler's ITP 2013 RAT checker that adds deletion (the "D" in "DRAT"), verified easily by tweaking Wetzler's proof lrat-1 (directory early/rev1/) Use lrat (linear rat) proof format to avoid search and delete clauses efficiently, implemented using fast-alists (applicative hash tables); soundness proved from scratch lrat-2 (directory early/rev2/) Modification of lrat-1 to shrink fast-alists, to keep the formulas small lrat-3 (directory list-based/) Modification of lrat-2 with slightly more compact formula data structure lrat-4 (directory stobj-based/) Modification of lrat-3 that uses single-threaded objects (stobjs) to represent assignments, for efficient evaluation of literals, clauses, and formulas lrat-5 (directory incremental/) Modification of lrat-4 that reads clrat (compressed lrat) files efficiently for parsing, and importantly for memory usage, can read them in chunks Also see cube/README for work on verifying cube-and-conquer proofs. To elaborate a bit on some of that: Directory list-based/ contains an lrat checker with a proof that it is sound. That checker represents assignments as lists of literals (positive and negative integers). Directory stobj-based/ contains a variant of that checker that uses a stobj to encode assignments. It soundness proof is derived as a corollary of soundness of the list-based checker, by proving that if the stobj-based checker validates a proof of a formula, then so does the list-based checker. See list-based/README and stobj-based/README for more information. To certify all books while standing in this directory, you can execute the following command, where ACL2_DIR is your ACL2 directory and ACL2 is your ACL2. This may take about a minute if supporting books outside this directory are already certified, but not much longer even if not. ACL2_DIR/books/build/cert.pl --acl2 ACL2 -j 8 */*.lisp For example, Matt uses the following command. time /projects/acl2/acl2/books/build/cert.pl --acl2 acl2c -j 8 */*.lisp Note that DIMACS comments (lines starting with "c") are not supported in input cnf files.