Herausforderung
Schreiben Sie ein Programm P ohne Eingabe, so dass der Satz „die Ausführung von P endet“ unabhängig von der Peano-Arithmetik ist .
Formale Regeln
(Falls Sie ein mathematischer Logiker sind, der die obige Beschreibung für zu informell hält.)
Grundsätzlich kann man eine Universal Turing-Maschine U (zB Ihre Lieblingsprogrammiersprache) in eine Peano-Rechenformel HALT über die Variable p umwandeln , wobei HALT ( p ) den Satz „ U endet auf dem Programm ( Gödel-codiert von) p ”. Die Herausforderung besteht darin, p so zu finden , dass weder HALT ( p ) noch ¬HALT ( p ) in der Peano-Arithmetik bewiesen werden können.
Sie können davon ausgehen, dass Ihr Programm auf einem idealen Computer mit unbegrenztem Speicher und ganzen Zahlen / Zeigern ausgeführt wird, die groß genug sind, um darauf zuzugreifen.
Beispiel
Um zu sehen, dass solche Programme existieren, ist ein Beispiel ein Programm, das ausführlich nach einem Peano-arithmetischen Beweis von 0 = 1 sucht. Die Peano-Arithmetik beweist, dass dieses Programm genau dann anhält, wenn die Peano-Arithmetik inkonsistent ist. Da die Peano-Arithmetik konsistent ist, aber ihre eigene Konsistenz nicht nachweisen kann , kann sie nicht entscheiden, ob dieses Programm anhält.
Es gibt jedoch viele andere Aussagen, die unabhängig von der Peano-Arithmetik sind und auf denen Sie Ihr Programm aufbauen können.
Motivation
Diese Herausforderung wurde durch eine neue Veröffentlichung von Yedidia und Aaronson (2016) inspiriert, die eine Turing-Maschine mit 7.918 Zuständen zeigt, deren Nichtbeeinflussung unabhängig von ZFC ist , einem viel stärkeren System als die Peano-Arithmetik. Das könnte Sie interessieren [22]. Für diese Herausforderung können Sie natürlich anstelle der tatsächlichen Turing-Maschinen die von Ihnen gewählte Programmiersprache verwenden.
x = 1.0; while (x) { x = x / 2.0; }
sehr schnell.Antworten:
Haskell, 838 Bytes
"Wenn du etwas machen willst, ..."
Erläuterung
Dieses Programm sucht direkt nach einem Peano-arithmetischen Beweis von 0 = 1. Da PA konsistent ist, wird dieses Programm niemals beendet. Da PA jedoch seine eigene Konsistenz nicht nachweisen kann, ist die Nichtbeendigung dieses Programms unabhängig von PA.
T
ist die Art der Ausdrücke und Sätze:A P
repräsentiert den Satz ∀ x [ P ( x )].(V 1 :$ P) :$ Q
stellt den Satz P → Q .V 2 :$ P
stellt den Satz ¬ P .(V 3 :$ x) :$ y
repräsentiert den Satz x = y .(V 4 :$ x) :$ y
repräsentiert das natürliche x + y .(V 5 :$ x) :$ y
repräsentiert das natürliche x ⋅ y .V 6 :$ x
repräsentiert das natürliche S ( x ) = x + 1.V 7
repräsentiert die natürliche 0.In einer Umgebung mit i freien Variablen codieren wir Ausdrücke, Sätze und Beweise als 2 × 2 Ganzzahlmatrizen [1, 0; a , b ] wie folgt:
Die übrigen Axiome numerisch kodiert und in der Anfangsumgebung enthalten Γ :
Ein Beweis mit Matrix [1, 0; a , b ] kann nur in Anbetracht der unteren linken Ecke a (oder eines anderen Wertes, der zu einem Modulo b kongruent ist) überprüft werden ; Die anderen Werte dienen zur Erstellung von Proofs.
Zum Beispiel ist hier ein Beweis, dass Addition kommutativ ist.
Sie können dies mit dem Programm wie folgt überprüfen:
Wenn der Beweis ungültig wäre, würden Sie stattdessen die leere Liste erhalten.
quelle