ACL2 Version 2.8 (March, 2004) Notes
The Version_2.8 notes are divided into the indicated subtopics. Here we
give only a brief summary of just a few of the major new features and changes
that seem most likely to impact existing proofs. Not included in this brief
summary, but included in the subtopics, are descriptions of many improvements
(including bug fixes and new functionality) that should not get in the way of
existing proof efforts. In the description below we also omit discussion of
changes that will become clear by way of error messages if they affect
In particular, please see note-2-8-new-functionality for discussion
of a number of new features that you may find useful.
Acknowledgements and elaboration, as well as other changes, can be found in
the subtopics listed below.
- WARNING: You may find that control-d (in emacs, control-c
control-d) can throw you completely out of Lisp where it had not formerly
- ACL2 now starts up inside the ACL2 loop — that is, (lp) is executed automatically — when built on CLISP or Allegro CL.
This was already the case for GCL and CMUCL, and it still is not true for
- See note-2-8-ordinals for a discussion of a significant change in
ordinal representation, and in particular, for how to preserve existing proofs
that depend on the previous ordinal representation.
- Macros mbe (``must be equal''), mbt (``must be true''),
and defexec have been introduced, which allow the user to attach
alternate executable definitions to functions.
- The user can now control multiple matching for free variables in
hypotheses for :forward-chaining rules, as has already been
supported for :rewrite and :linear rules.
- It is no longer necessary to specify (set-match-free-error nil) in
order to avoid errors when a rule with free variables in its hypotheses is
missing the :match-free field.
- The form (break-on-error) causes, at least for most Lisps, entry
into the Lisp debugger whenever ACL2 causes an error.
- A new table has been provided so that advanced users can override
the built-in untranslate functionality. See user-defined-functions-table.
- The pstack (`process [prover] stack'') mechanism, formerly
denoted checkpoints, has been improved. One of these improvements is to
show actual parameters with (pstack t) rather than formals.
- The defstobj event is now allowed to take an :inline
argument, which can speed up execution.
- Macro cw-gstack no longer takes arguments for the gstack or
state. To print terms in full rather than abbreviated: (cw-gstack
- The include-book event now has an additional (optional) keyword,
:dir. In particular, (include-book "foo/bar" :dir :system) will
include the indicated book after prepending the path of the built-in
books/ directory. You will probably not find :dir :system to be
useful if you move the executable image or distributed books; see include-book, in particular its ``soundness warning''.
- The printing of results in raw mode (see set-raw-mode) may now be
partially controlled by the user: see add-raw-arity. [Note added 2021:
this utility has been removed and is no longer necessary.]
- For those using Unix/Linux `make': A cert.acl2 file can contain
forms to be evaluated before an appropriate certify-book command is
invoked automatically (not included in cert.acl2).
Some of the changes in the proof engine (see note-2-8-proofs)
- ACL2 now prevents certain rewriting loops; see rewrite-stack-limit.
- Small changes have been made to heuristics for controlling rewriting
during proofs by induction and in handling certain ``weak'' compound-recognizer rules.
- The handling of free variables in a hypothesis of a rewrite rule
(see free-variables) has been improved in the case that the hypothesis
is of the form (equiv x y), where equiv is a known equivalence
relation (see equivalence).
- We have modified how the ACL2 simplifier handles the application of a
defined function symbol to constant arguments, by avoiding the introduction of
hide when evaluation fails if the term can be rewritten.
- The generation of "Goal" for recursive (and mutually-recursive)
definitions now uses the subsumption/replacement limitation (default 500).
- Default hints now apply to hints given in definitions, not just theorems.
- Linear arithmetic now uses the conclusions of forward-chaining
rules, and type-set now uses a small amount of linear reasoning when
Some of the changes in rules, definitions, and constants (see note-2-8-rules)
Guard-related changes are described in see note-2-8-bug-fixes
- Added new proof-builder commands wrap1, wrap, and
wrap-induct, to combine multiple conjuncts or goals.
- The type-alist command now takes optional arguments that control
whether or not the governors and/or conclusion are used in computing the
Some of the system-level changes (see note-2-8-system)
- ACL2 now runs on OpenMCL and on MCL 5.0.
Some of the other changes (see note-2-8-other)
- Emacs file emacs/emacs-acl2.el has been updated (see note-2-8-other for details).
- When :pl is given a term other than a symbol, it will print all
rewrite rules that match that term.
- A new function, pkg-witness, returns a symbol in the given
- The list constant *acl2-exports* has been extended.
- A new release of the rtl library has been included: books/rtl/rel4/.
See the README file in that directory.
Again, please proceed to the subtopics for more thorough release
- ACL2 Version 2.8 Notes on Bug Fixes
- ACL2 Version 2.8 Notes on New Functionality
- ACL2 Version 2.8 Notes on Changes in Proof Engine
- ACL2 Version 2.8 Notes on Miscellaneous Changes
- ACL2 Version 2.8 Notes on Changes in Rules, Definitions, and Constants
- ACL2 Version 2.8 Notes on proof-builder Changes
- ACL2 Version 2.8 Notes on System-level Changes
- ACL2 Version 2.8 Notes on Changes to the Ordinals
- ACL2 Version 2.8 Notes on Guard-related Changes