new_binder_definition : string * term -> thm
Let v1, ..., vn be syntactically distinct tuples constructed from the
variables x1,...,xm. A binder is defined by evaluating
new_binder_definition (`name`, "b v1 ... vn = t")
where b is not already a constant, b does not occur in t, all
the free variables that occur in t are a subset of x1,...,xn, and the type
of b has the form `(ty1->ty2)->ty3'. This declares b to be a new
constant with the syntactic status of a binder in the current theory, and with
the definitional theorem
|- !x1...xn. b v1 ... vn = t
as its specification. This constant specification for b is saved
in the current theory under the name name and is returned as a theorem.
The equation supplied to new_binder_definition may optionally have any of its free variables universally quantified at the outermost level. The constant b has binder status only after the definition has been made.
#new_binder_definition (`EXISTS_UNIQUE_DEF`, "$?! = \P:(*->bool). ($? P) /\ (!x y. ((P x) /\ (P y)) ==> (x=y))");; |- $?! = (\P. $? P /\ (!x y. P x /\ P y ==> (x = y)))
new_binder_definition(`name`, "$b = ... ");;This use of $ is not necessary; but after the definition has been made $ must, of course, be used if the syntactic status of b needs to be suppressed.