Vollständigkeit von Turing

In der Berechenbarkeitstheorie, wie man sagt, ist ein System von Datenmanipulationsregeln (wie ein Befehlssatz, eine Programmiersprache oder ein Zellautomat) Turing abgeschlossen oder rechenbetont universal, wenn, und nur wenn es verwendet werden kann, um jede einzeln gebundene Maschine von Turing und so im Prinzip jeden Computer vorzutäuschen. Ein klassisches Beispiel ist die Lambda-Rechnung. Das Konzept wird nach Alan Turing genannt.

Berechenbarkeitstheorie schließt das nah zusammenhängende Konzept der Gleichwertigkeit von Turing ein. Zwei Computer P und Q werden gleichwertigen Turing genannt, wenn P Q vortäuschen kann und Q P vortäuschen kann. So ist ein Turing-ganzes System dasjenige, das eine Maschine von Turing vortäuschen kann; und, pro Kirch-Turing-These, dass jeder wirkliche Computer durch eine Maschine von Turing vorgetäuscht werden kann, ist es zu einer Maschine von Turing gleichwertiger Turing.

Im umgangssprachlichen Gebrauch werden die Begriffe "ganzer von Turing" oder "gleichwertiger Turing" gebraucht, um zu bedeuten, dass jede wirkliche Mehrzweckcomputer- oder Computersprache jede andere wirkliche Mehrzweckcomputer- oder Computersprache innerhalb der Grenzen des begrenzten Gedächtnisses ungefähr vortäuschen kann - sind sie geradliniger begrenzter abgeschlossener Automat. Ein universaler Computer wird als ein Gerät mit Turing ganzer Befehlssatz, unendliches Gedächtnis und eine unendliche Lebensspanne definiert; alle allgemeinen Zweck-Programmiersprachen und moderne Maschinenbefehlssätze sind Turing abgeschlossen, abgesondert davon begrenztes Gedächtnis zu haben.

In der Praxis bedeutet Vollständigkeit von Turing, dass die Regeln, die in der Folge auf willkürlichen Daten gefolgt sind, das Ergebnis jeder Berechnung erzeugen können. Auf Verfahrenssprachen kann das zufrieden sein, indem es, an einem Minimum, das bedingte Ausbreiten (z.B, "wenn" und "goto" Behauptung) und die Fähigkeit gehabt wird, willkürliche Speicherpositionen (z.B zu ändern, Variablen habend). Um zu zeigen, dass etwas abgeschlossener Turing ist, ist es genug zu zeigen, dass es verwendet werden kann, um den primitivsten Computer vorzutäuschen, da sogar der einfachste Computer verwendet werden kann, um den am meisten komplizierten vorzutäuschen.

Formelle Definitionen

In der Berechenbarkeitstheorie werden mehrere nah zusammenhängende Begriffe gebraucht, um die rechenbetonte Macht eines rechenbetonten Systems (wie eine abstrakte Maschine oder Programmiersprache) zu beschreiben:

Vollständigkeit von Turing

:A rechenbetontes System, das jede Turing-berechenbare Funktion schätzen kann, wird Turing abgeschlossen (oder Turing mächtig) genannt. Wechselweise ist solch ein System dasjenige, das eine universale Maschine von Turing vortäuschen kann.

Gleichwertigkeit von Turing

:A Turing-ganzes System wird gleichwertigen Turing genannt, wenn jede Funktion es rechnen kann, ist auch berechenbarer Turing; d. h. es schätzt genau dieselbe Klasse von Funktionen, wie Maschinen von Turing tun. Wechselweise ist ein Turing-gleichwertiges System dasjenige, das vortäuschen, und durch, eine universale Maschine von Turing vorgetäuscht werden kann. (Alle bekannten Turing-ganzen Systeme sind gleichwertiger Turing, der Unterstützung zur Kirch-Turing-These hinzufügt.)

(Rechenbetonte) Allgemeinheit

:A-System wird universal in Bezug auf eine Klasse von Systemen genannt, wenn es jede Funktion schätzen kann, die durch Systeme in dieser Klasse berechenbar ist (oder jedes jener Systeme vortäuschen kann). Gewöhnlich wird der Begriff Allgemeinheit in Bezug auf eine Turing-ganze Klasse von Systemen stillschweigend gebraucht. Der Begriff "schwach wird universaler" manchmal verwendet, um ein System zu unterscheiden (z.B ein Zellautomat), wessen Allgemeinheit nur durch das Ändern der Standarddefinition der Maschine von Turing erreicht wird, um Eingangsströme mit ungeheuer vielen 1s einzuschließen.

Geschichte

Vollständigkeit von Turing ist in diesem jedem wirklichen Design für ein Rechengerät bedeutend kann durch eine universale Maschine von Turing vorgetäuscht werden. Die Kirch-Turing-These stellt fest, dass das ein Gesetz der Mathematik ist — dass eine universale Maschine von Turing im Prinzip jede Berechnung durchführen kann, dass jeder andere programmierbare Computer kann. Offensichtlich sagt das, dass nichts über die Anstrengung das Programm, oder die Zeit schreiben musste, die man für die Maschine brauchen kann, um die Berechnung oder irgendwelche geistigen Anlagen durchzuführen, die die Maschine besitzen kann, die nichts haben, um mit der Berechnung zu tun.

Der analytische Motor von Charles Babbage (die 1830er Jahre) wäre die erste Turing-ganze Maschine gewesen, wenn es zurzeit gebaut worden wäre, wurde es entworfen. Babbage hat geschätzt, dass die Maschine zu großen Leistungen der Berechnung einschließlich des primitiven logischen Denkens fähig war, aber er hat nicht geschätzt, dass keine andere Maschine besser tun konnte. Von den 1830er Jahren bis zu den 1940er Jahren wurden mechanische Rechenmaschinen wie Vipern und Vermehrer gebaut und verbessert, aber sie konnten keinen "if/goto" durchführen und sind deshalb nicht wahre Computer.

Gegen Ende des 19. Jahrhunderts hat Leopold Kronecker Begriffe der Berechenbarkeit formuliert, primitive rekursive Funktionen definierend. Diese Funktionen können rein mechanisch Berechnung berechnet werden, aber sie sind nicht genug, um einen universalen Computer zu machen, weil die Instruktionen, die sie schätzen, keine unendliche Schleife berücksichtigen. Am Anfang des 20. Jahrhunderts hat David Hilbert ein Programm zu axiomatize die ganze Mathematik mit genauen Axiomen und genauen logischen Regeln des Abzugs geführt, der durch eine Maschine durchgeführt werden konnte. Bald ist es klar geworden, dass ein kleiner Satz von Abzug-Regeln genug ist, um die Folgen jedes Satzes von Axiomen zu erzeugen. Wie man bewies, waren diese Regeln genug, um jeden Lehrsatz durch Kurt Gödel 1930 zu erzeugen. Der Vollständigkeitslehrsatz von Gödel von 1930 enthält implizit eine Definition eines universalen Computers, weil sich die logischen Regeln, die einigen Axiomen der Arithmetik folgen, schließlich als ein Lehrsatz das Ergebnis jeder Berechnung erweisen werden.

Der wirkliche Begriff der Berechnung wurde bald danach isoliert, mit dem Unvollständigkeitslehrsatz von Gödel anfangend. Dieser Lehrsatz hat gezeigt, dass Axiom-Systeme beschränkt wurden, als man über die Berechnung vernünftig geurteilt hat, die ihre Lehrsätze ableitet. Kirche und Turing haben unabhängig demonstriert, dass der Entscheidungsproblem von Hilbert (Entscheidungsproblem) unlösbar war, so den rechenbetonten Kern des Unvollständigkeitslehrsatzes identifizierend. Diese Arbeit, zusammen mit der Arbeit von Gödel an allgemeinen rekursiven Funktionen, hat festgestellt, dass es Sätze von einfachen Instruktionen gibt, die, wenn zusammengestellt, im Stande sind, jede Berechnung zu erzeugen. Die Arbeit von Gödel hat gezeigt, dass der Begriff der Berechnung im Wesentlichen einzigartig ist.

John von Neumann wurde durch diese Ergebnisse begeistert, wirkliche universale Arbeitsrechenmaschinen zu entwerfen. Die ersten formellen Programmiersprachen der 1930er Jahre haben demonstriert, dass solch ein Computer nützlich sein würde. Die erste wirkliche Durchführung einer Turing-ganzen Maschine ist 1941 erschienen: Der Programm-kontrollierte Z3 von Konrad Zuse, aber die erste Maschine hat ausführlich vorgehabt, Turing abgeschlossen und weit geschätzt zu sein, weil universal seiend der 1946-ENIAC war. Diese Maschine ist im Stande gewesen, eine breite Reihe von wirksamen Problemen in den 1940er Jahren, viele zu lösen, die mit dem Atombombe-Design verbunden sind.

Berechenbarkeitstheorie

Das erste Ergebnis der Berechenbarkeitstheorie besteht darin, dass es im Allgemeinen unmöglich ist vorauszusagen, was ein Turing-ganzes Programm eine willkürlich lange Zeit wiedermachen wird. Zum Beispiel ist es unmöglich, für jedes Paar des Programm-eingegebenen zu bestimmen, ob das Programm, auf dem Eingang funktionierend, schließlich anhalten wird oder für immer weitergehen wird (sieh stockendes Problem). Es ist unmöglich zu bestimmen, ob das Programm "wahr" zurückkehren wird, oder ob es "falsch" zurückkehren wird. Für jede Eigenschaft der schließlichen Produktion des Programms ist es unmöglich zu bestimmen, ob diese Eigenschaft halten wird. Das kann Probleme in der Praxis verursachen, wenn es wirkliche Computerprogramme analysiert. Eine Weise, das zu vermeiden, ist, Programme zu veranlassen, aufzuhören, nach einer festen Zeitspanne durchzuführen, oder die Macht von Fluss-Steueranweisungen zu beschränken. Solche Systeme sind nicht durch das Design abgeschlossener Turing.

Ein anderer Lehrsatz zeigt, dass es Probleme gibt, die durch Turing-ganze Sprachen lösbar sind, die durch keine Sprache mit nur begrenzten sich schlingenden geistigen Anlagen gelöst werden können (d. h., jede Sprache, die versichert, wird jedes Programm schließlich zu einem Halt fertig sein). In Anbetracht einer versicherten stockenden Sprache ist die berechenbare Funktion, die durch das diagonale Argument des Kantoren auf allen berechenbaren Funktionen auf dieser Sprache erzeugt wird, auf dieser Sprache nicht berechenbar.

Orakel von Turing

Ein Computer mit dem Zugang zu einem unendlichen Band von Daten ist manchmal stärker als eine Maschine von Turing, weil das Band im Prinzip die Lösung des stockenden Problems oder eines anderen unentscheidbaren Problems enthalten kann. Ein unendliches Band von Daten wird ein Orakel von Turing genannt. Sogar ein Orakel von Turing mit zufälligen Daten ist (mit der Wahrscheinlichkeit 1) nicht berechenbar, da es nur zählbar viele Berechnung, aber unzählbar viele Orakel gibt. So kann ein Computer mit einem zufälligen Orakel von Turing Dinge schätzen, dass eine Maschine von Turing nicht kann. Eine Maschine, die abgesehen davon universal ist, Zugang zu einem Orakel von Turing zu haben, wird schwach universal genannt.

Digitalphysik

Alle bekannten Gesetze der Physik haben Folgen, die durch eine Reihe von Annäherungen auf einem Digitalcomputer berechenbar sind. Eine Hypothese hat Digitalphysik-Staaten genannt, dass das kein Unfall ist, dass es ist, weil das Weltall selbst auf einer universalen Maschine von Turing berechenbar ist. Das würde andeuten, dass kein Computer, der stärker ist als eine universale Maschine von Turing, physisch gebaut werden kann (sieh Kirch-Turing thesis#Philosophical Implikationen).

Beispiele

Die rechenbetonten Systeme (Algebra, Rechnungen), die als Turing ganze Systeme besprochen werden, sind diejenigen, die beabsichtigt sind, um theoretische Informatik zu studieren. Sie sind beabsichtigt, um so einfach zu sein, wie möglich, so dass es leichter sein würde, die Grenzen der Berechnung zu verstehen. Hier sind einige:

Die meisten Programmiersprachen, herkömmlich und unkonventionell, sind Turing-abgeschlossen. Das schließt ein:

  • Alle Allzwecksprachen im breiten Gebrauch.
  • Verfahrensprogrammiersprachen wie Pascal.
  • Objektorientierte Sprachen wie Java, Plausch.
  • Mehrparadigma-Sprachen wie Ada, C ++, Allgemeines Lispeln, Object Pascal.
  • Die meisten Sprachen mit weniger allgemeinen Paradigmen
  • Funktionelle Sprachen wie Lispeln und Haskell.
  • Logikprogrammiersprachen wie Einleitung.
  • Aussagesprachen wie XSLT.
  • Esoterische Programmiersprachen, eine Form der mathematischen Unterhaltung, in der Programmierer ausarbeiten, wie man grundlegende Programmierkonstruktionen auf einer äußerst schwierigen, aber mathematisch Turing-gleichwertigen Sprache erreicht.

Vollständigkeit von Turing ist eine abstrakte Behauptung der Fähigkeit, aber nicht eine Vorschrift von spezifischen Spracheigenschaften hat gepflegt, diese Fähigkeit durchzuführen. Die Eigenschaften, die verwendet sind, um Vollständigkeit von Turing zu erreichen, können ziemlich verschieden sein; Systeme von Fortran würden Schleife-Konstruktionen oder vielleicht sogar goto Behauptungen verwenden, um Wiederholung zu erreichen; Haskell und Einleitung, fehlend, sich fast völlig schlingend, würden recursion verwenden.

Die Vollständigkeit von Turing in SQL wird durch fortgeschrittene Standardeigenschaften durchgeführt, einen Grund illustrierend, relativ starke non-Turing-complete Sprachen sind selten: Je stärker die Sprache am Anfang ist, desto komplizierter die Aufgaben sind, auf die sie angewandt wird und eher sein Mangel an der Vollständigkeit wahrgenommen als ein Nachteil wird, seine Erweiterung fördernd, bis es abgeschlossener Turing ist.

Die ungetippte Lambda-Rechnung ist Turing abgeschlossen, aber viele getippte Lambda-Rechnungen, einschließlich des Systems F, sind nicht. Der Wert von getippten Systemen basiert in ihrer Fähigkeit, die meisten typischen Computerprogramme zu vertreten, während er mehr Fehler entdeckt.

Regel 110 und das Spiel von Conway des Lebens, beider Zellautomaten, sind abgeschlossener Turing.

Non-Turing-complete Sprachen

Viele rechenbetonte Sprachen bestehen, die nicht abgeschlossener Turing sind. Ein solches Beispiel ist der Satz von regelmäßigen Sprachen, meistens regelmäßige Ausdrücke, die durch begrenzte Automaten erzeugt werden. Ein stärkerer, aber noch immer nicht ist die Turing-ganze Erweiterung von begrenzten Automaten die Kategorie von pushdown Automaten und Grammatiken ohne Zusammenhänge, die allgemein verwendet werden, um Syntaxanalyse-Bäume in einer anfänglichen Bühne des Programm-Kompilierens zu erzeugen. Weitere Beispiele schließen einige der frühen Versionen des Pixels shader Sprachen ein, die in Erweiterungen von Direct3D und OpenGL oder einer Reihe von mathematischen Formeln in einem Spreadsheet ohne Zyklen eingebettet sind.

Auf funktionellen Gesamtprogrammiersprachen sind alle Funktionen ganz, und, müssen wie Wohltätigkeit und Sinngedicht enden. Wohltätigkeit verwendet ein Typ-System und auf der Kategorie-Theorie gestützte Kontrollkonstruktionen, wohingegen Sinngedicht abhängige Typen verwendet.

Datensprachen

Sprachen wie XML, JSON, YAML und S-Ausdrücke sind nicht abgeschlossener Turing, weil sie nur verwendet werden, um strukturierte Daten zu vertreten, nicht beschreiben Berechnung. Diese werden manchmal Preiserhöhungssprachen, oder richtiger als "Datenbeschreibungssprachen" genannt.

Non-Turing ganze Sprachen, besonders Datensprachen, sind darin wünschenswert, können sie manipuliert werden. (Das gilt wirklich auch für einige Turing-ganze Sprachen, am meisten namentlich Lispeln und viele seiner Dialekte wie Schema.) Wird das im als die "Regel von Kleinster Macht bekannten Webdesigngrundsatz" kodifiziert, die empfiehlt, den Gebrauch von Turing ganze Sprachen zu vermeiden, und tatsächlich die am wenigsten starke Sprache zu verwenden, die eine Aufgabe befriedigt, so dass die Ergebnis-Daten leichter wiederverwendet und umgestaltet werden können.

Siehe auch

Außenverbindungen


Keirin / Die Shawshank Tilgung
Impressum & Datenschutz