En pocas palabras : Turing Machine puede hacer (infinitamente especificado) cálculos infinitos sobre (infinitamente especificado) datos infinitos y producir (infinitamente especificado) resultados infinitos. La idea básica es que esos infinitos se pueden definir como el límite de entidades finitas, definidas de una manera matemáticamente apropiada. Esta es la base de la semántica matemática de la computación. Si considera programas en lugar de máquinas de Turing, estos programas también pueden contener (infinitamente especificado) estructuras de datos infinitas. El caso de una función tabulada fact
como un posible algoritmo se analiza al final, como un programa o como un modelo TM, con una pista sobre la relación con la evaluación diferida de objetos infinitos.
Con muchos mas detalles
Con respecto a su pregunta final, una TM no computa en números arbitrarios, sino en la representación simbólica de estos números como cadenas largas de símbolos arbitrariamente (sin límites) que los representan. Modulación adecuada del módulo, es correcto que puedan comparar o hacer aritmética con dichos números a través de estas representaciones.
Pero la pregunta original es sobre el papel del infinito en las máquinas de Turing en general.
Una respuesta común a esta pregunta es que las máquinas de Turing nunca tratan con el infinito. Están definidos de manera finita, y lo que sea que calculen se calcula en tiempo finito en una parte finita de la cinta (por lo tanto, una cinta finita que es más grande sería suficiente). Lo que es cierto es que los requisitos de tiempo de espacio de la TM son ilimitados, lo que no es lo mismo que infinito.
Por lo tanto, cualquier respuesta que sea calculada por un TM podría ser calculada también por un autómata de estado finito (FSA), que es "hasta cierto punto" una forma de ver la tabulación. La dificultad es que algunos tamaños de entrada (casi siempre llega a eso, aunque solo sea para leer la entrada) excederán el tamaño del autómata. Pero entonces, podemos usar uno más grande. Entonces, si queremos considerar un tamaño de entrada ilimitado, necesitamos una secuencia infinita de FSA que pueda hacer el cálculo. En realidad, es posible que necesitemos una máquina de estado finito un poco más compleja que la FSA tradicional, ya que puede haber una salida para ser calculada (en lugar de una respuesta sí-no), pero un transductor de estado finito probablemente debería funcionar.
Entonces, si estamos viendo un problema que tiene un conjunto infinito de instancias, como calcular un MCD o simplemente usar aritmética en enteros de tamaño arbitrario, vemos que el infinito regresa por la puerta trasera, ya que este infinito conjunto de FSA.
π
Por otra parte, podemos reemplazar eso por una secuencia infinita de cálculos finitos con máquinas finitas. Pero estamos haciendo trampa.
Desde un punto de vista físico, eso es lo mejor que podemos hacer. Solo sabemos cómo construir máquinas finitas, al menos de acuerdo con el estado actual de la técnica en física, que no se espera que cambie demasiado en ese tema en el futuro cercano.
Pero, ¿cómo podemos manejar esos infinitos de una manera consistente y manejable desde un punto de vista matemático?
Cuando considera un conjunto infinito de FSA que puede cooperar para calcular un conjunto infinito de respuestas, no puede hacerlo arbitrariamente. Necesita algunas salvaguardas para asegurarse de que lo que está haciendo tiene sentido. Es bien sabido que puedes construir trivialmente cualquier conjunto con una unión infinita de conjuntos regulares, en realidad con una unión infinita de conjuntos singleton. Por lo tanto, considerar uniones infinitas arbitrarias de autómatas sin ninguna restricción no lo llevará a ninguna parte. Incluso considera en el mismo conjunto de autómatas que le dan respuestas inconsistentes.
Lo que realmente quieres es definir una noción de consistencia. Pero eso requiere algunas precauciones. Supongamos que está utilizando una secuencia infinita de autómatas para simular una TM que responde sí o no, o no se detiene. El problema es que una FSA siempre se detendrá con una respuesta, como sí o no. Pero si usa una FSA que en realidad no tiene el tamaño suficiente para la entrada elegida, ¿qué debería responder? Tanto sí como no están reservados para los casos en que la FSA realmente finalizó el cálculo de TM, y el uso de una de estas respuestas con un cálculo inacabado solo conduciría a la confusión. Lo que quieres es una respuesta que diga: "lo siento, soy demasiado pequeño y no puedo decirlo. Por favor, intenta con un chico más grande de la familia ". En otras palabras, desea una respuesta como
desbordamiento o no sabe⊥
Por lo tanto, necesita autómatas que tengan 3 tipos de estados: aceptar, no aceptar e indefinido. Un estado indefinido puede verse como un estado que representa una parte faltante del autómata que obliga a detener el cálculo. Entonces, cuando la computación se detiene, dependiendo del estado en el que se detiene, obtienes la respuesta sí , no o indefinido .
Ahora, ves que lo que quieres son secuencias infinitas de autómatas que sean consistentes . Tanto yes como no son consistentes con
undefined , pero yes no es consistente con no . Entonces dos autómatas son consistentes cuando dan respuestas consistentes en la misma entrada.
π3.14 ⊥ ⊥ ⊥ ⊥ . . .3.1415 ⊥ ⊥ ⊥ ⊥ . . .⊥ . ⊥ 5159 ⊥ ⊥ ⊥ ⊥ . . .3.1416 ⊥ ⊥ ⊥ ⊥ . . .3.1416 ⊥ ⊥ ⊥ ⊥ . . .π
No desarrollaré más estos aspectos teóricos, lo cual es un poco incómodo cuando estoy basado en máquinas de Turing. El punto es que estos conceptos llevan a la idea de que los dominios de cómputo (ya sean datos o máquinas), forman estructuras matemáticas como redes, en las que el objeto infinito puede definirse adecuadamente como los límites de secuencias infinitamente crecientes (es decir, mejor y mejor definidas) objetos finitos Definir las secuencias infinitas requiere más aparatos y una noción de continuidad. De esto se trata fundamentalmente la teoría de la semántica de Dana Scott, y ofrece una visión algo diferente de los conceptos de computabilidad.
Entonces, las máquinas de Turing u otros dispositivos formales que pueden hacer "cómputo infinito" pueden definirse como límites de secuencias de aproximaciones finitas de las máquinas, que están cada vez mejor definidas. Lo mismo es cierto para cualquier dato con el que las máquinas calculan, ya sea entrada o salida.
El documento más simple que he leído sobre esto es un conjunto de apuntes escritos a mano por Dana Scott, a menudo referidos como apuntes de Amsterdam. Pero no pude encontrarlo en la web. Cualquier puntero a una copia (incluso incompleto, ya que tengo parte de ella) sería bienvenido. Pero puede ver otras publicaciones tempranas de Scott, como
Outline of a Mathematical Theory of Computation .
Volver al ejemplo inicial de la pregunta.
Estos conceptos de aproximación se aplican tanto a los datos como a los programas. La funciónfact
se define de forma recursiva, lo que significa que es el punto menos fijo de un funcional que se puede utilizar para calcular una secuencia de aproximación finita convergente fact
. Esta secuencia de funciones finitas más y más definidas converge a una entidad infinita que es lo que llama la función fact
.
fact
⊥ ( indefinida ) cuando la tabla no está lo suficientemente definida (lo suficientemente grande). El algoritmo de búsqueda de tablas también debe definirse mediante una secuencia de aproximaciones, ya que se calcula con una tabla infinita.
Es cierto que, si considera el modelo elemental de computación TM, tal matriz infinita no puede expresarse en ese formalismo. No significa que no tenga sentido. Una máquina de Turing podría tener una segunda cinta que se supone que debe inicializarse con los valores tabulados de algunas funciones como fact
. No cambia el poder computacional de la TM, siempre que esa función sea computable, es decir, siempre que la tabla pueda inicializarse con un cálculo infinito de otra TM que pueda calcular todos los pares de argumento-valor para la función relevante.
Pero en la práctica, no puedes completar un cálculo infinito. Por lo tanto, la forma correcta de hacerlo es calcular la tabla de manera perezosa, es decir, llenar entradas solo cuando sea necesario. Eso es precisamente lo que se hace con la memorización, que es la respuesta que le di, con diferentes justificaciones, para su pregunta anterior.