FILTER_PSTRIP_TAC.doc

advertisement
\DOC FILTER_PSTRIP_TAC
\TYPE {FILTER_PSTRIP_TAC : (term -> tactic)}
\KEYWORDS
tactic, selective.
\LIBRARY pair
\SYNOPSIS
Conditionally strips apart a goal by eliminating the outermost
connective.
\DESCRIBE
Stripping apart a goal in a more careful way than is done by {PSTRIP_TAC}
may
be necessary when dealing with quantified terms and implications.
{FILTER_PSTRIP_TAC} behaves like {PSTRIP_TAC}, but it does not strip
apart a
goal if it contains a given term.
If {u} is a term, then {FILTER_PSTRIP_TAC u} is a tactic that removes one
outermost occurrence of one of the connectives {!}, {==>}, {~} or {/\}
from the
conclusion of the goal {t}, provided the term being stripped does not
contain
{u}. {FILTER_PSTRIP_TAC} will strip paired universal quantifications.
A negation {~t} is treated as the implication {t ==> F}.
{FILTER_PSTRIP_TAC} also breaks apart conjunctions without applying any
filtering.
If {t} is a universally quantified term, {FILTER_PSTRIP_TAC u}
strips off the quantifier:
{
A ?- !p. v
================ FILTER_PSTRIP_TAC "u"
[where p is not u]
A ?- v[p'/p]
}
where {p'} is a primed variant of the pair {p} that does not contain
any variables that appear free in the assumptions {A}.
If {t} is a conjunction, no filtering is done and {FILTER_PSTRIP_TAC}
simply
splits the conjunction:
{
A ?- v /\ w
================= FILTER_PSTRIP_TAC "u"
A ?- v
A ?- w
}
If {t} is an implication and the antecedent does not contain
a free instance of {u}, then {FILTER_PSTRIP_TAC u} moves the antecedent
into the
assumptions and recursively splits the antecedent according to the
following
rules (see {PSTRIP_ASSUME_TAC}):
{
A ?- v1 /\ ... /\ vn ==> v
============================
A u {{v1,...,vn}} ?- v
?- v
A ?- v1 \/ ... \/ vn ==> v
=================================
A u {{v1}} ?- v ... A u {{vn}}
A ?- (?p. w) ==> v
====================
A u {{w[p'/p]}} ?- v
}
where {p'} is a variant of the pair {p}.
\FAILURE
{FILTER_PSTRIP_TAC u (A,t)} fails if {t} is not a universally quantified
term,
an implication, a negation or a conjunction; or if the term being
stripped contains {u} in the sense described above (conjunction
excluded).
\USES
{FILTER_PSTRIP_TAC} is used when stripping outer connectives from a goal
in a
more delicate way than {PSTRIP_TAC}. A typical application is to keep
stripping by using the tactic {REPEAT (FILTER_PSTRIP_TAC u)}
until one hits the term {u} at which stripping is to stop.
\SEEALSO
PGEN_TAC, PSTRIP_GOAL_THEN, FILTER_PSTRIP_THEN, PSTRIP_TAC,
FILTER_STRIP_TAC.
\ENDDOC
Download