Smn theorem

From testwiki
Revision as of 14:48, 8 November 2024 by imported>Citation bot (Added issue. | Use this bot. Report bugs. | Suggested by Dominic3203 | Category:Computability theory | #UCB_Category 79/102)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Template:Short description

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 computable functions) (Soare 1987, Rogers 1967). It was first proved by Stephen Cole Kleene (1943). The name Template:Subsup 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 Template:Math free variables, together with m values. This algorithm generates source code that effectively substitutes the values for the first m free variables, leaving the rest of the variables free.

The smn-theorem states that given a function of two arguments g(x,y) which is computable, there exists a total and computable function such that ϕs(x)(y)=g(x,y) basically "fixing" the first argument of g. It's like partially applying an argument to a function. This is generalized over m,n tuples for x,y. In other words, it addresses the idea of "parametrization" or "indexing" of computable functions. It's like creating a simplified version of a function that takes an additional parameter (index) to mimic the behavior of a more complex function.

The function smn is designed to mimic the behavior of ϕ(x,y) when given the appropriate parameters. Essentially, by selecting the right values for m and n, you can make s behave like for a specific computation. Instead of dealing with the complexity of ϕ(x,y), we can work with a simpler smn that captures the essence of the computation.

Details

The basic form of the theorem applies to functions of two arguments (Nies 2009, p. 6). 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 partial computable function f with two arguments, the expressions φs(p,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(p,x)λy.φp(x,y).

More generally, for any m, Template:Math, there exists a primitive recursive function Snm of Template:Math arguments that behaves as follows: for every Gödel number p of a partial computable function with Template:Math arguments, and all values of x1, …, xm:

φSnm(p,x1,,xm)λy1,,yn.φp(x1,,xm,y1,,yn).

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

Formal statement

Given arities Template:Mvar and Template:Mvar, 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 Template:Mvar, such that

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

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

Informally, Template:Mvar finds the Turing Machine TMk that is the result of hardcoding the values of Template:Mvar into TMx. The result generalizes to any Turing-complete computing model.

This can also be extended to total computable functions as follows:

Given a total computable function sm,n:m+1 and m,n1 such that xm,yn, e:

ϕem+n(x,y)=ϕsm,n(e,x)n(y)

There is also a simplified version of the same theorem (defined infact as "simplified smn-theorem", which basically uses a total computable function as index as follows:

Let f:n+m be a computable function. There, there is a total computable function s:m such that xm, yn:

f(x,y)=ϕS(x)(n)(y)

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.

See also

References