Der Kern dieser Antwort ist, dass Turing-Maschinen alles nachahmen können, was wir programmieren können, und wir programmieren Berechnungen an, mit und von unendlichen Objekten.
Dies ist eine zweite Antwort, die sich mehr auf die spezifische gestellte Frage als auf den allgemeinen theoretischen Rahmen konzentriert, der die Antwort rechtfertigt, und der definitiv zur Beantwortung des allgemeineren Titels der Frage benötigt wird. Es ist voll kompatibel mit meinen vorherigen Antworten auf die Fragen des OP. Was genau ist ein Algorithmus? und Nehmen Turingmaschinen irgendwann etwas Unendliches an? , Antworten, in denen ich mehr den theoretischen Kontext entwickelt habe. Dies kann als Beantwortung beider Fragen angesehen werden.
Turing-Maschinen haben die Fähigkeit, mit Unendlichkeit umzugehen , wie alle vollständigen Turing-Rechenmodelle, wenn auch nur mit unzähligen Unendlichkeiten. Unser Problem ist, dass wir nur einen Teil dieser Unendlichkeit beobachten können, aber wir müssen das Ganze berücksichtigen, da der Teil, den wir beobachten können, unbegrenzt ist.
Das andere Problem ist, dass wir uns nur mit endlich spezifizierten Entitäten befassen können. Tatsächlich fällt die gesamte Struktur der Wissenschaft, wie wir sie kennen, zusammen, wenn wir Entitäten betrachten, die nicht endlich spezifiziert sind, da es unmöglich wird, die Konsistenz von Definitionen zu überprüfen und sogar zu wissen, was die Definitionen sind, da wir nur auf einen Teil davon zugreifen können eine endliche Zeit.
Möglicherweise gibt es ein weiteres grundlegendes Problem, das der Tatsache ähnelt, dass der Abschluss unter unendlicher Vereinigung jede gewünschte Menge definiert, es sei denn, Sie können die in einer solchen Vereinigung zulässigen Bedingungen angemessen einschränken. Ich bin mir jedoch nicht sicher, ob ich dieses Problem vollständig verstehe.
Wie gesagt, Turing-Maschinen haben die Fähigkeit, mit Unendlichkeit umzugehen . Ich widerspreche anderen gut bewerteten Antworten einiger Benutzer mit hohen Repräsentanten, die wissen sollten, worüber sie zu einem so elementaren Thema sprechen.
Das Problem ist, dass Turing ein sehr elementares Rechenmodell gewählt hat, um seinen theoretischen Zweck zu erreichen. Je einfacher, desto besser. Für fortgeschrittenere / anspruchsvollere Rechenmodelle ist es so ziemlich die Maschinensprache für die Programmierung: etwas sehr Dunkles, bei dem Sie keines der Konzepte erkennen können, die für die Programmierung auf hoher Ebene sinnvoll sind. Tatsache ist, dass TM wie die Maschinensprache viel mehr nachahmen kann, als sie direkt ausdrücken können.
23rd Aber es wird immer noch oft als unendliche Berechnung implementiert, die künstlich gestoppt wird, wenn die richtige Antwort erreicht ist.
Tatsächlich fügen alle Benutzer, die angeben, dass in einem TM alles endlich, aber unbegrenzt ist, sehr sorgfältig hinzu, dass sie Turing-Maschinen in ihrer Standarddefinition berücksichtigen . Das Problem ist, dass die Standarddefinition nur ein Mittel zur Vereinfachung der Theorie ist, aber beim Versuch, Rechenstrukturen zu verstehen, ziemlich irrelevant ist.
Tatsächlich ist das einzige, was bei der Berechnung wichtig ist, dass alles auf berechenbare Weise endlich spezifiziert werden muss, nicht dass es endlich ist .
Wir gehen davon aus, dass eine Turingmaschine ein endliches Objekt sein muss. Das stimmt aber nicht. Sie können ein Modell einer Turing-Maschine mit einem zweiten Band definieren, das schreibgeschützt ist und eine Funktion enthält, die für alle ganzzahligen Werte ohne Begrenzung tabellarisch aufgeführt ist. Das ist unendlich. Sie erhalten jedoch keine zusätzliche Rechenleistung, solange der Inhalt dieses Bandes rechnerisch spezifiziert ist (die Berechenbarkeit impliziert, dass er endlich spezifiziert ist). Das zusätzliche Band könnte durchaus durch eine in das andere eingebettete TM-Maschine ersetzt werden und würde die Antworten liefern, anstatt sie auf dem zusätzlichen Band zu suchen. Von einer höheren Ebene ist der Unterschied nicht sichtbar.
Unter dem Gesichtspunkt der praktischen Realisierung könnten wir eine fact
Turing-Maschine haben, die Fakultäten berechnet und auf dem zusätzlichen Band tabelliert, während ein anderes TM die tabellierte Fakultät aus dem zusätzlichen Band verwendet und nur auf das erste TM wartet, wenn in der Tabelle noch einige fehlen Eintrag. Die zweite Maschine geht jedoch davon aus, dass der Inhalt des Bandes letztendlich unendlich ist. Die Tabelliermaschine muss nicht einmal die ganze Zeit arbeiten, sondern muss die Berechnung fortsetzen, wenn Daten aus der Tabelle angefordert werden und dort nicht gefunden werden.
Zurück zur Frage: Der Hauptunterschied zwischen unbegrenzten ganzen Zahlen und der unendlichen Tabelle besteht nur darin, dass ganze Zahlen endlich, unbegrenzt, aber vollständig in endlicher Zeit berechnet sind. Die unendliche Tabelle wird auf unbestimmte Zeit berechnet, ist endlich, wächst aber immer noch bis ins Unendliche. Das ist kein Problem, aber ein Unterschied. Unendliche Objekte sind nur durch endliche Näherungen zugänglich, ... aber sie sind unendlich. Berechenbare irrationale Zahlen sind in diesem Sinne unendliche Objekte, zumindest für ihre Darstellung als Binärzahlen.
Alle Algorithmen werden im Kontext einer mathematischen Theorie definiert. Und eine Tabellensuche zusammen mit einer unendlichen Tabelle ist ein Algorithmus. Es handelt sich jedoch um einen Algorithmus in einer mathematischen Theorie mit einer endlich definierten unendlichen Menge von Axiomen, die die Werte einer Funktion, die sie für jedes ganzzahlige Argument axiomatisiert, ausführlich (und nicht intensiv) spezifizieren. (Siehe meine Antwort auf Ihre vorherige Frage ). Dann ist es immer legitim, dies zu tun, da Sie den Axiomen einer Theorie immer nachweislich wahre Aussagen hinzufügen können.
Usul-Aussagen, wie sie in Ihrer aktuellen Frage wiedergegeben sind, sind meiner Meinung nach falsch (obwohl alles auch eine Frage der Definition ist). Seine Schlussfolgerung in seiner Antwort , dass Sie nicht reproduziert haben, ist, dass die Verwendung einer unendlichen Tabelle nicht als Algorithmus betrachtet werden kann, da sie nur durch ein ungleichmäßiges Berechnungsmodell, durch eine Sammlung verschiedener Maschinen und damit implementiert werden kann Verwendungen " haben keine endliche Beschreibung, die implementiert werden kann, um das" gesamte "Problem für jede Eingabegröße zu lösenπ
Die Art und Weise, wie solche unendlichen Entitäten in der Praxis berechnet werden, erfolgt durch verzögerte Auswertung , Berechnung des jeweils benötigten Teils und Wiederaufnahme der Berechnung für einen Teil des Restes, wenn mehr benötigt wird. Dies ist genau das, was oben vorgeschlagen wurde fact
, wenn die
Maschine träge Fakultät berechnet, um in einer Tabelle gespeichert zu werden, wenn mehr Daten aus der Tabelle benötigt werden.
In gewisser Weise scheint dies die Behauptung (in DanielVs Antwort ) zu bestätigen, dass der Codespace endlich sein muss, da die verzögerte Bewertung tatsächlich auf einem endlichen Code basiert. Die Berechenbarkeit ist jedoch ein allgegenwärtiges Codierungsspiel, so dass die Unterscheidung von Code und Daten unter anderem in den Augen des Betrachters immer ziemlich wichtig ist. In der Tat machen viele moderne Programmiersprachen keinen großen Unterschied zwischen der intensiven
und der erweiterten Spezifikation von Werten, und die Denotational Semantics unterscheidet "2 + 2" nicht wirklich von "4". Semantik ist wirklich das, worüber wir sprechen, wenn wir eine Frage wie " Was ist X ? " Stellen .
Diese Ansicht der Endlichkeit von Code, die auch als statisch angesehen wird, ist ein weiterer Grund, warum eine unendliche Tabelle (als Teil des Codes betrachtet) nicht gleichberechtigt mit unbegrenzten Ganzzahlen betrachtet wird, die als Daten verwendet werden. Dies ist jedoch eine weitere Illusion, die die bekannte Programmierpraxis in der Metaprogrammierung , in reflexiven Sprachen und in der Verwendung der eval
Funktion nicht überlebt . In diesen Sprachen kann der Code vom laufenden Programm selbst unbegrenzt erweitert werden, solange der Computer ausgeführt wird. In der Tat könnte man Turing-Maschinen in Betracht ziehen, die ihre eigenen Übergangsregeln ändern und ihre Anzahl ungebunden erhöhen. Das kommt der Arbeitsweise von Universal Turing-Maschinen ziemlich nahe.
Bei der Gestaltung theoretischer Rahmenbedingungen besteht immer eine Spannung zwischen Einfachheit und Scharfsinn oder Ausdruckskraft. Die Einfachheit vereinfacht die Analyse des Frameworks häufig, insbesondere wenn es darum geht, bestimmte Eigenschaften nachzuweisen oder auf andere Frameworks zu reduzieren. Es ist jedoch oft unpraktisch, Konzepte auf hoher Ebene auszudrücken, die dann codiert werden müssen. Wir programmieren nicht mit Turing-Maschinen, sondern mit Hochsprachen, die viel ausdrucksvoller und übersichtlicher sind und gleichzeitig einige Hindernisse wie die Unterscheidung zwischen Code und Daten auf der Grundlage der semantischen Äquivalenz beseitigen können. Turingmaschinen scheinen einfach zu sein, können aber weit über ihre elementare Definition hinausgehen.