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: | ||
{{Back|Lógica y Computabilidad}} | {{Back|Lógica y Computabilidad}} | ||
== 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> | |||
<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 7 == | == Ejercicio 7 == | ||
== Ejercicio 8 == | == Ejercicio 8 == | ||
== Ejercicio 9 == | == Ejercicio 9 == | ||
Línea 257: | Línea 145: | ||
0 \ sino \end{cases}</math> | 0 \ sino \end{cases}</math> | ||
sugerencia: considerar la funcion | |||
<math>g(x, y) = \begin{cases} x\ si \ f(x,y) = 1 \\ | <math>g(x, y) = \begin{cases} x\ si \ f(x,y) = 1 \\ | ||
x + 1 \ sino \end{cases}</math><br> | x + 1 \ sino \end{cases}</math><br> | ||
'''Solucion''' | '''Solucion:'''<br> | ||
supongo f computable, entonces g tambien lo es.<br> | |||
por el teorema de la recursion se que existe e tal que <math>\Phi_e(y) = g(e,y)</math>, pero entonces:<br><br> | |||
<math>g(e, y) = \begin{cases} e\ si \ f(e,y) = 1\\ | <math>g(e, y) = \begin{cases} e\ si \ f(e,y) = 1\\ | ||
Línea 276: | Línea 165: | ||
== Ejercicio 10 == | == Ejercicio 10 == | ||
Probar que las siguientes funciones no son computables | Probar que las siguientes funciones no son computables | ||
==== Item A ==== | ==== Item A ==== | ||
f(x) = | f(x) = 1 si <math>\Phi _x(x) = 2x</math> | ||
0 si no | |||
1 | |||
</math> | |||
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 192: | ||
==== 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 207: | ||
==== 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 226: | ||
==== 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 254: | ||
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 11 == | == Ejercicio 11 == | ||
Analizar la validez de las siguientes afirmaciones | Analizar la validez de las siguientes afirmaciones | ||
Línea 465: | Línea 291: | ||
Idem anterior, pero si la cantidad de conjuntos es infinita. | Idem anterior, pero si la cantidad de conjuntos es infinita. | ||
'''Solucion''' | '''Solucion 1''' | ||
Verdadero. | |||
Se deberia poder construir un programa utilizando la tecnica de Dove Tailing que vimos en la teorica.<br/> | |||
Es decir, para determinar si ''x'' pertenece, evaluo ''STP(b1, x, 1)''.<br/> | |||
Si es falso, pruebo con ''STP(b1, x, 2)'' y ''STP(b2, x, 2)''.<br/> | |||
Si dan falso, pruebo con ''STP(b1, x, 3)'', ''STP(b2, x, 3)'' y ''STP(b3, x, 3)''.<br/> | |||
Asi sucesivamente hasta hallar un valor que verifique, o colgarse si no pertenece al conjunto. | |||
En forma recursiva, la funcion seria: | |||
<math>U(x) = (\exists t)(\exists y) STP(B_y, x, t)</math><br/> | |||
Como la minimizacion es no acotada (ni tampoco propia), el programa es parcialmente computable y caracteriza un conjunto r.e. | |||
'''Solucion 2''' | |||
Falso. | Falso. | ||
Línea 475: | Línea 315: | ||
Pero sabemos que existen conjuntos de naturales que no son r.e. (por ejemplo el complemento de <math>K</math>). Por lo tanto, la proposición debe ser falsa. | Pero sabemos que existen conjuntos de naturales que no son r.e. (por ejemplo el complemento de <math>K</math>). Por lo tanto, la proposición debe ser falsa. | ||
== Ejercicio | |||
==== Item D ==== | |||
Encontrar el error en alguna de las soluciones del item C. | |||
== Ejercicio 12 == | |||
Sea B un conjunto infinito | Sea B un conjunto infinito | ||
Línea 521: | Línea 366: | ||
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 382: | ||
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 552: | Línea 396: | ||
Entonces A es re. | Entonces A es re. | ||
== Ejercicio 15 == | |||
== 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 | ||
Línea 574: | Línea 418: | ||
Con lo cual B = dom f => B es RE | Con lo cual B = dom f => B es RE | ||
== 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 427: | ||
<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 611: | Línea 455: | ||
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 471: | ||
<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 |