Grundlagen der Theoretischen Informatik Wintersemester 2007 / 2008 Prof. Dr. Heribert Vollmer Institut für Theoretische Informatik 03.12.2007 Sprachen und Grammatiken
Alphabete, Zeichen und Symbole Ein Alphabet ist eine endliche, nichtleere Menge. Die Elemente eines Alphabets heiÿen auch Zeichen oder Symbole. Wie üblich: Ist M eine Menge, so bezeichnet M die Anzahl der Elemente von M. Wörter und Sprachen Sei Σ ein Alphabet. Ein Wort über Σ ist eine Folge von Symbolen aus Σ. Ein Wort entsteht also durch Hintereinanderschreiben (Konkatenation) von Symbolen aus Σ. Die Menge aller Wörter über dem Alphabet Σ bezeichnen wir mit Σ. Eine Sprache über Σ ist eine Menge von Wörtern über Σ, also eine Teilmenge von Σ.
Konkatenation Operation auf Wörtern: Konkatenation bzw. Hintereinanderschreiben Schreibweise: u v oder kurz uv für Konkatenation der Wörter u und v Die Länge eines Wortes w ist die Anzahl der Symbole in w. Schreibweise: w Konkatenation Für ein Wort w und n N ist w n die Konkatenation w n = w w w }{{} n mal Wir denieren: w 0 = ε. Mit ε wird das leere Wort bezeichnet. Es ist w n = n w. Schreibweise: Σ + = Σ \ {ε}
Denition Eine Grammatik ist ein 4-Tupel G = (V, Σ, P, S), wobei: V ist eine endliche Menge, die so genannte Menge der Variablen Σ ist ein Alphabet, das so genannte Terminalalphabet, mit V Σ = P ist die endliche Menge der Produktionen, P (V Σ) + (V Σ) S V ist die so genannte Startvariable Denition Sei G = (V, Σ, P, S) eine Grammatik und seien u, v (V Σ). Wir denieren eine Relation G wie folgt: u G v, falls u, v zerlegt werden können in Teilwörter u = xyz und v = xy z mit x, z (V Σ) und y y ist Regel in P. u geht unter (Anwendung einer Regel in) G unmittelbar über in v u G v, falls u = v oder es Wörter w1,..., w k (V Σ) gibt mit u = w1, w i G w i+1 für i = 1, 2...., k 1 und v = w k. Wir lassen den Index G weg, falls dieser eindeutig Die von G erzeugte Sprache ist L(G) = { w Σ S G w }. Eine Ableitung von w L(G) in k Schritten ist eine Folge (w0, w1,..., w k) mit w0 = S, w k = w und w i G w i+1 für i = 0, 1,..., k 1.
Die Chomsky-Hierarchie Denition Noam Chomsky (Pionier der Linguistik) teilte Grammatiken in vier Typen ein: Jede Grammatik ist vom Typ 0 (d. h. keine Einschränkungen) Eine Grammatik ist vom Typ 1 (oder: kontextsensitiv), falls für alle ihre Regeln u v gilt: u v Eine Typ-1-Grammatik ist vom Typ 2 (oder: kontextfrei), falls für alle ihre Regeln u v gilt, dass u eine einzelne Variable ist (d. h. u V )
Denition (Fortsetzung) Eine Typ-2-Grammatik ist vom Typ 3 (oder: regulär), falls für alle ihre Regeln u v gilt, dass v ein einzelnes Terminalzeichen ist (v Σ) oder v aus einem Terminalzeichen gefolgt von einer Variablen besteht Eine Sprache L Σ heiÿt vom Typ 0 (Typ 1, Typ 2, Typ 3), falls es eine Typ-0-Grammatik (Typ-1-Grammatik, Typ-2-Grammatik, Typ-3-Grammatik) G gibt mit L = L(G). Satz Das Wortproblem für Typ-1-Sprachen ist entscheidbar, d. h. es gibt einen Algorithmus, der bei Eingabe einer kontextsensitiven Grammatik G = (V, Σ, P, S) und eines Wortes w Σ nach endlicher Zeit mit der Ausgabe w L(G) oder w / L(G) anhält.
Reguläre Sprachen Denition Ein (deterministischer) endlicher Automat (kurz: DEA) ist ein 5-Tupel M = (Z, Σ, δ, z0, E), wobei für die einzelnen Komponenten gilt: Z ist eine endliche Menge, die so genannte Zustandsmenge Σ ist ein Alphabet, das so genannte Eingabealphabet, Z Σ = δ: Z Σ Z ist die so genannte Überführungsfunktion z0 Z ist der so genannte Startzustand E Z ist die Menge der so genannten Endzustände
Denition Sei M = (Z, Σ, δ, z0, E) ein DEA. Die erweiterte Überführungsfunktion ˆδ: Z Σ Z ist (induktiv) deniert wie folgt: ˆδ(z, ε) = z für alle z Z ˆδ(z, ax) = ˆδ(δ(z, a), x) für alle z Z, a Σ und x Σ Die von M akzeptierte Sprache ist L(M) = { x Σ ˆδ(z0, x) E }. Denition Ein nichtdeterministischer endlicher Automat (kurz: NEA) ist ein 5-Tupel M = (Z, Σ, δ, z0, E), wobei für die einzelnen Komponenten gilt: Z, Σ, z0 und E sind wie bei deterministischen endlichen Automaten deniert Für die Überführungsfunktion gilt: δ: Z Σ P(Z). P(Z) ist die Potenzmenge von Z. Für z Z und a Σ ist also δ(z, a) eine Menge von möglichen Folgezuständen
Denition Wir denieren ˆδ : P(Z) Σ P(Z) wie folgt: ˆδ(Z, ε) = Z für alle Z Z ˆδ(Z, ax) = z Z ˆδ(δ(z, a), x) für alle Z Z, a Σ und x Σ. Die von M akzeptierte Sprache ist L(M) = { x Σ ˆδ({z0}, x) E }. Satz Zu jedem NEA M existiert ein DEA M mit L(M) = L(M ).
Satz Sei L Σ eine Sprache. Es gibt einen DEA M mit L = L(M) gdw. es eine reguläre Grammatik G mit L = L(G) gibt. Satz (Pumping-Lemma, uvw-theorem) Sei L eine reguläre Sprache. Dann gibt es eine Zahl n, sodass sich alle Wörter x L mit x n zerlegen lassen in x = uvw, sodass folgende Eigenschaften gelten: 1 v 1 2 uv n 3 Für alle i 0 gilt: uv i w L.
Logische Struktur der Aussage des Pumping-Lemmas: (L regulär) ( n)( x L, x n)( u, v, w), [x = uvw und (1)(3) gelten] }{{} Aussage ( ) Nach dem Pumping-Lemma gilt: L regulär ( ). Die Umkehrung (d. h. ( ) L regulär) gilt im Allgemeinen nicht! Aber: ( ) gilt nicht L nicht regulär. In dieser Form wird das Pumping-Lemma meistens verwendet. Kontextfreie Sprachen
Denition Ein (nichtdeterministischer) Kellerautomat (NKA, Pushdown Automaton (PDA)) ist ein 7-Tupel M = (Z, Σ, Γ, δ, z0, #, E), wobei für die einzelnen Komponenten gilt: Z ist die endliche Menge der Zustände Σ ist das Eingabealphabet Γ ist das Kelleralphabet δ: Z Σ Γ P(Z Γ ) ist die Überführungsfunktion. Es gilt: δ(z, a, A) ist endlich für alle z Z, a Σ und A Γ z0 Z ist der Startzustand # Γ ist das unterste Kellersymbol E Z ist die Menge der Endzustände Beispiel 1a: L = { a n b n n 1 } w = aaabbb Zustand Rest der Eingabe Kellerinhalt Befehl z0 aaabbb # (1) z0 aabbb A (2) z0 abbb AA (3) z0 bbb AAA (4) z1 bb AA (6) z1 b A (7) z2 ε ε Damit gilt also aaabbb L(M).
Beispiel 1b: L = { a n b n n 1 } w = aaabb Zustand Rest der Eingabe Kellerinhalt Befehl z0 aaabb # (1),(2),(3) z0 bb AAA (4) z1 b AA (6) z1 ε A An dieser Stelle ist die Eingabe ganz gelesen und kein Endzustand erreicht worden, also gilt: aaabb / L(M). Beispiel 1c: L = { a n b n n 1 } w = abb Zustand Rest der Eingabe Kellerinhalt Befehl z0 abb # (1) z0 bb A (5) z2 b ε An dieser Stelle ist kein weiterer Befehl möglich und die Eingabe ist noch nicht vollständig gelesen worden, also gilt: abb / L(M).
Beispiel 2a: L = { w$w R w {a, b} + } w = ab$ba Zustand Rest der Eingabe Kellerinhalt z0 ab$ba # z0 b$ba A z0 $ba BA z1 ba BA z1 a A z2 ε ε Also ist ab$ba L(M). Beispiel 2b: L = { w$w R w {a, b} + } w = ab$bb Zustand Rest der Eingabe Kellerinhalt z0 ab$bb # z0 b$bb A z0 $bb BA z1 bb BA z1 b A keine weitere Bewegung möglich Also ist ab$bb / L(M).
Satz Eine Sprache L ist kontextfrei gdw. es einen NKA M gibt mit L = L(M). Beweis: Wird in der Vorlesung Formale Sprachen gebracht. Satz (Pumping-Lemma (uvwxy -Theorem)) Sei L eine kontextfreie Sprache. Dann gibt es eine Zahl n, sodass sich alle Wörter z L mit z n zerlegen lassen in z = uvwxy, sodass folgende Eigenschaften erfüllt sind: 1 vx 1 2 vwx n 3 Für alle i 0 gilt: uv i wx i y L
Logische Struktur der Aussage des Pumping-Lemmas: (L kontextfrei) ( n N)( z L, z n)( u, v, w, x, y), } [z = uvwxy (1)(3) gelten] {{ } ( ) Anwendung: Kontraposition des Satzes, also: ( ) gilt nicht L ist nicht kontextfrei. Typ-1- und Typ-0-Sprachen
Denition Eine Turingmaschine (TM) ist ein 7-Tupel M = (Z, Σ, Γ, δ, z0,, E), wobei für die einzelnen Komponenten gilt: Z ist die Menge der Zustände Σ ist das Eingabealphabet Γ Σ ist das Arbeitsalphabet z0 Z ist der Startzustand Γ \ Σ ist das Leerzeichen bzw. Blank E Z ist die Menge der Endzustände δ ist die Übergangsfunktion Denition (Fortsetzung) Bei deterministischen Turingmaschinen (DTM, TM) gilt: δ : Z Γ Z Γ {L, N, R} Bei nichtdeterministischen Turingmaschinen (NTM) gilt: δ : Z Γ P(Z Γ {L, N, R})
Denition Eine Konguration einer TM M = (Z, Σ, Γ, δ, z0,, E) ist ein Wort k = uzv, wobei u, v Γ und z Z. Denition Sei M = (Z, Σ, Γ, δ, z0,, E) eine TM. Wir denieren eine zweistellige Relation auf der Menge der Kongurationen wie folgt für z Z \ E : a1... amzb1... bn a1... amz cb2... bn, falls δ(z, b1) = (z, c, N), m 0, n 1 a1... amcz b2... bn, falls δ(z, b1) = (z, c, R), m 0, n 2 a1... z amcb2... bn, falls δ(z, b1) = (z, c, L), m 1, n 1
Sonderfälle n = 1, Maschine läuft nach rechts: a1... amzb1 a1... amcz, falls δ(z, b1) = (z, c, R), m 0 m = 0, Maschine läuft nach links: zb1... bn z cb2... bn, falls δ(z, b1) = (z, c, L), n 1 Für z E gibt es keine Konguration k mit a1... amzb1... bn k. Denition Die von einer Turingmaschine M = (Z, Σ, Γ, δ, z0,, E) akzeptierte Sprache ist L(M) = { w Σ z0w uzv für ein z E und u, v Γ }. Dabei ist ka ke, falls ka = ke oder es k1,..., kn gibt mit ka k1 kn ke. Also: Ein Wort wird akzeptiert, falls irgendwann ein Endzustand angenommen wird.
Denition Ein linear-beschränkter Automat (LBA) ist eine NTM mit folgenden Eigenschaften: M = (Z, Σ, Γ, δ, z0,, E) Γ \ Σ enthält zwei spezielle Symbole und, die so genannte linke bzw. rechte Bandendemarkierung Falls M liest, ist keine Kopfbewegung nach links erlaubt Falls M liest, ist keine Kopfbewegung nach rechts erlaubt Die Bandsymbole und dürfen nicht durch andere Zeichen überschrieben werden Die von M akzeptierte Sprache ist L(M) = { w Σ z0 w uzv für ein z E und u, v Γ }. Satz 1 Eine Sprache L ist kontextsensitiv (Typ 1) gdw. es einen LBA gibt mit L(M) = L 2 Eine Sprache L ist vom Typ 0 gdw. es eine TM M gibt mit L(M) = L gdw. es eine NTM M gibt mit L(M) = L
Bemerkung Es ist unbekannt, ob deterministische LBAen nicht schon die Klasse der Typ-1-Sprachen akzeptieren. LBA-Problem: Gibt es für jede Typ-1-Sprache einen deterministischen LBA, der sie akzeptiert? Der intuitive Berechenbarkeitsbegri
Berechenbarkeit Eine Funktion f : N k N heiÿt berechenbar, falls es ein Rechenverfahren bzw. einen Algorithmus gibt, das f berechnet, d. h. gestartet mit Eingabe (n1,..., n k) N k hält der Algorithmus nach endlich vielen Schritten mit Ausgabe f (n1,..., n k). Wir fordern nicht, dass f total sein muss, d. h. für gewisse (n1,..., n k) N k darf f (n1,..., n k) undeniert sein. In diesem Fall soll der Algorithmus nicht stoppen (Endlosschleife). Ziel: Präzisierung des Berechenbarkeitsbegris. Nur so ist es möglich, zu beweisen, dass eine Funktion nicht berechenbar ist.
Turing-Berechenbarkeit Denition Eine Funktion f : N k N heiÿt Turing-berechenbar, falls es eine DTM M gibt, sodass für alle n1,..., n k, m N gilt: f (n1,..., n k) = m M mit Eingabe bin(n1)#... #bin(n k) hält mit bin(m) auf dem Arbeitsband. f (n1,..., n k) undeniert M mit Eingabe bin(n1)#bin(n2)#... #bin(n k) stoppt nicht. bin(n) für n N bezeichnet die Binärdarstellung von n ohne führende Nullen.
Bemerkung Das Eingabealphabet einer TM, die eine Funktion über N im obigen Sinne berechnet, ist stets {0, 1, #}. Denition Eine Funktion f : Σ heiÿt Turing-berechenbar, falls es DTM M gibt, sodass für alle x Σ und y gilt: f (x) = y M mit Eingabe x hält mit y auf dem Arbeitsband. f (x) undeniert M mit Eingabe x stoppt nicht.
Mehrband-Maschinen Denition Eine k-band-dtm ist ein 7-Tupel M = (Z, Σ, Γ, δ, z0,, E), wobei für die einzelnen Komponenten gilt: Z, Σ, Γ, z0, und E sind wie bei einer 1-Band-DTM deniert. δ : }{{} Z }{{} Γ k }{{} Z }{{} Γ k {L, R, N} k mit }{{} (i) (ii) (iii) (iv) (v) (i) aktueller Zustand (ii) gelesene Zeichen auf den k Bändern (iii) neuer Zustand (iv) geschriebene Zeichen auf den k Bändern (v) Kopfbewegungen auf den k Bändern
Arbeitsweise Die Eingabe steht zunächst auf Band 1. Die Bänder 2 bis k sind zunächst leer. Die Maschine führt einzelne Schritte durch, analog zu gewöhnlichen DTMn. Akzeptierte Sprache: Das Eingabewort x wird akzeptiert gdw. M erreicht irgendwann einen Endzustand. Berechnete Funktion: f (n1,..., n k) = m gdw. M mit Eingabe bin(n1)#... #bin(n k) erreicht irgendwann einen Endzustand mit bin(m) auf Band 1. (Berechnung von Funktionen f : Σ analog.) Beispiel Folgende 2-Band-Turingmaschine akzeptiert { w#w w {0, 1} }: M = ({z0, z1, z2, z e}, {0, 1, #}, {0, 1, #, }, δ, z0,, {z e}), wobei für die Überführungsfunktion gilt: z00 z01 z000rr z011rr z0# z1# NL } } 0, 1 auf Band 1 werden auf Band 2 kopiert # auf Band 1 Zustand z1 z0 z0 NN z1#0 z1#1 z1#0nl z1#1nl } } Endlosschleife, falls kein # gefunden wird Kopf auf Band 2 nach links Kopf auf Band 1 bleibt auf #
Beispiel (Fortsetzung) z1# z2# RR } auf Band 2 Zustand z2 z200 z211 z201 z210 z200rr z211rr z201nn z210nn z2 ze NN } auf beiden Bändern nach rechts gehen, solange gleiche Zeichen gefunden werden } verschiedene Zeichen Endlosschleife } Alles gleich, daher fertig Beispiel (Fortsetzung) z20 z21 z2 0 z2 1 z2#0 z2#1 z2# z20 NN z21 NN z2 0NN z2 1NN z2#0nn z2#1nn z2# NN unterschiedliche Länge Endlosschleife Endlosschleife, falls zweites # gefunden wird
Satz Sei k > 1. Zu jeder k-band-dtm M gibt es eine (1-Band-)DTM M, sodass L(M) = L(M ) bzw. dass M und M dieselbe Funktion berechnen. Zusammensetzung von Turingmaschinen
1-Band nach k-band Sei M eine 1-Band-TM. Dann bezeichnet M(i, k) (1 i k), die k-band-tm, die auf Band i genau die Aktion ausführt, die M auf seinem Band ausführt, und die Bänder 1,..., i 1, i + 1,..., k unverändert lässt. Ist also z. B. in M δ(z, a) = (z, b, X ) mit X {L, N, R}, so ergibt sich für M(2, 4): δ(z, c1, a, c3, c4) = (z, c1, b, c3, c4, N, X, N, N) für alle c1, c3 und c4 aus dem Arbeitsalphabet von M (= Arbeitsalpahbet von M(2, 4)). Schreibweise: M(i) statt M(i, k), falls k aus dem Kontext klar. Hintereinanderschaltung von Turingmaschinen Seien M i = (Z i, Σ, Γ i, δ i, z 0,i,, E i) mit i = 1, 2 zwei DTMn mit o. B. d. A. Z1 Z2 =. Wir denieren daraus die neue Turingmaschine M = (Z1 Z2, Σ, Γ1 Γ2, δ, z0,1,, E2), wobei: δ1(z, a), δ(z, a) = δ2(z, a), (z0,2, a, N), falls z Z1 \ E1 und a Γ1 falls z Z2 und a Γ2 falls z E1 und a Γ1 Bezeichnungen für M: M1;M2 oder Start M1 M2 Stopp. Dies lässt sich analog denieren für mehr als zwei Maschinen.
Die Programmiersprache LOOP Syntaktische Komponenten von LOOP Variablen: x0, x1, x2,... Zur besseren Lesbarkeit werden wir auch Variablennamen wie z. B. uv, x, y, z,... benutzen. Konstanten: 0, 1, 2,... Operationszeichen: + und Trennsymbole: ; und := Schlüsselwörter: LOOP, DO und END
Syntax von LOOP Sind x i und x j Variablen und c eine Konstante, so sind x i := x j + c und x i := x j c LOOP-Programme. Sind P1 und P2 LOOP-Programme, so ist P1; P2 ein LOOP-Programm. Ist P ein LOOP-Programm und x i eine Variable, so ist LOOP x i DO P END ein LOOP-Programm. Semantik von LOOP Sei P ein LOOP-Programm. P berechnet eine Funktion f : N k N wie folgt: Zu Beginn der Rechnung benden sich Eingabewerte n1,..., n k N in den Variablen x1,..., x k. Alle anderen Variablen haben den Startwert 0. P wird wie folgt ausgeführt: Durch das Programm x i := x j + c erhält x i den Wert von x j + c. Durch das Programm x i := x j c erhält x i den Wert von x j c, falls dieser nicht negativ ist, ansonsten ist der Wert 0. Bei Ausführung von P1; P2 wird zunächst P1 und dann P2 ausgeführt. Ausführung des Programms LOOP x i DO P END: P wird so oft ausgeführt, wie der Wert der Variablen x i zu Beginn angibt, d. h. Zuweisungen an x i in P haben keinen Einuss auf die Anzahl der Wiederholungen.
Ergebnis der Ausführung von P f (n1,..., n k) = Wert von x0 am Ende der Ausführung. Eine Funktion f : N k N heiÿt LOOP-berechenbar, falls es ein LOOP-Programm gibt, das f wie soeben festgelegt berechnet. Beachte: Jedes LOOP-Programm hält nach endlich vielen Schritten an. Daraus folgt, dass jede LOOP-berechenbare Funktion total ist. Spezielle LOOP-Programme (1) x i := x j steht für x i := x j + 0.
Spezielle LOOP-Programme (2) x i := c (für eine Konstante c) steht für x i := x j + c (x j ist eine noch nicht benutzte Variable, die also den Wert 0 hat). Spezielle LOOP-Programme (3) IF x i = 0 THEN P END (für ein LOOP-Programm P) steht für x j := 1; LOOP x i DO x j := 0 END; LOOP x j DO P END. (x j ist eine Variable, die in P nicht vorkommt)
Spezielle LOOP-Programme (4) x i := x j + x k steht für x i := x j; LOOP x k DO x i := x i + 1 END. Spezielle LOOP-Programme (5) x i := x j x k steht für x i := 0; LOOP x k DO x i := x i + x j END.
Spezielle LOOP-Programme (6) Analog: x i := x j DIV x k x i := x j MOD x k Die Programmiersprache WHILE
Syntax von WHILE Erweiterung von LOOP: neues Schlüsselwort: WHILE Syntax: Ist P ein WHILE-Programm und x i eine Variable, so ist ein WHILE-Programm. WHILE x i 0 DO P END Semantik von WHILE Die Ausführung von WHILE x i 0 DO P END geschieht so, dass Programm P so lange wiederholt ausgeführt wird, wie der Wert von x i ungleich Null ist. P berechnet f : N k N wie folgt: Eingabewerte n1,..., n k in Variablen x1,..., x k, die anderen Variablen haben Startwert 0. f (n1,..., n k) ist der Wert von x0 nach der Ausführung von P, falls diese stoppt, ansonsten ist f (n1,..., n k) undeniert. Eine Funktion f heiÿt WHILE-berechenbar, falls es ein WHILE-Programm gibt, das f wie eben festgelegt berechnet.
Beispiel Das LOOP-Programm LOOP x DO P END kann simuliert werden durch y := x; WHILE y 0 DO y := y 1; P END. (Dabei ist y eine noch nicht verwendete Variable.) Korollar Jedes WHILE-Programm ist äquivalent zu (d. h. berechnet die gleiche Funktion) einem WHILE-Programm, in dem keine LOOP-Schleifen vorkommen.
Satz Jede WHILE-berechenbare Funktion ist Turing-berechenbar. Die Programmiersprache GOTO
GOTO Programme Ein GOTO-Programm ist eine Folge M1: A1; M2: A2;. M k: A k; wobei die M i so genannte Marken (Labels) sind und die A i Anweisungen sind. Mögliche Anweisungen Wertzuweisung: x i := x j ± c (x i und x j Variablen, c Konstante) Sprung: GOTO M i Bedingter Sprung: IF x i = c THEN GOTO M j (x i Variable, c Konstante) Stoppanweisung: HALT
Semantik von GOTO Bei Berechnung einer Funktion f : N k N stehen die k Eingabewerte zu Beginn in den Variablen x1,..., x k. Alle anderen Variablen haben Startwert 0. Die Ausführung von P startet mit der Ausführung der ersten Anweisung. Hierbei bedeutet: x i := x j ± c: x i erhält den Wert von x j ± c (falls dieser nicht negativ ist, ansonsten ist der Wert 0). Die Ausführung wird mit dem nächsten Statement fortgesetzt. GOTO M i : kein Variablenwert wird geändert. Fortsetzen der Ausführung mit dem Statement hinter der Marke M i. IF x i = c THEN GOTO M i : keine Änderung der Variablenwerte; falls Wert von x i gleich c, dann weiter mit Anweisung hinter Marke M i, sonst weiter mit der nächsten Anweisung. Das Programm HALTbeendet die Ausführung. Der Wert der berechneten Funktion f steht nach Beendigung des Programms in x0, undeniert falls Endlosschleife. Satz Jede WHILE-berechenbare Funktion ist GOTO-berechenbar.
Satz Jede GOTO-berechenbare Funktion ist auch WHILE-berechenbar. Korollar Jede WHILE-berechenbare Funktion kann durch ein WHILE-Programm mit nur einer WHILE-Schleife ersetzt werden.
Satz Jede Turing-berechenbare Funktion ist GOTO-berechenbar. Die Church'sche These
These von Church Eine Funktion ist berechenbar im intuitiven Sinne, gdw. sie Turing-berechenbar ist. (Nicht beweisbar, da berechenbar im intuitiven Sinne nicht formal gefasst.) Entscheidbarkeit und Aufzählbarkeit
Denition Eine Sprache A Σ heiÿt entscheidbar, wenn die Funktion c A : Σ {0, 1} mit { 1, falls w A c A(w) := 0, sonst berechenbar ist. c A heiÿt charakteristische Funktion von A. Denition Eine Sprache A Σ heiÿt semi-entscheidbar, wenn die Funktion χ A : Σ {0, 1} mit { 1, falls w A χ A(w) := undeniert, sonst berechenbar ist.
Beobachtung Sei A Σ. Es gilt: A ist entscheidbar gdw. A ist entscheidbar. Satz Sei A Σ. Es gilt: A ist entscheidbar gdw. A und A sind semi-entscheidbar.
Denition Eine Sprache A Σ heiÿt rekursiv-aufzählbar, falls A = oder falls es eine totale berechenbare Funktion f : N Σ gibt, sodass Wir sagen: f zählt A auf. A = {f (0), f (1), f (2),...}. Satz Eine Sprache ist rekursiv-aufzählbar gdw. sie semi-entscheidbar ist.
Korollar Eine Sprache A ist entscheidbar gdw. A und A rekursiv-aufzählbar sind. Satz Eine Sprache A Σ ist rekursiv-aufzählbar gdw. es eine berechenbare Funktion f : N Σ gibt, sodass A = {f (0), f (1), f (2),...}.
Satz Eine Sprache A Σ ist rekursiv-aufzählbar gdw. es eine entscheidbare Sprache B gibt, sodass A = {x Σ y : x, y B}. Unentscheidbare Probleme
Gödelisierung Sei w {0, 1}. Dann ist { M, falls w Gödelisierung von M Mw := M, sonst, wobei M eine festgehaltene Turingmaschine ist. Denition Das spezielle Halteproblem ist die Sprache K = { w {0, 1} Mw hält bei Eingabe w }
Beobachtung K ist rekursiv-aufzählbar. Satz K ist nicht entscheidbar.
Korollar K ist nicht rekursiv-aufzählbar. Denition Seien A Σ und B Γ Sprachen. A heiÿt auf B reduzierbar, in Zeichen: A B, falls es eine totale, berechenbare Funktion f : Σ Γ gibt, sodass für alle w Σ gilt: w A f (w) B
Lemma Ist A B und B entscheidbar, so ist A entscheidbar. Denition Das (allgemeine) Halteproblem ist die Sprache H = { w#x Mw hält bei Eingabe x }.
Satz H ist nicht entscheidbar. Zusammenfassung Sei A eine Sprache. Aus den bisherigen Resultaten ergibt sich, dass die folgenden Aussagen äquivalent sind: 1 A ist vom Typ 0. 2 A = L(M) für eine Turingmaschine M 3 A ist rekursiv-aufzählbar 4 A ist Wertebereich einer totalen berechenbaren Funktion oder A = 5 A ist semi-entscheidbar 6 A ist Denitionsbereich einer berechenbaren Funktion 7 A ist Wertebereich einer (eventuell partiellen) berechenbaren Funktion
Korollar Die Klasse der Typ-1-Sprachen ist eine echte Teilmenge der Klasse der Typ-0-Sprachen. Denition Das Halteproblem auf leerem Band ist die Sprache H0 = { w Mw angesetzt auf leerem Band hält }.
Satz H0 ist nicht entscheidbar. Satz Sei R die Klasse aller berechenbaren Funktionen. Sei S R mit S = und S = R. Die Sprache C(S) sei deniert als C(S) = { w die von Mw berechnete Funktion ist aus S }. Dann gilt: K C(S) oder K C(S)
Korollar (Satz von Rice) Sei R die Klasse aller berechenbaren Funktionen. Sei S R mit S = und S = R. Dann ist die Sprache C(S) = { w die von Mw berechnete Funktion ist aus S } nicht entscheidbar. Korollar Die folgenden Sprachen sind nicht entscheidbar: { w Mw berechnet eine totale Funktion } { w Mw berechnet eine monotone Funktion } { w Mw berechnet eine konstante Funktion } { w Mw berechnet die Funktion f (x) = x + 1 }