DISJ_CASES_THEN
Thm_cont.DISJ_CASES_THEN : thm_tactical
Applies a theorem-tactic to each disjunct of a disjunctive theorem.
If the theorem-tactic f:thm->tactic
applied to either
ASSUME
d disjunct produces results as follows when applied
to a goal (A ?- t)
:
A ?- t A ?- t
========= f (u |- u) and ========= f (v |- v)
A ?- t1 A ?- t2
then applying DISJ_CASES_THEN f (|- u \/ v)
to the goal
(A ?- t)
produces two subgoals.
A ?- t
====================== DISJ_CASES_THEN f (|- u \/ v)
A ?- t1 A ?- t2
Fails if the theorem is not a disjunction. An invalid tactic is produced if the theorem has any hypothesis which is not alpha-convertible to an assumption of the goal.
Given the theorem
th = |- (m = 0) \/ (?n. m = SUC n)
and a goal of the form ?- (PRE m = m) = (m = 0)
,
applying the tactic
DISJ_CASES_THEN ASSUME_TAC th
produces two subgoals, each with one disjunct as an added assumption:
?n. m = SUC n ?- (PRE m = m) = (m = 0)
m = 0 ?- (PRE m = m) = (m = 0)
Building cases tactics. For example, DISJ_CASES_TAC
could be defined by:
val DISJ_CASES_TAC = DISJ_CASES_THEN ASSUME_TAC
Use DISJ_CASES_THEN2
to apply different tactic
generating functions to each case.
Thm_cont.CHOOSE_THEN
,
Thm_cont.CONJUNCTS_THEN
,
Thm_cont.CONJUNCTS_THEN2
,
Thm.DISJ_CASES
, Tactic.DISJ_CASES_TAC
,
Thm_cont.DISJ_CASES_THEN2
,
Thm_cont.DISJ_CASES_THENL
,
Thm_cont.STRIP_THM_THEN