Major Section: PROOF-CHECKER
Example: (define-pc-macro ib (&optional term) (value (if term `(then (induct ,term) bash) `(then induct bash))))The example above captures a common paradigm: one attempts to prove the current goal by inducting and then simplifying the resulting goals. (see proof-checker-commands for documentation of the command
then
, which is itself a pc-macro command, and commands
induct
and bash
.) Rather than issuing (then induct bash)
, or
worse yet issuing induct
and then issuing bash
for each resulting
goals, the above definition of ib
would let you issue ib
and get the
same effect.
General Form: (define-pc-macro cmd args doc-string dcl ... dcl body)where
cmd
is the name of the pc-macro than you want to define,
args
is its list of formal parameters. Args
may include lambda-list
keywords &optional
and &rest
; see macro-args, but note that
here, args
may not include &key
or &whole
.
The value of body
should be an ACL2 ``error triple,'' i.e., have the
form (mv erp xxx state)
for some erp
and xxx
. If erp
is
nil
, then xxx
is handed off to the proof-checker's instruction
interpreter. Otherwise, evaluation typically halts. We may write
more on the full story later if there is interest in reading it.