Práctica 1 - Funciones computables

Anuncio
Práctica 1 - Funciones computables
Lógica y Computabilidad
Verano 2007
Ejercicio 1. Sin usar macros, mostrar en S un programa que compute la función vacı́a ∅ :
Nk → N; es decir, la función que no está definida para ninguna k-upla de naturales.
Ejercicio 2. Escribir en S programas que computen los siguientes predicados:
(
1 si x1 = x2
a. igual(x1 , x2 ) =
0 si x1 6= x2
(
1 si x1 6= x2
b. distinto(x1 , x2 ) =
0 si x1 = x2
(
1 si x1 > x2
c. mayor(x1 , x2 ) =
0 si x1 ≤ x2
(
1 si x1 < x2
d. menor(x1 , x2 ) =
0 si x1 ≥ x2
Pueden utilizarse las macros GOTO A (salto incondicional), V ← k (asignación de constantes) y V1
← V2 (asignación de variables).
Ejercicio 3. Mostrar que el lenguaje S es minimal, en el sentido que ninguna de las instrucciones V ← V + 1, V ← V - 1 y IF V 6= 0 GOTO A puede eliminarse del lenguaje sin perder
expresividad.
Ejercicio 4. Escribir en
S
programas que calculen las siguientes funciones:
a. producto(x1 , x2 ) = x1 · x2 (usando suma como macro)
b. potencia(x1 , x2 ) = xx1 2 (usando producto como macro)
Además, pueden utilizarse las macros GOTO A, V ← k y V1 ← V2.
Ejercicio 5. Demostrar que el lenguaje
S
cumple las siguientes propiedades:
a. Las siguientes funciones son computables:
la función sucesor suc : N → N, suc(x) = x + 1.
las proyecciones uni : Nn → N, uni (x1 , . . . , xn ) = xi (para i tal que 1 ≤ i ≤ n).
las funciones constantes ck : N → N, ck (x) = k (para cualquier k ∈ N).
b. Si f, g1 , . . . , gk son computables con Dom(f ) ⊆ Nk y Dom(gi ) ⊆ Nr para todo i ∈ {1, . . . , k},
entonces la composición h es computable:
h(x1 , . . . , xr ) = f (g1 (x1 , . . . , xr ), . . . , gk (x1 , . . . , xr )).
¿Cuál es el dominio de h?
1
Ejercicio 6. Usando las macros vistas en clase, escribir programas en
siguientes funciones:
S
que computen las
a. f (x) = el mayor número natural n tal que 2 · n ≤ x
½
1 si x2 es múltiplo de x1
b. P (x1 , x2 ) =
0 sino
Ejercicio 7. Escribir un programa que compute el mı́nimo común múltiplo y otro que compute
el máximo común divisor entre dos números naturales. Se puede utilizar cualquier macro vista en
clase.
Ejercicio 8. Sean g : Nn+1 → N, s, t : N → N funciones computables. Usando las macros vistas
en clase, escribir programas que computen las siguientes funciones:
a. f1 (x1 , . . . , xn , y) = máx{g(x1 , . . . , xn , i) : 0 ≤ i ≤ y}
(
máx{g(x1 , . . . , xn , i) : s(y) ≤ i ≤ t(y)} si s(y) ≤ t(y)
b. f2 (x1 , . . . , xn , y) =
0
sino
2
Descargar