ACL2 Version 1.7 (released October 1994) Notes
Major Section:  RELEASE-NOTES

Include-book now takes (optionally) an additional keyword argument, indicating whether a compiled file is to be loaded. The default behavior is unchanged, except that a warning is printed when a compiled file is not loaded. See include-book.

A markup language for documentation strings has been implemented, and many of the source files have been marked up using this language (thanks largely to the efforts of Laura Lawless). See markup. Moreover, there are translators that we have used to provide versions of the ACL2 documentation in info (for use in emacs), html (for Mosaic), and tex (for hardcopy) formats.

A new event defdoc has been implemented. It is like deflabel, but allows redefinition of doc strings and has other advantages. See defdoc.

We used to ignore corollaries when collecting up the axioms introduced about constrained functions. That bug has been fixed. We thank John Cowles for bringing this bug to our attention.

The macro defstub now allows a :doc keyword argument, so that documentation may be attached to the name being introduced.

A new command nqthm-to-acl2 has been added to help Nqthm users to make the transition to ACL2. See nqthm-to-acl2, which also includes a complete listing of the relevant tables.

Many function names, especially of the form ``foo-lst'', have been changed in order to support the following convention, for any ``foo'':

(foo-listp lst) represents the notion (for x in lst always foop x).
A complete list of these changes may be found at the end of this note. All of them except symbolp-listp and list-of-symbolp-listp have the string ``-lst'' in their names. Note also that keyword-listp has been renamed keyword-value-listp.

Accumulated persistence has been implemented. It is not connected to :brr or rule monitoring. See accumulated-persistence.

:Trigger-terms has been added for :linear rule classes, so you can hang a linear rule under any addend you want. See linear, which has been improved and expanded.

ACL2 now accepts 256 characters and includes the Common Lisp functions code-char and char-code. However, ACL2 controls the lisp reader so that #\c may only be used when c is a single standard character or one of Newline, Space, Page, Rubout, Tab. If you want to enter other characters use code-char, e.g., (coerce (list (code-char 7) (code-char 240) #a) 'string). See characters. Note: our current handling of characters makes the set of theorems different under Macintosh Common Lisp (MCL) than under other Common Lisps. We hope to rectify this situation before the final release of ACL2.

A new table, macro-aliases-table, has been implemented, that associates macro names with function names. So for example, since append is associated with binary-append, the form (disable append) it is interpreted as though it were (disable binary-append). See macro-aliases-table, see add-macro-alias and see remove-macro-alias.

The implementation of conditional metalemmas has been modified so that the metafunction is applied before the hypothesis metafunction is applied. See meta.

The Common Lisp functions acons and endp have been defined in the ACL2 logic.

We have added the symbol declare to the list *acl2-exports*, and hence to the package "ACL2-USER".

A new hint, :restrict, has been implemented. See hints.

It used to be that if :ubt were given a number that is greater than the largest current command number, it treated that number the same as :max. Now, an error is caused.

The table :force-table has been eliminated.

A command :disabledp (and macro disabledp) has been added; see disabledp.

Compilation via :set-compile-fns is now suppressed during include-book. In fact, whenever the state global variable ld-skip-proofsp has value 'include-book.

Here are some less important changes, additions, and so on.

Unlike previous releases, we have not proved all the theorems in axioms.lisp; instead we have simply assumed them. We have deferred such proofs because we anticipate a fairly major changed in Version 1.8 in how we deal with guards.

We used to (accidentally) prohibit the ``redefinition'' of a table as a function. That is no longer the case.

The check for whether a corollary follows tautologically has been sped up, at the cost of making the check less ``smart'' in the following sense: no longer do we expand primitive functions such as implies before checking this propositional implication.

The command ubt! has been modified so that it never causes or reports an error. See ubt!.

ACL2 now works in Harlequin LispWorks.

The user can now specify the :trigger-terms for :linear rules. See linear.

The name of the system is now ``ACL2''; no longer is it ``Acl2''.

The raw lisp counterpart of theory-invariant is now defined to be a no-op as is consistent with the idea that it is just a call of table.

A bug was fixed that caused proof-checker instructions to be executed when ld-skip-proofsp was t.

The function rassoc has been added, along with a corresponding function used in its guard, r-eqlable-alistp.

The in-theory event and hint now print a warning not only when certain ``primitive'' :definition rules are disabled, but also when certain ``primitive'' :executable-counterpart rules are disabled.

The modified version of trace provided by ACL2, for use in raw Lisp, has been modified so that the lisp special variable *trace-alist* is consulted. This alist associates, using eq, values with their print representations. For example, initially *trace-alist* is a one-element list containing the pair (cons state '|*the-live-state*|).

The system now prints an observation when a form is skipped because the default color is :red or :pink. (Technically: when-cool has been modified.)

Additional protection exists when you submit a form to raw Common Lisp that should only be submitted inside the ACL2 read-eval-print loop.

Here is a complete list of the changes in function names described near the top of this note, roughly of the form

foo-lst --> foo-listp
meaning: the name ``foo-lst'' has been changed to ``foo-listp.''
symbolp-listp    --> symbol-listp
list-of-symbolp-listp  --> symbol-list-listp
                       {for consistency with change to symbol-listp}
rational-lst     --> rational-listp
                     {which in fact was already defined as well}
integer-lst      --> integer-listp
character-lst    --> character-listp
stringp-lst      --> string-listp
32-bit-integer-lst   --> 32-bit-integer-listp
typed-io-lst     --> typed-io-listp
open-channel-lst --> open-channel-listp
readable-files-lst   --> readable-files-listp
written-file-lst --> written-file-listp
read-file-lst    --> read-file-listp
writeable-file-lst   --> writable-file-listp
                     {note change in spelling of ``writable''}
writeable-file-lst1  --> writable-file-listp1
pseudo-termp-lst     --> pseudo-term-listp
hot-termp-lst --> hot-term-listp {by analogy with pseudo-term-listp}
weak-termp-lst   --> weak-term-listp
weak-termp-lst-lst   --> weak-termp-list-listp
ts-builder-case-lstp -> ts-builder-case-listp
quotep-lst       --> quote-listp
termp-lst        --> term-listp
instr-lst        --> instr-listp
spliced-instr-lst    --> spliced-instr-listp
rewrite-fncallp-lst  --> rewrite-fncallp-listp
every-occurrence-equiv-hittablep1-lst -->
some-occurrence-equiv-hittablep1-lst  -->
            {by analogy with the preceding, even though it's a
             ``some'' instead of ``all'' predicate]
almost-quotep1-lst   --> almost-quotep1-listp
ffnnames-subsetp-lst --> ffnnames-subsetp-listp
boolean-lstp     --> boolean-listp
subst-expr1-lst-okp  --> subst-expr1-ok-listp