Smn theorem

From testwiki
Jump to navigation Jump to search

Template:Short description

Template:Correct title In computability theory the Template:Subsup 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 Smn comes from the occurrence of an S with subscript n and superscript m in the original formulation of the theorem (see below).

In practical terms, the theorem says that for a given programming language and positive integers m and n, there exists a particular algorithm that accepts as input the source code of a program with m+n free variables, together with m values. This algorithm generates source code that in essence substitutes the values for the first m 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 s of two arguments with the following property: for every Gödel number e of a partial computable function f with two arguments, the expressions φs(e,x)(y) and f(x,y) are defined for the same combinations of natural numbers x and y, and their values are equal for any such combination. In other words, the following extensional equality of functions holds for every x:

φs(e,x)≃λy.φe(x,y).

More generally, for any m,n>0, there exists a primitive recursive function Snm of m+1 arguments that behaves as follows: for every Gödel number e of a partial computable function with m+n arguments, and all values of x1,x2,...,xm:

φSnm(e,x1,…,xm)≃λy1,…,yn.φe(x1,…,xm,y1,…,yn).

The function s described above can be taken to be S11.

Formal statement

Given arities m and n, for every Turing Machine TMx of arity m+n and for all possible values of inputs y1,…,ym, there exists a Turing machine TMk of arity n, such that

∀z1,…,zn:TMx(y1,…,ym,z1,…,zn)=TMk(z1,…,zn).

Furthermore, there is a Turing machine S that allows k to be calculated from x and y; it is denoted k=Snm(x,y1,…,ym).

Informally, S finds the Turing Machine TMk that is the result of hardcoding the values of y into TMx. 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, Template:Code evaluates to Template:Code, where Template:Code is a "fresh" symbol.

See also

References