• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • 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-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-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-8-7
              • 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
    • Release-notes

    Note-7-4

    ACL2 Version 7.4 (March, 2017) Notes

    NOTE! New users can ignore these release notes, because the documentation has been updated to reflect all changes that are recorded here.

    Below we roughly organize the changes to ACL2 since Version 7.3 into the following categories of changes: existing features, new features, heuristic and efficiency improvements, bug fixes, changes at the system level, Emacs support, and experimental versions. Each change is described in just one category, though of course many changes could be placed in more than one category.

    Note that only ACL2 system changes are listed below. Changes to the books can be found by browsing the ACL2+Books GitHub repository, in particular, the raw commit log. Also note that with each release, some built-in functions that were formerly in :program mode are now guard-verified :logic mode functions.

    Changes to Existing Features

    The utility read-file-into-string is now a macro, not a function. It no longer takes state as an argument (though its expansion reads the state), and it has new keyword arguments that allow one to read successive segments of the file. See read-file-into-string.

    The test has been slightly relaxed for determining whether any supporting events are missing for defabsstobj. Thanks to Sol Swords for sending an example to illustrate the issue, together with analysis of the problem.

    New Features

    Heuristic and Efficiency Improvements

    We now avoid the invariant-risk slowdown in the case of a :logic mode function with guard t. For relevant examples see program-wrapper.

    A technical change in the handling of type-set computations can, in rare cases, result in better built-in type-prescription rules for functions.

    Bug Fixes

    Fixed a soundness bug, introduced about 10 years ago, that could occur with :use or :by lemma-instances when a variable occurs free in a lambda of a functional substitution. For an explanation see a comment in (defxdoc note-7-4 ...) in community book books/system/doc/acl2-doc.lisp; also, a proof of nil (in Version 7.3) that exploits this bug can be found in a comment in the definition of function remove-capture-in-constraint-lst in the ACL2 source code. This may be the first time that a proved ``theorem'' in the community-books has been discovered to be a non-theorem (tr-to-array-of-array-to-tr in books/projects/legacy-defrstobj/typed-records.lisp). Thanks to Sol Swords for pointing out that this directory of books isn't used elsewhere; we temporarily excluded it from the regression by adding a cert_pl_exclude file, until Sol Swords repaired the proof a couple of days later. Also thanks to Ruben Gamboa for fixing proofs in the nonstd/ books that failed after the bug fix.

    Fixed a bug in proof-builder commands x and expand, which usually gave a misleading error message when attempting to expand a constrained function.

    Fixed bugs in the tracking and disabling of compound-recognizer rules. Thanks to Dmitry Nadezhin for pointing out this bug, indeed, sending an example and analyzing it to point to system function term-and-typ-to-lookup, which was indeed the one that had the bug.

    Avoided a rare error in hons-wash that has happened when there is a second garbage collection after hons-wash has commenced. Thanks to Keshav Kini for telling us about the problem and providing a patch, which we used almost verbatim.

    Changes at the System Level

    An ACL2 customization file is no longer loaded by default (when it exists) when invoking `make' from the top-level ACL2 directory. This change is not necessary for `make regression' because the build system for the books already takes care of it. However we need this change for `make DOC', at the least; thanks to Eric Smith for bringing our attention to a failure of `make DOC'.

    (Really a books change, but affects building the manual:) By default, it is now an error if when saving the ACL2+books or ACL2-only manuals (web-based or text-based), a syntax error (marked by ``xdoc error'') is encountered. See xdoc::save and xdoc::save-rendered: both now have an error argument with default nil so that by default, those new errors are not signaled; but in accordance with the change above, that new error argument is t for the standard ways of building the ACL2+books and ACL2-only manuals. Also, two arguments have been eliminated for xdoc::save-rendered.

    An invocation of `make update' to build an ACL2 executable initiates a build only when necessary (that is, when at least one source file or supporting file, like GNUmakefile, has changed). Thanks to Eric Smith for the suggestion. Removed the following `make' targets, which were suspect after this change (the first definitely no longer worked) and are unnecessary: saved_acl2, saved_acl2p, saved_acl2r, and saved_acl2pr. WARNING: make update should be used with care, since it does not rebuild the desired executable when it already exists and is more recent than the sources. For example, if you change Lisp implementations without changing the PREFIX variable — perhaps even only changing the version of your Lisp — then use make or make large, not make update.

    New `make' target clean-all removes all generated files in the main ACL2 directory and its doc/ subdirectory, while existing target clean, which has been renamed clean-lite, cleans all of those except files *saved_acl2* (and doc.lisp.backup), essentially as before. Thanks to Eric Smith for suggestions leading to this change, and to Keshav Kini for suggesting consideration of target distclean as an alias for clean-all, which it now is. The target clean is deprecated but, consistent with prior usage, acts as clean-lite for now.

    A successful build using `make' shows only four lines for 'fgrep -i compiler make.log' instead of five.

    (GCL only) Installed a patch from Camm Maguire (GCL maintainer) to fix a GCL compiler bug. Also turned off SGC to avoid an ``mprotect failure'' error (community book books/centaur/fty/tests/deftagsum-scale.lisp).

    Fixed a bug that was causing an assertion failure, instead of a clean error, when attempting to apply :monitor to undefined primitives, e.g., :monitor cons t. Thanks to Keshav Kini for reporting this bug and sending us an initial fix.

    Fixed a bug in the break-rewrite commands :go! and :go$, which was causing an error message to be printed.

    EMACS Support

    Made minor ACL2-doc improvements: fixed a bug in `u' command's error message when already at the top topic; fixed a bug that was displaying the "Parent list:" field in reverse order; and eliminated the warning when loading a large manual (combined manual is at about 70M bytes now; new threshold is 80M bytes).

    Improved ACL2-doc to work with other manuals; see ACL2-doc, specifically Section ``Selecting a Manual''. Note that the command for initially bringing up the ACL2 User's Manual, instead of the ACL2+Books manual, has changed from (defvar *acl2-doc-top-default* 'TOP) to (defvar *acl2-doc-manual-name* 'acl2-only).

    Added new ACL2-doc commands, `/' and `W', to go to an ACL2 definition. By default the search is through both the ACL2 sources and books. The search can be continued even outside acl2-doc by using a numeric prefix argument with control-t /, which is just the `/' command made available outside acl2-doc. These two commands differ only in the defaults presented in the minibuffer. The default for `/' is based on the text at the cursor. (This is much like the similar built-in Emacs command, meta-.; indeed, `/' is next to `.' on standard keyboards.) For `W', the default is based on the page's topic name (as shown by the `w' command). See ACL2-doc for details.

    Installed a patch for control-t control-e from Keshav Kini, so that when there are more than two windows and one has the ACL2 shell buffer showing, then that one receives the form. Consider for example windows A, B, and C, where the cursor is showing in A and the shell buffer is showing in C. Previously, the shell buffer could be placed in B to receive the form. Now, the form will go into C.

    The :evisc-tuple keyword for trace$ was being ignored when :native t was also supplied. Since the use of :native t sends the tracing command to raw Lisp, this wasn't really a bug, since no raw Lisp we know of supports the :evisc-tuple keyword. However, we have improved our custom modifications of the native trace for host Lisps CCL and Allegro CL so that :evisc-tuple is no longer ignored for these Lisps.

    Experimental Versions

    A new rewrite rule for ACL2(r), realp-implies-acl2-numberp, is analogous to the existing rule rationalp-implies-acl2-numberp. Thanks to Dmitry Nadezhin for suggesting the addition of this rule, which he observed is necessary for some ACL2(r) proofs.