• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • 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-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-6-5-books
              • 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)
            • Version
            • Acknowledgments
            • Pre-built-binary-distributions
            • Common-lisp
            • Git-quick-start
            • Copyright
            • Building-ACL2
            • ACL2-help
            • Bibliography
        • Debugging
        • Miscellaneous
        • Output-controls
        • Macros
        • Interfacing-tools
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Note-6-5
    • Release-notes-books

    Note-6-5-books

    Release notes for the ACL2 Community Books for ACL2 6.5 (August 2014).

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

    The acl2-books Wiki page on ReleaseVersionNumbers gives SVN revision numbers corresponding to releases. See also note-6-5 for the changes made to ACL2 itself. For additional details, you may also see the raw commit log.

    Organization, Build, and Licensing Changes

    Deleted Stubs

    When we move a book, we often add a stub book in its previous location to help you transition your include-book commands. The build::cert.pl build system prints warnings when a stub book is being included.

    Stub books have a lifespan of one release. The following books were stubs in ACL2 6.4, so we've deleted them.

      Previous Location                         New Location
    ------------------------------------------------------------------
      cutil/*.lisp                              std/util/*.lisp
      tools/defconsts                           std/util/defconsts
    
      parallel/with-waterfall-parallelism       misc/with-waterfall-parallelism
      parallel/without-waterfall-parallelism    misc/without-waterfall-parallelism
    
      serialize/unsound-read                    std/io/unsound-read
    
      centaur/bitops/bitsets                    std/bitsets/bitsets
      centaur/bitops/bitsets-opt                std/bitsets/bitsets-opt
      centaur/bitops/sbitsets                   std/bitsets/sbitsets
    ------------------------------------------------------------------

    Book Reorganization

    We've moved several books to new homes in an effort to improve the overall organization of the books. Users of these libraries will need to update their include-book commands, and in some cases, packages have also changed.

    The table below shows which libraries have moved and where they have moved to. Books with stubs may continue to work until the next release, but you'll need to update your include-books eventually.

     Stubs?     Previous Location        New Location
    ----------------------------------------------------------------------
      Yes       str/                     std/strings/
    
      No        memoize/                 centaur/memoize/
    
      No        centaur/doc.lisp         doc/top.lisp
    
    ----------------------------------------------------------------------

    The defpkg commands for xdoc, std/strings, std/osets, and std/bitsets have been merged into a single std/package.lsp file, with a single corresponding std/portcullis.lisp file, to simplify package management.

    Name Conflict Resolution

    Preliminary work has been carried out toward unifying coi/std versions of osets. In particular:

    • The std/osets package has been changed from SETS to SET.
    • The coi/osets library now uses the std/osets package files.
    • Some coi/osets books now merely include the corresponding files from std/osets.

    The std/lists function repeat has been renamed to replicate, and had its arguments reordered, to resolve a name clash with the coi library. See Issue 136 for additional discussion about this change.

    The data-structures library STRUCTURES package has been renamed to DEFSTRUCTURE to resolve a name conflicts with the COI books.

    The bitops library's sign-extend function has been renamed to fast-logext to resolve a name conflict with the rtl library.

    The new tools/book-conflicts tool can be used to detect name conflicts between books. See its README file for more information.

    Build System Changes

    Support for ACL2(r) is now directly included in the top-level Makefile. ACL2(r) users no longer need to use a separate build process and can now make use of many additional books. Books that are incompatible with ACL2(r) should be annotated with non-acl2r cert_params, and books that require ACL2(r) should have a uses-acl2r cert_param.

    The top-level Makefile has been made more robust in various ways.

    • Certification of books under models/y86 has a cleaner implementation. These books are no longer certified by the make target all since they are resource intensive. For ACL2(h) and host Lisps that can handle this task, they are certified by using the target everything. Also, the value of the -j option of the make command is no longer ignored.
    • It no longer tries to build certain long-running books when USE_QUICKLISP is set and Hons is not present.
    • It no longer tries to build the gl solutions book, as this can overwhelm modest machines.
    • A new ccl-only cert_param can be used for books that require CCL. Used this to avoid trying to certify certain books that require, e.g., tshell.
    • The esim-tutorial books have been removed from doc/top.lisp to avoid requiring Glucose to build the ACL2+Books manual.
    • Certain problematic books have been annotated with non-parallel-book, to avoid incompatibilities with waterfall-parallelism problems on ACL2(p).

    The build::cert.pl build system has been enhanced in many ways. Of particular note, it now deals more automatically with portcullis files, which may help to improve the reliability of including uncertified files. Other improvements include:

    • Better support for generated books
    • Support for ACL2 images that start up in other packages
    • Enhanced --help message with more information
    • Added support for add-include-book-dir!
    • More informative error messages in certain cases
    • Miscellaneous, minor bug fixes, e.g., support for $ in book names.

    The build speed has been improved in various ways.

    • Many books have reordered include-book to take advantage of new optimizations in ACL2.
    • The performance of the tau/bounders/elementary-bounders book has been significantly improved, reducing the critical path time for the make all target.
    • A computationally expensive proof has been split out of the defung-stress book, also substantially improving the critical path for make all.
    • Reduced dependencies in std/util, std/lists, std/alists, and xdoc to speed up certification.

    Added a TAGS target to the Makefile.

    Added scripts to support using a Jenkins continuous integration server to continually rebuild ACL2 and the books on various platforms.

    Licensing Changes

    Books contributed by Computational Logic, Inc. are now licensed under a (more permissive) 3-clause BSD style license instead of the GNU General Public License.

    Books contributed by Centaur Technology, Inc. are now licensed under a (more permissive) MIT/X11 style license instead of the GNU General Public License.

    Books contributed by Jared Davis / Kookamara are now licensed under an MIT/X11 style license instead of the GNU General Public License.

    Many books that lacked explicit licensing information have been updated to include appropriate copyright headers.

    New Libraries, Demos, and Documentation

    New Libraries and Tools

    The workshops/2014 directory contains contributions from the ACL2 Workshop for 2014.

    The new remove-hyps tool may be useful for identifying unnecessary hypotheses in theorems.

    fty is a new library offers functionality similar to std or defdata libraries. This library enforces a certain fixing-function discipline and may help to avoid many type-like hypotheses on theorems.

    The new book tools/rewrite-with-equality.lisp is a certified clause processor that causes certain equality hypotheses to cause massive substitution of the "good" term for the "bad" term in clauses that are stable under simplification.

    The new with-supporters macro can be used to automatically produce redundant versions of events that are needed from local include books.

    The new flag::def-doublevar-induction macro can be used to create certain kinds of induction schemes, and may be especially useful for proving congruence rules about mutually recursive functions.

    The new nrev book is something like nreverse. It can be used to implement in-order, tail-recursive list processing functions. With a trust tag, these functions can avoid the memory overhead of a final reverse.

    The new fast-alist-pop function provides something akin to remhash for fast alists, with various restrictions and limitations.

    The new system/hons-check books provide some basic tests for the hons-and-memoization code.

    The new oracle/ directory contains tools and examples from Oracle, Inc.

    New Demos

    A new demo, demos/tutorial-problems/equivalence-of-two-functions, shows some ways to prove the equivalence of two functions that recur in different ways.

    A new demo, demos/knuth-bendix-problem-1.lisp, has been added.

    COI's defung has a new fractran example: see coi/defung/fractran.lisp.

    A new demo, demos/gl-and-use-example.lisp, shows a way to use GL to establish the crux of an unbounded theorem.

    New Documentation

    The cowles, arithmetic-1, and rtl libraries now have some XDOC documentation.

    There are now some preliminary recommendations for best-practices for developing ACL2 books.

    The documentation for portions of the ihs library and plev had been inadvertently excluded from the manual, but are now included.

    A new topic describes some noteworthy clause-processor-tools.

    The topic hierarchy has received some attention, e.g., all topics that were formerly listed under the grab-bag switches-parameters-and-modes have been relocated to more suitable homes.

    Converted the documentation for esim, b*, and other topics into xdoc format.

    Many topics have been improved by eliminating typos, making minor clarifications, adding appropriate cross-references, fixing broken links, and ensuring that :parents are correct.

    Changes to Major Libraries

    XDOC Changes

    The new xdoc::order-subtopics command can be used to control the order that subtopics are presented in.

    The "classic" XDOC viewer is no longer supported.

    The XDOC viewers have been improved in many ways.

    • Fancy manuals now produce a clear error message for users of IE8 and IE9, and will work properly for users of IE11. (IE10 still works, as before).
    • Fancy manuals now load much more quickly (faster jump-to box initialization).
    • The :doc command and the ACL2-doc tool now show URLs for external links.
    • XDOC now includes tools that can create a sitemap and other "static" HTML files, which may be useful for search engine optimization.
    • Added .htaccess files to fancy manuals, which can enable server-side compression for significant file size/performance improvements.

    Various bugs have also been fixed in the core XDOC system.

    • The @(def ...) directive sometimes printed the wrong event; this has been fixed. It also now handles mutually recursive functions more nicely.
    • The xdoc::save command should no longer cause an error when trying to write manuals to paths like ~/my-manual.
    • Fixed bugs in XDOC's handling of @('...') and @({...}) directives, and otherwise improved error messages with more context.
    • Fixed a problem with xdoc-extend when the topic to extend lacked a :long string.

    Other minor changes:

    • XDOC now uses str::pretty instead of fmt-to-string and the preprocessor uses state less than before.
    • Factored xdoc tests out of the main directory and excluded them from the basic build, to improve build times.

    Std Library Changes

    std/basic

    A new book of basic induction-schemes has been added.

    Certain equivalence relations like chareqv and streqv have been factored out of the std/strings library and moved into std/basic instead, mainly to improve integration with the new fty library.

    lnfix and lifix are now enabled, inlined functions instead of macros. This may help to simplify guard obligations in functions that call lnfix and lifix.

    std/lists

    An std/lists/update-nth book has been added.

    A remove-duplicates book has been added with lemmas about remove-duplicates-equal and hons-remove-duplicates.

    Added a missing rule about ACL2-count to std/lists/acl2-count.

    uniquep no longer uses equality-variants. Theorems that target uniquep should be rewritten in terms of no-duplicatesp.

    Various books have been reorganized to reduce dependencies.

    std/alists

    The general purpose alist functions append-alist-vals and append-alist-keys have been moved out of vl and into std/alists.

    There are new books for alist-fix and hons-remove-assoc.

    The new fast-alist-clean book includes lemmas about fast-alist-fork and fast-alist-clean.

    Various books have been reorganized to reduce dependencies.

    std/osets

    Most osets functions are now disabled by default. They can be re-enabled using the ruleset set::definitions.

    Some useful but sometimes expensive rules, including for instance the set::pick-a-point-subset-strategy and set::double-containment, and also including other rules such as the transitivity of set::subset, are now disabled by default. They can be re-enabled using the ruleset set::expensive-rules.

    std/util

    Some new macros have been added.

    • defines can introduce mutually recursive functions, using a define-like syntax, and features automatic integration with make-flag.
    • defval is like defconst but has xdoc integration.
    • std::defsum is a preliminary macro for tagged union types.
    • std::defaggrify-defrec adds std::defaggregate-style emulation for structures introduced using defrec.

    The define macro has been improved in many ways.

    • It has been modified to make it easier to extend, largely in support of defines.
    • It now uses with-output to avoid printing so much output.
    • Theorems introduced by std::returns-specifiers now often have better names, and the name can also be controlled using :name.
    • The new more-returns macro allows for additional std::returns-specifiers style theorems after a define.
    • A performance bug with the std::var-is-stobj-p function, notably used by define, has been fixed.
    • Experimental post-define hooks can allow for custom actions to be carried out after submitting a define; such a hook allows for a tight integration between define and the new fty library.
    • New options allow you to avoid introducing an encapsulate and to name and save the termination proof.

    Other macros have also been improved in various ways.

    • std::defredundant tool has been expanded to better handle mutual-recursion and macro aliases.
    • defmvtypes now has smarter handling of force.
    • std::defenum now automatically produces a fixing function and forward-chaining rule to give the possible values of the objects.
    • defrule now has a :local option.
    • std::deflist is now smart enough to tell whether functions are defined; its former :already-definedp option is now useless and, hence, deprecated.
    • std::defprojection now uses nrev instead of optimizing things with nreverse directly, reducing the use of trust tags.
    • std::defprojection now accepts define-like syntax for std::extended-formals and std::returns-specifiers.
    • A bug with std::defprojection's subsetp theorem has been fixed.

    Many macros now have a :verbosep option that can be used to disable output suppression.

    The std/util testing code has been factored out into a new std/util/tests directory.

    std/typed-lists

    There are now books for many built-in ACL2 list recognizers that were previously not covered, e.g., boolean-listp, integer-listp, etc.

    std/strings

    Many logical definitions throughout the std/strings library have been cleaned up. Also, many definitions have been changed to use define for better documentation.

    The new book std/strings/defs-program contains program mode definitions of most functions in the std/strings library.

    The new str::pretty routine can convert arbitrary ACL2 objects into pretty-printed strings. Is a fast, state-free, logic mode reimplementation of much of ACL2's pretty printer.

    There are now a much richer collection of numeric functions, especially for non-decimal bases; see str::numbers.

    The string library now has a very efficient, bitset-like way to represent sets of characters, and some functions for working with these character sets. See str::charset-p.

    std/io

    The read-string function will now produce better error messages and can (optionally, via raw Lisp) avoid checking bad-lisp-objectp.

    Defdata Changes

    Defdata's output has been tweaked.

    The defdata library now supports range types.

    Counterexample generation has been updated to use tau instead of the former graph-tc book, and has many other updates.

    COI Changes

    COI's def::signature macro now has support for generalized congruences.

    Quicklisp and oslib

    The experimental quicklisp build has been updated in many ways. Quicklisp files are now installed under the centaur/quicklisp/inst directory instead of the user's home directory.

    The Quicklisp install can be carried out using a proxy.

    The quicklisp books now include support for the bordeaux-threads and hunchentoot libraries.

    oslib::getpid has been extended to work on Lisps other than CCL.

    Added minimal tests to oslib functions such as oslib::file-kind and oslib::date.

    OSLIB has new oslib::lisp-type and oslib::lisp-version functions.

    A new book, centaur/misc/sharedlibs, may be useful for relocating save-exec images that require shared libraries for CCL/Linux systems.

    We have remove dependencies on iolib since its build does not seem to be reliable.

    Changes to Centaur Libraries

    gl Changes

    The rtl9 library has been updated to better support GL.

    GL has better if handling, and as a result may be better able to cope with unsatisfiable path conditions (i.e., unreachable code regions) when using SAT-based gl::modes.

    New gl::preferred-definitions may slightly improve performance of bit-vector operations like logcar, logcdr, loghead, and logtail.

    Some symbolic arithmetic functions have been changed so as to possibly improve AIG performance.

    GL's rewrites to 4v constants have been improved.

    The new macro gl::gl-thm is like def-gl-thm, but doesn't store the theorem. That is, it's like thm is to defthm. Similarly, gl::gl-param-thm is to def-gl-param-thm, and def-gl-rule is similar to defrule.

    The definitions of def-gl-thm, etc., have been simplified, gl-hint can now be told which GL clause processor to use.

    Minor bugs have been fixed.

    • GL's gl::def-gl-rewrite macro has been reworked to avoid the possibility of dropping rules when books are included in different orders.
    • The GL interpreter now uses the clk from the given gl::glcp-config.

    The documentation for GL has been generally improved.

    vl Verilog Toolkit

    VL has been significantly refactored. All of the internal vl::syntax is now based on fty, which is a major change. The representation of vl::statements is especially different.

    VL is beginning to gain support for some limited SystemVerilog constructs. This is a major change that affects all areas, e.g., lexing, parsing, syntax, and transformations.

    VL now support certain kinds of combinational always blocks. It also supports richer edge-triggered always blocks, including, e.g., registers with asynchronous set/reset signals.

    Many bugs have been fixed, some severe. For instance, VL was incorrectly translating BUF, NOT, and XNOR gates with "extra" terminals. The new VL systest directory includes various end-to-end tests of VL's translations of certain modules.

    Warnings have been improved. For instance, VL now warns about 0-bit replications since some Verilog tools do not implement them correctly.

    Many ttags have been removed from VL, using nrev.

    VL's always/delay transforms can now optionally produce less bitblasted modules.

    The vl::kit includes new commands such as vl gather and many commands have additional options. It also now prints backtraces on errors for improved debugging.

    Numerous other minor bug fixes, extensions, performance improvements, etc.

    Other Centaur Libraries

    satlink now uses glucose-cert instead of lingeling as the default SAT solver.

    The default sexpr-rewriting rules have been expanded and improved. These changes may improve decomposition proofs and also the performance of GL-based STV proofs.

    tshell should now handle interrupts more reliably.

    The executable counterparts of symbolic-test-vectors are now disabled by default.

    There is now better support for decomposition proofs of symbolic-test-vectors, see files such as centaur/esim/stv/stv-decomp-proofs* and centaur/regression/composed-stv.lisp.

    The new stv-run-for-all-dontcares function is a less conservative alternative to stv-run.

    Some lemmas have been localized in esim.

    aignet now has a basic aignet-print function for debugging.

    The bridge::json-encoding routines now use define for better documentation.

    Some aignet functions and numlist are now tail recursive.

    The bitops ihsext-basics book has additional rules about lognot and logmask.

    Improved and documented the logbitp-reasoning hint.

    Added bit->bool to the bitops library.

    The new centaur/bitops/contrib directory contains additional lemmas.

    Other Changes

    (File interface/emacs/inf-acl2.el) One now gets a clear error, suggesting a solution, when Emacs command meta-x run-acl2 cannot find an ACL2 executable. Thanks to Scott Staley for helpful correspondence leading to this fix.

    The make-flag tool now uses slightly faster, more robust hints.

    The witness-cp clause processor has been made more flexible.

    The clause-processors/unify-subst and clause-processors/generalize books have been reworked to avoid nearly duplicate definitions.

    The def-universal-equiv macro now takes an already-definedp option.

    The demos/patterened-congruences.lisp book has been improved.

    The book centaur/misc/intern-debugging book has been modified and should now be generally unnecessary, thanks to CCL improvements which have resolved the problems it was intended to warn about.

    Something happened to profiling.lisp in r2423.

    disassemble$ now supports macro aliases.

    Several ordinary files that were incorrectly marked as executable are now properly non-executable.

    The tau elementary-bounders book has been extended with additional lemmas about expt for powers of 2.

    Changes to ACL2(r) Books

    Many explicit function definitions have been replaced with constraints, in order to make theorems about those functions more useful for functional instantiation later. For example, instead of insisting that (f+g)(x) is really equal to f(x) + g(x), this is now only required for valid values of x.

    The theory of integration is now updated to conform to the current version of continuity and differentiability (which allows functions that are only continuous or differentiable over a particular domain).

    The concepts of continuity, differentiability, and integration now have both non-standard and classical definitions. These are shown to be equivalent for classical functions without parameters. Even when parameters are present, the classical definitions can be used to take advantage of important theorems, such as the intermediate-value theorem, mean-value theorem, fundamental theorem of calculus, etc.