¿Claro, completo, prueba de que un idioma es Turing Compete?

10

He visto sitios web que pretenden "probar" que HTML5 + CSS es Turing Complete.

He visto sitios web que pretenden "probar" que SQL está Turing completo.

He visto un montón de sitios web que pretenden "explicar" lo que significa ser Turing completo.

¡Suficiente!

¿Dónde puedo encontrar un libro? como una máquina de Turing "?

Roger Costello
fuente
3
Ningún experto va a escribir un artículo así porque sería inútil.
Andrej Bauer
Pero hay documentos que hacen eso. Tenga en cuenta que los circuitos insensibles a cuasi retardo son Turing completos, lo que tiene una prueba por construcción.
Dan D.
2
Me comeré el sombrero si puedes encontrar un artículo revisado por pares que tenga una prueba detallada de que HTML5 + CSS, SQL o PHP están completos.
Andrej Bauer
@andrej prueba este. ¿suficientemente cerca? XSLT versión 2.0 es Turing-Complete: una prueba basada puramente en transformación . tal vez solo coma sus verduras: p
vzn
vea también lo que hace que un lenguaje se complete , programmers.se
vzn

Respuestas:

12

Cada lenguaje que puede implementar dos contadores (es decir, dos registros que pueden almacenar dos enteros arbitrariamente grandes) y un programa hecho con una secuencia etiquetada de estas dos instrucciones elementales es Turing completo:C1,C2

  • AGREGAR para contrarrestar , instrucción GOTOC i I j1CiIj
  • Sustrato del contador si y la instrucción GOTO ; de lo contrario (si ) instrucción GOTOC i C i > 0 I j C i = 0 I k1CiCi>0IjCi=0Ik

El resultado se demuestra en:

Marvin L. Minsky, "La indisolución recursiva del problema de la etiqueta de Post y otros temas en la teoría de las máquinas de Turing" (1961)

No olvide que un modelo computacional (en su caso, un lenguaje de programación + un dispositivo que ejecuta programas escritos en ese lenguaje ) puede considerarse Turing completo solo si admite el acceso a una cantidad ilimitada de memoria (es decir, espacio) o puede almacenar ( en alguna forma) enteros arbitrariamente grandes. Una implementación de lenguaje de programación en una computadora real es equivalente a un autómata lineal .

También puede encontrar muchas referencias en las páginas de Wikipedia sobre el modelo RAM y el modelo RASP .

Finalmente un buen libro enfocado en la equivalencia de diferentes modelos de computación es:

"Modelos de computación: una introducción a la teoría de la computabilidad", por Maribel Fernández

Vor
fuente
"No olvide que un lenguaje de programación puede considerarse Turing completo solo si admite el acceso a memoria infinita" ¿Por lo tanto, no puede existir una implementación de un lenguaje Turing Complete? ¿Es esta tu conclusión? ¿O quería decir que todos (la mayoría) de los idiomas que utilizamos son Turing Complete porque ese requisito es fácil de lograr? Ambas conclusiones son válidas a partir de su respuesta, tal como está ahora.
Bakuriu
@Bakuriu: de hecho, la oración es un poco ambigua; Solo quiero decir que un modelo computacional puede considerarse Turing completo si, de alguna forma, permite usar un almacenamiento ilimitado. La mayoría de los lenguajes de programación son Turing completos porque en sus especificaciones (sintaxis) no tienen límites en el tamaño de las variables o punteros, pero sus implementaciones son limitadas; véanse, por ejemplo, los <límites.h> de C. Entonces, incluso si tiene una computadora con memoria ilimitada que ejecuta una implementación en C, no puede usar esa memoria a menos que proporcione un "mecanismo adicional" que no sea parte del lenguaje.
Vor
Técnicamente, las implementaciones de lenguaje de programación en computadoras reales ni siquiera son una verdadera encarnación de autómatas con límites lineales, ya que no pueden aceptar CSL arbitrarias ... por la misma razón, las computadoras no son equivalentes a las máquinas de Turing, es decir, no son suficientes memoria. ¿Cuánta memoria necesitaría una máquina para aceptar el lenguaje sensible al contexto ? Supongo que podría objetar que podría resolverlo siempre que tenga suficiente espacio para escribir la pregunta, pero eso no cambia el hecho de que no podemos hacer un modelo físico equivalente a los LBA ...{w.ww{0,1}}
Patrick87
3

Los dos libros de texto más utilizados sobre computabilidad y teoría de la complejidad son:

Michael Sipser: Introducción a la teoría de la computación , 2 / e, Cengage, 2005.

John E Hopcroft; Jeffrey D Ullman: Introducción a la teoría de autómatas, idiomas y computación , Addison-Wesley, 1979.

También hay una hermosa monografía de filosofía para laicos que trabaja a través de los detalles técnicos de la teoría de la computabilidad sin las pruebas formales.

Douglas Hoftstadter: Gödel, Escher, Bach , Basic Books, 1979.

Finalmente, la mejor introducción a la computabilidad puede ser un libro de rompecabezas de un lógico famoso:

Raymond Smullyan: The Lady or the Tiger and Other Logic Puzzles , Penguin, 1983. (Ahora en una edición económica de Dover, 2009.)

(Comienza con un montón de acertijos basados ​​en la paradoja del mentiroso, y luego te ayuda a construir una declaración autorreferencial bajo la apariencia de un rompecabezas al estilo de Sherlock Holmes sobre una misteriosa caja cerrada).

Lógica Errante
fuente