new_specification :
{name:string, sat_thm:thm,
consts:{const_name:string, fixity:fixity} list} -> thm
new_specification {name=name, sat_thm = |- ?x1...xn. t,
consts = [{const_name = "c1", fixity = f1}, ...,
{const_name = "cn", fixity = fn}]}
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 The fixities f1, ..., fn are values which determine the parsing status of the new constants. Typical fixity values are Prefix, Binder, Infixl n, Infixr n, Suffix n, TruePrefix n or Closefix.
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:
- val DIVISION =
new_specification
{name = "DIVISION",
consts = [{fixity = Infixl 650, const_name = "MOD"},
{fixity = Infixl 600, const_name = "DIV"}],
sat_thm = th};
This introduces the constants MOD and DIV with the defining
property shown above.