PSTRIP_TACPairRules.PSTRIP_TAC : tactic
Splits a goal by eliminating one outermost connective.
Given a goal (A,t), PSTRIP_TAC removes one
outermost occurrence of one of the connectives !,
==>, ~ or /\ from the
conclusion of the goal t. If t is a
universally quantified term, then STRIP_TAC strips off the
quantifier. Note that PSTRIP_TAC will strip off paired
quantifications.
A ?- !p. u
============== PSTRIP_TAC
A ?- u[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, then
PSTRIP_TAC simply splits the conjunction into two
subgoals:
A ?- v /\ w
================= PSTRIP_TAC
A ?- v A ?- w
If t is an implication, PSTRIP_TAC moves
the antecedent into the assumptions, stripping conjunctions,
disjunctions and existential quantifiers according to the following
rules:
A ?- v1 /\ ... /\ vn ==> v A ?- v1 \/ ... \/ vn ==> v
============================ =================================
A u {v1,...,vn} ?- v A u {v1} ?- v ... A u {vn} ?- v
A ?- (?p. w) ==> v
=====================
A u {w[p'/p]} ?- v
where p' is a primed variant of the pair p
that does not appear free in A. Finally, a negation
~t is treated as the implication
t ==> F.
PSTRIP_TAC (A,t) fails if t is not a paired
universally quantified term, an implication, a negation or a
conjunction.
When trying to solve a goal, often the best thing to do first is
REPEAT PSTRIP_TAC to split the goal up into manageable
pieces.
PairRules.PGEN_TAC, PairRules.PSTRIP_GOAL_THEN,
PairRules.FILTER_PSTRIP_THEN,
Tactic.STRIP_TAC, PairRules.FILTER_PSTRIP_TAC