Smn theorem
On transforming a program by substituting constants for free variables
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.
01Details
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
.
02Formal 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.
03Example
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.
Sources and credits
This article is adapted from the Wikipedia article “Smn theorem”, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.
Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.