Está en la página 1de 7

Apuntes para

TEORIA DE COMPUTACION
Funciones Recursivas.
M. A. Pinninghoff J.

Segundo semestre 2006

1. Introducción.

El concepto de Función Recursiva fue introducido por Kleene el año


1936. Son una clase de funciones numérico-teóricas (se llaman ası́ las fun-
ciones f : Nn → N) que pueden ser evaluadas algorı́tmicamente.

Como Turing, Kleene pretendı́a formalizar la noción intuitiva de proce-


dimiento efectivo, aplicada a cantidades numéricas.
Más tarde se descubrió que las funciones de Kleene y las Máquinas de
Turing eran formulaciones equivalentes; es decir, que un algoritmo (proce-
dimiento finito) puede ser realizado por una M.T. ssi puede ser expresado
como una función recursiva.

Los elementos básicos de la definición de una función recursiva son:

1) Una base (equivalente a axiomas o condiciones lı́mite) que establece


que ciertos números son, por definición, valores de la función para argumen-
tos dados.

2) Una regla de construcción recursiva que nos dice cómo determinar


otros valores de la función a partir de valores conocidos.

3) Una afirmación de que la función sólo toma aquellos valores que re-
sultan por aplicación, un número finito de veces, de la regla de construcción
recursiva sobre los valores de la función básica.

1
Es decir, una definición recursiva especifica un procedimiento efectivo
para evaluar una función siempre que la función esté definida.

Supongamos que consideramos alguna función (n+1)-aria f . El dominio


de f puede ser dividido en pedazos tal que para x1 , . . ., xn tomemos valores
fijos y x0 varı́e sobre N. Esto es, fijando valores particulares n1 , . . ., nn (para
x1 , . . ., xn ) obtenemos una función f (x0 , n1 , . . ., nn ). Ası́, en vez de traba-
jar sobre una función (n+1)-aria f (x0 , x1 , . . ., xn ), podemos trabajar con
muchas funciones unarias f (x0 , n1 , . . ., nn ), una por cada n-tupla (n1 , . . .,
nn ). Cuando hacemos esto, estamos tomando a x1 , . . ., xn como parámetros.

Por ejemplo, supongamos f (x0 , x1 , x2 ) = x0 + (x1 · x2 ), donde x1 y x2


serán parámetros. Entonces,

f (0, x1 , x2 ) = 0 + (x1 · x2 )

f (1, x1 , x2 ) = 1 + (x1 · x2 ) = f (0, x1 , x2 ) + 1


..
.

f (n+1, x1 , x2 ) = n+1 + (x1 ·x2 ) = ((x1 ·x2 ) + n) + 1 = f (n, x1 , x2 ) + 1

Recordemos la composición de funciones. Si f y g son funciones de una


variable, podemos definir una nueva función h = g ◦ f donde g ◦ f (x) =
g(f (x)). Por ejemplo, si f (x) = x−5 y g(x) = x2 , entonces h(x) = g ◦f (x) =
g(f (x)) = g(x − 5) = (x − 5)2 . Podemos extender la idea de composición
a varias variables. Supongamos que tenemos f0 , f1 , . . ., fm , las cuales son
funciones sobre n+1 variables y g es una función sobre m+1 variables. En-
tonces, podemos definir una nueva función h de n+1 variables como:

h(x0 , x1 , . . ., xn ) = g(f0 (x0 , . . ., xn ), f1 (x0 , . . ., xn ), . . ., fm (x0 , . . ., xn ))

Si es cierto que f0 , . . ., fm y g son computables, entonces h también lo es.

1.1 Definición de funciones recursivas primitivas.

Tomaremos como conjunto base, tres funciones que por definición deci-
mos que son recursivas primitivas iniciales:

2
a. Función Nula (o función cero)

N (x) = 0, ∀x ∈ N

esta función hace corresponder a cualquier número natural el cero.

b. Función Sucesor

S(x) = x0
hace corresponder a cualquier número natural x su siguiente, que deno-
taremos por x0 .

c. Función Proyección (o identidad generalizada)

Iin (x1 , x2 , . . . , xi , . . . , xn ) = Iin (X) = xi , 1 ≤ i ≤ n

hace corresponder a la tupla (x1 , x2 , . . ., xi , . . ., xn ) su i-ésima compo-


nente.

Por ejemplo:

I35 (2, 3, 1, 4, 2) = 1

I22 (7, 9) = 9

I11 (6) = 6

La función I11 es la llamada función identidad.

Estas tres funciones son totales, puesto que para todo x, N(x), S(x),
Ini (X) están perfectamente definidas ası́ como su valor asociado.
Además, las tres son computables.

Con estas tres funciones base y las reglas de composición y recursión


obtendremos las restantes funciones recursivas primitivas.

Reglas Inductivas.

a) Composición.

3
Supongamos que las m funciones g1 , g2 , g3 , . . ., gm tales que el dominio
de gi es Nn (1 ≤ i ≤ n) y la función h con dominio Nm son recursivas primi-
tivas. Es decir, tenemos m funciones recursivas primitivas de n argumentos
y una función primitiva recursiva de m argumentos.

Se define la función f de n argumentos como:

f (x1 , x2 , ..., xn ) = h(g1 (x1 , ..., xn ), g2 (x1 , ..., xn ), ..., gm (x1 , ..., xn )) (1)

La función f (X) ası́ obtenida es una función recursiva primitiva. Ya que


las funciones g1 , g2 , g3 , . . ., gm y h son funciones totales, f es una función
total con dominio Nn .
También se dice que la función f es la composición de los gi , i = 1, 2, 3, . . . , m
mediante h.

A veces, a la composición se le denomina substitución y a la expresión


(1), esquema de substitución.

Por ejemplo:

g1 (x, y) = x + y
g2 (x, y) = x − y
g3 (x, y) = x · y
h(g1 , g2 , g3 ) = 2 · g1 + g2 + g3

entonces

f (x, y) = 2 · (x + y) + (x − y) + x · y

b) Recursión.

Supongamos que g y h son funciones recursivas primitivas,


f (x, 0) = g(x) (1) x = (x1 , x2 , . . ., xn )

f (x, y 0 ) = h(x, y, f (x, y)) (2)

define una función recursiva primitiva.

La ecuación (1) es la condición lı́mite de la definición y la ecuación (2)


es la ecuación de recursión. Dado que g y h son totales, f también lo es.

4
Ya que f (x, 0) = g(x) está definida, una vez que hemos calculado f (x, y)
el valor de f (x, y 0 ) se obtiene evaluando la función total h.

La variable y recibe el nombre de variable de recursión; las variables


x1 x2 . . . xn se denominan parámetros y al par de ecuaciones (1) y (2) se de-
nomina esquema de recursión.

Como caso particular podemos definir la operación recursión primitiva


sin parámetros, que resulta de hacer n = 0, y las ecuaciones se convierten en:

f (0) = K

f (y 0 ) = h(y, f (y))

siendo K una constante natural.

Por ejemplo:

g(x1 , x2 ) = x1 · x2

z ) = y + z + x 1 + x2
h(x1 , x2 , y , |{z} z = f (x1 , x2 , y)
| {z } |{z}
x y f (x,y)

por recursión primitiva:

f (0, x1, x2 ) = g(x1, x2 ) = x1 · x2

f (y 0 , x1 , x2 ) = h(x1 , x2 , y, f (y, x1 , x2 ))

= y + f (y, x1 , x2 ) + x1 + x2

Por ejemplo, calcular f (3, 5, 2)

f (3, 5, 2) = 2 + f (2, 5, 2) + 5 + 2 = 9 + f (2, 5, 2)

f (2, 5, 2) = 1 + f (1, 5, 2) + 5 + 2 = 8 + f (1, 5, 2)

f (1, 5, 2) = 0 + f (0, 5, 2) + 5 + 2 = 7 + f (0, 5, 2)

5
f (0, 5, 2) = 5 · 2 = 10

Luego, f (3, 5, 2) = 34

Definición inductiva de la clase de funciones recursivas primi-


tivas.

Teniendo en cuenta las definiciones anteriores, podemos definir inductiva-


mente las clase de las funciones recursivas primitivas, de la siguiente manera:

a) Las funciones de base, N(x), S(x), Ini (x1 x2 . . . xn ) son funciones


recursivas primitivas.

b) Las funciones obtenidas a partir de funciones recursivas primitivas


mediante las operaciones de composición y recursión, son funciones primiti-
vas recursivas.

c) Sólo son funciones recursivas primitivas las obtenidas mediante a) y b).

Estudio de algunas funciones importantes.

1. La función Constante, definida por:

Ck (x) = k, ∀x ∈ N

es recursiva primitiva para cualquier k ∈ N.

Se obtiene aplicando la función sucesor S a la función nula, por medio


de composición:
k−veces
z }| {
Ck = k = S . . . S(N(x)) = S k (N(x))

donde S k denota la k-ésima composición de S con ella misma.

2. La función Predecesor:

P (y 0 ) = y

6
P (0) = 0

Aplicando la regla de recursión sin parámetros tenemos:

P (0) = 0
P (y 0 ) = h(y, P (y)) = I12 (y, P (y))

3. La función Suma:

Sea f (x, y) = x + y, es decir, la adición normal en los números naturales.

Informalmente:

f (x, 0) = x → x+0=x

f (x, y 0 ) = f (x, y)0 → x + y 0 = (x + y)0

La definición formal se obtiene partiendo de las funciones base ya defi-


nidas, y las reglas inductivas también definidas anteriormente.

Aplicando la recursión primitiva con el parámetro x tenemos:

f (x, 0) = I11 (x)

f (x, y 0 ) = h(x, y, f (x, y)) = S(I33 (x, y, f (x, y)))

con lo que queda probado que la función Suma f es recursiva primitiva.

También podría gustarte