QUANT_TAC : (string * Parse.term Lib.frag list * Parse.term Parse.frag list list) list -> tactic
QUANT_TAC gets a list of triples (var_name, instantiation, free_vars) as an argument. var_name is the name of the variable to be instantiated; instantiation is the term this variable should be instantiated with. Finally, free_vars is a list of free variables in instantiation that should remain quantified.
As this tactic adresses variables by their name, resulting proofs might not be robust. Therefore, this tactic should be used carefully.
!x. (!z. P x z) ==> ?a b. Q a b z
!x. ( P x 0) ==> ? b a'. Q (SUC a') b z