INST_TYPEThm.INST_TYPE : (hol_type,hol_type) subst -> thm -> thm
Instantiates types in a theorem.
INST_TYPE is a primitive rule in the HOL logic, which
allows instantiation of type variables.
A |- t
----------------------------------- INST_TYPE[vty1|->ty1,..., vtyn|->tyn]
A[ty1,...,tyn/vty1,...,vtyn]
|-
t[ty1,...,tyn/vty1,...,vtyn]
Type substitution is performed throughout the hypotheses and the conclusion. Variables will be renamed if necessary to prevent distinct bound variables becoming identical after the instantiation.
Never fails.
INST_TYPE enables polymorphic theorems to be used at any
type.
Supposing one wanted to specialize the theorem EQ_SYM_EQ
for particular values, the first attempt could be to use
SPECL as follows:
- SPECL [``a:num``, ``b:num``] EQ_SYM_EQ;
uncaught exception HOL_ERR
The failure occurred because EQ_SYM_EQ contains
polymorphic types. The desired specialization can be obtained by using
INST_TYPE:
- load "numTheory";
- SPECL [Term `a:num`, Term`b:num`]
(INST_TYPE [alpha |-> Type`:num`] EQ_SYM_EQ);
> val it = |- (a = b) = (b = a) : thm