¿Cerrar la brecha entre máquinas abstractas y logros informáticos? [cerrado]

11

Siempre me siento desconectado entre las máquinas abstractas (como las máquinas de Turing) y las arquitecturas informáticas (incluidas las arquitecturas de las máquinas virtuales, la arquitectura de Von Neumann). Entonces, ¿me gustaría saber cómo están relacionados? ¿Cómo influye uno en el otro? Las referencias también son apreciadas. Gracias.

Tim
fuente
77
Las máquinas de Turing son un modelo teórico de la informática para razonar sobre la computabilidad . Del mismo modo, el cálculo lambda es un modelo informático para los cálculos, pero que ha encontrado aplicaciones prácticas en el diseño de lenguajes de programación. Si bien el cálculo lambda, las máquinas de turing y las computadoras reales son equivalentes entre sí con respecto a las cosas que pueden calcular, su funcionamiento es completamente diferente. En particular, estos modelos teóricos de computación no describen lo que el hardware real puede hacer de manera eficiente.
amon
2
@amon Parece que ya has escrito la mayoría de las respuestas, ¿por qué dejar que se "desperdicie" en un comentario?
Como otros señalaron, existen varios modelos matemáticos para "computadoras": algunos más cercanos a los lenguajes (funciones recursivas parciales, cálculo lambda), otros más cercanos al hardware. Si lo desea, debe mirar las máquinas RAM ( enlace de Wikipedia ): están más cerca del hardware real que las máquinas Turing.
Lorenzo Dematté

Respuestas:

23

Las máquinas de Turing y las "máquinas" similares son modelos de cómputo , están destinadas a investigar problemas tales como:

  • Lo que se puede calcular
  • La clase de complejidad de los problemas.
  • Relaciones entre clases de complejidad.
  • La equivalencia de varias formas de calcular algo

Para ello, la máquina en sí debe ser lo más simple posible. La conveniencia del programador o las preocupaciones de implementación molestas no importan, ya que estos son objetos matemáticos y solo muy pocos programas se escriben directamente para ellos.

Por el contrario, la arquitectura de máquina virtual y la arquitectura de máquina basada en silicio real se centra en ejecutar un programa dado . La máquina se hace más complicada de lo estrictamente necesario para las preocupaciones anteriores y, a su vez, se necesitan menos (y más obvias) instrucciones para hacer cosas interesantes. No es demasiado complicado, ya que todavía tienen que ser comprensibles (e implementables de manera eficiente), pero más complicado.

Entonces, los dos enfoques están fundamentalmente en desacuerdo. Además de estar ambos en el campo de la informática, no tienen mucho que ver entre sí.


fuente
1
Gracias. Pero encontré " Máquinas de Turing y máquinas de Turing universales con analogía a las máquinas virtuales ", lo que podría sugerir sus relaciones, pero no hay detalles.
Tim
44
@Tim Supongo que el curso solo toma las máquinas de Turing como punto de partida para introducir el concepto de una máquina abstracta, luego pasa rápidamente a máquinas abstractas más útiles.
4

La relación principal es que puedes simular la construcción teórica en la física.

El hecho de que el físico sea capaz de todo lo que es teórico da lugar a la capacidad para que las pruebas teóricas y el análisis de la máquina teórica sean reconocidas como implementables en el mundo real.

El problema de la detención es un ejemplo perfecto de algo que se demostró en una máquina de turing que no se puede resolver, y por prueba en la máquina de turing se puede saber que no se puede resolver en una máquina real que cumple con las leyes de la máquina de turing.

Es la diferencia entre sumar cosas contando y hacerlo escribiéndolo en papel, se ha demostrado que la realidad de contar cumple las mismas reglas que hacer la suma en un pedazo de papel. Entonces, cuando simula el recuento físico de las cosas, sus resultados se reconocen como aplicables al mundo real, por lo que sabe cuánto costarán dos barras de caramelo simulando mentalmente el recuento sin necesidad de contar el dinero físico para obtener el resultado.

Actualmente, la gente está trabajando en el análisis y las pruebas de un modelo teórico conocido como "Máquina Quantum Turing" para ver qué instalaciones estarán disponibles con las máquinas de computación cuántica. Tiene sentido que las personas trabajen con estos modelos cuando la versión física de su modelo es excesivamente costosa, rara y las implementaciones actuales aún son muy escasas. Los modelos teóricos se utilizan para mostrar lo que podemos hacer cuando mejoran nuestras implementaciones físicas.

Jimmy Hoffa
fuente
1

Están relacionados aproximadamente de la misma manera que el transbordador espacial está relacionado con un globo que se infla con la respiración y luego se suelta y se ve volar.

El principio fundamental de expulsar algo en una dirección para impulsar algo en la dirección opuesta está ahí.

Ahí es donde terminan las similitudes.

Mike Nakis
fuente
1

Veo las máquinas teóricas como un puente entre la computación del mundo real y las matemáticas. Una máquina de Turing es lo suficientemente potente como para simular cualquier arquitectura del mundo real o lenguaje de programación, lo suficientemente simple como para simularse fácilmente y, lo más importante, lo suficientemente simple como para ser objeto de razonamiento y pruebas matemáticos razonablemente directos.

Patricia Shanahan
fuente
1

Es importante saber que la definición de computación no es "esas cosas que hacen las computadoras". La computación es anterior a las computadoras. Las computadoras recibieron su nombre porque fueron creadas para ayudar a la tarea de computación, no porque la definieran.

Entonces, la máquina de Turing no se trata de cómo funcionan las computadoras. Se trata de si un problema es computable o no , es decir, solucionable mediante un proceso lógico / matemático formal. No dice nada acerca de cómo se podría implementar ese proceso. Si es computable, puede ser resuelto por seres humanos con lápices y papel, con tiempo suficiente, o con computadoras o (esto es lo importante) con cualquier sistema que pueda demostrar que está completo .

Entonces, la máquina de Turing hace dos cosas muy importantes:

  1. Proporciona una prueba para la computabilidad de cualquier problema / tarea.
  2. Proporciona una prueba para que cualquier sistema muestre si puede calcular cualquier tarea computable.

El primer punto nos permite pensar en problemas sin distraernos con las implementaciones del mundo real. Esto es bueno porque el hardware real a menudo distrae a las personas con detalles irrelevantes (como "¿qué pasa si nos quedamos sin memoria o espacio de almacenamiento?", Ya que las máquinas de Turing tienen recursos infinitos). Se puede desarrollar una solución teórica demostrable para una máquina de Turing y luego todo lo que alguien tiene que hacer es traducirla en algo que funcione en una arquitectura determinada.

El segundo punto nos permite verificar la capacidad de cualquier implementación sin tener que ejecutar muchas pruebas diferentes. Si puede simular una máquina de Turing, puede hacer cualquier cosa que la máquina de Turing pueda hacer. Dado que Turing Machines puede calcular cualquier cosa computable, también puede hacerlo.

Lo que significa que la relación entre la Máquina de Turing y cualquier arquitectura de computadora genuinamente práctica (incluso las virtuales) es solo una cosa: pueden calcular.

La arquitectura de Von Neumann fue un intento de crear una plantilla de diseño para computadoras digitales electrónicas de propósito general efectivas . El trabajo de Turing proporcionó la prueba de su validez.

itsbruce
fuente
-1

Si lo piensas bien, las arquitecturas son máquinas abstractas. Describen cómo se comporta una masa de silicio cuidadosamente fabricado. La diferencia entre las arquitecturas y las máquinas de Turing es más una cuestión de escala que un cambio fundamental en el enfoque.

La ventaja de las máquinas Turing es que hay un conjunto de pruebas útiles que son muy fáciles de hacer con una máquina Turing. Es simple demostrar que cualquier máquina lo suficientemente potente como para simular una máquina de Turing puede resolver cualquier problema que una máquina de Turing pueda (duh). Sin embargo, se vuelve más interesante cuando define una función Computable . Resulta que hay muchas definiciones compatibles de una función computable. Si puede definir todo su comportamiento como funciones computables, puede simularlo en una máquina de Turing.

Digamos que tiene una arquitectura que admite directamente los programas de estilo LISP, y otra como la x86, que es más procesal. Su amigo afirma que "LISP es más expresivo, por lo que puede escribir programas en esta máquina que nunca podría escribir en su x86". Esto es brutal para contrarrestar (especialmente porque probablemente no conozcas suficiente LISP). Sin embargo, puede abusar de varias máquinas abstractas como la máquina de Turing:

  • Su máquina LISP puede ser elegante, pero todo lo que puede hacer es reducible a cálculo lambda. Tu amigo asiente con entusiasmo. El cálculo de Lambda es una especie de culto para los programadores funcionales.
  • Mi x86 puede ser elegante, pero todo lo que puede hacer es reducible a una máquina de registro. Una vez más, ninguna pregunta de tu amigo. ¡Los registros son TAN buenos en la teoría moderna de la computadora!
  • Cualquier máquina de registro puede modelarse como una máquina de Turing que simula esa máquina de registro. Ahora su amigo se pregunta por qué se remonta a la era de la cinta perforada.
  • Y su máquina de cálculo lambda también puede reducirse a una máquina de Turing. * Tu amigo se opone, pero tú los señalas en la tesis de Church-Turing, y agachan la cabeza avergonzados.
  • ¡Así, mi caja x86 puede hacer cualquier cosa que pueda hacer su elegante máquina basada en LISP!

Hay, por supuesto, muchos otros ejemplos. Se demostró que el Juego de la vida de Conway estaba completo, lo que significa que en teoría podría hacer cualquier cosa que tu computadora pueda hacer. La forma más fácil de hacer esto era construir una máquina de Turing en Life . ¡Traigo esto a colación porque este sería un caso de lo que usted llamó una máquina abstracta siendo tratada como una arquitectura literal! Puedes imaginar lo difícil que sería la afirmación de computabilidad en Life sin la ayuda de modelos abstractos (¡estoy seguro de que no estoy modelando un x64, completo con un vistazo de caché, solo para demostrar que Life es computable!)


Al final, la gran diferencia entre arquitecturas y máquinas abstractas es que las arquitecturas generalmente se preocupan por el rendimiento. Las arquitecturas quieren saber qué tan rápido puedes hacer algo. Las máquinas abstractas tienden a contentarse con solo saber si puedes. Considere el Universal Constructor desarrollado para las máquinas de estado von Neuman. Fue suficiente para demostrar que la UC podía funcionar, sin importar que los autores nunca tuvieran suficiente poder de cómputo para llevarlo a cabo.

El precio que pagan las arquitecturas por demostrar cuán rápido pueden funcionar es que a menudo es terriblemente difícil demostrar que pueden calcular todo . Para eso, las arquitecturas se vuelven y comienzan a usar máquinas abstractas.

Cort Ammon
fuente
1
Sus ejemplos de razonamiento dados no son técnicamente correctos: si declara que una máquina de Turing puede hacer todo lo que una máquina de registro o x86 mahine puede hacer, no necesariamente significa que una máquina x86 puede hacer todo lo que una máquina de registro o una máquina de Turing lata. Como contraejemplo, cualquier autómata finito también puede reducirse a una máquina de Turing, pero claramente no es equivalente al cálculo lambda o LISP. La direccionalidad es importante: si desea indicar "mi caja x86 puede hacer cualquier cosa que pueda hacer su elegante máquina basada en LISP", entonces requeriría una reducción de Turing a x86, no de x86 a Turing.
Peteris