• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
      • Parallelism
      • History
      • Programming
      • Operational-semantics
      • Real
      • Start-here
        • Gentle-introduction-to-ACL2-programming
        • ACL2-tutorial
        • About-ACL2
          • Recursion-and-induction
          • Operational-semantics
          • Soundness
          • Release-notes
            • Note-2-8
            • Note-2-7
            • Note-8-6
            • Note-8-7
            • Note-8-2
            • Note-7-0
            • Note-8-5
            • Note-8-3
            • Note-8-1
              • Note-8-1-books
              • Note-8-0
              • Note-7-1
              • Note-6-4
              • Note-2-9-3
              • Note-2-9-1
              • Note-8-4
              • Note-7-2
              • Note-6-5
              • Note-4-0
              • Note-2-9-2
              • Note-3-6
              • Note-3-3
              • Note-3-2-1
              • Note-3-0-1
              • Note-2-9-5
              • Note-2-5
              • Note-1-5
              • Note-6-1
              • Note-4-3
              • Note-4-2
              • Note-4-1
              • Note-3-5
              • Note-3-4
              • Note-3-2
              • Note-3-0-2
              • Note-2-9-4
              • Note-2-9
              • Note-1-8
              • Note-1-7
              • Note-1-6
              • Note-1-4
              • Note-1-3
              • Note-7-4
              • Note-7-3
              • Note-6-3
              • Note-6-2
              • Note-6-0
              • Note-5-0
              • Note-1-9
              • Note-2-2
              • Note-1-8-update
              • Note-3-5(r)
              • Note-2-3
              • Release-notes-books
              • Note-3-6-1
              • Note-1-2
              • Note-2-4
              • Note-2-6
              • Note-2-0
              • Note-3-0
              • Note-3-2(r)
              • Note-2-7(r)
              • Note-1-1
              • Note-3-4(r)
              • Note-3-1
              • Note-2-8(r)
              • Note-2-1
              • Note-2-9(r)
              • Note-2-6(r)
              • Note-3-1(r)
              • Note-3-0(r)
              • Note-3-0-1(r)
              • Note-2-5(r)
              • Note-4-3(r)
              • Note-4-2(r)
              • Note-4-1(r)
              • Note-4-0(r)
              • Note-3-6(r)
              • Note-3-3(r)
              • Note-3-2-1(r)
            • Workshops
            • ACL2-tutorial
            • Version
            • Acknowledgments
            • Using-ACL2
            • Releases
            • How-to-contribute
            • Pre-built-binary-distributions
            • Common-lisp
            • Installation
            • Mailing-lists
            • Git-quick-start
            • Copyright
            • ACL2-help
        • Miscellaneous
        • Output-controls
        • Bdd
        • Macros
        • Installation
        • Mailing-lists
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Note-8-1
    • Release-notes-books

    Note-8-1-books

    Release notes for the ACL2 Community Books for ACL2 8.1

    The following is a brief summary of changes made to the community-books between the releases of ACL2 8.0 and 8.1.

    See also note-8-1 for the changes made to ACL2 itself. For additional details, you may also see the raw commit log.

    New Libraries

    A new regular expression library, acre::acre, is available in books/centaur/acre/. Compared to the implementation in projects/regex, this version's features are less similar to GNU grep and somewhat more similar to Perl regular expressions. However, it does not aim to be fully compatible, but to have a well-defined set of features with clean code that can be easily extended and behaves predictably (as much as possible, for regular expressions).

    Added PLTP(A), The Pure Lisp Theorem Prover, reimplemented in ACL2. An ACL2 reconstruction of the 1973 Pure Lisp Theorem Prover (PLTP), the original ``Boyer-Moore theorem prover'' after which both NQTHM and ACL2 were modeled, is available in books/projects/pltpa/pltpa.lisp. More importantly, a PLTP archive has been set up. That archive includes much original source material (e.g., scanned images of the 1973 POP-2 implementation of PLTP) as well as an extensive discussion of the differences between PLTP and PLTP(A), and an OCaml version of PLTP, named PLTA(O), by Grant Passmore.

    A new directory, books/projects/arm/, contains proofs of correctness of the Floating-point operations of addition, multiplication, fused multiply-add, division, and square root, as implemented in the FPU of an Arm Cortex-A class high-end processor.

    Added utility include-book-paths to list paths via include-book down to a given book, which may be useful for reducing book dependencies.

    Added utility apply-fn-if-known to apply a function that might not exist; even the package for the function symbol might not exist.

    Added a fixer integer-range-fix for integer-range-p, as well as a recognizer integer-range-listp and and a fixer integer-range-list-fix for true lists of integer-range-p, all with accompanying theorems.

    Added a library to convert between natural numbers and their representations as lists of digits in arbitrary bases in big-endian and little-endian order. Digits are natural numbers below the base. There are variants for minimum-length, non-zero-minimum-length, and specified-length lists of digits. The library includes, among others, theorems stating that the number-to-digits and digits-to-number conversions are mutual inverses in a suitable sense.

    Added a new utility, skip-in-book, that wraps around a form to prevent its evaluation during book certification or inclusion.

    The new utility defthm<w will attempt to prove a theorem directly from previously-proved theorems. It does this by generating suitable hints using the new utility, previous-subsumer-hints.

    Added some utilities for building XDOC documentation. The XDOC constructors are utilities to construct well-tagged XDOC strings via ACL2 function calls whose nesting structure mirrors the nesting of the XML. defxdoc+ extends defxdoc with additional conveniences.

    A new event, defunt, is a variant of defun that uses termination theorems from a large set of community-books — namely, all books included in books/doc/top.lisp, which is the book that creates the ACL2+Books manual — to generate termination proofs automatically. Those proofs use :termination-theorem lemma-instances that reference defun events in those included books. Several new supporting utilities are documented: fms!-lst, which writes a list to a character output channel; injections, which lists all maps from a domain to a range; strict-merge-sort-<, which sorts without duplicates; and subsetp-eq-linear, which is a linear-time subset test for sorted lists of symbols.

    Added a new macro defbyte for introducing fixtypes for unsigned and signed bytes of specified sizes, as well as fixtypes of lists of such bytes, along with theorems relating the fixtype recognizers to the built-in binary predicates unsigned-byte-p and signed-byte-p and to the library binary predicates unsigned-byte-listp and signed-byte-listp.

    Started a new library for Ethereum.

    Started a new library for Bitcoin.

    A new book, clause-processors/bindinglist.lisp, supports a meta-level structure for a list of bindings of variables to values, with functions that convert these to and from nests of lambdas and proofs that establish these functions' semantics with respect to an evaluator.

    Changes to Existing Libraries

    The behavior and code for the expander (see defthm?) have been improved in a few ways (some of them technical), as follows.

    • A bug has been fixed that was preventing hints from being passed to the forcing round (if any). An example may be found in the new book, misc/expander-tests.lisp.
    • The deprecated fmt directives ~p and ~q have been replaced by ~x and ~y, respectively.
    • Error messages have been improved for the function simplify-hyps when there is a contradiction.
    • The state globals tool2-result and tool2-error are no longer set. (They appear to have been unused.)
    • The functions tool2-fn, tool2-fn-lst, and simplify-hyps now have a new final argument, ctx. Also, the macro tool2 now has a :ctx keyword argument.

    Updated the ACL2+books manual to accommodate the replacement of David Russinoff's online rtl manual by his upcoming Springer book.

    Improved install-not-normalized to handle cases in which recursively-defined functions have non-recursive normalized definitions.

    The misc/assert.lisp book no longer includes misc/eval.lisp, since tests about the misc/assert.lisp utilities are now in a separate book misc/assert-tests.lisp.

    The misc/eval.lisp utilities ensure-error, ensure-soft-error, ensure-hard-error, thm?, and not-thm? have been renamed to must-fail-with-error, must-fail-with-soft-error, must-fail-with-hard-error, must-prove, and must-not-prove. The old names are still available as deprecated synonyms, which will be removed in one of the next releases.

    The old directory books/projects/masc/ has been replaced by the bew directorybooks/projects/rac/. The reason is that our RTL modeling language now uses the register class templates of Algorithm C instead of those of SystemC, so the name Modeling Algorithms in SystemC now makes even less sense than it did; the best we could come up with as a replacement is Restricted Algorithmic C.

    The utility make-flag has a new keyword argument, :last-body, to specify using the most recent definition rule for a function symbol instead of its original definition.

    Extended and simplified the defun-sk query utilities. The utilities now handle the recently introduced :constrain option. The utilities no longer build a record with all the information about the defun-sk function (whose fields can then be accessed); instead, now the utilities retrieve the various pieces of information directly.

    Extended the defchoose query utilities with a recognizer for symbols that name defchoose functions.

    Made several improvements to directed-untranslate, including: avoid assertion errors that could occur when using declare forms with let, let*, or mv-let expressions: enhance insertion of appropriate mv calls; extend dropping of unused let bindings; avoid an assertion error with mv-let expressions; and preserve basic uses of b*.

    Removed the keywords-of-keyword-value-list utility, because it is subsumed by the built-in evens utility.

    Extended the error-checking utilities with several error-checking functions.

    Extended the Kestrel world query utilities with functions to collect the names of all the known packages in the ACL2 world and to check if a function is primitive.

    Extended the term function recognizers with recognizers for true lists of (pseudo-)lambda-expressions and (pseudo-)term-functions.

    Extended the Kestrel term utilities with operations to substitute function symbols without performing simplification, to construct terms that are functions applications of certain forms, to collect all the lambda expressions in terms, and to collect all the package names in (symbols in) terms.

    The utility install-not-normalized-event now includes option :allp nil in the generated install-not-normalized event. The new utility, install-not-normalized-event-lst, can thus handle mutual-recursion nicely, e.g.: (install-not-normalized-event-lst (getpropc 'f1 'recursivep nil) nil nil (w state)). Also, added new utility install-not-normalized$ to submit the event generated by install-not-normalized-event.

    Extended the oset utilities with a fixtype for osets.

    Added some theorems about lists of natural numbers.

    Added a theorem about lists of strings.

    Merged the utilities in kestrel/utilities/characters.lisp into the string utilities. Extended the combined utilities with some theorems about the pre-existing functions and with new functions to check if (lists of) characters are all of specified kinds, to convert a list of unsigned 8-bit bytes to a corresponding list or string of hex digit characters. Refactored all the old and new utilities into separate files to reduce dependencies.

    Extended the Kestrel symbol utilities with a utility that lifts symbol-package-name to lists.

    Moved maybe-msgp under newly created message utilities. Extended these utilities with a recognizer of true lists of messages.

    Moved msg-downcase-first and msg-upcase-first from the string utilities to the message utilities.

    A new book, kestrel/utilities/proof-builder-macros.lisp, is a place to define proof-builder macros. This book currently defines a simple macro, when-not-proved (see ACL2-pc::when-not-proved), for skipping instructions when all goals have been proved. It also defines two (more complex) macros, prove-guard (see ACL2-pc::prove-guard) and prove-termination (see ACL2-pc::prove-termination), for (respectively) using previously-proved guard or termination theorems efficiently, as well as a more general macro, ACL2-pc::fancy-use, for using lemma instances (via :use) efficiently.

    Improved the copy-def utility (community book kestrel/utilities/copy-def.lisp) in several ways: added an :expand hint in the recursive case (as is sometimes necessary), improved it to work better with mutual-recursion, and improved it to work better with an :equiv argument.

    Fixed the utility, orelse, so that :quiet t pushes the output stack, as per existing documentation.

    Fixed a few books that broke due to the change in defevaluator (see note-8-1 for details).

    SOFT

    Added a :print option to control screen output.

    Improved user input validation.

    Added support for the new :constrain option of defun-sk. This option is now supported by SOFT's soft::defun-sk2 and soft::defun-inst macros.

    X86ISA

    Most of the model has been extended to 32-bit mode. The only instructions that remain to be extended to 32-bit mode are JMP far and the floating-point instructions. The 32-bit-only instructions PUSHA, POPA, INC with opcodes 40h-47h, DEC with opcodes 48h-4Fh, and PUSH CS/SS/DS/ES have been added to the model. Support for the kinds of paging in 32-bit mode is still missing, but this is only needed for the system view of the model, not the application view.

    Some of the XDOC documentation and some of the comments have been slightly expanded.

    The notion of programmer-level mode and system-level mode have been renamed to `application-level view' and `system-level view', to avoid overloading the word `mode', which in the x86 has a more specific meaning. Similarly, the notion of page structure marking mode has been renamed `marking view'. This involved renaming the programmer-level-mode and page-structure-marking-mode field of the state stobj to the shorter app-view and marking-view, and also renaming some functions and theorems acccordingly.

    The instruction decoder has been extended to detect VEX- and EVEX-encoded (AVX, AVX2, AVX512) instructions, in both 64- and 32-bit modes of operation. However, semantic functions of many of these instructions are still unimplemented.

    Annotated opcode maps are now used to generate opcode dispatch functions and instruction coverage information.

    APT

    Improved documentation.

    Improved options to control the screen output.

    Improved apt::tailrec transformation with an option to attempt to automatically infer the domain for some of the transformation's applicability conditions.

    Improved apt::restrict transformation to wrap the restriction test with mbt; added an applicability condition to ensure that the restriction test is boolean-valued.

    Imported more symbols from the "ACL2" package into the "APT" package.

    Bitops

    Added the bitops::sparseint library, which represents large integers as balanced binary trees, which can save memory by sharing structure among many such objects.

    SV

    Improved scalability of several SV utilities when large variables are present by recoding several functions that previously used Lisp bignums to use a bitops::sparseint based encoding.

    GL

    Added optional accumulated-persistence-style profiling of attempted rule applications, available with keyword argument :prof-enabledp t.

    Changed the representation of symbolic objects, removing the :g-number form which could represent complex rationals and replacing it with a simpler :g-integer form. (Complex rationals may still be supported using rewriting. Also, the :g-number shape specifier is still supported for backward compatibility, though it is restricted to only represent integers and translates directly into :g-integer symbolic objects.) Removed some native symbolic counterparts for functions that can be dealt with more cleanly via rewrite rules.

    GLMC

    Added option to bind some variables that can be used by the nextstate, property, constraint, and initstate terms. These bindings will be symbolically evaluated once, which can perhaps improve performance by not requiring them to be repeated.

    Xdoc

    Added a utility, xdoc::archive-xdoc, that saves the documentation generated by a series of local events, partially preprocessing it to avoid references to definitions that might only be locally available.

    The defpointer utility for xdoc now accepts names that have special characters such as <.

    STD

    The std/typed-lists/unsigned-byte-listp.lisp book now includes std/lists/take locally. As a result, projects/x86isa/tools/execution/exec-loaders/mach-o/mach-o-reader.lisp, std/io/take-bytes.lisp, unicode/read-utf8.lisp, and unicode/utf8-decode.lisp also include this book locally.

    Licensing Changes

    Build System Updates

    The build system now has support for ifdef and ifndef, which are make-event-supported macros defined in books/build/ifdef.lisp. In particular, this allows the community books' makefile to support building different versions of the manual depending what external tools are installed.

    Testing

    Miscellaneous

    A BibTeX file has been added to the community books, containing reference information for papers published at the ACL2 Workshops. This may be useful to you if you wish to cite such a paper in a LaTeX document. It is available at books/workshops/references/. That directory also contains an example LaTeX file demonstrating how the references may be cited, as well as a README with some more information.

    A Developer's Guide (see developers-guide) has been added, to assist those who may wish to become ACL2 Developers. It replaces the much smaller ``system-development'' topic.

    The download button now works in the web-based manual.

    When the include-raw utility with option :do-not-compile t was followed by :comp, it was possible for that subsequent compilation to overwrite intended raw Lisp definitions, for a host Lisp that does not compile on-the-fly (i.e., for a host Lisp other than CCL or SBCL). The way to prevent such overwrites is to extend state globals program-fns-with-raw-code and logic-fns-with-raw-code, which however was not always done. This is now done automatically, which fixes the overwrite problem.