CLAIM_TAC : string -> term -> tactic
- SYNOPSIS
-
Breaks down and labels an intermediate claim in a proof.
- DESCRIPTION
-
Given a Boolean term t and a string s of the form expected by
DESTRUCT_TAC indicating how to break down and label that assertion,
CLAIM_TAC s t breaks the current goal into two or more subgoals. One of
these is to establish t using the current context and the others are to
establish the original goal with the broken-down form of t as additional
assumptions.
- FAILURE CONDITIONS
-
Fails if the term is not Boolean or the pattern is ill-formed or does not match
the form of the theorem.
- EXAMPLE
-
Here we show how we can attack a propositional goal (admittedly trivial with
TAUT).
# g `(p <=> q) ==> p \/ ~q`;;
val it : goalstack = 1 subgoal (1 total)
`(p <=> q) ==> p \/ ~q`
# e DISCH_TAC;;
val it : goalstack = 1 subgoal (1 total)
0 [`p <=> q`]
`p \/ ~q`
We establish the intermediate goal p /\ q \/ ~p /\ ~q, the disjunction being
in turn broken down into two labelled hypotheses yes and no:
# e(CLAIM_TAC "yes|no" `p /\ q \/ ~p /\ ~q`);;
val it : goalstack = 3 subgoals (3 total)
0 [`p <=> q`]
1 [`~p /\ ~q`] (no)
`p \/ ~q`
0 [`p <=> q`]
1 [`p /\ q`] (yes)
`p \/ ~q`
0 [`p <=> q`]
`p /\ q \/ ~p /\ ~q`
- SEE ALSO
-
DESTRUCT_TAC, SUBGOAL_TAC, SUBGOAL_THEN.