\DOC STRIP_ASSUME_TAC \TYPE {STRIP_ASSUME_TAC : thm_tactic} \SYNOPSIS

advertisement
\DOC STRIP_ASSUME_TAC
\TYPE {STRIP_ASSUME_TAC : thm_tactic}
\SYNOPSIS
Splits a theorem into a list of theorems and then adds them to the
assumptions.
\KEYWORDS
tactic.
\DESCRIBE
Given a theorem {th} and a goal {(A,t)}, {STRIP_ASSUME_TAC th} splits
{th} into
a list of theorems. This is done by recursively breaking conjunctions
into
separate conjuncts, cases-splitting disjunctions, and eliminating
existential
quantifiers by choosing arbitrary variables. Schematically, the
following
rules are applied:
{
A ?- t
====================== STRIP_ASSUME_TAC (A' |- v1 /\ ... /\ vn)
A u {v1,...,vn} ?- t
A ?- t
=================================
\/ vn)
A u {v1} ?- t ... A u {vn} ?- t
A ?- t
====================
A u {v[x'/x]} ?- t
STRIP_ASSUME_TAC (A' |- v1 \/ ...
STRIP_ASSUME_TAC (A' |- ?x.v)
}
where {x'} is a variant of {x}.
If the conclusion of {th} is not a conjunction, a disjunction or an
existentially quantified term, the whole theorem {th} is added to the
assumptions.
As assumptions are generated, they are examined to see if they solve the
goal
(either by being alpha-equivalent to the conclusion of the goal or by
deriving
a contradiction).
The assumptions of the theorem being split are not added to the
assumptions of
the goal(s), but they are recorded in the proof. This means that if {A'}
is
not a subset of the assumptions {A} of the goal (up to alpha-conversion),
{STRIP_ASSUME_TAC (A'|-v)} results in an invalid tactic.
\FAILURE
Never fails.
\EXAMPLE
When solving the goal
{
?- m = 0 + m
}
assuming the clauses for addition with
{STRIP_ASSUME_TAC ADD_CLAUSES} results in the goal
{
{m + (SUC n) = SUC(m + n), (SUC m) + n = SUC(m + n),
m + 0 = m, 0 + m = m, m = 0 + m} ?- m = 0 + m
}
while the same tactic directly solves the goal
{
?- 0 + m = m
}
\USES
{STRIP_ASSUME_TAC} is used when applying a previously proved theorem to
solve
a goal, or
when enriching its assumptions so that resolution, rewriting with
assumptions
and other operations involving assumptions have more to work with.
\SEEALSO
Tactic.ASSUME_TAC, Tactic.CHOOSE_TAC, Thm_cont.CHOOSE_THEN,
Thm_cont.CONJUNCTS_THEN, Tactic.DISJ_CASES_TAC, Thm_cont.DISJ_CASES_THEN.
\ENDDOC
Download