25.09.2013 Aufrufe

Theoretische Informatik I 1. Automatentheorie und formale Sprachen ...

Theoretische Informatik I 1. Automatentheorie und formale Sprachen ...

Theoretische Informatik I 1. Automatentheorie und formale Sprachen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!