STRIP_GOAL_THEN
Tactic.STRIP_GOAL_THEN : thm_tactic -> tactic
Splits a goal by eliminating one outermost connective, applying the given theorem-tactic to the antecedents of implications.
Given a theorem-tactic ttac
and a goal
(A,t)
, STRIP_GOAL_THEN
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_GOAL_THEN
strips
off the quantifier:
A ?- !x.u
============== STRIP_GOAL_THEN ttac
A ?- u[x'/x]
where x'
is a primed variant that does not appear free
in the assumptions A
. If t
is a conjunction,
then STRIP_GOAL_THEN
simply splits the conjunction into two
subgoals:
A ?- v /\ w
================= STRIP_GOAL_THEN ttac
A ?- v A ?- w
If t
is an implication u ==> v
and
if:
A ?- v
=============== ttac (u |- u)
A' ?- v'
then:
A ?- u ==> v
==================== STRIP_GOAL_THEN ttac
A' ?- v'
Finally, a negation ~t
is treated as the implication
t ==> F
.
STRIP_GOAL_THEN ttac (A,t)
fails if t
is
not a universally quantified term, an implication, a negation or a
conjunction. Failure also occurs if the application of ttac
fails, after stripping the goal.
When solving the goal
?- (n = 1) ==> (n * n = n)
a possible initial step is to apply
STRIP_GOAL_THEN SUBST1_TAC
thus obtaining the goal
?- 1 * 1 = 1
STRIP_GOAL_THEN
is used when manipulating intermediate
results (obtained by stripping outer connectives from a goal) directly,
rather than as assumptions.
Tactic.CONJ_TAC
, Thm_cont.DISCH_THEN
, Tactic.FILTER_STRIP_THEN
,
Tactic.GEN_TAC
, Tactic.STRIP_ASSUME_TAC
,
Tactic.STRIP_TAC