Informatik II. Registermaschinen. Registermaschinen. Registermaschinen. Rainer Schrader. 7. Dezember 2005

Ähnliche Dokumente
Theoretische Grundlagen der Informatik

Informatik II. Turingmaschinen. Turingmaschinen. Turingmaschinen. Rainer Schrader. 14. Dezember 2005

Theoretische Informatik. 1. Turingmaschinen. Rainer Schrader. 16. April Institut für Informatik. Turingmaschinen.

Theoretische Grundlagen der Informatik

Halteproblem/Kodierung von Turing-Maschinen

Informatik III. Christian Schindelhauer Wintersemester 2006/ Vorlesung

Berechenbarkeit und Komplexität: Probleme, Sprachen, Maschinen

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Kontextsensitive und Typ 0 Sprachen Slide 2. Die Turingmaschine

Random Access Machine (RAM) Berechenbarkeit und Komplexität Random Access Machines

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Informatik III. Arne Vater Wintersemester 2006/ Vorlesung

Das Halteproblem für Turingmaschinen

Einführung in die Theoretische Informatik

Theoretische Informatik. nichtdeterministische Turingmaschinen NDTM. Turingmaschinen. Rainer Schrader. 29. April 2009

Falls H die Eingabe verwirft, so wissen wir, dass M bei Eingabe w nicht hält. M hält im verwerfenden Haltezustand. Beweis:

Entscheidungsprobleme

2.5 Halteproblem und Unentscheidbarkeit

Theoretische Informatik für Wirtschaftsinformatik und Lehramt

Ein formales Berechnungsmodell: Turingmaschinen. Turingmaschinen 26 / 62

Theoretische Informatik Mitschrift

Grundlagen der Theoretischen Informatik

Berechenbarkeit und Komplexität: Rekursive Aufzählbarkeit und die Technik der Reduktion

Theoretische Informatik und Logik Übungsblatt 1 (2016S) Lösung

Reduktionen. Formalisierung von Sprache A ist nicht schwerer als Sprache B.

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik. Vorlesung am 07. November INSTITUT FÜR THEORETISCHE INFORMATIK

1.5 Turing-Berechenbarkeit

Berechenbarkeit. Script, Kapitel 2

Unentscheidbarkeitssätze der Logik

1.5 Turing-Berechenbarkeit

6.4 Entscheidbarkeit. nein sein müssen, ist klar. THEO 6.4 Entscheidbarkeit 205/307 c Ernst W. Mayr

Grundlagen der Theoretischen Informatik

Mächtigkeit von WHILE-Programmen

Übungsblatt 3. Vorlesung Theoretische Grundlagen der Informatik im WS 17/18

Turing-Maschine. Berechenbarkeit und Komplexität Turing-Maschinen. Turing-Maschine. Beispiel

Berechenbarkeit und Komplexität: Rekursive Aufzählbarkeit und die Technik der Reduktion

Turing Maschinen II Wiederholung

Registermaschine (RAM), Church-Turing-These

VL-03: Turing Maschinen II. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

Unentscheidbarkeit. 1. Wann sind Sprachen unentscheidbar? 1, A 0, A } = {

GTI. Hannes Diener Juli. ENC B-0123,

Berechenbarkeitstheorie 14. Vorlesung

Berechenbarkeit und Komplexität Vorlesung 10

Einführung in die Theoretische Informatik

Theoretische Grundlagen der Informatik

Grundlagen der Theoretischen Informatik

Grundlagen der Theoretischen Informatik

Registermaschine (RAM), Church-Turing-These. Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen

Turing Maschine. Thorsten Timmer. SS 2005 Proseminar Beschreibungskomplexität bei Prof. D. Wotschke. Turing Maschine SS 2005 p.

Fragen 1. Muss eine DTM ein Wort zu Ende gelesen haben, um es zu akzeptieren? a) Ja! b) Nein!

Wie man eine Sprache versteht

Der Satz von Rice. Dann ist C(S) eine unentscheidbare Menge.

Einführung in Berechenbarkeit, Komplexität und Formale Sprachen

11. Woche: Turingmaschinen und Komplexität Rekursive Aufzählbarkeit, Entscheidbarkeit Laufzeit, Klassen DTIME und P

Rekursive Aufzählbarkeit Die Reduktion

Übungsblatt 1. Lorenz Leutgeb. 30. März 2015

Theoretische Informatik. Probabilistische Turingmaschinen PTM PTM. Rainer Schrader. 10. Juni 2009

Einführung in Berechenbarkeit, Komplexität und Formale Sprachen

VL-06: Unentscheidbarkeit II. (Berechenbarkeit und Komplexität, WS 2017) Gerhard Woeginger

Definition 98 Eine Turingmaschine heißt linear beschränkt (kurz: LBA), falls für alle q Q gilt:

Klausur: Berechenbarkeit und Komplexität (Niedermeier/Chen/Froese/Sorge, Sommersemester 2016)

Auffrischung Einige (wenige) Grundlagen der Theoretischen Informatik

Grundlagen Theoretischer Informatik 2 WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Einführung in die Theoretische Informatik

Berechenbarkeit. Script, Kapitel 2

Universelle Turingmaschinen

2.4 Kontextsensitive und Typ 0-Sprachen

Komplexitätstheorie WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Unentscheidbarkeit. Vorlesung Berechenbarkeit und Komplexität alias Theoretische Informatik: Komplexitätstheorie und effiziente Algorithmen

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Unentscheidbarkeit von Problemen mittels Turingmaschinen

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

Satz von Rice. Lemma 39

Algorithmentheorie 8. Vorlesung

11. Übungsblatt. x y(top(push(x, y)) = y)

Wir haben eine Beziehung zwischen entscheidbar und rekursiv aufzählbar hergeleitet.

Theoretische Informatik 1

a b b a Vom DFA zur TM Formale Grundlagen der Informatik 1 Kapitel 9 Turing-Maschinen Der Lese-/Schreibkopf Bedeutung der TM

Informatik III. Christian Schindelhauer Wintersemester 2006/ Vorlesung

Das Postsche Korrespondenzproblem

Beispiel: NTM. M = ({q 0,q 1,q 2 }, {0, 1}, {0, 1, #},δ, q 0, #, {q 2 }) q 2

Semi-Entscheidbarkeit und rekursive Aufzählbarkeit

LOOP-Programme: Syntaktische Komponenten

Grundlagen der Theoretischen Informatik: Übung 10

Grundlagen Theoretischer Informatik 2 WiSe 2011/12 in Trier. Henning Fernau Universität Trier

Einführung in die mathematische Logik

Universelle Maschinen und universelle Funktionen

Entscheidungsprobleme

Rekursiv aufzählbare Sprachen

Turing-Maschinen: Ein abstrakes Maschinenmodell

Grundlagen Theoretischer Informatik 2 WiSe 2011/12 in Trier. Henning Fernau Universität Trier

1 Eine Menge M Σ heißt (rekursiv) aufzählbar genau. 2 Die Familie aller aufzählbaren Mengen wird mit RE

Diskrete Mathematik II

Unentscheidbare Probleme: Diagonalisierung

Mehrband-Turingmaschinen und die universelle Turingmaschine

Einführung in die Informatik Turing Machines

Turingmaschinen Vorlesung Berechenbarkeit und Komplexität alias Theoretische Informatik: Komplexitätstheorie und effiziente Algorithmen

Transkript:

Informatik II Rainer Schrader Zentrum für Angewandte Informatik Köln 7. Dezember 25 / 82 2 / 82 Gliederung Aufbau und Eigenschaften universelle RAM s RAM-Berechenbarkeit Nichtentscheidbarkeit Reduzierbarkeit Aufzählbarkeit wir vereinfachen das Modell eines von-neumann-rechners eine Registermaschine (Random Access Maschine = RAM) stellt eine Abstraktion des von-neumann-rechners dar sie besteht aus (i) einer zentralen Recheneinheit (ii) einem Speicher (iii) einem Programm (iv) einem Eingabe- und einem Ausgabeband 3 / 82 4 / 82

Eingabeband Register Befehlszähler Programm Ausgabeband Die einzelnen Teile der Registermaschine haben folgende Eigenschaften: Speicher: abzählbar unendlich viele Speicherzellen (Register) mit den Adressen,, 2,..., jedes Register kann eine Zahl aus N aufnehmen der Inhalt eines Registers ist entweder eine Zahl aus N oder nicht definiert. Recheneinheit: enthält Befehlszähler und Akkumulator ( b= Register ). beide Register können natürliche Zahlen speichern Programm: endliche numerische Folge von Befehlen, aus der weiter unten spezifizierten Befehlsmenge. Ein-/Ausgabeband: zwei unbeschränkt lange Bänder, unterteilt in Zellen jede Zelle kann ein Element aus {,, 2} aufnehmen 5 / 82 6 / 82 zu Beginn der Rechnung steht eine Eingabe (x,... x n ) {,, 2} auf dem Eingabeband alle Register sind undefiniert Bezeichnungen: c(i) aktueller Inhalt der Registers i der Befehlszähler enthält den Wert in einem Schritt wird der durch den Inhalt des Befehlszählers spezifizierte Befehl des Programms ausgeführt er verändert den Akku, die Register, den Befehlszähler und evtl. das Ausgabeband. b aktueller Inhalt des Befehlszählers e, a aktueller Inhalt des Ein-/Ausgabeband e i und a j die aktuellen Positionen des Ein- bzw. Ausgabebands 2 Trennzeichen zwischen {, }-Folgen 22 EOF auf den Bändern ε undefiniert Die folgenden Befehle werden jeweils nur ausgeführt, wenn die Registerinhalte definiert sind 7 / 82 8 / 82

Befehlsliste. read c() e i, Lesekopf rückt eins weiter 2. write a j c(), Schreibkopf rückt eins weiter 3. c-load k c() k, 4. load k c() c(k ) 5. i-load k c() c(c(k )) 6. store k c(k ) c() 7. i-store k c(c(k )) c() 8. goto k b k 9. jumpzero k if c() = then b k else b b +. end Programm hält. add k c() c() + c(k ) 2. sub k c() max{c() c(k ), } 3. shift c() c() 2 Beispiel Lies eine Binärzahl ein und wandle diese in eine Dezimalzahl um: () c-load 2 (2) store /* 2 Register (3) c-load (4) store 3 /* Register 3 (5) read (6) store 2 /* x i Register 2 (7) load /* 2 Register (8) sub 2 /* 2 x i Register (9) jumpzero 5 /* 2 gefunden, Ende der Eingabe () load 3 /* lade Dezimalzahl () add /* 2 Register Register (2) add 2 /* Register + x i Register (3) store 3 /* speichere zurück (4) goto 5 /* lies nächste Binärstelle (5) end 9 / 82 / 82 um die Berechnungen einer RAM beschreiben zu können, frieren wir die Maschine in jedem Rechenschritt ein der aktuelle Zustand einer RAM wird durch die Inhalte von Registern, Bändern und des Befehlszählers beschrieben dies führt auf den Begriff Zustand bzw. Konfiguration einer RAM wir benötigen dazu den Begriff einer partiellen Funktion f : X Y heißt partiell, wenn f nicht in jedem x X definiert sein muss Eine Konfiguration K einer RAM ist ein Tupel (b, c, e, a) mit b N (Inhalt des Befehlszählers) c : N part. N (Speicherinhaltsfunktion) a, e {,, 2} {ε} (Beschriftung der Ein-/Ausgabebänder). K bezeichne die Menge aller Konfigurationen wir zeichnen folgende Konfigurationen aus: Anfang Ende die jeweils nächste / 82 2 / 82

Startkonfiguration S = {start(x ) = (,nd, x, ε) : x {,, 2} } nd bedeutet, dass die Registerinhalte nicht definiert sind Endkonfiguration E = {(b, c, e, a) : Befehl mit Nummer b ist end } Nachfolgekonfiguration sei K = (b, c, e, a) sei K die Konfiguration ist, die aus K durch Anwendung des Befehls b hervorgeht, falls er und seine Operanden definiert sind j K, falls b wohldefiniert δ(k ) = ε, sonst. dadurch wird eine partielle Funktion δ : K part. K definiert Sei K eine Konfiguration δ(k ) heißt die direkte Nachfolgekonfiguration sei δ = δ und δ m = δ(δ m ) δ m (K ) heißt die m-te Nachfolgekonfiguration, K ist (indirekte) Nachfolgekonfiguration von K, falls K = δ m (K ) für ein m δ (K ) := {δ m (K ) : m N, δ m (K ) definiert} 3 / 82 4 / 82 Eine RAM M berechnet folgende partielle Funktion: eine RAM M berechnet eine partielle Funktion, die intuitiv wie folgt definiert ist: 8 < a, falls die Berechnung mit a endet f M (x ) = Fehler, falls ein Fehler auftritt, : undefiniert, falls M in eine Endlosschleife gerät etwas formaler: 8 >< f M (x ) = >: a Fehler f M : {,, 2} part {,, 2} {Fehler} es existiert K = (b, c, e, a) δ (start(x )) E es existiert K δ (start(x ))\E, δ (K ) nicht definiert ε es existiert kein K δ (start(x )) E, aber mit jedem erreichten k K ist auch δ(k ) definiert 5 / 82 6 / 82

Gliederung Aufbau und Eigenschaften Einschub: Turing-Maschinen universelle RAM s RAM-Berechenbarkeit Nichtentscheidbarkeit Reduzierbarkeit Aufzählbarkeit Eine (deterministische) Turingmaschine besteht aus: Turingmaschinen einer Recheneinheit einem zweiseitig unbeschränkten Band (= Speicher) einem Schreib-/Lesekopf einer Übergangstabelle (Programm) # # # # # # Band Zustand z 3 Schreib /Lesekopf Übergangstabelle δ z z 2 z 3 # 7 / 82 8 / 82 Eine (deterministische) Turingmaschine besteht aus: Turingmaschinen einer Recheneinheit einem zweiseitig unbeschränkten Band (= Speicher) einem Schreib-/Lesekopf einer Übergangstabelle (Programm) ist stets in einem von endlich vielen Zuständen z Z hält (wenn sie hält) in einer Menge E Z von Endzuständen ist zu Beginn in einem Zustand z (Startzustand) Turingmaschinen das Band besteht aus Feldern, die mit den Zahlen i Z durchnumeriert sind jedes Feld enthält einen Buchstaben aus dem Alphabet A = {, } #, wobei # = blank zu Beginn steht die Eingabe x,..., x n mit x i # auf den Feldern i =,..., n alle anderen Felder enthalten # der Kopf steht über dem Feld in jedem Schritt liest der Kopf auf dem Feld, über dem er steht, einen Buchstaben 9 / 82 2 / 82

das Programm besteht aus der Übergangstabelle die Tabelle hat Z E Zeilen und drei Spalten Turingmaschinen für jeden Zustand und für jedes mögliche Zeichen auf dem Band beschreibt die Tabelle die nächste Aktion 8 >< δ(q, a) = >: (z, a, L) überschreibe a durch a, nimm Zustand z ein und gehe nach links (z, a, N) wie oben, bleibe stehen (z, a, R) wie oben, gehe nach rechts nd der Rechner stoppt mit einer Fehlermeldung Turingmaschinen wenn der Rechner ohne Fehlermeldung stoppt, so steht das Ergebnis rechts vom Kopf eine Konfiguration besteht aus einem Element αzβ aus A Z A mit α A, β A, wobei gilt: auf dem Band steht αβ, der Kopf steht über dem. Element von β, der Zustand ist z. die Tabelle definiert eine partielle Übergangsfunktion δ : Z E A part Z A {L, R, N} 2 / 82 22 / 82 Turingmaschinen α z β ist direkte Nachfolgekonfiguration von αzβ, wenn diese Konfiguration durch einen Rechenschritt aus αzβ hervorgeht (indirekte) Nachfolgekonfigurationen sind entsprechend definiert F = A E A ist die Menge der Endkonfigurationen eine Turingmaschine M berechnet die partielle Funktion part f M : {, } {, } mit 8 < y, falls es eine Nachfolgekonfiguration f M (x ) = K = αzy von z x mit z E gibt : nd, sonst Turingmaschinen Beispiel Die folgende Maschine liest eine Binärzahl x, addiert eine und schreibt das Ergebnis wieder auf das Band: Lesezustand δ(z,) = (z,,r) δ(z,) = (z,,r) δ(z,#) = (z,#,l) /* lies die Zahl Übertragszustand δ(z,) = (z 2,,L) /* addiere δ(z,) = (z,,l) δ(z,#) = (e,,n) kein Übertrag δ(z 2,) = (z 2,,L) δ(z 2,) = (z 2,,L) δ(z 2,#) = (e,#,r) 23 / 82 24 / 82

Gliederung Aufbau und Eigenschaften Einschub: Turing-Maschinen universelle RAM s RAM-Berechenbarkeit Nichtentscheidbarkeit Reduzierbarkeit Aufzählbarkeit RAM-Programmierung bisher ist das Programm in einer RAM fest installiert bei von-neumann-rechnern wird das Programm jedoch wie die Daten eingelesen und vom Rechner interpretiert wir wollen also versuchen, eine RAM zu konstruieren, die programmierbar ist. 25 / 82 26 / 82 ein Programm besteht aus Befehlen B i der Befehlsliste jeder Befehl wird durch seine Nummer und einen Parameter kodiert. Befehle Anzahl der Parameter Bedeutung 3 7,, 2 Registeradresse 8, 9 Sprungadresse alle anderen ignorieren wie früher identifizieren wir das Alphabet über {,, 2} mit dem Alphabet über {, } dabei setzen wir = = = 2. die binäre Kodierung eines Programmes M bezeichnen wir mit G (M) sei M = (B, B 2,..., B l ) ein Programm die Kodierung G(M) von M ist das Tupel G(M) = (k, Nummer(B ), Parameter(B ),..., Nummer(B k ), Parameter(B k ), 2, 2) alle Zahlen sind binär kodiert und durch Zweien getrennt 27 / 82 28 / 82

der erste Schritt beim Ablauf eines Programms könnte eine Syntaxanalyse sein die Eingabe besteht dann aus zwei Teilen: dem Programm gefolgt vom Input für das Programm verläuft die Syntaxanalyse erfolgreich, wird danach das Programm gestartet Lemma Es gibt eine RAM, die bei Eingabe von x {, } entscheidet, ob x die Kodierung eines Programms ist. Beweisskizze: a) Berechne aus x die dargestellten Dezimalzahlen x,..., x n und deren Anzahl n b) speichere sie in den ersten Registern,..., n + ab. die Syntaxanalyse kann mit einer RAM durchgeführt werden: Lemma Es gibt eine RAM, die bei Eingabe von x {, } entscheidet, ob x die Kodierung eines Programms ist. c) Teste, ob n = 2x + d) Teste, ob jedes x i, i gerade, aus {,..., 3} ist. e) Teste, ob für jedes x i, i gerade, gilt: (x i {, 2,, 3} x i+ = ) Wir werden im weiteren eine RAM mit ihrem Programm identifizieren. 29 / 82 3 / 82 sei M eine RAM M heißt universell oder programmierbar, falls: für jedes Programm M und jeden Input x = (x,..., x n ) {,, 2} gilt: M simuliert M, d.h. M gefüttert mit der Kodierung von M gefolgt von x liefert M(x ) f M (G(M), x ) = f M (x ) Beweisidee: das Programm von M besteht aus drei Teilen: dem Hauptprogramm einer Syntaxanalyse einem Simulationsprogramm für jeden Befehlsytyp zuerst wird eine Syntaxanalyse durchgeführt danach wird jeder Befehl von M per Unterprogramm simuliert Satz Es existiert eine universelle RAM M. 3 / 82 32 / 82

Satz Es existiert eine universelle RAM M. Beweisskizze: Wir bezeichnen die Größen, die sich auf die Maschine M beziehen, mit dem Index. führe auf M eine Syntaxanalyse durch. (a) falls der erste Teil des Inputs kein Programm ist, gib eine Fehlermeldung aus und stoppe (b) andernfalls sei der Input G(M) = (k, B, P, B 2, P 2,...) in den ersten Registern (,..., 2k + ). 2. teile die M -Register auf in die mit geradem und mit ungeradem Index die geraden simulieren die M-Register (identifiziere i 2i + 2) die ungeraden werden als Arbeitsspeicher und zur Speicherung des Programms G(M) genutzt 3. kopiere G(M) in die Register (3, 5,..., 4k + 3), setze c () = 5 4. simuliere M auf M. Es soll stets gelten: ist M nach t Schritten in Konfiguration (b, c, e, a), dann gilt für M nach t Simulationsschritten: c () = b, e = e, a = a (c (3),..., c (4k + 3)) = G(M) c (2i + 2) = c(i), i =,... b = erster Befehl des Simulationsprogramms 33 / 82 34 / 82 4. simuliere M auf M. Es soll stets gelten: sei M nach t Schritten in Konfiguration (b, c, e, a) dann gilt für M nach t Simulationsschritten: c () = b, e = e, a = a (c (3),..., c (4l + 3)) = G(M) c (2i + 2) = c(i), i =,... b = erster Befehl des Simulationsprogramms 5. Simulation a) für jeden Befehl besitzt M ein Unterprogramm, das ihn simuliert b) schreibe die Nummer und den Parameter des Befehls in die Register 3 und 5 Beispiel: goto k c-load /* lade die Konstante */ store 7 /* speichere im Register 7 */ load 5 /* Sprungadresse */ sub 7 /* Akku = k */ add /* Akku = 2(k ) */ add /* Akku = 4(k ) */ store 9 /* speichere 4(k ) im Register 9 */ c-load 5 /* lade die Konstante 5 */ add 9 /* Akku = 5 + 4(k ) */ store /* c () enthält nächsten Befehl */ c) führe den Befehl mit Nummer c (3) und Parameter c (5) aus 35 / 82 36 / 82

Beispiel: store k c-load /* c () = */ add 5 /* c () = k + */ add /* c () = 2k + 2 berechne neue Adresse */ store 7 /* c (7) = 2k + 2 speichere neue Adresse */ load 2 /* c () = c()(= c (2)) lade Akku von M in den Akku von M */ i-store 7 /* c (c (7)) = c (2k + 2) = c() speichere */ Gliederung Aufbau und Eigenschaften universelle RAM s RAM-Berechenbarkeit Nichtentscheidbarkeit Reduzierbarkeit Aufzählbarkeit 37 / 82 38 / 82 sei f : {,, 2} part {,, 2} eine partielle Funktion f heißt berechenbar (genauer: RAM-berechenbar), falls es eine Registermaschine M gibt mit f M = f, d.h. ist f (x ) definiert, so schreibt M f (x ) auf das Ausgabeband ist f (x ) nicht definiert, so hält M nicht (gerät in den Fehlermodus oder in den nicht definierten Zustand). insbesondere ist die nirgends definierte Funktion nd durch die RAM M nd, die nie hält, berechenbar. der Begriff Berechenbarkeit ist mit verschiedenen Konzepten formuliert worden wir werden im nächsten Kapitel die Berechenbarkeit mittels Turing-Maschinen untersuchen es hat sich herausgestellt, dass all diese Konzepte äquivalent sind obwohl sie alle Abstraktionen von existierenden Maschinen sind, hat Church die Vermutung geäußert, dass diese Abstraktionen nicht mächtiger sind als die realen Maschinen: 39 / 82 4 / 82

Church sche These: Die in einem intuitiven Sinne berechenbaren Funktionen sind genau die berechenbaren Funktionen. wir haben bisher RAM-Programme mit ihrer Kodierung identifiziert wir können ein solches Wort über {, } auch als Binärdarstellung einer Dezimalzahl auffassen dazu benutzen wir die folgende Abbildung: dies ist keine Aussage im Sinne der Mathematik insbesondere ist der unpräzise Begriff intuitiv berechenbar nicht definiert er soll ausdrücken, dass alles, was auf einem abstrakten Rechnermodell berechnet werden kann, auch auf realen Maschinen berechnet werden kann sei x = (x n,..., x ) {, } sei d : {, } N\{} definiert durch j, d (x ) = P n i= 2i x i + 2 n+, d (G (M)) heißt Gödelnummer von M. für x = ε sonst 4 / 82 42 / 82 j, für x = ε d (x ) = P n i= 2i x i + 2 n+, sonst d berechnet nicht die von x definierte Dezimalzahl d (x ) = 2 n+ + (x n,..., x ) 2 so kann zwischen () und () unterschieden werden 43 / 82 Lemma d : {, } N {} ist bijektiv und RAM-berechenbar. Beweisskizze: die Berechenbarkeit ergibt sich analog zur Umrechnung einer Binärzahl in die Dezimalzahl seien x = (x m,..., x ), y = (y n,..., y ) {, } mit x y dann ist entweder m n oder (x m,..., x ) 2 (y n,..., y ) 2 sei umgekehrt k N {} sei n die größte natürliche Zahl mit 2 n+ k dann ist k 2 n+ < 2 n+ sei x = (x n,..., x ) die Binärdarstellung von k 2 n+, evtl. mit führenden Nullen aufgefüllt dann ist d (x ) = k daraus folgt die Bijektivität. 44 / 82

Wir können somit RAM-Programme M identifizieren mit: ihrer binären Kodierung G(M) {, } ihrer Gödelnummer d (G (M)) N {} ebenso können wir jede Folge x {, } mit ihrer Gödelnummer identifizieren wir sagen: k N {} oder x {, } ist eine RAM damit können wir den Input für eine universelle RAM als Paar (k, l) auffassen k N {} ist die Gödelnummer des Programms l N {} ist die Gödelnummer des Inputs Gliederung Aufbau und Eigenschaften universelle RAM s RAM-Berechenbarkeit Nichtentscheidbarkeit Reduzierbarkeit Aufzählbarkeit 45 / 82 46 / 82 Bemerkung nach der Church schen These sind die berechenbaren Funktionen genau die Funktionen, die wir auf realen Rechnern berechnen können was lässt sich also RAM-berechnen? wir werden zeigen, dass es Funktionen gibt, die auf keiner RAM berechnet werden können um die Beweisidee klar zu machen, betrachten wir folgende Analogie: Es gibt Funktionen f : {, } {, }, die nicht durch ein C-Programm berechenbar sind. Beweis: Wir benutzen zwei Eigenschaften: ) Jedes C-Programm ist ein endlicher Text über einem endlichen Alphabet A. 2) Jedes C-Programm berechnet eine Funktion f : A A {Programm hält nicht}. 47 / 82 48 / 82

) Jedes C-Programm ist ein endlicher Text über einem endlichen Alphabet A. 2) Jedes C-Programm berechnet eine Funktion f : A A {Programm hält nicht}. aus der ersten Eigenschaft folgt, dass die Menge P aller C-Programme abzählbar ist sei P P die Teilmenge aller Programme, die eine Funktion f : {, } {, } berechnen (also halten und einen Output in {, } erzeugen) enthält P zwei Programme, die dieselbe Funktion berechnen, so entfernen wir jeweils eines dieser Programme dann ist P ebenfalls abzählbar wir identifizieren P mit den Funktionen, die von P berechnet werden sei {f, f 2,... } eine Aufzählung von P wir stellen uns jetzt die f i (x j ) in Matrixform aufgeschrieben vor: f f f f f 2 3 4 5 x x x x x x x 2 3 4 5 6 7 ebenso ist die Menge {, } aufzählbar sei x =, x 2 =, x 3 =, x 4 =, x 5 =,... eine solche Aufzählung 49 / 82 5 / 82 betrachte die aus der Diagonalen abgeleitete Funktion: f f f f f 2 3 4 5 x x x x x x x 2 3 4 5 6 7 sowie die invertierte Funktion f : etwas formaler: f (x ) f (x 2 ) f (x 3 )... f 2 (x ) f 2 (x 2 ) f 2 (x 3 )... f 3 (x ) f 3 (x 2 ) f 3 (x 3 )......... betrachte die aus der Diagonalen abgeleitete Funktion: zu jedem x {, } existiert genau ein j mit x = x j setze f (x ) = f j (x j ). angenommen f P dann existiert ein i mit f = f i an der Stelle x = x i gilt f (x i ) = f i (x i ) f i (x i ) = f (x i ) damit kann f nicht von einem C-Programm berechnet werden f kann in der Tabelle nicht vorkommen. 5 / 82 52 / 82

wir haben bei den berechenbaren Funktionen stets Abbildungen {, } {, } betrachtet wie bei den C-Programmen vereinfachen wir die Fragestellung wir betrachten jetzt Abbildungen {, } {, } es reicht sicherlich, unter diesen Abbildungen eine als nicht berechenbar nachzuweisen anschaulich interessiert uns im weiteren das folgende Problem: ist die Antwort auf eine gegebene Frage ja oder nein? genauer gesagt: können wir entscheiden, ob die Antwort auf eine kodierte Frage x {, } oder ist? äquivalent dazu ist: gegeben x {, } entscheide, ob x f () sei L = f () der Urbilder der L ist als Menge von Wörtern eine Sprache wir fragen also, ob das Spracherkennungsproblem: gegeben L {, } und x {, }, ist x L? mittels einer RAM beantwortet werden kann. 53 / 82 54 / 82 sei L eine Sprache die charakteristische Funktion χ L von L ist gegeben durch: χ L (x ) = x L L heißt entscheidbar, wenn χ L (x ) berechenbar ist Eine RAM akzeptiert L, falls sie χ L berechnet wir haben gesehen, dass wir mit Hilfe der Syntaxanalyse entscheiden können, ob k die Gödelnummer eines syntaktisch korrekten RAM-Programms ist wir wenden uns jetzt der Frage zu, ob wir einem RAM-Programm ansehen können, ob es bei gegebenem Input hält seien (k, l) (N {}) (N {}) sei H = {(k, l) : k ist eine RAM M und M mit Input l hält } 55 / 82 56 / 82

Satz (Halteproblem) H ist nicht entscheidbar. Beweis: wir führen wieder den Diagonalisierungstrick durch angenommen, es existiert eine solche RAM M, die H entscheidet dann lässt sich eine zweite RAM M konstruieren mit j M, falls M(n, n) = (n, n) = nd, sonst im zweiten Fall hält M also nicht j M, falls M(n, n) = (n, n) = nd, sonst da M eine RAM ist, existiert eine Gödelnummer k von M was passiert, wenn wir M mit (k, k ) starten? M(k, k ) = M mit Input k hält M (k, k ) = M(k, k ) = d.h. M kann nicht existieren. 57 / 82 58 / 82 Gliederung Aufbau und Eigenschaften universelle RAM s RAM-Berechenbarkeit Nichtentscheidbarkeit Reduzierbarkeit Aufzählbarkeit mit dem Halteproblem haben wir ein erstes Problem als unentscheidbar erkannt das folgende Konzept wird uns helfen, weitere Probleme zu finden: seien L und L zwei Sprachen über dem Alphabet A L heißt reduzierbar auf L, wenn es eine berechenbare Funktion f : A A gibt mit x L f (x ) L Notation: L L L L L L, denn: die Umkehrfunktion muss nicht existieren wenn sie existiert, muss sie nicht berechenbar sein 59 / 82 6 / 82

Lemma (i) ist transitiv (ii) L L, L nicht entscheidbar = L nicht entscheidbar. Beweis: (i) sei L reduzierbar auf L mittels der berechenbaren Funktion f sei L reduzierbar auf L mittels der berechenbaren Funktion g dann gilt: x L f (x ) L und y L g(y ) L damit ist x L g(f (x )) L. g f ist berechenbar (schalte die beiden Programme hintereinander) damit folgt L L. Lemma (i) ist transitiv. (ii) L L, L nicht entscheidbar = L nicht entscheidbar. Beweis: (ii) ist L L mittels einer berechenbaren Funktion f, so ist χ L (x ) = x L f (x ) L χ L (f (x )) =, d.h. χ L = χ L f wäre L entscheidbar, so wäre per Definition χ L berechenbar da auch f berechenbar ist, folgt χ L f berechenbar somit wäre auch χ L berechenbar und damit L entscheidbar. 6 / 82 62 / 82 Satz Die folgenden Sprachen sind nicht entscheidbar: (i) H = {k : k ist eine RAM, die bei Input hält} (ii) H = {k : k ist eine RAM, die immer hält} Beweis: (i) wir zeigen H H wir müssen dazu eine berechenbare Funktion f konstruieren, so dass (k, l) H f (k, l) H sei k die Gödelnummer einer RAM und l die Gödelnummer eines Inputs wir konstruieren eine zweite RAM mit Gödelnummer k wie folgt: bei Eingabe einer Null verhält sich k wie k mit Eingabe l wird keine Null eingegeben, so geht k in eine Endlosschleife sei k die Gödelnummer einer RAM und l die Gödelnummer eines Inputs wir konstruieren eine zweite RAM mit Gödelnummer k wie folgt: bei Eingabe einer Null verhält sich k wie k mit Eingabe l wird keine Null eingegeben, so geht k in eine Endlosschleife wir behaupten, dass die folgende Funktion f : N {} N {} N {} eine Reduktionsfunktion ist: j k f (k, l) =, falls k Gödelnummer einer RAM (k, l), sonst f ist berechenbar: führe Syntaxanalyse von k durch falls positiv, gib Kodierung von k aus, andernfalls (k, l) (k, l) H k ist eine RAM, die bei Input l hält f (k, l) = k und k mit Input hält f (k, l) H. 63 / 82 64 / 82

Satz Die folgenden Sprachen sind nicht entscheidbar: (i) H = {k : k ist eine RAM, die bei Input hält} (ii) H = {k : k ist eine RAM, die immer hält} Bemerkung: mit L ist auch L = {, } L entscheidbar, denn χ L = χ L. Beweis: (ii) Wir zeigen H H. sei dazu k die Gödelnummer einer RAM sei k die Gödelnummer einer RAM, die sich für jeden Input wie k gestartet mit verhält. folgende Funktion ist berechenbar wir haben gesehen, dass eine RAM einer anderen nicht ansehen kann, ob sie hält oder an der Stelle definiert ist wir wollen zeigen, dass wir überhaupt keine speziellen Eigenschaften testen können j k f (k ) =, k, falls k eine RAM sonst k H k ist eine RAM, die bei Input hält f (k ) = k und k hält immer f (k ) H. 65 / 82 66 / 82 zwei RAM-Programme heißen äquivalent, wenn sie dieselbe partielle Funktion berechnen eine semantische Eigenschaft eines Programms ist eine Eigenschaft, die allen äquivalenten Programmen gemein ist Beispiele: bei Eingabe halten immer halten zieht die Wurzel aus dem Input berechnet die Funktion f nicht semantische Eigenschaften: verwendet keinen Sprungbefehl enthält mehr als 9 Anweisungen Satz (Rice) Eine semantische Eigenschaft von RAMs ist genau dann entscheidbar, wenn alle RAMs diese Eigenschaft haben oder keine. Beweis: sei E eine semantische Eigenschaft sei E = {k : k ist eine RAM mit Eigenschaft E} haben alle RAMs die Eigenschaft E, so ist E mittels Syntaxanalyse zu entscheiden hat keine RAM die Eigenschaft E, so ist E = und einfach zu entscheiden. 67 / 82 68 / 82

sei umgekehrt E eine Eigenschaft, die eine nichttriviale Teilmenge aller RAMs besitzen sei nd die überall nicht definierte Funktion nd ist berechenbar (nach einer früheren Beobachtung) wir unterscheiden zwei Fälle: a) nd hat Eigenschaft E oder b) nd hat Eigenschaft E nicht wir unterscheiden zwei Fälle: a) nd hat Eigenschaft E oder b) nd hat Eigenschaft E nicht im ersten Fall zeigen wir H E nach früheren Lemma ist dann E nicht entscheidbar damit ist auch E nicht entscheidbar im zweiten Fall zeigt man analog H E wir beschränken uns im folgenden auf den ersten Fall. 69 / 82 7 / 82 sei k eine RAM, die die Eigenschaft E nicht besitzt zu einer beliebigen RAM m bauen wir eine RAM m, die bei Input l folgendes leistet: m verhält sich wie m mit Input falls m mit Input hält, verhält sich m wie k mit Input l j k (l), falls m d.h. m H (l) = undefiniert, sonst als Reduktionsfunktion wählen wir j m, falls m H f (m) = undefiniert, sonst j k (l), falls m d.h. m H (l) = undefiniert, sonst als Reduktionsfunktion wählen wir j m, falls m H f (m) = undefiniert, sonst ) f ist berechenbar (lass M mit Input laufen, wenn M hält, gib M aus) 2a) m H m hält an der Stelle f (m) = m und m mit Input l berechnet k (l) f (m) ist eine RAM ohne Eigenschaft E f (m) E 2b) m H m hält an der Stelle nicht f (m) = nd E 7 / 82 72 / 82

bisher haben wir Probleme betrachtet, die nach dem Halten oder Nichthalten von fragen unter den nichtentscheidbaren Problemen gibt es auch natürlichere Fragestellungen Postsches Korrespondenzproblem gegeben: eine Menge von Paaren binärer Wörter {(x, y ), (x 2, y 2 ),..., (x n, y n )} gesucht: Indices i j, j =,... k mit i j n, so dass x i x i2... x ik = y i y i2... y ik Bemerkungen: es ist zugelassen, dass Indizes der Eingabefolge mehrmals auftauchen die Anzahl k der zu bestimmenden Paare ist a priori nicht beschränkt es sind Umsortierungen erlaubt, d.h. i j+ < i j Beispiel: die Paare (, ), (, ), (, ) haben die Lösung 2,,, 3 das Korrespondenzproblem, das in der Theorie formaler Sprachen eine Rolle spielt, ist nicht entscheidbar 73 / 82 74 / 82 bisher haben wir Probleme betrachtet, die nach dem Halten oder Nichthalten von fragen unter den nichtentscheidbaren Problemen gibt es auch natürlichere Fragestellungen Postsches Korrespondenzproblem gegeben: eine Menge von Paaren binärer Wörter {(x, y ), (x 2, y 2 ),..., (x n, y n )} gesucht: Indices i j, j =,... k mit i j n, so dass x i x i2... x ik = y i y i2... y ik Gliederung Aufbau und Eigenschaften universelle RAM s RAM-Berechenbarkeit Nichtentscheidbarkeit Reduzierbarkeit Aufzählbarkeit das Korrespondenzproblem, das in der Theorie formaler Sprachen eine Rolle spielt, ist nicht entscheidbar 75 / 82 76 / 82

ein untauglicher Versuch für das Halteproblem: gegeben (k, l), führe die RAM k mit Input l aus wenn k hält, ist die Antwort auf das Halteproblem klar, andernfalls können wir k nicht einfach abbrechen und behaupten, k halte nicht diese Beobachtung führt auf das folgende Konzept es hat zur Strukturierung nichtentscheidbarer Probleme beigetragen sei L {, } ein Sprache L ist (rekursiv) aufzählbar, wenn es eine total berechenbare Funktion f : {, } {, } gibt mit f ({, } ) = L identifizieren wir {, } mit N, dann zählt f : N {, } alle Elemente von L auf (eventuell mit Wiederholungen) schwächer als Berechenbarkeit: wir füttern f nacheinander mit, 2, 3,... f erzeugt eine Liste f (), f (2), f (3),... ist x L, so wird x irgendwann in der Liste erscheinen d.h., ist x L, so liefert f einen Nachweis dafür der Nachweis versagt jedoch, falls x / L. 77 / 82 78 / 82 Vorsicht vor Verwechslungen von aufzählbar mit abzählbar wir haben gesehen, dass die partiell berechenbaren Funktionen aufzählbar sind: erzeuge nacheinander alle {, }-Folgen interpretiere jede {, }-Folge als Kodierung eines RAM-Programms entferne die Folgen, die die Syntaxanalyse nicht passieren die total berechenbaren Funktionen sind jedoch nicht aufzählbar: angenommen f, f 2,... wäre eine solche Aufzählung sei g(n) = f n (n) + dann ist g total und berechenbar aber g ist nicht in der Aufzählung enthalten. dies ist wieder der Diagonalisierungstrick er versagt bei den partiellen Funktionen, weil diese auf der Diagonale nicht definiert sein müssen 79 / 82 8 / 82

Satz Eine Sprache L ist genau dann entscheidbar, wenn L und L aufzählbar sind. Beweisskizze: (i) sei M eine RAM, die L akzeptiert baue zwei RAMs M, M, die das folgende leisten: für einen gegeben Input x lassen beide M laufen gibt M eine aus, so schreiben M x und M ε auf ihr Ausgabeband gibt M eine aus, so schreiben M x und M ε auf ihr Ausgabeband dann gilt: f M = L und f M = L. Satz Eine Sprache L ist genau dann entscheidbar, wenn L und L aufzählbar sind. Beweisskizze: (ii) seien umgekehrt M und M 2 zwei RAM s, die L bzw. L aufzählen baue eine neue RAM M, die zu einem gegeben Input x das folgende leistet: für i =, 2,... füttert sie M und M 2 abwechselnd mit i M vergleicht die beiden Outputs mit x ist der Output von M gleich x, so gibt M eine aus und hält ist der Output von M 2 gleich x, so gibt M eine aus und hält andernfalls wird i erhöht dann ist f M = L. 8 / 82 82 / 82