Composición y recursión primitiva Definición Sea f : Nk → N y g1 , . . . , gk : Nn → N. h : Nn → N se obtiene a partir de f y g1 , . . . , gk por composición si Teorı́a de la Computabilidad h(x1 , . . . , xn ) = f (g1 (x1 , . . . , xn ), . . . , gk (x1 , . . . , xn )) Primer cuatrimestre 2010 Departamento de Computación - FCEyN - UBA Definición clase 1 h : Nn+1 → N se obtiene de g : Nn+2 → N y f : Nn → N por recursión primitiva si Funciones Primitivas recursivas, iteración, esqueleto de funciones primitivas recursivas, recursión anidada en varias variables h(x1 , . . . , xn , 0) = f (x1 , . . . , xn ) h(x1 , . . . , xn , t + 1) = g (t, x1 , . . . , xn , h(x1 , . . . , xn , t)) 1 Funciones primitivas recursivas P1 2 Recursión anidada en una variable Definición f se define a partir de g1 , . . . , gn por recursión anidada en una variable si Funciones iniciales I O(x) = 0 I S(x) = x + 1 I I n (x1 , . . . , xn ) i f (~x , 0) = g (~x ) f (~x , y ) = h(~x , y ) = xi para todo n ≥ 1 y i ∈ {1, . . . , n} donde h(~x , y ) es un término numérico construido por Definición La clase P1 de funciones primitivas recursivas es la clase de funciones más chica: I números naturales n I las variables ~x e y I conteniendo las funciones iniciales I el sı́mbolo f I cerrada por composición I I cerrada por recursión primitiva los valores de f usados en la definición de f (~x , y ) son de la forma f (~t, s) donde s tiene un valor numérico < y Teorema P1 está cerrada por recursión anidada en una variable. 3 4 Caracterización alternativa de P1 Caracterización alternativa de P1 (demo) Sea C la clase más chica de funciones que satisfacen las condiciones del teorema. C ⊆ P1 Las funciones de codificación y decodificación son primitivas recursivas. La iteración f (x, n) = t (n) (x) es un caso especial de recursión primitiva: Definición Una función f se define por iteración a partir de t si f (x, n) = t (n) (x) f (x, 0) = x donde t (n) denota el resultado de n aplicaciones sucesivas de t (por convención t (0) (x) = x). f (x, n + 1) = t(f (x, n)) P1 ⊆ C Hay que ver que C es cerrada por recursión primitiva. Observar que C tiene cod./decod. de pares y composición, por lo tanto tiene cod./decod. de n-uplas para cualquier n fijo. Sean g , h ∈ C y sea f definida como Teorema La clase de funciones primitivas recursivas es la clase más chica: I conteniendo las funciones iniciales y funciones de codificación y decodificación de pares I cerrada por composición I cerrada por iteración f (~x , 0) = g (~x ) f (~x , y + 1) = h(~x , y , f (~x , y )) Basta ver que esta función está en C: s(~x , n) = h~x , n, f (~x , n)i 5 La función 6 La familia de funciones (hn )n∈N s(~x , 0) = h~x , 0, f (~x , 0)i = h~x , 0, g (~x )i Sea está en C porque g y h·i están en C. Podemos transformar h0 (x) = x + 1 s(~x , n) = h~x , n, f (~x , n)i | {z } y (x) hn+1 (x) = hn (x) Proposición z x ≤ hn (x). en Demostración. s(~x , n + 1) = h~x , n + 1, f (~x , n + 1)i Por inducción en n. Para n = 0 es trivial. Para n + 1, suponer (∀z) z ≤ hn (z). Es fácil probar por inducción en m que (m) x ≤ hn (x). En particular = h~x , n + 1, h(~x , n, f (~x , n))i | {z } z con esta función, que también está en C: (x) x ≤ hn (x) = hn+1 (x). t(~x , n, z) = h~x , n + 1, h(~x , n, z)i. Como C está cerrada por iteración, está en C esta función: s(~x , n) = t (n) (s(~x , 0)). 7 8 Propiedades de (hn )n∈N Propiedades de (hn )n∈N Proposición Proposición Si n ≤ m y x > 0 entonces hn (x) ≤ hm (x). Si x ≤ y entonces hn (x) ≤ hn (y ). Demostración. Demostración. (x) Basta probar (∀x > 0) hn (x) ≤ hn+1 (x) = hn (x). (m) Basta probar hn (z) ≤ hn (z) por inducción en m > 0. Para m = 1 es trivial. Para m + 1, Por inducción en n. Para n = 0 es trivial. Para n + 1, hn+1 (x) hn (z) ≤ ≤ = (m) hn (z) (m) hn (hn (z)) (m+1) hn (z) (x) = ≤ ≤ = por HI por Proposición de pág. 8 hn (x) (y ) hn (x) (y ) hn (y ) hn+1 (y ). por Proposición de pág. 8 (y − x veces) por HI (y veces) 9 Propiedades de (hn )n∈N 10 Propiedades de (hn )n∈N Proposición Proposición h1 (x) = 2x. h2 (x) = x · 2x . Demostración. Demostración. Basta probar h0 (x) = x + m por inducción en m. Para m = 0 es trivial. Para m + 1, Basta probar h1 (x) = x · 2m por inducción en m. Para m = 0 es trivial. Para m + 1, (m) (m+1) h0 (x) = = = = (m) (m) h0 (h0 (x)) h0 (x + m) (x + m) + 1 x + (m + 1). (m+1) h1 por HI porque h0 (z) = z + 1 11 (x) = = = = (m) h1 (h1 (x)) h1 (x · 2m ) (x · 2m ) · 2 x · 2m+1 por HI porque h1 (z) = 2z 12 Todas las hn son primitivas recursivas Cada función primitiva recursiva es dominada por alguna hn Teorema Para cada f primitiva recursiva, hay un n tal que f (~x ) ≤ hn ( para casi todo ~x . P ~x ) Demostración. Por inducción en la caracterización alternativa de P1 (pág. 5). Veamos que: Teorema Para cada n, hn es primitiva recursiva. Demostración. Obvio, pues la función sucesor está en P1 y P1 está cerrada por iteración. I las funciones iniciales y las funciones de codificación y decodificación lo cumplen I si h, g1 , . . . , gm lo cumplen, f (~x ) = h(g1 (~x ), . . . , gm (~x )) también lo cumple I si t lo cumple, f (x, y ) = t (y ) (x) 13 también lo cumple. 14 Cada función primitiva recursiva es dominada por alguna hn Cada función primitiva recursiva es dominada por alguna hn Funciones iniciales, codificación y decodificación Composición I I I Supongamos que O(x) = 0 está dominada por h0 S(x) = x + 1 está dominada por h0 Iin (x1 , . . . , xn ) = xi está dominada por h0 porque X Iin (x1 , . . . , xn ) ≤ xj f (~x ) = h(g1 (~x ), . . . , gm (~x )) y por HI tenemos que para un n ≥ 2Psuficientemente grande (usar ProposiciónPde pág. 9), gi (~x ) ≤ hn ( ~x ) para casi todo ~x y h(~y ) ≤ hn ( ~y ) para casi todo ~y . j X ≤ h0 xj f (x) j I hx, y i = 2x (y + 1) − 1 está dominada por h2 porque h2 (x + y ) = (x + y ) · 2x+y ≥ 2x (y + 1) − 1 I para casi todo x, y . π1 (x), π2 (x) ≤ x, dominadas por h0 (x) 15 = ≤ ≤ = ≤ ≤ = ≤ = h(gP x ), . . . , gm (~x )) 1 (~ hn ( 1≤i≤m gi (~x )) P P hn ( 1≤i≤m hn ( ~x )) P hn (m · hn (P ~x )) hn (h2 (hn (P ~x ))) hn (hn (hn ( ~x ))) (3) P hnP( ~x ) ( ~x ) P hn P ( ~x ) hn+1 ( ~x ) por HI sobre h por HI sobre gi y Prop. pág. 10 P si m ≤ ~x y porque h2 (z) = z · 2z por n ≥ 2 y Props. págs. 9 y 10 si 3 ≤ P ~x y Prop. pág. 8 16 Cada función primitiva recursiva es dominada por alguna hn Iteración La función diagonal domina a cualquier primitiva recursiva Teorema La función diagonal d(x) = hx (x) domina toda función primitiva recursiva N → N. Demostración. Supongamos que f (x, y ) = t (y ) Sea f una función primitiva recursiva. Existe n tal que para casi todo x, (x) y por HI para algún n, t(x) ≤ hn (x) para casi todo x. f (x, y ) = ≤ ≤ = t (y ) (x) (y ) hn (x) (x+y ) hn (x + y ) hn+1 (x + y ) f (x) por HI y veces y Prop. pág. 10 por Props. págs. 8 y 10 ≤ ≤ = hn (x) hx (x) d(x) si x > n y por Prop. de pág. 9 Entonces para casi todo x, f (x) ≤ d(x). Corolario d no es primitiva recursiva. Demostración. 17 Si lo fuera, d(x) + 1 también lo serı́a. Por teorema anterior, para casi todo x tenemos d(x) + 1 ≤ d(x). Absurdo. 18 Funciones n-primitivas recursivas Pn Recursión anidada en n variables Sea ≤lex el orden lexicográfico de Nn . Definición f se define a partir de g1 , . . . , gn por recursión anidada en n variables si f (~x , ~0) = g (~x ) f (~x , ~y ) = h(~x , ~y ) Definición La clase Pn de funciones n-primitivas recursivas es la clase de funciones más chica: (~0 ∈ Nn ) (~y ∈ Nn , ~y 6= ~0) donde h(~x , ~y ) es un término numérico construido por I números naturales I las variables ~x e ~y I el sı́mbolo f I los valores de f usados en la definición de f (~x , ~y ) son de la forma f (~t,~s ) donde ~s ∈ Nn tiene un valor numérico <lex ~y . 19 I conteniendo las funciones iniciales I cerrada por composición I cerrada por recursión anidada en a lo sumo n variables 20 P1 no está cerrado por recursión anidada en 2 variables Jerarquı́a de funciones n-recursivas Teorema P1 ⊂ P2 . Demostración. Las funciones (hn )n∈N se pueden describir ası́: hn(0) (x) h0 (x) = x + 1 hn+1 (x) = hn(x) (x) hn(z+1) (x) El resultado anterior se puede generalizar. = x = hn (hn(z) (x)) Teorema (z) hn (x) Para todo n, Pn ⊂ Pn+1 . Se pueden ver como una única función h(n, z, x) = definidas por recursión anidada en las variables n y z (pensar hn (1) como hn ): h(n, 0, x) = x h(n + 1, 1, x) h(0, 1, x) = x + 1 h(n, z + 1, x) Si h fuese primitiva recursiva, también lo serı́a = h(n, x, x) = h(n, 1, h(n, z, x)) d(x) = hx (x) = h(x, 1, x) y esto contradice el Teorema de pág. 18. 21 22