gen_new_specification : string * thm  -> thm
Introduce a constant or constants satisfying a given property.
The ML function gen_new_specification implements the generalised primitive rule of constant specification for the HOL logic.


   gen_new_specification (name, [x1=t1,...,xn=tn] |- t)
simultaneously introduces new constants named x1,...,xn satisfying the property:
   |- t
where the variables x1,...,xn in t are replaced by the new constants.

This theorem is stored, with name name, as a definition in the current theory segment. It is also returned by the call to gen_new_specification.

gen_new_specification fails if any of the hypotheses of the input theorem are not of the right form: they must be equations each with a variable on the left-hand side and no free variables on the right-hand side. It also fails if the supplied variables (equivalently, the desired constant names) x1,...,xn are not distinct. Finally, failure occurs if the type of some ti does not contain all the type variables occurring in the term ti itself.
The generalised version is described in Rob Arthan’s ITP 2014 paper, HOL Constant Definition Done Right, available from
HOL  Kananaskis-14