SMN THEOREM


In computability theory the 'smn theorem', (also called the 'translation lemma', 'parameter theorem', or 'parameterization theorem') is a basic result about programming languages (and, more generally, Gödel numberings of the computable functions) (Soare 1987, Rogers 1967). It was first proved by Stephen Cole Kleene (Kleene 1943).
In practical terms, the theorem says that, given any programming language and integers ''m'', ''n'' > 0, there is an algorithm with the following property: given the source code for a function ''f'' with ''m'' + ''n'' arguments and values ''a''1,...,''a''''m'' for the first ''m'' as input, the algorithm outputs source code for a function ''g'' such that
:''g''(''x''1,...,''x''n)=''f''(''a''1,...,''a''m, ''x''1,...,''x''n).
A corollary of the theorem is that any programming language capable of executing code generated at runtime can be made to support currying.

Contents
Details
Example
See also
References

Details


The basic form of the theorem applies to functions of two arguments. Given a Gödel numbering φ of recursive functions, there is a primitive recursive function ''s'' of two arguments with the following property: for every Gödel number ''p'' of a function with two arguments, arphi_{s(p,x)}(y) and p(x,y) are defined for the same combinations of x and y and equal for those combinations. In other words, the following extensional equality of functions holds:
: arphi_{s(p,x)} = lambda y. arphi_p(x,y).,
To generalize the theorem, choose a scheme for encoding ''n'' numbers as one number, so that the original numbers can be extracted by primitive recursive functions. For example, one might interleave the bits of the numbers. Then for any ''m'',''n'' > 0, there exists a primitive recursive function smn of ''m''+1 arguments that behaves as follows: for every Gödel number ''p'' of a function with ''m+n'' arguments,
: arphi_{s_{mn}(p,x_1,dots,x_m)} = lambda y_1,dots,y_n. arphi_p(x_1,dots,x_m,y_1,dots,y_n),
''s''11 is just the function ''s'' already described.

Example


The following Lisp code implements s11 for Lisp.
(defun s11 (f x)
(list 'lambda '(y) (list f x 'y))
For example, (s11 '(lambda (x y) (+ x y)) 3) evaluates to (lambda (y) ((lambda (x y) (+ x y)) 3 y)).

See also



Kleene's recursion theorem

References



Classical Recursion Theory, Odifreddi, P., , , North-Holland, 1999, ISBN 0-444-87295-7

The Theory of Recursive Functions and Effective Computability, Rogers, H., , , First MIT press paperback edition, 1987, ISBN 0-262-68052-1

Recursively enumerable sets and degrees, Soare, R., , , Springer-Verlag, 1987, ISBN 3-540-15299-7

General recursive functions of natural numbers, Kleene, S. C., , , Mathematische Annalen, 1943



This article provided by Wikipedia. To edit the contents of this article, click here for original source.

psst.. try this: add to faves