Diferencia entre revisiones de «Práctica 9: Recursividad (Lógica y Computabilidad)»

De Cuba-Wiki
Sin resumen de edición
Sin resumen de edición
Línea 1: Línea 1:
==Ejercicio 01==
==Ejercicio 01==
Como f es computable, tenemos un programa P tal que  P = f. Dado n, vamos calculando f(0), f(1), y as´ı siguiendo con el STP. En alg´un momento, f(i) = n, porque la funci´on es total y biyectiva. Devolvemos ese valor. Es f´acil armar un programa que haga esto.
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==
==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 funci´on caracter´ıstica del gr´afico de una funci´on, 8x9!y Grf (x, y) = 1, pues todo punto debe tener una, y solo una, imagen. Entonces, corremos
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, 8x9!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.
Grf (x, i), aumentando el i, hasta llegar al que nos da 1.


==Ejercicio 03==
==Ejercicio 03==
Podemos definir g(x) = m´ınz(f(z) = x). Esta funci´on est´a bien definida, porque f es suryectiva. Entonces, siempre hay alg´un z que cumple f(z) = x para cualquier x. Adem´as de estar bien definida, es el resultado de aplicar minimizaci´on propia a una funci´on 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 6= x. Entonces, g(x) 6= g(y) para x 6= y, por lo que es inyectiva. Si evaluamos g(f(x)) = m´ınz(f(z) = f(x)). Como x cumple esto, el m´ınimo va a ser menor o igual que x, y g cumple todo lo pedido.
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==
==Ejercicio 04==
Supongamos que HALT(X,X) es computable. Con ´el, construimos el programa P [A] IF HALT(X,X) GOTO A
Supongamos que HALT(X,X) es computable. Con el, construimos el programa P [A] IF HALT(X,X) GOTO A
<br>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.
<br>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==
==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 tambi´en es computable. Luego, el siguiente programa computa HALT(x, f−1(x)).
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)).
<br>Z  f−1(X)
<br>Z  f−1(X)
<br>Y  HALT(f(Z),Z)
<br>Y  HALT(f(Z),Z)
Línea 20: Línea 20:
<br>[A] IF HALT(X, f−1(X)) GOTO A
<br>[A] IF HALT(X, f−1(X)) GOTO A
<br>Y  1
<br>Y  1
computa la h de la sugerencia. Sea h0 el n´umero de este programa. Observemos que h0 = f−1(f(h0)). Veamos qu´e 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 contradicci´on. Ahora, si es ", entonces �(f(h0), h0) #. Luego, h(f(h0)) #. Nuevmente tenemos una contradicci´on.
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.
Como lo unico que supusimos era que HALT(f(x), x) era parcialmente computable, esto es falso.


==Ejercicio 06==
==Ejercicio 0!==
Es computable. Vamos simulando los pasos de f(x). Si en alg´un momento para, entonces x pertenece al dominio de f y devolvemos un 1. Si nunca para, entonces, x no pertenec´ıa al dominio de f, y est´a bien que se cuelgue.
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==
==Ejercicio 07==
Vamos simulando �(x, x), si para, devolvemos el resultado m´as 1. Si nunca para, entonces est´a bien que se cuelgue.
Vamos simulando �(x, x), si para, devolvemos el resultado mas 1. Si nunca para, entonces esta bien que se cuelgue.


==Ejercicio 08==
==Ejercicio 08==
Supongamos que f(x, y) es computable. Sea y0 un natural. Tenemos que �A(x) = f(x, y0) tambi´en tiene que ser computable. Pero �A es la funci´on caracter´ıstica del conjunto A = {x 2 N|y0 2 Im �x}, que tiene que ser recursivo. Entonces, tambi´en tiene que ser recursivo B = {�x|y 2 Im �x}. Pero la funci´on que devuelve constantemente y0 +1 no est´a en B, y la funci´on que devuelve constantemente y0 s´ı. Entonces, por el Teorema de Rice, B no es recursivo. Por ende tampoco lo son A, �A y f.
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 09==
Línea 53: Línea 53:


==Ejercicio 14==
==Ejercicio 14==
*1. La funci´on caracter´ıstica de este conjunto es f(x, y) = (1 si y 2 Im�x
*1. La funcion caracteristica de este conjunto es f(x, y) = (1 si y 2 Im�x
0 si no
0 si no
<br>En el ejercicio 8 vimos que esta funci´on no es computable. Por lo tanto, el conjunto no es recursivo.
<br>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
*2. Si llamamos A al conjunto y suponemos que es recursivo, entonces
�A(x, y) = (1 si �x = �y 0 si no
�A(x, y) = (1 si �x = �y 0 si no
<br>tambi´en tiene que ser recursiva. Pero entonces, si y0 es tal que �y0 = 2, la funci´on constante 2., entonces �B = �A(x, y0) = (1 si �x = 2
<br>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
0 si no
<br>tambi´en tiene que ser recursiva. Pero esta es la funci´on caracter´ıstica del conjunto B = {x 2 N|�x = 2}. Si
<br>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 f´acil 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.
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.
*3. Consideramos F = {�x|Im�x es infinito}. Por Rice, este conjunto no es recursivo, luego tampoco lo es el original.


==Ejercicio 15==
==Ejercicio 15==
*1. Si f fuera recursiva, tendr´ıa que existir e tal que �e = f. Entonces �e(e) = (1 si �e(e) = 0 0 si �e(e) 6= 0
*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
<br>lo cual nos muestra que no puede existir un tal e. Luego, f no es computable.
<br>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 funci´on constante 0. Entonces, si f es recursiva, g(y) = f(x0, y) tambi´en lo es. Pero
*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) 6= 0 0 si �y(y) = 0
g(y) = (1 si �y(y) != 0 0 si �y(y) = 0
<br>Si esta funci´on fuera recursiva, tambi´en lo ser´ıa �(g). Pero esta es la funci´on del ejercicio anterior, que ya vimos que no es recursiva. Entonces, nuestra f tampoco lo era.
<br>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, tambi´en lo ser´ıa g(x, y) = f(x, y, z0), donde z0 es tal que �z0 es la funci´on constante 0. Y por consecuencia, tambi´en lo ser´ıa g(x, x). Pero esta funci´on es la del inciso a, que vimos que no era computable. Entonces, nuestra f tampoco lo es.
*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 16==
==Ejercicio 1!==
Para probar esto, primero probamos un resultado adicional. Si B = {f(n)|n 2 N}, con f una funci´on estrictamente creciente, parcialmente computable y total, entonces B es recursivo. Para verlo, basta ver que el siguiente programa
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
<br>[A] IFf(Z) = X GOTO B
<br>[A] IFf(Z) = X GOTO B
<br>IFf(Z) > X GOTO E
<br>IFf(Z) > X GOTO E
Línea 80: Línea 80:
<br>[B] Y  1
<br>[B] Y  1
<br>GOTO E
<br>GOTO E
computa �B. Este programa termina siempre, as´ı que B es recursivo. Ahora, sea A r.e. e infinito. Tenemos una funci´on 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(m´ınz(g(z) > f(n − 1))). Esta minimizaci´on 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.
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==
==Ejercicio 17==
*1. A [ B es r.e.: voy dando un elemento de A y uno de B. Para que sea m´as bonito, guardo los que di y no repito. A \ B tambi´en es r.e.: Voy guardando dos listas, la de elementos de A y la de elementos de B. Genero un n´umero de cada conjunto. Cada vez que genero, me fijo si est´a en la lista del otro. Si est´a, lo doy. Si no, por
*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.
el momento no.
*2. Es falsa. Si tomamos B los programas que paran cuando se les da como entrada su n´umero de programa, y A todos los programas, entonces A\B son los programas que no se detienen cuando se les da su n´umero de programa como entrada. Si este conjunto fuera r.e., HALT(X,X) ser´ıa computable.
*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 n´umeros de programas. Sea, A el conjunto de n´umeros de programasque computan la funci´on vac´ıa (la que no est´a definida en ning´un lado). En el ejercicio 20.c veremos que este subconjunto no es r.e.
*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.
*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.
*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.
Línea 98: Línea 98:
*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) #}
*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).
*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 an´aloga 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 tambi´en lo es, ser´ıa recursivo. Como no lo es, no es tampoco r.e.
*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 an´alogo al del inciso a, pero cambiando 0 por 1.
*4. El conjunto es completamente analogo al del inciso a, pero cambiando 0 por 1.


==Ejercicio 21==
==Ejercicio 21==
Línea 105: Línea 105:


==Ejercicio 22==
==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 funci´on modificada.
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.
<br>[A] Z2  f(Z)
<br>[A] Z2  f(Z)
<br>IF Z2 NO ESTA EN LA LISTA Z3 GOTO B // Z3 guarda los elementos que doy como salida
<br>IF Z2 NO ESTA EN LA LISTA Z3 GOTO B // Z3 guarda los elementos que doy como salida
<br>Z  Z + 1 // Si ya estaba en la lista,
<br>Z  Z + 1 // Si ya estaba en la lista,
<br>GOTO A //genero otro elemento
<br>GOTO A //genero otro elemento
<br>[B] IF Lt(Z3) = X GOTO C // Si ya gener´e tantos elementos como me pidieron
<br>[B] IF Lt(Z3) = X GOTO C // Si ya genere tantos elementos como me pidieron
<br>AGREGO Z2 A LA LISTA Z3 // Si no, genero uno m´as
<br>AGREGO Z2 A LA LISTA Z3 // Si no, genero uno mas
<br>Z  Z + 1
<br>Z  Z + 1
<br>GOTO A
<br>GOTO A
<br>[C] Y  Z2
<br>[C] Y  Z2
Como este programa termina para todo X de entrada, tenemos que nuestro conjunto es la imagen de una funci´on parcialmente computable, total e inyectiva.
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 23==

Revisión del 01:42 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, 8x9!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 0!

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!