Lógica y Computabilidad Verano 2011 Departamento de Computación - FCEyN - UBA Computabilidad - clase 3 Sumatorias y productorias, cuantificadores acotados, minimización acotada, codificación de pares y secuencias Sumatorias y productorias (desde 0) Sea C una clase PRC. Si f : N n+1 N está en C entonces también están las funciones g(y, x 1,..., x n ) = h(y, x 1,..., x n ) = y t=0 y t=0 g(0, x 1,..., x n ) = f (0, x 1,..., x n ) g(t + 1, x 1,..., x n ) = g(t, x 1,..., x n ) + f (t + 1, x 1,..., x n ) 1 Idem para h con en lugar de +. Observar que no importa la variable en la que se hace la recursión: podemos definir g (x, t) como la clase pasada y luego g(t, x) = g (u 2 2 (t, x), u2 1 (t, x)) = g (x, t). 2 Sumatorias y productorias (desde 1) Sea C una clase PRC. Si f : N n+1 N está en C entonces también están las funciones g(y, x 1,..., x n ) = y t=1 Cuantificadores acotados Sea p : N n+1 {0, 1} un predicado. ( t) y p(t, x 1,..., x n ) es verdadero sii p(0, x 1,..., x n ) es verdadero y. p(y, x 1,..., x n ) es verdadero h(y, x 1,..., x n ) = y t=1 ( t) y p(t, x 1,..., x n ) es verdadero sii p(0, x 1,..., x n ) es verdadero o (como siempre, sumatoria vacía = 0, productoria vacía = 1) g(0, x 1,..., x n ) = 0 g(t + 1, x 1,..., x n ) = g(t, x 1,..., x n ) + f (t + 1, x 1,..., x n ). p(y, x 1,..., x n ) es verdadero Lo mismo se puede definir con < y en lugar de y. Idem para h con en lugar de + y 1 en lugar de 0 en el caso base. 3 ( t) <y p(t, x 1,..., x n ) y ( t) <y p(t, x 1,..., x n ) 4
Cuantificadores acotados (con ) Sea p : N n+1 {0, 1} un predicado perteneciente a una clase PRC C. Los siguientes predicados también están en C: ( t) y p(t, x 1,..., x n ) ( t) y p(t, x 1,..., x n ) ( t) y p(t, x 1,..., x n ) sii y t=0 p(t, x 1,..., x n ) = 1 ( t) y p(t, x 1,..., x n ) sii y t=0 p(t, x 1,..., x n ) 0 la sumatoria y productoria están en C la comparación por = está en C Cuantificadores acotados (con <) Sea p : N n+1 {0, 1} un predicado perteneciente a una clase PRC C. Los siguientes predicados también están en C: ( t) <y p(t, x 1,..., x n ) ( t) <y p(t, x 1,..., x n ) ( t) <y p(t, x 1,..., x n ) sii ( t) y (t = y p(t, x 1,..., x n )) ( t) <y p(t, x 1,..., x n ) sii ( t) y (t y p(t, x 1,..., x n )) 5 6 Más ejemplos de funciones primitivas recursivas y x sii y divide a x. Se define como ( t) x y t = x Notar que con esta definición 0 0. primo(x) sii x es primo. 7 Minimización Sea p : N n+1 {0, 1} un predicado de una clase PRC C. y u g(y, x 1,..., x n ) = α(p(t, x 1,..., x n )) u=0 t=0 Qué hace g? supongamos que existe un t y tal que p(t, x 1,..., x n ) es verdadero sea t0 el mínimo tal t p(t, x1,..., x n ) = 0 para todo t < t 0 p(t0, x 1,..., x n ) = 1 { u t=0 α(p(t, x 1 si u < t 0 1,..., x n )) = y+1 veces {}}{ g(y, x 1,..., x n ) = 1 + 1 + + 1 +0 + 0 + + 0 = t }{{} 0 t 0 veces entonces g(y, x1,..., x n ) es el mínimo t y tal que p(t, x 1,..., x n ) es verdadero si no existe tal t, g(y, x 1,..., x n ) = y + 1 8
Minimización Notamos mín p(t, x 1,..., x n ) = t y mínimo t y tal que p(t, x 1,..., x n ) es verdadero Sea p : N n+1 {0, 1} un predicado de una clase PRC C. La función mín t y p(t, x 1,..., x n ) también está en C. si existe tal t Más ejemplos de funciones primitivas recursivas x div y es la división entera de x por y x mín((t + 1) y > x) t x Notar que con esta definición 0 div 0 es 0. mód y es el resto de dividir a x por y p n es el n-ésimo primo (n > 0). Se define p 0 = 0, p 1 = 2, p 2 = 3, p 3 = 5,... p 0 = 0 p n+1 = mín t K(n) (primo(t) t > p n) Necesitamos una cota K(n) que sea buena, i.e. suficientemente grande y primitiva recursiva K(n) = p n! + 1 funciona (ver que p n+1 p n! + 1). 9 10 Codificación de pares Definimos la función primitiva recursiva Notar que 2 x (2 y + 1) 0. x, y = 2 x (2 y + 1) 1 Hay una única solución (x, y) a la ecuación x, y = z. x es el máximo número tal que 2 x (z + 1) y = ((z + 1)/2 x 1) div 2 Observadores de pares Los observadores del par z = x, y son l(z) = x r(z) = y Los observadores de pares son primitivas recursivas. Como x, y < z + 1 tenemos que l(z) = mín x z (( y) z z = x, y ) r(z) = mín y z (( x) z z = x, y ) Por ejemplo, 2, 5 = 2 2 (2 5 + 1) 1 = 43 l(43) = 2 r(43) = 5 11 12
Codificación de secuencias El número de Gödel de la secuencia es el número a 1,..., a n [a 1,..., a n ] = donde p i es el i-ésimo primo (i 1). n i=1 p a i i, Por ejemplo el número de Gödel de la secuencia es 1, 3, 3, 2, 2 [1, 3, 3, 2, 2] = 2 1 3 3 5 3 7 2 11 2 = 40020750. Propiedades de la codificación de secuencias Si [a 1,..., a n ] = [b 1,..., b n ] entonces a i = b i para todo i {1,..., n}. Por la factorización única en primos. Observar que pero [a 1,..., a n ] = [a 1,..., a n, 0] = [a 1,..., a n, 0, 0] =... [a 1,..., a n ] [0, a 1,..., a n ] 13 14 Observadores de secuencias Los observadores de la secuencia x = [a 1,..., a n ] son x[i] = a i x = longitud de x Los observadores de secuencias son primitivas recursivas. x[i] = mín t x ( p t+1 i x) x = mín i x (x[i] 0 ( j) x (j i x[j] = 0)) Por ejemplo, [1, 3, 3, 2, 2][2] = 3 = 40020750[2] [1, 3, 3, 2, 2][6] = 0 = 40020750[6] [1, 3, 3, 2, 2] = 5 = 40020750 [1, 3, 3, 2, 2, 0] = [1, 3, 3, 2, 2, 0, 0] = 5 = 40020750 x[0] = 0 para todo x 0[i] = 0 para todo i 15 En resumen: codificación y decodificación de pares y secuencias (Codificación de pares) l( x, y ) = x, r( x, y ) = y z = l(z), r(z) l(z), r(z) z la codificación y observadores de pares son p.r. (Codificación de secuencias) { a i si 1 i n [a 1,..., a n ][i] = si n x entonces [x[1],..., x[n]] = x la codificación y observadores de secuencias son p.r. 16
Para leer Computability, Complexity and Languages, fundamentals of theoretical computer science. Capítulo 3. Martin Davis, Ron Sigal, Elaine Weyuker, Elsevier, 1994 17