He estado buscando en la web y estoy encontrando respuestas algo contradictorias. Algunas fuentes afirman que un lenguaje/máquina/lo que-tiene-usted es Turing completo si y solo si tiene tanto ramificación condicional e incondicional (que supongo que es un poco redundante), algunos dicen que solo se requiere incondicional, otros que solo se requiere condicional.¿Es la ramificación condicional un requisito de Turing-completitud?
La lectura sobre la Z3 alemán y ENIAC, Wikipedia dice:
El Z3 Alemán (se muestra hábil de mayo 1941) fue diseñado por Konrad Zuse. Fue fue la primera computadora digital de uso general , pero era electromecánica, en lugar de electrónica, ya que utilizaba relés para todas las funciones . Se calculó lógicamente usando matemática binaria. Fue programable por cinta perforada, pero carecía de la rama condicional . Aunque no se diseñó para Turing-completitud, fue accidentalmente, ya que se descubrió en 1998 (pero para explotar esto Turing-completeness, complex, astutos hacks eran necesarios).
¿Qué complejos, ingeniosos hacks, exactamente?
Un documento de 1998 Resumen de R. Rojas también Unidos (Tenga en cuenta que no he leído este documento, es sólo un fragmento de IEEE.):
La máquina de computación Z3, construido por Konrad Zuse entre 1938 y 1941, solo pudo ejecutar secuencias fijas de operaciones aritméticas de coma flotante (suma, resta, multiplicación, división y raíz cuadrada ) codificadas en una cinta perforada. Una pregunta interesante de , desde el punto de vista de la historia de la informática, es si estas operaciones son o no suficientes para el cálculo universal. El documento muestra que, de hecho, un solo bucle de programa que contiene estas instrucciones aritméticas puede simular cualquier máquina de Turing cuya cinta es de un tamaño finito dado . Esto se hace por simulando la derivación condicional y direccionamiento indirecto por medios aritméticos puramente . Zuse's Z3 es por lo tanto, al menos en principio, como universal, ya que las computadoras de hoy en día que tienen un espacio de direccionamiento limitado.
En resumen, SOers, ¿qué tipo de ramificación se requiere exactamente para Turing-completitud? Suponiendo que la memoria es infinita, ¿puede considerarse un lenguaje con un constructo de ramificación goto
o jmp
(sin construcciones if
o jnz
) como Turing-complete?
Me gusta su respuesta, pero ¿qué sucede cuando la máquina no puede hacer aritmética? ¿O si la máquina recuerda algo a un ZISC? ¡Gracias! –
Defina "aritmética". La definición usual incluiría, como mínimo, suma. La (segunda) máquina Rojas no tiene suma, solo INC (también discute que DEC no es necesario). En cualquier caso, no puedo proporcionar una prueba de que un ZISC sin una instrucción condicional sería o no sería Turing-completo; Yo personalmente creo que no. –
¡Gracias por tu visión! –