NOTE-2-7-SYSTEM.html -- ACL2 Version 6.3

### NOTE-2-7-SYSTEM

ACL2 Version 2.7 Notes on System-level Changes

    Major Section:  NOTE-2-7

ACL2 now runs (once again) under LispWorks, specifically, LispWorks 4.2.0. However, we needed a patch, which presumably will be unnecessary after 4.2.7. From LispWorks support:

> Users with LispWorks4.2.7 should ask us at lisp-support@xanalys.com for the transform-if-node patch. It will be helpful if they quote (Lisp Support Call #11372) when doing so. Also, they must send a bug form generated from their LispWorks image: instructions at http://www.lispworks.com/support/bug-report.html.

File `books/Makefile-generic` has been improved so that failed attempts to certify a book will cause the `make' to fail. Previously, an existing `.cert` file was left in place, and that sufficed for the `make' to be considered a success. Now, the old `.cert` file is first removed when recertification is found to be necessary.

A change has been made to source file `acl2.lisp` to accommodate GCL 2.4.3. (ACL2 Version 2.6 does not work with some versions of GCL 2.4.3.)

The error message has been improved when certain forms are typed to raw Lisp and the ACL2 loop has never been entered (with `(``LP``)`).

The following symbols in the ACL2 package have been made untouchable, meaning that they are not available to the user: `ev-fncall`, `ev`, `ev-lst`, `ev-acl2-unwind-protect`, `ev-fncall!`, and `user-stobj-alist-safe`. The reason is that these functions can not be called safely except under certain restrictions. If you want to call the ACL2 evaluator, consider using the built-in system functions `trans-eval` or simple-translate-and-eval.

CLISP Version_2.30 implements a notion of ``locking'' the "LISP" package that is incompatible with building ACL2. (CLISP Version_2.27 does not appear to have had this feature.) We have gotten around this problem by unlocking the "LISP" package in ACL2 images built on such CLISPs.

Automatic proclaiming for GCL, which has (for a long time) been done for functions in compiled books, has been improved. Formerly, the only time a non-trivial output type (i.e., other than `t`) was inferred was when macroexpansion produced an explicit call of `the`. Now, `if` expressions can also generate non-`t` output types. Consider the following example.

    (defmacro the-fixnum (n)
      (list 'the '(signed-byte 29) n))
    (defmacro 1+f (x)
      (list 'the-fixnum
            (list '1+ (list 'the-fixnum x))))
    (defun foo (x)
      (declare (type (unsigned-byte 27) x))
      (if (zp x)
          0
        (1+f (foo (1-f x)))))

Formerly, the `proclaim` forms for `foo`, before and after this improvement, are as shown below.

    (PROCLAIM '(FTYPE (FUNCTION ((UNSIGNED-BYTE 27)) T) FOO))                ;old
    (PROCLAIM '(FTYPE (FUNCTION ((UNSIGNED-BYTE 27)) (SIGNED-BYTE 29)) FOO)) ;new

Compiler info messages sent to error stream were eliminated for CMUCL.