stringtranslate.com

función de ackermann

En la teoría de la computabilidad , la función de Ackermann , que lleva el nombre de Wilhelm Ackermann , es uno de los ejemplos más simples [1] y los primeros descubiertos de una función computable total que no es recursiva primitiva . Todas las funciones recursivas primitivas son totales y computables, pero la función de Ackermann ilustra que no todas las funciones computables totales son recursivas primitivas.

Después de la publicación de Ackermann [2] de su función (que tenía tres argumentos enteros no negativos), muchos autores la modificaron para adaptarla a diversos propósitos, de modo que hoy "la función de Ackermann" puede referirse a cualquiera de las numerosas variantes de la función original. Una versión común es la función de dos argumentos de Ackermann-Péter desarrollada por Rózsa Péter y Raphael Robinson . Su valor crece muy rápidamente; por ejemplo, da como resultado , un número entero de 19.729 dígitos decimales. [3]

Historia

A finales de la década de 1920, los matemáticos Gabriel Sudan y Wilhelm Ackermann , alumnos de David Hilbert , estudiaban los fundamentos de la computación. Tanto a Sudan como a Ackermann se les atribuye [4] el descubrimiento de funciones computables totales (denominadas simplemente "recursivas" en algunas referencias) que no son recursivas primitivas . Sudán publicó la función Sudán , menos conocida , y poco después y de forma independiente, en 1928, Ackermann publicó su función (del griego, la letra phi ). La función de tres argumentos de Ackermann, se define de manera que para , reproduce las operaciones básicas de suma , multiplicación y exponenciación como

y para p > 2 extiende estas operaciones básicas de una manera que puede compararse con las hiperoperaciones :

(Aparte de su papel histórico como función recursiva total computable pero no primitiva, se considera que la función original de Ackermann extiende las operaciones aritméticas básicas más allá de la exponenciación, aunque no tan perfectamente como lo hacen las variantes de la función de Ackermann que están diseñadas específicamente para ese propósito, como la secuencia de hiperoperación de Goodstein ).

En Sobre el Infinito , [5] David Hilbert planteó la hipótesis de que la función de Ackermann no era recursiva primitiva, pero fue Ackermann, secretario personal y ex alumno de Hilbert, quien en realidad demostró la hipótesis en su artículo Sobre la construcción de los números reales de Hilbert . [2] [6]

Rózsa Péter [7] y Raphael Robinson [8] desarrollaron más tarde una versión de dos variables de la función de Ackermann que llegó a ser la preferida por casi todos los autores.

La secuencia de hiperoperación generalizada , por ejemplo , también es una versión de la función de Ackermann. [9]

En 1963, RC Buck basó una variante intuitiva de dos variables [n 1] en la secuencia de hiperoperación : [10] [11]

En comparación con la mayoría de las otras versiones, la función de Buck no tiene compensaciones no esenciales:

Se han investigado muchas otras versiones de la función de Ackermann. [12]

Definición

Definición: como función m-aria

La función original de tres argumentos de Ackermann se define recursivamente de la siguiente manera para números enteros no negativos y :

De las diversas versiones de dos argumentos, la desarrollada por Péter y Robinson (llamada "la" función de Ackermann por la mayoría de los autores) se define para números enteros no negativos y es la siguiente:

La función de Ackermann también se ha expresado en relación con la secuencia de hiperoperación : [13] [14]

o, escrito en la notación de flecha hacia arriba de Knuth (extendido a índices enteros ):
o, de manera equivalente, en términos de la función F de Buck: [10]

Definición: como función 1-aria iterada

Definir como la enésima iteración de :

La iteración es el proceso de componer una función consigo misma un cierto número de veces. La composición de funciones es una operación asociativa , por lo que .

Concebiendo la función de Ackermann como una secuencia de funciones unarias, se puede establecer .

La función luego se convierte en una secuencia de funciones unarias [n 2] , definidas a partir de la iteración :

Cálculo

Naturalmente, la definición recursiva de la función de Ackermann se puede transponer a un sistema de reescritura de términos (TRS) .

TRS, basado en función 2-aria

La definición de la función biaria de Ackermann conduce a las reglas de reducción obvias [15] [16]

Ejemplo

Calcular

La secuencia de reducción es [n 3]

Para calcular se puede utilizar una pila , que inicialmente contiene los elementos .

Luego, repetidamente, los dos elementos superiores se reemplazan según las reglas [n 4]

Esquemáticamente, a partir de :

MIENTRAS longitud de pila <> 1{ POP 2 elementos; EMPUJAR 1 o 2 o 3 elementos, aplicando las reglas r1, r2, r3}

El pseudocódigo está publicado en Grossman & Zeitman (1988).

Por ejemplo, en la entrada ,

Observaciones

Su propio algoritmo, inherentemente iterativo, calcula en el tiempo y en el espacio.

TRS, basado en una función 1-aria iterada

La definición de las funciones iteradas de Ackermann 1-aria conduce a diferentes reglas de reducción

Como la composición de funciones es asociativa, en lugar de la regla r6 se puede definir

Como en la sección anterior, el cálculo de se puede implementar con una pila.

Inicialmente la pila contiene los tres elementos .

Luego, repetidamente, los tres elementos superiores se reemplazan según las reglas [n 4]

Esquemáticamente, a partir de :

MIENTRAS longitud de pila <> 1{ POP 3 elementos; EMPUJAR 1 o 3 o 5 elementos, aplicando las reglas r4, r5, r6;}

Ejemplo

Al ingresar, se muestran las configuraciones de pila sucesivas.

Las igualdades correspondientes son

Cuando se usa la regla de reducción r7 en lugar de la regla r6, los reemplazos en la pila seguirán

Las configuraciones de pila sucesivas serán entonces

Las igualdades correspondientes son

Observaciones

TRS, basado en hiperoperadores

Como demostraron explícitamente Sundblad (1971) —o Porto y Matos (1980)—, la función de Ackermann se puede expresar en términos de la secuencia de hiperoperación :

o, después de eliminar la constante 2 de la lista de parámetros, en términos de la función de Buck

La función de Buck , [10] una variante de la función de Ackermann en sí misma, se puede calcular con las siguientes reglas de reducción:

En lugar de la regla b6 se puede definir la regla

Para calcular la función de Ackermann basta con añadir tres reglas de reducción

Estas reglas se ocupan del caso base A(0,n), la alineación (n+3) y el error (-3).

Ejemplo

Calcular

Las igualdades coincidentes son

Observaciones

Cifras enormes

Para demostrar cómo se realiza el cálculo de resultados en muchos pasos y en un gran número: [n 5]

tabla de valores

Calcular la función de Ackermann se puede reformular en términos de una tabla infinita. Primero, coloca los números naturales en la fila superior. Para determinar un número en la tabla, tome el número inmediatamente a la izquierda. Luego use ese número para buscar el número requerido en la columna dada por ese número y una fila hacia arriba. Si no hay ningún número a su izquierda, simplemente mire la columna titulada "1" en la fila anterior. Aquí hay una pequeña porción superior izquierda de la tabla:

Los números aquí que solo se expresan con exponenciación recursiva o flechas de Knuth son muy grandes y ocuparían demasiado espacio para escribirlos en dígitos decimales simples.

A pesar de los grandes valores que aparecen en esta primera sección de la tabla, se han definido algunos números aún mayores, como el número de Graham , que no se puede escribir con un número pequeño de flechas de Knuth. Este número se construye con una técnica similar a aplicar la función de Ackermann a sí mismo de forma recursiva.

Esta es una repetición de la tabla anterior, pero con los valores reemplazados por la expresión relevante de la definición de función para mostrar el patrón claramente:

Propiedades

Observaciones generales

No recursivo primitivo

La función de Ackermann crece más rápido que cualquier función recursiva primitiva y, por lo tanto, no es recursiva primitiva en sí misma. El bosquejo de la prueba es el siguiente: una función recursiva primitiva definida usando hasta k recursiones debe crecer más lentamente que , la (k+1)-ésima función en la jerarquía de rápido crecimiento, pero la función de Ackermann crece al menos tan rápido como .

Específicamente, se muestra que para cada función recursiva primitiva existe un número entero no negativo tal que para todos los números enteros no negativos ,

Una vez establecido esto, se deduce que en sí mismo no es recursivo primitivo, ya que de lo contrario ponerlo conduciría a la contradicción

La prueba procede de la siguiente manera: defina la clase de todas las funciones que crecen más lentamente que la función de Ackermann

y muestre que contiene todas las funciones recursivas primitivas. Esto último se logra mostrando que contiene las funciones constantes, la función sucesora, las funciones de proyección y que está cerrado bajo las operaciones de composición de funciones y recursividad primitiva.

Uso en complejidad computacional

La función de Ackermann aparece en la complejidad temporal de algunos algoritmos , [18] como los sistemas de suma de vectores [19] y la alcanzabilidad de la red de Petri , [20] , lo que demuestra que son computacionalmente inviables para instancias grandes. La inversa de la función de Ackerman aparece en algunos resultados de complejidad temporal.

Inverso

Dado que la función f ( n ) = A ( n , n ) considerada anteriormente crece muy rápidamente, su función inversa , f −1 , crece muy lentamente. Esta función inversa de Ackermann f −1 generalmente se denota por α . De hecho, α ( n ) es menor que 5 para cualquier tamaño de entrada práctico n , ya que A (4, 4) es del orden de . 

Esta inversa aparece en la complejidad temporal de algunos algoritmos, como la estructura de datos de conjuntos disjuntos y el algoritmo de Chazelle para árboles de expansión mínima . A veces se utiliza la función original de Ackermann u otras variaciones en estos entornos, pero todas crecen a tasas igualmente altas. En particular, algunas funciones modificadas simplifican la expresión eliminando −3 y términos similares.

Una variación de dos parámetros de la función inversa de Ackermann se puede definir de la siguiente manera, donde está la función suelo :

Esta función surge en análisis más precisos de los algoritmos mencionados anteriormente y proporciona un límite de tiempo más refinado. En la estructura de datos de conjuntos disjuntos, m representa el número de operaciones mientras que n representa el número de elementos; en el algoritmo de árbol de expansión mínima, m representa el número de aristas mientras que n representa el número de vértices. Existen varias definiciones ligeramente diferentes de α ( m , n ) ; por ejemplo, log 2 n a veces se reemplaza por n y la función piso a veces se reemplaza por un techo .

Otros estudios podrían definir una función inversa de una donde m se establece como una constante, de modo que la inversa se aplique a una fila en particular. [21]

La inversa de la función de Ackermann es recursiva primitiva. [22]

Usar como punto de referencia

La función de Ackermann, debido a su definición en términos de recursividad extremadamente profunda, puede usarse como punto de referencia de la capacidad de un compilador para optimizar la recursividad. El primer uso publicado de la función de Ackermann de esta manera fue en 1970 por Dragoș Vaida [23] y, casi simultáneamente, en 1971, por Yngve Sundblad. [13]

El artículo fundamental de Sundblad fue retomado por Brian Wichmann (coautor del estudio de referencia Whetstone ) en una trilogía de artículos escritos entre 1975 y 1982. [24] [25] [26]

Ver también

Notas

  1. ^ con el orden de los parámetros invertido
  2. ^ ' curry '
  3. ^ En cada paso se reescribe la redex subrayada .
  4. ^ ab aquí: ¡estrategia más interna a la izquierda!
  5. ^ abcd Para una mejor legibilidad,
    S(0) se anota como 1,
    S(S(0)) se anota como 2,
    S(S(S(0))) se anota como 3,
    etc.
  6. ^ La profundidad máxima de recursividad se refiere al número de niveles de activación de un procedimiento que existen durante la llamada más profunda del procedimiento. Cornelio y Kirby (1975)
  7. ^ BUCLE n+1 VECES HACER F

Referencias

  1. ^ Monin y Hinchey 2003, pág. 61.
  2. ^ ab Ackermann 1928.
  3. ^ "Expansión decimal de A (4,2)". kosara.net . 27 de agosto de 2000. Archivado desde el original el 20 de enero de 2010.
  4. ^ Calude, Marcus y Tevy 1979.
  5. ^ Hilbert 1926, pag. 185.
  6. ^ van Heijenoort 1977.
  7. ^ Pedro 1935.
  8. ^ Robinson 1948.
  9. ^ Ritchie 1965, pag. 1028.
  10. ^ abc Dólar 1963.
  11. ^ Meeussen y Zantema 1992, pág. 6.
  12. ^ Munafo 1999a.
  13. ^ ab Sundblad 1971.
  14. ^ Oporto y Matos 1980.
  15. ^ Grossman y Zeitman 1988.
  16. ^ Paulson 2021.
  17. ^ Cohen 1987, pag. 56, Proposición 3.16 (ver prueba).
  18. ^ Brubaker 2023.
  19. ^ Czerwiński y Orlikowski 2022.
  20. ^ Leroux 2022.
  21. ^ Pettie 2002.
  22. ^ Matos 2014.
  23. ^ Vaida 1970.
  24. ^ Wichmann 1976.
  25. ^ Wichmann 1977.
  26. ^ Wichmann 1982.

Bibliografía

enlaces externos