Ejercicios resueltos. Teoría de la Computabilidad. Tema 3 Ejercicio.- Sea f : N 3 N y g 1 : N N, g 2 : N 2 N y g 3 : N 3 N. a) En los siguientes casos, expresar f como composición de funciones de la misma aridad. 1. f(x, y, z) = g 1 (z) 2. f(x, y, z) = g 3 (y, z, x) 3. f(x, y, z) = g 2 (g 1 (y), g 3 (x, y, z)) 4. f(x, y, z) = g 1 (z) + g 2 (y, x) b) Suponiendo que g 1, g 2, g 3 son GOT O computable, probar que, en cada caso, también lo es f. SOLUCIÓN: 1. f(x, y, z) = g 1 (z) f(x, y, z) = g 1 ( (3) 3 (x, y, z)) f(x, y, z) = C(g 1 ; (3) 3 )(x, y, z) a) Es decir: f = C(g 1 ; (3) 3 ) b) Y por tanto, f es GOT O computable. 2. f(x, y, z) = g 3 (y, z, x) f(x, y, z) = g 3 ( (3) 2 (x, y, z), (3) 3 (x, y, z), (3) 1 (x, y, z)) f(x, y, z) = C(g 3 ; (3) 2, (3) 3, (3) 1 )(x, y, z) a) Es decir: f = C(g 3 ; (3) 2, (3) 3, (3) 1 ) b) Y por tanto, f es GOT O computable. 3. f(x, y, z) = g 2 (g 1 (y), g 3 (x, y, z)) f(x, y, z) = g 2 (g 1 ( (3) 2 )(x, y, z), g 3(x, y, z)) f(x, y, z) = g 2 (C(g 1 ; (3) 2 )(x, y, z), g 3(x, y, z)) f(x, y, z) = C(g 2 ; C(g 1 ; (3) 2 ), g 3)(x, y, z)) a) Es decir: f = C(g 2 ; C(g 1 ; (3) 2 ), g 3) b) Y por tanto, f es GOT O computable. 4. f(x, y, z) = g 1 (z) + g 2 (y, x) f(x, y, z) = C(+; g 1 ( (3) 3 (x, y, z)), g 2( (3) 2 (x, y, z), (3) 1 (x, y, z))) f(x, y, z) = C(+; C(g 1 ; (3) 3 ), C(g 2; (3) 2, (3) 1 ))(x, y, z) a) Es decir: f = C(+; C(g 1 ; (3) 3 ), C(g 2; (3) 2, (3) 1 )) b) Y por tanto, f es GOT O computable. Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 1
Ejercicio.- a) Probar que el predicado φ(x) x es un múltiplo de 3 es GOT O computable. b) Diseñar un programa GOTO que al recibir un dato de entrada n devuelva el elemento n ésimo de la sucesión: 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7,... c) La sucesión anterior puede definirse mediante la función: f : N N Probar que: c1) f es sobreyectiva. c2) f es GOT O computable. f(0) = 0 f(x) si x+1 es múltiplo de 3 f(x + 1) = f(x) + 1 e.c.o.c. φ(x) = z x(x = 3z) a).- b).- 1.-Sin macros, salvo GOT O L. 2.-Con macros. 3.- Otro. Contando hacia atrás. Contado hacia adelante [A] IF X 0 GOT O B GOT O E [B] X X 1 IF X 0 GOT O C GOT O E [C] X X 1 X X 1 GOT O A [A] IF Z = X GOT O E IF Z = X GOT O E GOT O A [A] Z 3 Z 3 + 3 [B] IF Z = X GOT O E IF Z = Z 3 GOT O A GOT O B c1).- Inducción débil en la variable y de la fórmula y( xf(x) = y): Caso base: Para y = 0 tomamos x = 0: f(0) = 0 Paso inductivo: y y + 1 : Suponemos que dado y existe x tal que f(x) = y. Si x + 1 es múltiplo de 3: f(x + 1) = f(x) = y y como x + 2 no será múltiplo de 3 resulta que f(x + 2) = f(x + 1) + 1 = f(x) + 1 = y + 1. En este caso, x + 2 será antiimagen de y + 1 Si x + 1 no es múltiplo de 3 f(x + 1) = f(x) + 1 = y + 1 y, en consecuencia, x + 1 será antiimagen de y + 1. c2).- f es total [es fácil probar por inducción que x(f(x) )]. Aplicamos directamente la definición de recursión: f(0) = 0 f(x + 1)) = h(x, f(x)) donde h : N N, definida por casos: t si φ(x + 1) h(x, t) = t + 1 e.c.o.c. es GOT O computable. Es decir, f está definida por recursión a partir de una constante y de la función GOT O computable h. Luego es GOT O computable. Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 2
Ejercicio.- Dada una función f : N N se define Se pide: ν f (x) = y N : y < x f(y) = 0} 1. Supongamos que f es total y GOT O computable. Diseñar un programa GOT O que calcule ν f, utilizando f como única macro. 2. Probar que si f es GOT O computable, entonces la función ν f también lo es. 1) El siguiente programa calcula ν f : IF X 0 GOT O A GOT O E [A] Z 2 f(z) IF Z 2 0 GOT O B [B] X X 1 IF X 0 GOT O A 2) En efecto, la función ν f puede reescribirse así: 0 si x = 0 ν f (x) = z x 1 sg(f(z)) si x 0 es decir, está definida por casos a partir de funciones GOT O computables (las funciones constantemente cero y la suma acotada de sg f) y predicados complementarios y GOT O computable Por tanto, es GOT O computable. Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 3
Ejercicio (11/01/03). Consideremos la siguiente función f : N 2 N f(x, 0) = x 2, f(x, 1) = x 3 f(x, y) = 3 f(x, y 1) + 2 f(x, y 2) (y 2) (a) Pruébese, utilizando un programa GOTO, que f es GOTO computable. (b) Pruébese que f es GOT O computable. a) El siguiente programa calcula la función f: Z 1 X 2 1 Z 2 X 3 1 IF X 2 0 GOTO A Y Z 1 GOTO E [A] X 2 X 2 1 IF X 2 0 GOTO B Y Z 2 GOTO E [B] X 2 X 2 1 Y 3Z 2 + 2Z 1 Z 1 Z 2 Z 2 Y IF X 2 0 GOTO B b) Como f es total (puede demostrarse por inducción), definamos la siguiente función G : N N Entonces: G(x, y) = f(x, y), f(x, y + 1) G(x, 0) = x 2, x 3 G(x, y + 1) = r(g(x, y)), 3r(G(x, y)) + 2l(G(x, y)) Por tanto G = R(g, h) es GOT O computable pues g(x) = x 2, x 3 y h(x, z) = r(z), 3r(z) + 2l(z) lo son. Por tanto, como f(x, y) = l(g(x, y)), resulta que f es GOT O computable. Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 4
Minimización acotada (predicados): Sea θ : N n+1 N un predicado. Definimos: θµ( x, minz y : θ( x, z)} si existe tal mínimo y) = y + 1 e.c.o.c. que también escribiremos: µz y (θ( x, z)) PROPOSICIÓN: Si θ G COMP (n+1) entonces θµ G COMP (n+1) DEMOSTRACIÓN: Consideremos el predicado complementario: θ( x, z) = θ( x, z) Caso 1.- Existe el mínimo (llamémosle y 0 ) θ( x, 0) = z 0θ( x, z) = 1 θ( x, 0) θ( x, 1) = z 1θ( x, z) = 1 θ( x, 0) θ( x, 1) θ( x, 2) = z 2θ( x, z) = 1 suman y 0............ θ( x, 0) θ( x, 1)... θ( x, y 0 1) = θ( x, z) = 1 z y 0 1 θ( x, 0) θ( x, 1)... θ( x, y 0 ) = θ( x, z) = 0 z y 0 θ( x, 0) θ( x, 1)... θ( x, y 0 + 1) = θ( x, z) = 0 z y 0+1......... θ( x, 0) θ( x, 1)... θ( x, y) = z yθ( x, z) = 0 suman 0 θ( x, z) = y 0 t yz t Caso 2.- No existe el mínimo: En ese caso, todos los productos anteriores valdrían 1 y, en consecuencia, θ( x, z) = y + 1 t yz t Por tanto, nuestro predicado se caracteriza así: θµ( x, y) = θ( x, z) t yz t y, por tanto, es GOT O-computable. Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 5
Ejercicio.- Todo subconjunto finito A N k, k 1, es GOT O computable Desde luego el conjunto vacío, N k, es computable pues su función característica es la constantemente nula C (k) 0. Haremos la demostración ahora para los subconjuntos no vacíos, por inducción débil en el cardinal n de los subconjuntos. Caso Base: n = 1 Sea A = a}. Su función característica: C A ( x) = sg( x 1 a 1 + x 2 a 2 +... + x k a k ) es p.r pues es la composición de la función sg, que es GOT O computable, con la suma de n funciones, que también es GOT O computable Paso de inducción: n n + 1 Sea B un subconjunto de n + 1 elementos, B = b 1,..., b n, b n+1 }. Entonces: B = b 1,..., b n } b n+1 } = A b n+1 } Por hipótesis de inducción, A es GOT O computable y b n+1 } también lo es por constar de un elemento (caso base). En consecuencia, como la unión en los conjuntos GOT O computable es cerrada, B será GOT O computable Conclusión: Todo subconjunto finito es GOT O computable. Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 6
Ejercicio.- Dar una definición recursiva de la función f(x) =número de dígitos de x -en base 10- y probar que es GOT O computable. Sea g(x) = qt(x, 10) la función que trunca el número x devolviendo las n-1 primeras cifras del mismo. Entonces, la función f puede definirse así: 1 si x 9 f(x) = f(g(x)) + 1 e.o.c. Para probar que es GOT O computable, la reescribimos así: f(0) = 1 f(x + 1) = Formamos la función historia de f: ˆf(0) = 2 ˆf(x + 1) = 1 si x 8 f(g(x + 1)) + 1 e.o.c. Ĉ1 (x + 1) si x 8 ˆf(x) p f(x+1) x+2 e.o.c. que, teniendo en cuenta la definición de f, podemos reescribir: ˆf(0) = 2 ˆf(x + 1) = Y como g(x) < x para x > 1, podemos escribir: Ĉ1 (x + 1) si x 8 ˆf(x) p f(g(x+1))+1 x+2 e.o.c. ˆf(0) = 2 ˆf(x + 1) = Ĉ1 (x + 1) si x 8 ˆf(x) p ( ˆf(x)) g(x+1)+1 +1 x+2 e.o.c. Es decir, ˆf está definida por recursión a partir de una constante y de la función h: que es p. r. Ĉ1 (x + 1) si x 8 h(x, z) = z p (z) g(x+1)+1+1 x+2 e.o.c. En consecuencia, ˆf es GOT O computable y, por tanto, f también lo es. Nota: En la prueba se ha tenido en cuenta que, para todo x 9, g(x + 1) < x. Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 7
Ejercicio.Sea θ : N N el predicado: θ(x) x se expresa como suma de, al menos, dos números naturales consecutivos a) Probar que θ es un predicado GOT O computable. b) Probar que para todo p 1, θ(2 p ) = 0 c) Probar que θ es un predicado GOT O computable dando un programa que lo calcule. a) θ es un predicado GOT O computable pues se expresa: θ(x) = n x k x (k 1 x = n+(n+1)+(n+2)+ +(n+k)) = n x k x (k 1 x = i k(n+i)) b) Veamos que para todo p 1, θ(2 p ) = 0 En efecto, supongamos que 2 p = n + (n + 1) + (n + 2) + + (n + k), entonces 2 p = (k + 1) n + (n + k) 2 = (k + 1) (2n + k) 2 Caso 1.- (k + 1) impar. en este caso, es necesario que k = 0; así pues, la igualdad sólo se verifica cuando n = 2 p, es decir, cuando n sea una potencia de 2. Por tanto, 2 p no es la suma de, al menos, dos números consecutivos. Caso 1.- (k + 1) par. en este caso, 2n + k es impar, por lo que es necesario que n = 0 y k = 1; así pues, la igualdad sólo se verifica cuando 2 p = 0 + 1. Por tanto, en este caso, ninguna potencia propia de 2 ( 2 p, p 1) es la suma de, al menos, dos números consecutivos. c) Para mayor claridad en la lectura del programa utilizaremos las siguientes letras como variables: S para el valor de la suma; N para el valor inicial de la suma; K para los sucesivos incrementos del valor inicial (o sea, en s = n + (n + 1) +... + (n + k) en cada momento, N = n, S = s y K = k). [A] [B] IF N = X GOT O E IF S > X GOT O C IF S = X GOT O D K K + 1 S S + (S + K) GOT O B [C] K 0 N N + 1 S N GOT O A [D] Ejercicios resueltos. TCO. A. J. Pérez Jiménez.- pág. 8