defpkg
events that are local
Major Section: DEFPKG
This documentation topic explains a little bit about certain errors users may
see when attempting to evaluate a defpkg
event. In brief, if you see
an error that refers you to this topic, you are probably trying to admit a
defpkg
event, and you should change the name of the package to be
introduced by that event.
Recall that defpkg
events introduce axioms, for example as follows.
ACL2 !>(defpkg "PKG0" '(a b)) Summary Form: ( DEFPKG "PKG0" ...) Rules: NIL Warnings: None Time: 0.01 seconds (prove: 0.00, print: 0.00, other: 0.01) "PKG0" ACL2 !>:pr! "PKG0" Rune: (:REWRITE PKG0-PACKAGE) Status: Enabled Lhs: (SYMBOL-PACKAGE-NAME (INTERN-IN-PACKAGE-OF-SYMBOL X Y)) Rhs: "PKG0" Hyps: (AND (STRINGP X) (NOT (MEMBER-SYMBOL-NAME X '(A B))) (SYMBOLP Y) (EQUAL (SYMBOL-PACKAGE-NAME Y) "PKG0")) Equiv: EQUAL Backchain-limit-lst: NIL Subclass: BACKCHAIN Loop-stopper: NIL ACL2 !>Now, a
defpkg
event may be executed underneath an encapsulate
or
include-book
form that is marked local
. In that case, traces of
the added axiom will disappear after the surrounding encapsulate
or
include-book
form is admitted. This can cause inconsistencies. (You
can take our word for it, or you can look at the example shown in the
``Essay on Hidden Packages'' in source file axioms.lisp
.)In order to prevent unsoundness, then, ACL2 maintains the following
invariant. Let us say that a defpkg
event is ``hidden'' if it is in
support of the current logical world but is not present in that world as
an event, because it is local
as indicated above. We maintain the
invariant that all defpkg
events, even if ``hidden'', are tracked
under-the-hood in the current logical world. Sometimes this property
causes defpkg
events to be written to the portcullis of a book's
certificate (see books). At any rate, if you then try to define the
package in a manner inconsistent with the earlier such definition, that is,
with a different imports list, you will see an error because of the
above-mentioned tracking.
(By the way, this topic's name comes from Holly Bell, who heard "hidden death package" instead of "hidden defpkg". The description seemed to fit. Thanks, Holly!)