Recursión global

En la teoría de la computabilidad, la recursión global es una técnica para definir funciones aritméticas por recursión . En una definición de una función f por recursión global, el valor de f(n) se calcula a partir de la secuencia f ( 0 ) , f ( 1 ) , , f ( n 1 ) {\displaystyle \langle f(0),f(1),\ldots ,f(n-1)\rangle } .

El hecho de que tales definiciones se puedan simplificar muestra que son recursivas primitivas. A diferencia de la recursión global, en la recursión primitiva el cálculo de una función requiere únicamente el valor anterior. Por ejemplo; para una función recursiva primitiva 1-aria g, el valor de g(n +1) se calcula solo a partir de g(n) y n .

Definición y ejemplos

La función factorial n! se define recursivamente por las reglas

0 ! = 1 , {\displaystyle 0!=1,}
( n + 1 ) ! = n ! ( n + 1 ) . {\displaystyle (n+1)!=n!(n+1).}

Esta recursión es primitiva porque calcula el siguiente valor (n +1)! de la función utilizando el valor n y el valor anterior n! Por otro lado, la función Fib(n), que devuelve el n -ésimo número de Fibonacci, se define con las ecuaciones de recursión

F i b ( 0 ) = 0 , {\displaystyle Fib(0)=0,}
F i b ( 1 ) = 1 , {\displaystyle Fib(1)=1,}
F i b ( n + 2 ) = F i b ( n + 1 ) + F i b ( n ) . {\displaystyle Fib(n+2)=Fib(n+1)+Fib(n).}

Para calcular Fib(n+2), se requieren los dos últimos valores. Finalmente, considere la función g definida mediante las ecuaciones de recurrencia

g ( 0 ) = 0 , {\displaystyle g(0)=0,}
g ( n + 1 ) = i = 0 n g ( i ) n i . {\displaystyle g(n+1)=\sum _{i=0}^{n}g(i)^{n-i}.}

Si bien los ejemplos anteriores utilizaban un número fijo de valores anteriores, g depende de un número variable de valores anteriories. En particular, g(n+1) requiere todos sus valores anteriores. Utilizando la Numeración de Gödel, podemos definir una función de recursión global como

f ( n ) = h ( n , f ( 0 ) , f ( 1 ) , , f ( n 1 ) ) {\displaystyle f(n)=h(n,\langle f(0),f(1),\ldots ,f(n-1)\rangle )}

donde f ( 0 ) , f ( 1 ) , , f ( n 1 ) {\displaystyle \langle f(0),f(1),\ldots ,f(n-1)\rangle } es el número de Gödel que codifica la secuencia indicada.

f ( n ) = h ( n , f ( 0 ) , f ( 1 ) , , f ( n 1 ) ) {\displaystyle f(n)=h(n,\langle f(0),f(1),\ldots ,f(n-1)\rangle )} .
f ¯ ( 0 ) = {\displaystyle {\bar {f}}(0)=\langle \rangle } ,
f ¯ ( n + 1 ) = a n ~ a d i r ( n , f ¯ ( n ) , h ( n , f ¯ ( n ) ) ) , {\displaystyle {\bar {f}}(n+1)={\mathit {a{\tilde {n}}adir}}(n,{\bar {f}}(n),h(n,{\bar {f}}(n))),}

Equivalencia a recursión primitiva

Dada la función por recursión global f:

f ¯ ( n ) = f ( 0 ) , f ( 1 ) , , f ( n 1 ) {\displaystyle {\bar {f}}(n)=\langle f(0),f(1),\ldots ,f(n-1)\rangle }

Basta con definir una función auxiliar para expresarla en un esquema de recursión primitiva

f ¯ ( n ) = f ( 0 ) , f ( 1 ) , , f ( n 1 ) {\displaystyle {\bar {f}}(n)=\langle f(0),f(1),\ldots ,f(n-1)\rangle }

De este modo f ¯ ( n ) {\displaystyle {\bar {f}}(n)} codifica los primeros n valores de f. La función f ¯ {\displaystyle {\bar {f}}} es primitiva recursiva ya que f ¯ ( n + 1 ) {\displaystyle {\bar {f}}(n+1)} se obtiene añadiendo a f ¯ ( n ) {\displaystyle {\bar {f}}(n)} el nuevo elemento h ( n , f ¯ ( n ) ) {\displaystyle h(n,{\bar {f}}(n))}  :

f ¯ ( 0 ) = {\displaystyle {\bar {f}}(0)=\langle \rangle } ,
f ¯ ( n + 1 ) = a p p e n d ( n , f ¯ ( n ) , h ( n , f ¯ ( n ) ) ) , {\displaystyle {\bar {f}}(n+1)={\mathit {append}}(n,{\bar {f}}(n),h(n,{\bar {f}}(n))),}
f ¯ ( n + 1 ) = g ( n , f ¯ ( n ) ) {\displaystyle {\bar {f}}(n+1)=g(n,{\bar {f}}(n))}

Utilizando f ¯ {\displaystyle {\bar {f}}} , la función original f se puede definir por f ( n ) = f ¯ ( n + 1 ) [ n ] {\displaystyle f(n)={\bar {f}}(n+1)[n]} , lo que demuestra que también es una función recursiva primitiva.

Referencias

  • Hinman, PG, 2006, Fundamentals of Mathematical Logic, AK Peters.
  • Odifreddi, PG, 1989, Classical Recursion Theory, North Holland; second edition, 1999.