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