bool(1)

PINST tyin tmin th instantiates types in th according to tyin and terms
according to tmin.

 # let th = MESON[] `(x:A = y) <=> (y = x)`;;
 ...
 val th : thm = |- x = y <=> y = x

 # PINST [`:num`,`:A`] [`2 + 2`,`x:A`; `4`,`y:A`] th;;
 val it : thm = |- 2 + 2 = 4 <=> 4 = 2 + 2

PROVE_HYP th1 th2
If the conclusion of th1 is a hypothesis of th2, then returns th2
except that this hypothesis is replaced by the hypotheses of th1; otherwise
returns th2 unchanged.
いわゆる.カットです.

# let th1 = CONJUNCT2 (ASSUME `p /\ q /\ r`)
  and th2 = CONJUNCT2 (ASSUME `q /\ r`)
  and th3 = ADD_ASSUM `s:bool` th2;;
val th1 : thm = p /\ q /\ r |- q /\ r
val th2 : thm = q /\ r |- r
val th3 : thm = s, q /\ r |- r
# PROVE_HYP th1 th2;;
val it : thm = p /\ q /\ r |- r
# PROVE_HYP th1 th3;;
val it : thm = s, p /\ q /\ r |- r