Major Section: PROGRAMMING
Examples:
(declare (ignore x y z))
(declare (ignore x y z)
(type integer i j k)
(type (satisfies integerp) m1 m2))
(declare (xargs :guard (and (integerp i)
(<= 0 i))
:guard-hints (("Goal" :use (:instance lemma3
(x (+ i j)))))))
General Form:
(declare d1 ... dn)
where, in ACL2, each di is of one of the following forms:
(ignore v1 ... vn) -- where each vi is a variable introduced in
the immediately superior lexical environment.
(type type-spec v1 ... vn) -- where each vi is a variable
introduced in the immediately superior lexical environment and
type-spec is a type specifier (as described in the documentation
for type-spec).
(xargs :key1 val1 ... :keyn valn) -- where the legal values of the
keyi's and their respective vali's are described in the
documentation for xargs.
Declarations in ACL2 may occur only where dcl occurs below:
(DEFUN name args doc-string dcl ... dcl body) (DEFMACRO name args doc-string dcl ... dcl body) (LET ((v1 t1) ...) dcl ... dcl body) (MV-LET (v1 ...) term dcl ... dcl body)Of course, if a form macroexpands into one of these (as
let*
expands into nested lets and our er-let* expands into nested
mv-lets) then declarations are permitted as handled by the macros
involved.
Declare is defined in Common Lisp. See any Common Lisp
documentation for more information.