FREEZE_THEN
Tactic.FREEZE_THEN : thm_tactical
‘Freezes’ a theorem to prevent instantiation of its free variables.
FREEZE_THEN
expects a tactic-generating function
f:thm->tactic
and a theorem (A1 |- w)
as
arguments. The tactic-generating function f
is applied to
the theorem (w |- w)
. If this tactic generates the
subgoal:
A0 ?- t
========= f (w |- w)
A ?- t1
then applying FREEZE_THEN f (A1 |- w)
to the goal
(A0 ?- t)
produces the subgoal:
A0 ?- t
=================== FREEZE_THEN f (A1 |- w)
A - {w}, A1 ?- t1
Since the term w
is a hypothesis of the argument to the
function f
, none of the free variables present in
w
may be instantiated or generalized. The hypothesis is
discharged by PROVE_HYP
upon the completion of the proof of
the subgoal.
Failures may arise from the tactic-generating function. An invalid tactic arises if the hypotheses of the theorem are not alpha-convertible to assumptions of the goal.
Given the goal
([ ``b < c``, ``a < b`` ], ``SUC a <= c``)
, and
the specialized variant of the theorem LESS_TRANS
:
th = |- !p. a < b /\ b < p ==> a < p
IMP_RES_TAC th
will generate several unneeded
assumptions:
{b < c, a < b, a < c, !p. c < p ==> b < p, !a'. a' < a ==> a' < b}
?- SUC a <= c
which can be avoided by first ‘freezing’ the theorem, using the tactic
FREEZE_THEN IMP_RES_TAC th
This prevents the variables a
and b
from
being instantiated.
{b < c, a < b, a < c} ?- SUC a <= c
Used in serious proof hacking to limit the matches achievable by resolution and rewriting.
Thm.ASSUME
, Tactic.IMP_RES_TAC
, Drule.PROVE_HYP
, Tactic.RES_TAC
, Conv.REWR_CONV