Major Section: RELEASE-NOTES
NOTE! New users can ignore these release notes, because the documentation has been updated to reflect all changes that are recorded here.
(OpenMCL and multi-threaded SBCL only) Fixed a soundness bug in the
evaluation of mbe
forms in the presence of Lisp feature
:acl2-mv-as-values
. Thanks to Sol Swords for reporting this problem and
sending a simple proof of nil
(which can be found in a comment in the
ACL2 sources, in (deflabel note-3-2-1 ...)
).
Added a new utility, dmr
(Dynamicaly Monitor Rewrites), for watching
the activity of the rewriter and some other proof processes. See dmr. We
thank Robert Krug for useful contributions.
Fixed a bug in evaluation of calls of with-prover-time-limit
.
Fixed the writing of executable scripts when building ACL2, so that the
build-time value of environment variable ACL2_SYSTEM_BOOKS
is no longer
written there. Thanks to Dave Greve for discussing this change.
Fixed bugs in :
pl
(which are similarly present in the
proof-checker's sr
(show-rewrites
) command. The first bug was
evident from the following forms sent by Robert Krug, which caused an error.
(include-book "arithmetic-3/floor-mod/floor-mod" :dir :system) :pl (mod (+ 1 x) n)The second bug was due to a failure to take note of which rules are disabled, and could be seen by executing the following (very slow!).
(defstub modulus () t) (include-book "arithmetic-3/floor-mod/floor-mod" :dir :system) :pl (mod (+ x y) (modulus))
Modified certify-book
so that by default, all executable-counterpart
functions (sometimes called ``*1* functions'') are compiled. This is the
behavior that was already supported with a compile-flg
argument of
:all
; the change is that argument t
now has this behavior as well
(and :all
is supported only for legacy purposes). A new value for
compile-flg
, :raw
, gives the behavior formerly produced by value
t
, namely where executable-counterpart functions are not compiled. The
above changes are irrelevant if compilation is suppressed; see compilation.
Finally, if environment variable ACL2_COMPILE_FLG
is set, then after
converting to upper-case this environment variable's value of "T"
,
"NIL"
, or ":RAW"
will determine the value of the optional
compile-flg
argument to be t
, nil
, or :raw
, respectively,
when this argument is not explicitly supplied.
Modified include-book
so that :comp
argument now acts like
:comp!
, i.e., compiling a file that includes the file together with all
executable counterpart (so-called ``*1*'') functions. A new argument,
:comp-raw
, has the behavior that :comp
had formerly, i.e., compiling
the actual book only.
The function nonnegative-integer-quotient
is now computed in raw Lisp
by calling floor
on its arguments. This change was suggested by Peter
Dillinger, in order to avoid stack overflows such as reported by Daron
Vroon. A new book, books/misc/misc2/misc.lisp
, contains a proof of
equivalence of nonnegative-integer-quotient
and floor
, and serves
as a repository for other miscellaeous proofs, including those justifying
ACL2 modifications such as this one.
Enhanced accumulated-persistence
to break down results by useful vs.
useless rule applications. In particular, this provides information about
which rules were ever applied successfully, as requested by Bill Young.
Added coverage of :
meta
rules to the accumulated-persistence
statistics.
Fixed a bug that was causing a :
clause-processor
hint to fire on a
subgoal of the goal to which it was attached, when the original application
didn't change the clause. Thanks to Dave Greve for pointing out this bug and
providing a useful example.
Fixed a bug in handling of computed hints related to the
stable-under-simplificationp
parameter (see computed-hints). There were
actually two bugs. A minor but confusing bug was that the same goal was
printed twice upon application of such a hint. The major bug was that
:use
hints (as well as other ``top'' hints: :by
, :cases
, and
:clause-processor
) were not being applied properly. Thanks to Jared
Davis for sending an example some time ago that showed the duplicate
printing, and to Dave Greve for sending an example showing mis-application of
:
clause-processor
hints. Note that you may find that existing
computed hints using the stable-under-simplificationp
parameter no longer
have the same behavior; see a comment about computed hints in note-3-2-1
,
ACL2 source file ld.lisp
, for an example of how you might want to fix
such computed hints.
David Russinoff has contributed an updated version of
books/quadratic-reciprocity/
including minor modifications of the
treatment of prime numbers and a proof that there exist infinitely many
primes. Thanks to David for contributing this work, and to Jose Luis
Ruiz-Reina for posing the challenge.
Reduced the sizes of some certificate (.cert
) files by relaxing the
test that allows original defpkg
events to be placed there, rather
than evaluating the import list term into an explicit list of symbols.
Improved execution efficiency slightly for function rcdp
in file
books/misc/records.lisp
, by using mbe
to introduce a tail-recursive
body.
The executable script generated by save-exec
(and by the normal build
process) now includes a time stamp as a comment. Thanks to Jared Davis for
suggesting this change in order to support his use of omake
. In the
process, we also arranged that the startup banner for an executable created
by save-exec
shows all of the build (save) times, not just the one for
the original image.
Sped up most redundant defpkg
events by avoiding evaluation and sorting
of the imports list in the case of identical event forms. And, for
defpkg
events that are not redundant, sped up their processing in Allegro
CL (and perhaps other Lisps, but apparently not GCL) by using our own
import
function.
Modified add-include-book-dir
so that it refuses to associate a keyword
with a different directory string than one it is already bound to.
See delete-include-book-dir for how to remove the existing binding first.
Thanks to Robert Krug for pointing out that without this change, one can find
it difficult to debug a failure due to rebinding a keyword with
add-include-book-dir
.
Added a new value for the :do-not-induct
hint (see hints),
:otf-flg-override
, which causes ACL2 to ignore the :
otf-flg
when considering whether to abort the proof because of a :do-not-induct
hint. Thanks to Daron Vroon for suggesting such an addition.
Modified the printing of messages for entering and exiting raw mode
(see set-raw-mode), so that in particular they are inhibited during
include-book
or whenever observation
s are inhibited
(see set-inhibit-output-lst). Thanks to Peter Dillinger for suggesting such
a change.
(For system hackers only.) The handling of events of the form
(progn! (state-global-let* ...))
had a bug that was causing bindings to
be evaluated twice. Moreover, the use of system function
state-global-let*
is suspect in raw Lisp. We have eliminated special
treatment of state-global-let*
by progn!
in favor of a new keyword
argument, state-global-bindings
, that provides the intended
functionality. See progn!. Moreover, special handling that allowed
make-event
forms under state-global-let*
has been removed; the
desired effect can be obtained using (progn! :state-global-bindings ...).
Thanks to Peter Dillinger for pointing out the above bug and collaborating on
these changes.
Incorporated backward-compatible enhancements to books/misc/expander.lisp
from Daron Vroon (documented near the top of that file).
The specification of :backchain-limit-lst
had required that only a single
(:
rewrite
, :
linear
, or :
meta
) rule be
generated. We have weakened this restriction to allow more than one rule
provided that each rule has the same list of hypotheses. For example, the
rule class (:rewrite :backchain-limit-lst 1)
is now legal for the
corollary formula (implies (f x) (and (g x) (h x)))
, where this was not
formerly the case. Thanks to Dave Greve for bringing this issue to our
attention.