INSTANTIATE : instantiation -> thm -> thm

SYNOPSIS
Apply a higher-order instantiation to conclusion of a theorem.

DESCRIPTION
The call INSTANTIATE i t, where i is an instantiation as returned by term_match, will perform the instantiation indicated by i in the conclusion of the theorem th: types and terms will be instantiated and the beta-reductions that are part of higher-order matching will be applied.

FAILURE CONDITIONS
Fails if the instantiation is impossible because of free term or type variables in the hypotheses.

EXAMPLE
  # let t = lhs(concl(SPEC_ALL NOT_FORALL_THM));;
  val t : term = `~(!x. P x)`
  # let i = term_match [] t `~(!n. prime(n) ==> ODD(n))`;;
  val i : instantiation =
    ([(1, `P`)], [(`\n. prime n ==> ODD n`, `P`)], [(`:num`, `:A`)])

  # INSTANTIATE i (SPEC_ALL NOT_FORALL_THM);;
  val it : thm = |- ~(!x. prime x ==> ODD x) <=> (?x. ~(prime x ==> ODD x))

COMMENTS
This is not intended for general use. PART_MATCH is generally a more convenient packaging.

SEE ALSO
instantiate, INSTANTIATE_ALL, PART_MATCH, term_match.