Die informelle Aussage ist nicht wahr, wie die folgende Programmiersprache zeigt. Eine beliebige Zeichenfolge von beispielsweise ASCII-Zeichen ist ein gültiges Programm, und die Bedeutung jedes Programms lautet: "Ein Programm ausgeben, das nur eine Kopie seiner Eingabe ausgibt." Somit ist jedes Programm in dieser Sprache ein Compiler für die Sprache, aber die Sprache ist nicht vollständig.
Ich bin mir nicht sicher, ob Ihre "computability theory version" äquivalent ist, aber es ist auch nicht wahr. Nach Kleenes zweitem Rekursionssatz gibt es für jede Codierung von Turing-Maschinen ein TM, das seine eigene Codierung akzeptiert und alle anderen ablehnt. 1 Diese Maschine ist ein Gegenbeispiel zum Satz. Konkreter können wir das Ergebnis erzielen, indem wir eine Kodierung wählen. Lassen Sie beispielsweise jede ungerade Zahl die Maschine codieren, die durch "Wenn meine Eingabe ungerade ist, akzeptieren Sie sie, andernfalls verwerfen" definiert ist, und lassen Sie die Zahl 2 x die Maschine codieren, die durch x in Ihrem eigenen bevorzugten Codierschema für Turing-Maschinen codiert ist. ⟨ M ⟩ ist in der Sprache L lassener MM2xx⟨M⟩LMaber ist nicht Turing abgeschlossen.FL
1 Kleenes zweiter Rekursionssatz besagt, dass es für jede Aufzählung der partiellen rekursiven Funktionen (dh für jede Codierung von Programmen als ganze Zahlen) und für jede partielle rekursive Funktion Q ( x , y ) eine gibt Ganzzahl p, so dass ϕ p die Funktion ist, die y auf Q ( p , y ) abbildet . Insbesondere sei Q also die Funktion, die akzeptiert, wenn x = y ist(ϕi)i≥0Q(x,y)pϕpyQ(p,y)Qx=yund lehnt sonst ab. Nach dem Satz gibt es eine ganze Zahl , die das Programm ϕ p ( y ) = Q ( p , y ) codiert . Das heißt, ϕ p akzeptiert seine eigene Codierung p und weist alle anderen Eingaben zurück.pϕp(y)=Q(p,y)ϕpp