Está en la página 1de 22

Tema 2.

- Funciones Primitivas Recursivas


Vamos a ver como se construye una clase de funciones, llamadas primitivas recursivas, definidas entre n-uplas de nmeros naturales sobre los nmeros naturales, (es decir f: Nn N), con la idea de caracterizar las funciones que son efectivamente calculables, es decir, aquellas funciones para las que dada la n-upla de sus argumentos podemos definir un procedimiento para encontrar en un numero finito de pasos el valor de la funcin. Usaremos para ello una definicin recursiva, es decir, nos apoyaremos en un conjunto de funciones que por definicin son recursivas (conjunto inicial que se denomina base de la recursin), y en un conjunto de reglas que aplicndolas a funciones recursivas primitivas ya definidas obtenemos nuevas funciones recursivas. En nuestro caso la base esta formada por la funcin nula, sucesor y proyeccin, y las reglas que llamamos de composicin y de recursin primitiva.

1.- Composicin
Vamos a considerar formas de combinar funciones calculables de forma que el resultado sea tambin calculable. Vamos a emperezar con la composicin. Definicin.- Sea una funcin de k variables y g 1,, gk funciones de n variables. Entonces se define la composicin de f y g 1,, gk como la funcin de n variables. h(x1,..., xn) = f(g1(x1,...,xn),,gk(x1,..,xn))
Existen funciones calculables y totales que no son FPR

Funciones Calculables

Funciones Totalmente Calculables

Las funciones f, g1,,gk no necesitan ser totales. Si lo son la funcin composicin tambin lo ser. Ejemplo.- Si f(x, y, z) = (x+ y).z g1(x1, x2) = x1 x2 g2(x1, x2) = x1. x2 g3(x1, x2) = x1 + x2 entonces

Funciones Primitivas Recursivas

h(x1, x2) = f (x1 - x2, x1 . x2, x1 + x2) = (x1 - x2 + x1 . x2)( x1 + x2)

Teorema.- Si h es la composicin de las funciones (totalmente) calculables f, g1,,gk, entonces h es (totalmente) calculable.

Demostracin.Slo hay que considerar el siguiente programa que, obviamente, calcula h: Z1 g1 (x1,, xn) .. Zk gk (x1,, xn) Y f (x1,, xn) As, como sabemos que las funciones x, x+y, x.y, x-y son calculables. As mediante este teorema se puede deducir que 2x = x + x, 4x 2 = (2x)(2x), son calculables. Tambin son calculables, 4x2 + 2x, 4x2 - 2x. Tambin son totales, aunque la ltima se obtiene como composicin de la funcin no total x - y, con 4x 2 y 2x.

2. Recursividad
Supongamos que k es un nmero y h(0) = k, h(t+1) = g(t, h(t)) donde g es una funcin total de dos variables. Se dice que h se obtiene a partir de g, mediante recursividad. Teorema.- Si h se obtiene a partir de g mediante recursividad, y g es calculable, entonces h es tambin calculable. Demostracin.La funcin constante f(x) = k es calculable. Basta considerar el programa YY+1 YY+1 .. YY+1 Por tanto, est disponible la macro Y k. El siguiente programa calcula h(x): [A] Yk IF X = 0 GOTO E Y g(Z, Y) ZZ1 GOTO A

Y toma los valores h(0), h(1), , h(x) Existe una recursin un poco ms complicad, en el sentido de que implica funciones de ms variables. Hay que partir de dos funciones totales, una f de n variables, y otra g de n+2 variables. Se dice entonces que la funcin h de n+1 variables se obtiene por recursin a partir de f y g si h(x1,,xn,0) = f (x1,,xn) h(x1,,xn, t+1) = g(t, h(x1,,xn,t),x1,,xn)

Otra vez se verifica un teorema anlogo al anterior. Teorema.- Si h se obtiene a partir de f y g mediante las expresiones anteriores y f, g son calculables. Entonces h es tambin calculable. Demostracin.Slo hay que tener en cuenta el siguiente programa Y f (x1,,xn) [A] IF xn+1 = 0 GOTO E Y g (Z, Y, x1,,xn) ZZ+1 Xn+1 xn+1 1 GOTO A Ejemplo de programa recursivo [A] Y K IF X = 0 GOTO E Y g(Z,Y) Z Z + 1 X X 1 GOTO A

Vamos a desarrollar la ejecucin del siguiente programa con X = 3 X=0 Y K = h(0) X=1 Y g(0, h(0)) = h(1) Z1 X2 X=2 Y g(1, h(1)) = h(2) Z2 X1 X=3 Y g(2, h(2)) = h(3) Z3 X0

3. Clases PRC (Primitivas Recursivamente Cerradas)


Consideramos primero las llamadas funciones iniciales. Estas son: Funcin siguiente.s(x) = x+1 Funcin nula.n(x) = 0 Funciones proyeccin.- uni(x1,,xn) = xi, 1 i n

Definicin.- Una clase de funciones totales se dice PRC si: 1.Las funciones iniciales pertenecen a . 2.Una funcin obtenida a partir de funciones de mediante recursin o composicin tambin pertenece a . Inmediatamente tenemos el teorema siguiente. Teorema.- La clase de las funciones calculables es PRC. Demostracin.Slo hay que demostrar que las funciones iniciales son calculables. La funcin siguiente es calculada por el programa. YX+1 La funcin nula es calculada por el programa nulo. La funcin proyeccin uin se calcula por el programa Y Xi Definicin.- Una funcin se dice recursiva primitiva si puede obtenerse a partir de las funciones iniciales mediante recursin y composicin. Corolario.- La clase de las funciones recursivas primitivas es PRC. Teorema.- Una funcin es recursiva primitiva si y slo si pertenece a todas las clases PRC. Corolario.- Toda funcin recursiva primitiva es calculable. El recproco no es cierto.

4. Algunas Funciones Recursivas Primitivas


1.- x + y Las ecuaciones de recursin para la suma son f (x, 0 ) = x f (x, y+1) = f(x,y) + 1 o anlogamente f(x, 0) = u11(x) f(x, y+1) = s(u23(y, f(x, y), x)) luego se puede obtener a partir de composicin y recursin de funciones primitivas y por tanto se recursiva primitiva.

2.- x . y Las ecuaciones de recursin son h(x, 0) = n(x) h(x,y+1) = f (u23(y, h(x, y), x), u33(y, h(x,y),x)) donde f es la funcin suma. Por tanto, h, la funcin producto, es primitiva recurisiva. 3.- x! Las ecuaciones de recursin son 0! = 1, (x + 1)! = x! s(x) Ms precisamente escribiendo x! = h(x), tenemos h(0) = 1 h(t+1) = g(t, h(t)), donde g(x1,x2) = s(x1) x2 Finalmente g es recursiva primitive, porque g(x1,x2) = s(u12(x1,x2)) u22(x1,x2) y, por tanto, g es recursiva primitiva. 4.- xy Las ecuaciones de recursin son x0 = 1, xy+1 = xy x De aqu se puede demostrar que es recursiva primitiva. 5.- p(x), Funcin Predecesor, dada por x-1 p(x) = 0 si x = 0 Las ecuaciones de recursin son p(0) = 0, p(t+1) = t 6.- x

si x 0

y , donde x y si x y
.

y= 0 si x = 0

Las ecuaciones de recursin son

x x

. .

0=x (t+1) = p(x


.

t)

7.- |x y|, la funcin valor absoluto. Esta funcin puede expresarse como |x y| = (x
.

y) + (y

x)

y, por tanto, es recursiva primitiva. 8.- La funcin (x), definida como 1 (x) = 0
.

si x = 0 si x 0

(x) es recursiva primitiva ya que (x) = 1 x Las ecuaciones de recursin son (0) = 1 (t + 1) = 0 Ejercicios 1.- Demostrar que para cada k la funcin f(x) = k es recursiva primitiva. 2.- Demostrar que si f(x) y g(x) son funciones recursivas primitivas, entonces tambin lo es f(x) + g(x). 3.- (a) Sea E(x) = 0 si x es par, y E(x) = 1, si x es impar. Demostrar que E(x) es recursiva primitiva. (b) Sea H(x) = x/2, si x es par y H(x) = (x-1)/2 si x es impar. Demostrar que H es recursiva primitiva. 4.- Sea g(x) una funcin recursiva primitiva y sea f(0,x) = g(x) f(n+1,x) = f(n,f(n,x)) Demostrar que f(n,x) es recursiva primitiva. 5.- Sea f(0) = 0, f(1) = 1, f(2) = 22, f(3) = 33 , Y, en general, f(x) es igual a una pila de x exponentes de valor x. Demostrar que f es recursiva primitiva. 6.- Sea f(x,y) = xy-x. Es f primitiva recursiva?
3

7.- Sea f ( x, y )= x . Es f primitiva recursiva? 8.- Sea f(x)=xx(x-1). Es f una funcin primitiva recursiva? 9.- Sea f ( x) = x x x . Es f una funcin primitiva recursiva? ___________________
2

Ejercicios Resueltos 3.a)

0 E(x) = 1 Utilizando E(0) = 0 E(x+1) = (E(x))

si x es par si x es impar

Debido a que (x) es recursiva primitiva como hemos demostrado anteriormente, por composicin E(x) es recursiva primitiva. Ejemplo de clculo, E(1) = (E(0)) = (0) = 1 E(2) = (E(1)) = ((E(0)) ) = ((0)) = (1) = 0 E(3) = (E(2)) = ((E(1)) ) = (((E(0) ))) = (((0) )) = ((1) ) = (0) = 1 b) x/2 H(x) = (x-1)/2 si x es impar O sera lo mismo decir que el elemento siguiente es x/2 = H(x) H(x+1) = (x+1)/2 = (H(x)+1) si x es impar Vamos a comprobar como se calculara H(x+1) con unos cuntos ejemplos: Si tenemos H(4) = 2, H(5) que sera el siguiente H(5) = H(4+1) (x es par) 4/2 = 2 que sera lo mismo que decir que H(5) = H(4+1) = H(4) = 2 Otro ejemplo, si tenemos que H(5) = 2 H(6) = H(5+1) (x es impar) (5+1)/2 = 6/2 = 3 o lo que sera lo mismo H(6) = H(5+1) = H(5)+1 = 2+1 = 3 si x es par si x es par

Con lo que se podra calcular de forma encadenada o recursiva poniendo como caso Base H(0) = 0.Pero de esta manera no podramos demostrar que es recursiva primitiva, pero si lo expresamos de la siguiente manera: H(0) = 0

H(x+1) = H(x) + E(x) Y como E(x) es recursiva primitiva, ya que lo hemos demostrado anteriormente. H(x) es recursiva primitiva. 4.Vamos a ver como se comporta la funcin con algunos ejemplos: f(0,x) = g(x) f(1,x) = f(0, f(0,x)) = f(0,g(x)) = g(g(x)) = g2(x) f(2,x) = f(1, f(1,x)) = f(1, g2(x)) = g2(g2(x)) = g 2 (x) f(3,x) = f(2,f(2,x)) = f(2, g 2 (x)) = g 2 ( g 2 (x)) = g 2 (x)
2 2 2 2 4

En general, f(n,x) = g 2 ( x) Vamos a demostrar por induccin que es recursiva primitiva n=1 f(1,x) = g2(x) n=n f(n,x) = g 2 ( x) n = n+1 f(n+1,x) = g 2 ( x )
1 2n
2n

1 2n

Probamos la induccin
f (n +1, x ) = f (n, f (n, x)) = f (n, g 2 =g
22
n 1 1 2n

( x )) = g 2
22
( n+ 1) 1

1 2n

(g 2

1 2n

( x )) =

+2 2

n 1

( x) = g

2 2(2

n 1)

( x) = g

22

( x) = g

( x)

Pero nos encontramos que el nmero de operaciones depende de la entrada n. Con lo que definimos una nueva funcin F(m,x) = gm(x) La funcin F es primitiva recursiva debido a que F(m+1,x) = gm+1(x) = g(gm(x)) = g(F(m,x)) Por tanto F es primitiva recursiva. Y como podemos definir f(n,x) = F( 2 2 ,x) Y como f es composicin de operaciones que son primitivas recursivas, f es primitiva recursiva 5.Podemos definir
m +1
x ..

n 1

F ( m, x ) = x . F (0, x ) = x

Siendo F primitiva recursiva, con lo que


m +2

F ( m +1, x) = x . = F ( m, x ) x

x ..

de manera que como F es recursiva primitiva si definimos f a partir de F, por composicin f es recursiva primitiva. f(x) = F(x-1, x) Con lo que ya est demostrado que f es recursiva primitiva. Algunos ejemplos, f(0) = F(0,0) f(1) = F(0,1) = 1 f(2) = F(1,2) = 22 6.f no puede ser recursiva primitiva debido a que no es una funcin total, ya que cuando y<x la funcin no est definida. 7.f si es primitiva recursiva, ya que al ser la resta acotada, la funcin si est definida cuando y<x. 8.f si es primitiva recursiva, porque con x=0, al multiplicar por cero, f vale cero, y la funcin si est definida. 9.f si es primitiva recursiva porque es composicin de funciones primitivas recursivas. 5.- Predicados Recursivos Primitivos Recordemos que los predicados son funciones totales que toman los valores 0 y 1. Por tanto, si los predicados estn definidos sobre los nmeros naturales, podemos hablar de predicados recursivos primitivos. Vamos a dar algunos predicados que son recursivos primitivos. 9.- x = y Este predicado es una funcin que toma el valor 1 si x e y son iguales y 0 si son distintos. Es decir, corresponde a la funcin 1 d(x,y) = 0 si x y Que es primitiva recursiva es inmediato a partir de la ecuacin d(x,y) = (|x - y|) si x = y

10.- x y Este predicado corresponde a la funcin recursiva primitiva (x


.

y)

Teorema.- Si es una clase PRC, entonces si P, Q son predicados que pertenecen a , tambin pertenecen P, P v Q, P & Q. Demostracin.Como P = (P), si P . P & Q , a causa de la igualdad P & Q = P.Q P v Q , por la ley de Morgan. P v Q (P & Q) Como consecuencia de este teorema tenemos los dos siguientes corolarios. Corolario.- Si P, Q son predicados recursivos primitivos, entonces tambin lo son P v Q, P, P & Q. Corolario.- Si P, Q son predicados calculables, entonces tambin lo son P v Q, P, P & Q. Como consecuencia de este teorema, es inmediato demostrar que el siguiente predicado es recursivo primitivo. 11.- x < y Solo hay que escribir X < y x y & (x = y) Teorema (Definicin por casos).- Si es una clase PRC, y las funciones g, h y el predicado P pertenecen a , y f se define como

g(x1, f(x1,,xn) =

,xn)

si P(x1,,xn)

h(x1,,xn) en otro caso entoncesf pertenece a . Demostracin.El resultado se desprende de la ecuacin f(x1,,xn) = g(x1,,xn). P(x1,,xn)+ h(x1,,xn). (P(x1,,xn))

6. Operaciones Iteradas y Cuantificadores Iterados


Teorema.- Sea una clase PRC. Si f ( t, x1,,xn) pertenece a , entonces tambin pertenecen las funciones g(y, x1,,xn) = y h(y, x1,,xn) =

f(t, x
t =0 y

, , x n )

f (t, x
t =0

,, x n )

Demostracin.Se podra intentar esta demostracin por induccin. As se podra demostrar que las funciones g(0, x1,,xn), g(1, x1,,xn), pertenecen a , pero no que la funcin g(y, x1,,xn), en la funcin y es un argumento, pertenece a . La demostracin de que g pertenece a se basa en las siguientes ecuaciones de recursin, g(0, x1,,xn) = f(0, x1,,xn), g(t+1, x1,,xn) = g(t, x1,,xn) + f(t+1, x1,,xn)

Algunas veces la sumatoria o producto se realiza desde 1, en vez de desde 0. Es decir, se considera g(y, x1,,xn) = y h(y, x1,,xn) =

f(t, x
t =1 y

, , x n )

f (t, x ,, x
1 t =1

En este caso, considerando que las suma vaca es 0 y el producto vaco es 1, las funciones resultantes tambin perteneceran a . Bastara con sustituir las ecuaciones iniciales de recursin por g(0, x1,,xn) = 0 g(0, x1,,xn) = 1 Esto lo expresamos con el siguiente corolario. Corolario.- Si (t, x1,,xn) pertenece a la clase PRC , entonces tambin pertenecen las funciones

g(y, x1,,xn) = y h(y, x1,,xn) =

f(t, x
t =1 y

, , x n )

f (t, x ,, x
1 t =1

Teorema.- Si el predicado P(t, x1,,xn) pertenece a la clase PRC , entonces tambin pertenecen los predicados ( t y) P (t, x1,,xn) y ( t y) P (t, x1,,xn) Demostracin.Slo hay que considerar que (t y) P (t, x1,,xn) (t y) P (t, x1,,xn)

P(t, x
t =0 y

, , x n ) = 1 ,, x n ) 0

f (t, x
t =0

El teorema es an vlido si los cuantificadores son ( t < y) o (t < y). Esto es claro a partir de las siguientes relaciones, (t < y) P (t, x1,,xn) (t < y) P (t, x1,,xn)

P(t, x
t =0 y t =0

, , x n ) = 1
n

f (t, x ,, x
1

) 0

A partir de estas propiedades, podemos construir algunas funciones recursivas primitivas como las siguientes. 12.- x|y. Relacin divisor Este predicado es recursivo primitivo, ya que puede expresarse como y|x (t x) (y.t = x) 13.- Primo (x) El predicado x es primo es recursivo primitivo, ya que puede expresarse como Primo(x) (x>1) & (t x) {t = 1 v t = x v (t|x) } Ejercicios 1.- Sea f(x) = 2x si x es cuadrado perfecto; y f(x) = 2x + 1, en otro caso. Demostrar que f es recursiva primitiva. 2.- Sea (x) la suma de los divisores de x si x 0 y (0) = 0. Demostrar que es recursiva primitiva.

3.- Sea (x) el nmero de primos x. Demostrar que es recursiva primitiva. 4.- Sea SDCP (x) un predicado que es cierto cuando x es la suma de dos cuadrados perfectos y falso en caso contrario. Demostrar que SDCP es recursivo primitivo. ___________________ Ejercicios Resueltos 1.2x f(x) = 2x+1 en otro caso En primer lugar sabemos que 2x y 2x+1 es primitivo recursivo ya que slo usa el producto y la suma que son primitivos recursivos. Vamos a comprobar que t x = t2 es primitivo recursivo. t x = t 2 t x i x = t 2 2.x

si t x = t2

t (t | x)
t =1

x0

(0) = 0 x=0

Como todas las funciones son primitivas recursivas, por composicin de funciones, la funcin es recursiva primitiva. 3.(x) =

Pr imo(t )
t =1

Puesto que Primo(t) hemos demostrado anteriormente que es primitiva recursiva por composicin de funciones, la funcin es primitiva recursiva. 4.SDCP(x) ux vx u2+v2 = x Como sabemos u2+v2 = x, es una funcin recursiva primitiva, puesto que est formada por la suma, producto e igualdad, que como hemos demostrado anteriormente son recursivas primitivas, con lo que por composicin u2+v2 = x es recursivo primitivo. Y como u2+v2 = x, es recurivo primitivo y vx u2+v2 = x, est formado por funciones recursivas primitivas, por composicin es primitiva recursiva, y ux vx u2+v2 = x como est formado por funciones recursivas primitivas, por composicin es recursiva primitiva, con lo que SDCP es recursivo primitivo.

7. Minimizacin
Si P(t, x1,...,xn) pertenece a una clase dada PRC, ; entonces sabemos que la funcin g(y, x1,,xn) =

u =0 t =0

( P (t , x1 ,..., x n ))

tambin pertenece a . Donde es la funcin recursiva primitiva definida anteriormente. Vamos a analizar que es lo que calcula realmente la funcin q. Supongamos que para algn valor t0 y, se verifica que P (t, x1,,xn) = 0 para t < t0 pero P (t0, x1,,xn) = 1 esto es t0 es el mnimo valor t y para el cul P (t, x1,,xn) es cierto. Entonces 1 si u < t0

( P(t , x ,..., x
1 t =0

)) = 0 si u t0

Por tanto, g(y,x1,,xn) =

u <t 0

1 = t

esto es, g(y, x1,xn) calcula el mnimo valor t y para el que se verifica P(t, x1,..,xn). Usando este hecho y los teoremas anteriores es fcil demostrar el siguiente teorema: Teorema.- Si P(t,x1,,xn) pertenece a una clase PRC y f(y,x1,,xn) = Min{ t y / P(t, x1,,xn)} = g(y,x1,,xn) si (( t < y) P(t, x1,,xn) = 0 en otro caso entonces f pertenece a . Este teorema nos permite considerar los siguientes ejemplos de funciones recursivas primitivas.

14.- [x/y] [x/y] es la parte entera de x dividido por y. Por ejemplo, [7/2] = 3 [2/3] = 0 La ecuacin [x/y] = Min { t x / (t + 1).y > x } muestra que esta funcin es recursiva primitiva. De acuerdo con esta ecuacin, [x/0] = 0. 15.- R(x,y). Resto de la divisin entera. Como x/y = [x/y] + R(x,y)/y, podemos escribir R(x,y) = x
.

(y.[x/y])

por lo que R(x,y) es recursiva primitiva. Notemos que R(x,0) = x. 16.- pn, n-simo nmero primo. Para esta funcin se considera p0 = 0 y p1 = 2, p2 = 3, Consideremos las ecuaciones de recursin p0 = 0 pn+1 = Min{ t pn!+ 1/ Primo(t) & (t > pn) } Primero vamos a demostrar que son correctas. Para ello habra que probar que pn+1 (pn)! + 1 Para esto notemos que para 0 < i n tenemos
( p n )!+1 1 =k + p1 p1

donde k es un entero. Por tanto, (pn)! + 1 no es divisible por ninguno de los primos p1, p2,,pn. As (pn)! + 1 es primo, o es divisible por un primo > p n. En cualquier caso existe un primo q, tal que pn < q (pn)! + 1, lo cul prueba la desigualdad requerida. Esta demostracin est basada en cuna dada por Euclides para probar que existen infinitos nmeros primos. Vamos a escribir ahora las ecuaciones de recursin de una forma que nos muestre que pn es efectivamente una funcin recursiva primitiva. Primero notemos que h(y,z) = Min { t z / Primo(t) & (t > y) } es recursiva primitiva. As que k(x) = h( x,x ! +1) es tambin recursiva primitiva. Finalmente, las ecuaciones de recursin se reducen a p0 = 0 pn+1 = k (pn)

con lo que pn es recursiva primitiva. Discutamos ahora la minimizacin no acotada. Definimos Min { y / P(x1,,xn, y) } como el mnimo valor de y para el cual el predicado P(x 1,,xn, y) es cierto, estando indefinido si no existe valor de y para el cual P(x 1,,xn, y) es cierto. Notemos as que la minimizacin absoluta de un predicado puede producir una funcin que no es total. Por ejemplo, x y = Min { z / y + z = x} no est definida x < y. Respecto a esta funcin, indicaremos que existen predicados recursivos primitivos cuya minimizacin no acotada es total, pero no es recursiva primitiva. Sin embargo, se puede demostrar el siguiente teorema. Teorema.- Si P(x1,,xn, y) es predicado calculable y si g(x1,,xn) = Min{ y / P(x1,,xn, y)} entonces g es parcialmente calculable.

Demostracin.Basta considerar el siguiente programa que calcula g, [A] IF P(X1,,XN, Y) GOTO E Y Y + 1 GOTO A

Ejercicios 1.- Sea h(x) el entero n tal que n 2 x < n+1. Demostrar que h(x) es recursiva primitiva. 2.- Demostrar lo mismo cuando h(x) se define como el entero n tal que n (1 + 2 ) x < n+1 3.- p se dice que es un primo gemelo mayor si p y p -2 son ambos primos ( por ejemplo, 5, 7 ,13, 19, ). Sea T(0) = 0, T(n) es el n-simo primo gemelo mayor. Se supone, aunque nadie lo ha demostrado que existen infinitos primos gemelos mayores. Suponiendo que esto es verdad, demostrar que T(n) es calculable.

4.- Sea u(n) el n-simo nmero que es suma de dos cuadrados perfectos. Demostrar que u(n) es recursiva primitiva. 5.- Sea R(x,t) un predicado recursivo primitivo. Sea g(x,y) = Max { t y / R(x,t) } es decir g(x,y) es el mayor valor de t y para el que R(x,t) es verdadero. Siendo g(x,y) es recursiva primitiva. ___________________ Ejercicios Resueltos 1.n h(x) = Min n /
2 .x < n+1 2 .x

n2 2x2 = Min n 2x / 2x2 < (n+1)2

Puesto que n2 2x2 y 2x2 < (n+1)2 es primitivo recursivo y n 2x est acotado, por composicin la funcin es primitiva recursiva. 4.Si consideramos que u(0) = 0 u(n+1) = Min t / n2 2x2 = Min n 2x / 2x2 <(n+1)2 Y por estar formada por funciones primitivas recursivas, por composicin de funciones recursivas primitivas, la funcin u(n) es primitiva recursiva. t > u(n) SDCP (t) =

Autoreferencia
La autoreferencia argumenta hechos que no pueden existir o que se referencian a s mismo. La autoreferencia se usa para demostrar en matemticas, filosofa que algo no se puede demostrar o no se puede definir. La mejor manera de explicar la autoreferencia es a partir de un ejemplo. Esta frase es mentira, no hay manera de verificar su veracidad o su falsedad, debido a que se autoreferencia, con lo que si conseguimos que un problema se autoreferencie lograremos verificar que es indemostrable.

8. Funciones de emparejamiento y Nmeros de Gdel


En esta seccin estudiaremos dos procedimientos de codificacin que usan funciones recursivas primitivas. El primero es para codificar pares de nmeros por nmeros simples. El segundo es para codificar listas de nmeros. Definiremos la funcin recursiva primitiva

<x,y> = 2x(2y + 1)

Notemos que 2x(2y + 1) > 0, de forma que podemos emitir el punto y escribir <x,y> = 2x(2y + 1) -1 Algunos ejemplos de codificacin de pares de nmeros seran los siguientes: <0,0> = 20(2.0 + 1) <0,1> = 20(2.1 + 1) <1,0> = 21(2.0 + 1) De forma genrica: <0,y> = 2.y <x,0> = 2x 1 Si z es un nmero dado, existe una nica funcin x,y para la ecuacin 2y + 1 = (z+1)/2x esta ecuacin tiene siempre solucin (nica) porque (z+1)/2 x ha de ser impar. Esta ecuacin define pues dos funciones X = l(z), y = r(z)
. . .

1=0 1=2 1=1

Como esta ecuacin implica que x,y < z+1 tenemos l(z) z, r(z) z

Por tanto, podemos escribir l(z) = Min { x z / (y z) (z = <x,y>) } r(z) = Min { y z / (x z) (z = <x,y>) } as que l(z) y r(z) son funciones recursivas primitivas. La definicin de l(z), r(z) puede expresarse mediante la siguiente propiedad: <x,y> = z x = l(z) & y = r(z) Resumimos las propiedades de las funciones <x,y>, l(z) y r(z) en el siguiente teorema. Teorema (Teorema de la funcin de emparejamiento).- Las funciones <x,y>, l(z) y r(z) tienen las siguientes propiedades 1.Son recursivas primitivas 2.l(<x,y>) = x, r(<x,y>) = y

3.4.-

<l(z),r(z)> = z l(z), r(z) z

Otro apartado importante al igual que la codificacin de pares de nmeros es la descomposicin de un nmero en un par de nmeros. Nosotros sabemos que un par de nmeros <x,y> = a. Con lo que tenemos que llegar a partir de a, a obtener los valores x e y. Si nos fijamos en la frmula descrita anteriormente, nos fijamos que x, sera el valor del exponente que acompaa al 2 al descomponer a+1 en factores primos, y el valor de y, sera a +1 y = ( x 1) / 2 2 A continuacin, un ejemplo de decodificacin <x,y> = 19 1.- Al valor a, le sumamos 1. 19+1 = 20 2.- Descomponemos en valores primos 20|2 20 = 22.5 y como x es el exponente que acompaa al 2 10|2 obtenemos que x = 2. 5|5 1|1 3.- Calculamos y 20 y = ( 2 1) / 2 = 4/2 = 2; y = 2 2 Con lo que obtenemos que x= 2, y = 2, y el par sera <2,2>,y podemos comprobarlo aplicando la frmula de codificacin <2,2> = 22(2.2 + 1) -1 = 19 A continuacin obtenemos funciones recursivas primitivas que codifican y decodifican sucesiones arbitrarias finitas de nmeros. El mtodo que usamos fue empleado por primera vez por Gdel, y depende de la descomposicin en nmeros primos de los enteros. Definimos el nmero de Gdel de la sucesin (a 1,,an) como el nmero [a1,,an] =

pia i

i= 1

As, el nmero de Gdel de la sucesin (3, 1, 5, 4, 6) es [3, 1, 5, 4, 6] = 23.31.55.74.116 Para cada n fijo, la funcin [a 1,,an] es claramente recursiva primitiva. Los nmeros de de Gdel satisfacen tambin la siguiente propiedad de unicidad. Teorema.- Si [a1,,an] = [b1,,bn], entonces ai = bi i = 1,,n

Este resultado es una consecuencia inmediata del teorema de unicidad de la factorizacin de enteros en productos de nmeros primos (teorema fundamental de la aritmtica). Sin embargo, notemos que [a1,,an] = [a1,,an, 0] ya que p n + 1 = 1. El mismo resultado se verifica para cualquier sucesin finita de ceros aadidos a la derecha de una sucesin finita. El nmero de Gdel 1 se considera como representacin de la sucesin vaca de longitud cero. Tambin hay que hacer notar que los ceros aadidos a l izquierda si cambian el nmero de Gdel de una sucesin. Por ejemplo, [2, 3] = 22.33 = 108 [2, 3, 0] = 22.33.50 = 108 [0, 2, 3] = 20.32.53 = 1125 Determinaremos a continuacin una funcin recursiva primitiva (x) i tal que si X = [a1,,an] entonces (x)i = ai. Esta funcin se define como
t+ 1 (x)i = Min { t x / ( p i |x) }
0

Notemos que (x)0 = 0. Usaremos tambin la funcin recursiva primitiva Lt(x) = Min { i x / (x)i 0 & (j x) (j i) v (x)j = 0 } De esta forma, si x = 20 = 22.30.51 = [2, 0 ,1], entonces (x)3 = 1, pero (x)4 = (x)5 = = (x)20 = 0. De esta forma, Lt(20) = 3. Tambin, Lt(0) = Lt(1) = 0. Si x>1 y Lt(x) = n, entonces pn divide a x pero ningn primo mayor que p n divide a x. Notemos tambin que Lt( [a1,,an] ) = n si y solo si an 0. En el siguiente toerma se resumen las propiedades fundamentales de estas funciones recursivas primitivas. Teorema (Teorema de las Sucesiones de Nmeros).ai a. ( [a1,,an] )i = 0 b. [(x)1,,(x)n] = x en otro caso si n Lt (x) si 1 i n

La decodificacin de una lista de nmeros a diferencia de un par de nmeros es ms simple, ya que se hara de la siguiente manera Suponemos el nmero 200 1.- Descomponemos en factores primos 200|2 100|2 200 = 23.52 50|2 25|5 5|5 1|1 (200)1 = 3 (200)2 = 0 (200)3 = 2 (200)m

m>3

Con lo que 200 = [3, 0, 2], y podemos comprobarlo usando la frmula de codificacin de listas de nmeros [3,0,2] = 23.30.52 = 200

Ejercicios 1.- Sea F(0) = 0, F(1) = 1, F(n + 2) = F(n+1) + F(n) (Sucesin de Fibonacci). Demostrar que F(n) es recursiva primitiva. 2.- Sea h1(x, 0) = f1(x) h2(x, 0) = f2(x) h1(x, t+1) = g1(x, h1(x, t), h2(x, t) ) h2(x, t+1) = g2(x, h1(x, t), h2(x, t) ) Demostrar que si f1, f2, g1, g2 pertenecen a una clase PRC , entonces h1, h2 tambin pertenecen a . 3.a) Sea f una funcin, definimos entonces f(0) = 1, f(n) = [f(0),,f(n-1)], si n 0. Supongamos que f(n) = g(f(n)) para todo n. Demostrar que si g es recursiva primitiva entonces tambin lo es f. b) Sea f(0) = 1, f(1) = 4, f(2) = 6, f(x+3) = f(x) + f(x+1)2 + f(x+2)3 Demostrar que f(x) es recursiva primitiva. ___________________

Ejercicios Resueltos 1.Definimos la funcin H(n), que agrupa la sucesin de Fibonacci que es un par de nmeros en uno slo H(n) = <F(n),F(n+1)> Con lo que ahora tenemos que demostrar que H(n) es primitiva recursiva. H(0) = <F(1),F(0)> = <1,0> = 1 H(n+1) = <F(n+2),F(n+1)> = <F(n+1)+F(n),F(n+1)> = = <l(H(n)) + r(H(n)), l(H(n))> Donde F(n+1) = l(H(n)) y F(n) = r(H(n)) Y como se puede ver, podemos obtener H(n+1) a partir de H(n) utilizando operaciones primitivas recursivas (<>,l,r,+), y H es primitiva recursiva. Con lo que por composicin F es primitiva recursiva.

3.b) Definimos una funcin que codifique la sucesin de nmeros como uno. Para ello definimos la funcin H(n) H(n) = [f(n), f(n+1), f(n+2)] Donde f(n+3) = (H(n))1, f(n+1) = (H(n))2 y f(n+2) = (H(n))3 H(0) = [1,4,6] = 21.34.56 = 2.531.250 H(n+1) = [f(n+1),f(n+2),f(n+3)] = = [f(n+1), f(n+2), f(n) + f(n+1)2 + f(n+2)3] = = [(H(n))2, (H(n))3, (H(n))1 + (((H(n))2)2 + (((H(n))3)3 ] Luego podemos obtener H(n+1) a partir de operaciones primitivas recursivas utilizando ([ ], ()i, + xn) y por tanto H es primitiva recursiva. Y f como se compone de funciones primitivas recursivas es primitiva recursiva. Las funciones que usa son H, ()i.