Академический Документы
Профессиональный Документы
Культура Документы
EL TEOREMA DE UNIVERSALIDAD
1. Introduccin
Uno de los pilares sobre los que descansa la Teora de la Computabilidad y que ha de
estar presente en todo sistema de computacin aceptable es sin duda el Teorema de
Universalidad. Este resultado, considerado bajo el modelo de los Programas While,
garantiza la existencia de un programa Universal, capaz de simular el comportamiento
de cualquier otro programa ante una entrada dada. Como se puede observar, dicho
programa Universal debe admitir como parte de su entrada a otro programa while. As
pues, teniendo en cuenta el hecho de que las entradas de un programa while han de ser
vectores de nmeros naturales, nos veremos en la necesidad de construir un proceso de
codificacin de los programas while. Este proceso traer como consecuencia la
enumeracin efectiva de los programas y por consiguiente de las funciones
computables.
Una vez puestas de manifiesto las enumeraciones efectivas tanto de programas
como de funciones computables, se proceder al enunciado y justificacin mediante la
Tesis de Church, del Teorema de Universalidad. Aunque esta demostracin puede
resultar convincente, queremos resaltar que no lo debe ser tanto, debido a cierta
dificultad que ha de ser salvada mediante un resultado terico. La dificultad estriba en
cmo un programa fijo, y por tanto con un nmero concreto de variables, puede simular
el comportamiento de otro programa que eventualmente puede tener ms variables. La
idea clave reside, como se ver, en tratar de almacenar la informacin de un conjunto de
variables, en una nica variable. Se procede por tanto a la construccin de biyecciones
entre el conjunto de los naturales y cualquier potencia del mismo, as como las
correspondientes proyecciones.
Smbolo
begin
end
while
do
:=
;
succ
pred
(
)
X
0
1
2
3
4
5
6
7
8
9
Cdigo binario
100000
100001
100010
100011
100100
100101
100110
100111
101000
101001
101010
101011
101100
101101
101110
101111
110000
110001
110010
110011
110100
110101
Cdigo decimal
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
100000 100010
sera el asociado a la cadena de caracteres formada por: begin while, que como se
puede observar no es un programa while sintcticamente correcto.
A pesar de que la funcin codificadora definida anteriormente no sea una
biyeccin, podemos definir una inversa a izquierda enviando a un programa concreto,
aquellos naturales que no son el cdigo de ningn programa while. De esta forma se
define Decod: N WP como sigue:
P si P correcto con Cod (P) = n
Decod (n) =
Q si no
donde Q es un programa cuyo dominio de definicin sea el conjunto vacio. Por ejemplo:
2.2. Observaciones
a) Ntese que la funcin Decod no es inyectiva pues una infinidad de nmeros
naturales tienen por imagen al programa Q. En cualquier caso s resulta ser
suprayectiva.
b) Igualmente resulta evidente que Decod (Cod (P)) = P. Con lo que Decod es inversa
a izquierda de Cod.
2.3. Proposicin
Las funciones Decod y Cod son computables.
Demostracin
Aplicando la tesis de Chuch segn la cual todo proceso que pueda de alguna manera
describirse mediante un conjunto finito de instrucciones y en un lenguaje
pseudoalgortmico es computable y considerando el siguiente proceso se demuestra la
computabilidad de Decod:
1.- Escribir la entrada n en binario.
2.- Descomponer la expansin binaria anterior en bloques de seis bits.
3.- Buscar el significado de cada bloque segn la tabla anterior.
4.- Si el texto que resulta es un programa while sintcticamente correcto P,
definimos Decod (n) = P.
5.- Si en 2, 3, 4 falla el proceso, se define Decod (n) = Q.
Anlogamente se puede definir un proceso para el clculo de la funcin Cod.
2.4. Observacin
En el proceso definido anteriormente para la funcin Decod, la demostracin estricta del
carcter algortmico del paso 4 resulta ser lo ms complejo. En este sentido y mediante
tcnicas de procesamiento de cadenas (utilizando las funciones head y tail que aplicadas
a una cadena devuelven respectivamente el primer smbolo y la subcadena formada por
todos los smbolos excepto el primero), puede construirse una demostracin rigurosa de
este hecho. De todas formas no resulta un excesivo acto de fe admitir que el paso 4 es
algortmico, pues la comprobacin de la correccin sintctica de programas resulta
habitual en cualquier compilador.
Por todo lo anterior, podemos establecer una enumeracin de los programas
mediante la funcin Decod como sigue:
n 0, Pn = Decod (n)
Tenemos as que el conjunto WP = { P0, P1, ... ,Pn, ... }, siendo sta una
enumeracin donde el programa Q aparece una infinidad de veces.
(j)
,
1
(j)
,L,
,L n
(j)
donde
es la funcin semntica de aridad j del programa Pi. Es esta una
enumeracin con repeticin, ya que diferentes programas pueden tener la misma
funcin semntica de aridad j.
(j)
i
U {
j 1
(j)
0
(j)
,
, 1
L,
(j)
L
, }
(j)
es un ndice
3.2. Observacin
Una funcin computable tiene infinitos ndices, ya que dado un programa que la
compute, ste puede modificarse de manera que no afecte a su funcin semntica. Por
ejemplo incrementando primero y decrementando despus una misma variable. Esto
hace que el programa sea distinto (y por tanto con otro ndice) sin que varen sus
funciones semnticas.
4. Teorema de Universalidad
A continuacin enunciaremos el teorema de Universalidad y daremos una demostracin
basada en la tesis de Church y en la funcin Decod definida anteriormente. Este teorema
pone de manifiesto la existencia de un programa while Universal cuya funcin
semntica de aridad j+1 engloba todas las funciones computables de aridad j.
4.1. Teorema
Para cada j 1 existe una funcin computable : N
j+1
la
enumeracin de las funciones computables dada, en el sentido siguiente:
(e, a1 , a2 ,L, aj ) = e (a1 , a 2 ,L, a j
)
eN,
(a1 , a2 ,L, a j )
(j)
Demostracin
NEste resultado quedar probado si se logra demostrar la existencia de un programa
universal PU tal que si se le introduce como entrada un ndice e y un vector de
dimensin j, (a1, ... ,aj), obtiene como salida el resultado de computar el programa Pe
con entrada (a1, ... ,aj). Es decir, un nmero natural si Pe para con dicha entrada,
indeterminado si no para.
Asumiendo que estos dos pasos son algortmicos y aplicando la Tesis de Church
queda demostrada la computabilidad de la funcin .
4.3. Proposicin
j 1 existe un nmero natural r y una funcin total y computable Short : N N tal
que:
(j)
(j
a)
e N
=
)
e
Short (e)
(0,1)
(0,2)
...
(0,n)
...
(1,0)
(1,1)
(1,2)
...
(1,n)
...
(2,0)
(2,1)
(2,2)
...
(2,n)
...
.
.
.
(n,0) (n,1) (n,2) ...
(n,n) ...
...............................................................
De esta forma el vector (0,0) tendr por imagen el 0, le seguir el (0,1), despus el (1,0),
el (0,2) y as sucesivamente.
5.1. Lema
La funcin as definida la denotaremos por : N N, y su definicin formal es:
2
(i,j) = (i + j) (i + j + 1) + i
Demostracin
Ntese que para cada n 1 hay exactamente n vectores cuya suma de sus componentes
es n 1. En consecuencia tenemos n (n + 1) vectores cuyas componentes suman a lo
sumo n - 1.
(1,n-1),
...
, (n,0)
5.2. Proposicin
: N2 N, definida anteriormente, es computable.
Demostracin
Evidente teniendo en cuenta el lema anterior, pues se trata de una expresin en donde
todas las funciones que intervienen son computables.
1(n) = i
2(n) = j
5.4. Observacin
Ntese que
1 como pues
2 son
una
embargo
no tanto
son inyectivas,
porsuprayectivas
ejemplo 1(0)debido
= 1(1)a =que
0; y es
= biyeccin.
2(1)
2(4) = 1. Sin
5.5. Proposicin
Tanto 1 como 2 son funciones totales y computables.
Demostracin
(i,j) < (i ,j + 1)
i (i,j) i N
j (i,j) j
En primer lugar es claro que el par (i,j) tal que (i,j) = n se encuentra en el
siguiente segmento de tabla:
(0,0), ...
,(0,n)
................................
(n,0), ...
,(n,n)
X4 : = (X2,X3)
k 1, k m 1; de la siguiente forma
5.7. Observacin
Apoyndose en las consideraciones y resultados demostrados para el caso
bidimensional ( = 2, 1 = 2 1, 2 = 2 2), se puede ver fcilmente que estas
generalizaciones son tambin funciones totales y computables. Asimismo es sencillo ver
que si la funcin se computa con un programa while que utiliza s variables, entonces
k es computable mediante un programa que no usa ms de s + k variables. La idea es
que slo necesitamos guardar a lo sumo la entrada de tamao k, pues el resto del
programa resulta de repetir el proceso de computacin de un nmero finito de veces.
(n) si m = 1
k m (n) = 1 k m
2 ( 1 (n)) si 2 m k
es decir
cualquier
proyeccin
ponerse
en
de1y1 tanto
. Asel pues
si
como
llamamos
paraprograma
Pel al
output:
programa
descrito
anteriormente
parafuncin
calcularusada
y2,tenemos
que el
2para
siguiente
computa
k 1, puede
tomando
X1 como
variable
input
begin
P; X1 : = X2;
.................... (k 1) veces
P; X1 : = X2
end
6. La funcin Short
Una vez introducidas las definiciones y los resultados anteriores referidos a las
denominadas funciones codificadoras de vectores, estamos en condiciones de demostrar
la proposicin 4.3, relativa a la existencia de la funcin Short. La idea fundamental es
construir, a partir de un programa dado P k-variables, un nuevo programa P cuya
funcin semntica de aridad j coincida con la respectiva de P; verificndose adems que
P sea (j + r)-variables (donde r es la constante que aparece en 4.3.). Obsrvese que el
nmero de variables de P no depende en absoluto del nmero de variables de P, sino
slo de la aridad j considerada. El siguiente lema produce el mtodo de construccin de
P.
6.1. Lema
es una funcin computable de
Existe un nmero natural r, tal que si P( j ) : N j
N
aridad j calculada por un programa while P, entonces se puede construir un programa
while P, (j + r)-variables, verificando: P( 'j ) = P( j ) .
Demostracin
Supongamos que el programa P no posee macros y utiliza un total de k variables,
digamos X1, ... , Xk. Utilizaremos la funcin sucesivas veces para tratar de codificar en
cada momento el contenido de las k variables en una sola variable U cuyo contenido
ser k(X1, ... , Xk). Nos restringiremos al caso en el que la aridad j es menor o igual que
k, ya que en caso contrario se puede tomar P = P. (recordemos que un programa es nvariables si utiliza a lo sumo n variables).
En una primera aproximacin al programa P, ste tendr la siguiente forma
general:
begin
U : = (X1,X2);
U : = (U,X3);
.......................
U : = (U,Xj);
U : = (U,0);
.....(k-j) veces........
U : = (U,0)
Versin modificada de P
X1 : = k 1(U)
end
El primer bloque del programa anterior corresponde a la codificacin en la variable U
k j
U:=W
Lnea (i-1)
W : = k h(U
Short (e)
X1 : = succ(X2);
while X2 X3 do
X2 : = 0
end
Consideremos en este caso j = 2.
Teniendo en cuenta que k = 3 se obtiene el siguiente programa P:
Codificacin de (X1,X2,0)
begin
U : = (X1,X2);
U : = (U,0);
V : = 3 2(U);
V : = succ(V);
W : = (V,3 2(U));
W : = (W,3 3(U));
U : = W;
Versin en P de X1 : = succ(X2)
Versin en P de while X2 X3 do
X2 : = 0
V : = 3 2(U);
W : = 3 3(U);
while V W do
begin
V : = 3 2(U);
V : = 0;
W : = (3 1(U),V);
W : = (W,3 3(U));
U : = W;
V : = 3 2(U);
W : = 3 3(U);
end
Obtencin del contenido de X1
X1 : = 3 1(U);
end
7. Conclusin
En consecuencia, fijada una aridad j mayor o igual que uno, se ha demostrado la
existencia de un programa while cuya funcin semntica de aridad j + 1 es el resultado
de la simulacin de cualquier funcin computable de aridad j ante cualquier entrada.
Como punto final enunciamos de nuevo y demostramos el Teorema de Universalidad,
de acuerdo a todo lo visto anteriormente:
Teorema de Universalidad (Teorema 4.1.)
Para cada j 1 existe una funcin computable : N
j+1
la
enumeracin de las funciones computables dada, en el sentido siguiente:
(e, a1 , a2 ,L, aj ) = e (a1 , a 2 ,L, a j
)
(j)
Demostracin
eN,
(a1 , a2 ,L, a j )
8. Bibliografa
[Kfoury et al 82] Kfoury, A. J., Moll, R. N., Arbib, M. A., A Programming Approach to
Computability, Springer-Verlag, New York, 1982.
[Cutland 80] Cutland, N. J., Computability: An Introduction to Recursive Function
Theory, Cambridge University Press, 1980.
[Smith 94] Smith, C. H., A Recursive Introduction to the Theory of Computation,
Springer-Verlag, 1994.
[Machtey, Young 79] Machtey, M., Young, P., An Introduction to the General Theory
of Algorithms, North-Holland, New York, 1979.
[Davis, Weyuker 83] Davis, M., Weyuker, E. J., Computability, Complexity, and
Languages. Fundamentals of Theoretical Computer Science, Academic Press, New
York, 1983.