GEN_VALIDATETactical.GEN_VALIDATE : bool -> tactic -> tactic
Where a tactic requires assumptions to be in the goal, add those assumptions as new subgoals.
See VALIDATE, which is implemented as
GEN_VALIDATE true.
Suppose tac applied to the goal (asl,g)
produces a justification that creates a theorem A |- g'.
Then GEN_VALIDATE false adds new subgoals for members of
A, regardless of whether they are present in
asl.
Fails by design if tac, when applied to a goal, produces
a proof which is invalid on account of proving a theorem whose
conclusion differs from that of the goal.
Also fails if tac fails when applied to the given
goal.
For example, where theorem uthr' is
[p', q] |- r
1 subgoal:
val it =
r
------------------------------------
0. p
1. q
> e (VALIDATE (ACCEPT_TAC uthr')) ;
OK..
1 subgoal:
val it =
p'
------------------------------------
p
:
proof
but, instead of that,
> e (GEN_VALIDATE false (ACCEPT_TAC uthr')) ;
OK..
2 subgoals:
val it =
q
------------------------------------
0. p
1. q
p'
------------------------------------
0. p
1. q
Use GEN_VALIDATE false rather than VALIDATE
when programming compound tactics if you want to know what the resulting
subgoals will be, regardless of what the assumptions of the goal
are.