Dies ist eine Herausforderung für Polizisten und Räuber, die darauf basiert, Sprachen zu definieren und zu beweisen, dass sie vollständig sind.
Dies ist der Thread der Polizei. Der Räuberfaden ist hier .
Cops
Als Polizist bereiten Sie zwei Dinge vor:
Eine formale Spezifikation einer Programmiersprache oder eines anderen Computersystems. (Computersysteme sind unten definiert.)
Ein Beweis dafür, dass Ihr System vollständig ist, gemäß der etwas strengen Definition unten.
Sie werden Ihre Spezifikation Ihrer Sprache veröffentlichen und die Räuber werden versuchen, sie zu "knacken", indem sie ihre Turing-Vollständigkeit beweisen. Wenn Ihre Einreichung nicht innerhalb einer Woche geknackt wird, können Sie sie als sicher markieren und Ihren Beweis veröffentlichen. (Ihre Antwort kann ungültig werden, wenn jemand einen Fehler in Ihrem Beweis findet, es sei denn, Sie können ihn beheben.)
Dies ist ein Beliebtheitswettbewerb , daher ist der Gewinner die Antwort, die die meisten Stimmen hat und die nicht geknackt oder ungültig ist. Die Herausforderung ist offen - ich werde keine Antwort annehmen.
Für diese Herausforderung wird ein Rechensystem als vier Dinge definiert:
Ein "Programmsatz"
P
. Dies ist eine zählbar unendliche Menge, z. B. Zeichenfolgen, Ganzzahlen, Binärbäume, Konfigurationen von Pixeln in einem Raster usw. (siehe jedoch die technische Einschränkung unten.)Eine "Eingabemenge"
I
, die ebenfalls eine zählbar unendliche Menge sein wird und nicht dieselbe Menge sein muss wieP
(obwohl dies möglich ist).Ein „output set“
O
, das wird in ähnlicher Weise eine countably unendliche Menge sein , und kann oder kann nicht die gleiche sein wieP
oderI
Eine deterministische, mechanistische Prozedur zum Erzeugen einer Ausgabe
o
von Programmp
und Eingabei
, wop
,i
undo
sind MitgliederP
,I
undO
jeweils. Dieses Verfahren sollte so beschaffen sein, dass es im Prinzip auf einer Turing-Maschine oder einem anderen abstrakten Berechnungsmodell implementiert werden kann. Abhängig vom Programm und seiner Eingabe kann die Prozedur natürlich nicht angehalten werden.
Die Sets P
, I
und O
muss so beschaffen sein , dass man sie als Zeichenkette in einer berechenbaren Weise ausdrücken kann. (Für die meisten vernünftigen Entscheidungen spielt dies keine Rolle. Diese Regel verhindert, dass Sie seltsame Sätze auswählen, z. B. den Satz von Turing-Maschinen, die nicht anhalten.)
Die Vollständigkeit wird wie folgt definiert:
- Für jede berechenbare Teilfunktion
f
vonI
bisO
gibt es ein Programm,p
inP
dem gegebenp
und eingegeben wirdi
, die Ausgabe ist,f(i)
wennf(i)
sie einen Wert hat. (Andernfalls wird das Programm nicht angehalten.)
Das Wort "berechenbar" in der obigen Definition bedeutet "kann mit einer Turing-Maschine berechnet werden".
Beachten Sie, dass weder Regel 110 noch bitweise zyklische Tags nach dieser Definition Turing-vollständig sind, da sie nicht die erforderliche Eingabe-Ausgabe-Struktur haben. Der Lambda-Kalkül ist Turing vollständig, solange wir die Kirchenzahlen definieren I
und O
sein sollen . (Es ist nicht Turing-vollständig, wenn wir Lambda-Ausdrücke im Allgemeinen nehmen und sein.)I
O
Beachten Sie, dass Sie keine Implementierung Ihrer Sprache bereitstellen müssen, aber Sie können gerne eine in Ihre Antwort aufnehmen, wenn Sie möchten. Sie sollten sich jedoch nicht auf die Implementierung verlassen, um die Sprache in irgendeiner Weise zu definieren - die Spezifikation sollte an sich vollständig sein, und wenn es einen Widerspruch zwischen der Spezifikation und der Implementierung gibt, sollte dies als Fehler in der Implementierung behandelt werden.