The guard theorem for a given function symbol
This utility (pronounced ``gee-thumb'') generates the guard
theorem (i.e., guard proof obligation) for a given function symbol, as would
be generated by a :guard-theorem lemma-instance in a
(gthm 'FN) ; equivalent to the above
(gthm 'FN :limited nil) ; equivalent to the above
(gthm 'FN :limited t) ; include guard-debug info
(gthm 'FN nil) ; avoid any simplification
:gthm FN ; equivalent to (gthm 'FN)
(gthm x &optional simplify guard-debug)
where FN is a function symbol and x evaluates to a function
symbol. Evaluation returns the guard theorem as a user-level (untranslated)
term. The optional argument simplify, described below, is
:limited by default. The optional argument guard-debug is nil
by default; when non-nil, the guard theorem is modified as with the
option :guard-debug for verify-guards; see guard-debug.
See lemma-instance for how to provide the result of :gthm as a
:guard-theorem prover hint. Also see guard-formula-utilities for
Normally one will evaluate :gthm FN or equivalently (see keyword-commands), the form (gthm 'FN). In this case the guard theorem
may be partially simplified before it is returned, by using a form of
``subsumption'' to eliminate redundancy and by deleting tautologies as well as
instances of built-in-clause rules that come with ACL2. The
simplify argument should be nil to avoid such simplification; that
is, use (gthm 'FN nil). See also guard-simplification for
discussion of simplification done for various guard formula utilities.
Note that the result from evaluating (gthm x simplify guard-debug) is
an untranslated term, that is, a user-level term; see term.
The corresponding call (guard-theorem x simplify guard-debug (w state)
state) returns a translated term.