Major Section: RELEASE-NOTES
Also see note-2-9-1, see note-2-9-2, and see note-2-9-3 for other changes since the last non-incremental release (Version_2.9).
A soundness bug has been fixed that was due to inadequate checking of
:
meta
rules in the presence of local
events.
Specifically, a local
defevaluator
event is insufficient for
supporting a :meta
rule (an example is shown in source function
chk-acceptable-rules
). Thanks to Dave Greve and Jared Davis for bringing
this bug to our attention, by sending a proof of nil
that exploited this
bug. The fix is to check legality of :meta
rules even when skipping
proofs during an include-book
event or the second pass of an
encapsulate
event.
Fixed problem with parallel make for workshop books by adding a dependency
line to books/workshops/2003/Makefile
.
Default hints (see set-default-hints) no longer prevent the use of
:INSTRUCTIONS
(see proof-checker). Thanks to Jared Davis for pointing
out this problem.
New functions remove-eq
and remove-equal
have been defined, in
analogy to remove
. These two symbols have also been added to
*acl2-exports*
. Thanks to David Rager for pointing out that
remove-equal
was missing. Moreover, the definitions of delete1-eq
and delete1-equal
have been eliminated. Function remove1-eq
, now in
:
logic
mode in source file axioms.lisp
, serves in place of
delete1-eq
, with corresponding new function definitions for remove1
and remove1-equal
.
The symbol assert$
has been added to *acl2-exports*
. Thanks to
Jared Davis for the suggestion.
Added SBCL support. Thanks to Juho Snellman for significant assistance with
the port. Thanks to Bob Boyer for suggesting the use of feature
:acl2-mv-as-values
with SBCL, which can allow thread-level parallelism
in the underlying lisp; we have done so when feature :sb-thread
is
present.
We have continued to incorporate suggestions for wording improvements in documentation and error messages. Thanks to all who send these suggestions, especially to Eric Smith, who has suggested the vast majority of them.
Made a small improvement to errors and warnings caused on behalf of set-enforce-redundancy, to indicate when an event of the same name already exists.
Fixed a bug in books/misc/rtl-untranslate.lisp
that was causing a guard
violation when adding a new entry for an existing key.
Fixed a bug in translation to internal form that caused defun-sk
and
defchoose
to have difficulties handling ignored variables in let
forms. Thanks to Sandip Ray to bringing this issue to our attention with a
helpful example.
The form (push :acl2-mv-as-values *features*)
has been added in source
file acl2-init.lisp
for SBCL and OpenMCL only, in order to support
parallel execution (looking to the future...).
Default-hints (see set-default-hints) were being ignored inside the proof-checker, but no longer. Thanks to John Erickson for bringing this problem to our attention and providing a simple example of it.
Modified the TAGS
"make"
target (specifically, function
make-tags
) so that it is gracefully skipped if the etags
program is
not found. Thanks to David Rager for pointing out this issue.
Sandip Ray has re-worked the supporting materials for his ACL2 Workshop 2003
talk (originally with John Matthews and Mark Tuttle), to run in a few
minutes. The result is in workshops/2003/ray-matthews-tuttle/support/
and is included in the full ACL2 regression suite. Thanks, Sandip.
Debian releases of ACL2 had created superfluous .cert.final
files when
certifying books. This has been fixed; thanks to Jared Davis for noticing
this problem.
Jared Davis has pointed out that ``If you add a :backchain-limit-lst 0
to
a rewrite rule whose hypotheses are all forced, then ACL2 `really assumes them'
without trying to relieve them right there through rewriting.'' Relevant
documentation has been added for :backchain-limit-lst
; see rule-classes.
A new version of the rtl library has been included in books/rtl/rel5/
.
Thanks to David Russinoff for contributing hand proofs for the new lemmas,
and to Matt Kaufmann for carrying out their mechanization.
Fixed a bug in save-exec
that was failing to set the initial cbd
according to the current directory when starting up ACL2. Thanks to Camm
Maguire for bringing our attention to this problem.
Variables introduced during let*
abstraction are now in the current
package. Thanks to Jared Davis for suggesting such a change.
See set-let*-abstractionp.
It is now allowed for two definitions to be considered the same from the
standpoint of redundancy (see redundant-events) when one specifies a
:
guard
of t
and the other has no explicit :guard
(hence,
the guard is implicitly t
). Thanks to Jared Davis for bringing this
issue to our attention.
(For users of emacs/emacs-acl2.el
) There have been a few enhancements to
distributed file emacs/emacs-acl2. el
(skip this paragraph if you don't
use that file):
oControl-t q
continues to compare windows ignoring whitespace, but now, a prefix argument can be given to control case is also ignored (ignore case if positive, else use case).o
Control-t Control-l
has been defined to be similar toControl-t l
, except that proofs are skipped and output is suppressed.o
Control-t u
has been defined to print, to the shell buffer, a:
ubt!
form for the command containing the cursor.o Control-t Control-f buries the current buffer.
o
Meta-x new-shell
now puts the new shell buffer inshell-mode
(thanks to David Rager for noticing this issue).
Linear arithmetic has been modified so that we do not generate the equality
(equal term1 term2)
from the pair of inequalities (<= term1 term2)
and (<= term2 term1)
in the case that we would have to force
both
term1
and term2
to be acl2-numberp
s. Thanks to Dave Greve for
providing a motivating example and to Robert Krug for providing a fix.
The event delete-include-book-dir
had not been allowed inside
books and encapsulate
forms. This was an oversight, and has been
fixed.
Sandip Ray has contributed a new library of books to support proofs of
partial and total correctness of sequential programs based on assertional
reasoning, in books/symbolic/
. This work is based on the paper
J. Matthews, J S. Moore, S. Ray, and D. Vroon, ``A Symbolic Simulation
Approach to Assertional Program Verification,'' currently in draft form.
In particular, the books include the macro defsimulate
, which
automatically transforms inductive assertion proofs of correctness of
sequential programs to the corresponding interpreter proofs. See the
README
in that directory.
We have changed the implementation of :dir :system
for ld
and
include-book
. This change will not affect you if you build an ACL2
executable in the normal manner, leaving in place the books/
subdirectory
of the source directory; nor will it affect you if you download a GCL Debian
binary distribution. The change is that if environment variable
ACL2_SYSTEM_BOOKS
is set, then it specifies the distributed books
directory, i.e., the directory determined by :dir :system
. You may find
it convenient to set this variable in your ACL2 script file (typically,
saved_acl2
). If it is set when you build ACL2, the generated script for
running ACL2 will begin by setting ACL2_SYSTEM_BOOKS
to that value.
Thanks to various people who have discussed this issue, in particular Jared
Davis who sent an email suggesting consideration of the use of an environment
variable, and to Eric Smith who helped construct this paragraph. (Note that
this use of ACL2_SYSTEM_BOOKS
replaces the use of ACL2_SRC_BOOKS
described previously; see note-2-9-1.)
ACL2 now automatically deletes files TMP*.lisp
created during the build
process and created by :
comp
. If you want these to be saved,
evaluate (assign keep-tmp-files t)
in the ACL2 loop or in raw Lisp. The
clean
target for the standard make
process for certifying books
(see book-makefiles) will however delete all files TMP*.*
.
The TMP
files discussed just above now generally include the current process
ID in their names, e.g., TMP@16388@1.lisp
instead of TMP1.lisp
.
Thanks to Bob Boyer for suggesting this measure, which will reduce the
possibility that two different processes will attempt to access the same
temporary file.
Now, :
pe
will print the information formerly printed by :pe!
,
slightly enhanced to work for logical names that are strings, not just
symbols. Thanks to Warren Hunt for leading us to this change by suggesting
that :pe nth
print the definition of nth
.
We eliminated spurious warnings that could occur in raw mode in OpenMCL or CMUCL when stobjs are present. We thank Juho Snellman for pointing out the relevant bug and appropriate fix.
Mfc-rw
now takes a third argument that can specify an arbitrary known
equivalence relation; see extended-metafunctions. Thanks to Dave Greve for
discussions suggesting this improvement.
A small modification to a symbol-reading function allows documentation string processing on Windows systems that use CR/LF for line breaks. Thanks to William Cook for bringing this issue to our attention.
The documentation has been improved on how to control the printing of ACL2 terms. See user-defined-functions-table. Thanks to Sandip Ray for asking a question that led to the example presented there.
We fixed an inefficiency that could cause an ld
command to seem to hang
at its conclusion. Thanks to Sandip Ray for pointing out this problem.
We checked that ACL2 runs under Lispworks 4.4.5 (last checked before 4.3), and have inhibited redefinition warnings.
Two changes have been made on behalf of congruence-based reasoning. Thanks to Dave Greve for examples and discussions that have led to these changes, and to Eric Smith and Vernon Austel, who also sent relevant examples.
o When a call of the new unary functiondouble-rewrite
is encountered by the rewriter, its argument will be rewritten twice. This solves certain problems encountered in congruence-based rewriting. Warnings for:
rewrite
and:
linear
rules will suggest when calls ofdouble-rewrite
on variables in hypotheses are likely to be a good idea. See double-rewrite.o Hypotheses of the form
(equiv var (double-rewrite term))
, whereequiv
is a known equivalence relation andvar
is a free variable (see free-variables), will bindvar
to the result of rewritingterm
twice. Previously, hypotheses of the form(equal var term)
would bind a free variablevar
, but the call had to be ofequal
rather than of an arbitrary known equivalence relation.
The following improvements were made in support of ACL2 on top of OpenMCL.
o New versions of OpenMCL that do not have
:mcl
in Lisp variable*features*
will now work with ACL2. Thanks to David Rager for bringing this issue to our attention.o Added support for OpenMCL 1.0 for 64-bit DarwinPPC/MacOS X, thanks to Robert Krug.
o Fixed tracing in OpenMCL so that the level is reset to 1 even if there has been an abort.
o Added support in OpenMCL for
WET
(see wet).o Incorporated suggestions from Gary Byers for printing the ``Welcome to OpenMCL'' prompt before initially entering the ACL2 loop and, and for setting useful environment variable
CCL_DEFAULT_DIRECTORY
in the ACL2 script.
Fixed a long-standing bug in forward-chaining, where variable-free hypotheses were being evaluated even if the executable-counterparts of their function symbols had been disabled. Thanks to Eric Smith for bringing this bug to our attention by sending a simple example that exhibited the problem.
Improved reporting by the break-rewrite utility upon failure to relieve hypotheses in the presence of free variables, so that information is shown about the attempting bindings. See free-variables-examples-rewrite. Thanks to Eric Smith for requesting this improvement. Also improved the break-rewrite loop so that terms, in particular from unifying substitutions, are printed without hiding subterms by default. The user can control such hiding (``evisceration''); see set-brr-term-evisc-tuple.
A new directory books/defexec/
contains books that illustrate the use of
mbe
and defexec
. Thanks to the contributors of those books (see
the README
file in that directory).
The directories books/rtl/rel2
and books/rtl/rel3
are no longer
distributed. They are still available by email request. (Subdirectory
rel1/
supports some of the optional workshop/
books, so it is still
distributed.)
Added book books/misc/sticky-disable.lisp
to manage theories that
might otherwise be modified adversely by include-book
. Thanks to Ray
Richards for a query that led to our development of this tool.
The commands (exit)
and (quit)
may now be used to quit ACL2 and Lisp
completely; in fact they macroexpand to calls of the same function as does
good-bye
(which is now a macro). Thanks to Jared Davis for suggesting
the new aliases. (OpenMCL-only comment:) These all work for OpenMCL even
inside the ACL2 loop.
The macro wet
now hides structure by default on large expressions.
However, a new optional argument controls this behavior, for example avoiding
such hiding if that argument is nil
. See wet. Thanks to Hanbing Liu for
pointing out that wet
was not helpful for very large terms.
We have fixed a bug in the forward-chaining mechanism that, very rarely, could cause a proof to be aborted needlessly with an obscure error message. Thanks to Jared Davis for sending us an example that evoked this bug.
Fixed a bug that was causing proof output on behalf of
:functional-instance
to be confusing, because it failed to mention that
the number of constraints may be different from the number of subgoals
generated. Thanks to Robert Krug for pointing out this confusing output.
The fix also causes the reporting of rules used when silently simplifying the
constraints to create the subgoals.
Fixed a bug in handling of leading ./
in pathnames, as in:
(include-book "./foo")
. Thanks to Jared Davis for bringing this bug to
our attention.
Made a small fix for handling of free variables of :
forward-chaining
rules, which had erroneously acted as though a hypothesis
(equal var term)
can bind the variable var
.
A small change has been made for :
type-prescription
rules for
hypotheses of the form (equal var term)
, where c[var] is a free variable
and no variable of term
is free (see free-variables). As with
:
rewrite
and :
linear
rules, we now bind var
to
term
even if (equal u term)
happens to be known in the current
context for some term u
. Also as with :rewrite
and :linear
rules, similar handling is given to hypotheses
(equiv var (double-rewrite term))
where equiv
is a known
equivalence relation.
We changed the handling of free variables in hypotheses of :
rewrite
rules being handled by the proof-checker's rewrite
(r
) command,
in complete analogy to the change described just above for
:
type-prescription
rules.
The installation instructions have been updated for obtaining GCL on a
Macintosh. Thanks to Robert Krug for supplying this information and to Camm
Maguire for simplifying the process by eliminating the gettext
dependency.
The macro comp
is now an event, so it may be placed in books.
Previously, a save-exec
call could fail because of file permission
issues, yet ACL2 (and the underlying Lisp) would quit anyhow. This has been
fixed. Thanks to Peter Dillinger for bringing this problem to our attention.
Jared Davis, with assistance from David Rager, has updated his ordered sets
library, books/finite-set-theory/osets/
. See file CHANGES.html
in
that directory.
A new function, reset-kill-ring
, has been provided for the rare user
who encounters memory limitations. See reset-kill-ring.