Theoretische Informatik I 1. Automatentheorie und formale Sprachen ...
Theoretische Informatik I 1. Automatentheorie und formale Sprachen ...
Theoretische Informatik I 1. Automatentheorie und formale Sprachen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Theoretische</strong> <strong>Informatik</strong> I<br />
<strong>1.</strong> <strong>Automatentheorie</strong> <strong>und</strong> <strong>formale</strong> <strong>Sprachen</strong><br />
<strong>1.</strong>1 Grammatiken<br />
<strong>1.</strong><strong>1.</strong>1 Definitionen<br />
<strong>1.</strong><strong>1.</strong>2 Chomsky-Hierarchie<br />
<strong>1.</strong><strong>1.</strong>3 Wortproblem<br />
<strong>1.</strong><strong>1.</strong>4 Syntaxbäume<br />
Grammatik:<br />
G = (V,∑,P,S)<br />
V = Menge der Variablen<br />
∑ = Terminalalphabet<br />
P = Menge der Produktionen<br />
S = Startvariable<br />
Sprache:<br />
L(G) = {w ∈ ∑ | S =>*G w}<br />
Ableitung:<br />
(w0, w1, ... , wn) mit w0 = S <strong>und</strong> wn ∈ ∑*<br />
<strong>und</strong> w0 => w1 => ... => wn heißt Ableitung<br />
Typ 0 (Phrasenstrukturgrammatik)<br />
=> alle Grammatiken<br />
Typ 1 (kontextsensitive Grammatik)<br />
=> Wörter werden durch Ableitung nicht kürzer<br />
Typ 2 (kontextfreie Grammatik)<br />
=> auf der linken Seite nur einzelne Variablen<br />
Typ 3 (reguläre Grammatik)<br />
=> die rechte Seite besteht entweder aus einem Terminalzeichen oder<br />
aus einem Terminalzeichen gefolgt von einer Variablen<br />
-Sonderregelung<br />
S => wird zugelassen<br />
=> S darf auf der rechten Seiten nicht mehr vorkommen<br />
=> <strong>1.</strong> S => rechten Seiten der S-Regeln (S ersetzt durch S')<br />
2. alle Regeln mit S ersetzen durch S'<br />
3. S => <br />
Das Wortproblem für Typ 1,2,3-<strong>Sprachen</strong> ist entscheidbar, d.h. es gibt einen<br />
Algorithmus, der bei eingabe einer kontextsensitiven Grammatik in endlicher Zeit<br />
entscheidet, ob das Wort in der Sprache liegt oder nicht.
Sei x ∈ L(G) <strong>und</strong> S = x0 => x1 => x2 => ... => xn = x eine Ableitung des Wortes.<br />
Die Wurzel des Baumes ist S, for i = 1 to n: wird die Variable A durch ein Wort z<br />
ersetzt, dann im Syntaxbaum |z| viele Söhne von A vorsehen, <strong>und</strong> mit den einzelnen<br />
Zeichen von z beschriften.<br />
Verschiedenen Ableitungen kann der selbe Syntaxbaum zugeordnet sein, jedoch kann es<br />
für das selbe Wort verschieden strukturierte Syntaxbäume geben. Mehrdeutigkeit kann<br />
oft aber nicht immer eliminiert werden. Unvermeidbare Mehrdeutigkeit wird auch als<br />
inhärent mehrdeutig bezeichnet <strong>und</strong> deren Feststellung ist im Allgemeinen algorithmisch<br />
unmöglich.<br />
<strong>1.</strong><strong>1.</strong>5 Backus-Naur-Form (BNF)<br />
Formalismus zum kompakten Niederschreiben von Typ 1,2,3-Grammatiken, d.h. EBNF<br />
<strong>und</strong> kontextfreie Grammatiken gleichwertig.<br />
Metaregel: A => 1 | 2 | ... | n ( => wird ersetzt durch :== )<br />
In der EBNF sind weiterhin vorgesehen:<br />
A => [] (das Wort kann, muß aber nicht eingefügt werden)<br />
A => {} (das Wort kann beliebig oft oder gar nicht eingefügt werden)<br />
<strong>1.</strong>2 Reguläre <strong>Sprachen</strong> (Typ 3)<br />
<strong>1.</strong>2.1 Endliche Automaten<br />
Ein Automat wird auf ein Eingabewort angesetzt <strong>und</strong> erkennt dieses oder nicht. Die<br />
Menge der Akzeptierten Wörter bildet dann die darstellbare oder definierte Sprache. Die<br />
Funktion eines Automaten ist quasi umgekehrt wie die einer Grammatik.<br />
endlicher Automat (DFA):<br />
M = (Z,∑,,z0,E)<br />
Z = Menge der Zustände<br />
∑ = Eingabealphabet<br />
z0 = Startzustand<br />
E = Menge der Endzustände<br />
= Überführungsfunktion<br />
Sprache:<br />
T(M) = { x ∈ ∑* | '(z0,x) ∈ E }<br />
mit '(z,) = z <strong>und</strong> '(z,ax) = '((z,a),x) (Erweiterung von auf Wörter)<br />
sowie '(z,a1,a2,...,an) = (... ((z,a1),a2)...,an)<br />
Erkennung läuft folgendermaßen: Die Zustände werden in Abhängigkeit des<br />
Eingabeworts durchlaufen <strong>und</strong> der letzte Zustand muß ein Endzustand sein, damit das<br />
Wort akzeptiert wird.<br />
Jede durch endliche Automaten erkennbare Sprache ist Typ 3.
<strong>1.</strong>2.2 Nichtdeterministische Automaten<br />
<strong>1.</strong>2.3 Reguläre Ausdrücke<br />
Der Unterschied zum DFA ist, daß von einem Zustand mehrere oder gar keine Pfeile<br />
ausgehen, die mit a ∈ ∑ beschriftet sind. Des weiteren sind mehrere Startzustände<br />
zugelassen. Ein Wort wird erkannt, wenn es mindestens eine Zustandsfolge gibt, die auf<br />
einen Endzustand führt.<br />
nichtdeterministischer, endlicher Automat (NFA):<br />
M = (Z,∑,,S,E)<br />
Z = Menge der Zustände<br />
∑ = Eingabealphabet<br />
S = Menge der Startzustände<br />
E = Menge der Endzustände<br />
= Überführungsfunktion<br />
Sprache:<br />
T(M) = { x ∈ ∑* | '(S,x) ∩ E ≠ 0 }<br />
mit '(Z',) = Z' für alle Z' ⊆ Z<br />
<strong>und</strong> '(Z',ax) = ∪ '('(z,a),x) mit z ∈ Z'<br />
Jede von einem NFA akzeptierbare Sprache ist auch durch einen DFA akzeptierbar.<br />
NFAs können reguläre <strong>Sprachen</strong> unter Umständen viel kompakter repräsentieren.<br />
NFA => DFA<br />
<strong>1.</strong> Startzustand bestimmen (z.B. {1,2}, d.h. 1+2 Sind die Startzustände)<br />
2. vom Startzustand aus alle möglichen Wegesuchen<br />
(z.B. '({1,2},a (<strong>und</strong> b)) = '(1,a) ∪ '(2,a) = ∅ ∪ {3,4})<br />
3. falls neue Zustände enstehen mit diesen wie bei 2. verfahren, bis keine mehr da<br />
5. Endzustände bestimmen (d.h. alle Paare, die mindestens einen Endzustand enthalten)<br />
4. Automaten zeichnen<br />
Für jede Typ 3-Grammatik G gibt es einen NFA M mit L(G) = T (M)<br />
=> keine reguläre Sprache ist inhärent mehrdeutig<br />
Ausdrücke:<br />
- ∅, sind reguläre Ausdrücke<br />
- falls a ∈ ∑, dann ist a ein regulärer Ausdruck<br />
- falls <strong>und</strong> reguläre Ausdrücke sind, dann auch , ( | ), (*)<br />
Sprache:<br />
- falls = ∅, dann L() = ∅<br />
- falls = , dann L() = {}<br />
- falls = a, dann L() = {a}<br />
- falls = , dann L() = L()L()<br />
- falls = | , dann L() = L() ∪ L()
<strong>1.</strong>2.4 Pumping Lemma<br />
- falls = ()*, dann L() = L()*<br />
Die Menge der durch reguläre Ausdrücke beschreibbaren <strong>Sprachen</strong> ist genau die Menge<br />
der regulären <strong>Sprachen</strong>.<br />
Sei L eine reguläre Sprache, dann gibt es eine Zahl n, so daß sich alle Wörter x mit<br />
|x| ≥ n zerlegen lassen in x = uvw, so daß folgende Eigenschaften gelten:<br />
<strong>1.</strong> |v| ≥ 1<br />
2. |uv| ≤ n<br />
3. für alle i = 0,1,2,... gilt: uv i w L<br />
Die typischen Anwendung des Pumping Lemmas ist der Nachweis, daß gewisse <strong>Sprachen</strong><br />
nicht regulär sind, was allerdings nicht bei jeder nicht-regulären Sprache gelingen muß.<br />
<strong>1.</strong>2.5 Äquivalenzrelationen <strong>und</strong> Minimalautomaten<br />
Definition:<br />
Es gilt x RL y genau dann, wenn für alle Wörter z ∑* gilt: xz L yz L<br />
Zwei Wörter x,y sind äquivalent, wenn sich beim Anfügen von z die Wörter xz <strong>und</strong> yz<br />
bezügl. Mitgliedschaft in L gleich verhalten.<br />
Eine Sprache L ist genau dann regulär, wenn der Index (Anzahl der erzeugten<br />
Äquivalenzklassen) endlich ist.<br />
Der Äquivalenzklassenautomat ist der Automat mit der kleinsten Anzahl an Zuständen,<br />
der so genannte Minimalautomat. Die Äquivalenzklassen bilden die Zustände dieses<br />
Automaten.<br />
Algorithmus Minimalautomat:<br />
<strong>1.</strong> Tabelle aller Zustandspaare {z,z'} mit z ≠ z'<br />
2. Markiere alle Paare {z,z'} mit z E <strong>und</strong> z' ∉ E (oder umgekehrt)<br />
3. Für jedes noch unmarkierte Paar {z,z'} <strong>und</strong> jedes a ∑ teste, ob<br />
{ (z,a), (z',a) } markiert ist, wenn ja {z,z'} markieren<br />
4. Punkt 3 wiederholen, bis keine Veränderungen mehr<br />
5. Alle jetzt noch unmarkierten Paare werden verschmolzen<br />
<strong>1.</strong>2.6 Abschlußeigenschaften<br />
Die regulären <strong>Sprachen</strong> (Typ 3) sind abgeschlossen unter:<br />
- Vereinigung<br />
- Schnitt<br />
- Komplement<br />
- Produkt<br />
- Stern
<strong>1.</strong>2.7 Entscheidbarkeit<br />
- Wortproblem (liegt x in L(G) bzw T(M)) ist entscheidbar<br />
- Leerheitsproblem (ist L(G) / T(M) = ∅) ist entscheidbar<br />
- Endlichkeitsproblem ( |L(G)| < ∞ ) ist entscheidbar<br />
- Schnittproblem (L(G1) ∩ L(G2) =? ∅) entscheidbar<br />
- Äquivalenzproblem (G1,G2 => L(G1) =? L(G2)) ist enscheidbar<br />
<strong>1.</strong>3 Kontextfreie <strong>Sprachen</strong> (Typ 2)<br />
<strong>1.</strong>3.1 Normalformen<br />
<strong>1.</strong>3.2 Pumping Lemma<br />
Jede kontextfreie Grammatik kann „-frei„ gemacht werden (siehe oben).<br />
Chomsky Normalform:<br />
Zu jeder kontextfreien Grammatik mit ∉ L(G), gibt es eine Chomsky Normalform,<br />
deren Regeln eine der beiden Formen haben:<br />
A => BC<br />
A => a<br />
=> Ableitungsbäume für solche Grammatiken sind bis auf den letzten Ableitungsschritt<br />
Binärbäume<br />
=> ein Wort x ∈ L(G) wird in genau 2|x|-1 Ableitungsschritten erzeugt<br />
Algorithmus:<br />
<strong>1.</strong> für jedes Terminalzeichen a wird eine neue Variable hinzugefügt sowie folgende<br />
Regel: B => a<br />
2. jedes Terminalzeichen auf der rechten Seite wird durch die jeweilige neue Variable<br />
ersetzt (außer die Regel hat bereits die Form A => a)<br />
3. Regeln der Form A => B1 B2 ... Bk , k ≥ 2 werden wie folgt geändert:<br />
A => B1 C2<br />
C2 => B2 C3<br />
....<br />
Ck-1 => Bk-1 Bk<br />
Greibach Normalform:<br />
Zu jeder kontextfreien Grammatik mit ∉ L(G), gibt es eine Greibach Normalform,<br />
deren Regeln alle die Form habe:<br />
A => a B1 B2 ... Bk (k ≥ 0)<br />
Algorithmus:<br />
<strong>1.</strong> Chomsky Normalform herstellen<br />
2. falls bei einer Regel die linke Seite einen größeren Index wie die erste Variable der<br />
rechten Seite, dann 2x diese mit Hilfe einer vorrangegangenen Regel ersetzen<br />
3. falls eine Regel links-rekursiv ist, ...
Sei L eine kontextfreie Sprache, dann gibt es eine Zahl n, so daß sich alle Wörter z mit<br />
|z| ≥ n zerlegen lassen in z = uvwxy, so daß folgende Eigenschaften gelten:<br />
<strong>1.</strong> |vx| ≥ 1<br />
2. |vwx| ≤ n<br />
3. für alle i = 0,1,2,... gilt: uv i wx i y L<br />
Jede kontextfreie Sprache über einem einelementigen Alphabet ist bereits regulär.<br />
<strong>1.</strong>3.3 Abschlußeigenschaften<br />
<strong>1.</strong>3.4 CYK-Algorithmus<br />
<strong>1.</strong>3.5 Kellerautomaten<br />
Die kontextfreien <strong>Sprachen</strong> (Typ 2) sind abgeschlossen unter:<br />
- Vereinigung<br />
- Produkt<br />
- Stern<br />
<strong>und</strong> nicht abgeschlossen unter:<br />
- Schnitt<br />
- Komplement<br />
Effizienter Algorithmus zum Lösen des Wortproblems für kontextfreie <strong>Sprachen</strong>, falls<br />
diese in Chomsky Normalform gegeben sind.<br />
Algorithmus:<br />
<strong>1.</strong> Dreiecksmatrix aufstellen mit Länge des Wortes<br />
2. erste Zeile mit Regeln füllen, die die Form A => ai haben <strong>und</strong> die obenstehenden<br />
Buchstaben des Eingabeworts erzeugen können<br />
3. for j=2 to n<br />
for i=1 to n+1-j<br />
for k=1 to j-1<br />
Feld T[i,j] mit Regel der Form A => BC füllen, falls<br />
T[i,k] <strong>und</strong> T[i+k,j-k] erzeugt werden kann<br />
4. steht im untersten Kästchen ein S, dann gehört das Wort zur Sprache<br />
Erweiterung des endlichen Automaten um kontextfreie <strong>Sprachen</strong> mittels eines<br />
„Speichers“ erkennen zu können, d.h. Automat muß wissen, welche Zeichen er schon<br />
gelesen hat. Beim Kellerautomaten wird das NFA-Modell um einen Stack erweitert.<br />
nichtdeterministischer Kellerautomat (PDA):<br />
M = (Z,∑,,,z0,#)<br />
Z = Menge der Zustände<br />
∑ = Eingabealphabet<br />
= Kelleralphabet
z0 = Startzustand<br />
= Überführungsfunktion<br />
# = unterstes Kellerzeichen<br />
Der Kellerautomat akzeptiert ein Wort, wenn nach dem Abarbeiten eines Wortes der<br />
Keller leer ist. Mehrere Startzustände können mit Hilfe von spontanen Übergängen (d.h.<br />
ohne Einlesen eines Zeichens) „emuliert“ werden.<br />
Akzeptierte Sprache:<br />
N(M) = { x ∈ ∑* | (z0,x,#) ∣−* (z,,) für ein z ∈ Z }<br />
Eine Sprache L ist kontextfrei, wenn L von einem nichtdeterministischen<br />
Kellerautomaten erkannt wird.<br />
<strong>1.</strong>3.6 Deterministisch kontextfreie <strong>Sprachen</strong><br />
<strong>1.</strong>3.7 Entscheidbarkeit<br />
Der Unterschied zum normalen Kellerautomaten ist, daß die Konfigurtionsbäume zu<br />
linearen Ketten „degenerieren“, d.h. aus der Relation ∣− wird eine Funktion. Ein DPDA<br />
erkennt deterministisch kontextfreie <strong>Sprachen</strong> per Endzustand, nicht per leerem Keller.<br />
Die deterministisch kontextfreien <strong>Sprachen</strong> sind abgeschlossen unter:<br />
- Komplement<br />
<strong>und</strong> nicht abgeschlossen unter:<br />
- Schnitt<br />
- Vereinigung<br />
Der Schnitt einer (deterministisch) kontextfreien Sprache mit einer regulären Sprache ist<br />
wieder (deterministisch) kontextfrei.<br />
- Wortproblem (liegt x in L(G) bzw T(M)) ist entscheidbar<br />
- Leerheitsproblem (ist L(G) / T(M) = ∅) ist entscheidbar<br />
- Endlichkeitsproblem ( |L(G)| < ∞) ist entscheidbar<br />
- Schnittproblem (L1,L2 => L1 =? L2 ) entscheidbar<br />
- Äquivalenzproblem (G1,G2 => L(G1) =? L(G2)) ist enscheidbar<br />
<strong>1.</strong>4 Kontextsensitive (Typ 1) <strong>und</strong> Typ 0-<strong>Sprachen</strong><br />
<strong>1.</strong>4.1 Kuroda Normalform<br />
<strong>1.</strong>4.2 Turingmaschiene<br />
Eine Typ 1-Grammatik ist in Kuroda Normalform, falls alle Regeln eine der Formen<br />
haben (was auch bei jeder Typ 1-Grammatik möglich ist):<br />
A => a A => B<br />
A => BC AB => CD
Touringmaschiene (TM):<br />
M = (Z,∑,,,z0, ,E)<br />
Z = Menge der Zustände<br />
∑ = Eingabealphabet<br />
= Arbeitsalphabet<br />
z0 = Startzustand<br />
= B lank<br />
= Überführungsfunktion<br />
E = Menge der Endzustände<br />
Akzeptierte Sprache:<br />
T(M) = { x ∈ ∑* | z0x ∣−* z, , ∈ *, z ∈ E }<br />
Die durch allgemeine Turingmaschienen akzeptierbaren <strong>Sprachen</strong> sind genau die Typ 0-<br />
<strong>Sprachen</strong>.<br />
<strong>1.</strong>4.3 Linear beschränkte Turingmaschiene<br />
2. Berechenbarkeitstheorie<br />
Eine LBA verläßt das Band nicht indem es den Startzustand markiert <strong>und</strong> eine schon<br />
markiertes letztes Zeichen benutzt, d.h. es arbeitet auf<br />
z0 a1 a2 ... an-1 ân statt auf z0 a1 a2 ... an-1 an<br />
Akzeptierte Sprache:<br />
T(M) = { a1 a2 ... an-1 an ∈ ∑* | z0 a1 a2 ... an-1 ân ∣−* z, , ∈ *, z ∈ E }<br />
Die von linear beschränkten, nichtdeterministischen Turingmaschienen (LBAs)<br />
akzeptierbaren <strong>Sprachen</strong> sind genau die kontextsensitiven (Typ 1) <strong>Sprachen</strong>.<br />
Die Klasse der kontextsensitiven (Typ 1) <strong>Sprachen</strong> ist unter Komplementbildung<br />
abgeschlossen.<br />
2.1 Berechenbarkeitsbegriff <strong>und</strong> Churchsche These<br />
Berechenbarkeitsbegriff:<br />
Eine Funktion f: N k => N wird als berechenbar angesehen, falls es ein Rechenverfahren /<br />
Algorithmus gibt, das f berechnet, d.h. es wird mit (n1, ..., nk) ∈ N k als Eingabe gestartet<br />
<strong>und</strong> der Algorithmus stoppt nach endlich vielen Schritten mit der Ausgabe f(n1, ..., nk).<br />
Churchsche These:<br />
Die durch die <strong>formale</strong> Definition der Turing-Berechenbarkeit erfasste Klasse von<br />
Funktionen stimmt genau mit der Klasse der im intuitiven Sinn berechenbaren<br />
Funktionen überein.<br />
2.2 Turingberechenbarkeit<br />
Definition für natürliche Zahlen:
Funktion f: Nk => N<br />
f(n1, ..., nk) = m<br />
z0 bin(n1) # ... # bin(nk) ∣−* ... z e bin(m) ...<br />
Definition für Wörter:<br />
Funktion f: ∑* => ∑*<br />
f(x) = y<br />
z0 x ∣−* ... ze y ...<br />
Jede Mehrbandturingmaschiene kann durch einen Einbandturingmaschiene simuliert<br />
werden.<br />
2.3 LOOP, WHILE, GOTO-Berechenbarkeit<br />
2.3.1 LOOP<br />
2.3.2 WHILE<br />
2.3.3 GOTO<br />
2.3.4 Zusammenfassung<br />
Aufbau:<br />
Variablen: x0, x1, x2, ...<br />
Konstanten: 1, 2, 3, ...<br />
Trennsymbole: ; <strong>und</strong> :=<br />
Operationszeichen: + <strong>und</strong> -<br />
Schlüsselwörter: LOOP, DO, END<br />
Erlaubt sind:<br />
Wertzuweisungen xi := xj + c<br />
Hintereinanderschaltungen: P1; P2<br />
If-Then-Anweisungen: IF x = 0 THEN A END<br />
Aufbau wie LOOP-Programme, jedoch Erweiterung um WHILE-Schleifen, d.h.<br />
Wiederholungen bis die Variable = 0 ist sind dadurch möglich. Nachträglich kann das<br />
LOOP-Konzept wieder fallengelassen werden, da dies durch WHILE simulierbar ist.<br />
Aufbau:<br />
Sequenz von Anweisungen Ai, die jeweils durch eine Marke Mi eingeleitet werden.<br />
Wertzuweisungen: xi := xj +/- c<br />
unbedingter Sprung: GOTO Mi<br />
bedingter Sprung: IF xi = c THEN GOTO Mj<br />
Stopanweisung: HALT<br />
- WHILE/GOTO/TM kann LOOP simulieren<br />
- GOTO <strong>und</strong> WHILE sind äquivalent<br />
- GOTO kann mit nur einer WHILE-Schleife simuliert werden<br />
- Turingmaschienen können WHILE/GOTO/LOOP simulieren
2.4 Primitiv rekursive <strong>und</strong> µ-rekusive Funktionen<br />
2.4.1 Primitv rekursive Funktionen<br />
Definition:<br />
<strong>1.</strong> alle konstanten Funktionen sind primitiv rekursiv<br />
2. alle identischen Abbildungen (Projektionen) sind primitiv rekursiv<br />
3. die Nachfolgerfunktion s(n) = n+1 auf N ist primitiv rekursiv<br />
4. jede Funktion, die durch Einsetzung (Komposition) von primitv rekursiven Funktionen<br />
entsteht ist auch wieder primitiv rekursiv<br />
5. jede Funktion, die durch so genannte primitive Rekursion aus primitiv rekursiven<br />
Funktionen entsteht ist auch wieder primitiv rekursiv. Primitive Rekursion bedeutet,<br />
daß die Definition von f(n+1,...) zurückgeführt wird auf f(n,....).<br />
<strong>1.</strong> - 3. werden als Basisfunktionen bezeichnet.<br />
Die Klasse der primitiv rekursiven Funktionen stimmt genau mit der Klasse der LOOPberechenbaren<br />
Funktionen überein.<br />
2.4.2 µ-rekursive Funktionen<br />
2.5 Ackermannfunktion<br />
Erweiterung der primitiv rekursiven Funktionen durch Hinzunahme des µ-Operators,<br />
wodurch wirklich partielle Funktionen entstehen.<br />
Der µ-Operator ist wie folgt definiert:<br />
µf(x1, ..., xk) =<br />
{ das kleinste n mit f(n, x1, ... , xk) = 0 <strong>und</strong> für alle m < n ist f(m, x1, ..., xk) def.<br />
{ ansonsten <strong>und</strong>efiniert<br />
Die Klasse der µ-rekursiven Funktionen stimmt genau mit der Klasse der<br />
WHILE/GOTO/TM-berechenbaren Funktionen überein.<br />
Für jede n-stellige µ-rekursive Funktion f gibt es zwei (n+1)-stellige, primitiv rekursive<br />
Funktionen p,q so daß sich f wiefolgt darstellen lässt:<br />
f(x1, ..., xn) = p(x1, ..., xn, µq(x1, ..., xn))<br />
a(0,y) = y+1<br />
a(x,0) = a(x-1,1) x > 0<br />
a(x,y) = a(x-1,a(x,y-1)) x,y > 0<br />
Es gilt:<br />
<strong>1.</strong> y < a(x,y)<br />
2. a(x,y) < a(x,y+1)<br />
3. a(x,y+1) ≤ a(x+1,y)<br />
4. a(x,y) < a(x+1,y)
Die Ackermannfunktion ist nicht LOOP-berechenbar.<br />
=> Es gibt totale, WHILE-berechenbare Funktionen, die nicht LOOP-berechenbar sind.<br />
2.6 Halteproblem, Unentscheidbarkeit, Reduzierbarkeit<br />
2.6.1 Enscheidbarkeit<br />
2.6.2 Halteprobleme<br />
Eine Menge A (aus ∑*) heißt entscheidbar, falls dir charakteristische Funtkion<br />
xA: ∑* => {0,1} berechenbar ist. Hierbei ist für alle w ∈ ∑*<br />
xA(w) = { 1, w ∈ A<br />
{ 0, w ∉ A (falls <strong>und</strong>efiniert: semi-entscheidbar)<br />
Eine Sprache ist entscheidbar genau dann wenn sowohl A als auch ¬A semi-entscheidbar<br />
sind.<br />
Eine Sprache A (aus ∑*) heißt rekursiv aufzählbar, falls A = ∅ oder falls es eine totale<br />
<strong>und</strong> berechenbare Funktion f gibt, so daß A = {f(0), f(1), f(2), ... }<br />
Eine Sprache ist rekursiv aufzählbar genau dann wenn sie semi-entscheidbar ist.<br />
Das spezielle Halteproblem (K = {w ∈ {0,1}* | Mw angesetzt auf w hält} ist nicht<br />
entscheidbar.<br />
Das Halteproblem (H = {w#x | Mw angesetzt auf x hält} ist nicht entscheidbar.<br />
Das Halteproblem auf leerem Band (H0 = {w | Mw angesetzt auf leerem Band hält) ist<br />
nicht entscheidbar.<br />
Satz von Rice:<br />
Sei R die Klasse aller Turing-berechenbaren Funktionen. Sei S eine beliebige Teilmenge<br />
hiervon (Ausnahmen S = ∅ <strong>und</strong> S = R), dann ist die Sprache<br />
unentscheidbar.<br />
2.7 Postsches Korrespondenzproblem PCP<br />
C(S) = {w | Die von Mw berechnete Funktion liegt in S}<br />
Gegeben ist eine endliche Folge von Wortpaaren (x1,y1), ..., (xk,yk), wobei xi, yi ∈ ∑ + .<br />
Gesucht ist eine Folge von Indizes i1, i2, ..., in ∈ {1, ..., k}, sodaß<br />
xi1 xi2 ... xin = yi1 yi2 ... yin<br />
Das PCB ist unentscheidbar, auch wenn man sich nur auf das Alphabet {0,1} beschränkt.<br />
H ≤ MPCP ≤ PCP
2.8 Gödelscher Satz<br />
Jede WHILE-berechenbare Funktion ist arithmetisch repräsentierbar.<br />
Die Menge der wahren arithmetischen Formeln ist nicht rekursiv aufzählbar.<br />
Jedes Beweissystem für die Menge der wahren arithmetischen Formeln ist<br />
notwendigerweise unvollständig, d.h. es bleiben immer wahre arithmetische Formeln<br />
übrig, die nicht beweisbar sind.