Chiaro, completo, prova che una lingua è Turing Competere?


10

Ho visto siti web che pretendono di "dimostrare" che HTML5 + CSS è Turing Complete.

Ho visto siti Web che pretendono di "dimostrare" che SQL è Turing Complete.

Ho visto un sacco di siti web che pretendono di "spiegare" cosa significa essere Turing Complete.

Abbastanza!

Dove posso trovare un libro (scritto da un esperto in teoria della calcolabilità) o un articolo peer-reviewed (in una rivista stimabile) che mostra una prova di "Questo linguaggio XYZ è in grado di descrivere una macchina computazionale che ha lo stesso potere computazionale come una macchina di Turing "?


3
Nessun esperto scriverà un documento del genere perché sarebbe inutile.
Andrej Bauer,

Ma ci sono documenti che lo fanno. Considera che i circuiti quasi indifferenti al ritardo sono completi di Turing, che ha una prova di costruzione.
Dan D.

2
Mangerò il mio cappello se riesci a trovare un documento peer-reviewed che ha una prova dettagliata che HTML5 + CSS, SQL o PHP sono Turing completi.
Andrej Bauer,

@andrej prova questo. abbastanza vicino? XSLT versione 2.0 è Turing-Complete: una prova basata esclusivamente sulla trasformazione . forse mangia solo le tue verdure: p
vzn

vedi anche cosa rende completo il turing della lingua , programmers.se
vzn

Risposte:


12

Ogni linguaggio in grado di implementare due contatori (ovvero due registri che possono memorizzare due numeri interi arbitrariamente grandi) e un programma creato con una sequenza etichettata di queste due istruzioni elementari è Turing completo:C1,C2

  • AGGIUNGI al contatore , istruzione GOTO1CiIj
  • SUBTRACT dal contatore se e istruzione GOTO ; altrimenti (se ) istruzione GOTO1CiCi>0IjCi=0Ik

Il risultato è dimostrato in:

Marvin L. Minsky, "Insolvibilità ricorsiva del problema delle etichette post e altri argomenti nella teoria delle macchine di Turing" (1961)

Non dimenticare che un modello computazionale (nel tuo caso un linguaggio di programmazione + un dispositivo che esegue programmi scritti in quel linguaggio ) può essere considerato Turing completo solo se supporta l'accesso a una quantità illimitata di memoria (cioè spazio) o può memorizzare ( in qualche forma) numeri interi arbitrariamente grandi. Un'implementazione del linguaggio di programmazione su un computer reale equivale a un Automaton con limiti lineari .

Puoi anche trovare molti riferimenti nelle pagine di Wikipedia sul modello RAM e sul modello RASP .

Finalmente un bel libro incentrato sull'equivalenza di diversi modelli di calcolo è:

"Modelli di calcolo: un'introduzione alla teoria della calcolabilità", di Maribel Fernandez


"Non dimenticare che un linguaggio di programmazione può essere considerato Turing completo solo se supporta l'accesso alla memoria infinita" Quindi non può esistere un'implementazione di un linguaggio Turing Complete? Questa è la tua conclusione? O volevi dire che tutte (la maggior parte) delle lingue che usiamo sono Turing Complete perché tale requisito è facile da raggiungere? Entrambe le conclusioni sono valide dalla tua risposta, così come è ora.
Bakuriu,


@Bakuriu: in effetti la frase è un po 'ambigua; Intendo solo che un modello computazionale può essere considerato Turing completo se - in qualche modo - consente di utilizzare una memoria illimitata. La maggior parte dei linguaggi di programmazione sono completi di Turing perché nelle loro specifiche (sintassi) non hanno limiti sulla dimensione di variabili o puntatori, ma le loro implementazioni sono limitate; vedere ad esempio <limiti.h> di C. Pertanto, anche se si dispone di un computer con memoria illimitata che esegue un'implementazione in C, non è possibile utilizzare tale memoria se non si fornisce un "meccanismo aggiuntivo" che non fa parte del linguaggio.
Vor

Tecnicamente, le implementazioni del linguaggio di programmazione su computer reali non sono nemmeno una vera incarnazione di automi a limiti lineari, in quanto non possono accettare CSL arbitrari ... per lo stesso motivo per cui i computer non sono equivalenti alle macchine di Turing, vale a dire, non abbastanza memoria. Di quanta memoria avrebbe bisogno una macchina per accettare il linguaggio sensibile al contesto ? Suppongo che potresti obiettare che saresti in grado di risolverlo purché avessi abbastanza spazio per scrivere la domanda, ma ciò non cambia il fatto che non possiamo fare un modello fisico equivalente agli LBA ...{w.ww{0,1}}
Patrick87

3

I due libri di testo più utilizzati sulla computabilità e la teoria della complessità sono:

Michael Sipser: Introduzione alla teoria della computazione , 2 / e, Cengage, 2005.

John E Hopcroft; Jeffrey D Ullman: Introduzione alla teoria degli automi, Lingue e calcoli , Addison-Wesley, 1979.

Esiste anche una bellissima monografia filosofica per i laici che lavora attraverso i dettagli tecnici della teoria della calcolabilità senza le prove formali.

Douglas Hoftstadter: Gödel, Escher, Bach , Libri di base, 1979.

Infine, la migliore introduzione alla calcolabilità potrebbe essere un libro di puzzle di un famoso logico:

Raymond Smullyan: The Lady or the Tiger and Other Logic Puzzles , Penguin, 1983. (Ora in un'edizione economica di Dover, 2009.)

(Inizia con un mucchio di enigmi basati sul paradosso del bugiardo, e poi ti guida attraverso la costruzione di una dichiarazione autoreferenziale sotto forma di un puzzle in stile Sherlock Holmes su una misteriosa scatola chiusa.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.