Was ist Turing abgeschlossen?

487

Was bedeutet der Ausdruck "Turing Complete"?

Können Sie eine einfache Erklärung geben, ohne auf zu viele theoretische Details einzugehen?

Dlinsin
quelle
2
Einige sehr nette Links zu dieser SO-Frage .
Lazer

Antworten:

324

Hier ist die kürzeste Erklärung:

Ein Turing Complete-System ist ein System, in das ein Programm geschrieben werden kann, das eine Antwort findet (allerdings ohne Garantie für Laufzeit oder Speicher).

Wenn also jemand sagt "mein neues Ding ist Turing Complete", bedeutet dies im Prinzip (obwohl oft nicht in der Praxis), dass es zur Lösung eines Rechenproblems verwendet werden kann.

Manchmal ist es ein Witz ... ein Typ hat einen Turing-Maschinensimulator in vi geschrieben, also kann man sagen, dass vi die einzige Rechenmaschine ist, die jemals auf der Welt benötigt wird.

Mark Harrison
quelle
18
Weitere Informationen finden Sie unter The Annotated Turing. Sehr zugänglich. amazon.com/Annotated-Turing-Through-Historic-Computability/dp/…
i_am_jorf
43
"oft nicht in der Praxis" ist falsch. Kein System ist in der Praxis jemals Turing-vollständig, da kein realisierbares System ein unendliches Band hat. Was wir wirklich meinen, ist, dass einige Systeme die Turing-Vollständigkeit bis an die Grenzen ihres verfügbaren Speichers annähern können.
Shelby Moore III
22
Aber Vi ist die einzige Rechenmaschine, die jemals auf der Welt benötigt wurde ... ;-)
Joe Edgar
4
Ist Emacs auch eine Drehmaschine? XD
alem0lars
6
Jemand hat kürzlich gezeigt, dass PowerPoint auch Turing Complete ist.
Tagc
192

Hier ist die einfachste Erklärung

Alan Turing hat eine Maschine erstellt, die ein Programm aufnehmen, dieses Programm ausführen und einige Ergebnisse anzeigen kann. Aber dann musste er verschiedene Maschinen für verschiedene Programme erstellen. Also schuf er "Universal Turing Machine", die JEDES Programm nehmen und ausführen kann.

Programmiersprachen ähneln diesen Maschinen (obwohl virtuell). Sie nehmen Programme und führen sie aus. Jetzt heißt eine Programmiersprache "Turing abgeschlossen", wenn sie jedes Programm (unabhängig von der Sprache) ausführen kann, das eine Turing-Maschine mit genügend Zeit und Speicher ausführen kann.

Zum Beispiel: Nehmen wir an, es gibt ein Programm, das 10 Zahlen nimmt und diese hinzufügt. Turing Maschine kann dieses Programm leicht ausführen. Stellen Sie sich jetzt vor, dass Ihre Programmiersprache aus irgendeinem Grund nicht dieselbe Addition ausführen kann. Dies würde es "Turing unvollständig" machen (sozusagen). Wenn andererseits ein Programm ausgeführt werden kann, das die universelle Turing-Maschine ausführen kann, ist Turing abgeschlossen.

Die meisten modernen Programmiersprachen (z. B. Java, JavaScript, Perl usw.) sind alle Turing-vollständig, da sie alle Funktionen ausführen, die zum Ausführen von Programmen erforderlich sind, z Daten und so weiter.

Update: Weitere Informationen finden Sie in meinem Blogbeitrag: "JavaScript ist vollständig" - Erklärt

Raja Rao
quelle
5
Die Idee, dass es sogar einen Begriff für diese Art von Maschine geben würde, ist viel sinnvoller, wenn ich mich erinnere, dass Turing und andere frühe Informatiker jedes Mal eine bestimmte Maschine bauten, wenn sie ein bestimmtes Problem lösen wollten. Wir sind an eine Maschine gewöhnt, die für immer neu programmiert werden kann. Danke für den Kontext, Raja.
Jacob Ford
Wie kann JavaScript vollständig sein? Es fehlt das Dateisystem, die richtige Multithreading-API. Es gibt unzählige Einschränkungen, hauptsächlich aufgrund der Sandbox-Natur der Browsersicherheit. Es kann kaum als "Programmiersprache" bezeichnet werden. Sehen Sie, wie viele Varianten der Skriptabstraktion existieren (reagieren, Typoskript ... Sie nennen es), um zu kompensieren, was JS nicht hat. (asm.js sollte hier erwähnt werden). Java, Python oder C ++ sind echte 'Turing Complete'-Beispiele. Aber js? Das glaube ich nicht.
Michael IV
2
@MichaelIV Die Touring-Maschine hatte auch kein Dateisystem / Threads. JS ist absolut komplett auf Tour.
Bax
@MichaelIV Um Bax 'Antwort zu ergänzen, könnte man einen modernen Computer als mehrere Turing-Maschinen betrachten, die zusammenarbeiten, um all die schönen Dinge zu ermöglichen, die Sie erwähnen. Beispielsweise erzeugt die CPU "Band", das die GPU lesen kann, damit sie "Band" für den Monitor schreiben kann, damit der Monitor "Band" in den Benutzer schreiben kann. Ebenso könnte die CPU "Band" für die Festplatten, Netzwerkkarten, Soundkarten usw. produzieren
86

Aus Wikipedia :

Die nach Alan Turing benannte Vollständigkeit von Turing ist insofern von Bedeutung, als jedes plausible Design für ein bisher fortgeschrittenes Computergerät von einer universellen Turing-Maschine emuliert werden kann - eine Beobachtung, die als Church-Turing-These bekannt geworden ist. Somit kann eine Maschine, die als universelle Turingmaschine fungieren kann, im Prinzip jede Berechnung durchführen, die jeder andere programmierbare Computer kann. Dies hat jedoch nichts mit dem Aufwand zu tun, der zum Schreiben eines Programms für die Maschine erforderlich ist, der Zeit, die die Maschine möglicherweise benötigt, um die Berechnung durchzuführen, oder mit den Fähigkeiten der Maschine, die möglicherweise nicht mit der Berechnung zusammenhängen.

Während wirklich Turing-vollständige Maschinen sehr wahrscheinlich physisch unmöglich sind, da sie unbegrenzten Speicherplatz erfordern, wird die Vollständigkeit von Turing häufig lose physischen Maschinen oder Programmiersprachen zugeschrieben, die universell wären, wenn sie unbegrenzten Speicherplatz hätten. Alle modernen Computer sind in diesem Sinne Turing-vollständig.

Ich weiß nicht, wie Sie nicht-technischer sein können, außer wenn Sie sagen: "Vollständig zu sein bedeutet, ein berechenbares Problem zu beantworten, wenn genügend Zeit und Raum vorhanden sind."

Ran Biron
quelle
4
Was ist in diesem Zusammenhang ein "Computergerät"?
Dopatraman
30
Wie bei den meisten Wikipedia-Artikeln bietet dieses Zitat, obwohl es technisch korrekt ist, keinen Wert für eine Person, die keine Kenntnisse zu diesem Thema hat und versucht, es zu verstehen. In der Lage zu sein, Dinge richtig zu erklären, ist eine Wissenschaft für sich :)
Lacho Tomov
76

Informelle Definition

Eine vollständige Turing-Sprache kann jede Berechnung durchführen. Die Church-Turing-These besagt, dass jede durchführbare Berechnung von einer Turing-Maschine durchgeführt werden kann. Eine Turingmaschine ist eine Maschine mit unendlichem Direktzugriffsspeicher und einem endlichen 'Programm', das vorschreibt, wann sie diesen Speicher lesen, schreiben und durchlaufen soll, wann sie mit einem bestimmten Ergebnis enden soll und was sie als nächstes tun soll. Die Eingabe in eine Turing-Maschine wird vor dem Start gespeichert.

Dinge, die eine Sprache NICHT vollständig machen können

Ein Turing - Maschine kann Entscheidungen treffen , auf dem, was sie im Speicher sieht - die ‚Sprache‘ , dass nur unterstützt +, -, *, und /auf ganze Zahlen ist Turing nicht abgeschlossen werden, da es keine andere Wahl aufgrund seiner Eingabe machen, sondern eine Turing - Maschine kann.

Eine Turing-Maschine kann für immer laufen - Wenn wir Java, Javascript oder Python verwenden und die Möglichkeit entfernen würden, Schleifen, GOTOs oder Funktionsaufrufe auszuführen, wäre Turing nicht vollständig, da keine beliebige Berechnung durchgeführt werden kann endet nie. Coq ist ein Theorembeweiser, der keine Programme ausdrücken kann, die nicht beendet werden. Daher ist Turing nicht vollständig.

Eine Turing-Maschine kann unendlichen Speicher verwenden - Eine Sprache, die genau wie Java war, jedoch beendet wurde, wenn mehr als 4 Gigabyte Speicher verwendet wurden, wäre nicht vollständig, da eine Turing-Maschine unendlichen Speicher verwenden kann. Aus diesem Grund können wir keine Turing-Maschine erstellen , aber Java ist immer noch eine vollständige Turing-Sprache, da die Java- Sprache keine Einschränkungen aufweist, die die Verwendung von unendlichem Speicher verhindern. Dies ist einer der Gründe, warum reguläre Ausdrücke nicht vollständig sind.

Eine Turing-Maschine verfügt über Arbeitsspeicher mit wahlfreiem Zugriff - Eine Sprache, mit der Sie nur mit Speicher arbeiten pushund popOperationen an einem Stapel ausführen können, wäre Turing nicht vollständig. Wenn ich eine 'Sprache' habe, die eine Zeichenfolge einmal liest und den Speicher nur durch Drücken und Poppen von einem Stapel verwenden kann, kann sie mir später sagen, ob jede (Zeichenfolge ihre eigene hat ), indem sie drückt, wenn sie sieht, (und knallt, wenn sie sieht ). Es kann mir jedoch nicht sagen, ob jeder später (seinen eigenen hat und jeder später seinen eigenen hat (Hinweis, der diese Kriterien erfüllt, dies aber nicht tut). Eine Turing-Maschine kann ihren Direktzugriffsspeicher verwenden, um die und zu verfolgen)[]([)]([]]()[]ist separat, aber diese Sprache mit nur einem Stapel kann nicht.

Eine Turingmaschine kann jede andere Turingmaschine simulieren - Eine Turingmaschine kann, wenn sie ein geeignetes 'Programm' erhält, das 'Programm' einer anderen Turingmaschine nehmen und es bei beliebiger Eingabe simulieren. Wenn Sie eine Sprache hätten, deren Implementierung eines Python-Interpreters verboten war, wäre Turing nicht vollständig.

Beispiele für Turing komplette Sprachen

Wenn Ihre Sprache über einen unendlichen Direktzugriffsspeicher, eine bedingte Ausführung und eine Form der wiederholten Ausführung verfügt, ist sie wahrscheinlich vollständig. Es gibt exotischere Systeme, die immer noch alles erreichen können, was eine Turing-Maschine kann, was sie auch komplett macht:

  • Untypisierter Lambda-Kalkül
  • Conways Spiel des Lebens
  • C ++ - Vorlagen
  • Prolog
Gordon Gustafson
quelle
11
SQL ist definitiv vollständig. Es verfügt über Skriptfunktionen, die jede Berechnung ermöglichen.
Nzifnab
53
Nein, Sie verwechseln SQL mit Erweiterungen wie T-SQL / PL-SQL. ANSI SQL ist nicht vollständig. Aber TSQL / PLSQL - ist.
Agnius Vasiliauskas
15
Anscheinend ist SQL vollständig: stackoverflow.com/questions/900055/…
Newtang
2
Entsprechend der Vollständigkeit der Turing-Systeme ist das Turing-System vollständig, wenn es zur Simulation einer Turing-Maschine mit einem Klebeband verwendet werden kann. Aber im obigen Beispiel, wie ich verstanden habe, konstruierten Entwickler bestimmte cyclic tag systemund nicht universal cyclic tag system. Daher beweist der Artikel nicht die Vollständigkeit der SQL-Prüfung. (Oder ich habe etwas falsch verstanden)
Agnius Vasiliauskas
2
Es gibt keine realisierbare Implementierung einer Turing-vollständigen Sprache, da es keine unendlichen Bänder gibt. Was wir wirklich meinen, ist, dass einige Sprachen die Turing-Vollständigkeit bis an die Grenzen des verfügbaren Speichers des Host-Computers annähern können.
Shelby Moore III
17

Grundsätzlich ist die Vollständigkeit von Turing eine kurze Voraussetzung, eine unbegrenzte Rekursion.

Nicht einmal an die Erinnerung gebunden.

Ich habe unabhängig darüber nachgedacht, aber hier ist eine Diskussion der Behauptung. Meine Definition von LSP bietet mehr Kontext.

Die anderen Antworten hier definieren nicht direkt das grundlegende Wesen der Turing-Vollständigkeit.

Shelby Moore III
quelle
Endliche Automaten dürfen eine unbegrenzte Rekursion haben. Ein typisches Beispiel : a*.
3
@ Rhymoid-FSMs haben einen begrenzten Speicher (die endliche Anzahl von Zuständen), aber eine unbegrenzte Rekursion ohne Schwanzoptimierung muss einen unbegrenzten Speicher haben. Ich habe meine Definition nicht nur mit der Endoptimierung auf die Teilmenge der unbegrenzten Rekursion beschränkt. Bitte entfernen Sie Ihre Ablehnung.
Shelby Moore III
Sie haben die Definition der unbegrenzten Rekursion neblig gehalten. Meinen Sie "Rekursion" im Sinne der "primitiven Rekursion" und "unbegrenzt", indem Sie sie "partiell" (oder "allgemein" oder "mu-") machen? Dann haben Sie vielleicht recht. Ihre derzeitige Formulierung kommt jedoch den in David Harels "On Folk Theorems" kritisierten Aussagen viel zu nahe. Es ist wichtig, in der Mathematik streng zu sein, und wenn Sie genaue Definitionen weglassen, ignorieren Sie dies. Übrigens: FSMs können verallgemeinert werden, um die Interaktion zu modellieren. Was sie von TMs unterscheidet, ist, dass deren Umgebung ebenfalls modelliert wird (als Band).
@ Rhymoid-Aufzählung ist das Gegenteil von Präzision, z. B. Aufzählung der maximalen Präzision der Bruchteile eines Zolls. Ungebundene Rekursion bedeutet jede mögliche Form der Rekursion, die ohne ein unendliches Band nicht möglich ist. Eine vollständig verallgemeinerte Rekursion (nicht nur allgemein innerhalb des Modells) ist immer Turing-vollständig. Ich erkläre die Gleichwertigkeit zwischen generalisierter Rekursion und der Fähigkeit, mögliche Berechnungen durchzuführen. Das ist eine wichtige Äquivalenz.
Shelby Moore III
"Ungebundene Rekursion bedeutet jede mögliche Form der Rekursion" Das ist Ihre Lesart. Für die meisten SO-Benutzer bedeutet "unbegrenzte Rekursion" while (p) { /* ... */ }. "Ich stelle die Äquivalenz zwischen generalisierter Rekursion und der Fähigkeit zur Durchführung möglicher Berechnungen fest." Die These der Kirche ist eine ganz andere Sache und sollte wirklich separat diskutiert werden.
13

Turing Complete bedeutet, dass es mindestens so leistungsstark ist wie eine Turing-Maschine . Dies bedeutet, dass alles, was von einer Turing-Maschine berechnet werden kann, von einem Turing-Komplettsystem berechnet werden kann.

Niemand hat bisher ein System gefunden, das leistungsfähiger ist als eine Turingmaschine. Die Aussage, dass ein System Turing Complete ist, ist vorerst dasselbe wie die Aussage, dass das System genauso leistungsfähig ist wie jedes bekannte Computersystem (siehe Church-Turing-These ).

Waylon Flinn
quelle
3
Beachten Sie, dass bei alledem die Wandzeit nicht berücksichtigt wird. Es heißt nur "es kann getan werden".
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen ignoriert tatsächlich die physikalische Berechenbarkeit insgesamt. Es könnte nicht nur länger dauern als das Alter des Universums, sondern es könnte auch mehr Speicher verbrauchen, als mit allen Fermionen und Bosonen im Universum konstruiert werden kann.
Waylon Flinn
Möglicherweise gibt es keine Begrenzung für die Anzahl der Bosonen und Fermionen im Universum. Wir wissen es nicht und werden es wahrscheinlich nie erfahren, es ist Größe. Jedes Mal, wenn Sie über die Anzahl von X im Universum lesen, sprechen die Leute tatsächlich über das beobachtbare Universum. Obwohl interessant, ist es keine tatsächliche physikalische Grenze.
Stijn de Witt
9

Im einfachsten Sinne kann ein Turing-Komplettsystem jedes mögliche Rechenproblem lösen.

Eine der Hauptanforderungen ist, dass die Größe des Notizblocks unbegrenzt ist und dass ein Rücklauf möglich ist, um auf vorherige Schreibvorgänge auf dem Notizblock zuzugreifen.

Somit ist in der Praxis kein System Turing-vollständig.

Vielmehr nähern sich einige Systeme der Turing-Vollständigkeit an, indem sie unbegrenzten Speicher modellieren und mögliche Berechnungen durchführen, die in den Speicher des Systems passen.

Shelby Moore III
quelle
2

Ich denke, die Bedeutung des Konzepts "Turing Complete" liegt in der Fähigkeit, eine Rechenmaschine (nicht unbedingt einen mechanischen / elektrischen "Computer") zu identifizieren, deren Prozesse in "einfache" Anweisungen zerlegt werden können, die aus einfacheren und einfacheren bestehen Anweisungen, die eine Universalmaschine interpretieren und dann ausführen könnte.

Ich kann The Annotated Turing nur empfehlen

@ Mark Ich denke, was Sie erklären, ist eine Mischung aus der Beschreibung der Universal Turing Machine und Turing Complete.

Etwas, das im praktischen Sinne Turing Complete ist, wäre eine Maschine / ein Prozess / eine Berechnung, die / der als Programm geschrieben und dargestellt werden kann und von einer Universalmaschine (einem Desktop-Computer) ausgeführt werden kann. Allerdings wird weder Zeit noch Speicher berücksichtigt, wie von anderen erwähnt.

Brian Leahy
quelle
2

Was ich in einfachen Worten verstehe:

Turing abgeschlossen: Eine Programmiersprache / ein Programm, das Berechnungen durchführen kann, ist Turing abgeschlossen.

Beispielsweise :

  1. Können Sie zwei Zahlen verwenden Fügen Sie einfach HTML . (Ans ist ' Nein ', Sie müssen Javascript verwenden, um das Hinzufügen durchzuführen.) Daher ist HTML nicht vollständig.

  2. Sprachen wie Java, C ++, Python, Javascript, Solidity for Ethereum usw. sind Turing Complete, da Sie mit diesen Sprachen Berechnungen wie das Hinzufügen von zwei Zahlen durchführen können.

Hoffe das hilft.

Shirish Singh
quelle
0

Es ist vollständig, wenn es testen und verzweigen kann (hat ein 'wenn')

Allan Wrobel
quelle
1
Bei solch einer alten Frage lohnt es sich zu prüfen, ob andere bereits ähnliche oder substanziellere Beiträge geleistet haben
Alan Ocallaghan,
Ich bin mir nicht sicher, ob die Antwort richtig ist. Aber das ist wirklich eine einfache Erklärung, die ich noch nie gesehen habe. Lustige Sache: Vor langer, langer Zeit (nachdem ich meinen ersten Code geschrieben habe) habe ich dieselbe Erklärung auch verwendet, um den einfachsten Prozessor zu definieren, der möglich ist.
Victor Yarema
Es ist ein ausgezeichneter erster Versuch einer prägnanten, präzisen und genauen operativen Definition. Die Verzweigung muss jedoch eine Schleife zulassen, und ist es nicht so, dass die Maschine auch Unterprogrammaufrufe zulassen muss (dh: Rekursion)? Gibt es für jedes Programm mit Rekursion ein abgeflachtes Programm verschachtelter Schleifen?
user3673
0

Eine Turingmaschine erfordert, dass jedes Programm Zustandstests durchführen kann. Das ist grundlegend.

Betrachten Sie einen Player Piano Roll. Das Player Piano kann ein sehr kompliziertes Musikstück spielen, aber es gibt niemals eine bedingte Logik in der Musik. Es ist Turing abgeschlossen.

Bedingte Logik ist sowohl die Leistung als auch die Gefahr einer Maschine, die Turing Complete ist.

Die Pianorolle wird garantiert jedes Mal angehalten. Es gibt keine solche Garantie für ein TM. Dies wird als "Halteproblem" bezeichnet.

Richard Riehle
quelle
-1

Wie Waylon Flinn sagte :

Turing Complete bedeutet, dass es mindestens so leistungsstark ist wie eine Turing-Maschine.

Ich glaube, das ist falsch, ein System ist Turing vollständig, wenn es genau so leistungsfähig ist wie die Turing-Maschine, dh jede von der Maschine durchgeführte Berechnung kann vom System durchgeführt werden, aber auch jede vom System durchgeführte Berechnung kann von der Turing-Maschine durchgeführt werden .

ChrisC
quelle
1
Ich denke, Sie gehen davon aus, dass die These von Church-Turing wahr ist, um zu dieser Schlussfolgerung zu gelangen. Es muss noch bewiesen werden. Die Eigenschaft, die Sie beschreiben, heißt "Turing Equivalent".
Waylon Flinn
1
@WaylonFlinn Nein, er hat recht. "Vollständigkeit" bedeutet beides, dass es mindestens so stark ist wie eine Sache, aber auch nicht stärker. Vergleiche mit "NP-Complete".
Devin Jeanpierre
3
@DevinJeanpierre Ich möchte hier keinen Flammenkrieg beginnen, aber ich bin mir fast sicher, dass die von Ihnen beschriebene Rechenklasse "Turing Equivalent" heißt. Turing Complete hat jedoch eine ähnliche Beziehung zu NP-Complete. NP-Complete ist genau dann gleich NP, wenn P = NP ist. In gleicher Weise ist Turing Complete genau dann gleich Turing Equivalent, wenn die These von Church-Turing korrekt ist.
Waylon Flinn
@ Wayne Quelle? Nichts, was ich lese, stimmt damit überein (z. B. en.wikipedia.org/wiki/Turing_completeness )
Devin Jeanpierre
4
@DevinJeanpierre Es steht genau dort in dem Wikipedia-Artikel, auf den Sie verlinken. Zitat aus dem Abschnitt Formale Definitionen: "Ein Rechensystem, das jede Turing-berechenbare Funktion berechnen kann, heißt Turing-vollständig", "Ein Turing-vollständiges System heißt Turing-Äquivalent, wenn jede Funktion, die es berechnen kann, auch Turing-berechenbar ist"
Waylon Flinn
-2

In praktischen Sprachbegriffen, die den meisten Programmierern bekannt sind, besteht die übliche Methode zur Erkennung der Turing-Vollständigkeit darin, dass die Sprache die Simulation verschachtelter unbegrenzter while-Anweisungen zulässt oder zulässt (im Gegensatz zum Pascal-Stil für Anweisungen mit festen Obergrenzen).

Keith Douglas
quelle
1
Eine einzige unbegrenzte while-Schleife reicht aus, um eine Turing-Maschine zu simulieren.
Masterxilo
-8

Kann eine relationale Datenbank Breiten- und Längengrade von Orten und Straßen eingeben und den kürzesten Weg zwischen ihnen berechnen - nein. Dies ist ein Problem, das zeigt, dass SQL nicht vollständig ist.

Aber C ++ kann es und kann jedes Problem lösen. So ist es.

Akshay Jain
quelle
10
In der Lage zu sein, den kürzesten Weg zwischen Punkten zu berechnen, ist nicht die Definition von Turing vollständig. Es steckt so viel mehr dahinter als nur dieses eine Beispiel.
Eva
1
Ich werde dies nur hier setzen ... hansolav.net/blog/ImplementingDijkstrasAlgorithmUsingTSQL.aspx
Matthew Whited