ldin inappropriate contexts
Major Section: LD
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-bookthat loads this compiled file will cause an error. Again, this error is necessary because of how ACL2 is designed; specifically, this
ldcall 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
(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.