Major Section: RULE-CLASSES
See rule-classes for a general discussion of rule classes and
how they are used to build rules from formulas. An example
:corollary formula from which an :elim rule might be built is:
Example:
(implies (consp x) when (car v) or (cdr v) appears
(equal (cons (car x) (cdr x)) in a conjecture, and v is a
x)) variable, consider replacing v by
(cons a b), for two new variables
a and b.
General Form:
(implies hyp (equiv lhs x))
where equiv is a known equivalence relation See defequiv, x
is a variable symbol and lhs contains one or more terms (called
``destructor terms'') of the form (fn v1 ... vn), where fn is
a function symbol and the vi are distinct variable symbols,
v1, ..., vn include all the variable symbols in the formula,
no fn occurs in lhs in more than one destructor term, and all
occurrences of x in lhs are inside destructor terms.
To use an :elim rule, the theorem prover waits until a conjecture
has been maximally simplified. If it then finds an instance of some
destructor term (fn v1 ... vn) in the conjecture, where the instance
for x is some variable symbol, vi, and every occurrence of vi
outside the destructor terms is in an equiv-hittable position, then
it instantiates the :elim formula as indicated by the destructor term
matched, splits the conjecture into two goals, according to whether the
instantiated hypothesis, hyp, holds, and in the case that it does,
generalizes all the instantiated destructor terms in the conjecture to
new variables and then replaces vi in the conjecture by the generalized
instantiated lhs. An occurrence of vi is ``equiv-hittable''
if sufficient congruence rules (see defcong) have been proved to establish
that the propositional value of the clause is not altered by replacing that
occurrence of vi by some equiv-equivalent term.
If an :elim rule is not applied when you think it should have been,
and the rule uses an equivalence relation, equiv, other than equal,
it is most likely that there is an occurrence of the variable that is not
equiv-hittable. Easy occurrences to overlook are those in
in the governing hypotheses. If you see an unjustified occurrence of the
variable, you must prove the appropriate congruence rule to allow the
:elim to fire.
At the moment, the best description of how ACL2 :elim rules are used
may be found in the discussion of ``ELIM Rules,'' pp 247 of A
Computational Logic Handbook.