Cosa significa essere Turing completo?


34

Vedo che la maggior parte delle definizioni di ciò che deve essere completo di Turing sono tautologiche in una certa misura. Ad esempio, se Google "cosa significa essere Turing completo", ottieni:

Un computer è Turing completo se può risolvere qualsiasi problema che una macchina Turing può ...

Sebbene sia ben definito se i diversi sistemi sono completi o meno di Turing, non ho visto una spiegazione di quali siano le implicazioni / conseguenze dell'essere completo di Turing.

Cosa può fare una macchina Turing laddove non esiste una macchina non Turing in grado di svolgere lo stesso compito? Ad esempio un computer può eseguire semplici calcoli come (1+5)/3=?, ma può farlo anche una normale calcolatrice, che non è completa se ho ragione.

Esiste un modo per definire le capacità di Turing Machine senza semplicemente dire "poter simulare un'altra Turing Machine"?


31
Cerca la definizione di "turing machine". Non esiste una definizione circolare, dal momento che una macchina turing non è definita come "essere in grado di simulare un'altra macchina turing" - è un computer teorico completamente progettato (fondamentalmente, una macchina a stati nastro infinita). Stai solo mescolando "turing-complete" e "turing machine". Per quanto ne so, non conosciamo ancora alcun algoritmo che non possa essere eseguito su una macchina da turismo, ma potrebbe essere solo la mia ignoranza.
Luaan,

2
@Luaan La tesi di Church-Turing sarebbe d'accordo con te.
Brian McCutchon,

"Esiste un modo per definire le capacità di Turing Machine". Sicuro. La teoria analizza la quantità di spazio e tempo necessaria per risolvere gli algoritmi con le macchine di Turing (L, NL, P, NP, PSPACE, ecc.) E ci sono anche problemi che non possono essere risolti (che di solito possono essere risolti con riduzioni a altri problemi irrisolvibili). Un esempio di un problema che non può essere risolto dalle macchine di Turing è il problema di arresto.
Millie Smith

Quando si tratta della teoria CS (o di qualsiasi altra), è sempre meglio leggere un libro sull'argomento piuttosto che cercarlo su Google e leggere alcuni post di blog sull'argomento che, in molti casi, sono scritti da persone che non comprendono appieno l'argomento loro stessi. Un buon libro ti farà risparmiare tempo, ti darà un'immagine più ampia e una migliore comprensione.
Bozidar Sikanjic,

La funzione di Ackermann è un esempio importante di qualcosa che una macchina di Turing può calcolare, ma un modello di calcolo più limitato ( ricorsione primitiva ) non può.
zwol,

Risposte:


13

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 ... endo { ... }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.


"In termini informali, essere Turing completo significa che il tuo meccanismo può eseguire qualsiasi algoritmo a cui potresti pensare" Bene, ciò si basa sull'accettazione della tesi di Church-Turing, che afferma che le macchine Turing possono implementare qualsiasi algoritmo a cui riesci a pensare. Oppure, in alternativa, potresti prendere le macchine di Turing come definizione di algoritmo, nel qual caso la dichiarazione informale è solo una versione informale di "può simulare qualsiasi macchina di Turing" (che non è una brutta cosa; solo un'osservazione).
David Richerby,

La mia impressione è stata che il PO chieda una comprensione intuitiva di cosa significhi essere completi. Quindi, questo tipo di risposta irriverente, non teorica, informatica. Grazie per averlo sottolineato, lo integrerò nella risposta. @DavidRicherby
AnoE

Grazie! Questo è il tipo di risposta che stavo cercando. Stavo pensando al problema dell'arresto, e al modo in cui le lingue con semplici cicli limitati sono prevedibili (si fermano sempre) - e quindi non-Turing complete. Pensavo che forse essere Turing completo significhi essere potenzialmente imprevedibile in qualche modo (è caotico il termine giusto per quelle funzioni?)
sashoalm

@sashoalm, felice che ti piaccia la risposta. No, l'imprevedibilità non tiene davvero conto del problema. Anche il for-loop associato (come non-tc) è un buon esempio. In effetti, un altro buon esempio per un linguaggio tc semplice (e più reale) sarebbe quello che ha solo variabili e (illimitato) while- che è già abbastanza per essere tc. Il (un) limite della struttura di controllo è uno degli elementi chiave.
AnoE

38

Non è affatto tautologico.

Un modello di calcolo è Turing completo se può simulare tutte le macchine Turing, cioè è almeno potente quanto le macchine Turing.

Una cosa che le macchine di Turing possono fare è simulare altre macchine di Turing (tramite la macchina di Turing universale). Ciò significa che, se il tuo modello di calcolo non può simulare le macchine di Turing, non può fare almeno una cosa che le macchine di Turing possono fare, quindi non soddisfa la definizione, quindi non è completa di Turing. Non c'è circolarità perché non abbiamo definito la completezza di Turing in termini di se stessa: abbiamo detto che la completezza di Turing è la proprietà di poter fare tutto ciò che le macchine di Turing possono fare.

ab

Esiste un modo per definire le capacità di Turing Machine senza semplicemente dire "poter simulare un'altra Turing Machine"?

Non sono sicuro di cosa intendi per "definire le capacità delle macchine di Turing". Le capacità sono definite in termini di automa a stati finiti che opera sul nastro infinito. (Non ripeterò la definizione completa ma è possibile trovarla, ad esempio, su Wikipedia .)


19
Penso che OP mischia Turing machine e Turing complete. Quello che sta effettivamente cercando è la definizione di una macchina di Turing; la tua ultima frase è la risposta. en.wikipedia.org/wiki/Turing_machine sarebbe d'aiuto.
JollyJoker

Cosa può fare una macchina di Turing? Come nel caso, se volessi dimostrare che qualcosa può emulare una macchina di Turing, quale serie minima di comportamenti devo essere in grado di dimostrare che anche la mia macchina può fare?
Akshat Mahajan,

2
Non importa - ho capito che è sufficiente dimostrare che una lingua può imitare il modo in cui una macchina di Turing funziona per dimostrare che è completa di Turing.
Akshat Mahajan

17

Il modello di calcolo di Turing è solo uno dei molti modelli equivalenti di calcolo. Ha lo stesso potere delle funzioni ricorsive di Gödel e del calcolo lambda di Church, proposti nello stesso periodo, così come altri modelli come la macchina puntatore. Puoi quindi affermarlo

Un computer è Turing completo se può risolvere qualsiasi problema che Excel può fare.

Funziona poiché Excel è anche Turing-completo. Consiglio di dare un'occhiata alla pagina di Wikipedia sulla tesi di Church-Turing e ad un documento di indagine di Blass e Gurevich, Algorithms: A Quest for Absolute Definitions .


Per quanto riguarda la tua domanda, cosa può fare una macchina Turing che una macchina non Turing non può fare, in generale la risposta purtroppo dipende dalla macchina non Turing.

È possibile, tuttavia, definire nozioni non banali di problemi di Turing-complete, ad esempio:

LAfaAf(a)L

In base a questa definizione, le codifiche appropriate del problema di arresto sono Turing complete, quindi per una classe ragionevole di macchine (a seconda della definizione di "calcolabile in modo efficiente"), la macchina è Turing completa se può realizzarne alcune (equivalentemente, tutte ) Lingua completa di Turing.

Ci sono molti altri problemi completi di Turing colti da questo formalismo, a seconda della definizione di "calcolabile in modo efficiente", come il problema della corrispondenza di Turing e problemi riguardanti le tessere Wang e il Gioco della vita. Ognuno di questi problemi può fungere da punto di riferimento invece del problema di arresto.


"la risposta purtroppo dipende dalla macchina non-Turing" - Ho modificato la mia domanda perché non era chiara. È possibile scegliere qualsiasi macchina non Turing, purché possa eseguire l'attività rimanendo non Turing completa.
sashoalm,

5
Excel is also Turing-complete.- solo se puoi dare a Excel memoria infinita. Excel è limitato a 1.048.576 righe e 16.384 colonne, il che è quasi infinito.
MattClarke

5
@MattClarke: Vero, ma per lo stesso motivo nessun sistema mai costruito è Turing completo.
Emil,

3
@Emil: esattamente, ed è importante che gli studenti di CS distinguano tra le capacità dei modelli di calcolo e le capacità delle macchine reali. Quelli di noi che hanno ripetutamente colpito i limiti fisici delle nostre macchine reali trovano questa distinzione facile da fare, ovviamente. Quindi sappiamo in qualche modo come definiremmo una versione senza restrizioni del modello di calcolo di Excel e che sarebbe Turing completo. Anche se in realtà scrivere quella definizione è un po 'complicato.
Steve Jessop,

4
@SteveJessop Limiti fisici delle macchine? Come si può colpire una cosa del genere? 640k è abbastanza per chiunque!
David Richerby,

4

Innanzi tutto desidero sottolineare che la definizione di completezza di Turing non è affatto tautologica. Non solo dimostrare un modello computazionale Turing-complete è di per sé un risultato interessante, ma consente anche di estendere immediatamente tutti i risultati dalla teoria della computabilità a questo altro modello computazionale; per esempio: le macchine a 2 contatori sono complete di Turing, le macchine a Turing non sono in grado di risolvere il problema di arresto, quindi né le macchine a 2 contatori possono farlo.

μ

Tale classe incorpora quelle funzioni che sono "intuitivamente calcolabili", vale a dire quale calcolo potrebbe essere eseguito da un essere umano seguendo un preciso algoritmo con carta e matita.

Ovviamente "calcolabile intuitivamente" non è in realtà una definizione formale, l'identificazione di "calcolabile intuitivamente" con "calcolabile di Turing" è nota come tesi di Church-Turing. Poiché molti tentativi formali di caratterizzare la calcolabilità alla fine convergono in un modello computazionale che è completo di Turing, sebbene non ci sarà mai una prova formale di tale affermazione in senso matematico, ci sono forti ragioni per crederlo.


0

Una macchina di Turing ha la possibilità di calcolare lo stesso insieme di funzioni di un computer quantistico universale, che può simulare qualsiasi sistema fisico:

https://www.cs.princeton.edu/courses/archive/fall04/cos576/papers/deutsch85.pdf

Come tale, una macchina di Turing è in grado di eseguire qualsiasi elaborazione di informazioni consentita dalle leggi della fisica, anche se non sempre eseguirà tale elaborazione nel modo più efficiente possibile.

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.