Apuntes de Teoría de Computación StopK no es computable............................................................................................................................2 DeltaPrima no es computable.....................................................................................................................3 EqId no es computable...............................................................................................................................4 TOT no es recursivamente enumerable (r.e)..............................................................................................5 Índice (I) que Respeta Funciones no es decidible......................................................................................6 1 StopK no es computable StopK ( p)=1 si I x ( p) es un programa cte y < I x ( p) , m>↓∀ m StopK ( p)=0 en caso contrario (1) Supongamos que StopK es computable entonces existe la macro MSK que la computa .< MSK , p>→1 ⇔ I x ( p) es constante ∧ ∀ m < I x ( p),m>↓ .< MSK , p>→0 ⇔ I x ( p) es constante ∧ ∃ n < I x ( p) ,n>↑ (2) Sea g la función transformadora que, a partir de un índice de programa q y una entrada n, retorna el índice del programa constante q'. Sabemos que g es computable y que GM es la macro que la computa. .<GM ,<q , n≫→q ' ⇔ Φq (n)=Φ q ' (m)∀ m∈ℕ (3) Sea Q la siguiente macro de expresión EXPR Q (Y0,Y1) MACRO Y2:= GM(Y0,Y1) Y2:= MSK(Y2) RESULT(Y2) (4) Se demuestra a continuación que Q computa Stop .<Q ,<q ,n≫→1 ⇔ < MSK , q ' >→1 ⇔ .<GM ,< q , n≫→q ' ⇔ .< I x (q), n>↓ ⇔ stop(q ,n)=1 (3) (2) (1,2 ) (stop ) .<Q ,<q ,n≫→0 ⇔ < MSK , q ' >→0 ⇔ .<GM ,<q , n≫→q ' ⇔ .< I x (q), n>↑ ⇔ stop(q , n)=0 (3) (2 ) (1,2) (stop) (5) Dado que Stop no es computable, entonces Q no es computable. Como consecuencia, la suposición sobre la computabilidad de MSK se cae. Finalmente, StopK no es computable. 2 DeltaPrima no es computable DeltaPrima (p ,n , m)=1 si ejecSentNum( p , n , m) es verdadero DeltaPrima( p ,n , m)=0 si ejecSentNum ( p , n , m) es falso (1) Supongamos que DeltaPrima es computable entonces existe la macro MDELTA que la computa .< MDELTA ,< p , n , m≫→1 ⇔ ejecSentNum( p , n , m) .< MDELTA ,< p , n , m≫→0 ⇔ not ejecSentNum ( p , n ,m) (2) Sea pe la función transformadora que, a partir de un índice de programa q, retorna el índice de programa p junto con el número m de su última línea. El programa de índice p es copia del programa de índice q, pero agrega como última sentencia una asignación a la variable MAX+1 del valor 0. Sabemos que pe es computable y PM la macro que la computa. Se verifica la siguiente propiedad del programa transformado .< PM ,< q , n≫→< p , m> : : < I x (q ), n>↓ ⇔ ejecSecNum( p , n , m) . .< PM ,< q , n≫→< p , m> : : < I x (q ), n>↑ ⇔ not ejecSecNum (p ,n , m) (3) Sea D el siguiente programa PROGRAM(<X0,X1>) -- recibe <q,n> X2 := PM(X0,X1); --devuelve <p,m> X3 := FST(X2); --p X4 := SND(X2); --m X5 := MDELTA(X3,X1,X4) RESULT(X5) (4) Se demuestra que D computa Stop .< D ,<q ,n≫→1 ⇔ . ejecSentNum (p ,n , m) ⇔ < I x ( q),n>↓ ⇔ stop( q , n)→1 (1) (2) (stop) .< D ,<q ,n≫→0 ⇔ not ejecSecNum( p , n , m) ⇔ < I x ( q), n>↑ (stop) ⇔ stop(q ,n)→0 (1) (2) (5) Dado que Stop no es computable, entonces MDELTA no computa DeltaPrima y finalmente DeltaPrima no es computable. 3 EqId no es computable Eqid (x)=1 si Φ x =id (la función identidad ) Eqid (x)=0 en caso contrario (1) Supongamos que EqId es computable, entonces existe la macro MEQ que la computa .< MEQ , x >→1 ⇔ Φ x =id .< MEQ , x >→0 ⇔ Φ x ≠id (2) Sea id la función identidad. Sabemos que id es computable. Sea ID el siguiente programa que, a partir de un índice de programa q y un número n, computa la función identidad. PROGRAM(X0) X1 := EVAL-PROG(q,n) RESULT(X0) (3) Sea MID la macro que calcula el índice del programa ID. .< MID ,< q , n≫→i ⇔ Φ i=id ⇔ .< I x (q), n>↓ .< MID ,< q , n≫→ j ⇔ Φ j≠id ⇔ .< I x ( q), n>↑ (4) Sea I el siguiente programa PROGRAM(<X0,X1>) X2 := MID(X0,X1) X3 := MEQ(X2) RESULT(X3) --<q,n> (5) Se demuestra que I computa Stop .< I ,< q , n≫⇒1 ⇔ < MEQ , i>→1 ⇔ < MID ,< q , n≫→i ⇔ < I x (q), n>↓ (stop) ⇔ stop(q , n)=1 (1) (3) (3) .< I ,< q , n≫⇒0 ⇔ < MEQ , j>→0 ⇔ < MID ,<q , n≫→ j ⇔ < I x (q),n>↑ ⇔ stop(q , n)=0 (1) (3 ) (3) (stop ) (6) Dado que Stop no es computable, entonces MEQ no computa EqId y finalmente, EqId no es computable. 4 TOT no es recursivamente enumerable (r.e) TOT ={i ∈ℕ, φ i es total } (1) Supongamos que TOT es r.e, como TOT no es vacío, existe una función de enumeración efTot :ℕ→TOT total, sobreyectiva y computable. Sea EFTOT el programa que computa efTot, por lo tanto, EFTOT es el programa que devuelve el índice de todas las funciones totales, aquellas que siempre terminan. (2) Sea g una función total, sobreyectiva y computable definida de la siguiente manera: g( x)=Φ efTot (x) (x)+1 . Aplicando la técnica de la diagonalización se muestra, por reducción al absurdo, que g no aparece enumerada por efTot porque difiere de cada función enumerada por efTot en 1. Pero esto se puede verificar también a nivel de los programas que implementan estas funciones. (3) Sea G un programa para computar g, con índice x de acuerdo a EFTOT. PROGRAM (X0) X1 := EFTOT (X0); X2 := EVAL-PROG(X1,X0); X2 := SUC(X2); RETURN (X2) (4) G es el programa que implementa una función total. Se puede ver que si existe EFTOT, la misma termina (por definición de r.e), del mismo modo sabemos que EVAL-PROG es computable. Sin embargo hay una contradicción con el valor computado por G, la que se origina por suponer que EFTOT existe. .<G , x >⇒(n+1)⇔< EVAL−PROG (efTot( x), x )> ⇒n ⇔ Φ efTot (x) (x )=n ⇔ <G , x>⇒ n (5) Si EFTOT no existe entonces no existe una función de enumeración. De lo anterior, TOT no es recursivamente enumerable. 5 Índice (I) que Respeta Funciones no es decidible I ≠ℕ∧I ≠∅ , I respeta funciones :(i∈I ∧ φ i=φ j ) → j∈I (1) Supongamos que I es decidible, entonces existe la macro MI que computa su función característica C I . Sin perder generalidad asumimos que la función vacía no está en I (si estuviera basta considerar el conjunto complemento de I). (2) Sea q el índice (de una función) que está en I, ya que I no es vacío . Sea H(n) el programa de índice h(n) (que computa una función “muy relacionada” con la función indexada por q) . PROGRAM(X0) X1 := EVAL-PROG(n,n) X1 := EVAL-PROG(q,X0) RESULT(X1) (3) Se verifica la siguiente propiedad : h(n)∈ I ⇔ .< I x (n), n>↓ . Sea MH la macro que calcula el índice del programa H(n). (4) Sea J el siguiente programa PROGRAM(X0) X1 := MH(X0) X1 := MI(X1) RESULT(X1) (5) Se demuestra que J computa Θ(n) .<J , n>↓ ⇔ (.< MI ,h (n)> ⇒1) ⇔ h(n)∈ I ⇔ .< I x (n), n>↓ (2) (1) (3) .< J , n>↑ ⇔ (.< MI , h(n)>⇒0) ⇔ h(n)∈ I ⇔ .< I x (n), n>↑ (2) (1 ) (3) (6) Dado que Θ(n) no es computable, entonces MI no computa la función característica C I finalmente I no es decidible. (7) Fin. 6 y