Dies ist eine schlecht formulierte Frage. Lassen Sie uns zunächst einen Sinn daraus ziehen. Ich werde es im Stil der Berechenbarkeitstheorie machen. Daher werde ich Zahlen anstelle von Zeichenfolgen verwenden: Ein Teil des Quellcodes ist eine Zahl und keine Zeichenfolge. Es spielt eigentlich keine Rolle, Sie können unten durch s t r i n g ersetzen .Nstring
Lassen Sie sein , Pairing - Funktion .⟨ M , n ⟩
Nehmen wir an, dass eine Programmiersprache durch die folgenden Daten gegeben ist:L = ( P, E v )
- eine entscheidbare Menge von "gültigen Programmen" undP⊆ N
- ein berechenbarer und Teilfunktion .e v : P× N → N
Die Tatsache, dass entscheidbar ist, bedeutet, dass es eine vollständig berechenbare Abbildung v a l i d gibt : N → { 0 , 1 }, so dass v a l i d ( n ) = 1Pv a l i d: N → { 0 , 1 } . Informell sagen wir, dass es möglich ist, festzustellen, ob eine bestimmte Zeichenfolge ein gültiger Code ist. Die Funktion e v ist im Wesentlichen ein Interpreter für unsere Sprache: e v ( m , n ) führtbei Eingabe n denCode m aus- das Ergebnis kann undefiniert sein.v a l i d( n ) = 1⟺n∈Pevev(m,n)mn
Wir können nun einige Begriffe einführen:
- Eine Sprache ist total, wenn eine Gesamtfunktion für alle m ∈ P ist .n↦ev(m,n)m∈P
- Eine Sprache interpretiert die Sprache L 2 = ( P 2 , e v 2 ), wenn es u ≤ P 1 gibt, so dass e v 1 ( u , ≤ n , m ≤ ) ≤ e v 2 ( n , m ) für alle n ∈ PL1=(P1,ev1) L2=(P2,ev2)u∈P1e v1( U , ⟨ n , m ⟩ ) ≃ e v2( n , m )n ∈ Pund . Hier ist u der Simulator für L 2 , der in L 1 implementiert ist . Es ist auch als Universalprogramm für L 2 bekannt .m ∈ NuL2L1L2
Andere Definitionen von " interpretiert L 2 " sind möglich, aber lassen Sie mich jetzt nicht darauf eingehen.L1L2
Wir sagen, dass und L 2 äquivalent sind, wenn sie sich gegenseitig interpretieren.L1L2
Es gibt die "mächtigste" Sprache von Turingmaschinen (die Sie als "Turingmaschine" bezeichnen), in der n ∈ N eine Kodierung einer Turingmaschine ist und φ ( n , m ) ist die partielle berechenbare Funktion, die "die mit n codierte Turing-Maschine bei Eingabe m ausführt ". Diese Sprache kann alle anderen Sprachen interpetieren, da wir vorausgesetzt haben, dass e v berechenbar ist.T= ( N , φ )n ∈ Nφ ( n , m )nme v
Unsere Definition von Programmiersprachen ist sehr entspannt. Damit das Folgende durchgehen kann, benötigen wir drei weitere Bedingungen:
- implementiert die Nachfolgerfunktion: es gibt s u c c ∈ P, so dass e v ( s u c c , m ) = m + 1 für alle m ∈ N ,Ls u c c ∈ Pe v ( s u c c , m ) = m + 1m ∈ N
- Implementiert die diagonale Funktion: es wird d i ein g ∈ P , so dass e v ( d i a g , m ) = ⟨ m , m ⟩ für alle m ∈ N ,Ldich a g∈ Pe v ( dich a g,m)=⟨m,m⟩m∈N
- ist unter Zusammensetzung von Funktionen geschlossen: Wenn L Arbeitsgeräte f und g dann implementiert auch f ∘ g ,LLfgf∘g
Ein klassisches Ergebnis ist folgendes:
Satz: Wenn eine Sprache sich selbst interpretieren kann, ist sie nicht vollständig.
Beweis. Angenommen , ist das Universalprogramm für insgesamt Langauge L in realisiert L , das heißt für all m ∈ P und n ∈ N ,
E v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) .
Als Nachfolger werden Diagonale und e v ( u , - ) in L implementiert , ebenso wie ihre Zusammensetzung k ↦uLLm∈Pn∈N
ev(u,⟨m,n⟩)≃ev(m,n).
ev(u,−)L . Es gibt
n 0 ∈ P , so dass
e v ( n 0 , k ) ≃ e v ( u , ⟨ k , k ⟩ ) + 1 , aber dann
e v ( u , ⟨ n 0 , n 0 ⟩ ) ≃ e v (k↦ev(u,⟨k,k⟩)+1n0∈Pev(n0,k)≃ev(u,⟨k,k⟩)+1
Da es keine Zahl gleich seinen eigenen Nachfolger ist, folgt, dass
L nicht vollständig oder daß
L nicht selbst interpretieren. QED.
e v ( u , ⟨ n0, n0⟩ ) ≃ e v ( n0, n0) ≃ e v ( u , ⟨ n0, n0⟩ ) + 1
LL
Beachten Sie, dass wir die Nachfolgekarte durch eine andere Karte ohne Fixpunkte ersetzen können.
Hier ist ein kleiner Satz, von dem ich denke, dass er ein Missverständnis beseitigen wird.
Satz: Jede Gesamtsprache kann von einer anderen Gesamtsprache interpretiert werden.
Beweis. Sei eine Gesamtsprache. Wir erhalten eine Summe L ', die L interpretiert, indem wir an L seinen Bewerter e v anschließen . Genauer gesagt, lassen P ' = { ⟨ 0 , n ⟩ | n ∈ P } ∪ { ⟨ 1 , 0 ⟩ } und definieren e v ' als
e v ' ( ⟨ b , n ⟩ , mLL′LLe vP′= { ⟨ 0 , n ⟩ | n ∈ P}∪{⟨1,0⟩}ev′
Offensichtlich L ' istweil insgesamt L total. Um diesesehen L ' können simulieren L nur nehmen u = ⟨ 1 , 0
ev′(⟨b,n⟩,m)={ev(n,m)ev(m0,m1)if b=0,if b=1 and m=⟨m0,m1⟩
L′LL′L , Da dann
e v ' ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) ,nach Bedarf. QED.
u=⟨1,0⟩ev′(u,⟨m,n⟩)≃ev(m,n)
Aufgabe: [hinzugefügt am 27.06.2014] Die oben konstruierte Sprache ist nicht kompositorisch abgeschlossen. Fixiere den Beweis des Theorems so, dass L ' die zusätzlichen Anforderungen erfüllt, wenn L dies tut.L′L′L
Mit anderen Worten, Sie brauchen nie die volle Leistung von Turing-Maschinen, um eine Gesamtsprache zu interpretieren - eine etwas leistungsstärkere Gesamtsprache L ' reicht aus. Die Sprache L ' ist strikt mächtiger als L, weil sie L interpretiert , aber L sich selbst nicht interpretiert.LL′L′LLL