HIDDEN-DEATH-PACKAGE.html -- ACL2 Version 6.3

### HIDDEN-DEATH-PACKAGE

handling `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!)