Ho cercato sul web e trovo risposte un po 'contraddittorie. Alcune fonti affermano che una lingua/macchina/cosa-hai-tu è Turing completa se e solo se ha entrambe le diramazioni condizionali e incondizionate (che credo sia ridondante), alcuni dicono che è richiesto solo incondizionato, altri che è richiesto solo un condizionale.La ramificazione condizionale è un requisito della completezza di Turing?
Leggendo il tedesco Z3 e ENIAC, Wikipedia dice:
La Z3 tedesca (mostrato a lavorare maggio 1941) creata da Konrad Zuse. Esso stato il primo general-purpose digitale calcolatore, ma era elettromeccanico, anziché elettronico, come un tempo relè per tutte funzioni. Calcolato logicamente usando la matematica binario . Era programmabile tramite il nastro perforato , ma mancava del ramo condizionale . Sebbene non sia stato progettato per la completezza di Turing, lo è stato accidentalmente, come è stato scoperto nel 1998 (ma per sfruttare questo Turing-completezza, erano necessari gli hacker complessi ).
Quali hack complessi, intelligenti, esattamente?
Un 1998 Documento astratto di R. Rojas afferma anche (Si noti che non ho letto questo documento, è solo un frammento da IEEE.):
La macchina di calcolo Z3, costruito da Konrad Zuse tra il 1938 e il 1941, operazioni aritmetiche in virgola mobile operazioni di aritmetica in virgola mobile (addizione, sottrazione, radice) moltiplicazione, divisione e radice quadrata ) codificate in un nastro perforato. Una domanda interessante da porre, dal punto di vista della storia dell'informatica, è se queste operazioni sono o meno sufficienti per il calcolo universale. Il documento mostra che, in effetti, un loop di programma singolo contenente queste istruzioni aritmetiche può simulare qualsiasi macchina di Turing il cui nastro è di tipo con dimensioni finite. Questo è fatto da simulando la ramificazione condizionale e l'indirizzamento indiretto con mezzi aritmetici puramente . Z3 di Zuse è quindi, almeno in linea di principio, come universale come i computer di oggi che hanno uno spazio di indirizzamento limitato.
In breve, SOers, quale tipo di diramazione è esattamente richiesto per la completezza della Turing? Supponendo che la memoria infinita, una lingua con solo un goto
o jmp
ramo di costruzione (no if
o jnz
costrutti) essere considerato Turing-completo?
Mi piace la tua risposta, ma cosa succede quando la macchina non può fare aritmetica? O se la macchina ricorda in qualche modo uno ZISC? Grazie! –
Definire "aritmetico". La definizione usuale dovrebbe, come minimo, includere l'aggiunta. La (seconda) macchina Rojas non ha aggiunta, solo INC (discute anche che DEC non è necessario). In ogni caso, non posso fornire una prova che uno ZISC senza un'istruzione condizionale sarebbe o non sarebbe completo da Turing; Personalmente credo che non lo sarebbe. –
Grazie per l'intuizione! –