new_specification
Definition.new_specification : string * string list * thm -> thm
Introduce a constant or constants satisfying a given property.
The ML function new_specification
implements the
primitive rule of constant specification for the HOL logic.
Evaluating:
new_specification (name, ["c1",...,"cn"], |- ?x1...xn. t)
simultaneously introduces new constants named
c1
,…,cn
satisfying the property:
|- t[c1,...,cn/x1,...,xn]
This theorem is stored, with name name
, as a definition
in the current theory segment. It is also returned by the call to
new_specification
.
new_specification
fails if the theorem argument has
assumptions or free variables. It also fails if the supplied constant
names c1
, …, cn
are not distinct. It also
fails if the length of the existential prefix of the theorem is not at
least n
. Finally, failure occurs if some ci
does not contain all the type variables that occur in the term
?x1...xn. t
.
new_specification
can be used to introduce constants
that satisfy a given property without having to make explicit equational
constant definitions for them. For example, the built-in constants
MOD
and DIV
are defined in the system by first
proving the theorem:
th |- ?MOD DIV.
!n. 0 < n ==> !k. (k = (DIV k n * n) + MOD k n) /\ MOD k n < n
and then making the constant specification:
new_specification ("DIVISION", ["MOD","DIV"], th)
This introduces the constants MOD
and DIV
with the defining property shown above.
The introduced constants have a prefix parsing status. To alter this,
use set_fixity
. Typical fixity values are
Binder
, Infixl n
, Infixr n
,
Prefix n
, Suffix n
, or
Closefix
.
Definition.gen_new_specification
,
Definition.new_definition
,
boolSyntax.new_binder_definition
,
boolSyntax.new_infixl_definition
,
boolSyntax.new_infixr_definition
,
TotalDefn.Define
, Parse.set_fixity