Diferencia entre revisiones de «Práctica 3 (LyC Verano)»

De Cuba-Wiki
 
(No se muestran 60 ediciones intermedias de 8 usuarios)
Línea 1: Línea 1:
= Ejercicios =
__NOTOC__
 
{{Back|Lógica y Computabilidad}}
== Ejercicio 1 ==
== Ejercicio 1 ==
 
Sea <math>f: \mathbb{N} \rightarrow \mathbb{N}</math> computable.  
Sea f: N -> N computable.  


=== Item A ===
=== Item A ===
Línea 9: Línea 8:
Demostrar que la función
Demostrar que la función


g(x) = min {y : f(y) = xsi existe y tal que f(y) = x
<math> g(x) = \begin{cases} min_y\; f(y) = x & \textrm{si existe } y \textrm{ tal que } f(y) = x \\
        se cuelga          si no
\uparrow & \textrm{si no}
\end{cases}
</math>


es parcialmente computable.
es parcialmente computable.
Línea 19: Línea 20:


  Z1 <- X1
  Z1 <- X1
  [A] Z3 <- f(Z2)  //Dado que f es computable, supongo que tengo el progama homónimo que la calcula,  
  [A] Z3 <- f(Z2)  //Dado que f es computable, supongo que tengo el programa 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 27: Línea 28:


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, f^-1 es computable.  
Demostrar que si f es además biyectiva, <math>f^{-1}</math> 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.
<math>f^{-1}(x) = min_y\; f(y) = x</math>
 
Notar que el programa que dimos computa <math>f^{-1}</math>. 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.


== Ejercicio 2 ==
== Ejercicio 2 ==


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.
Sea <math>f: \mathbb{N} \rightarrow \mathbb{N}</math> una función computable y sobreyectiva. Probar que existe una función computable e inyectiva <math>g: \mathbb{N} \rightarrow \mathbb{N}</math> tal que <math>g(f(x)) \le x</math> para todo x perteneciente a <math>\mathbb{N}</math>.


'''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 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.
Es casi el mismo problema que en el ejercicio 1. Podríamos ver a g como una especie de generalización de <math>f^{-1}</math>. Si f es inyectiva y sobreyectiva (i.e. biyectiva) se puede definir una <math>f^{-1}</math> tal que <math>f^{-1}(x) = g(f(x)) = x</math>, 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 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:
Si debilitamos la hipótesis sobre f, y sólo pedimos que sea sobreyectiva, pasa a haber más de un <math>x_i</math> tal que <math>g(f(x_i)) = x</math>. Pero siempre habrá un único <math>x_1</math> tal que <math>g(f(x_1)) = x</math> y además <math>x_1</math> es más chico que todos los <math>x_i</math>. Este <math>x_1</math> se encuentra con la minimización:


min{y : f(y) = x}
<math>min_y\; f(y) = x</math>


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.
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 <math>x_1</math> y <math>x_2</math> distintos no pueden provenir del mismo y, dado que esto violaría la definición de función.


== Ejercicio 3 ==
== Ejercicio 3 ==
Sea <math>f: \mathbb{N} \rightarrow \mathbb{N}</math> una función computable biyectiva. Probar que Halt(f(x), x) no es computable. Sugerencia: considerar la función:


Sea f: N -> N una función computable biyectiva. Probar que Halt(f(x), x) no es computable. Sugerencia: considerar la función:
<math>
h(x) = \begin{cases} 1 & \textrm{si\ } \neg\textrm{HALT}(x, f^-1(x)) \\
\uparrow & \textrm{si no}
\end{cases}
</math>


h(x) = 1 si      fi(x, f^-1(x)) se cuelga
'''Solucion'''
        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 68: Línea 74:
  Y <- 1
  Y <- 1


Llamemos P a este programa, entonces existe e perteneciente a N tal que #(P) = e
Llamemos P a este programa, entonces existe e 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
<math>HALT(f(e), e)  \Longleftrightarrow h(f(e)) \downarrow</math>


Y por el código de P:
Y por la definición de h:


P(f(e)) termina <=> -(HALT(f(e), e)
<math>h(f(e))\downarrow \;\Longleftrightarrow \neg HALT(f(e), e)</math>


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 84: Línea 90:
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
<math> f(x) = \begin{cases} \Phi(x,x) + 1 & si\; \Phi(x,x)\downarrow \\
        se cuelga    si no
\uparrow & sino
\end{cases}
</math>
 
<math> g(x) = \begin{cases} 1 & \textrm{si\ } x \in Dom(f) \\
\uparrow & sino
\end{cases}
</math>
 
<math> h(x) = \begin{cases} 0 & \textrm{si\ } \Phi(x,x)\downarrow \\
\uparrow & sino
\end{cases}
</math>


g(x) = 1            si x pertenece al dominio de f
Probar que son parcialmente computables.
        se cuelga    si no


h(x) = 0            si fi(x,x) termina
'''Solucion'''
        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 107: Línea 123:


  Y <- not(g(x))
  Y <- not(g(x))


== Ejercicio 5 ==
== Ejercicio 5 ==
Línea 113: Línea 128:
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
<math> f(x) = \begin{cases} 1 & \textrm{si\ } x = \langle\langle a,b\rangle ,c\rangle \; y\; \Phi(b,a) \textrm{\ termina\ en\ menos\ de\ c\ pasos} \\
         0 en otro caso
         0 & sino
\end{cases}
</math>


'''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 "fi(b,a) termina en menos de c pasos" es computado por el programa STP(b,a,c), que es pr.
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 "<math>\phi(b,a)</math> 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 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.
Decimos que una funcion parcialmente computable f es extensible si existe g computable 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>?
'''Solucion'''


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 \\
Sea <math>f(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>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>
Supongamos ahora <math>f</math> es extensible y sea <math>g</math> computable la función que la extiende. Podríamos reescribir la función HALT con <math>g</math> de la siguiente manera:
 
<math>Halt(x_1,\dots,x_n,y) = STP(x_1,\dots,x_n,y, g(x_1,\dots,x_n,y))</math>
 
Lo cual es absurdo, ya que HALT no es computable y con esta definición es claramente computable.
 
La idea es que como ''f'' te devuelve el número de pasos necesarios para terminar la ejecución de ''y'' termina, no importa qué te devuelva la extensión ''g'' ya que podés chequear si es efectivamente el número de pasos o si es uno de los casos en que ''f'' se colgaba y ''g'' llenó el agujero.
 
== Ejercicio 7 ==
Probar que existen funciones ''g'' y ''h'' primitivas recursivas tal que
# <math>g: \mathbb{N}^3 \rightarrow \mathbb{N}, \Phi_z(u,v,w) = \Phi_{g(u,v,w)}(z)</math>
# <math>h: \mathbb{N} \rightarrow \mathbb{N}, \Phi_{h(n,m)}(x) = \Phi_n(x) + \Phi_m(x)</math>
 
'''Solucion Item 1'''
 
Definimos una función <math>\xi(z, u, v, w) = \Phi_z(u,v,w)\,\!</math>
 
Esta función es parcialmente computable por lo tanto existe un programa que la computa y un número ''e'' asociado a tal programa. Ahora sabemos que se cumple la igualdad
 
<math>\Phi_e(z, u,v,w) = \Phi_z(u,v,w)\,\!</math>
 
Usando el teorema del parámetro sabemos que existe una función ''f'' tal que
 
<math>\Phi_{f(e, u, v, w)}(z) = \Phi_e(z, u,v,w) = \Phi_z(u,v,w)\,\!</math>
 
La función ''f'' es PR ya que es la que nos dá el Teorema del Parámetro. Esta función toma 4 parámetros pero como nosotros ya conocemos el ''e'' del programa anterior podemos definir la función ''g''
 
<math>g(u,v,w) = f(e,u,v,w)\,\!</math>
 
Y así nos queda una función ''g'' primitiva recursiva con la aridad necesaria que cumple
 
<math>\Phi_{f(e, u, v, w)}(z) = \Phi_{g(u,v,w)}(z) = \Phi_z(u,v,w)\,\!</math>
 
 
'''Solucion Item 2'''
 
De la misma manera que en el punto anterior definimos <math>\xi(x, n, m) = \Phi_n(x) + \Phi_m(x)\,\!</math>
 
Y como es parcialmente computable sabemos que existe un programa P con número ''e'' que la computa. Entonces
 
<math>\Phi_e(x, n, m) = \Phi_n(x) + \Phi_m(x)\,\!</math>
 
Usando el Teorema del Parámetro existe una función ''f'' primitiva recursiva tal que
 
<math>\Phi_{f(e,n,m)}(x) = \Phi_e(x, n, m) = \Phi_n(x) + \Phi_m(x)\,\!</math>
 
Definimos la función
 
<math>h(n,m) = f(e,n,m)\,\!</math>
 
que cumple con lo pedido.
 
== Ejercicio 8 ==
Probar que las siguientes funciones no son computables
 
<math>
f_1(x) =
\begin{cases}
1 & si\ \Phi_x(x) \neq x \\
0 & \textrm{sino}
\end{cases}
</math>
 
<math>
f_2(x,y) =
\begin{cases}
1 & si\ y \in \textrm{ran}\ \Phi_x \\
0 & \textrm{sino}
\end{cases}
</math>
 
'''Solución del primer caso'''
 
Definimos una función
 
<math>
g(x,y) =
\begin{cases}
x & si\ f_1(x) \\
x + 1 & \textrm{sino}
\end{cases}
</math>
 
Por el teorema de la recursión sabemos que existe un ''e'' tal que
 
<math>\Phi_e(y) = g(e,y) =
\begin{cases}
e & si\ f_1(e) \\
e + 1 & \textrm{sino}
\end{cases}
</math>
 
Como la igualdad debe valer para todo ''y''' podemos fijar y = e. Entonces podemos deducir que hay dos casos
 
1. <math>\Phi_e(e) \neq e \Longleftrightarrow g(e, e) \neq e \Longleftrightarrow \neg f_1(e) \Longleftrightarrow \Phi_e(e) = e</math>. '''Absurdo!'''


<math>Halt(x_1,\dots,x_n,y) = STP(x_1,\dots,x_n,y,f(x_1,\dots,x_n,y))</math>
2. <math>\Phi_e(e) = e \Longleftrightarrow g(e, e) = e \Longleftrightarrow f_1(e) \Longleftrightarrow \Phi_e(e) \neq e</math>. '''Absurdo!'''
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)
 
La función no puede ser computable.
 
 
'''Solución del segundo caso'''
 
Si fuera computable podemos escribir a HALT(x,y) = <math>f_2</math>(x,y). No puede ser computable.
 
== Ejercicio 9 ==
Probar usando el teorema de la recursion que la siguiente funcion no es computable
 
<math>f(x, y) = \begin{cases} 1\ si \  \Phi_x (y) > x \\
0 \ sino \end{cases}</math>
 
Sugerencia: considerar la funcion
 
<math>g(x, y) = \begin{cases} x\ si \  f(x,y) = 1 \\
x + 1 \ sino \end{cases}</math><br>
 
'''Solucion'''
 
Supongo f computable, entonces g tambien lo es. Por el teorema de la recursion se que existe e tal que <math>\Phi_e(y) = g(e,y)\,\!</math>, pero entonces:
 
<math>g(e, y) = \begin{cases} e\ si \  f(e,y) = 1\\
e + 1 \ sino \end{cases}</math><br>
<br>
donde <math>f(e,y) = 1 \Rightarrow \Phi_e(y) > e</math>
<br><br>
Si <math>\Phi_e(y) = g(e,y) = e \Rightarrow \Phi_e(y) > e.</math> Absurdo<br>
Si <math> \Phi_e(y) = e+1 \Rightarrow \Phi_e(y) \leq e.</math> Absurdo<br><br>
El absurdo viene de suponer f computable.


== Ejercicio 10 ==
== Ejercicio 10 ==
Probar que las siguientes funciones no son computables
Probar que las siguientes funciones no son computables


==== Item A ====
==== Item A ====
 
<math>
f(x) = 1 si <math>\Phi _x(x) = 2x</math>
f(x) =
        0  si no
\begin{cases}
1 & si\ \Phi _x(x) = 2x \\
0 & \textrm{sino}
\end{cases}
</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)
<math>
          2x   si no
g(x,y) =
\begin{cases}
2x+1 & si f(x) \\
2x & \textrm{sino}
\end{cases}
</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 163: Línea 311:


==== Item B ====
==== Item B ====
 
<math>
  f(x) = 1 si <math>dom(\Phi _x) = \emptyset</math>
  f(x) =
        0  si no
\begin{cases}
1 & si\ dom(\Phi _x) = \emptyset \\
0 & \textrm{sino}
\end{cases}
</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)
<math>
          <math>\uparrow</math> si no
g(x,y) =
\begin{cases}
1 & si\ f(x) \\
\uparrow & \textrm{sino}
\end{cases}
</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 178: Línea 335:


==== Item C ====
==== Item C ====
 
<math>
  f(x,y) = 1  si <math>\Phi _x = \Phi _y</math>
  f(x,y) =
          0  si no
\begin{cases}
& si\ \Phi _x = \Phi _y \\
0 & \textrm{sino}
\end{cases}
</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)
<math>
          <math>\Phi _y</math> si no
g(x,y) =
\begin{cases}
\Phi _y + 1 & si\ f(x,y) \\
\Phi _y & \textrm{sino}
\end{cases}
</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 197: Línea 363:


==== Item D ====
==== Item D ====
 
<math>
f(x) = 1 si <math>Im(\Phi _x)</math> es infinita
f(x) =
        0  si no
\begin{cases}
1 & si\ Im(\Phi _x)\ \textrm{es\ infinita} \\
0 & \textrm{sino}
\end{cases}
</math>


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)
<math>
          y si no
g(x,y) =
\begin{cases}
0 & si\ f(x) \\
y & \textrm{sino}
\end{cases}
</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>


Supongo <math>Im(\Phi _e) infinita</math>,
Supongo <math>Im(\Phi _e)</math> infinita,
<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) no infinita</math>,
Supongo <math>Im(\Phi _e)</math> finita,
<math>\Rightarrow \alpha(f(e)) \Rightarrow (\forall y) g(e,y) = \Phi _e(y) = y \Rightarrow Im(\Phi _e) = Naturales</math>
<math>\Rightarrow \alpha(f(e)) \Rightarrow (\forall y) g(e,y) = \Phi _e(y) = y \Rightarrow Im(\Phi _e) = \mathbb{N}</math>


==== Item E ====
==== Item E ====
 
<math>
  f(x) = 1 si <math>1 \in dom(\Phi _x)</math>
  f(x) =  
        0  si no
\begin{cases}
1 & si\ 1 \in dom(\Phi _x) \\
0 & \textrm{sino}
\end{cases}
</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 225: Línea 404:


Sea g(x,y) tal que
Sea g(x,y) tal que
  g(x,y) = <math>\uparrow</math>  si f(x)
<math>
          0 si no
  g(x,y) =
\begin{cases}
\uparrow & si\ f(x) \\
0 & \textrm{sino}
\end{cases}
</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>


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 ==
Probar que la siguiente función es parcialmente computable:
<math>
f_2(x,y) =
\begin{cases}
1 & si\ y \in \textrm{ran}\ \Phi_x \\
\uparrow & \textrm{sino}
\end{cases}
</math>
(comparar con la funcion f2 del Ejercicio 8)
'''Solución'''
La función es computada por el programa
<math>\Phi_x(y)</math><br>
Y <- 1


== Ejercicio 12 ==
== Ejercicio 12 ==
Analizar la validez de las siguientes afirmaciones
==== Item A ====
Si B es r.e., entonces B es computable o su complemento es computable.
'''Solucion'''
Falso.
<math>B = \{ x : \Phi _x(x)\downarrow \} </math> <br/>
B es r.e., pero no es computable, ni tampoco su complemento. Si lo fueran, entonces el Halting problem seria computable.
==== Item B ====
Si <math>B_1,...,B_k</math> son r.e., entonces la union tambien lo es.
'''Solucion'''
Verdadero.
Basta construir un programa que vaya evaluando en paralelo todas las posibilidades, hasta que alguno termine.
==== Item C ====
Idem anterior, pero si la cantidad de conjuntos es infinita.
'''Solucion'''
Falso.
Si la proposición fuera verdadera, entonces cualquier conjunto de naturales sería r.e.:
Sea <math>A</math> un conjunto de naturales cualquiera. Definimos la familia de conjuntos <math>B_i = \{ x: x\in A\land x < i \}</math>. Los <math>B_i</math> son todos finitos, por lo tanto son todos computables, por lo tanto son todos r.e.  Además, es claro que <math>A = \cup_{i=1}^\infty B_i</math>. Por lo tanto, si la proposición fuera verdadera, <math>A</math> tendría que ser r.e.
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 13 ==


Sea B un conjunto infinito
Sea B un conjunto infinito


==== Item a ====
==== Item A ====


Probar que B es r.e. sii existe una funcion f inyectiva computable tal que la imagen de f sea B.
Probar que B es c.e. sii existe una funcion f inyectiva computable tal que la imagen de f sea B.


'''Solucion'''
'''Solucion'''
Línea 244: Línea 487:
<math>\Rightarrow</math>)
<math>\Rightarrow</math>)


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:
Como B es c.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 253: Línea 496:
<math>\Leftarrow</math>)
<math>\Leftarrow</math>)


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 1.a para probarlo.


==== Item b ====
==== 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 277: Línea 521:
Como f es computable, entonces B lo es.
Como f es computable, entonces B lo es.


== Ejercicio 13 ==
== Ejercicio 14 ==


Probar que todo conjunto re infinito contiene un subconjunto computable infinito.
Probar que todo conjunto re infinito contiene un subconjunto computable infinito.
Línea 286: Línea 530:


Defino la funcion g tal que:
Defino la funcion g tal que:
  g(0) = 0
  g(0) = f(0)
  g(n+1) = f(min(t) (f(t) > g(n)))
  g(n+1) = f(min(t) (f(t) > g(n)))


Intuitivamente, la funcion g selecciona los valores que estan en orden creciente en la imagen de f. Como B es infinito, para cualquier indice elegido siempre existira otro mayor tal que la funcion resulte creciente. Por lo tanto, la minimizacion es propia y la funcion g resulta computable ademas de creciente.
Intuitivamente, la funcion g selecciona los valores que estan en orden creciente en la imagen de f. Como B es infinito, para cualquier indice elegido siempre existira otro mayor tal que la funcion resulte creciente. Por lo tanto, la minimizacion es propia y la funcion g resulta computable ademas de creciente.


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 14 ==
== Ejercicio 15 ==


Probar que si B es re y f es una funcion parcialmente computable, entonces <math>A = {x : f(x) \in B}</math> es re.
Probar que si B es re y f es una funcion parcialmente computable, entonces <math>A = \{x : f(x) \in B\}</math> es re.


'''Solución'''


Como B es re, existe g parcialmente computable tal que  
Como B es re, existe g parcialmente computable tal que  
<math>B = {x : g(x)\downarrow}</math>
<math>B = \{x : g(x)\downarrow\}</math>


Para que A sea re, tiene que existir una funcion h parcialmente computable tal que <math>A = {x : h(x)\downarrow}</math>.
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 309: Línea 554:


== Ejercicio 16 ==
== Ejercicio 16 ==
== Ejercicio 17 ==


<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)}, y se sabe que STP es un predicado PR


<br> <=)
<br> <=) Sea el predicado PR J(x) = (<math>\exists</math> y) P(x,y), y el siguiente programa P:
<pre>
[A] IF J(Z)=1 GOTO F
    Z++
    GOTO A
[F] Y <- 1
</pre>
Como puede verse, P computa la funcion parcialmente computable
<pre>
f(x) = {1  si J(x)=1
      {↑  sino
</pre>
Con lo cual B = dom f => B es RE


== Ejercicio 17 ==
== Ejercicio 18 ==


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 324: Línea 583:
<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 18 ==
== Ejercicio 19 ==
 
Sea <math>B=\{ x \ : \  \Phi_x \ es\ una\ funcion\ total\}</math>
Sea <math>B=\{ x \ : \  \Phi_x \ es\ una\ funcion\ total\}</math>


Línea 331: Línea 591:
b. Probar que <math>N - B</math> no es r.e.
b. Probar que <math>N - B</math> no es r.e.


====Item a)====
====Item A====
 
Este lo hicimos en clase.
Este lo hicimos en clase.
====Item b)====
 
====Item B====
 
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 348: Línea 611:
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 19==
==Ejercicio 20 ==
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>.


'''Solucion'''
Definimos
<math>f(x,y) = \begin{cases} 1\ si\ y = x \\ \uparrow\ sino \end{cases}</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>.
Por el teorema de la recursión, existe un e tal que:
<math>\Phi_e(y) = f(e,y)</math>, pero entonces:


[... EN CONSTRUCCIÓN ...]
<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 20 ==
== Ejercicio 21 ==


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 408: Línea 678:
   
   
El resto sale de la misma forma :)
El resto sale de la misma forma :)
[[Category:Prácticas]]

Revisión actual - 15:00 22 feb 2021

Plantilla:Back

Ejercicio 1

Sea computable.

Item A

Demostrar que la función

es parcialmente computable.

Solución

Damos un programa que computa g.

Z1 <- X1
[A] Z3 <- f(Z2)  //Dado que f es computable, supongo que tengo el programa homónimo que la calcula, 
                 //y además sé que no se cuelga.
IF Z3 = Z1 GOTO B
Z2 <- Z2 + 1
GOTO A
[B] Y <- Z2

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

Demostrar que si f es además biyectiva, es computable.

Solución

Notar que el programa que dimos computa . 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.

Ejercicio 2

Sea una función computable y sobreyectiva. Probar que existe una función computable e inyectiva tal que para todo x perteneciente a .

Solución

Es casi el mismo problema que en el ejercicio 1. Podríamos ver a g como una especie de generalización de . Si f es inyectiva y sobreyectiva (i.e. biyectiva) se puede definir una tal que , 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 tal que . Pero siempre habrá un único tal que y además es más chico que todos los . Este se encuentra con la minimización:

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 y distintos no pueden provenir del mismo y, dado que esto violaría la definición de función.

Ejercicio 3

Sea una función computable biyectiva. Probar que Halt(f(x), x) no es computable. Sugerencia: considerar la función:

Solucion

El siguiente programa computa h, suponiendo que HALT(f(x),x) sea computable:

[A] IF HALT(f(f^-1(x)), f^-1(x)) GOTO A
Y <- 1

que es equivalente a:

[A] IF HALT(x, f^-1(x)) GOTO A
Y <- 1

Llamemos P a este programa, entonces existe e tal que #(P) = e

Ahora bien, por la definición de HALT:

Y por la definición de h:

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.

Ejercicio 4

Sean f, g y h las funciones dadas por:

Probar que son parcialmente computables.

Solucion

Para resolver esto es suficiente con dar 3 programas que computen cada una de estas funciones.

Este programa computa f:

Y <- fi(x,x) + 1

Este programa computa g:

Z <- f(x)
Y <- 1

Y este computa h:

Y <- not(g(x))

Ejercicio 5

Probar que la siguiente función es primitiva recursiva:

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 " termina en menos de c pasos" es computado por el programa STP(b,a,c), que es pr.

Ejercicio 6

Decimos que una funcion parcialmente computable f es extensible si existe g computable 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.

Solucion

Sea

Supongamos ahora es extensible y sea computable la función que la extiende. Podríamos reescribir la función HALT con de la siguiente manera:

Lo cual es absurdo, ya que HALT no es computable y con esta definición es claramente computable.

La idea es que como f te devuelve el número de pasos necesarios para terminar la ejecución de y termina, no importa qué te devuelva la extensión g ya que podés chequear si es efectivamente el número de pasos o si es uno de los casos en que f se colgaba y g llenó el agujero.

Ejercicio 7

Probar que existen funciones g y h primitivas recursivas tal que

Solucion Item 1

Definimos una función

Esta función es parcialmente computable por lo tanto existe un programa que la computa y un número e asociado a tal programa. Ahora sabemos que se cumple la igualdad

Usando el teorema del parámetro sabemos que existe una función f tal que

La función f es PR ya que es la que nos dá el Teorema del Parámetro. Esta función toma 4 parámetros pero como nosotros ya conocemos el e del programa anterior podemos definir la función g

Y así nos queda una función g primitiva recursiva con la aridad necesaria que cumple


Solucion Item 2

De la misma manera que en el punto anterior definimos

Y como es parcialmente computable sabemos que existe un programa P con número e que la computa. Entonces

Usando el Teorema del Parámetro existe una función f primitiva recursiva tal que

Definimos la función

que cumple con lo pedido.

Ejercicio 8

Probar que las siguientes funciones no son computables

Solución del primer caso

Definimos una función

Por el teorema de la recursión sabemos que existe un e tal que

Como la igualdad debe valer para todo y' podemos fijar y = e. Entonces podemos deducir que hay dos casos

1. . Absurdo!

2. . Absurdo!

La función no puede ser computable.


Solución del segundo caso

Si fuera computable podemos escribir a HALT(x,y) = (x,y). No puede ser computable.

Ejercicio 9

Probar usando el teorema de la recursion que la siguiente funcion no es computable

Sugerencia: considerar la funcion


Solucion

Supongo f computable, entonces g tambien lo es. Por el teorema de la recursion se que existe e tal que , pero entonces:



donde

Si Absurdo
Si Absurdo

El absurdo viene de suponer f computable.

Ejercicio 10

Probar que las siguientes funciones no son computables

Item A

Supongo f es computable, por ende es total

Sea g(x,y) tal que

Por teorema de la recursion,

Supongo

Supongo

Absurdo que proviene de suponer que f es computable

Todos los items siguientes se resuelven con el mismo mecanismo

Item B

Supongo f es computable

Sea g(x,y) tal que

Por teorema de la recursion,

Evaluando g en e se llega al absurdo

Item C

Supongo f es computable, por ende tambien total

Sea g(x,y) tal que

Por teorema de la recursion,

Sea a tal que

Por teorema del parametro,

Evaluando g en (s,a) se llega al absurdo

Item D

Supongo f es computable, por ende tambien es total

Sea g(x,y) tal que

Por teorema de la recursion,

Supongo infinita,

Supongo finita,

Item E

La condicion equivale a decir que

Supongo f es computable, por ende tambien es total

Sea g(x,y) tal que

Por teorema de la recursion,

Evaluando g en (e,y) para todo y, se llega al absurdo

Ejercicio 11

Probar que la siguiente función es parcialmente computable:

(comparar con la funcion f2 del Ejercicio 8)

Solución

La función es computada por el programa


Y <- 1

Ejercicio 12

Analizar la validez de las siguientes afirmaciones

Item A

Si B es r.e., entonces B es computable o su complemento es computable.

Solucion

Falso.


B es r.e., pero no es computable, ni tampoco su complemento. Si lo fueran, entonces el Halting problem seria computable.

Item B

Si son r.e., entonces la union tambien lo es.

Solucion

Verdadero.

Basta construir un programa que vaya evaluando en paralelo todas las posibilidades, hasta que alguno termine.

Item C

Idem anterior, pero si la cantidad de conjuntos es infinita.

Solucion

Falso.

Si la proposición fuera verdadera, entonces cualquier conjunto de naturales sería r.e.:

Sea un conjunto de naturales cualquiera. Definimos la familia de conjuntos . Los son todos finitos, por lo tanto son todos computables, por lo tanto son todos r.e. Además, es claro que . Por lo tanto, si la proposición fuera verdadera, tendría que ser r.e.

Pero sabemos que existen conjuntos de naturales que no son r.e. (por ejemplo el complemento de ). Por lo tanto, la proposición debe ser falsa.

Ejercicio 13

Sea B un conjunto infinito

Item A

Probar que B es c.e. sii existe una funcion f inyectiva computable tal que la imagen de f sea B.

Solucion

)

Como B es c.e., existe una funcion g primitiva recursiva (por lo tanto, computable) tal que su imagen sea B. Defino f en funcion de g:


Intuitivamente, f va seleccionando todos los valores de g tal que no se hayan repetido anteriormente. Como B es infinito, siempre existira algun nuevo valor t que no sea repetido. Por lo tanto, la minimizacion es propia y f resulta computable e inyectiva, pues no repite valores; y su imagen es igual a B.

)


Existe una funcion f inyectiva computable tal que su imagen es igual a B, por lo tanto, B es r.e.
Se puede usar la funcion del 1.a para probarlo.

Item B

Probar que B es computable sii existe una funcion f de una variable computable y creciente tal que Im f = B.

Solucion

)

B = {x : B(x)} = {f(0), f(1), ... }


La idea de f es que va probando con todos los numeros naturales y para cada uno de ellos chequea si B(i) es verdadero o no. Si lo es, entonces lo devuelve como valor de la funcion, si no, sigue probando.

)

B es computable sii su funcion caracteristica B(x) lo es.

Como f es computable, entonces B lo es.

Ejercicio 14

Probar que todo conjunto re infinito contiene un subconjunto computable infinito.

Solucion

Sea f p.r. tal que la imagen de f sea igual al conjunto B (r.e. e infinito).

Defino la funcion g tal que:

g(0) = f(0)
g(n+1) = f(min(t) (f(t) > g(n)))

Intuitivamente, la funcion g selecciona los valores que estan en orden creciente en la imagen de f. Como B es infinito, para cualquier indice elegido siempre existira otro mayor tal que la funcion resulte creciente. Por lo tanto, la minimizacion es propia y la funcion g resulta computable ademas de creciente.

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 15

Probar que si B es re y f es una funcion parcialmente computable, entonces es re.

Solución

Como B es re, existe g parcialmente computable tal que

Para que A sea re, tiene que existir una funcion h parcialmente computable tal que .

Sea h = g(f(x)), parcialmente computable por ser composicion de pc.

Entonces A es re.

Ejercicio 16

Ejercicio 17


=>) Sea A = We = {x: Φx↓} => x є A si existe un tiempo t tal que Φe(x)↓, entonces
A = {x: ( t) STP(1)(x,e,t)}, y se sabe que STP es un predicado PR


<=) Sea el predicado PR J(x) = ( y) P(x,y), y el siguiente programa P:

[A] IF J(Z)=1 GOTO F
    Z++
    GOTO A
[F] Y <- 1

Como puede verse, P computa la funcion parcialmente computable

f(x) = {1  si J(x)=1
       {↑  sino

Con lo cual B = dom f => B es RE

Ejercicio 18

Definir un predicado pr P tal que no sea re.

Sea Como STP es p.r., es claramente p.r. también Notemos ahora que es lo mismo que , o sea, es el complemento del famoso conjunto (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 19

Sea

a. Probar que B no es r.e.

b. Probar que no es r.e.

Item A

Este lo hicimos en clase.

Item B

Lo que nos piden probar es que el complemento de B no es r.e. O sea, que el conjunto 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).

Definamos entonces:

Por el teorema de la recursión, existe un e tal que: , pero entonces:

Si (Absurdo porque partimos de que e era parcial y por eso estaba en A)

Si (Absurdo porque partimos de que e era total y por eso no estaba en A).

Pero entonces superabsurdo, que partió de suponer que A era un conjunto r.e.

Ejercicio 20

Probar que existe un tal que . Tal e existe,por definición de , si y sólo si existe un tal que .

Solucion

Definimos

Por el teorema de la recursión, existe un e tal que: , pero entonces:

estará definida solo si y=e, es decir, el dominio de será e, eso significa que que era lo que queriamos probar.

Ejercicio 21

Demostrar que las funciones definidas en el Ejercicio 10 no son computables aplicando el Teorema de Rice

Item C

f(x,y) = 1  si 
         0  si no

A = {x: }

Quiero ver que A no es computable por Rice. Para esto tengo que probar que:

1.

A representa el conjunto de los programas que computan el programa 0 (aquel que devuelve 0 para toda entrada).

Ejemplo: el programa que computa f(x,y) donde

f(x,y) = (x>y).(y-x)+(x<=y).(x-y)

claramente, esta función hace lo mismo que #P=0 donde P es el programa que computa a

n(x) = 0

Entonces,

2.

Ejemplo: el programa que computa la función constante

g(x) = 8

Además, puede verse que hay programas que no están en A

Entonces,

3. A es un conjunto de índices

Se dice que A es un conjunto de índices si dado C una clase de funciones parcialmente computables A es el conjunto de los programas que computan a dichas funciones. En este caso, A es el conjunto de los programas que computan lo mismo que (la función nula). Entonces dado x perteneciente a A y --> y pertenece a A.

Muy bien, ahora, por Rice, A no es computable

Supongo f computable. Entonces f(x,0) es computable. Pero f(x,0) = g(x) es la función característica de A. Absurdo, porque A no es computable --> f no es computable :)

El resto sale de la misma forma :)