Major Section: RELEASE-NOTES
Versions of ACL2 preceding this one contain a subtle soundness bug! We found a flaw in our detection of subversive-recursions. The bug allowed some subversive recursions to slip through undetected.
We believe it would have been difficult to have exploited this flaw
inadvertently. In particular, the following five conditions are
(1) Introduce a constrained function, say
f, via an
(2) In the same encapsulation, define a clique of mutually recursive functions. This clique must be non-
local and in
(3) In that mutually recursive clique, use the constrained function
f (perhaps indirectly) so that the termination argument for the
clique depends on properties of the witness for
f or some other function dependent upon
f, must be used in
an argument in a recursive call or in a term governing a recursive
call. Furthermore, the use of
f must be such that the
termination proof cannot be done without exploiting properties of
the witness for
f. Other uses of the constrained functions in
the clique are ok.
(4) Fail to include the exploited properties of
f among the
constraints of the encapsulation.
(5) Later, outside the encapsulation, explicitly use a functional instantiation in which
f is replaced by a function not enjoying
the crucial properties.
See subversive-recursions for details.
Less important notes:
We have begun to write some introductory tutorial material for those
who wish to learn to program in ACL2. Most of this material is
HTML-based. See the Hyper-Card on the ACL2 home page.
The documentation of
verify-guards was improved to explain why
one might wish to verify the ``guards'' of a
defthm event. The
missing documentation was noticed by John Cowles.
A bug was fixed in cross fertilization. The bug caused the system to report that it had substituted one term for another when in fact no substitution occurred. The bug was noticed by Bill McCune.