In computability theory the S m
n theorem, written also as "smn-theorem" or "s-m-n theorem" (also called the translation lemma, parameter theorem, and the parameterization theorem) is a basic result about programming languages (and, more generally, Gödel numberings of the partial computable functions) (Soare 1987, Rogers 1967). It was first proved by Stephen Cole Kleene (1943). The name comes from the occurrence of an with subscript and superscript in the original formulation of the theorem (see below).
In practical terms, the theorem says that for a given programming language and positive integers and , there exists a particular algorithm that accepts as input the source code of a program with free variables, together with values. This algorithm generates source code that in essence substitutes the values for the first free variables, leaving the rest of the variables free.
Details
The basic form of the theorem applies to functions of two arguments (Nies 2009, p. 6). Given a Gödel numbering of partial computable functions, there is a primitive recursive function of two arguments with the following property: for every Gödel number of a partial computable function with two arguments, the expressions and are defined for the same combinations of natural numbers and , and their values are equal for any such combination. In other words, the following extensional equality of functions holds for every :
More generally, for any , there exists a primitive recursive function of arguments that behaves as follows: for every Gödel number of a partial computable function with arguments, and all values of :
The function described above can be taken to be .
Formal statement
Given arities and , for every Turing Machine of arity and for all possible values of inputs , there exists a Turing machine of arity , such that
Furthermore, there is a Turing machine that allows to be calculated from and ; it is denoted .
Informally, finds the Turing Machine that is the result of hardcoding the values of into . The result generalizes to any Turing-complete computing model.
Example
The following Lisp code implements s11 for Lisp.
(defun s11 (f x)
(let ((y (gensym)))
(list 'lambda (list y) (list f x y))))
For example, (s11 '(lambda (x y) (+ x y)) 3) evaluates to (lambda (g42) ((lambda (x y) (+ x y)) 3 g42)), where g42 is a "fresh" symbol.
References
References
- Kleene, S. C. (1936). "General recursive functions of natural numbers". Mathematische Annalen. 112 (1): 727–742. doi:10.1007/BF01565439. S2CID 120517999.
- Kleene, S. C. (1938). "On Notations for Ordinal Numbers" (PDF). The Journal of Symbolic Logic. 3 (4): 150–155. doi:10.2307/2267778. JSTOR 2267778. S2CID 34314018. (This is the reference that the 1989 edition of Odifreddi's "Classical Recursion Theory" gives on p. 131 for the theorem.)
- Nies, A. (2009). Computability and randomness. Oxford Logic Guides. Vol. 51. Oxford: Oxford University Press. ISBN 978-0-19-923076-1. Zbl 1169.03034.
- Odifreddi, P. (1999). Classical Recursion Theory. North-Holland. ISBN 0-444-87295-7.
- Rogers, H. (1987) [1967]. The Theory of Recursive Functions and Effective Computability. First MIT press paperback edition. ISBN 0-262-68052-1.
- Soare, R. (1987). Recursively enumerable sets and degrees. Perspectives in Mathematical Logic. Springer-Verlag. ISBN 3-540-15299-7.