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.

Failure

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.

Comments

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.

See also

Definition.gen_new_specification, Definition.new_definition, boolSyntax.new_binder_definition, boolSyntax.new_infixl_definition, boolSyntax.new_infixr_definition, TotalDefn.Define, Parse.set_fixity