4.4 Batallas entre paradigmas

En esta seccion compararemos los tres paradigmas de computabilidad efectiva que hemos desarrollado anteriormente. Para esto probaremos que cada uno de dichos paradigmas "vence" al otro en el sentido que incluye por lo menos todas las funciones que incluye el otro en su modelizacion del concepto de funcion ΣΣ-efectivamente computable.

4.4.1 Neumann vence a Godel

Usando macros podemos ahora probar que el paradigma imperativo de Neumann es por lo menos tan abarcativo como el funcional de Godel. Mas concretamente:

4.3 (Neumann vence a Godel). Si hh es ΣΣ-recursiva, entonces hh es ΣΣ-computable.

Proof. Probaremos por induccion en kk que

  1. (*) Si hRΣkhRΣk, entonces hh es ΣΣ-computable.

El caso k=0k=0 es dejado al lector. Supongamos (*) vale para kk, veremos que vale para k+1k+1. Sea hRΣk+1RΣk.hRΣk+1RΣk. Hay varios casos

Caso 1. Supongamos h=M(P)h=M(P), con P:ω×ωn×ΣmωP:ω×ωn×Σmω, un predicado perteneciente a RΣkRΣk. Por hipotesis inductiva, PP es ΣΣ-computable y por lo tanto tenemos un macro [IFP(V1,...,V¯n+1,W1,...,Wˉm)GOTOA1][IFP(V1,...,V¯¯¯¯¯¯¯¯¯¯¯¯¯n+1,W1,...,W¯m)GOTOA1] lo cual nos permite realizar el siguiente programa L2[IFP(N¯n+1,N1,...,Nˉn,P1,...,Pˉm)GOTOL1]N¯n+1N¯n+1+1GOTOL2L1N1N¯n+1 Es facil chequear que este programa computa h.

Caso 2. Supongamos h=R(f,G), con f:S1×...×Sn×L1×...×LmΣGa:S1×...×Sn×L1×...×Lm×Σ×ΣΣaΣ elementos de RΣk. Sea Σ={a1,...,ar}. Por hipotesis inductiva, las funciones f, Ga, aΣ, son Σ-computables y por lo tanto tenemos macros [W¯m+1f(V1,...,Vˉn,W1,...,Wˉm)] [W¯m+3Gai(V1,...,Vˉn,W1,...,Wˉm,W¯m+1,W¯m+2)]i=1,...,r Podemos entonces hacer el siguiente programa: [P¯m+3f(N1,...,Nˉn,P1,...,Pˉm)]L¯r+1IFP¯m+1 BEGINS a1 GOTOL1            IFP¯m+1 BEGINS ar GOTOLˉrGOTOL¯r+2L1P¯m+1 P¯m+1[P¯m+3Ga1(N1,...,Nˉn,P1,...,Pˉm,P¯m+2,P¯m+3)]P¯m+2P¯m+2.a1GOTOL¯r+1            LˉrP¯m+1 P¯m+1[P¯m+3Gar(N1,...,Nˉn,P1,...,Pˉm,P¯m+2,P¯m+3)]P¯m+2P¯m+2.arGOTOL¯r+1L¯r+2P1P¯m+3 Es facil chequear que este programa computa h.

El resto de los casos son dejados al lector.  


Un corolario importante de esta batalla es el:

4.12 (Segundo Manatial de Macros). Sea Σ un alfabeto finito. Si f:Dfωn×Σmωg:Dgωn×ΣmΣP:DPωn×Σm{0,1} son Σ-recursivas, entonces en SΣ hay macros [V¯n+1f(V1,...,Vˉn,W1,...,Wˉm)][W¯m+1g(V1,...,Vˉn,W1,...,Wˉm)][IFP(V1,...,Vˉn,W1,...,Wˉm)GOTOA1]

4.4.1.1 Se lleno de macros

Cabe destacar que el Segundo Manantial de Macros nos dice que en SΣ hay macros [V¯n+1f(V1,...,Vˉn,W1,...,Wˉm)][W¯m+1g(V1,...,Vˉn,W1,...,Wˉm)][IFP(V1,...,Vˉn,W1,...,Wˉm)GOTOA1] para todas las funciones Σ-mixtas y predicados Σ-mixtos que hemos trabajado hasta el momento en la materia ya que todas eran Σ-p.r.. Esto fortalece mucho al lenguaje SΣ ya que ahora tenemos macros para todas las funciones y predicados cotidianos en la matematica, ademas de tener macros para todas las funciones y predicados Σ-computables, debido al Primer Manantial de Macros. Veamos un ejemplo:

4.42. Supongamos S1,S2ωn×Σm son conjuntos Σ-enumerables. Entonces S1S2 es Σ-enumerable.

Proof. Podemos suponer que ni S1 ni S2 son vacios ya que de lo contrario el resultado es trivial. Ademas supondremos que n=2 y m=1.

La idea de la prueba es la misma que la que usamos para probar que la union de conjuntos Σ-efectivamente enumerables es Σ-efectivamente enumerable. Daremos usando macros un programa que enumera a S1S2 y luego aplicaremos la Caracterizacion de Σ-enumerabilidad. Por hipotesis hay funciones F:ωω×ω×Σ y G:ωω×ω×Σ tales que F(1), F(2), F(3), G(1), G(2) y G(3) son Σ-computables, Im(F)=S1 y Im(G)=S2. O sea que nuestro Primer Manantial de Macros nos dice que en SΣ hay macros [V2F(1)(V1)][V2F(2)(V1)][W1F(3)(V1)][V2G(1)(V1)][V2G(2)(V1)][W1G(3)(V1)] Ya que el predicado Par=λx[x es par] es Σ-p.r., el Segundo Manantial de Macros nos dice que en SΣ hay un macro: [IF Par(V1) GOTO A1] el cual escribiremos de la siguiente manera mas intuitiva [IF V1 es par GOTO A1] Ya que la funcion D=λx[x/2] es Σ-p.r., el Segundo Manantial de Macros nos dice que hay un macro: [V2D(V1)] el cual escribiremos de la siguiente manera mas intuitiva [V2V1/2] Sea P el siguiente programa: [IF N1 es par GOTO L1N1N1˙1[N1111N1/2][N1G(1)(N1111)][N2G(2)(N1111)][P1G(3)(N1111)]GOTO L2L1[N1111N1/2][N1F(1)(N1111)][N2F(2)(N1111)][P1F(3)(N1111)]L2SKIP Es facil ver que P cumple (a) y (b) de (3) de la Caracterizacion de Σ-enumerabilidad por lo cual S1S2 es Σ-enumerable.  


En forma analoga a lo hecho recien, se pueden probar, copiando la respectiva idea en el paradigma de la computabilidad efectiva, los siguientes resultados:

  1. - Supongamos S1,S2ωn×Σm son conjuntos Σ-enumerables. Entonces S1S2 es Σ-enumerable.

  2. - Sea Sωn×Σm. Si S es Σ-computable, entonces S es Σ-enumerable

O sea que con el uso de nuestros poderosos macros asociados a funciones y predicados Σ-p.r. (gracias al Segundo Manatial) mas los que provee el Primer Manatial podemos simular los procedimientos efectivos realizados dentro del paradigma filosofico con programas concretos del lenguaje SΣ. Pero esto no es del todo asi, ya que los ejemplos vistos recien no hacen uso del concepto de “ejecucion de una cantidad de pasos”, idea que en muchos diseños de nuestros procedimentos efectivos es usada. Por ejemplo si queremos “copiar” dentro del paradigama imperativo la prueba del resultado

  1. - Si f:Dfωn×Σmω es una funcion Σ-efectivamente computable, entonces Df es Σ-efectivamente enumerable

notaremos la dificultad de aun no poder hablar de cantidad de pasos en la ejecucion del programa que compute a f. O sea nuestro Primer Manatial nos da un macro de asignacion para f pero no es claro de como correr una expansion de dicho macro una cierta cantidad de veces. Esto lo lograremos usando macros asociados a las funciones Haltn,m, En,m# y En,m las cuales se usan en la batalla Godel vence a Neumann que viene a continuacion. Estas funciones seran clave a la hora de simular con programas a procedimientos efectivos que en su funcionamiento involucran el funcionamiento de otros procedimientos efectivos.

O sea que luego de ambas batallas entre Godel y Neumann, el paradigma imperativo se vera fortalecido sustancialmente. Tambien mas adelante en la Seccion Resultados basicos presentados en paradigma recursivo veremos como los desarrollos hechos en ambas batallas entre Godel y Neumann fortalecen al paradigma funcional. Otro ejemplo de esto ultimo es la Forma Normal de Kleene donde se prueba que toda funcion Σ-recursiva es expresable en la forma gM(P) donde g es una funcion Σ-p.r. y P es un predicado Σ-p.r..

4.4.2 Godel vence a Neumann

Para probar que toda funcion Σ-computable es Σ-recursiva debemos hacer un profundo estudio de la recursividad del lenguaje SΣ. Primero analizaremos la recursividad de la sintaxis de SΣ.

4.4.2.1 Analisis de la recursividad de la sintaxis de SΣ

Primero probaremos dos lemas que muestran que la sintaxis de SΣ es (ΣΣp)-recursiva primitiva. Recordemos que Sig:NumNum fue definida de la siguiente manera Sig(ε)=1Sig(α0)=α1Sig(α1)=α2Sig(α2)=α3Sig(α3)=α4Sig(α4)=α5Sig(α5)=α6Sig(α6)=α7Sig(α7)=α8Sig(α8)=α9Sig(α9)=Sig(α)0 Y tambien definimos Dec:ωNum de la siguiente manera Dec(0)=εDec(n+1)=Sig(Dec(n)) Recordemos tambien que para hacer mas agil la notacion escribimos ˉn en lugar de Dec(n).

4.43. Sea Σ un alfabeto cualquiera. La funcion Dec es (ΣΣp)-p.r..

Proof. Es facil ver que Dec es Num-p.r.. Ya que tambien es (ΣΣp)-mixta, el Teorema 4.2 nos dice que es (ΣΣp)-p.r.. En el Lema 4.12 se da una prueba facil de este hecho, sin recurrir al citado teorema.  


4.44. Para cada n,xω, tenemos que |ˉn|x si y solo si n10x1

4.45. InsΣ es un conjunto (ΣΣp)-p.r..

Proof. Para simplificar la prueba asumiremos que Σ={@,}. Ya que InsΣ es union de los siguientes conjuntos L1={NˉkNˉk+1:kN}L2={NˉkNˉk˙1:kN}L3={NˉkNˉn:k,nN}L4={Nˉk0:kN}L5={IFNˉk0GOTOLˉm:k,mN}L6={PˉkPˉk.@:kN}L7={PˉkPˉk.:kN}L8={Pˉk Pˉk:kN}L9={PˉkPˉn:k,nN}L10={Pˉkε:kN}L11={IFPˉkBEGINS@GOTOLˉm:k,mN}L12={IFPˉkBEGINSGOTOLˉm:k,mN}L13={GOTOLˉm:mN}L14={SKIP}L15={Lˉkα:kNαL1...L14} solo debemos probar que L1,...,L15 son (ΣΣp)-p.r.. Veremos primero por ejemplo que L11={IFPˉkBEGINS@GOTOLˉm:k,mN} es (ΣΣp)-p.r.. Primero notese que αL11 si y solo si existen k,mN tales que α=IFPˉkBEGINS@GOTOLˉm Mas formalmente tenemos que αL11 si y solo si (kN)(mN)α=IFPˉkBEGINS@GOTOLˉm Ya que cuando existen tales k,m tenemos que ˉk y ˉm son subpalabras de α, el lema anterior nos dice que αL11 si y solo si (kN)k10|α|(mN)m10|α|α=IFPˉkBEGINS@GOTOLˉm Sea P=λmkα[α=IFPˉkBEGINS@GOTOLˉm] Ya que Dλk[ˉk]=ω, tenemos que DP=ω2×(ΣΣp). Notese que P=λαβ[α=β][p2,13,f] donde f=λα1α2α3α4[α1α2α3α4][C2,1IFP,λk[ˉk]p2,12,C2,1BEGINS@GOTOL,λk[ˉk]p2,11] lo cual nos dice que P es (ΣΣp)-p.r..

Notese que χ(ΣΣp)L11=λα[(kN)k10|α|(mN)m10|α|P(m,k,α)] Esto nos dice que podemos usar dos veces el Lema 4.22 para ver que χ(ΣΣp)L11 es (ΣΣp)-p.r.. Veamos como. Sea Q=λkα[(mN)m10|α|P(m,k,α)] Por el Lema 4.22 tenemos que λxkα[(mN)mxP(m,k,α)] es (ΣΣp)-p.r. lo cual nos dice que Q=λxkα[(mN)mxP(m,k,α)][λα[10|α|]p1,12,p1,11,p1,12] lo es. Ya que χ(ΣΣp)L11=λα[(kN)k10|α|Q(k,α)] podemos en forma similar aplicar el Lema 4.22 y obtener finalmente que χ(ΣΣp)L11 es (ΣΣp)-p.r..

En forma similar podemos probar que L1,...,L14 son (ΣΣp)-p.r.. Esto nos dice que L1...L14 es (ΣΣp)-p.r.. Notese que L1...L14 es el conjunto de las instrucciones basicas de SΣ. Llamemos InsBasΣ a dicho conjunto. Para ver que L15 es (ΣΣp)-p.r. notemos que χ(ΣΣp)L15=λα[(kN)k10|α|(βInsBasΣ)|β||α|α=Lˉkβ] lo cual nos dice que aplicando dos veces el Lema 4.22 obtenemos que χ(ΣΣp)L15 es (ΣΣp)-p.r.. Ya que InsΣ=InsBasΣL15 tenemos que InsΣ es (ΣΣp)-p.r..  


Recordemos que Bas:InsΣ(ΣΣp), fue definida por Bas(I)={Jsi I es de la forma LˉkJ, con kN y JInsΣIcaso contrario Definamos Lab:InsΣ(ΣΣp) de la siguiente manera Lab(I)={Lˉksi I es de la forma LˉkJ, con kN y JInsΣεcaso contrario

4.46. Bas y Lab son funciones (ΣΣp)-p.r.

Proof. Sea un orden total sobre ΣΣp. Sea L={Lˉk:kN}{ε}. Dejamos al lector probar que L es un conjunto (ΣΣp)-p.r.. Sea P=λIα[αInsΣIInsΣ[α]1L(βL) I=βα] Note que DP=(ΣΣp)2. Dejamos al lector probar que P es (ΣΣp)-p.r.. Notese ademas que cuando IInsΣ tenemos que P(I,α)=1 sii α=Bas(I). Dejamos al lector probar que Bas=M(P) por lo que para ver que Bas es (ΣΣp)-p.r., solo nos falta ver que la funcion Bas es acotada por alguna funcion (ΣΣp)-p.r. y (ΣΣp)-total. Pero esto es trivial ya que |Bas(I)||I|=λα[|α|](I), para cada IInsΣ.

Finalmente note que Lab=M(λIα[αBas(I)=I]) lo cual nos dice que Lab es (ΣΣp)-p.r..  


Recordemos que dado un programa P habiamos definido IPi=ε, para i=0 o i>n(P). O sea que la funcion (ΣΣp)-mixta λiP[IPi] tiene dominio igual a ω×ProΣ. Notese que usamos notacion lambda respecto del alfabeto ΣΣp. Ademas notese que usamos la variable P en la notacion lambda por un tema de comodidad psicologica dado que la expresion Iαi esta definida solo cuando α es un programa pero podriamos haber escrito λiα[Iαi] y sigue siendo la misma funcion.

4.47.

  1. (a) ProΣ es un conjunto (ΣΣp)-p.r.

  2. (b) λP[n(P)] y λiP[IPi] son funciones (ΣΣp)-p.r..

Proof. Ya que ProΣ=DλP[n(P)] tenemos que (b) implica (a). Para probar (b) Sea un orden total sobre ΣΣp. Sea P el siguiente predicado

λx[Lt(x)>0(tN)tLt(x)((x)t)InsΣ

            (tN)tLt(x)(mN)¬(Lˉm t-final ((x)t))

                 (jN)jLt(x)(α(ΣΣp)Num)Lˉmα t-inicial((x)j)]

Notese que DP=N y que P(x)=1 sii Lt(x)>0, ((x)t)InsΣ, para cada t=1,...,Lt(x) y ademas t=Lt(x)t=1((x)t)ProΣ. Para ver que P es (ΣΣp)-p.r. solo nos falta acotar el cuantificador (mN) de la expresion lambda que define a P. Ya que nos interesan los valores de m para los cuales ˉm es posiblemente una subpalabra de alguna de las palabras ((x)j), el Lema 4.44 nos dice que una cota posible es 10max{|((x)j)|:1jLt(x)}1. Dejamos al lector los detalles de la prueba de que P es (ΣΣp)-p.r.. Sea Q=λxα[P(x)α=t=Lt(x)t=1((x)t)]. Note que DQ=N×(ΣΣp). Claramente Q es (ΣΣp)-p.r.. Ademas note que DM(Q)=ProΣ. Notese que para PProΣ, tenemos que M(Q)(P) es aquel numero tal que pensado como infinitupla (via mirar su secuencia de exponentes) codifica la secuencia de instrucciones que forman a P. Es decir M(Q)(P)=#(IP1),#(IP2),...,#(IPn(P)),0,0,... Por (b) del Lema 4.25, M(Q) es (ΣΣp)-p.r. ya que para cada PProΣ tenemos que M(Q)(P)=#(IP1),#(IP2),...,#(IPn(P)),0,0,...=n(P)Πi=1pr(i)#(IP1)|P|Πi=1pr(i)#(P) Ademas tenemos que λP[n(P)]=λx[Lt(x)]M(Q)λiP[IPi]=g[p1,11,M(Q)p1,12] donde g=C1,10|{0}×ωλix[(x)i], lo cual dice que λP[n(P)] y λiP[IPi] son funciones (ΣΣp)-p.r..  


4.4.2.2 Analisis de la recursividad de la semantica de SΣ

Para estudiar la recursividad de la semantica de SΣ deberemos definir varias funciones que tienen que ver con el funcionamiento de un programa y estudiar su recursividad.

Las funciones in,m, En,m# y En,m

Sean n,m0 fijos. Definamos entonces las funciones in,m:ω×ωn×Σm×ProΣωEn,m#:ω×ωn×Σm×ProΣω[N]En,m:ω×ωn×Σm×ProΣΣ[N] de la siguiente manera (in,m(0,x,α,P),En,m#(0,x,α,P),En,m(0,x,α,P))=(1,(x1,...,xn,0,...),(α1,...,αm,ε,...))(in,m(t+1,x,α,P),En,m#(t+1,x,α,P),En,m(t+1,x,α,P))=SP(in,m(t,x,α,P),En,m#(t,x,α,P),En,m(t,x,α,P)) Notese que (in,m(t,x,α,P),En,m#(t,x,α,P),En,m(t,x,α,P)) es la descripcion instantanea que se obtiene luego de correr P una cantidad t de pasos partiendo del estado ((x1,...,xn,0,...),(α1,...,αm,ε,...)) Es importante notar que si bien in,m es una funcion (ΣΣp)-mixta, ni En,m# ni En,m lo son.

Definamos para cada jN, funciones En,m#j:ω×ωn×Σm×ProΣωEn,mj:ω×ωn×Σm×ProΣΣ de la siguiente manera En,m#j(t,x,α,P)=j-esima coordenada de En,m#(t,x,α,P)En,mj(t,x,α,P)=j-esima coordenada de En,m(t,x,α,P) Notese que En,m#(t,x,α,P)=(En,m#1(t,x,α,P),En,m#2(t,x,α,P),...)En,m(t,x,α,P)=(En,m1(t,x,α,P),En,m2(t,x,α,P),...) Nuestro proximo objetivo es mostrar que las funciones in,m, En,m#j, En,mj son (ΣΣp)-p.r.

Para esto primero debemos probar un lema el cual muestre que una ves codificadas las descripciones instantaneas en forma numerica, las funciones que dan la descripcion instantanea sucesora son (ΣΣp)-p.r.. Dado un orden total sobre ΣΣp, codificaremos las descripciones instantaneas haciendo uso de las biyecciones ω[N]N(s1,s2,...)s1,s2,...Σ[N]N(σ1,σ2,...)#(σ1),#(σ2),... Es decir que a la descripcion instantanea (i,(s1,s2,...),(σ1,σ2,...)) la codificaremos con la terna (i,s1,s2,...,#(σ1),#(σ2),...)ω×N×N Es decir que una terna (i,x,y)ω×N×N codificara a la descripcion instantanea (i,((x)1,(x)2,...),(((y)1),((y)2),...)) Definamos s:ω×N×N×ProΣωS#:ω×N×N×ProΣωS:ω×N×N×ProΣω de la siguiente manera s(i,x,y,P)=primera coordenada de la codificacion de la descripcion instantaneasucesora de (i,((x)1,(x)2,...),(((y)1),((y)2),...)) en P S#(i,x,y,P)=segunda coordenada de la codificacion de la descripcion instantaneasucesora de (i,((x)1,(x)2,...),(((y)1),((y)2),...)) en P S(i,x,y,P)=tercera coordenada de la codificacion de la descripcion instantaneasucesora de (i,((x)1,(x)2,...),(((y)1),((y)2),...)) en P Notese que la definicion de estas funciones depende del orden total sobre ΣΣp.

4.48. Dado un orden total sobre ΣΣp, las funciones s, S# y S son (ΣΣp)-p.r..

Proof. Necesitaremos algunas funciones (ΣΣp)-p.r.. Dada una instruccion I en la cual al menos ocurre una variable, usaremos #Var1(I) para denotar el numero de la primer variable que ocurre en I. Por ejemplo #Var1(LˉnIFNˉk0GOTOLˉm)=k Notese que λI[#Var1(I)] tiene dominio igual a InsΣL, donde L es la union de los siguientes conjuntos {GOTO Lˉm:mN}{Lˉk GOTO Lˉm:k,mN}{SKIP}{Lˉk SKIP:kN} Dada una instruccion I en la cual ocurren dos variables, usaremos #Var2(I) para denotar el numero de la segunda variable que ocurre en I. Por ejemplo #Var2(NˉkNˉm)=m Notese que el dominio de λI[#Var2(I)] es igual a la union de los siguientes conjuntos {NˉkNˉm:k,mN}{Lˉj NˉkNˉm:j,k,mN}{PˉkPˉm:k,mN}{Lˉj PˉkPˉm:j,k,mN} Ademas notese que para una instruccion I tenemos que #Var1(I)=mink(Nˉk ocu INˉk ocu IPˉk ocu IPˉkBocu I)#Var2(I)=mink(Nˉk t-final INˉk+ ocu INˉk˙ ocu IPˉk t-final IPˉk. ocu I) Esto nos dice que si llamamos P al predicado λkα[αInsΣ(Nˉk ocu αNˉk ocu αPˉk ocu αPˉkBocu α)] entonces λI[#Var1(I)]=M(P) por lo cual λI[#Var1(I)] es (ΣΣp)-p.r. Similarmente se puede ver que λI[#Var2(I)] es (ΣΣp)-p.r.. Sea F˙:N×Nω(x,j)(x)1,....,(x)j1,(x)j˙1,(x)j+1,... Ya que F˙(x,j)={Q(x,pr(j))si pr(j) divide xxcaso contrario tenemos que F˙ es (ΣΣp)-p.r.. Sea F+:N×Nω(x,j)(x)1,....,(x)j1,(x)j+1,(x)j+1,... Ya que F+(x,j)=x.pr(j) tenemos que F+ es (ΣΣp)-p.r.. Sea F:N×N×Nω(x,j,k)(x)1,....,(x)j1,(x)k,(x)j+1,... Ya que F(x,j,k)=Q(x,pr(j)(x)j).pr(j)(x)k tenemos que F es (ΣΣp)-p.r.. Sea F0:N×Nω(x,j)(x)1,....,(x)j1,0,(x)j+1,... Es facil ver que F0 es (ΣΣp)-p.r.. Para cada aΣ, sea Fa:N×Nω(x,j)(x)1,....,(x)j1,#(((x)j)a),(x)j+1,... Es facil ver que Fa es (ΣΣp)-p.r.. En forma similar puede ser probado que F:N×Nω(x,j)(x)1,....,(x)j1,#((((x)j))),(x)j+1,... es (ΣΣp)-p.r.

Dado (i,x,y,P)ω×N×N×ProΣ, tenemos varios casos en los cuales los valores s(i,x,y,P),S#(i,x,y,P) y S(i,x,y,P) pueden ser obtenidos usando las funciones antes definidas:

  1. (1) CASO i=0i>n(P). Entonces s(i,x,y,P)=iS#(i,x,y,P)=xS(i,x,y,P)=y

  2. (2) CASO (jω)Bas(IPi)=NˉjNˉj+1. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=F+(x,#Var1(IPi))S(i,x,y,P)=y

  3. (3) CASO (jω)Bas(IPi)=NˉjNˉj˙1. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=F˙(x,#Var1(IPi))S(i,x,y,P)=y

  4. (4) CASO (j,kω)Bas(IPi)=NˉjNˉk. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=F(x,#Var1(IPi),#Var2(IPi))S(i,x,y,P)=y

  5. (5) CASO (j,kω)Bas(IPi)=Nˉj0. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=F0(x,#Var1(IPi))S(i,x,y,P)=y

  6. (6) CASO (j,mω)(Bas(IPi)=IFNˉj0GOTOLˉm(x)j=0). Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=xS(i,x,y,P)=y

  7. (7) CASO (j,mω)(Bas(IPi)=IFNˉj0GOTOLˉm(x)j0). Entonces s(i,x,y,P)=minl(Lab(IPl)εLab(IPl) t\textrm{-final} IPi)S#(i,x,y,P)=xS(i,x,y,P)=y

  8. (8) CASO (jω)Bas(IPi)=PˉjPˉj.a. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=xS(i,x,y,P)=Fa(y,#Var1(IPi))

  9. (9) CASO (jω)Bas(IPi)=Pˉj Pˉj. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=xS(i,x,y,P)=F(y,#Var1(IPi))

  10. (10) CASO (j,kω)Bas(IPi)=PˉjPˉk. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=xS(i,x,y,P)=F(y,#Var1(IPi),#Var2(IPi))

  11. (11) CASO (jω)Bas(IPi)=Pˉjε. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=xS(i,x,y,P)=F0(y,#Var1(IPi))

  12. (12) CASO (j,mω)(aΣ)(Bas(IPi)=IFPˉjBEGINSaGOTOLˉm[((y)j)]1a). Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=xS(i,x,y,P)=y

  13. (13) CASO (j,mω)(aΣ)(Bas(IPi)=IFPˉjBEGINSaGOTOLˉm[((y)j)]1=a). Entonces s(i,x,y,P)=minl(Lab(IPl)εLab(IPl) t\textrm{-final} IPi)S#(i,x,y,P)=xS(i,x,y,P)=y

  14. (14) CASO (jω)Bas(IPi)=GOTO Lˉj. Entonces s(i,x,y,P)=minl(Lab(IPl)εLab(IPl) t\textrm{-final} IPi)S#(i,x,y,P)=xS(i,x,y,P)=y

  15. (15) CASO Bas(IPi)=SKIP. Entonces s(i,x,y,P)=i+1S#(i,x,y,P)=xS(i,x,y,P)=y

O sea que los casos anteriores nos permiten definir conjuntos S1,...,S15, los cuales son disjuntos de a pares y cuya union da el conjunto ω×N×N×ProΣ, de manera que cada una de las funciones s,S# y S pueden escribirse como union disjunta de funciones (ΣΣp)-p.r. restrinjidas respectivamente a los conjuntos S1,...,S15. Ya que los conjuntos S1,...,S15 son (ΣΣp)-p.r. el Lema 4.19 nos dice que s,S# y S lo son.  


Aparte del lema anterior, para probar que las funciones in,m, En,m#j y En,mj son (ΣΣp)-p.r., nos sera necesario el siguiente resultado. Recordemos que para x1,...,xnω, usabamos x1,...,xn para denotar x1,...,xn,0,.... Ademas recordemos que en el Lema 4.28 probamos que para cada n1, la funcion λx1...xn[x1,...,xn] es -p.r.

4.49. Sean fi:S1×...×Sn×L1×...×Lmωgi:ωk×ω×S1×...×Sn×L1×...×LmωFi:ω×S1×...×Sn×L1×...×Lmω con i=1,...,k, funciones Σ-mixtas. Supongamos que Fi(0,x,α)=fi(0,x,α)Fi(t+1,x,α)=gi(F1(t,x,α),...,Fk(t,x,α),t,x,α) para cada i=1,...,k, tω y (x,α)S1×...×Sn×L1×...×Lm. Entonces si las funciones f1,...,fk,g1,...,gk son Σ-p.r., las funciones F1,...,Fk lo son.

Proof. Para mayor claridad haremos el caso k=2. Sea F=λtxα[F1(t,x,α),F2(t,x,α)] Es claro que si F es Σ-p.r., entonces lo es cada Fi. Notese que F(0,x,α)=f1(x,α),f2(x,α)F(t+1,x,α)=g1((F(t,x,α))1,(F(t,x,α))2,t,x,α),g2((F(t,x,α))1,(F(t,x,α))2,t,x,α) lo cual nos dice que F=R(f,g) donde f=λxα[f1(x,α),f2(x,α)]g=λAtxα[g1((A)1,(A)2,t,x,α),g2((A)1,(A)2,t,x,α)]  


Ahora usando los dos lemas anteriores podemos probar el siguiente importante resultado.

4.13. Sean n,m0. Las funciones in,m, En,m#j, En,mj, j=1,2,..., son (ΣΣp)-p.r.

Proof. Sea un orden total sobre ΣΣp y sean s, S# y S las funciones definidas previamente al Lema 4.48. Definamos Kn,m#=λtxαP[En,m#1(t,x,α,P),En,m#2(t,x,α,P),...]Kn,m=λtxαP[#(En,m1(t,x,α,P)),#(En,m2(t,x,α,P)),...] Notese que in,m(0,x,α,P)=1Kn,m#(0,x,α,P)=x1,...,xnKn,m(0,x,α,P)=#(α1),...,#(αm)in,m(t+1,x,α,P)=s(in,m(t,x,α,P),Kn,m#(t,x,α,P),Kn,m(t,x,α,P))Kn,m#(t+1,x,α,P)=S#(in,m(t,x,α,P),Kn,m#(t,x,α,P),Kn,m(t,x,α,P))Kn,m(t+1,x,α,P)=S(in,m(t,x,α,P),Kn,m#(t,x,α,P),Kn,m(t,x,α,P)) Por el Lema 4.49 tenemos que in,m, Kn,m# y Kn,m son (ΣΣp)-p.r.. Ademas notese que En,m#j=λtxαP[(Kn,m#(t,x,α,P))j]En,mj=λtxαP[((Kn,m(t,x,α,P))j)] por lo cual las funciones En,m#j, En,mj, j=1,2,..., son (ΣΣp)-p.r.  


Las funciones Haltn,m y Tn,m.

Dados n,mω, definamos: Haltn,m=λtxαP[in,m(t,x,α,P)=n(P)+1] Notese que DHaltn,m=ω×ωn×Σm×ProΣ (ojo que aqui la notacion lambda es respecto del alfabeto ΣΣp). Ademas notese que usamos la variable P en la notacion lambda por un tema de comodidad psicologica dado que in,m esta definida solo cuando la ultima coordenada es un programa pero podriamos haber escrito λtxαα[in,m(t,x,α,α)=n(α)+1] y sigue siendo la misma funcion.

Cabe destacar que Haltn,m tiene una descripcion muy intuitiva, ya que dado (t,x,α,P)ω×ωn×Σm×ProΣ, tenemos que Haltn,m(t,x,α,P)=1 si y solo si el programa P se detiene luego de t pasos partiendo desde el estado x1,...,xn,α1,...,αm.

4.50. Haltn,m es (ΣΣp)-p.r.

Proof. Notar que Haltn,m=λxy[x=y][in,m,λP[n(P)+1]p1+n,m+11+n+m+1].  


Ahora definamos Tn,m=M(Haltn,m). Notese que DTn,m={(x,α,P):P se detiene partiendo de x1,...,xn,α1,...,αm} y para (x,α,P)DTn,m tenemos que Tn,m(x,α,P)= cantidad de pasos necesarios para que P se detenga partiendo de x1,...,xn,α1,...,αm. En algun sentido, la funcion Tn,m mide el tiempo que tarda en detenerse P

4.14. Tn,m es (ΣΣp)-recursiva

Proof. Es directo del Lema 4.25 ya que Haltn,m es (ΣΣp)-p.r.  


Las funciones Φn,m# y Φn,m.

Para n,mω definamos la funcion Φn,m# de la siguiente manera: DΦn,m#={(x,α,P)ωn×Σm×ProΣ:(x,α)DΨn,m,#P}Φn,m#(x,α,P)=Ψn,m,#P(x,α), para cada (x,α,P)DΦn,m# Notese que DΦn,m#={(x,α,P):P se detiene partiendo de x1,...,xn,α1,...,αm} y para cada (x,α,P)DΦn,m#, se tiene que Φn,m#(x,α,P)= valor que queda en la variable N1 cuando P se detiene partiendo de x1,...,xn,α1,...,αm.

Similarmente, definamos la funcion Φn,m de la siguiente manera: DΦn,m={(x,α,P)ωn×Σm×ProΣ:(x,α)DΨn,m,P}Φn,m(x,α,P)=Ψn,m,P(x,α), para cada (x,α,P)DΦn,m Notese que Φn,m#=λxαP[Ψn,m,#P(x,α)]Φn,m=λxαP[Ψn,m,P(x,α)]

4.4. Las funciones Φn,m# y Φn,m son (ΣΣp)-recursivas.

Proof. Veremos que Φn,m# es (ΣΣp)-recursiva. Notar que DTn,m=DΦn,m#. Notese que para (x,α,P)DTn,m=DΦn,m# tenemos que Φn,m#(x,α,P)=En,m#1(Tn,m(x,α,P),x,α,P) lo cual con un poco mas de trabajo nos permite probar que Φn,m#=En,m#1[Tn,m,pn,m+11,...,pn,m+1n+m+1] Ya que la funcion En,m#1 es (ΣΣp)-p.r. y Tn,m es (ΣΣp)-r., tenemos que Φn,m# es (ΣΣp)-r.  


4.4.2.3 Godel vence a Neumann

Ahora nos sera facil probar que el paradigma de Godel es por lo menos tan abarcativo como el imperativo de Von Neumann. Mas concretamente:

4.5 (Godel vence a Neumann). Si f:Dfωn×ΣmO es Σ-computable, entonces f es Σ-recursiva.

Proof. Haremos el caso O=Σ. Sea P0 un programa que compute a f. Primero veremos que f es (ΣΣp)-recursiva. Note que f=Φn,m[pn,m1,...,pn,mn+m,Cn,mP0] donde cabe destacar que pn,m1,...,pn,mn+m son las proyecciones respecto del alfabeto ΣΣp, es decir que tienen dominio ωn×(ΣΣp)m. Ya que Φn,m es (ΣΣp)-recursiva tenemos que f lo es. O sea que el Teorema 4.2 nos dice que f es Σ-recursiva.  


Un corolario interesante que se puede obtener del teorema anterior es que toda funcion Σ-recursiva puede obtenerse combinando las reglas basicas en una forma muy particular.

4.4 (Forma Normal de Kleene). Si f:Dfωn×ΣmO es Σ-recursiva, entonces existe un predicado Σ-p.r. P:N×ωn×Σmω y una funcion Σ-p.r. g:NO tales que f=gM(P).

Proof. Supongamos que O=Σ. Sea P0 un programa el cual compute a f. Sea un orden total sobre Σ. Note que podemos tomar P=λtxα[Haltn,m((t)1,x,α,P0)(t)2=#(En,m1((t)1,x,α,P0))]g=λt[((t)2)] (Justifique por que P es Σ-p.r..)  


A continuacion veremos ejemplos naturales de funciones (ΣΣp)-recursivas que no son (ΣΣp)-recursivas primitivas. Cabe destacar que la prueba se basa en la Proposicion 4.6 (enunciada sin demostracion) la cual nos dice que cualquiera sea el alfabeto finito Σ, siempre hay una funcion que es Σ-recursiva y no es Σ-recursiva primitiva.

4.15. Cualesquiera sean n,mω, se tiene que las funciones Tn,m, Φn,m# y Φn,m no son (ΣΣp)-p.r.

Proof. Fijemos n,mω. Probaremos que Φn,m# es (ΣΣp)-p.r. sii Φ0,0# es (ΣΣp)-p.r.. Sean f1,f2:ωn×Σm(ΣΣp) dadas por f1(x,α)=(N1N1+1)x1...(NˉnNˉn+1)xnf1(x,α)=(i=|α1|i=1P1P1.[α1]i)...(i=|αm|i=1P1P1.[αm]i) Sea f:ωn×Σm×ProΣ(ΣΣp) dada por f(x,α,P)=f1(x,α)f1(x,α)P Es facil ver que f es (ΣΣp)-p.r.. Notese que Φn,m#=Φ0,0#f. Ademas notese que Φ0,0#=Φn,m#[C0,10,...,C0,10,C0,1ε,...,C0,1ε,p0,11] Ya que f y las funciones C0,10,C0,1ε,p0,11 son (ΣΣp)-p.r., tenemos que Φn,m# es (ΣΣp)-p.r. sii Φ0,0# lo es.

Supongamos ahora que para algunos k,lω se tiene que Φk,l# es (ΣΣp)-p.r.. Llegaremos a un absurdo. Por lo antes probado tenemos que Φn,m# es (ΣΣp)-p.r., cualesquiera sean n,mω. Notese que de la prueba del teorema anterior sigue que toda funcion Σ-computable con imagen contenida en ω es de la forma Φn,m#[pn,m1,...,pn,mn+m,Cn,mP0], para algunos n,mω y P0ProΣ. Pero entonces toda funcion Σ-computable con imagen contenida en ω es (ΣΣp)-p.r., lo cual por la batalla Neumann vence a Godel nos dice que toda funcion Σ-recursiva con imagen contenida en ω es (ΣΣp)-p.r.. Por el Teorema de Independencia del Alfabeto tenemos que toda funcion Σ-recursiva con imagen contenida en ω es Σ)-p.r., lo cual contradice la Proposicion 4.6.

Ahora supongamos que hay n,mω tales que Tn,m es (ΣΣp)-p.r.. Llegaremos a un absurdo. Como ya vimos en la prueba de un teorema reciente, se tiene que Φn,m#=En,m#1[Tn,m,pn,m+11,...,pn,m+1n+m+1] Pero entonces ya que En,m#1 es (ΣΣp)-p.r., tenemos que Φn,m# es (ΣΣp)-p.r., lo cual como ya vimos recien no es cierto. El absurdo nos dice que Tn,m no es (ΣΣp)-p.r..  


4.5. La minimizacion de un predicado Σ-p.r. no necesariamente es Σ-p.r.

Proof. Por definicion Tn,m=M(Haltn,m).  


4.4.2.4 Uso de macros asociados a las funciones Haltn,m, En,m# y En,m

Aqui veremos, con ejemplos, como ciertos macros nos permitiran dentro de un programa hablar acerca del funcionamiento de otro programa. En este sentido los desarrollos de las dos batallas entre Neumann y Godel nos permiten fortalecer notablemente al paradigma imperativo en su roll modelizador (o simulador) de los procedimientos efectivos. Esto es importante ya que el paradigma mas comodo, amplio e intuitivo es sin duda el filosofico de Leibniz.

Veamos el primer ejemplo. Probaremos que:

  1. - Si f:Dfωω es Σ-computable, 0Df y f(0)=2, entonces S={xDf:f(x)0} es Σ-enumerable.

Notese que 0S por lo cual S es no vacio asique en virtud de la Caracterizacion de Σ-enumerabilidad deberemos encontrar un programa PProΣ que enumere a S, es decir tal que DomΨ1,0,#P=ω y ImΨ1,0,#P=S. Dicho en palabras, el programa P debera cumplir:

  1. - Siempre que lo corramos desde un estado de la forma x, con xω, debe detenerse y el contenido de la variable N1 bajo detencion debera ser un elemento de S

  2. - Para cada sS debera haber un xω tal que s es el valor de la variable N1 bajo detencion cuando corremos P desde x

Sea P0ProΣ un programa que compute a f. Usaremos P0 para diseñar P. A continuacion daremos una descripcion intuitiva del funcionamiento de P (pseudocodigo) para luego escribirlo correctamente usando macros. El programa P comenzara del estado x y hara las siguientes tareas

  1. Etapa 1: si x=0 ir a Etapa 6, en caso contrario ir a Etapa 2.

  2. Etapa 2: calcular (x)1 y (x)2 e ir a Etapa 3.

  3. Etapa 3: si P0 termina desde (x)1 en (x)2 pasos ir a Etapa 4, en caso contrario ir a Etapa 6

  4. Etapa 4: si el valor que queda en N1 luego de correr P0 una cantidad (x)2 de pasos, partiendo de (x)1, es distinto de 0, entonces ir a Etapa 5. En caso contrario ir a Etapa 6.

  5. Etapa 5: asignar a N1 el valor (x)1 y terminar

  6. Etapa 6: asignar a N1 el valor 0 y terminar

Notese que la descripcion anterior no es ni mas ni menos que un procedimiento efectivo (efectivisable) que enumera a S, y nuestra mision es simularlo dentro del lenguaje SΣ. Para esto usaremos varios macros. Ya que la funcion f=λx[(x)1] es Σ-p.r., el Segundo Manantial de Macros nos dice que hay un macro: [V2f(V1)] el cual escribiremos de la siguiente manera mas intuitiva: [V2(V1)1] Similarmente hay un macro: [V2(V1)2] Tambien, ya que el predicado P=λx[x=0] es Σ-recursivo, hay un macro: [IFP(V1)GOTOA1] el cual escribiremos de la siguiente manera: [IFV1=0GOTOA1] Definamos H=λtx[Halt1,0(t,x,P0)] Notar que DH=ω2 y que H es Σ-mixta. Ademas sabemos que la funcion Halt1,0 es (ΣΣp)-p.r. por lo cual resulta facilmente que H es (ΣΣp)-p.r.. Por Independencia del Alfabeto tenemos que H es Σ-p.r.. O sea que el Segundo Manatial nos dice que hay un macro de SΣ: [IFH(V1,V2)GOTOA1] Para hacer mas intuitivo el uso de este macro lo escribiremos de la siguiente manera [IFHalt1,0(V1,V2,P0)GOTOA1] Sea g=λtx[E1,0#1(t,x,P0)] Ya que g es Σ-recursiva (por que?), hay un macro: [V3g(V1,V2)] Para hacer mas intuitivo el uso de este macro lo escribiremos de la siguiente manera [V3E1,0#1(V1,V2,P0)] Ahora si podemos dar nuestro programa P que enumera a S: IFN10GOTOL1GOTOL2L1[N3(N1)1][N4(N1)2][IFHalt1,0(N4,N3,P0)GOTOL3]GOTOL2L3[N5E1,0#1(N4,N3,P0)][IFN5=0GOTOL2]N1N3GOTOL4L2N10L4SKIP

Enumeracion de conjuntos de programas

Ya que los programas de SΣ son palabras del alfabeto ΣΣp, nos podemos preguntar cuando un conjunto L de programas es (ΣΣp)-enumerable. Daremos un ejemplo. Sea Σ={@,!} y sea L={PProΣ:Ψ1,0,#P(10)=10} Veremos que L es (ΣΣp)-enumerable, dando un programa QProΣΣp que enumere a L, es decir tal que Dom(Ψ1,0,Q)=ω y Im(Ψ1,0,Q)=L. Cabe destacar que aqui hay en juego dos versiones de nuestro lenguaje imperativo, es decir enumeraremos un conjunto de programas de SΣ usando un programa de SΣΣp. Sea un orden total sobre el conjunto ΣΣp.

A continuacion daremos una descripcion intuitiva del funcionamiento de Q (pseudocodigo) para luego escribirlo correctamente usando macros. Notese que SKIPL. El programa Q comenzara del estado x y hara las siguientes tareas

  1. Etapa 1: si x=0 ir a Etapa 6, en caso contrario ir a Etapa 2.

  2. Etapa 2: calcular (x)1, (x)2 y ((x)1) e ir a Etapa 3.

  3. Etapa 3: si ((x)1)ProΣ y termina partiendo desde 10 en (x)2 pasos ir a Etapa 4, en caso contrario ir a Etapa 6

  4. Etapa 4: si el valor que queda en N1 luego de correr ((x)1) una cantidad (x)2 de pasos, partiendo de 10 es igual a 10, entonces ir a Etapa 5. En caso contrario ir a Etapa 6.

  5. Etapa 5: asignar a P1 la palabra ((x)1) y terminar

  6. Etapa 6: asignar a P1 la palabra SKIP y terminar

Notese que la descripcion anterior no es ni mas ni menos que un procedimiento efectivo que enumera a L, y nuestra mision es simularlo dentro del lenguaje SΣΣp. Para esto usaremos varios macros. Es importante notar que los macros que usaremos corresponden al lenguaje SΣΣp ya que los usaremos en Q el cual sera un programa de SΣΣp.

Ya que las funciones λx[(x)1] y λx[(x)2] son (ΣΣp)-recursivas el Segundo Manantial nos dice que hay macros en SΣΣp asociados a estas funciones los cuales escribiremos de la siguiente manera mas intuitiva: [V2(V1)2] Ya que el predicado P=λx[x=10] es (ΣΣp)-recursivo tenemos en SΣΣp su macro asociado el cual escribiremos de la siguiente manera: [IFV1=10GOTOA1] Por un lema anterior sabemos que ProΣ es un conjunto (ΣΣp)-p.r., por lo cual χ(ΣΣp)ProΣ es (ΣΣp)-p.r., y por lo tanto hay un macro [IFχ(ΣΣp)ProΣ(W1)GOTOA1] el cual escribiremos de la siguiente manera [IFW1ProΣGOTOA1] Ya que el predicado Halt1,0 es (ΣΣp)-recursivo tenemos un macro asociado a el, el cual escribiremos de la siguiente forma [IFHalt1,0(V1,V2,W1)GOTOA1] Ya que E1,0#1 es (ΣΣp)-recursivo tenemos un macro asociado a ella, el cual escribiremos de la siguiente forma [V3E1,0#1(V1,V2,W1)] Tambien usaremos macros [W1SKIP] (dejamos al lector hacerlos a mano o tambien se puede justificar su existencia via el Segundo Manantial aplicado a las funciones C0,010 y C0,0SKIP).

Ahora si podemos hacer el programa Q de SΣΣp que enumera a L: IFN10GOTOL1GOTOL2L1[N2(N1)1][N3(N1)2][P1(N2)][IFP1ProΣGOTOL3]GOTOL2L3[N410][IFHalt1,0(N3,N4,P1)GOTOL4]GOTOL2L4[N5E1,0#1(N3,N4,P1)][IFN5=10GOTOL5]L2[P1SKIP]L5SKIP

Cuando ΣΣp la cosa se pone mas loca.

Cuando ΣΣp podemos correr un programa PProΣ partiendo de un estado que asigne a sus variables alfabeticas programas (ya que los programas son meras palabras de Σ). En particular podriamos correr un programa P desde el estado P. Llamaremos A al conjunto formado por aquellos programas P tales que P se detiene partiendo del estado P. Es decir A={PProΣ:tω tal que Halt0,1(t,P,P)=1} Por ejemplo SKIPA. Dicho rapida y sugestivamente A es el conjunto formado por aquellos programas que se detienen partiendo de si mismos. Dejamos al lector hacer un programa que enumere a A. Como veremos mas adelante este conjunto, si bien es Σ-enumerable, no es Σ-computable.

Ahora consiremos el conjunto L={PProΣ:Ψ0,0,P()=P} En palabras, un programa PProΣ estara en L si y solo si P termina desde ((0,0,...),(ε,ε,...)) dejando en P1 la palabra P. En algun sentido los elementos de L son programas que se autopropagandean ya que “de la nada ellos terminan dandose a si mismos como salida”. Dejamos al lector la tarea de reflexionar hasta entender que resulta dificil encontrar “a mano” un elemento de L. En algun sentido, para lograr hacer un programa que este en L debemos ir escribiendo instrucciones que a su ves vayan garantizando que ellas mismas vayan quedando en el contenido de la variable P1. Sin embargo el Teorema de la Recursion (de Kleene) nos garantiza que L es no vacio! Dejamos al lector la tarea de hacer un programa que enumere a L (obviamente utilizando un elemento fijo de L).

Consideremos ahora el conjunto S={(P1,P2)ProΣ×ProΣ:Ψ0,0,P1()=P1P2=Ψ0,0,P2()} Note que nuevamente es dificil imaginar como uno programaria un par de programas P1 y P2 de manera que (P1,P2) este en S. El Teorema de la Recursion Doble (de Smullyan) nos garantiza que S es no vacio! Dejamos al lector la tarea de hacer un programa que enumere a L (obviamente utilizando un elemento fijo de S).

4.4.3 Godel vence a Turing

Para probar que toda funcion Σ-Turing computable es Σ-recursiva debemos estudiar la recursividad del funcionamiento de las maquinas de Turing. Cabe destacar que tal como se lo explico en la Subseccion [BasicosMaquinasDeTuring] supondremos siempre que el conjunto de estados de una maquina de Turing M=(Q,Σ,Γ,δ,q0,B,F) es un alfabeto disjunto con Γ.

Primero probaremos algunos lemas basicos.

4.51. Sea M=(Q,Σ,Γ,δ,q0,B,F) una maquina de Turing. Entonces

  1. (1) Des es un conjunto (ΓQ)-p.r.

  2. (2) St:DesQ es una funcion (ΓQ)-p.r.

Notese que la funcion δ de una maquina de Turing M=(Q,Σ,Γ,δ,q0,B,F) no es (ΓQ)-mixta. Sin envargo los siguientes predicados (ΓQ)-mixtos contienen toda la informacion de δ: PL:Q×Γ×Q×Γω(p,σ,q,γ){1si δ(q,γ)=(p,σ,L)0caso contrario PL:Q×Γ×Q×Γω(p,σ,q,γ){1si (p,σ,L)δ(q,γ)0caso contrario PR:Q×Γ×Q×Γω(p,σ,q,γ){1si δ(q,γ)=(p,σ,R)0caso contrario PK:Q×Γ×Q×Γω(p,σ,q,γ){1si δ(q,γ)=(p,σ,K)0caso contrario

4.52. Sea M=(Q,Σ,Γ,δ,q0,B,F) una maquina de Turing. Entonces los predicados PL,PR y PK son (ΓQ)-p.r.

Proof. Ya que los tres predicados tienen dominio finito, el Corolario 4.2 nos dice que son (ΓQ)-p.r.  


Recordemos que dado α(QΓ), definimos α de la siguiente manera ε=εασ=ασ, si σBαB=α Es decir α es el resultado de remover de α el tramo final mas grande de la forma Bn.

Tambien dada cualquier palabra α definimos α={[α]2...[α]|α|si|α|2εsi|α|1α={[α]1...[α]|α|1si|α|2εsi|α|1

4.53. Las funciones λα[α], λα[α] y λα[α] son (ΓQ)-p.r.. (Notar que la notacion λ aqui es respecto del alfabeto ΓQ por lo cual las tres funciones tienen dominio igual a (ΓQ).)

Notese que dada una maquina de Turing M, la expresion dMd fue definida solo en el caso en que d y d son descripciones instantaneas. Es decir que el predicado λdd[dd] tiene dominio igual a Des×Des.

4.54. El predicado λdd[dMd] es (ΓQ)-p.r..

Proof. Sea ˜PL:Des×Des×Γ×Γ×Γ×Q×Qω definido por ˜PL(d,d,σ,α,β,p,q)=1 sii d=αpβ(q,σ,L)=δ(p,[βB]1)αεd=αq[α]|α|σβ Sea ˜PR:Des×Des×Γ×Γ×Γ×Q×Qω definido por ˜PR(d,d,σ,α,β,p,q)=1 sii d=αpβ(q,σ,R)=δ(p,[βB]1)d=ασqβ Sea ˜PK:Des×Des×Γ×Γ×Γ×Q×Qω definido por ˜PK(d,d,σ,α,β,p,q)=1 sii d=αpβ(q,σ,K)=δ(p,[βB]1)d=αqσβ Se deja al lector la verificacion de que estos predicados son (ΓQ)-p.r.. Notese que λdd[dMd] es igual al predicado λdd[(σΓ)(α,βΓ)(p,qQ)(˜PR˜PL˜PK)(d,d,σ,α,β,p,q)] lo cual por el Lema 4.22 nos dice que λdd[dMd] es (ΓQ)-p.r.  


4.16. λndd[dnMd] es (ΓQ)-p.r..

Proof. Sea Q=λdd[dMd]C0,20|(ΓQ)2Des2 es decir Q es el resultado de extender con el valor 0 al predicado λdd[dMd] de manera que este definido en todo (ΓQ)2. Sea un orden total sobre ΓQ y sea Q1:N×Des×Desω definido por Q1(x,d,d)=1 sii

((iN)iLt(x)((x)i)Des)((x)1)=d

                      ((x)Lt(x))=d((iN)iLt(x)˙1Q(((x)i),((x)i+1)))

Notese que dicho rapidamente Q1(x,d,d)=1 sii x codifica una computacion que parte de d y llega a d. Se deja al lector la verificacion de que este predicado es (ΓQ)-p.r.. Notese que λndd[dnMd]=λndd[(xN)Lt(x)=n+1Q1(x,d,d)] Es decir que solo nos falta acotar el cuantificador existencial, para poder aplicar el lema de cuantificacion acotada. Ya que cuando d1,...,dn+1Des son tales que d1Md2MMdn+1 tenemos que |di||d1|+n, para i=1,...,n una posible cota para dicho cuantificador es n+1i=1pr(i)|ΓQ||d|+n. O sea que, por el lema de cuantificacion acotada, tenemos que el predicado λndd[dnMd] es (ΓQ)-p.r.  


4.6 (Godel vence a Turing). Supongamos f:Sωn×ΣmO es Σ-Turing computable. Entonces f es Σ-recursiva.

Proof. Supongamos O=Σ y sea M=(Q,Σ,Γ,δ,q0,B,,F) una maquina de Turing con unit la cual compute a f. Sea un orden total sobre Σ. Notese que por el Teorema 4.2, la funcion es (ΓQ)-p.r.. Sea P:N×ωn×Σmω dado por P(x,x,α)=1 sii

  1. (qQ)q0Bx1...BxnBα1...Bαm(x)1MqB((x)2)

  2.                          (dDes)|d||((x)2)|+2¬(qB((x)2)Md)

Dejamos al lector la prueba de que P es (ΓQ)-p.r.. Ya que P es Σ-mixto, el Teorema 4.2 nos dice que P es Σ-p.r.. Notese que f=λxα[((minxP(x,x,α))2)], lo cual nos dice que f es Σ-recursiva.  


4.4.4 Turing vence a Neumann

Probaremos que toda funcion Σ-computable es Σ-Turing computable. Para esto probaremos un resultado general que nos enseñara a simular el comportamiento de un programa con una maquina de Turing. Es importante notar que la simulacion que nos interesa que haga la maquina simuladora no es a nivel de la funcion que computa el programa sino a un nivel mas general, es decir nos interesa que simule a dicho programa como transformador de estados. En particular y usada adecuadamente, la maquina simuladora nos servira para confeccionar una maquina que compute una funcion computada por un programa dado.

4.4.4.1 Construccion de la maquina simuladora de un programa

Dado PProΣ, definamos N(P)=menor kN tal que las variables que ocurren en Pestan todas en la lista N1,...,Nˉk,P1,...,Pˉk Por ejemplo si P es el siguiente programa (aqui Σ={,#}) L1N4N4+1P1P1.IF N10 GOTOL1 entonces tenemos N(P)=4

Sea P un programa y sea k fijo y mayor o igual a N(P). La construccion de la maquina simuladora dependera de P y de k. Notese que cuando P se corre desde algun estado de la forma x1,...,xk,α1,...,αk los sucesivos estados por los que va pasando son todos de la forma y1,...,yk,β1,...,βk es decir en todos ellos las variables con indice mayor que k valen 0 o ε. La razon es simple: ya que en P no figuran las variables N¯k+1,N¯k+2,...P¯k+1,P¯k+2,... estas variables quedan con valores 0 y ε, respectivamente a lo largo de toda la computacion.

La maquina simuladora que construiremos simulara a P en cuanto a su funcionamiento cuando partimos de estados de la forma x1,...,xk,α1,...,αk. Necesitaremos tener alguna manera de representar en la cinta los diferentes estados por los cuales se va pasando, a medida que corremos a P. Esto lo haremos de la siguiente forma: al estado x1,...,xk,α1,...,αk lo representaremos en la cinta de la siguiente manera Bx1...BxkBα1...BαkBBBB.... Por ejemplo consideremos el programa P mostrado recien y fijemos k=6. Entonces al estado 3,2,5,0,4,2,,,ε,#,#,### lo representaremos en la cinta de la siguiente manera BBB∣∣∣BB∣∣BBBBB#B#B###BBBBB.... A lo que queda entre dos blancos consecutivos (es decir que no hay ningun blanco entre ellos) lo llamaremos "bloque", por ejemplo en la cinta de arriba tenemos que los primeros 12 bloques son ∣∣   ∣∣   ∣∣∣∣∣    ε    ∣∣∣∣   ∣∣             ε     #     #     ### y despues los bloques siguientes (que son infinitos ya que la cinta es infinita hacia la derecha) son todos iguales a ε.

Una observacion importante es que esta forma de representacion de estados en la cinta depende del k elejido, es decir si tomaramos otro k, por ejemplo k=9, entonces el estado anterior se representaria de otra forma en la cinta. Aqui se ve claramente que la maquina simuladora que construiremos dependera del k elejido.

Construccion de las maquinas simuladoras de instrucciones

Armaremos la maquina simuladora como concatenacion de maquinas las cuales simularan, via la representacion anterior, el funcionamiento de las distintas instrucciones de P. Asumiremos que en P no hay instrucciones de la forma GOTOLˉm ni de la forma Lˉn GOTOLˉm. Esto simplificara un poco la construccion de la maquina simuladora y de hecho lo podemos hacer ya que toda funcion Σ-computable puede ser computada por un programa sin este tipo de instrucciones, tal como lo veremos mas adelante (Lema 4.55).

Para poder hacer concretamente las maquinas simuladoras de instrucciones deberemos diseñar antes algunas maquinas auxiliares. Todas las maquinas descriptas a continuacion tendran a como unit y a B como blanco, tendran a Σ como su alfabeto terminal y su alfabeto mayor sera Γ=Σ{B,}{˜a:aΣ{}}. Ademas tendran uno o dos estados finales con la propiedad de que si q es un estado final, entonces (q,σ)Dδ, para cada σΓ.

Para cada j1, sea Dj la siguiente maquina:

image

Notese que αBβ1Bβ2B...BβjBγαBβ1Bβ2B...BβjBγ   q0qf  siempre que α,γΓ, β1,...,βj(Γ{B}). Es decir la maquina Dj lo unico que hace es mover el cabezal desde el blanco de la izquierda de un bloque determinado, exactamente j bloques a la derecha

Analogamente Ij sera una maquina que desplaza el cabezal j bloques a la izquierda del blanco que esta escaneando. Es decir Ij cumplira que αBβjB...Bβ2Bβ1BγαBβjB...Bβ2Bβ1Bγ                                                                                     q0qf                             siempre que α,γΓ, β1,...,βj(Γ{B}). Dejamos al lector la manufactura de esta maquina.

Para j1, sea TDj una maquina con un solo estado final qf y tal que αBγαBBγ  q0qf   cada vez que α,γΓ y γ tiene exactamente j ocurrencias de B. Es decir la maquina TDj corre un espacio a la derecha todo el segmento γ y agrega un blanco en el espacio que se genera a la izquierda. Por ejemplo, para el caso de Σ={a} podemos tomar TD3 igual a la siguiente maquina:

image

Analogamente, para j1, sea TIj una maquina tal que αBσγαBγ q0  qf cada vez que αΓ, σΓ y γ tiene exactamente j ocurrencias de B. Es decir la maquina TIj corre un espacio a la izquierda todo el segmaneto γ (por lo cual en el lugar de σ queda el primer simbolo de γ). Dejamos al lector la construccion de por ejemplo TI3 para Σ={a}.

A continuacion describiremos las distintas maquinas simuladoras de instrucciones (y para algunos casos mostraremos concretamente como pueden ser hechas usando las maquinas anteriores).

Para 1ik, sea M+i,k una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...Bxi1Bxi+1Bxi+1...BxkBα1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de M+i,k. Es claro que la maquina M+i,k simula la instruccion NˉıNˉı+1, via la representacion de estados en la cinta con respecto a k.

Para 1ik, sea M˙i,k una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...Bxi1Bxi˙1Bxi+1...BxkBα1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de M˙i,k. Es claro que la maquina M˙i,k simula la instruccion PˉıPˉı˙1, via la representacion de estados en la cinta con respecto a k.

Para 1ik y aΣ, sea Mai,k una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...BxkBα1...Bαi1BαiaBαi+1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de Mai,k. Es claro que la maquina Mai,k simula la instruccion PˉıPˉı.a, via la representacion de estados en la cinta con respecto a k. La maquina Mai,k.puede hacerse de la siguiente manera:

image

Para 1ik, sea Mi,k una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...BxkBα1...Bαi1BαiBαi+1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de Mi,k. Es claro que la maquina Mi,k simula la instruccion Pˉı Pˉı, via la representacion de estados en la cinta con respecto a k.

Para 1i,jk, sea M#,kij una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...Bxi1BxjBxi+1...BxkBα1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de M#,kij. Es claro que la maquina M#,kij simula la instruccion NˉıNˉj, via la representacion de estados en la cinta con respecto a k.

Para 1i,jk, sea M,kij una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...BxkBα1...Bαi1BαjBαi+1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de M,kij. Es claro que la maquina M,kij simula la instruccion PˉıPˉj, via la representacion de estados en la cinta con respecto a k. La maquina M,kij, para el caso Σ={a,b} y i<j puede hacerse de la siguiente manera:

image

Para 1ik, sea Mki0 una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...Bxi1BBxi+1...BxkBα1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de Mki0. Es claro que la maquina Mki0 simula la instruccion Nˉı0, via la representacion de estados en la cinta con respecto a k.

Para 1ik, sea Mkiε una maquina tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ: Bx1...BxkBα1...BαkBx1...BxkBα1...Bαi1BBαi+1...Bαkq0qf donde q0 es el estado inicial y qf es el unico estado final de Mkiε. Es claro que la maquina Mkiε simula la instruccion Pˉıε, via la representacion de estados en la cinta con respecto a k.

Sea MSKIP=({q0,qf},Γ,Σ,δ,q0,B,,{qf}), con Dδ={(q0,B)} y δ(q0,B)=(qf,B,K). Es claro que la maquina MSKIP simula la instruccion SKIP, via la representacion de estados en la cinta con respecto a k (cualquiera sea el k).

Para 1jk, sea IFj,k una maquina con estado inicial q0 y dos estados finales qsi y qno tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ, si xj0, entonces Bx1...BxkBα1...BαkBx1...BxkBα1...Bαkq0qsi y si xj=0, entonces Bx1...BxkBα1...BαkBx1...BxkBα1...Bαkq0qno

Para 1ik y aΣ, sea IFaj,k una maquina con estado inicial q0 y dos estados finales qsi y qno tal que cualesquiera sean x1,...,xkω y α1,...,αkΣ, si αj comienza con a, entonces Bx1...BxkBα1...BαkBx1...BxkBα1...Bαkq0qsi y en caso contrario Bx1...BxkBα1...BαkBx1...BxkBα1...Bαkq0qno La maquina IFaj,k puede hacerse de la siguinete manera:

image

Ejemplo de maquina simuladora de un programa

A continuacion veremos un ejemplo de como se arma la maquina simuladora de un programa dado. Sea Σ={,#} y sea P el siguiente programa L3N4N4+1P1 P1IF P1 BEGINS  GOTOL3P3P3.# Tomemos k=5. Es claro que kN(P)=4. A la maquina que simulara a P respecto de k, la llamaremos Msim y sera la siguiente maquina:

image

Veamos con un ejemplo como Msim simula a P. Supongamos que corremos P desde el estado 2,1,0,5,3,###,ε,,#,# Tendremos entonces la siguiente sucesion de descripciones instantaneas: (1,2,1,0,5,3,###,ε,,#,#)(2,2,1,0,6,3,###,ε,,#,#)(3,2,1,0,6,3,##,ε,,#,#)(1,2,1,0,6,3,##,ε,,#,#)(2,2,1,0,7,3,##,ε,,#,#)(3,2,1,0,7,3,##,ε,,#,#)(4,2,1,0,7,3,##,ε,,#,#)(5,2,1,0,7,3,##,ε,#,#,#) Si hacemos funcionar a Msim desde q0B2BBB5B3B###BBB#B#B obtendremos una sucesion de descripciones instantaneas dentro de la cual estara la siguiente subsucesion que se corresponde con las descripciones instantaneas de la computacion anterior. q0B2BBB5B3B###BBB#B#Bq1B2BBB6B3B###BBB#B#Bq2B2BBB6B3B###BBB#B#Bq3B2BBB6B3B##BBB#B#Bq4B2BBB6B3B##BBB#B#BqsiB2BBB6B3B##BBB#B#Bq0B2BBB6B3B##BBB#B#Bq1B2BBB7B3B##BBB#B#Bq2B2BBB7B3B##BBB#B#Bq3B2BBB7B3B##BBB#B#Bq4B2BBB7B3B##BBB#B#BqnoB2BBB7B3B##BBB#B#Bq5B2BBB7B3B##BBB#B#Bq6B2BBB7B3B##BB#B#B#B Dejamos al lector ver en detalle el paralelismo que hay entre las dos sucesiones de descripciones instantaneas arriba expuestas.

La contruccion de la maquina simuladora

A continuacion describiremos en general como hacer la maquina simuladora de P, respecto de k. Supongamos que P=I1...In. Para cada i=1,...,n, llamaremos Mi a la maquina que simulara el efecto que produce la instruccion Ii, es decir tomemos

  1. - Mi=M+j,k, si Bas(Ii)=NˉjNˉj+1

  2. - Mi=M˙j,k, si Bas(Ii)=NˉjNˉj˙1

  3. - Mi=Maj,k, si Bas(Ii)=PˉjPˉj.a

  4. - Mi=Mj,k, si Bas(Ii)=Pˉj Pˉj

  5. - Mi=M#,kjm, si Bas(Ii)=NˉjNˉm

  6. - Mi=M,kjm, si Bas(Ii)=PˉjPˉm

  7. - Mi=Mkj0, si Bas(Ii)=Nˉj0

  8. - Mi=Mkjε, si Bas(Ii)=Pˉjε

  9. - Mi=MSKIP, si Bas(Ii)=SKIP

  10. - Mi=IFj,k, si Bas(Ii)=IFNˉj0 GOTOLˉm, para algun m

  11. - Mi=IFaj,k, si Bas(Ii)=IFPˉjBEGINSaGOTOLˉm, para algun m

Ya que la maquina Mi puede tener uno o dos estados finales, la representaremos como se muestra a continuacion:

image

entendiendo que en el caso en que Mi tiene un solo estado final, este esta representado por el circulo de abajo a la izquierda y en el caso en que Mi tiene dos estados finales, el circulo de abajo a la izquierda corresponde al estado final qno y el circulo de abajo a la derecha corresponde al estado qsi. Para armar la maquina que simulara a P hacemos lo siguiente. Primero unimos las maquinas M1,...,Mn de la siguiente manera:

image

Luego para cada i tal que Bas(Ii) es de la forma αGOTOLˉm, ligamos con una flecha de la forma B,B,K el estado final qsi de la Mi con el estado inicial de la Mh, donde h es tal que Ih es la primer instruccion que tiene label Lˉm.

4.4.4.2 El lema de la simulacion

A continuacion enunciaremos en forma de lema la existencia de la maquina simuladora y de las propiedades esenciales que usaremos luego para probar que toda funcion Σ-computable es Σ-Turing computable.

4.55. Sea PProΣ y sea kN(P). Supongamos que en P no hay instrucciones de la forma GOTOLˉm ni de la forma Lˉn GOTOLˉm. Para cada aΣ{}, sea ˜a un nuevo simbolo. Sea Γ=Σ{B,}{˜a:aΣ{}}. Entonces hay una maquina de Turing con unit M=(Q,Γ,Σ,δ,q0,B,,{qf}) la cual satisface

  1. (1) (qf,σ)Dδ, para cada σΓ.

  2. (2) Cualesquiera sean x1,...,xkω y α1,...,αkΣ, el programa P se detiene partiendo del estado x1,...,xk,α1,...,αk sii M se detiene partiendo de la descripcion instantanea q0Bx1B...BxkBα1B...BαkB

  3. (3) Si x1,...,xkω y α1,...,αkΣ son tales que P se detiene partiendo del estado x1,...,xk,α1,...,αk y llega al estado y1,...,yk,β1,...,βk entonces q0Bx1B...BxkBα1B...BαkBMqfBy1B...BykBβ1B...BβkB

Cabe destacar que si bien la veracidad de este lema es sustentada en las explicaciones anteriores, una prueba formal rigurosa del mismo resultaria extremadamente larga y tediosa. La ventaja de que sea un resultado intuitivamente claro nos permite aceptarlo y seguir adelante en nuestro analisis.

4.4.4.3 Turing vence a Neumann

En lo que sigue usaremos la existencia de la maquina simuladora de un programa para probar que toda funcion Σ-computable es Σ-Turing computable. Antes un lema.

4.56. Si f:Dfωn×ΣmΣ es Σ-computable, entonces hay un programa Q el cual computa a f y el cual cumple con las siguientes propiedades

  1. (1) En Q no hay instrucciones de la forma GOTOLˉı ni de la forma Lˉj GOTOLˉı

  2. (2) Cuando Q termina partiendo de un estado cualquiera dado, el estado alcansado es tal que las variables numericas tienen todas el valor 0 y las alfabeticas tienen todas exepto P1 el valor ε.

Proof. Sea P un programa que compute a f. Sea rN tal que r>N(P),n,m. Sea ˜P el resultado de reemplazar en P cada instruccion de la forma αGOTOLˉı con α{ε}{Lˉj:jN} por αIF Nˉr0 GOTOLˉı. Ahora sea Q el siguiente programa NˉrNˉr+1˜PN10Nˉr0P2εPˉrε Es facil ver que Q tiene las propiedades (1) y (2).  


Por supuesto, hay un lema analogo para el caso en que f llega a ω en lugar de llegar a Σ. Ahora si, el anunciado teorema:

4.7 (Turing vence a Neumann). Si f:Dfωn×ΣmO es Σ-computable, entonces f es Σ-Turing computable.

Proof. Supongamos O=Σ. Por el Lema 4.56 existe PProΣ el cual computa f y tiene las propiedades (1) y (2). Sea k=max{n,m,N(P)} y sea Msim la maquina de Turing con unit que simula a P respecto de k. Como puede observarse, la maquina Msim, no necesariamente computara a f. Sea M1 la siguiente maquina:

image

(Cuando n=0 debemos interpretar que D0=({q0,qf},Γ,Σ,δ,q0,B,,{qf}), con Dδ={(q0,B)} y δ(q0,B)=(qf,B,K). Notese que M1 cumple que para cada (x,α)ωn×Σm, q0Bx1B...BxnBα1B...BαmBqfBx1B...BxnBknBα1B...BαmB Sea M2 la siguiente maquina

image

Notese que M2 cumple que para cada αΣ, q0Bk+1αqfBα Sea M la siguiente maquina:

image

A continuacion veremos que M computa a f. Supongamos que (x,α)(ωn×Σm)Df. Deberemos ver que M no termina partiendo de

  1. (*) q0Bx1B...BxnBα1B...BαmB

Primero notemos que, ya que P computa a f, tenemos que P no termina partiendo de x1,...,xn,α1,...,αm por lo cual P no termina partiendo de x1,...,xn,kn0,...,0,α1,...,αm,kmε,...,ε lo cual implica (Lema 4.55) que

  1. (**) Msim no termina partiendo de q0Bx1B...BxnBknBα1B...BαmB

Ahora notese que si hacemos funcionar a M desde la descripcion instantanea dada en (*), llegaremos (via la copia de M1 dentro de M) indefectiblemente (ya que M es deterministica) a la siguiente descripcion instantanea q2Bx1B...BxnBknBα1B...BαmB Luego entonces (**) nos dice que al seguir trabajando M (ahora via la copia de Msim dentro de M), la maquina M nunca terminara.

Para terminar de ver que M computa a f, tomemos (x,α)Df y veamos que q0Bx1B...BxnBα1B...BαmBMq5Bf(x,α) y que la maquina M se detiene en q5Bf(x,α). La maquina M se detiene en q5Bf(x,α) ya que q5 es el estado final de una copia de M2 y por lo tanto no sale ninguna flecha desde el. Ya que P computa a f y tiene la propiedad (2) del Lema 4.56, tenemos que P termina partiendo de x1,...,xn,α1,...,αm y llega al estado f(x,α), o lo que es lo mismo, P termina partiendo de x1,...,xn,kn0,...,0,α1,...,αm,kmε,...,ε y llega al estado k0,...,0,f(x,α),k1ε,...,ε Pero entonces el Lema 4.55 nos dice que

  1. (***) q0Bx1B...BxnBknBα1B...BαmBMsimqfBk+1f(x,α)

Como ya lo vimos, si hacemos funcionar a M desde q0Bx1B...BxnBα1B...BαmB, llegaremos (via la copia de M1 dentro de M) indefectiblemente a la siguiente descripcion instantanea q2Bx1B...BxnBknBα1B...BαmB Luego (***) nos dice que, via la copia de Msim dentro de M, llegaremos a q3Bk+1f(x,α) e inmediatamente a q4Bk+1f(x,α). Finalmente, via la copia de M2 dentro de M, llegaremos a q5Bf(x,α), lo cual termina de demostrar que M computa a f