Ho riflettuto un po 'se aggiungere ancora un'altra risposta. Le altre risposte si concentrano sul centro della sua domanda (su "turing complete", "tautology" e così via). Vorrei afferrare la prima e l'ultima parte, e quindi l'immagine più grande e leggermente filosofica:
Ma cosa significa?
Cosa significa essere Turing completo?
Esiste un modo per definire le capacità di Turing Machine senza semplicemente dire "poter simulare un'altra Turing Machine"?
Informalmente parlando, essere Turing completo significa che il tuo meccanismo può eseguire qualsiasi algoritmo a cui potresti pensare, non importa quanto sia complesso, profondo, ricorsivo, complicato, lungo (in termini di codice) e non importa quanto tempo o spazio di archiviazione sarebbe necessario per valutarlo. Va da sé che riesce solo se il problema è calcolabile, ma se è calcolabile, essa sarà successo (arresto).
(NB: per scoprire perché questo è "informale", controlla la tesi di Church-Turing che segue queste linee, con una formulazione più elaborata; essendo una tesi, potrebbe o non potrebbe essere corretta, però. Grazie a @DavidRicherby per sottolineando questa piccola omissione in un commento.)
"Algoritmo" significa ciò che oggi comunemente intendiamo come algoritmo informatico; vale a dire, una serie di passaggi discreti che manipolano l'archiviazione, con una certa logica di controllo mescolata. Tuttavia, non è come una macchina Oracle, cioè non può "indovinare".
Esempio per un linguaggio pratico non-tc
Se hai programmato te stesso, probabilmente conosci espressioni regolari, usate per abbinare le stringhe ad un certo schema.
Questo è un esempio di costrutto che non è Turing Complete. Puoi facilmente trovare esercizi in cui è semplicemente impossibile creare un'espressione regolare che corrisponda a determinate frasi.
Ad esempio (e questo ha sicuramente infastidito molti programmatori in applicazioni reali reali), è teoricamente e praticamente impossibile creare un'espressione regolare che corrisponda a un linguaggio di programmazione o un documento XML: è impossibile per un regexp trovare la struttura a blocchi ( do ... end
o { ... }
nelle lingue; apertura e chiusura dei tag nei documenti XML) se possono essere arbitrariamente profondi. Se esiste un limite, ad esempio puoi avere solo 3 livelli di "ricorsione", quindi potresti trovare un'espressione regolare; ma se non è limitato, allora è un non andare.
Poiché è ovviamente possibile creare un programma in un linguaggio completo di Turing (come C) per analizzare il codice sorgente (qualsiasi compilatore lo fa), le espressioni regolari non saranno mai in grado di simulare detto programma, quindi per definizione non sono Turing complete
Motivazione
L'idea della macchina turing in sé non è nulla di pratico; cioè, Turing certamente non lo ha inventato per creare un vero computer o qualcosa del genere, al contrario di Charles Babbage o von Neumann, per esempio. Il punto di avere il concetto di Turing Machine è che è estremamente semplice. Consiste quasi in nulla. Riduce i computer possibili (e reali) al minimo immaginabile.
Il punto di questa semplificazione, a sua volta, è che ciò rende facile (ish) meditare su questioni teoriche (come fermare i problemi, le classi di complessità e qualunque altra teoria teorica che si preoccupi). Una caratteristica in particolare è che di solito è molto facile verificare se un determinato linguaggio o computer può simulare una Turing Machine semplicemente programmando detta Turing Machine (che è così facile!) In quella lingua.
All'infinito
Nota che non hai mai bisogno di tempo infinito o spazio di archiviazione; ma sia il tempo che lo spazio di archiviazione sono illimitati. Avranno un valore massimo per ogni singola corsa calcolabile, ma non c'è limite alla dimensione di quel valore. Il fatto che un vero computer finirà per esaurire la RAM è evidenziato qui; questo è ovviamente un limite per qualsiasi computer fisico, ma è anche ovvio e privo di interesse per la "potenza di calcolo" teorica della macchina. Inoltre, non ci interessa affatto quanto tempo impiega effettivamente. Quindi la nostra piccola macchina può usare quantità arbitrarie di tempo e spazio, il che la rende assolutamente poco pratica.
... e oltre
Un ultimo punto sorprendente, quindi, è che una cosa così semplice e semplice può fare tutto ciò che un computer reale immaginabile potrebbe mai , in tutto l'universo, realizzare (solo molto più lentamente) - almeno per quanto ne sappiamo oggi.