Edición de «Práctica 3 (LyC Verano)»
De Cuba-Wiki
Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces publica los cambios para así efectuar la reversión.
Revisión actual | Tu texto | ||
Línea 1: | Línea 1: | ||
= Ejercicios = | |||
== Ejercicio 1 == | == Ejercicio 1 == | ||
Sea | |||
Sea f: N -> N computable. | |||
=== Item A === | === Item A === | ||
Línea 8: | Línea 9: | ||
Demostrar que la función | Demostrar que la función | ||
g(x) = min {y : f(y) = x} si existe y tal que f(y) = x | |||
se cuelga si no | |||
es parcialmente computable. | es parcialmente computable. | ||
Línea 20: | Línea 19: | ||
Z1 <- X1 | Z1 <- X1 | ||
[A] Z3 <- f(Z2) //Dado que f es computable, supongo que tengo el | [A] Z3 <- f(Z2) //Dado que f es computable, supongo que tengo el progama homónimo que la calcula, | ||
//y además sé que no se cuelga. | //y además sé que no se cuelga. | ||
IF Z3 = Z1 GOTO B | IF Z3 = Z1 GOTO B | ||
Línea 28: | Línea 27: | ||
La idea es sencillamente chequear si f(y) = x, empezando con y = 0 e incrementando de a uno. Si en algún momento esto ocurre, ese y es el que busca la minimización de la primer rama de g. Si no ocurre nunca, el programa sigue incrementando el valor chequeado infinitamente, o sea se cuelga. | La idea es sencillamente chequear si f(y) = x, empezando con y = 0 e incrementando de a uno. Si en algún momento esto ocurre, ese y es el que busca la minimización de la primer rama de g. Si no ocurre nunca, el programa sigue incrementando el valor chequeado infinitamente, o sea se cuelga. | ||
=== Item B === | === Item B === | ||
Demostrar que si f es además biyectiva, | Demostrar que si f es además biyectiva, f^-1 es computable. | ||
'''Solución''' | '''Solución''' | ||
Notar que el programa que dimos computa f^-1. Como f es biyectiva, es inyectiva. Esto asegura que el resultado de la expresión min{y:f(y) = x} devuelve no sólo el mínimo y, sino el único. Además, la sobreyectividad nos asegura la existencia de tal y, con lo cual el programa no puede colgarse. | |||
Notar que el programa que dimos computa | |||
== Ejercicio 2 == | == Ejercicio 2 == | ||
Sea | Sea f: N -> N una función computable y sobreyectiva. Probar que existe una función computable e inyectiva g: N -> N tal que g(f(x)) <= x para todo x perteneciente a N. | ||
'''Solución''' | '''Solución''' | ||
Es casi el mismo problema que en el ejercicio 1. Podríamos ver a g como una especie de generalización de | Es casi el mismo problema que en el ejercicio 1. Podríamos ver a g como una especie de generalización de f^-1. Si f es inyectiva y sobreyectiva (i.e. biyectiva) se puede definir una f^-1 tal que f^-1(x) = g(f(x)) = x, para todo x natural. | ||
Si debilitamos la hipótesis sobre f, y sólo pedimos que sea sobreyectiva, pasa a haber más de un | Si debilitamos la hipótesis sobre f, y sólo pedimos que sea sobreyectiva, pasa a haber más de un xi tal que g(f(xi)) = x. Pero siempre habrá un único x1 tal que g(f(x1)) = x y además x1 es más chico que todos los xi. Este x1 se encuentra con la minimización: | ||
min{y : f(y) = x} | |||
Por otra parte, esta minimización es computable, dado que está garantizado por la sobreyectividad de f la existencia de al menos un y que verifique f(y) = x. Nuevamente, esta función se computa con el programa del ejercicio 1, item A. Por último, g es inyectiva porque en la expresión f(y) = x, dos valores | Por otra parte, esta minimización es computable, dado que está garantizado por la sobreyectividad de f la existencia de al menos un y que verifique f(y) = x. Nuevamente, esta función se computa con el programa del ejercicio 1, item A. Por último, g es inyectiva porque en la expresión f(y) = x, dos valores x1 y x2 distintos no pueden provenir del mismo y, dado que esto violaría la definición de función. | ||
== Ejercicio 3 == | == Ejercicio 3 == | ||
Sea f: N -> N una función computable biyectiva. Probar que Halt(f(x), x) no es computable. Sugerencia: considerar la función: | |||
h(x) = 1 si fi(x, f^-1(x)) se cuelga | |||
se cuelga en otro caso | |||
El siguiente programa computa h, suponiendo que HALT(f(x),x) sea computable: | El siguiente programa computa h, suponiendo que HALT(f(x),x) sea computable: | ||
Línea 74: | Línea 68: | ||
Y <- 1 | Y <- 1 | ||
Llamemos P a este programa, entonces existe e tal que #(P) = e | Llamemos P a este programa, entonces existe e perteneciente a N tal que #(P) = e | ||
Ahora bien, por la definición de HALT: | Ahora bien, por la definición de HALT: | ||
HALT(f(e), e) <=> P(f(e)) termina | |||
Y por | Y por el código de P: | ||
P(f(e)) termina <=> -(HALT(f(e), e) | |||
Lo que nos lleva a un absurdo, que proviene de la única suposición que hicimos, que es que HALT(f(x), x) es computable. | Lo que nos lleva a un absurdo, que proviene de la única suposición que hicimos, que es que HALT(f(x), x) es computable. | ||
Línea 90: | Línea 84: | ||
Sean f, g y h las funciones dadas por: | Sean f, g y h las funciones dadas por: | ||
f(x) = fi(x,x) + 1 si fi(x,x) termina | |||
se cuelga si no | |||
g(x) = 1 si x pertenece al dominio de f | |||
se cuelga si no | |||
h(x) = 0 si fi(x,x) termina | |||
se cuelga si no | |||
Para resolver esto es suficiente con dar 3 programas que computen cada una de estas funciones. | Para resolver esto es suficiente con dar 3 programas que computen cada una de estas funciones. | ||
Línea 123: | Línea 107: | ||
Y <- not(g(x)) | Y <- not(g(x)) | ||
== Ejercicio 5 == | == Ejercicio 5 == | ||
Línea 128: | Línea 113: | ||
Probar que la siguiente función es primitiva recursiva: | Probar que la siguiente función es primitiva recursiva: | ||
f(x) = 1 si x = <<a,b>,c> y fi(b,a) termina en menos de c pasos | |||
0 | 0 en otro caso | ||
'''Solución''' | '''Solución''' | ||
f(x) es pr porque tanto los valores que devuelve como las funciones utilizadas en las guardas lo son. La decodificación de x en a, b y c es pr. y el predicado " | f(x) es pr porque tanto los valores que devuelve como las funciones utilizadas en las guardas lo son. La decodificación de x en a, b y c es pr. y el predicado "fi(b,a) termina en menos de c pasos" es computado por el programa STP(b,a,c), que es pr. | ||
== Ejercicio 6 == | == Ejercicio 6 == | ||
Decimos que una funcion parcialmente computable f es extensible si existe g | Decimos que una funcion parcialmente computable f es extensible si existe g computalbe tal que g(x) = f(x) para todo x en el dominio de f. Probar que existe una funcion f parcialmente computable que no es extensible. | ||
¿<math>f(x) = \Phi _x(x)</math>? | |||
Sea <math> | Sea <math>g(x_1, \dots, x_n, y) = \begin{cases} min_t STP(x_1,\dots,x_n,y,t)\ si \ \Phi_y (x_1,\dots,x_n) \downarrow \\ | ||
\uparrow \ sino \end{cases}</math> | \uparrow \ sino \end{cases}</math> | ||
Supongamos ahora <math> | Supongamos ahora <math>g</math> es extensible y sea <math>f</math> computable la función que la extiende. Pero entonces, podríamos reescribir la función <math>Halt</math> con <math>f</math> | ||
<math>Halt(x_1,\dots,x_n,y) = STP(x_1,\dots,x_n,y, | <math>Halt(x_1,\dots,x_n,y) = STP(x_1,\dots,x_n,y,f(x_1,\dots,x_n,y))</math> | ||
Lo cual es absurdo, ya que <math>Halt</math> no es computable y con esta definición es claramente computable. (la idea es que como <math>g</math> te devuelve en qué número de "iteración" <math>y</math> termina, no importa qué te devuelva la extensión <math>f</math> ya que podés chequear si es fruta o es uno de los valores de <math>g</math>, chequeando con <math>STP</math> si efectivamente <math>x</math> terminó en la cantidad de pasos que te dijo f) | |||
== Ejercicio 10 == | |||
== Ejercicio | |||
Probar que las siguientes funciones no son computables | Probar que las siguientes funciones no son computables | ||
==== Item A ==== | |||
f(x) = 1 si <math>\Phi _x(x) = 2x</math> | |||
0 si no | |||
Supongo f es computable, por ende es total | Supongo f es computable, por ende es total | ||
Sea g(x,y) tal que | Sea g(x,y) tal que | ||
g(x,y) = 2x+1 si f(x) | |||
g(x,y) = | 2x si no | ||
2x+1 | |||
2x | |||
Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | ||
Línea 311: | Línea 163: | ||
==== Item B ==== | ==== Item B ==== | ||
f(x) = | f(x) = 1 si <math>dom(\Phi _x) = \emptyset</math> | ||
0 si no | |||
1 | |||
</math> | |||
Supongo f es computable | Supongo f es computable | ||
Sea g(x,y) tal que | Sea g(x,y) tal que | ||
g(x,y) = 1 si f(x) | |||
g(x,y) = | <math>\uparrow</math> si no | ||
1 | |||
\uparrow | |||
</math> | |||
Por teorema de la recursion, <math>\exists e / \Phi _e = g(e)</math> | Por teorema de la recursion, <math>\exists e / \Phi _e = g(e)</math> | ||
Línea 335: | Línea 178: | ||
==== Item C ==== | ==== Item C ==== | ||
f(x,y) = | f(x,y) = 1 si <math>\Phi _x = \Phi _y</math> | ||
0 si no | |||
1 | |||
</math> | |||
Supongo f es computable, por ende tambien total | Supongo f es computable, por ende tambien total | ||
Sea g(x,y) tal que | Sea g(x,y) tal que | ||
g(x,y) = <math>\Phi _y + 1</math> si f(x,y) | |||
g(x,y) = | <math>\Phi _y</math> si no | ||
\Phi _y + 1 | |||
\Phi _y | |||
</math> | |||
Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | ||
Línea 363: | Línea 197: | ||
==== Item D ==== | ==== Item D ==== | ||
f(x) = | f(x) = 1 si <math>Im(\Phi _x)</math> es infinita | ||
0 si no | |||
1 | |||
0 | |||
Supongo f es computable, por ende tambien es total | Supongo f es computable, por ende tambien es total | ||
Sea g(x,y) tal que | Sea g(x,y) tal que | ||
g(x,y) = 0 si f(x) | |||
g(x,y) = | y si no | ||
0 | |||
y | |||
Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | ||
Supongo <math>Im(\Phi _e)</math> | Supongo <math>Im(\Phi _e) infinita</math>, | ||
<math>\Rightarrow f(e) \Rightarrow (\forall y) g(e,y) = \Phi _e(y) = 0 \Rightarrow Im(\Phi _e) = {0}</math> | <math>\Rightarrow f(e) \Rightarrow (\forall y) g(e,y) = \Phi _e(y) = 0 \Rightarrow Im(\Phi _e) = {0}</math> | ||
Supongo <math>Im(\Phi _e)</math> | Supongo <math>Im(\Phi _e) no infinita</math>, | ||
<math>\Rightarrow \alpha(f(e)) \Rightarrow (\forall y) g(e,y) = \Phi _e(y) = y \Rightarrow Im(\Phi _e) = | <math>\Rightarrow \alpha(f(e)) \Rightarrow (\forall y) g(e,y) = \Phi _e(y) = y \Rightarrow Im(\Phi _e) = Naturales</math> | ||
==== Item E ==== | ==== Item E ==== | ||
f(x) = | f(x) = 1 si <math>1 \in dom(\Phi _x)</math> | ||
0 si no | |||
1 | |||
</math> | |||
La condicion equivale a decir que <math>\Phi _x(1)\downarrow</math> | La condicion equivale a decir que <math>\Phi _x(1)\downarrow</math> | ||
Línea 404: | Línea 225: | ||
Sea g(x,y) tal que | Sea g(x,y) tal que | ||
g(x,y) = <math>\uparrow</math> si f(x) | |||
g(x,y) = | 0 si no | ||
\uparrow | |||
0 | |||
Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | Por teorema de la recursion, <math>\exists e / \Phi _e(y) = g(e,y)</math> | ||
Evaluando g en (e,y) para todo y, se llega al absurdo | Evaluando g en (e,y) para todo y, se llega al absurdo | ||
== Ejercicio 12 == | == Ejercicio 12 == | ||
Sea B un conjunto infinito | Sea B un conjunto infinito | ||
==== Item | ==== Item a ==== | ||
Probar que B es | Probar que B es r.e. sii existe una funcion f inyectiva computable tal que la imagen de f sea B. | ||
'''Solucion''' | '''Solucion''' | ||
Línea 487: | Línea 244: | ||
<math>\Rightarrow</math>) | <math>\Rightarrow</math>) | ||
Como B es | Como B es r.e., existe una funcion g primitiva recursiva (por lo tanto, computable) tal que su imagen sea B. Defino f en funcion de g: | ||
<math>f(0) = g(0)</math> <br/> | <math>f(0) = g(0)</math> <br/> | ||
Línea 497: | Línea 254: | ||
<br>Existe una funcion f inyectiva computable tal que su imagen es igual a B, por lo tanto, B es r.e. | <br>Existe una funcion f inyectiva computable tal que su imagen es igual a B, por lo tanto, B es r.e. | ||
<br>Se puede usar la funcion del | <br>Se puede usar la funcion del 12.a para probarlo. | ||
==== Item | ==== Item b ==== | ||
Probar que B es computable sii existe una funcion f de una variable computable y creciente tal que Im f = B. | Probar que B es computable sii existe una funcion f de una variable computable y creciente tal que Im f = B. | ||
Línea 521: | Línea 278: | ||
Como f es computable, entonces B lo es. | Como f es computable, entonces B lo es. | ||
== Ejercicio | == Ejercicio 13 == | ||
Probar que todo conjunto re infinito contiene un subconjunto computable infinito. | Probar que todo conjunto re infinito contiene un subconjunto computable infinito. | ||
Línea 537: | Línea 294: | ||
Como g es computable y creciente, entonces su imagen define un conjunto, contenido en B, que es computable e infinito (vale por ej 12). | Como g es computable y creciente, entonces su imagen define un conjunto, contenido en B, que es computable e infinito (vale por ej 12). | ||
== Ejercicio | == Ejercicio 14 == | ||
Probar que si B es re y f es una funcion parcialmente computable, entonces <math>A = | Probar que si B es re y f es una funcion parcialmente computable, entonces <math>A = {x : f(x) \in B}</math> es re. | ||
Como B es re, existe g parcialmente computable tal que | Como B es re, existe g parcialmente computable tal que | ||
<math>B = | <math>B = {x : g(x)\downarrow}</math> | ||
Para que A sea re, tiene que existir una funcion h parcialmente computable tal que <math>A = | Para que A sea re, tiene que existir una funcion h parcialmente computable tal que <math>A = {x : h(x)\downarrow}</math>. | ||
Sea h = g(f(x)), parcialmente computable por ser composicion de pc. | Sea h = g(f(x)), parcialmente computable por ser composicion de pc. | ||
Línea 554: | Línea 310: | ||
== Ejercicio 16 == | == Ejercicio 16 == | ||
<br> =>) Sea A = We = {x: Φx↓} => x є A si existe un tiempo t tal que Φe(x)↓, entonces | <br> =>) Sea A = We = {x: Φx↓} => x є A si existe un tiempo t tal que Φe(x)↓, entonces | ||
<br> A = {x: (<math>\exists</math> t) STP<sup>(1)</sup>(x,e,t)} | <br> A = {x: (<math>\exists</math> t) STP<sup>(1)</sup>(x,e,t)} | ||
<br> <=) | <br> <=) | ||
== Ejercicio | == Ejercicio 17 == | ||
Definir un predicado pr P tal que <math>A = {x : (\forall y)P(x,y)}</math> no sea re. | Definir un predicado pr P tal que <math>A = {x : (\forall y)P(x,y)}</math> no sea re. | ||
Línea 583: | Línea 325: | ||
<math>B=\{x | \Phi_x (x)\uparrow\}</math> , o sea, es el complemento del famoso conjunto <math>K</math> (x tal que Halt(x,x)), que ya sabíamos que no es r.e. porque lo probamos en la teórica/práctica. | <math>B=\{x | \Phi_x (x)\uparrow\}</math> , o sea, es el complemento del famoso conjunto <math>K</math> (x tal que Halt(x,x)), que ya sabíamos que no es r.e. porque lo probamos en la teórica/práctica. | ||
== Ejercicio | == Ejercicio 18 == | ||
Sea <math>B=\{ x \ : \ \Phi_x \ es\ una\ funcion\ total\}</math> | Sea <math>B=\{ x \ : \ \Phi_x \ es\ una\ funcion\ total\}</math> | ||
Línea 591: | Línea 332: | ||
b. Probar que <math>N - B</math> no es r.e. | b. Probar que <math>N - B</math> no es r.e. | ||
====Item | ====Item a)==== | ||
Este lo hicimos en clase. | Este lo hicimos en clase. | ||
====Item b)==== | |||
====Item | |||
Lo que nos piden probar es que el complemento de B no es r.e. O sea, que el conjunto <math>A=\{ x \ : \ \Phi_x \ es\ una\ funcion\ parcial\}</math> no es r.e. Supongamos entonces lo contrario. Esta suposición implica que la pertenencia a B es parcialmente computable (devuelve 1 si es true, se cuelga sino). | Lo que nos piden probar es que el complemento de B no es r.e. O sea, que el conjunto <math>A=\{ x \ : \ \Phi_x \ es\ una\ funcion\ parcial\}</math> no es r.e. Supongamos entonces lo contrario. Esta suposición implica que la pertenencia a B es parcialmente computable (devuelve 1 si es true, se cuelga sino). | ||
Línea 611: | Línea 349: | ||
Pero entonces superabsurdo, que partió de suponer que A era un conjunto r.e. | Pero entonces superabsurdo, que partió de suponer que A era un conjunto r.e. | ||
==Ejercicio | ==Ejercicio 19== | ||
Probar que existe un <math>e</math> tal que <math>W_e=\{e\}</math>. | Probar que existe un <math>e</math> tal que <math>W_e=\{e\}</math>. | ||
Tal e existe,por definición de <math>W_e</math>, si y sólo si existe un <math>e</math> tal que <math>\{e\}=\{x \in N\ |\ \Phi_e(x)\downarrow\}</math>. | |||
[... EN CONSTRUCCIÓN ...] | |||
<br><br> | |||
''Posible resolucion'' '''(Sin verificar)''' | |||
<br><br> | |||
<math>f(x,y) = \begin{cases} 1\ si\ y = x \\ \uparrow\ sino \end{cases}</math> | <math>f(x,y) = \begin{cases} 1\ si\ y = x \\ \uparrow\ sino \end{cases}</math> | ||
Por el teorema de la recursión, existe un e tal que: | Por el teorema de la recursión, existe un e tal que: | ||
<math>\Phi_e(y) = f(e,y)</math>, pero entonces: | <math>\Phi_e(y) = f(e,y)</math>, pero entonces: | ||
Línea 626: | Línea 365: | ||
<math>\Phi_e(y)</math> estará definida solo si y=e, es decir, el dominio de <math>\Phi_e(y)</math> será e, eso significa que <math>W_e=\{e\}</math> que era lo que queriamos probar. | <math>\Phi_e(y)</math> estará definida solo si y=e, es decir, el dominio de <math>\Phi_e(y)</math> será e, eso significa que <math>W_e=\{e\}</math> que era lo que queriamos probar. | ||
== Ejercicio | == Ejercicio 20 == | ||
Demostrar que las funciones definidas en el Ejercicio 10 no son computables aplicando el Teorema de Rice | Demostrar que las funciones definidas en el Ejercicio 10 no son computables aplicando el Teorema de Rice | ||
Línea 678: | Línea 417: | ||
El resto sale de la misma forma :) | El resto sale de la misma forma :) | ||