You are on page 1of 3

Lógica y computabilidad

Primer cuatrimestre — 2019

Práctica 6: Programas en S. Conjuntos y predicados computables.

En cada ejercicio puede utilizar como macro las funciones que calculó en ejercicios y/o
items anteriores.

1. Escribir programas en S que calculan las siguientes funciones.


a) suma(x1 , x2 ) = x1 + x2 .
b) prod(x1 , x2 ) = x1 · x2 .
c) pow(x1 , x2 ) = xx1 2 .
d) La función vacı́a ∅ : Nk → N dada por ∅(x1 , . . . , xn ) =↑.
2. Escribir programas en S que calculan los predicados
a) 
1 si x1 = x2
igual (x1 , x2 ) = “x1 = x2 ” =
0 si x1 6= x2
b) 
6 x2
1 si x1 =
distinto (x1 , x2 ) = “x1 6= x2 ” =
0 si x1 = x2
c) 
1 si x1 > x2
mayor (x1 , x2 ) = “x1 > x2 ” =
0 si x1 ≤ x2
d) 
1 si x1 < x2
menor (x1 , x2 ) = “x1 < x002 =
0 si x1 ≥ x2
3. Escribir un programa
 en S que calcula los predicados:

1 si x es par 1 si x es par
a) f (x) = b) f (x) =
0 si x es impar ↑ si x es impar
4. Sea f (x) el mayor número natural tal que 2 · n ≤ x. Escribir un programa en S que
calcula f .
5. Sea [r] la parte entera del número real r. Escribir un programa que compute las
funciones:


[log2 x] si x 6= 0
a) f (x) = [ x] b) f (x) =
↑ si x = 0
6. Escribir un programa en S que calcula la última cifra de un número y otro que
compute la primera cifra.
7. Dado un número x se define la sucesión an de la siguiente manera:

an + 1 si an es impar
a1 = x, an+1 =
an /2 si an es par
Escribir un programa en S que compute a la función f (n) que calcula el primer valor
de n en el que an = 1. ¿Es verdad que f (n) ≤ n?

1/3
Lógica y computabilidad — Primer cuatrimestre — 2019 Práctica 6

8. Repetir el ejercicio anterior definiendo



3an + 1 si an es impar
a1 = x, an+1 =
an /2 si an es par

¿Es verdad que f (n) ≤ n?


9. Escribir un programa en S que compute la función que al par de números x, y le
asigna el menor valor de n tal que las últimas tres cifras de xn son y, si y tiene hasta
tres cifras. Si y tiene más de tres cifras o no hay ninguna potencia como la pedida,
entonces el programa no termina. ¿Es posible analizar cuáles son los valores de x, y
que hacen que el programa no termine?

Funciones computables
Una función (parcial) f : Nk → N se dice S-computable o Turing computable (a veces
a secas, computable) si existe un programa en S que calcula f exactamente en cada
entrada para la cual está definida. En ese caso decimos que dicho programa computa
a f.
10. Dada una función computable f : N → N, escribir un programa en S usando el de f
como macro que compute a la función g definida como

1 si f (x) = 1
g (x) =
↑ si f (x) 6= 1
11. Dada una función computable g, ¿es posible escribir un programa en S que utilice a
g como macro que compute a la función

1 si g (x) ↓
h(x) =
↑ si g (x) ↑?
12. Sea Comp el conjunto de funciones computables. Probar las siguientes afirmaciones.
La función suc : N → N definida por suc (x) = x + 1 está en Comp.
Las proyecciones Pin : Nn → N, Pin (x1 , . . . , xn ) = xi están en Comp.
Las constantes Ckn : Nn → N, Ckn (x1 , . . . , xn ) = k están en Comp.
Si f : Nk → N y gi : Nr → N, 1 ≤ i ≤ k están en Comp entonces la composición

h(x1 , . . . , xr ) = f (g1 (x1 , . . . , xr ), . . . , gk (x1 , . . . , xr ))

está en Comp.
Si g : Nk + 2 → N y f : Nk → N están en Comp entonces h : Nk+1 → N definida
por

h(x1 , . . . , xk , 0) = f (x1 , . . . , xk )
h(x1 , . . . , xk , n + 1) = g(n, x1 , . . . , xk , h(x1 , . . . , xk )).

El predicado de decisión d : N4 → N:

s si x = y
d(x, y, s, t) =
t si x 6= y

está en Comp.

2/3
Lógica y computabilidad — Primer cuatrimestre — 2019 Práctica 6

13. Sea P un predicado computable. Hacer un programa en S utilizando P como macro


que compute la instrucción

IF P (V ) = 1 GOT O L
14. Sea f una función computable. Probar que la funciones
(
1 si f (x) = 1
g(x) =
↑ si no
(
1 si f (x) ↓
h(x) =
↑ si f (x) ↑ .
son computables.
15. Sean P y Q predicados computables. Probar que ¬P , P ∨ Q, P ∧ Q y P → Q son
computables.
16. Sean P1 , . . . Pk predicados computables totales mutuamente excluyentes y exhaustivos
(es decir, que para cada natural, exactamente uno de ellos toma el valor 1) y sean
g1 , . . . , gk funciones computables. Probar que la función

g1 (x) si P1 (x) = 1


.
f (x) = ..


g (x) si P (x) = 1
k k

es computable. ¿Qué sucede si los predicados no son mutuamente excluyentes y/o


exhaustivos? ¿Y si no son totales?
17. Sea f una función computable. Probar que existen infinitos programas en S que
computan a f .
18. Sea f : N → N una biyección (y por lo tanto total) computable. Probar que f −1 es
computable.

3/3

You might also like