CALLING-LD-IN-BAD-CONTEXTS.html -- ACL2 Version 6.3

### CALLING-LD-IN-BAD-CONTEXTS

errors caused by calling `ld` in inappropriate contexts

    Major Section:  LD

The macro `ld` was designed to be called directly in the top-level ACL2 loop, although there may be a few occasions for calling it from functions. ACL2 cannot cope with invocations of `ld` during the process of loading a compiled file for a book, so this is an error.

To see how that can happen, consider the following book, where file `const.lsp` contains the single form `(defconst *foo* '(a b))`.

      (in-package "ACL2")
      (defttag t)
      (progn! (ld "const.lsp"))

An attempt to certify this book will cause an error, but that particular error can be avoided, as discussed below. If the book is certified, however, with production of a corresponding compiled file (which is the default behavior for `certify-book`), then any subsequent call of `include-book` that loads this compiled file will cause an error. Again, this error is necessary because of how ACL2 is designed; specifically, this `ld` call would interfere with tracking of constant definitions when loading the compiled file for the book.

Because including such a book (with a compiled file) causes an error, then as a courtesy to the user, ACL2 arranges that the certification will fail (thus avoiding a surprise later when trying to include the book). The error in that case will look as follows.

      ACL2 Error in LD:  It is illegal to call LD in this context.  See DOC
      calling-ld-in-bad-contexts.

If you really think it is OK to avoid this error, you can get around it by setting state global variable `ld-okp` to t: `(assign ld-okp t)`. You can then certify the book in the example above, but you will still not be able to include it with a compiled file.