GUARD-QUICK-REFERENCE.html -- ACL2 Version 6.3

### GUARD-QUICK-REFERENCE

brief summary of guard checking and guard verification

    Major Section:  GUARD

For a careful introduction to guards, see guard.

I. GUARD CHECKING DURING EXECUTION

Effect

Guards on definitions are checked at execution time (except for guards on subsidiary calls of recursive or mutually recursive functions).

When does it happen

By default, guards are checked for all forms submitted at the top level.

To disable
`:set-guard-checking nil` ; skip raw Lisp if there is a guard violation `:set-guard-checking :none` ; skip guard checking entirely

To (re-)enable
`:set-guard-checking t`

See set-guard-checking for more options.

II. GUARD VERIFICATION

Effect

A proof is attempted of the obligations arising from the guards of subsidiary functions in a `defun`, `defthm`, or `defaxiom` event. In the case of a `defun`, the guard itself is also verified (under an implicit guard of `t`).

When does it happen

Only names of defined functions, `defthm`s, and `defaxiom`s are subject to guard verification. Guard verification may occur when functions are defined (using `defun`), but it requires an explicit call of `verify-guards` in order to verify guards for `defthm`s and `defaxiom`s. Constrained functions (see encapsulate) may not have their guards verified.

`(verify-guards foo ...)`
causes guard verification for the `defun`, `defthm`, or `defaxiom` named by `foo`, if it has not already been successfully done. The default defun-mode (see default-defun-mode) must be `:``logic`, or else this event is ignored.

`(defun foo ...)`
causes guard verification of `foo` if and only if the following two conditions are both met. First, foo is processed in `:``logic` mode (either by setting mode `:``logic` globally, or by including `:mode :logic` in the `xargs` declaration). Second, at least one of the following sub-conditions is met. Also see xargs, and see set-verify-guards-eagerness for how to change this behavior.

> 1. The `xargs` declaration specifies a `:``guard`.

> 2. There is at least one `type` declaration (see declare).

> 3. The `xargs` declaration specifies `:``stobj` `s`.

> 4. The `xargs` declaration specifies `:``verify-guards` `t`.

`(verify-termination foo ...)`
causes guard verification of `foo` if `foo` is a function currently defined in `:``program` mode and the criteria for guard verification of a `defun` form are met, as discussed above. The default defun-mode (see default-defun-mode) must be `:``logic`, or else this event is ignored.