:tau-system rules
Major Section: SWITCHES-PARAMETERS-AND-MODES
Examples: (set-tau-auto-mode t) (set-tau-auto-mode nil)
This event is equivalent to
(table acl2-defaults-table :tau-auto-modep <t-or-nil>),
and hence is local to any books and encapsulate events
in which it occurs; see acl2-defaults-table.
The initial value is nil and we say that the tau-system is in
manual mode. In manual mode, the only events that may create
:tau-system rules are defthm events explicitly specifying the
:tau-system rule class in the :rule-classes argument. Of
course, for a :tau-system rule to be created from a proved formula (or
its specified :corollary), the formula must be of the appropriate
shape (syntactic form). See tau-system. If the :tau-system rule class is
specified but the formula is not of an appropriate shape, an error is
signalled.
The tau system is initially in manual mode.
When the value of :tau-auto-modep is t we say the tau system is in
automatic mode. In automatic mode, a :tau-system rule may be created
even by events not explicitly specifying the :tau-system rule class.
In particular, in automatic mode, a :tau-system rule may be created by
any of the events below, provided the definition or formula proved is of an
appropriate shape:
* defun events introducing ``big switch'' or ``mv-nth synonyms,''
* defun events creating type-prescription rules that may be also
represented as ``signature rules'' of form 1, and
* any defthm event with a non-nil :rule-classes argument if no
:tau-system rule is among the rule classes and the formula proved is in
the shape of any tau-system rule.
See tau-system for a description of the various shapes named above.
Note that any rule (of any rule class) created when the tau system is in
manual mode is also created in automatic mode. For example, if an event
would create a :DEFINITION, :TYPE-PRESCRIPTION, FORWARD-CHAINING,
or :REWRITE rule when the tau system is in manual mode, then the event
will create that same rule when the tau system is in automatic mode.
Automatic mode just means that some :tau-system rules may be created
also.
Of course, if a defthm event explicitly specifies a :tau-system rule
class, then even if the tau system is in automatic mode, that tau rule is
created from the proved formula (or the specified :corollary) or else an
error is caused. But if the tau system is in automatic mode and a defthm
event doesn't explicitly specify a :tau-system rule class, then the
system quietly checks each specified :corollary -- or, in the absence
of any :corollary, it checks the proved formula -- for whether it can
be stored as a tau rule. If so, then the system stores a tau rule, in
addition to storing the specified rule. Of course, no error is signalled if
a proved formula of some non-:tau-system rule class fails to be of an
appropriate shape for the tau system.
Recall that the use of tau rules is controlled by the rune
(:EXECUTABLE-COUNTERPART TAU-SYSTEM). When that rune is disabled, no tau rules
are used in proofs. However, the tau system continues to collect tau rules
if the system is in automatic mode. Thus, if and when the tau system is
re-enabled, rules automatically generated while the tau system was disabled
will be used as usual by the tau system.
Finally, note that defthm events with :rule-classes nil do not
create :tau-system rules even if the formula proved is of an appropriate
shape, regardless of whether the tau system is in automatic or manual mode.
The macro tau-status provides a convenient way to enable/disable the
executable counterpart of tau-system and/or to switch between manual and
automatic modes. It may also be used to determine the current settings of
those two flags.