Diferencia entre revisiones de «Práctica 9: Recursividad (Lógica y Computabilidad)»
Línea 26: | Línea 26: | ||
==Ejercicio 07== | ==Ejercicio 07== | ||
Vamos simulando | Vamos simulando ф(x, x), si para, devolvemos el resultado mas 1. Si nunca para, entonces esta bien que se cuelgue. | ||
==Ejercicio 08== | ==Ejercicio 08== |
Revisión del 01:54 5 ene 2007
Ejercicio 01
Como f es computable, tenemos un programa P tal que ψP = f. Dado n, vamos calculando f(0), f(1), y asi siguiendo con el STP. En algun momento, f(i) = n, porque la funcion es total y biyectiva. Devolvemos ese valor. Es facil armar un programa que haga esto.
Ejercicio 02
Supongamos que f(x) es recursiva. Entonces, Gff (x, y) resulta trivialmente recursiva: basta calcular f(x) y ver si es y. Supongamos ahora que Gff (x, y) es recursiva. Como es la funcion caracteristica del grafico de una funcion, ∀x∃!y Grf (x, y) = 1, pues todo punto debe tener una, y solo una, imagen. Entonces, corremos Grf (x, i), aumentando el i, hasta llegar al que nos da 1.
Ejercicio 03
Podemos definir g(x) = minz(f(z) = x). Esta funcion esta bien definida, porque f es suryectiva. Entonces, siempre hay algun z que cumple f(z) = x para cualquier x. Ademas de estar bien definida, es el resultado de aplicar minimizacion propia a una funcion parcialmente computable y total. Entonces, es parcialmente computable y total. Los conjuntos {z|f(z) = x} y {z|f(z) = y} son disjuntos para y != x. Entonces, g(x) != g(y) para x != y, por lo que es inyectiva. Si evaluamos g(f(x)) = minz(f(z) = f(x)). Como x cumple esto, el minimo va a ser menor o igual que x, y g cumple todo lo pedido.
Ejercicio 04
Supongamos que HALT(X,X) es computable. Con el, construimos el programa P [A] IF HALT(X,X) GOTO A
P para con input X sii ¬HALT(X,X). Sea y0 = #(P). Entonces, HALT(y0, y0) <=> y0 para con input y0 <=> ¬HALT(y0, y0), lo cual nos da un absurdo.
Ejercicio 05
Supongamos que HALT(f(x), x) sea parcialmente computable. Entonces, tenemos un programa que lo computa. Sabemos que f es biyectiva y computable. Entonces, por el ejercicio 1, sabemos que f^-1 tambien es computable. Luego, el siguiente programa computa HALT(x, f^-1(x)).
Z = f^-1(X)
Y = HALT(f(Z),Z)
Entonces, el programa
[A] IF HALT(X, f^-1(X)) GOTO A
Y = 1
computa la h de la sugerencia. Sea h0 el numero de este programa. Observemos que h0 = f^-1(f(h0)). Veamos que pasa con h(f(h0)). Esto puede ser 1 o ↑. Si es 1, entonces ф(f(h0), h0) ↑. Entonces h(f(h0)) ↑. Pero esto es una contradiccion. Ahora, si es ↑, entonces ф(f(h0), h0) ↓. Luego, h(f(h0)) ↓. Nuevmente tenemos una contradiccion.
Como lo unico que supusimos era que HALT(f(x), x) era parcialmente computable, esto es falso.
Ejercicio 06
Es computable. Vamos simulando los pasos de f(x). Si en algun momento para, entonces x pertenece al dominio de f y devolvemos un 1. Si nunca para, entonces, x no pertenecia al dominio de f, y esta bien que se cuelgue.
Ejercicio 07
Vamos simulando ф(x, x), si para, devolvemos el resultado mas 1. Si nunca para, entonces esta bien que se cuelgue.
Ejercicio 08
Supongamos que f(x, y) es computable. Sea y0 un natural. Tenemos que �A(x) = f(x, y0) tambien tiene que ser computable. Pero �A es la funcion caracteristica del conjunto A = {x 2 N|y0 2 Im �x}, que tiene que ser recursivo. Entonces, tambien tiene que ser recursivo B = {�x|y 2 Im �x}. Pero la funcion que devuelve constantemente y0 +1 no esta en B, y la funcion que devuelve constantemente y0 si. Entonces, por el Teorema de Rice, B no es recursivo. Por ende tampoco lo son A, �A y f.
Ejercicio 09
Ejercicio 10
Ejercicio 11
Ejercicio 12
Enunciado: Probar que existe una funcion primitiva recursiva f(n,m) tal que .
Pruebo que existe f(n,m) recursiva primitiva.
Defino , g es claramente computable. Entonces existe z tal que .
Por el Teorema del Parametro, existe tal que .
Entonces es primitiva recursiva y cumple con lo pedido.
Ejercicio 13
- 1. Si miramos el conjunto {�x|Dom�x = ;}, por Rice no es recursivo. Luego, tampoco lo es el que nos dieron.
Ejercicio 14
- 1. La funcion caracteristica de este conjunto es f(x, y) = (1 si y 2 Im�x
0 si no
En el ejercicio 8 vimos que esta funcion no es computable. Por lo tanto, el conjunto no es recursivo.
- 2. Si llamamos A al conjunto y suponemos que es recursivo, entonces
�A(x, y) = (1 si �x = �y 0 si no
tambien tiene que ser recursiva. Pero entonces, si y0 es tal que �y0 = 2, la funcion constante 2., entonces �B = �A(x, y0) = (1 si �x = 2
0 si no
tambien tiene que ser recursiva. Pero esta es la funcion caracteristica del conjunto B = {x 2 N|�x = 2}. Si
consideramos FB = {�x|�x = 2}, es facil ver que este conjunto no contiene a todas las funciones parcialmente computables. Entonces, por Rice, no es recursivo. Esto nos lleva a un absurdo, que dice que suponer que A era recursivo estuvo mal.
- 3. Consideramos F = {�x|Im�x es infinito}. Por Rice, este conjunto no es recursivo, luego tampoco lo es el original.
Ejercicio 15
- 1. Si f fuera recursiva, tendria que existir e tal que �e = f. Entonces �e(e) = (1 si �e(e) = 0 0 si �e(e) != 0
lo cual nos muestra que no puede existir un tal e. Luego, f no es computable.
- 2. Supongamos que f sea recursiva. Entonces, sea x0 tal que �x0 es la funcion constante 0. Entonces, si f es recursiva, g(y) = f(x0, y) tambien lo es. Pero
g(y) = (1 si �y(y) != 0 0 si �y(y) = 0
Si esta funcion fuera recursiva, tambien lo seria �(g). Pero esta es la funcion del ejercicio anterior, que ya vimos que no es recursiva. Entonces, nuestra f tampoco lo era.
- 3. Si fuera computable, tambien lo seria g(x, y) = f(x, y, z0), donde z0 es tal que �z0 es la funcion constante 0. Y por consecuencia, tambien lo seria g(x, x). Pero esta funcion es la del inciso a, que vimos que no era computable. Entonces, nuestra f tampoco lo es.
Ejercicio 1!
Para probar esto, primero probamos un resultado adicional. Si B = {f(n)|n 2 N}, con f una funcion estrictamente creciente, parcialmente computable y total, entonces B es recursivo. Para verlo, basta ver que el siguiente programa
[A] IFf(Z) = X GOTO B
IFf(Z) > X GOTO E
Z Z + 1
GOTO A
[B] Y 1
GOTO E
computa �B. Este programa termina siempre, asi que B es recursivo. Ahora, sea A r.e. e infinito. Tenemos una funcion primitiva recursiva g(x) que nos va dando los elementos de A. Definimos f(0) = g(0), y suponiendo definida f(k) para todo k < n, definimos f(n) = g(minz(g(z) > f(n − 1))). Esta minimizacion es propia, pues A es infinito. Entonces, siempre podemos encontrar un elemento de A mayor que todos los que tengamos. Esto nos da una f parcialmente computable, total, y estrictamente creciente. Si tomamos B = {f(n)|n 2 N}, tenemos que B es recursivo y que B � A.
Ejercicio 17
- 1. A [ B es r.e.: voy dando un elemento de A y uno de B. Para que sea mas bonito, guardo los que di y no repito. A \ B tambien es r.e.: Voy guardando dos listas, la de elementos de A y la de elementos de B. Genero un numero de cada conjunto. Cada vez que genero, me fijo si esta en la lista del otro. Si esta, lo doy. Si no, por
el momento no.
- 2. Es falsa. Si tomamos B los programas que paran cuando se les da como entrada su numero de programa, y A todos los programas, entonces A\B son los programas que no se detienen cuando se les da su numero de programa como entrada. Si este conjunto fuera r.e., HALT(X,X) seria computable.
- 3. Es falso. Sea B = N, pensados como numeros de programas. Sea, A el conjunto de numeros de programasque computan la funcion vacia (la que no esta definida en ningun lado). En el ejercicio 20.c veremos que este subconjunto no es r.e.
- 4. Es falso. Ni HALT(X,X) es recursivo, ni su complemento, pero es r.e.
- 5. Es verdadero. Con un argumento diagonal, voy dando un elemento del primero, uno del segundo, otro del primero, otro del segundo, uno del tercero, etc.
Ejercicio 18
Ejercicio 19
Para ver que B es r.e., vamos simulando todos los programas, y listamos los que van parando. Para ver que no es recursivo, usamos Rice con el conjunto {�x|�x(0) = 1}.
Ejercicio 20
- 1. Es r.e.: voy simulando �x(0) para todos los x, en orden. A medida que paran, los voy listando. Para ver que no es recursivo, aplico Rice al conjunto {�x|�x(0) #}
- 2. Es r.e.: idem el inciso anterior, pero con entrada x. No es recursivo, pues es HALT(x, x).
- 3. Aplicando Rice al conjunto {�x|Dom�x = ;} se ve que no es recursivo. Ahora, en forma analoga al inciso 1, se puede ver que Ak = {x 2 N|�x(k) #} es r.e. para todo k 2 N. Por el ejercicio 17, inciso 5, el conjunto S1k=0 Ak es r.e. Este conjunto es el complemento del que nos piden estudiar. Si el que nos piden fuera r.e., como su complemento tambien lo es, seria recursivo. Como no lo es, no es tampoco r.e.
- 4. El conjunto es completamente analogo al del inciso a, pero cambiando 0 por 1.
Ejercicio 21
Se deduce de combinar los teoremas 4.9 y 4.10 del libro de Davis
Ejercicio 22
En palabras, por el ejercicio anterior tenemos una f parcialmente computable y total que nos va dando los elementos de B. Entonces, armamos un programa que vaya enumerando esos elementos, pero que guarde los elementos que va dando como salidas. El siguiente programa nos da, entonces, esa tal funcion modificada.
[A] Z2 f(Z)
IF Z2 NO ESTA EN LA LISTA Z3 GOTO B // Z3 guarda los elementos que doy como salida
Z Z + 1 // Si ya estaba en la lista,
GOTO A //genero otro elemento
[B] IF Lt(Z3) = X GOTO C // Si ya genere tantos elementos como me pidieron
AGREGO Z2 A LA LISTA Z3 // Si no, genero uno mas
Z Z + 1
GOTO A
[C] Y Z2
Como este programa termina para todo X de entrada, tenemos que nuestro conjunto es la imagen de una funcion parcialmente computable, total e inyectiva.
Ejercicio 23
Ejercicio 24
Porqueria
Dada f recursiva parcial, se dice extensible si existe una funcion g total tal que g en Dom(f) = f.
recursiva parcial
Si existe g(x) que la extiende dado calculo
g(x) pasos
\phi (x,x) g(x)
todo esto creo, no sirve para nada
Ej practica 9
g(x) la extiende, entonces existe Y tal que = g
Absurdo!