Está en la página 1de 11

Computabilidad de funciones universales y existencia de funciones URM-computables que no son primitivo-recursivas

Javier Alejandro Ruiz Gualdr on Tom as Mej a G omez 18 de junio de 2013


Resumen El objetivo ser a probar y llenar los detalles de los teoremas 1.2 y 2.2 del cap tulo 5 del libro Computability - An Introduction to Recursive Function Theory por N.J. Cutland, referentes a los temas nombrados en el t tulo del presente texto.

1.

Computabilidad de funciones universales

A lo largo del curso, en los temas subsecuentes al de la funci on universal, se ha podido apreciar la importancia de las funciones universales a la hora de determinar la computablidad de un sinn umero de funciones recursivas. Sin embargo todos estos resultados reposan en el hecho de que las funciones universales son computables, y por tanto la prueba de este hecho es de inter es (n) singular. Para la denici on de la funci on universal U remitimos al cap tulo 5 del libro de Cutland. All se da una prueba informal y otra formal de que esa funci on es computable. En la prueba informal se da un procedimiento para computar la funci on y luego se concluye su computabilidad mediante la Tesis de Church. Ya que ese procedimiento es ilustrativo como esquema de la prueba formal que daremos en el pr oximo teorema y los lemas que le siguen, lo presentamos aqu . 1

Fije n, y suponga que es dado un ndice e y una n-tupla x. El procedimiento es como sigue:
Decodique el n umero e y escriba el programa Pe . Luego copie la computaci on Pe (x) paso a paso, a cada paso escribiendo la conguraci on de los registros y la siguiente instrucci on a ser ejecutada. Si la computaci on se detiene, entonces el (n) valor requerido de U (e, x) es el n umero que est a en el registro R1 .

Procedamos con la prueba formal. Teorema 1.1. Para cada n, la funci on universal U es computable. Demostraci on. El plan para la prueba formal es mostrar primero c omo usar un solo n umero para codicar la situaci on presente durante una computaci on; entonces mostrar que hay una funci on computable que expresa la dependencia de de (a) el n umero de G odel del programa e, (b) la entrada x, (c) el n umero de pasos de la computaci on que se han completado. Veremos que esto es suciente para probar el teorema. Enfoqu emonos en la computaci on Pe (x). Como se ha visto a lo largo del curso, la situaci on actual durante una computaci on est a completamente especicada por (i) la conguraci on presente de los registros r1 , r2 , r3 , . . . y (ii) el n umero j de la siguiente instrucci on en la computaci on. Dado que solamente nitos de los ri son diferentes de cero, la conguraci on actual puede ser expresada por el n umero c = 2r1 3r2 =
i 1
i pr i

(n)

(Recordemos que pi el i- esimo n umero primo.) Llamaremos a este n umero el c odigo de la conguraci on o simplemente la conguraci on si no hay ambig uedad. Notemos que el contenido de cada ri puede ser recuperado f acilmente de c; de hecho ri = (c)i , donde (x)y es la funci on que arroja el exponente del y - esimo primo en la factorizaci on prima de x si x, y > 0, o cero en caso contrario. La descripci on completa de la situaci on presente puede ser ahora codicada por un solo n umero = (c, j ), al cual llamaremos el estado actual de la

computaci on P (x). Aqu ser a la funci on dada por (m, n) = 2m (2n + 1) 1 cuya inversa est a dada por 1 (x) = (1 (x), 2 (x)), donde 1 (x) = (x + 1)1 1 2 (x) = ((x + 1)/21 (x) 1). 2 Haremos la convenci on de que si la computaci on se ha detenido, entonces j = 0 y c es la conguraci on nal. Notemos que c = 1 ( ) y j = 2 ( ). Ahora bien, c, j, cambian durante la computaci on; su dependencia en el n umero del programa e, la entrada x y el n umero de pasos completados se ve expuesta deniendo las siguientes funciones (n + 2)-arias: cn (e, x, t) = la conguraci on cuando t pasos de Pe (x) se han completado = la conguraci on nal si Pe (x) en t o menos pasos el n umero de la siguiente on para Pe (x) si Pe (x) no se ha detenido instrucci jn (e, x, t) = cuando t pasos han sido despu es de t o menos pasos. completados, 0, si Pe (x) en t o menos pasos. n (e, x, t) = el estado de la computaci on Pe (x) despu es de t pasos = (cn (e, x, t), jn (e, x, t)). Supongamos que n ya ha sido probada computable (esta prueba se provee en el lema 1.4). Claramente si la computaci on Pe se detiene, esta lo hace en t(jn (e, x, t) = 0) pasos; as que la conguraci on nal es cn (e, x, t(jn (e, x, t) = 0)), y tenemos que U (e, x)
(n)

(cn (e, x, t(jn (e, x, t) = 0)))1 ,


(n)

por lo que , si cn y jn son computables, tambi en lo es U (usando sustituci on y minimalizaci on) y as la prueba quedar a completada. 3

Antes de probar la computabilidad de n , probaremos un par de lemas en los que construimos varias funciones auxiliares que serviran para llegar a ese u ltimo resultado. Para el primero de ellos requerimos de un teorema b asico de teor a de n umeros seg un el cual cada x N tiene una u nica representaci on en base binaria como x=
i=0

i 2i ,

(1)

con i = 0 o 1 para todo i. De esto se sigue f acilmente que hay expresiones u nicas para todo x > 0 en las formas x = 2b1 + 2b2 + + 2bl , donde 0 b1 < b2 < . . . < bi y l 1, x = 2a1 + 2a1 +a2 +1 + + 2al +a2 ++ak +k1 . (2) (3)

Lema 1.2. Las siguientes funciones son primitivo-recursivas: (i) (i, x) = i como en la expresion (1). (ii) l ( x) = (iii) b(i, x) = (iv) a(i, x) = l como en la expresion (3), 0 si x > 0 y 1 i l, en caso contrario. bi como en la expresion (2), 0 si x > 0 y 1 i l, en caso contrario. l como en la expresion (2), 0 si x > 0 y 1 i l, en caso contrario.

i i Demostraci on. (i) Dado x = i=0 i 2 , se tiene qt(2 , x) = (i, x) + 2(i + 1, x) + . . . y por tanto (i, x) = rm(2, qt(2i , x)). (ii) l(x) =n umero de i-es tales que (i, x) = 1; por tanto l(x) = i<x (i, x).

(iii) Si x > 0, x = 2b(1,x) +2b(2,x) + +2b(l(x),x) ; se tiene que si 1 i l(x), entonces b(i, x) es el i- esimo ndice k tal que (k, x) = 1. Por tal y < x (k, x) = i , si 1 i ln(x) y x > 0, b(i, x) = k y 0, de lo contrario. (iv)De la denici on: a(i, x) = b(i, x), para i = 0, 1 . b(i, x)) . 1, para i 1. a(i + 1, x) = (b(i + 1, x) Usando las t ecnicas del cap tulo 2 del Cutland a partir de las f ormulas dadas aqu expl citamente, todas estas funciones son primitivo-recursivas. En adelante har a falta distinguir cuidadosamente entre el el n umero de c odigo (I ) de una instrucci on I y su n umero en cualquier programa en el cual esta ocurra (i.e. el n umero j tal que I es la j - esima instrucci on.) Usaremos siempre el t ermino n umero de c odigo cuando se pretenda usar (I ). Para el segundo lema, denamos las siguientes funciones que resultar an ser tambi en primitivo-recursivas: ln(e) = el n umero de instrucciones en el programa Pe . umero de c odigo de la j - esima si 1 j ln(e), el n instrucci on en Pe , gn(e, j ) = 0 de lo contrario. ch(c, z ) = la conguraci on resultante cuando la conguraci on c es operada por la instrucci on con numero de codigo z. si j > 0,

El n umero j de la siguiente instrucci on de la computaci on cuando la conguraci on c es operada por la instrucci on con c odigo z , (c, j, z ) = y esto ocurre como la j - esima instrucci on en el programa, 0 5

de lo contrario.

En este caso, la siguiente instrucci on de la computaci on es denida como j = j + 1, o si Ij es una instrucci on de salto J (m1 , m2 , q ) tendremos que j = q . Recordemos adem as la denici on de la g odelizaci on de los URM-programas, la cual estaba dada por (P ) = ( (I1 ), . . . , (Is )) = 2 (I1 ) + + 2 (I1 )++ (Is )+s1 1, donde Ij es la j - esima instrucci on del programa P . Lema 1.3. Las cuatro funciones ln, gn, ch, previamente denidas son primitivo-recursivas. Demostraci on. Directamente del lema anterior y de la denici on de se sigue que ln(e) = l(e + 1), gn(e, j ) = a(j, e + 1). Ahora probemos para ch y para . Usemos (z/4) para denotar qt(4, z ) y tomemos las siguientes funciones primitivo-recursivas: u(z ) u1 (z ) u2 (z ) v1 (z ) v2 (z ) v3 (z ) = = = = = = (z/4) + 1 1 (z/4) + 1 2 (z/4) + 1 1 (1 (z/4)) + 1 2 (1 (z/4)) + 1 2 (z/4) + 1.

Se ve claramente a partir de la denici on de que esas funciones satisfacen lo suigiente: si si si si z z z z = = = = (Z (m)), entonces u(z ) = m, (S (m)), entonces u(z ) = m, (T (m1 , m2 )), entonces u1 (z ) = m1 y u2 (z ) = m2 , (J (m1 , m2 , q )), entonces v1 (z ) = m1 , v2 (z ) = m2 , y , v3 (z ) = q.

Adem as, las siguientes funciones tambi en son primitivo-recursivas:


c)m zero(c, m) = qt(p( m , c) =

el cambio en la conguraci on c efectuado por la instrucci on Z (m). 6

suc(c, m) = cpm =

el cambio en la conguraci on c efectuado por la instrucci on S (m). el cambio en la conguraci on c efectuado por la instrucci on T (m, n). dar una denici on por casos de ch,

(c)m c)n transf er(c, m, n) = qt(p( m , cpm ) =

A partir de estas funciones podemos de la siguiente manera: zero(c, u(z )) suc(c, u(z )) ch(c, z ) = transf er(c, u1 (z ), u2 (z )) c Por otro lado, una j+1 j + 1 (c, z ) = v3 (z )

si rm(4, z ) = 0 (i.e. z es el c odigo de una instrucci on cero), si rm(4, z ) = 1 (i.e. z es el c odigo de una instrucci on sucesor, si rm(4, z ) = 2 (i.e. z es el c odigo de una instrucci on transferencia), en otro caso.

denici on para podr a ser la siguiente: si rm(4, z ) = 3 (i.e. z es el c odigo de una instrucci on aritm etica), si rm(4, z ) = 3 y (c)v1 (z) = (c)v1 (z) (i.e. z es el c odigo de una instrucci on salto pero los registros comparados por la instrucci on no coinciden), si rm(4, z ) = 3 y (c)v1 (z) = (c)v1 (z) (i.e. z es el c odigo de una instrucci on salto y los registros comparados por la instrucci on coinciden),

Viendo ambas deniciones por casos, queda claro que ch y son primitivorecursivas. Lema 1.4. La funci on n denida en la prueba del teorema 1.1 es primitivorecursiva. Demostraci on. Sean n , cn , jn las mismas funciones denidas en la prueba del teorema 1.1. Denamos dos funciones conf ig y nxt que describen los cambios en cn y en jn durante las computaciones. Supongamos que en alg un 7

punto durante la computaci on bajo Pe el estado actual es = (c, j ), y supongamos que Pe tiene s instrucciones. Podremos describir el efecto de la j - esima instruccion de Pe en el estado deniendo La nueva conguracion despues de que la si 1 j s, j - esima instrucci on de Pe a sido ejecutada, conf ig (e, ) = c en otro caso. El n umero de la siguiente instrucci on si 1 j s y esta on, despues de que la siguiente instrucci on de la computaci j - esima instrucci on de Pe ha sido eje- existe en Pe , nxt(e, ) = cutada en la conguraci on c, 0 de lo contrario. Ahora, n puede ser obtenida mediante cong y nxt por medio de las siguientes ecuaciones de recursi on:
n n (e, x, 0) = (2x1 3x2 . . . px n , 1),

n (e, x, t + 1) = (conf ig (e, n (e, x, t)), nxt(e, n (e, x, t))). Por tanto, n es primitivo-recursiva si las funciones conf ig y nxt lo son; pero a conf ig y nxt las podemos denir en t erminos de las funciones primitivorecursivas del Lema 1.3 as : conf ig (e, ) = nxt(e, ) = ch(1 ( ), gn(e, 2 ( ))), si 1 2 ( ) ln(e), 1 ( ) de lo contrario.

(1 ( ), 2 ( ), gn(e, 2 ( ))), si este n umero es ln(e), 0 de lo contrario, y de esta forma conf ig y nxt son tambi en primitivo-recursivas, por los m etodos estudiados del cap tulo 2 del Cutland.

2.

Existencia de funciones total computables que no son primitivo-recursivas

Recordemos que las funciones primitivo-recursivas son aquellas generadas a partir de las funciones b asicas usando las transformaciones de sustituci on y 8

recursi on para generar nuevas funciones, que a su vez construir an las transformaciones ulteriores. Al pensarlo as , nos damos cuenta que cada funci on primitivo-recursiva podr a ser descrita por un plan en que se especica la transformaci on usada en cada paso (si sustituci on o recursi on) y las funciones usadas en cada una de las transformaciones, bien sean funciones b asicas, o bien ya hayan sido denidas en etapas anteriores del mismo plan. En la prueba del teorema que viene a continuaci on se hace una enumeraci on efectiva de los planes que las determinan las funciones primitivo-recursivas. En adelante, cada plan para construir una funci on f lo llamaremos una denici on de f . Desde luego, una misma funci on puede tener m as de una denici on, pero eso no ser a ningu un problema en lo que corresponde a la prueba. Teorema 2.1. Existe una funci on total URM-computable que no es primitivorecursiva. Demostraci on. Consid erense las funciones primitivas recursivas b asicas cero (denotada por Z ), sucesor (denotada por S ) y proyecci on de la i- esima n on primitiva componente de una n-tupla (denotada por Ui ). A cada funci recursiva b asica f asignemos un c odigo (f ), como se indica a continuaci on: (Z ) = 3 (S ) = 9 (Uin ) = 2i 3n , i, n N con i n. Supongamos que la funci on h est a denida por sustituci on a partir de las funciones f, g1 , g2 , . . . , gt a las que ya hemos asignado c odigos. Entonces asignamos a h el c odigo
t (h) = 2(f ) 3(g1 ) 5(g2 ) . . . pt+1 + 1.

(g )

Ahora supongamos que la funci on h est a denida por recursi on primitiva a partir de las funciones f y g a las cuales ya hemos asignado c odigos. Asignamos a h el c odigo (h) = 2(f ) 3(g) + 2. Hemos asignado un n umero de c odigo a cada denici on de una funci on primitivo-recursiva. Dado un n umero natural m podemos determinar efecitivamente si m es el c odigo para la denici on de alguna funci on primitivo-recursiva f : N N, 9

y determinar c omo f est a construida a partir de las funciones primitivo recursivas b asicas mediante sustituci on y recursi on. Esto podr a hacerse con el siguiente procedimiento: Hallar el residuo de m m odulo 3 y determinar si el u ltimo paso del plan codicado por m es una recursi on (residuo 2), una sustituci on (residuo 1) o una funci on b asica (residuo cero). En cualquiera de los primeros dos casos, hay que restar el residuo y luego hallar la descomposici on prima del n umero resultante para luego aplicar de nuevo todo el procedimiento al exponente de cada primo. Eventualmente se acabar a teniendo un residuo 0, lo cual correspone o biena al c odigo de una funci on b asica, o bien a un m ultiplo de 3 que no codica nada (recordemos que m es nito y por tanto debe haber un n umero nito de recursiones o de sustituciones, ya que no se puede restar 1 y 2 innitas veces). Luego, se reconstruye todo el procedimiento para ver si cada funci on es compatible con cada transformaci on, es decir, si el tama no de su argumento es el adecuado. En caso de que no sea as , o de que se haya llegado a algun m ultiplo de 3 que no es c odigo, se tiene que m no codica ninguna funci on primitivo recursiva. De lo contrario, s codica alguna funci on primitivo-recursiva y como tenemos el plan con que se construye, sabemos cu al es. Por Tesis de Church, sabemos que el procedimiento de determinar si m codica una funci on, y hallar cu al es, es efectivo, y por tanto la funci on : N2 N que denimos por on de la funci on primitivof (n) si m codica la denici (m, n) = recursiva f : N N, 0 en otro caso. es computable. Ahora consideremos la funci on g : N N denida por g (n) = (n, n) + 1, la cual es computable porque lo es. Sea f cualquier funci on primitivo-recursiva y sea m un c odigo para alguna denici on de f . Por denici on de tenemos que f (n) = (m, n), n N, y as f (m) = (m, m). 10

Para tconcluir veamos que g (m) = (m, m) + 1 = (m, m) = f (m), y as g es una funci on computable (de hecho, total computable) diferente de toda funci on primitivo-recursiva.

Referencias
[1] N.J. Cutland, Computability: An Introduction to Recursive Function Theory, Cambridge University Press, 1980. [2] Not All URM Computable Functions are Primitive Recursive, http://www.proofwiki.org/wiki/Not All URM Computable Functions are Primitive Recursive.

11

También podría gustarte