# Theo # Teil 1: Formale Sprachen ## 1. Grundbegriffe: - Alphabet $\Sigma$: Endliche Menge - Wort / String über $\Sigma$: endliche Folge von Zeichen aus $\Sigma$ - |w|: Länge des Wortes w - Leeres Wort: $\epsilon$ - u, v: wörter -> uv: Konkatenation - w: wort, w^n^ definiert durch: w^0^ = $\epsilon$, w^n+1^ = ww^n^ - $\Sigma^*$: Menge aller Wörter über $\Sigma$ - Teilmenge $L \subseteq \Sigma^*$: (formale) Sprache ### Operationen auf Sprachen Seien $A, B \subseteq \Sigma^*$ - Konkatenation: AB = $\{uv | u \in A \land v \in B\}$ - Merke: {ab,b} $\times$ {a,bb} = {(ab,a),(ab,bb),(b,a),(b,bb)} - $A^n$ = $\{w_1 \cdots w_n | w_1, \dots, w_n \in A\}$ = $A \cdots A$ - $A^*$ = $\{w_1\cdots w_n | n \geq 0 \land w_1,\dots,w_n \in A$} = $\bigcup\limits_{n\in\mathbb{N}} A^n$ - $A^+$ = $AA^*$ = $\bigcup\limits_{n \geq 1} A^n$ **Achtung:** für alle A: $\epsilon \in A^*$, $\emptyset^* = \{\epsilon\}$ ### Einige Rechenregeln - $\emptyset A = \emptyset$ - $\{\epsilon\}A = A$ - $A(B \cup C) = AB \cup AC$ - $(A \cup B)C = AC \cup BC$ - $A^*A^* = A^*$ **Achtung:** i.A. gilt $A(B \cap C) = AB \cap AC$ *nicht*. ## 1.1 Grammatiken Eine Grammatik ist ein 4-Tupel G = (V, $\Sigma$, P, S), wobei: - V: endliche Menge von Nichtterminalen - $\Sigma$: endliche Menge von Terminalen, disjunkt von V, auch Alphabet genannt - $P \subseteq (V \cup \Sigma)^* \times (V \cup \Sigma)^*$: Endliche Menge von Produktionen - S $\in$ V: Startsymbol Eine Grammatik G = (V, $\Sigma$, P, S) induziert eine Ableitungsrelation $\rightarrow_G$ auf Wörtern über V $\cup \ \Sigma$ $\alpha \rightarrow_G \alpha' \iff \exists$ eine Regel $\beta \rightarrow \beta'$ in P und Wörter $\alpha_1, \alpha_2$, sodass: $\alpha = \alpha_1\beta\alpha_2$ und $\alpha' = \alpha_1\beta'\alpha_2$ Eine Sequenz $\alpha_1\rightarrow_G\cdots\rightarrow_G\alpha_n$ ist eine Ableitung von $\alpha_n$ aus $\alpha_1$ Wenn $\alpha_1 = S$ und $\alpha_n \in \Sigma^*$, dann erzeugt G das wort $\alpha_n$ Sprache von G: L(G): Menge aller wörter, die von G erzeugt werden ## 1.2 Chomsky-Hierarchie Eine Grammatik G ist vom Typ 0: Immer Typ 1: falls für jede Produktion $\alpha\rightarrow\beta$ außer $S\rightarrow \epsilon$ gilt: $|\alpha|\leq|\beta|$ Typ 2: falls G vom Typ 1 ist und für jede Produktion $\alpha\rightarrow\beta$ gilt: $\alpha\in V$ Typ 3: falls G vom Typ 2 ist und für jede Produktion $\alpha\rightarrow\beta$ außer $S\rightarrow\epsilon$ gilt: $\beta\in\Sigma\cup\Sigma V$ Offensichtlich: Typ 3 $\subset$ Typ 2 $\subset$ Typ 1 $\subset$ Typ 0 Grammatiken und Sprachklassen: Typ 3: Rechtslineare Grammatik: Reguläre Sprachen Typ 2: Kontextfreie Grammatik: Kontextfreie Sprachen Typ 1: Kontextsensitive Grammatik: Kontextsens. Sprachen Typ 0: Phasenstrukturgrammatik: Rekursiv aufzählbare Sprachen L(Typ 3) $\subset$ L(Typ 2) $\subset$ L(Typ 1) $\subset$ L(Typ 0) ## 2. Reguläre Sprachen ## 2.1 Deterministische endliche Automaten (DFAs) Ein DFA $M = (Q,\Sigma,\delta,q_0,F)$ besteht aus: - einer endlichen Menge an Zuständen Q - einem (endlichen) Eingabealphabet $\Sigma$ - einer (totalen) Übergangsfunktion $\delta : Q \times \Sigma \rightarrow Q$ - einem Startzustand $q_0\in Q$ - einer Menge $F \subseteq Q$ von Endzuständen - [ ] TODO: carlos camino DFA Eine Sprache ist regulär gdw. sie von einem DFA akzeptiert wird ## 2.2 Nichtdeterministische endliche Automaten (NFAs) Ein NFA ist ein 5-Tupel $N = (Q,\Sigma,\delta,q_0,F)$, so dass: - $Q, \Sigma, q_0$ und $F$ sind wie bei einem DFA - $\delta: Q \times \Sigma \rightarrow P(Q)$ $P(Q)$ = Menge aller Teilmengen von $Q = 2^Q$ Alternative: Relation $\delta \subseteq Q \times \Sigma \times Q$ - [ ] TODO: carlos camino NFA ## 2.3 Äquivalenz von NFA und DFA Für jeden NFA N gibt es einen DFA M mit L(N) = L(M) Für einen NFA mit n Zuständen kann der entsprechende DFA bis zu 2^n^ Zustände haben ## 2.4 NFAs mit $\epsilon$-Übergängen - Diese Erweiterung von NFAs macht sie nicht mächtiger - Aber man kann manche Sprachen einfacher beschreiben als nur mit NFAs Ein NFA mit $\epsilon$-Übergängen auch $\epsilon$-NFA ist ein NFA mit einem speziellen Symbol $\epsilon\not\in\Sigma$ und mit $\delta: Q\times(\Sigma\cup\{\epsilon\})\rightarrow P(Q)$ Ein $\epsilon$-Übergang darf ausgeführt werden, ohne dass ein Eingabezeichen gelesen wird Formal: $\epsilon$-NFA $N = (Q,\Sigma,\delta,q_0,F)$ als kompakte Repräsentation eines $\epsilon$-freien NFA $N' = (Q,\Sigma,\delta',q_0,F')$ Per Definition: Jeder $\epsilon$-NFA ist äquivalent zu einem NFA - [ ] TODO: carlos camino EDFA **Fazit:** Die Automatentypen - DFA - NFA - $\epsilon$-NFA sind gleich mächtig ## 2.5 Rechtslineare Grammatiken rechtslineare Grammatiken haben nur Produktionen der Form $A \rightarrow a, A \rightarrow aB$ und $S \rightarrow\epsilon$ Für jeden DFA M gibt es eine rechtslineare Grammatik G mit $L(M) = L(G)$ Für jede rechtslineare Grammatik G gibt es einen NFA M mit $L(G) = L(M)$ $\rightarrow$ das bedeutet auch: für jede rechtslineare Grammatik G gibt es einen DFA M mit $L(G) = L(M)$ - [ ] TODO: carlos camino RLG ## 2.6 Reguläre Ausdrücke Reguläre Ausdrücke sind eine weitere Notation für die Definition von formalen Sprachen, und sind induktiv definiert: - $\emptyset$ ist ein RE - $\epsilon$ ist ein RE - für jedes $a \in \Sigma$ ist a ein regulärer Ausdruck - Wenn $\alpha$ und $\beta$ reguläre ausdrücke sind, dann auch: - $\alpha\beta$ - $\alpha|\beta$, (oft $\alpha + \beta$ geschrieben) - $\alpha^*$ Nichts sonst ist ein regulärer Ausdruck Notation: - Reguläre Ausdrücke können bzw. müssen geklammert werden - Bindungsstärke: * stärker als Konkatenation stärker als | - $ab^* = a(b^*) \not = (ab)^*$ - $ab | c = (ab) | c \not = a(b|c)$ Sprache $L(\gamma)$ eines regulären Ausdrucks $\gamma$ ist rekursiv definiert: - $L(\emptyset) = \emptyset$ - $L(\epsilon) = \{\epsilon\}$ - $L(a) = \{a\}$ - $L(\alpha\beta) = L(\alpha)L(\beta)$ - $L(\alpha|\beta) = L(\alpha) \cup L(\beta)$ - $L(\alpha^*) = L(\alpha)^*$ Satz von Kleene: Eine Sprache $L \subseteq \Sigma^*$ ist genau dann durch einen regulären Ausdruck darstellbar, wenn sie regulär ist. - [ ] TODO: NFA Konstruktion, Carlos Camino Cleene Konversionen auf einen Blick: - $\epsilon$-NFA $\rightarrow$ NFA: Q ~> Q - NFA $\rightarrow$ DFA: n Zustände ~> O(2^n^) Zustände - NFA / DFA $\rightarrow$ RE: n Zustände ~> RE der Länge O(n4^n^) - RE $\rightarrow$ $\epsilon$-NFA: RE der Länge n ~> O(n) Zustände ## 2.7 Abschlusseigenschaften regulärer Sprachen Seien $R, R_1, R_2 \subseteq \Sigma^*$ Reguläre Sprachen. Dann sind auch: - $R_1R_2$ - $R_1 \cup R_2$ - $R^*$ - $\overline R$ $(:= \Sigma^* \backslash R)))$ - $R_1 \cap R_2$ - $R_1 \backslash R_2$ Reguläre Sprachen. **Bemerkung:** Komplementierung $(\overline R)$ durch vertauschen von Endzuständen und Nicht-Endzuständen funktioniert nur bei DFAs, nicht bei NFAs! Produkt-Konstruktion: Durchschnitt direkt auf DFAs, ohne Umweg via de Morgan. Beide DFAs laufen synchron parallel, Wort wird akzeptiert wenn beide DFAs akzeptieren. `Parallelismus = Kreuzprodukt der Zustandsräume` Die Umkehrung (Spiegelung) von $w = a_1 \dots a_n$ ist $w^R:= a_n \dots a_1$ Die Umkehrung einer Sprache $A$ ist $A^R := \{w^R|w \in A\}$ Ist $A$ eine reguläre Sprache, dann auch $A^R$ ## 2.8 Rechnen mit regulären Ausdrücken Zwei reguläre Ausdrücke sind äquivalent gdw. sie die gleiche Sprache darstellen: $$ \alpha \equiv \beta :\iff L(\alpha) = L(\beta) $$ #### Null und Eins - $\emptyset|\alpha \equiv \alpha|\emptyset \equiv \alpha$ - $\emptyset\alpha\equiv\alpha\emptyset\equiv\emptyset$ - $\epsilon\alpha\equiv\alpha\epsilon\equiv\alpha$ - $\emptyset^*\equiv\epsilon$ - $\epsilon^*\equiv\epsilon$ #### Assoziativität: - $(\alpha|\beta)|\gamma \equiv \alpha|(\beta|\gamma)$ - $(\alpha\beta)\gamma\equiv\alpha(\beta\gamma)$ #### Kommutativität - $\alpha|\beta \equiv \beta|\alpha$ #### Distributivität - $\alpha(\beta|\gamma)\equiv\alpha\beta|\alpha\gamma$ - $(\alpha|\beta)\gamma\equiv\alpha\gamma|\beta\gamma$ #### Idempotenz: - $\alpha|\alpha \equiv \alpha$ #### Stern: - $\epsilon|\alpha\alpha^*\equiv\alpha^*$ - $\alpha^*\alpha\equiv\alpha\alpha^*$ - $(\alpha^*)^*\equiv\alpha^*$ **Satz von Redko:** Es gibt keine endliche Menge von gültigen Äquivalenzen aus denen sich alle gültigen Äquivalenzen herleiten lassen. ## 2.9 Pumping Lemma für Reguläre Sprachen AKA: Wie zeigt man, dass eine Sprache nicht regulär ist? Sei $R\subseteq\Sigma^*$ regulär. Dann gibt es ein n > 0, so dass sich jedes $z\in R$ mit $|z|\geq n$ so in $z = uvw$ zerlegen lässt, dass: - $v\not=\epsilon$ - $|uv|\leq n$ - $\forall i \geq 0.\ uv^iw\in R$ - [ ] TODO: understand pumping lemma, carlos camino pumping lemma **Bemerkung:** Es gibt nicht-reguläre Sprachen, für die das Pumping-Lemma gilt! $\implies$ Pumping-Lemma hinreichend aber nicht notwendig um Nicht-Regularität zu zeigen **regulär $\subset$ Pumping-Lemma gilt $\subset$ alle Sprachen** ## 2.10 Entscheidungsverfahren Entscheidungsprobleme für reguläre Sprachen, d.h. Probleme der Gestalt - Eingabe: Ein oder mehrere Objekte, die reguläre Sprachen beschreiben (DFA, NFA, RE, Typ 3 Grammatik, etc.) - Frage: Haben diese Objekte die Eigenschaft X? Ein (Entscheidungs)Problem ist entscheidbar, wenn es einen Algorithmus gibt, der bei jeder Eingabe in endlicher Zeit die richtige Antwort gibt. Nicht alle Entscheidungsprobleme für Grammatiken sind entscheidbar Sei D ein DFA, NFA, RE, rechtslineare Grammatik, etc. - Wortproblem: Gegeben w und D, gilt $w\in L(D)$? - Entscheidbar in $O(|w|+|M|)$ für Wort w und DFA M - Entscheidbar in $O(|Q|^2|w|+|N|)$ für Wort w und NFA N - Leerheitsproblem: Gegeben D, gilt $L(D) = \emptyset$? - Entscheidbar in $O(|Q||\Sigma|) / O(|Q^2||\Sigma|)$ für DFAs/NFAs - Endlichkeitsproblem: Gegeben D, ist L(D) Endlich? - Entscheidbar für DFAs oder NFAs - Äquivalenzproblem: Gegeben $D_1, D_2$, gilt $L(D_1) = L(D_2)$? - Entscheidbar für DFAs in Zeit $O(|Q_1||Q_2||\Sigma|)$ - Entscheidbar für NFAs in Zeit $O(2^{|Q+1|+|Q_2|})$, bei fixem $\Sigma - Entscheidbar für reguläre Ausdrücke Fazit: Die Kodierung der Eingabe (DFA, NFA, RE, etc.) kann entscheidend für die Komplexität eines Problems sein ## 2.11 Automaten und Gleichungssysteme **Ardens Lemma:** Sind $A, B$ und $X$ Sprachen mit $\epsilon\not\in A$, so gilt $$ X = AX \cup B \implies X = A^*B $$ **Korollar** Sind $\alpha, \beta$ und $X$ reguläre Ausdrücke mit $\epsilon\not\in L(\alpha)$, so gilt $$ X \equiv \alpha X|\beta \implies X \equiv \alpha^*\beta $$ **Bemerkungen:** - $X = {\epsilon}X\cup B$ hat keine eindeutige Lösung: jede Sprache $X \supseteq B$ ist Lösung - $X\equiv aXb|\epsilon$ hat keine reguläre Lösung ## 2.12 Minimierung endlicher Automaten Jede reguläre Sprache hat einen einzigen minimalen DFA ### Algorithmus zur Minimierung eines DFA - Entferne alle von $q_0$ aus nicht erreichbaren Zustände - Berechne die äquivalenten Zustände des Automaten - Kollabiere den Automaten durch Zusammenfassung aller äquivalenten Zustände Zustäde p und q sind unterscheidbar wenn es $w \in\Sigma^\star$ gibt mit $\hat\delta(p,w)\in F$ und $\hat\delta(q,w)\not\in F$ Zustände sind äquivalent wenn sie nicht unterscheidbar sind, d.h. wenn für alle $w\in\Sigma^*$ gilt: $$ \hat\delta(p,w)\in F \iff \hat\delta(q,w)\in F $$ - gilt $p\in F$ und $q\not\in F$, dann sind p und q unterscheidbar - sind $\delta(p,a)$ und $\delta(q,a)$ unterscheidbar, dann auch p und q $\implies$ unterscheidbarkeit pflanzt sich rückwärts fort - [ ] Todo: Folie 107 tabellendings grafik erstellen, einsetzen, algorithmus U Eine weitere Anwendung: Äquivalenztest von DFAs - Gegeben DFAs A und B, bilde disjunkte Vereinigung. ("Male A und B nebeneinander") - Berechne Menge der äquivalenten Zustände - L(A) = L(B) gdw. die beiden Startzustände äquivalent sind ### Formale Definition des "kollabierten Automaten" Eine Relation $\approx\subseteq A\times A$ ist eine Äquivalenzrelation falls - Reflexivität: $\forall a\in A.\ a\approx a$ - Symmetrie: $\forall a,b\in A. \ a\approx b \implies b \approx a$ - Transitivität: $\forall a,b,c \in A. \ a\approx b \land b\approx c \implies a\approx c$ Äquivalenzklasse: $$ [a]_\approx := \{b | a \approx b\} $$ Es gilt: $$ [a]_\approx = [b]_\approx \iff a\approx b $$ Quotientenmenge: $$ A /\approx\ := \{[a]_\approx|a\in A\} $$ ### Äquivalenz von Zuständen Intuition: Zwei Zustände sind äquivalent gwd. sie dieselbe sprache erkennen. Wir schreiben $\equiv$ statt $\equiv_M$ wenn M klar ist Einfache Fakten: - $\equiv_M$ ist eine Äquivalenzrelation - $p\equiv_M q \implies \delta(p,a) \equiv_M \delta(q,a)$ - Algorithmus U liefert die unterscheidbaren Zustände, also $\not\equiv$. In der weiteren Analyse wird direkt auf $\equiv$ bezogen, nicht mehr auf den Algorithmus Die "Kollabierung" von M bzgl. $\equiv$ ist der Quotientenautomat: $$ M/\equiv \ :=(Q/\equiv, \Sigma, \delta',[q_0]_\equiv, F/\equiv)\\ \delta'([p]_\equiv , a) := [\delta(p,a)]_\equiv $$ Die Definition von $\delta'$ ist wohlgeformt da unabhängig von der Wahl des Repräsentanten p: $$ [p]_\equiv = [p']_\equiv \implies p \equiv p' \implies \delta(p,a) \equiv \delta(p',a) \implies [\delta(p,a)]_\equiv = [\delta(p',a)]_\equiv $$ Lemma: $$ L(M/\equiv) = L(M) $$ ### Minimalität des Quotientenautomaten Jede Sprache $L\subseteq \Sigma^*$ induziert eine Äquivalenzrelation $\equiv_L \subseteq\Sigma^*\times\Sigma^*$: $$ \hat\delta(q_0,u)\equiv_M\hat\delta(q_0,v)\iff u\equiv_{L(M)}v $$ **Achtung:** - $p\equiv_M q$ ist eine Relation auf Zuständen von M - $u\equiv_L v$ ist eine Relation auf Wörtern Ist M ein DFA ohne unerreichbare Zustände, so ist der von Algorithmus U berechnete Quotientenautomat $M/\equiv$ ein minimaler DFA für L(M) Alle Quotientenautomaten $M/\equiv_M$ für die gleiche Sprache L(M) haben die gleiche Struktur, d.h. sie unterscheiden sich nur durch eine Umbenennung der Zustände. Daher werden die Zustände des kanonischen Minimalautomaten für eine Sprache L mit $\equiv_L$ Äquivalenzklassen beschriftet. ### Satz von Myhill-Nerode Eine Sprache $L\subseteq\Sigma^*$ ist genau dann regulär, wenn $\equiv_L$ endlich viele Äquivalenzklassen hat. Vollständige Methode um Nichtregularität von L zu zeigen: Gib unendliche Menge $w_1,w_2\dots$ an, mit $w_i\not\equiv_L w_j$ falls $i\not=j$ **Bemerkung:** Eindeutigkeit des minimalen Automaten (modulo Umbenennung der Zustände) gilt nur bei DFAs, nicht bei NFAs! ## 3. Kontextfreie Sprachen ## 3.1 Kontextfreie Grammatiken (folie 126 maybe) Eine Kontextfreie Grammatik $G = (V,\Sigma,P,S)$ ist ein 4-Tupel: $V$: endliche Menge, Nichtterminale $\Sigma$: Alphabet, Terminale, disjunkt von V $P\subseteq V\times(V\cup\Sigma)^*$: Endliche Menge, Produktionen $S \in V$: Startsymbol Eine Kontextfreie Grammatik $G = (V,\Sigma,P,S)$ induziert eine Ableitungsrelation $\rightarrow_G$ auf wörtern über $V\cup\Sigma$: $$ \alpha\rightarrow_G\beta $$ gdw es eine Regel $A\rightarrow\gamma$ in P gibt, und Wörter $\alpha_1,\alpha_2$, sodass $\alpha = \alpha_1A\alpha_2$ und $\beta = \alpha_1\gamma\alpha_2$ $$ \alpha_1\rightarrow_G\alpha_2\rightarrow_G\cdots\rightarrow_G\alpha_n $$ wird als eine Linksableitung bezeichnet, gdw. in jedem Schritt das linkeste Nichtterminal ersetzt wird ### Kontextfreie Sprache Eine kontextfreie Grammatik $G = (V,\Sigma,P,S)$ erzeugt die Sprache $$ L(G):=\{w\in\Sigma^*|S\rightarrow^*_Gw\} $$ Eine Sprache $L\subseteq\Sigma^*$ ist kontextfrei gdw. es eine kontextfreie Grammatik G gibt mit L = L(G) **Abkürzungen:** - CFG: Kontextfreie Grammatik (context-free grammar) - CFL: Kontextfreie Sprache (context-free language) **Konvention:** Ist G aus dem Kontext eindeutig ersichtlich, so schreibt man auch nur $\alpha\rightarrow\beta$ statt $\alpha\rightarrow_G\beta$ **Linearität:** - Eine CFG ist rechtslinear gdw. jede Produktion der Form $A\rightarrow aB$ oder $A\rightarrow\epsilon$ ist - Eine CFG ist linkslinear gdw. jede Produktion der Form $A\rightarrow Ba$ oder $A\rightarrow\epsilon$ ist - Die rechtslinearen und linkslinearen Grammatiken erzeugen jeweils genau die regulären Sprachen. - -> Die regulären Sprachen sind somit eine echte Teilklasse der kontextfreien Sprachen Todo: - [ ] TODO: Dekompositionslemma folie 134 ## 3.2 Induktive Definitionen, Syntaxbäume und Ableitungen - Produktionen ($\rightarrow$) erzeugen Wörter top-down: von einem Nichtterminal zu einem Wort hin - Induktive Definitionen ($\implies$) erzeugen Wörter bottom-up: von kleineren Wörtern zu größeren - Induktive Definition betrachtet nur Wörter aus $\Sigma^*$ **Definitionen:** - Präfix: $u\preceq w :\iff \exists v. uv = w$ - Anzahl der Vorkommen: $\#_a(w):=$ Anzahl der Vorkommen von a in w **Beweisvarianten:** - "$w\in L_G(S)\implies P(w)$" wird immer schematisch mit Induktion über die Erzeugung von w - "$P(w)\implies w\in L_G(S)$" wird oft mit Induktion über $|w|$ bewiesen, erfordert meist Kreativität TODOs: - [ ] TODO: Folie 146 idk ### Syntaxbaum Ein Syntaxbaum für eine Ableitung mit einer Grammatik G ist ein Baum, sodass: - jedes Blatt mit einem Zeichen aus $\Sigma\cup\{\epsilon\}$ beschriftet ist - jeder innere Knoten mit einem $A\in V$ beschriftet ist, und falls die Nachfolger (von links nach rechts) mit $X_1,\dots,X_n\in V\cup\Sigma\cup\{\epsilon\}$, dann ist $A\rightarrow X_1\dots X_n$ eine Produktion in P - ein Blatt $\epsilon$ der einzige Nachfolger seines Vorgängers ist Für eine CFG und ein $w\in\Sigma^*$ sind folgende Bedingungen äquivalent: - $A\rightarrow_G^*w$ - $w\in L_G(A)$ (gemäß induktiver Definition) - Es gibt einen Syntaxbaum mit Wurzel A dessen Rand das wort W ist (Rand = Blätter von links nach rechts gelesen) **Mehrdeutigkeit:** - Ein CFG G ist mehrdeutig gdw. es ein $w \in L(G)$ gibt, das zwei verschiedene Syntaxbäume hat, also zwei verschiedene Syntaxbäume mit Wurzel S und Rand w - Eine CFL L heißt inhärent mehrdeutig gdw jede CFG G mit $L(G) = L$ mehrdeutig ist ## 3.3 Die Chomsky-Normalform Eine kontextfreie Grammatik G ist in Chomsky-Normalform gdw. alle Produktionen eine der Formen $A\rightarrow a$ oder $A\rightarrow BC$ haben. Zu jeder CFG G kann man eine CFG G' in Chomsky-Normalform konstruieren mit $L(G') = L(G)\backslash\{\epsilon\}$ Wer auf $\epsilon\in L(G')$ nicht verzichten möchte: Füge am Ende wieder $S\rightarrow\epsilon$ hinzu. $A\rightarrow\epsilon$ wird auch als $\epsilon$-Produktion bezeichnet Zu jeder CFG $G = (V,\Sigma,P,S)$ kann man eine CFG G' konstruieren, die keine $\epsilon$-Produktionen enthält, sodass gilt: $L(G')=L(G)\backslash\{\epsilon\}$ $A\rightarrow B$ wird Kettenproduktion genannt Zu jeder CFG $G = (V,\Sigma,P,S)$ kann man eine CFG G' konstruieren, die keine Kettenproduktionen enthält, sodass gilt $L(G')=L(G)$ ### Konstruktion einer Chomsky-Normalform Eingabe: Eine kontextfreie Grammatik $G = (V,\Sigma,P,S)$ - Füge für jedes $a\in\Sigma$ das in einer rechten Seite der Länge $\geq$ 2 vorkommt ein neues Nichtterminal $A_a$ zu V hinzu, ersetze a in allen rechten Seiten der Länge $\geq$ 2 durch $A_a$ und füge $A_a\rightarrow a$ zu P hinzu - Ersetze jede Produktion der Form $$ A\rightarrow B_1B_2\cdots B_k (k\geq3) $$ durch $$ A\rightarrow B_1C_2, C_2\rightarrow B_2C_3,\dots,C_{k-1}\rightarrow B_{k-1}B_k $$ wobei $C_2,\dots,C_{k-1}$ neue Nichtterminale sind - Eliminiere alle $\epsilon$-Produktionen - Eliminiere alle Kettenproduktionen ### Greibach-Normalform Eine CFG ist in Greibach-Normalform falls jede Produktion von der Form $$ A\rightarrow aA_1\dots A_n $$ ist Zu jeder CFG G gibt es eine CFG G' in Greibach-Normalform mit $L(G')=L(G)\backslash\{\epsilon\}$ ## 3.4 Das Pumping-Lemma für kontextfreie Sprachen Für jede kontextfreie Sprache L gibt es ein n $\geq$ 1, so dass sich jedes Wort $z\in L$ mit $|z|\geq n$ zerlegen lässt in $$ z = uvwxy $$ mit - $vx\not=\epsilon$ - $|vwx|\leq n$ - $\forall i\in\mathbb{N}. \ uv^iwx^iy\in L$ Siehe Folie 164 ## 3.5 Algorithmen für kontextfreie Grammatiken $G = (V,\Sigma,P,S)$ ist eine CFG Ein Symbol $X\in V\cup\Sigma$ ist: - Nützlich gdw es eine Ableitung $S\rightarrow_G^*w\in\Sigma^*$ gibt, in der $X$ vorkommt - erzeugend gdw es eine Ableitung $X\rightarrow_G^*w\in\Sigma^*$ gibt. - erreichbar gdw es eine Ableitung $S\rightarrow_G^*\alpha X\beta$ gibt. **Nützlich:** Nützliche Symbole sind erzeugend und erreichbar, aber nicht notwendigerweise umgekehrt. Folgliches Ziel: Elimination der unnützen Symbole und der Produktionen, in denen sie vorkommen Eliminiert man aus einer Grammatik $G$ - alle nicht erzeugenden Symbole, mit Resultat $G_1$ und - aus $G_1$ alle unerreichbaren Symbole, mit Resultat $G_2$, dann enthält $G_2$ nur noch nützliche Symbole und $L(G_2)=L(G)$ Die Menge der erzeugenden Symbole einer CFG ist berechenbar Die Menge der erreichbaren Symbole einer CFG ist berechenbar Das Wortproblem ($w\in L(G)?$) ist für eine CFG G entscheidbar ## 3.6 Der Cocke-Younger-Kasami-Algorithmus (CYK) Der CYK-Algorithmus entscheidet das Wortproblem für kontextfreie Grammatiken in Chomsky-Normalform. Eingabe: Grammatik $G = (V,\Sigma,P,S)$ in Chomsky-Normalform, $w=a_1\dots a_n\in\Sigma^*$ $$ V_{ij}:=\{A\in V | A\rightarrow_G^*a_i\dots a_j\} $$ für $i\leq j$ Damit gilt: $$ w\in L(G)\iff S\in V_{1n} $$ Der CYK-Algorithmus berechnet die $V_{ij}$ rekursiv nach wachsendem $j-i$: $$ V_{ii}=\{A\in V| (A\rightarrow a_i)\in P\}\\ V_{ij} = \{A\in V | \exists i \leq k \leq j, B\in V_{ik}, C \in V_{k+1,j}. \ (A\rightarrow BC) \in P\} $$ für $i\lt j$ Der CYK-Algorithmus entscheidet das Wortproblem $w\in L(G)$ für eine fixe CFG G in Chomsky-Normalform in Zeit $O(|w|^3)$ **Erweiterung:** Der CYK-Algorithmus kann so erweitert werden, dass er nicht nur das Wortproblem entscheidet, sondern auch die Menge der Syntaxbäume für die Eingabe berechnet. Realisierung: - $V_{ij}$ ist die Menge der Syntaxbäume mit Rand $a_i\dots a_j$ - Statt A enthält $V_{ij}$ die Syntaxbäume, dessen Wurzel mit A beschriftet ist. **Vorschau:** Für CFGs sind folgende Probleme nicht entscheidbar: - Äquivalenz - Schnittproblem - Regularität - Mehrdeutigkeit ## 3.7 Abschlusseigenschaften Seien kontextfreie Grammatiken $G_1 = (V_1,\Sigma_1,P_1,S_1)$ und $G_2 = (V_2,\Sigma_2,P_2,S_2)$ gegeben. Dann kann man in linearer Zeit CFGs für - $L(G_1)\cup L(G_2)$ - $L(G_1)L(G_2)$ - $(L(G_1))^*$ - $(L(G_1))^R$ konstruieren. Die Klasse der kontextfreien Sprachen ist also unter Vereinigung, Konkatenation, Stern und Spiegelung abgeschlossen. $\implies$ Verallgemeinerte kontextfreie Grammatiken mit Produktionen der Gestalt $X\rightarrow r$, wobei r ein regulärer Ausdruck über $(V\cup T)$ ist, erzeugen kontextfreie Sprachen. Die Menge der kontextfreien Sprachen ist **nicht** abgeschlossen unter Durchschnitt oder Komplement Wegen de Morgan können die CFLs daher auch nicht unter Komplement abgeschlossen sein. ## 3.8 Kellerautomaten Anwendungsgebiete: - Syntaxanalyse von Programmiersprachen - Analyse von Programmen mit Rekursion ### Definition Ein (nichtdeterministischer) Kellerautomat (PDA = Pushdown Automaton) $M = (Q,\Sigma,\Gamma,q_0,Z_0,\delta,F)$ besteht aus: - Q: Endliche Menge von Zuständen - $\Sigma$ endliches Eingabealphabet - $\Gamma$ endliches Kelleralphabet - $q_0\in Q$ Anfangszustand - $Z_0\in\Gamma$ initialer Kellerinhalt - $\delta$: Übergangsfunktion: $\delta : Q\times(\Sigma\cup\{\epsilon\})\times\Gamma\rightarrow P_e(Q\times\Gamma^*)$, $P_e$ = mente aller endlichen Teilmengen - $F\subseteq Q$ Endzustände Intuitive Bedeutung von $(q',\alpha)\in\delta(q,a,Z)$: Wenn sich M in Zustand q befindet, das Eingabezeichen a liest und Z das oberste Kellerzeichen ist, so kann M im nächsten Schritt in q' übergehen und Z durch $\alpha$ ersetzen **Achtung:** - $\alpha$ kann die Länge 0, 1 und mehr haben - Falls a = $\epsilon$: kein Eingabezeichen wird gelesen Eine Konfiguration eines Kellerautomaten M ist ein Tripel $(q,w,\alpha)$ mit $q\in Q, w\in\Sigma^*$ und $\alpha\in\Gamma^*$. Die Anfangskonfiguration von M für die Eingabe $w\in\Sigma^*$ ist $(q_0,w,Z_0)$ Intuitiv stellt eine Konfiguration $(q,w,\alpha)$ eine "Momentaufnahme" des Kellerautomaten dar: - Der momentane Zustand ist q - Der noch zu lesende Teil der Eingabe ist w - Der aktuelle Kellerinhalt ist $\alpha$ (das oberste Kellerzeichen ganz links stehend) Die Transitionsrelation $\rightarrow_M$ zwischen Konfigurationen: - $(q,aq,Z\alpha)\rightarrow_M(q',w,\beta\alpha)$ falls $(q',\beta)\in\delta(q,a,Z)$ - $(q,w,Z\alpha)\rightarrow_M(q',w,\beta\alpha)$ falls $(q',\beta)\in\delta(q,\epsilon,Z)$ Intuitive Bedeuting von $(q,w,\alpha)\rightarrow_M(q',w',\alpha')$: Wenn M sich in der Konfiguration $(q,w,\alpha)$ befindet, dann kann er in einen Schritt in die Nachfolgerkonfiguration $(q',w',\alpha')$ übergehen. **Achtung:** Eine Konfiguration kann mehrere Nachfolger haben (Nichtdeterminisumus) ### Akzeptanz Ein PDA M akzeptiert $w\in\Sigma^*$ mit Endzustand gdw - $(q_0,w,Z_0)\rightarrow_M^*(f,\epsilon,\gamma)$ für ein $f\in F, \gamma\in\Gamma^*$ - $L_F(M):=\{w|\exists f\in F,\gamma\in\Gamma^*.\ (q_0,w,Z_0)\rightarrow_M^*(f,\epsilon,\gamma)\}$ Ein PDA M akzeptiert $w\in\Sigma^*$ nit leeren Keller gdw - $(q_0,w,Z_0)\rightarrow_M^*(q,\epsilon,\epsilon)$ für ein $q\in Q$ - $L_\epsilon(M):=\{w|\exists q\in Q.\ (q_0,w,Z_0)\rightarrow_M^*(q,\epsilon,\epsilon)\}$ **Konvention:** Die F-Komponente von M wird ausgeblendet, wenn nur $L_\epsilon(M)$ von interesse ist. **Bemerkungen:** PDAs und das Wortproblem - Mit einem NFA A kann man $w\in L(A)$ durch pararllele Verfolgung aller Berechnungspfade entscheiden, da sie alle endlich sind. - Bei einem PDA kann es wegen $\epsilon$-Übergängen auch unendliche Berechnungen $\rightarrow_M$ geben, z.B. $\delta(q,\epsilon,Z)=(q,ZZ):$ $$ (q,w,Z)\rightarrow_M(q,w,ZZ)\rightarrow_M(q,w,ZZZ)\rightarrow_M\dots $$ Diese sind wegen des möglicherweise wachsenden oder pulsierenden Kellers nicht einfach zu eliminieren. - Daher ist es a priori unklar, wie man mit einem PDA das Wortproblem entscheidet. **Ziel:** Akzeptanz durch Endzustände und leeren Keller gleich mächtig Endzustand $\rightarrow$ Leerer Keller: Zu jedem PDA $M = (Q,\Sigma,\Gamma,q_0,Z_0,\delta,F)$ kann man in linearer Zeit einen PDA $M' = (Q',\Sigma,\Gamma',q'_0,Z'_0,\delta')$ konstruieren mit $L_F(M)=L_\epsilon(M')$ $$ (q_0,w,Z_0)\rightarrow_M^*(f,\epsilon,\gamma)\iff(q'_0,w,Z'_0)\rightarrow_{M'}^*(q,\epsilon,\epsilon) $$ Leerer Keller $\rightarrow$ Endzustand Zu jedem PDA $M = (Q,\Sigma,\Gamma,q_0,Z_0,\delta)$ kann man in linearer Zeit einen PDA $M' = (Q',\Sigma,\Gamma',q'_0,Z'_0,\delta',F)$ konstruieren mit $L_\epsilon(M)=L_F(M')$ ### beweishilfen: **Erweiterungslemma**: $$ (q,u,\alpha)\rightarrow_M^n(q',u',\alpha')\implies(q,uv,\alpha\beta)\rightarrow_M^n(q',u'v,\alpha'\beta) $$ **Zerlegungssatz**: Wenn $(q,w,Z_{1\dots k})\rightarrow_M^n(q',\epsilon,\epsilon)$, dann gibt es $u_i, p_i, n_i$, so dass: $$ (p_{i-1},u_i,Z_i)\rightarrow_M^{n_i}(p_i,\epsilon,\epsilon)\ \ \ \ \ (i=1,\dots,k) $$ und $w=u_1\dots u_k, p_0 = q, p_k = q', \sum n_i=n$. ## 3.9: Äquivalenz von PDAs und CFGs ### CFG$\rightarrow$PDA Zu jeder CFG G kann man einen PDA M konstruieren, der mit leerem Keller akzeptiert, so dass $L_\epsilon(M) = L(G)$ **Konstruktion:** Zuerst werden alle Produktionen G in die Form $$ A \rightarrow bB_1\dots B_k $$ gebracht, wobei $b\in\Sigma\cup\{\epsilon\}$ Methode: Für jedes $a\in\Sigma$ - füge ein neues $A_a$ zu V hinzu - ersetze a rechts in P durch $A_a$ (außer am Kopfende) - füge eine neue Produktion $A_a\rightarrow a$ hinzu Alle Produktionen in $G = (V,\Sigma,P,S)$ haben jetzt die Form $$ A\rightarrow bB_1\dots B_k $$ Der PDA wird wie folgt definiert: $$ M:= ({q},\Sigma,V,q,S,\Delta) $$ wobei $$ (A\rightarrow b\beta)\in P \implies \delta(q,b,A) \ni (q,\beta) $$ also für alle $b\in\Sigma\cup\{\epsilon\}$ und $A\in V$: $$ \delta(q,b,A):=\{(q,\beta)|(A\rightarrow b\beta)\in P\} $$ Jetzt gilt: - Für alle $u,v\in\Sigma^*$ und $\gamma\in V^*$ und $A\in V$ gilt: $A\rightarrow_G^n u\gamma$ mit Linksableitung gdw $(q,uv,A)\rightarrow_M^n(q,v,\gamma)$ - $L(G) = L_\epsilon(M)$ ### PDA $\rightarrow$ CFG Zu jedem PDA $M = (Q,\Sigma,\Gamma,q_0,Z_0,\delta,F)$, der mit leerem Keller akzeptiert, kann man eine CFG G konstruieren mit $L(G)=L_\epsilon(M)$ **Konstruktion:** $G:=(V,\Sigma,P,S)$ mit $V:=Q\times\Gamma\times Q\cup\{S\}$, wobei die Tripel mit [., ., .] notiert werden und P die folgenden Produktionene enthält: - $S\rightarrow[q_0,Z_0,q]$ für alle $q\in Q$ - Für alle $\delta(q,b,Z)\ni(r_0,Z_1\dots Z_k)$ und für alle $r_1,\dots,r_k\in Q$: $$ [q,Z,r_k]\rightarrow b[r_0,Z_1,r_1][r1,Z_2,r_2]\dots[r_k-1,Z_k,r_k] $$ idee: $[q,Z,r_k]\rightarrow_G^* w$ gdw. $(q,w,Z)\rightarrow_M^*(r_k,\epsilon,\epsilon)$ Die $r_1\dots r_k$ sind potenzielle Zwischenzustände beim Akzeptieren der Teilwörter von $bu_1\dots u_k = w$, die zu $Z_1\dots Z_k$ gehören. (Zerlegungssatz) **Lemma:** $[q,Z,p]\rightarrow_G^n w$ gdw $(q,w,Z)\rightarrow_M^n(p,\epsilon,\epsilon)$ Eine Sprache ist kontextfrei gdw. sie von einem Kellerautomaten akzeptiert wird. ## 3.10 Deterministische Kellerautomaten Ein PDA ist deterministisch (DPDA) gdw. für alle $q\in Q, a\in\Sigma$ und $Z\in\Gamma$ $$ |\delta(q,a,Z)|+|\delta(q,\epsilon,Z)|\leq 1 $$ Eine CFL ist deterministisch (DCFL) gdw. sie von einem DPDA akzeptiert wird. Man kann zeigen: Die CFL $\{ww^R|w\in\{0,1\}^*\}$ ist nicht deterministisch, da man jeden DFA leicht mit einem DPDA simulieren kann: **fakt:** jede reguläre Sprache ist eine DCFL Eine Sprache erfüllt die Präfix-Bedingung gdw sie keine zwei Wörter enthält, so dass eine ein echtes präfix eines anderen ist. **Lemma:** $\exists DPDA\ M.\ L=L_\epsilon(M) \iff \exists DPDA\ M.\ L=L_F(M)$ und L erfüllt die präfix-bedingung **Weitere Eigenschaften** - Die Klasse der DCFLs ist unter Komplement abgeschlossen. -> Da die CFLs nicht unter Komplement abgeschlossen sind sind DCFLs eine echte Teilklasse der CFLs - Die Klasse der DCFLs ist weder unter Schnitt noch unter Vereinigung abgeschlossen. - Jede DCFL ist nicht inhärent mehrdeutig, d.h. sie wird von einer nicht-mehrdeutigen Grammatik erzeugt. - Das Wortproblem ist für DCFLs in linearer Zeit lösbar. ## 3.11 Tabellarischer überblick ### Abschlusseigenschaften | | Schnitt | Vereinigung | Komplement | Produkt | Stern | |:------- |:-------:|:-----------:|:----------:|:-------:|:-----:| | Regulär | ja | ja | ja | ja | ja | | DCFL | nein | nein | ja | nein | nein | | CFL | nein | ja | nein | ja | ja | ### Entscheidbarkeit | | Wortproblem | Leerheit | Äquivalenz | Column 3 | |:---- |:-----------:|:--------:|:----------:|:---------:| | DFA | $O(n)$ | ja | ja | ja | | DPDA | $O(n)$ | ja | ja | nein$(*)$ | | CFG | $O(n^3)$ | ja | nein$(*)$ | nein$(*)$ | # Teil 2: Berechenbarkeit, Entscheidbarkeit, Komplexität ## 4. Berechenbarkeit, Entscheidbarkeit Überblick: - Was kann man berechnen? - Welche Funktionen kann man in endlicher Zeit berechnen? - Welche Eigenschaften von Objekten können in endlicher Zeit entschieden werden? - Mit welchen Sprachen / Maschinen? - Was kann man in polynomieller Zeit berechnen? ## 4.1 Der Begriff der Berechenbarkeit Eine Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ ist intuitiv berechenbar, wenn es einen Algorithmus gibt, der bei Eingabe $(n_1,\dots,n_k)\in\mathbb{N}^k$ - nach endlich vielen Schritten mit Ergebnis $f(n_1,\dots,n_k)$ hält, falls $f(n_1,\dots,n_k)$ definiert ist, - und nicht terminiert, falls $f(n_1,\dots,n_k)$ nicht definiert ist. **Achtung:** Berechenbarkeit setzt zwei verschiedene Dinge in Beziehung: - Algorithmen, d.h. endliche Wörter - Mathematische Funktionen, d.h. Mengen von Paaren. **Terminologie:** Eine Funktion $f:A\rightarrow B$ ist - Total gdw. $f(a)$ für alle $a\in A$ definiert ist. - partiell gdw. $f(a)$ auch undefiniert sein kann - echt partiell gdw $f(a)$ nicht total ist Es gibt nicht-berechenbare Funktionen $\mathbb{N}\rightarrow\{0,1\}$ **Erinnerung:** Eine Menge $M$ ist abzählbar, falls es eine injektive Funktion $M\rightarrow\mathbb{N}$ gibt. Äquivalente Definitionen: - Entweder gibt es eine Bijektion $M\rightarrow\{0,\dots,n\}$ für ein $n\in\mathbb{N}$, oder eine Bijektion $M\rightarrow\mathbb{N}$ - Es gibt eine Nummerierung der Elemente von M. Eine Menge ist Überabzählbar wenn sie nicht abzählbar ist **Abzählbarkeiten:** - $\Sigma^*$ ist abzählbar, falls $\Sigma$ endlich ist. - Die Menge der Algorithmen ist Abzählbar - Die Menge aller Funktionen $\mathbb{N}\rightarrow\{0,1\}$ ist überabzählbar - Wenn Algorithmen als endliche Wörter kodiert werden können, dann gibt es nicht-berechenbare Funktionen $\mathbb{N}\rightarrow\{0,1\}$ ### Church-Turing-These Der formale Begriff der Berechenbarkeit mit Turing-Maschinen (bzw. $\lambda$-Kalkül, etc.) stimmt mit dem intuitiven Berechenbarkeitsbegriff überein. Dies ist keine formale Aussage und nicht beweisbar, wird aber allgemein akzeptiert. ## 4.2 Turingmaschinen ### Definition Eine Turingmaschine (TM) ist ein 7-Tupel $M = (Q,\Sigma,\Gamma,\delta,q_0,\square,F)$ mit: - $Q$: Endliche Menge an Zuständen - $\Sigma$: Endliche menge des Eingabealphabets - $\Gamma$: Endliche Menge des Bandalphabets mit $\Sigma\subset\Gamma$ - $\delta: Q\times\Gamma\rightarrow Q\times\Gamma\times\{L,R,N\}$ ist die Übergangsfunktion. $\delta$ darf partiell sein. - $q_0\in Q$ ist der Startzustand - $\square\in\Gamma\backslash\Sigma$ ist das Leerzeichen - $F\subseteq Q$ ist die Menge der akzeptierenden oder endzustände **Annahme:** $\delta(q,a)$ ist nicht definiert für alle $q\in F$ und $a\in\Gamma$ Eine nichtdeterministische Turingmaschine hat eine Übergangsfunktion $\delta: Q\times\Gamma\rightarrow P(Q\times\Gamma\times\{L,R,N\})$ **Intuitive Bedeutung:** $\delta(q,a)=(q',b,D)$: - Wenn sich M im Zustand q befindet - und auf dem Band a liest - so geht M im nächsten Schritt in den Zustand q' über - überschreibt a mit b - und bewegt danach den Schreib-/Lesekopf nach rechts (falls D = R), nach links (falls D = L) oder nicht (falls D = N) ### Konfiguration: Eine Konfiguration einer Turingmaschine ist ein Tripel $(\alpha,q,\beta)\in\Gamma^*\times Q\times\Gamma^*$, welches modelliert: - Bandinhalt: $\dots\square\alpha\beta\square\dots$ - Zustand: q - Kopf auf dem ersten Zeichen von $\beta\square$ Die Startkonfiguration der Turingmaschine bei Eingabe $w\in\Sigma^*$ ist $(\epsilon,q_0,w)$ - [ ] TODO: slide 232????? ### Akzeptanz Eine Turingmaschine M akzeptiert die Sprache $$ L(M) = \{w\in\Sigma^*|\exists q\in F,\alpha,\beta\in\Gamma^*.\ (\epsilon,q_0,w)\rightarrow_M^*(\alpha,q,\beta)\} $$ Eine Funktion $f:\Sigma^*\rightarrow\Sigma^*$ ist Turing-berechenbar gdw es eine Turingmaschine M gibt, so dass für alle $u,v\in\Sigma^*$ gilt $$ f(u)=v\iff\exists r\in F. (\epsilon,q_0,u)\rightarrow_M^*(\square\dots\square,r,v\square\dots\square) $$ Eine Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ ist Turing-berechenbar gdw. es eine Turingmaschine M gibt, so dass für alle $n_1,\dots,n_k,m\in\mathbb{N}$ gilt $$ f(n_1,\dots,n_k) = m \iff\exists r\in F.\ (\epsilon,q_0,bin(n_1)\#bin(n_2)\#\dots\#bin(n_k))\rightarrow_M^*(\square\dots\square,r,bin(m)\square\dots\square) $$ wobei bin(n) die binärdarstellung der Zahl n ist. **Satz:** Die von Turingmaschinen akzeptierten Sprachen sind genau die Typ-0-Sprachen der Chomsky-Hierarchie. ### Halten/Terminieren Eine TM hält wenn sie eine Konfiguration $(\alpha,q,\alpha\beta)$ erreicht und $\delta(q,a)$ nicht definiert oder (bei einer nichtdeterministischen TM) $\delta(q,a)=\emptyset$. Nach Annahme hält eine TM immer, wenn sie einen Endzustand erreicht. Damit ist die von einer TM berechnete Funktion wohldefiniert. Eine TM kann auch halten, bevor sie einen Endzustand erreicht. ### Weiteres **Nichtdeterministische TMs** Zu jeder nichtdeterministischen TM N gibt es eine deterministische TM M mit $L(N)=L(M)$ **Mehrband-TMs / K-Band-TMs** Jede k-Band-TM kann effektiv durch eine 1-Band-TM simuliert werden ## 4.3 Programmieren mit Turingmaschinen Die folgenden Basismaschinen sind leicht programmierbar: - Band i := Band i+1 - Band i := Band i-1 - Band i = 0 - Band i = Band j Seien $M_i = (Q_i,\Sigma,\Gamma_i,\delta_i,q_i,\square,F_i),\ i=1,2$ Die sequentielle Komposition (hintereinanderschaltung) von $M_1$ und $M_2$ wird wie folgt bezeichnet $$ \rightarrow M_1\rightarrow M_2\rightarrow $$ Sie ist wie folgt definiert: $$ M := (Q_1\cup Q_2,\Sigma,\Gamma_1\cup\Gamma_2,\delta,q_1,\square,F_2) $$ wobei (oE) $Q_1\cap Q_2=\emptyset$ und $$ \delta:=\delta_1\cup\delta_2\cup\{(f_1,a)\mapsto(q_2,a,N)|f_1\in F_1, a\in\Gamma_1\} $$ **Fallunterscheidung** Sind $f_1$ und $f_2$ Endzustände von M so bezeichnet ![](https://i.imgur.com/h2yTMFN.png) eine Fallunterscheidung, d.h. eine TM, die vom Endzustand $f_1$ von $M$ nach $M_1$ übergeht, und von $f_2$ aus nach $M_2$ **"Band = 0?"** Die Folgende TM wird "Band=0?" bzw. "Band i = 0?" genannt: $$ \delta(q_0,0)=(q_0,0,R)\\ \delta(q_0,\square) = (ja,\square,L)\\ \delta(q_0,a) = (nein, a, N)\ \mathbb{für}\ a\not=0 $$ wobei ja und nein Endzustände sind. **Schleife** Analog zur Fallunterscheidung kann man auch eine TM für eine Schleife konstruieren ![](https://i.imgur.com/zI9QDv9.png) die sich wie `while` Band $i\not=0$`do` $M$ verhält. **Fazit:** Mit TM kann man imperativ programmieren: - := - ; - if - while ## 4.4 WHILE- und GOTO-Berechenbarkeit WHILE $\equiv$ strukturierte Programme mit while-Schleifen GOTO $\equiv$ Assembler WHILE- und GOTO-Berechenbarkeit werden definiert und dessen Äquivalenz mit Turing-berechenbarkeit wird gezeigt. ### WHILE-Programme: Syntax von WHILE-Programmen: ![](https://i.imgur.com/EUTpzyC.png) wobei $X$ eine der Variablen $x_0,x_1,\dots$ und C eine der Konstanten $0,1,\dots$ sein kann. Die modifizierte Differenz ist $m\dot-n:= \begin{cases} m-n & \text{falls } m\geq n\\ 0 & \text{sonst } \end{cases}$ **Semantik von WHILE-Programmen (informell):** - $x_i:=x_j+n$: Neuer Wert von $x_i$ ist $x_j+n$ - $x_i:=x_j-n$: Neuer Wert von $x_i$ ist $x_j\dot-n$ - $P_1;P_2$: Führe zuerst $P_1$ und dann $P_2$ aus - WHILE $x_i\not=0$ DO $P$ END: Führe $P$ aus bis die Variable $x_i$ (wenn je) den Wert 0 annimmt. **Syntaktische Abkürzungen:** - $x_i:=x_j \equiv x_i:=x_j + 0$ - $x_i:=n\equiv x_i:=x_j+n$ (wobei $x_j$ nirgends zugewiesen wird) - [ ] TODO: finish #### While-Berechenbarkeit Eine Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ ist WHILE-berechenbar gdw. es ein WHILE-Programm P gibt, sodass für alle $n_1,\dots,n_k\in\mathbb{N}$: P, gestartet mit $n_1,\dots,n_k$ in $x_1,\dots,x_k$ (0 in den anderen Variablen) - Terminiert mit $f(n_1,\dots,n_k)$ in $x_0$, falls $f(n_1,\dots,n_k)$ definiert ist, - terminiert nicht, falls $f(n_1,\dots,n_k)$ undefiniert ist. Turingmaschinen können WHILE-Programme simulieren: #### WHILE $\rightarrow$ TM Jede WHILE-berechenbare Funktion ist auch Turing-berechenbar, da: - jede Programmvariable auf 1 Band speichern - alle Konstrukte der WHILE-Sprache sind von Mehrband-TMs simulierbar - Mehrband-TMs sind von einband-TMs simulierbar. ### GOTO-Programme: Ein GOTO-Programm ist eine Sequenz von markierten Anweisungen: $$ M_1:A_1;\ M_2:A_2;\ \dots;\ M_k:A_k $$ (wobei alle Marken verschieden und Optional sind) Mögliche Anweisungen $A_i$ sind: - $x_i:=x_j+n$ - $x_i:=x_j-n$ - GOTO $M_i$ - IF $x_i=n$ GOTO $M_j$ - HALT Die Semantik ist wie erwartet. #### WHILE $\rightarrow$ GOTO Jedes WHILE-Programm kann durch ein GOTO-Programm simuliert werden. #### GOTO $\rightarrow$ WHILE Jedes GOTO-Programm kann durch ein WHILE-Programm simuliert werden. Für beweis: siehe Slide 253 **Korollar:** WHILE- und GOTO-Berechenbarkeit sind äquivalent **Kleensche Normalform:** Jedes WHILE-Programm ist zu einem WHILE-Programm mit genau einer WHILE-Schleife äquivalent #### TM $\rightarrow$ GOTO Jede TM kann durch ein GOTO-Programm simuliert werden. Übersetzung siehe Folien 256,257 ### LOOP-Berechenbarkeit / LOOP-Programme Statt while-Schleifen werden nun for-Schleifen betrachtet. LOOP-Programme haben die gleiche Syntax wie WHILE-Programme, aber statt der WHILE-Schleifen gibt es nur LOOP-Schleifen mit folgender Syntax: $$ \text{LOOP } X \text{ DO } P \text{ END} $$ Semantik: Führe P genau n mal aus, wobei n der Anfangswert von X ist. Zuweisungin an X in P ändern die Anzahl n der Schleifendurchläufe nicht. #### Loop-berechenbarkeit Eine Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ ist LOOP-berechenbar gdw. es ein LOOP-Programm P gibt, so dass für alle $n_1,\dots,n_k\in\mathbb{N}$: P, gestartet mit $n_1,\dots,n_k$ in $x_1,\dots,x_k$ (0 in den anderen Variablen) terminiert mit $f(n_1,\dots,n_k)$ in $x_0$ Alle LOOP-berechenbaren Funktionen sind total, beweis via Induktion über die Syntax der LOOP-Programme. **FAKT:** WHILE-Schleifen können LOOP-Schleifen simulieren, aber LOOP-Schleifen können WHILE-Schleifen nicht simulieren ## 4.5 Unentscheidbarkeit des Halteproblems **Ziel:** Es ist unentscheidbar, ob ein Programm terminiert. ### Definition: Eine Menge $A(\subseteq\mathbb{N}\text{ oder }\Sigma^*)$ ist entscheidbar gdw ihre charakteristische Funktion $$ \chi_A(x):= \begin{cases} 1 & \text{falls }x\in A\\ 0 & \text{falls }x\not\in A \end{cases} $$ berechenbar ist. Eine Eigenschaft/Problem P(x) ist entscheidbar gdw. $\{x|P(x)\}$ entscheidbar ist. **Komplement:** Die entscheidbaren Mengen sind abgeschlossen unter Komplement: Ist $A$ entscheidbar, so auch $\overline A$ **Kodierung einer TM als Wort über $\Sigma=\{0,1\}$:** Siehe Folie 300 Nicht jedes Wort über $\{0,1\}^*$ kodiert eine TM. Sei $\hat M$ eine beliebige feste TM: Die zu einem Wort $w\in\{0,1\}^*$ gehörige TM $M_w$ ist $$ M_w:= \begin{cases} M & \text{falls } w \text{ Kodierung von } M \text{ ist}\\ \hat M & \text{sonst} \end{cases} $$ Die Kondierung von syntaktischen Objekten (Programmen, Formeln, etc.) als Zahlen wird Gödelisierung genannt. Die Zahlen werden als Gödelnummern bezeichnet. **Definitionen:** - $M[w]$ ist abgekürzt für "Maschine $M$ mit Eingabe $w$" - $M[w]\downarrow$ bedeutet, dass $M[w]$ terminiert/hält ### Spezielles Halteproblem Gegeben: Ein Wort $w\in\{0,1\}^*$ Problem: Hält $M_w$ bei Eingabe w? Als Menge: $K:=\{w\in\{0,1\}^*|M_w[w]\downarrow\}$ Das Spezielle Halteproblem K ist nicht entscheidbar. Beweis: Folie 303, 304 ### (Allgemeines) Halteproblem Gegeben: Wörter $w,x\in\{0,1\}^*$ Problem: Hält $M_w$ bei Eingabe x? Als Menge: $H:=\{w\#x|M_w[x]\downarrow\}$ Das Halteproblem H ist nicht entscheidbar. Beweis: Wäre H entscheidbar, dann trivialerweise auch K: $$ \chi_K(w)=\chi_H(w,w) $$ ### Reduktion Eine Menge $A\subseteq\Sigma^*$ ist reduzierbar auf eine Menge $B\subseteq\Gamma^*$ gdw. es eine totale und berechenbare Funktion $f:\Sigma^*\rightarrow\Gamma^*$ gibt mit $$ \forall w\in\Sigma^*.\ w\in A\iff f(w)\in B $$ Es wird dann $A\leq B$ geschrieben **Intuition:** - $B$ ist mindestens so schwer zu lösen wie $A$. - ist $A$ unlösbar, dann auch $B$. - Ist $B$ lösbar, dann erst recht A. **Lemma:** Falls $A\leq B$ und $B$ ist entscheidbar, so ist auch $A$ entscheidbar. Falls $A\leq B$ und $A$ ist unentscheidbar, so ist $B$ auch unentscheidbar. ### Halteproblem auf leerem Band Das Halteproblem auf leerem Band, $H_0$, ist unentscheidbar. $$ H_0:=\{w\in\{0,1\}^*|M_w[\epsilon]\} $$ ### Fazit: Es gibt keine allgemeine algorithmische Methode, um zu entscheiden, ob ein Programm terminiert. Die Unentscheidbarkeit vieler Fragen über die Ausführung von Programmen folgt durch Reduktion des Halteproblems: - Kann ein WHILE-Programm mit einer bestimmten Eingabe einen bestimmten Programmpunkt erreichen? Der Spezialfall Programmpunkt = Programmende ist das Halteproblem - Kann Variable $x_7$ bei einer bestimmten Eingabe je den Wert $2^{32}$ erreichen? Redunktion: Ein Programm P hält gdw während der ausführung von $P; x_7:=2^{32}$ Variable $x_7$ den Wert $2^{32}$ erreicht. (OE: $x_7$ kommt in P nicht vor) **Hilberts 10. Problem:** Es ist unentscheidbar, ob ein Polynom in n Variablen mit ganzzahligen Koeffizienten eine ganzzahlige Nullstelle hat $(\in\mathbb{Z}^n)$ Beweis: $H\leq H_{10}$ -> Es müssen nicht immer TMs sein **Bemerkungen** - Nicht alle unentscheidbaren Probleme sind gleich schwer - Z.B. gilt: Das Äquivalenzproblem $E_q:=\{u\#v|M_u\text{ berechnet die gleiche Funktion wie } M_v\}$ ist schwerer als das Halteproblem: ## 4.6 Semi-Entscheidbarkeit ### Definition Eine Menge $A(\subseteq\mathbb{N}\text{ oder }\Sigma^*)$ ist semi-entscheidbar (s-e) gdw. $$ \chi'_a(x):= \begin{cases} 1 & \text{falls }x\in A\\ \bot & \text{falls } x\not\in A \end{cases} $$ berechenbar ist. **Entscheidbarkeit:** Eine Menge $A$ ist entscheidbar gdw. sowohl $A$ als auch $\overline A$ s-e sind. ### Rekursiv Aufzählbar Eine Menge A ist rekursiv aufzählbar (recursively enumerable) gdw. $A=\emptyset$ oder es eine berechenbare totale Funktion $f:\mathbb{N}\rightarrow A$ gibt, so dass $$ A = \{f(0),f(1),f(2),\dots\} $$ **Bemerkung:** - Es dürfen Elemente doppelt auftreten $(f(i) = f(j) \text{ für } i\not=j)$ - Die Reihenfolge ist beliebig **Warnung:** - Rekursiv aufzählbar $\not=$ Abzählbar - Aber: Rekursiv aufzählbar $\implies$ abzählbar - Aber nicht umgekehrt: Jede Sprache ist abzählbar, aber nicht jede Sprache ist rekursiv aufzählbar (siehe unten) **Lemma:** Eine Menge $A$ ist rekursiv aufzählbar gdw. sie semi-entscheidbar ist. Beweis: 317, 318 ### Äquivalente Aussagen - $A$ ist Semi-entscheidbar - $A$ ist rekursiv aufzählbar - $\chi'_A$ ist berechenbar - $A = L(M)$ für eine TM $M$ - $A$ ist Definitionsbereich einer berechenbaren Funktion - $A$ ist Wertebereich einer berechenbaren Funktion **K ist Semi-entscheidbar** Die Menge $K=\{w|M_w[w]\downarrow\}$ ist semi-entscheidbar. Beweis: Die funktion $\chi'_k$ ist wie folgt Turing-berechenbar: Bei Eingabe w simuliere die Ausführung von $M_w[w]$; gib 1 aus **Komplement** $\overline K$ ist nicht semi-entscheidbar. Semi-entscheidbarkeit ist nicht abgeschlossen unter Komplement ## 4.7: Die Sätze von Rice und Shapiro Die von der TM $M_w$ berechnete Funktion wird als $\varphi_w$ bezeichnet. Es werden implizit nur einstellige Funktionen betrachtet. ### Der Satz von Rice Sei F eine Menge berechenbarer Funktionen. Es gelte weder $F=\emptyset$ noch $F = \text{alle berechenbaren Funktionen}$ ("F nicht trivial") Dann ist unentscheidbar, ob die von einer gegebenen TM $M_w$ berechnete Funktion Element F ist, d.h. ob $\varphi_w\in F$ Alle nicht-trivialen semantischen Eigenschaften von Programmen sind unentscheidbar. **Warnung:** Im Satz von Rice geht es um die von einem Programm berechnete Funktion (Semantik), nicht um den Programmtext (Syntax). Beispielsweise ist es entscheidbar, ob ein Programm - länger als 5 Zeilen ist - Eine Zuweisung an die Variable $x_{17}$ enthält. ### Der Satz von Rice-Shapiro Sei $F$ eine Menge berechenbarer Funktionen. Ist $C_F:={w|\varphi_w\in F}$ semi-entscheidbar, so gilt für alle berechenbaren $f$: $f\in F\iff$ es gibt eine endliche Teilfunktion $g\subseteq f$ mit $g\in f$ ### Terminierend: Ein Programm ist terminierend gdw. es für alle eingaben hält. - Die Menge der terminierenden Programme ist nicht semi-entscheidbar - Die Menge der nicht-terminierenden Programme ist nicht semi-entscheidbar ### Grenzen automatischer Terminationsanalyse von Programmen - Termination ist unentscheidbar (Rice): Klare Ja/Nein Antwort unmöglich. - Termination ist nicht semi-entscheidbar (Rice-Shapiro) Es gibt kein Zertifizierungs-programm das alle terminierenden Programme erkennt. - Nicht-Termination ist nicht semi-entscheidbar (Rice-Shapiro): Es gibt keinen perfekten bug finder der alle nicht-terminierenden Programme erkennt. Aber es gibt mächtige heuristische Verfahren, die für relativ viele Programme aus der Praxis (Gerätetreiber) - Termination beweisen können, oder - Gegenbeispiele finden können. ## 4.8: Das Postsche Korrespondenzproblem ### Definition **Postsche Korrespondenzproblem, Post's Correspondence Problem, PCP:** Gegeben: Eine endliche Folge $(x_1,y_1),\dots,(x_k,y_k)$, wobei $x_i,y_i\in\Sigma^+$ Problem: Gibt es eine Folge von Indizes $i_i,\dots,i_n\in\{1,\dots,k\}$, $n\gt 0$, mit $x_{i_1}\dots x_{i_n} = y_{i_1}\dots y_{i_n}$? Dann wird $i_1,\dots,i_n$ als eine Lösung der Instanz $(x_1,y_1),\dots,(x_k,y_k)$ des PCP Problems bezeichnet. ### Entscheidbarkeit des PCP Das PCP ist semi-entscheidbar **Beweis:** Die möglichen Lösungen werden der Länge nach aufgezählt und auf korrektheit überprüft. ### Modifiziertes PCP, MPCP Gegeben: wie beim PCP Problem: Gibt es eine Lösung $i_1,\dots,i_n$ mit $i_1=1$? **Reduzierbarkeit des MPCP** $MPCP \leq PCP$ $H\leq MPCP$ **Unentscheidbarkeit des PCP** Aus $H\leq PCP$ folgt direkt, dass das PCP unentscheidbar ist Das PCP ist auch für $\Sigma = \{0,1\}$ unentscheidbar. **Weitere bemerkungen:** - Das PCP ist entscheidbar falls $|\Sigma| = 1$ - Das PCP ist entscheidbar falls $k\leq 2$ - Das PCP ist unentscheidbar falls $k \geq 5$ - Für $k=3,4$ ist noch offen, ob das PCP unentscheidbar ist. ## 4.9 Unentscheidbare CFG-Probleme - Für DFAs ist fast alles entscheidbar: $L(A)=\emptyset, L(A)=L(B),\dots$ - Für TMs ist fast nichts entscheidbar: $L(M)=\emptyset, L(M_1)=L(M_2),\dots$ - Für CFGs ist manches entscheidbar $(L(G)=\emptyset, w\in L(G))$, und manches unentscheidbar ### Unentscheidbare Probleme: Für CFGs $G_1, G_2$ sind folgende Probleme unentscheidbar: - $P_1$: ist $L(G_1)\cap L(G_2) = \emptyset$? -> Beweis: Folie 340 - $P_2$: ist $|L(G_1)\cap L(G_2)| = \infty$? -> Beweis: Folie 343 - $P_3$: ist $L(G_1)\cap L(G_2)$ kontextfrei? -> Beweis: Folie 343 - $P_4$: ist $L(G_1)\subseteq L(G_2)$? -> Beweis: Folie 344 - $P_5$: ist $L(G_1) = L(G_2)$? -> Beweis: Folie 344 Da $L(G_1)$ und $L(G_2)$ aus dem Beweis zu $P_1$ DCFL sind, gilt sogar, dass die Probleme $P_1$ bis $P_4$ bereits für DCFLs unentscheidbar sind. Für zwei DPDAs $M_1$ und $M_2$ ist $L(M_1)=L(M_2)$ jedoch entscheidbar. ### Weitere unentscheidbare Probleme: Für eine CFG $G$ sind folgende Probleme unentscheidbar: - Ist $G$ mehrdeutig? - Ist $L(G)$ regulär? - Ist $L(G)$ deterministisch (DCFL)? Für eine CFG $G$ und einen RE $\alpha$ ist $L(G)=L(\alpha)$ unentscheidbar ## 4.10 Primitiv Rekursive Funktionen Es werden Funktionen $\mathbb{N}^k\rightarrow\mathbb{N},k\geq0$ betrachtet. $\mathbb{N}^0\rightarrow\mathbb{N}$ wird mit $\mathbb{N}$ identifiziert, $c()$ mit $c$. **Definition der primitiv rekursiven Funktionen** - Fixe Basisfunktion: z.B. $s(x)=x+1$ - Funktionskomposition: z.B. $f(x,y)=g(x,h(x,y))$ - Fixe Art der Rekursion: z.B. $f(0)=1\\f(n+1)=n*f(n)$ ### Basisfunktionen - Die konstante Funktion 0 - Die Nachfolgerfunktion $s(n)=n+1$ - Die Projektionsfunktionen $\pi_i^k:\mathbb{N}^k\rightarrow\mathbb{N},1\leq i\leq k:$ $$ \pi_i^k(x_1,\dots,x_k)=x_i $$ ### Komposition Die Komposition von $g$ und $h_1,\dots,h_k$ erzeugt die Funktion $f$ $$ f(\bar{x})=g(h_1(\bar{x}),\dots,h_k(\bar{x})) $$ wobei $\bar{x}=(x_1,\dots,x_n)$ und $$ f:\mathbb{N}^n\rightarrow\mathbb{N}\\ g:\mathbb{N}^k\rightarrow\mathbb{N}\\ h_i:\mathbb{N}^n\rightarrow\mathbb{N} \quad (i=1,\dots,k) $$ ### Primitive Rekursion Das Schema der primitiven Rekursion erzeugt aus $g$ und $h$ die Funktion $f$ $$ f(0,\bar{x})=g(\bar{x})\\ f(m+1,\bar{x})=h(f(m,\bar{x}),m,\bar{x}) $$ wobei $\bar{x}=(x_1,\dots,x_n)$ und $$ f:\mathbb{N}^{n+1}\rightarrow\mathbb{N}\\ g:\mathbb{N}^n\rightarrow\mathbb{N}\\ h:\mathbb{N}^{n+2}\rightarrow\mathbb{N} $$ ### Primitiv Rekursive Funktionen Die Menge PR der primitiv rekursiven Funktionen ist die folgende induktiv definierte Teilmenge aller Funktionen $\mathbb{N}^k\rightarrow\mathbb{N}, k\geq 0$: - Die Basisfunktinen 0, $s$, und $\pi_i^k$ sind primitiv rekursiv - Sind $g$ und $h_i$ primitiv rekursiv, dann auch ihre Komposition $$ f(\bar{x})=g(h_1(\bar{x}),\dots,h_k(\bar{x})) $$ - Sind $g$ und $h$ primitiv rekursiv, dann auch die mit primitver Rekursion definierte Funktion $$ f(0,\bar{x})=g(\bar{x})\\ f(m+1,\bar{x})=h(f(m,\bar{x}),m,\bar{x}) $$ Jede primitiv-rekursive Funktion ist total ### Erweiterte Komposition $f$ ist eine erweiterte Komposition der Funktionen $g_1,\dots,g_k$ falls $$ f(x_1,\dots,x_n)=t $$ so dass $t$ ein Ausdruck ist, der nur aus den Funktionen $g_1,\dots,g_k$ und den Variablen $x_1,\dots,x_n$ besteht. Eine erweiterte Komposition von PR Funktionen ist wieder PR Das erweiterte Schema der primitiven Rekursion erlaubt $$ f(0,\bar{x})=t_0\\ f(m+1,\bar{x})=t $$ wobei - $t_0$ enthält nur PR Funktionen und die $x_i$ - $t$ enthält nur $f(m,\bar{x})$, PR Funktionen, $m$ und die $x_i$ Das erweiterte Schema der primitiven Rekursion führt nicht aus PR hinaus. **Moral:** Primitive Rekursion erlaubt $f(m+1,\bar{x}) = \dots f(m,\bar{x})\dots$ ### Prädikate Sei $P(x)$ ein Prädikat, d.h. ein logischer Ausdruck, der in Abhängigkeit von $x\in\mathbb{N}_0$ den Wert true oder false liefert. Dann kann P in natürlicher Weise eine Funktion $$ \hat{P}:\mathbb{N}\rightarrow\{0,1\} $$ zugeordnet werden: $\hat{P}(x)=1$ gdw. $P(x)=$ true $P$ ist primitiv rekursiv genau dann, wenn $\hat{P}$ primitiv rekursiv ist. Ist $P$ primitiv rekursiv, dann auch der beschränkte max-Operator $$ \max\{x\geq n|P(x)\}=:q(n) $$ wobei $\max\emptyset:=0$ Ist $P$ primitiv rekursiv, dann auch der beschränkte Existenzquantor $$ \exists x\leq n. P(x)=: Q(x) $$ ## 4.11 PR = LOOP Hauptproblem bei LOOP $\rightarrow$ PR: Kodierung aller Variablen eines LOOP-Programms in einer Zahl ### Cantorsche Paarungsfunktion Die Cantorsche Paarungsfunktion $$ c(x,y):=\binom{x+y+1}{2}+x=(x+y)(x+y+1)/2+x $$ ist eine Bijektion zwischen $\mathbb{N}^2$ und $\mathbb{N}$ Die funktion $x\mapsto\binom{x}{2}$ ist PR: $$ \binom{0}{2}=0\\ \binom{n+1}{2}=\binom{n}{2}+n $$ Mit Komposition ist auch $c$ PR: $$ c(x,y)=\binom{x+y+1}{2}+x $$ Mit $c$ kodiert man $k+1$ Tupel: $$ \langle n_0,n_1,\dots,n_k\rangle:=c(n_0,c(n_1,\dots,c(n_k,0)\dots)) $$ Die umkehrfunktionen $p_1$ und $p_2$ von c werden gebraucht: $$ p_1(c(x,y))=x\quad p_2(c(x,y))=y $$ Damit können Projektionsfunktionen auf Tupeln definiert werden $$ d_0(n):=p_1(n)\\ d_1(n):=p_1(p_2(n))\\ \vdots\\ d_k(n):=p_1(p_2\dots p_2(n)\dots), \text{k-mal }p_2 $$ Sind $p_1,p_2$ PR, so auch $d_0,\dots,d_k$ Die Umkehrfunktionen von $c$ sind PR definierbar: $$ p_1(n)=\max\{x\leq n|\exists y\leq n. c(x,y)=n\}\\ p_2(n)=\max\{y\leq n|\exists x\leq n. c(x,y)=n\} $$ **PR = LOOP:** Die Primitiv rekursiven sind genau die LOOP-berechenbaren Funktionen. ### Reversible Kodierung von Zahlenfolgen als Zahlen - $\{0,\dots,k\}^*$: Kodiere $(i_1,\dots,i_n)$ als Zahl $i_1\dots i_n$ zur Basis $k+1$ - $\mathbb{N}^n$: Mit iterierter Paarfunktion $c:\langle i_1,\dots,i_n\rangle$ NB: n muss beim Dekodieren bekannt sein, denn z.B. $1=c(0,1)=c(0,c(0,1))$ - $\mathbb{N}^*$: Auch mit $\langle\dots\rangle$ reversibel kodierbar - $\mathbb{N}^*$: Kodiere $(i_1,\dots,i_n)$ als $2^{i_1}3^{i_2}\cdots p_n^{i_n}$, wobei $p_n$ die n-te Primzahl ist. Dekodierung = Primzahlzerlegung ## 4.12 Die $\mu$-rekursiven Funktionen - Mit PR kann man nur beschränkt suchen: $n,\dots,0$ - Die unbeschränkte Suche $0,\dots$ erfordert so etwas wie $$ f(n)=\dots f(n+1)\dots $$ - Der $\mu$-Operator formalisiert diese Art der Suche - Damit erhält man alle berechenbaren Funktionen - Andere Such- byw. Rekursionsschemata sind (im Prinzip!) nicht notwendig. Notation: $f(n)=\bot$ bedeutet "$f(n)$ ist undefiniert" ### $\mu$-Operator Sei $f:\mathbb{N}^k+1\rightarrow\mathbb{N}$ eine (nicht notwendigerweise totale) Funktion. Die durch Anwendung des $\mu$-Operators entstehende Funktion $\mu f:\mathbb{N}^k\rightarrow\mathbb{N}$ ist definiert durch: $$ \overline{x}\mapsto \begin{cases} \min\{n\in\mathbb{N}|f(n,\overline{x})=0\ & \text{falls ein solches } n\text{ existiert und } f(m,\overline{x}) \not= \bot\text{für alle } m\leq n\\ \bot&\text{sonst} \end{cases} $$ Intuitiv: $\mu f(\overline{x})=find(0,\overline{x})\\ find(n,\overline{x})=\text{if }f(n,\overline{x})=0\text{ then } n \text{ else } find(n+1,\overline{x})$ ### $\mu$-rekursiv Die Menge der $\mu$-rekursiven Funktionen ist induktiv wie folgt definiert: - Die Basisfunktionen $0, +1, \pi_i^k$ sind $\mu$-rekursiv/ - Wenn eine Funktion durch Komposition, primitive Rekursion oder den $\mu$-Operator aus $\mu$-rekursiven Funktionen definiert werden kann, ist sie $\mu$-rekursiv ### $\mu$R=WHILE Die $\mu$-rekursiven sind genau die WHILE-berechenbaren Funktionen. **Kleene:** Für jede n-stellige $\mu$-rekursive Funktion $f$ gibt es zwei $n+1$-stellige PR Funktionen $h$ und $h'$, so dass $$ f(\overline{x})=h(\mu h'(\overline{x}),\overline{x}) $$ ## 4.12 Die Ackermann-Funktion $$ a(0,n)=n+1\\ a(m+1,0)=a(m,1)\\ a(m+1,n+1)=a(m,a(m+1,n)) $$ - Dies ist keine PR Definition - Aber: $\not\Rightarrow a$ ist nicht PR - Ziel: a ist berechenbar, total, aber nicht PR **Fakt:** Die Ackermann-Funktion ist (OCaml-)berechenbar. **Lemma:** Die Ackermann-Funktion ist total. ### Lexikographische Ordnung $$ (m,n)\gt(m',n'):\Leftrightarrow m\gt m'\lor(m=m'\land n\gt n') $$ Die lexikographische Ordnung auf $\mathbb{N}\times\mathbb{N}$ terminiert **Warnung:** Kein Beweise der Totalität einer rekursiven Funktion: "denn in jedem rekursiven Aufruf wird eines der Argumente kleiner" **Lemma:** Für jede PR-Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ gibt es ein $t\in\mathbb{N}$, so dass $$ \forall\overline{x}\in\mathbb{N}^k. f(\overline{x})\lt a(t,\max\overline{x}) $$ **Satz:** Die Ackermann-Funktion ist nicht PR Oberflächlich intuitiv: Die Ackermann-Funktion wächst schneller als alle PR-Funktionen Genauer: Die Funktion $n\mapsto a(n,n)$ wächst schneller als alle PR funktionen Intuitiver Grund: - Für fixes $t$ ist $n\mapsto a(t,n)$ PR, denn dies ist $A_t$ - $A_t$ bracht aber eien PR Definition der Länge $O(t)$ - Um $n\mapsto a(n,n)$ PR zu berechnen, müsste die Länge der PR Definition dynamisch mit der Eingabe wachsen Da die Ackermann-Funktion total, berechenbar und nicht PR ist wurde gezeigt, dass die PR Funktionen eine echte Teilklasse der berechenbaren totalen funktionen ist. ## 5. Komplexitätstheorie - Was ist mit beschränkten Mitteln (zeit & platz) berechenbar? - Wieviel Zeit&Platz braucht man, um ein bestimmtes Problem / Sprache zu entscheiden? - Komplexität eines Problems, nicht eines Algorithmus **Zentrale Frage:** Für welche Probleme gibt es / gibt es keine polynomielle Algorithmen? **Komplexitätsklasse P:** P = die von DTM in polynomieller Zeit lösbaren Probleme, = die "leichten" Probleme (feasible problems) - $A \in P$ wird durch Angabe eines Algorithmus bewiesen, z.B. CYK beweist: $$ \{(G,w)|G\in\text{CFG},w\in L(G)\}\in P $$ - $A \not\in P$ zu zeigen ist viel schwieriger! Für sehr viele Probleme ist es nicht bekannt, ob sie zu P gehören oder nicht. Viele der wichtigsten Probleme der Informatik sind der Gestalt: $$ \text{Gegeben }X,\text{ gibt es } Y \text{ mit } R(X,Y)? $$ - SAT: $X$ = Boole'sche Formel, $Y$ = Belegung der Variablen von $X$, $R(X,Y):= \text{"Y erfüllt X"}$ - HAMILTONKREIS: $X$ = Graph, $Y$ = Kreis von $X$, $R(X,Y):= \text{"Y besucht alle Knoten von X genau einmal"}$ - EULERKREIS: $X$ = Graph, $Y$ = Kreis von $X$, $R(X,Y):=\text{"Y besucht alle Kanten von X genau einmal"}$ Die $Y$ sind "Lösungskandidaten". In allen diesen Problemen: - Prüfen ob ein Kandidat tatsächlich eine Lösung ist, ist in P. - Es gibt jedoche exponentiell viele Kandidaten. - Deshalb hat ein naiver Suchalgorithmus, der alle Kandidaten aufzählt und prüft, exponentielle Laufzeit. Für kein solches Problem ist es bewiesen worden, dass es *nicht* in P liegt. Die Frage, ob *alle* solche Probleme in P liegen, ist die wichtigste offene Frage der Informatik. **Äquivalente Formulierung** Diese Probleme können nichtdeterministisch in polynomieller Zeit gelöst werden: Wähle einen Kandidaten und prüfe, ob er eine Lösung ist. **Komplexitätsklasse NP:** NP = die von NTM in polynomieller Zeit lösbaren Probleme **Zentrale Frage:** ***P = NP ?*** ## 5.1 Die Komplexitätsklasse P Berechnungsmodell: DTM: deterministische Mehrband-TM ### Definition: $time_M(w):=$ Anzahl der Schritte bis die DTM $M[w]$ hält $\in\mathbb{N}\cup\{\infty\}$ Sei $f:\mathbb{N}\rightarrow\mathbb{N}$ eine totale Funktion. Klasse in der Zeit $f(n)$ entscheidbaren Sprachen: $$ TIME(f(n)):=\{A\subseteq\Sigma^*|\exists\text{ DTM } M.\ A=L(M)\land\forall w\in\Sigma^*.\ \text{time}_M(w)\leq f(|w|)\} $$ Merke: - $n$ ist implizit die Länge der Eingabe - Die DTM entscheidet die Sprache $A$ in $\leq f(n)$ Schritten Es werden nun Polynome mit Koeffizienten $a_k,\dots,a_0\in\mathbb{N}$ betrachtet: $$ p(n) = a_kn^k+\cdots+a_1n+a_0 $$ **Definition:** $$ P:= \bigcup_{p\ Polynom} TIME(p(n)) $$ Damit gilt auch $$ P=\bigcup_{k\geq 0} TIME(O(n^k)) $$ wobei $$ TIME(O(f)) := \bigcup_{g\in O(f)} TIME(g) $$ **Bemerkungen** - $O(n\log n)\subset O(n^2)$ - $n^{\log n}, 2^n\not\in O(n^k)$ für alle $k$ Analog zu Sprachen nennen wir eine Funktion $f:\mathbb{N}\rightarrow\mathbb{N}$ in polynomieller Zeit berechenbar, gdw. es eine DTM $M$ gibt, die $f$ berechnet und $time_m(w)\leq p(|w|)$ für ein Polynom $p$ - Warum P und nicht (z.B.) $O(n^{17})$? Um robust bzgl. Maschinenmodell zu sein: 1-Band DTM braucht $O(t^2)$ Schritte um t schritte einer k-Band DTM zu simulieren. fast alle bekannten "vernünftigen" Maschinenmodelle lassen sich von einer DTM in polynomieller Zeit simulieren. Offen: Quantencomputer - Warum TM? Historisch. Ebenfalls möglich: (z.B.) WHILE. Aber zwei mögliche Kostenmodelle: - Uniform: $x_i := x_j + n$ kostet 1 Zeiteinheit - Logarithmisch: $x_i := x_j + n$ kostet $\log x_j$ Zeiteinheiten ## 5.2 Die Komplexitätsklasse NP Berechnungsmodell: NTM = nichtdeterministische Mehrband-TM - NP ist die Klasse der Sprachen, die von einer NTM in polynomieller Zeit akzeptiert werden - D.h. Eine Sprache A liegt in NP gdw. es ein Polynom $p(n)$ und eine NTM M gibt sodass: - $L(M)=A$ und - für alle $w\in A$ kann $M[w]$ in $\leq p(|w|)$ Schritten akzeptieren, d.h. einen Endzustand erreichen. ### Definition $$ ntime_m(w):= \begin{cases} \text{minimale Anzahl der Schritte bis NTM } M[w] \text{ akzeptiert} & \text{falls } w\in L(M)\\ 0 & \text{falls } w\not\in L(M) \end{cases} $$ Sei $f:\mathbb{N}\rightarrow\mathbb{N}$ eine totale Funktion $$ NTIME(f(n)):=\{A\subseteq\Sigma^* | \exists \text{NTM }M.\ A=L(M)\land\forall w\in\Sigma^*.\ ntime_M(w)\leq f(|w|)\}\\ NP:=\bigcup_{p\ Polynom} NTIME(p(n)) $$ **bemerkungen:** - $P\subseteq NP$ - Seit etwa 1970 ist offen ob P = NP. **Weitere Bemerkungen zur Definition von NP:** Akzeptierende NTM $M$ - braucht für $w\not\in L(M)$ nicht zu halten - kann für $w\in L(M)$ auch beliebig lange berechnungsfolgen haben. Äquivalente Definition NP' von NP Die NTM $M[w]$ muss nach maximal $p(|w|)$ schritten halten. NP' $\subseteq$ NP: Klar NP $\subseteq$ NP': falls $A\in$ NP mit Polynom $p$ und NTM $M$, so kann ein NTM $M'$ konstruiert werden mit $L(M')=A$, so dass $M'[w]$ immer innerhalb von polynomieller Zeit hält. - Eingabe $w$ - Schreibe $p(|w|)$ auf ein getrenntes Band ("timer") - Simuliere $M[w]$, aber dekrementiere timer nach jedem Schritt - Wird timer = 0, ohne dass $M$ gehalten hat, halte in einem nicht-Endzustand ("timeout") **Erinnerung:** Viele Probleme sind von der Art, dass - schwer ist, zu entscheiden, ob sie lösbar sind, - leicht ist, zu entscheiden, ob ein Lösungsvorschlag eine Lösung ist. Formalisierung: **Definition:** Sei $M$ eine DTM mit $L(M)\subseteq\{w\#c|w\in\Sigma^*,c\in\Delta^*\}$ - Falls $w\#c\in L(M)$, so heißt $c$ Zertifikat für $w$ - $M$ ist ein polynomiell beschränkter Verifikator für die Sprache $\{w\in\Sigma^*|\exists c\in\Delta^*.\ w\#c\in L(M)\}$ falls es ein Polynom $p$ gibt, so dass $time_M(w\#c)\leq p(|w|)$ **NB (merke):** In Zeit $p(n)$ kann M maximal die ersten p(n) Zeichen von $c$ lesen. Daher genügt für $w$ ein Zertifikat der Länge $\leq p(w)$ **Satz:** $A\in$ NP gdw. es einen polynomiell beschränkten Verifikator für A gibt **Fazit:** - P sind die Sprachen, bei denen $w\in L$ schnell entschieden werden kann - NP sind die Sprachen, bei denen ein Zertifikat für $w\in L$ schnell verifiziert/überprüft werden kann. Intuition: Es ist leichter, eine Lösung zu verifizieren als zu finden. Aber: Noch wurde von keiner Sprache bewiesen, dass sie in NP\P liegt ## 5.3 NP-Vollständigkeit - Polynomielle Reduzierbarkeit $\leq_p$ - NP-vollständige Probleme = härteste Probleme in NP, alle anderen Probleme in NP darauf polznomiell reduzierbar - SAT ist NP-vollständig ### Definition Sei $A\subseteq\Sigma^*$ und $B\subseteq\Gamma^*$ Dann ist $A$ polynomiell reduzierbar auf $B$, $A\leq_pB$, gdw. es eine totale und von einer DTM in polynomieller Zeit berechenbare Funktion $f:\Sigma^*\rightarrow\Gamma^*$ gibt, so dass für alle $w\in\Sigma^*$ $$ w\in A\iff f(w)\in B $$ Die Relation $\leq_p$ ist transitiv, da $p_2(p_1(n)) ein Polynom ist falls $p_1$ und $p_2$ polynome sind. Die Klassen P und NP sind unter polynomieller Reduzierbarkeit nach unten abgeschlossen: $$ A\leq_pB\in P/NP\implies A\in P/NP $$ **NP-Schwer:** Ein Problem ist NP-Schwer, wenn es mindestens so schwer wie alles in NP ist: - Eine Sprache $L$ ist NP-Schwer gdw. $A\leq_pL$ für alle $A\in NP$ - Eine Sprache $L$ ist NP-Vollständig gdw. $L$ NP-schwer ist und $L\in NP$ - NP-Vollständige Probleme sind die schwierigsten Probleme in NP: alle Probleme in NP sind polynomiell auf sie reduzierbar **Lemma:** Es gilt P=NP gdw. ein NP-vollständiges Problem in P liegt. Starke vermutung: - P $\not=$ NP - d.h. kein NP-vollständiges Problem ist in P ### Aussagenlogik Syntax der Aussagenlogik: - Variablen: $X\ \to\ x|y|z|\dots$ - Formeln: $F\ \to\ X|\neg F|(F\land F)|(F\lor F)| X$ Man darf einige Klammern weglassen: - Äußerste Klammern: $(x\lor y)\land z$ statt $((x\lor y)\land z)$ - Assoziativität: $(x\lor y\lor z)\land\neg x$ statt $((x\lor y)\lor z)\land\neg x$ Abkürzungen - $F_1\to F_2\equiv \neg F_1\lor F_2$ - $\bigwedge\limits_{i=1}^{n}F_i\equiv F_1\land\cdots\land F_n$ Semantik der Aussagenlogik: - Eine Belegung ist eine Funktion von Variablen auf $\{0,1\}$. Bsp: $\sigma=\{x\mapsto 0, y\mapsto 1, z\mapsto 0,\dots\}$ - Belegungen werden mittels Wahrheitstabellen auf Formeln erweitert. Bsp: $\sigma((\neg x\land y)\lor(x\land\neg z))=1$ - Eine Formel F ist erfüllbar gdw. es eine Belegung $\sigma$ gibt mit $\sigma(F)=1$ ### SAT Gegeben: Eine aussagenlogische Formel F Problem: ist F erfüllbar? **Lemma:** SAT $\in$ NP **Satz: (Cook, 1971)** SAT ist NP-vollständig #### Von der Lösbarkeit zur Lösung Die Berechnung einer erfüllenden Belegung kann auf SAT "reduziert" werden. Sei $F$ eine Formel mit den Variablen $x_1,\dots,x_k$: ![](https://i.imgur.com/SOq8LS4.png) wobei $F[x:=b] = F$ mit $x$ ersetzt durch $b$ Entscheidung von SAT in Zeit $O(f(n))$ $\implies$ Berechnung einer erf. Bel. in Zeit $O(n*(f(n)+n))$, falls es eine gibt. $$ f(n)\text{ polynomiell }\implies n*(f(n)+n) \text{ polynomiell}\\ f(n)\text{ exponentiell }\implies n*(f(n)+n) \text{ exponentiell} $$ **Bemerkungen:** - Die Redunktion der Lösungsberechnung auf SAT ist eine rein theoretische Konstruktion - Sie zeigt, dass man sich auf SAT beschränken kann, wenn man nur an polynomiell/exponentiell interessiert ist - Alle bekannten Entscheidungsverfahren für SAT berechnen auch eine Lösung #### Von NP-schwer zu "NP-leicht" - Bis vor ca. 20 Jahren: NP-vollständig -> Todesurteil - in den letzten 15 jahren: Spektakuläre fortschritte bei der implementierung von SAT-Lösern Stand der Kunst: Erfüllbar bis 10^5^ variablen, Unerfüllbar bis 10^3^ variablen - Jetzt: NP-vollständig -> Hoffnung durch SAT - Paradigma: SAT (Logik!) als universelle Sprache zur Kodierung kombinatorischer Probleme Reduktion auf SAT manchmal schneller als problemspezifische Löser, und fast immer einfacher. ## doc todos - [ ] TODO: Folien 98-103 verstehen - [ ] vorherige TODOs machen - [ ] TODO: Folie 97: keine reguläre Lösung??? - [ ] TODO: bei Problemen nochmal die Beweise anschauen - [ ] TODO: Pumping-Lemma again - [ ] TODO: 261-299: Primitiv-Rekursive Funktionen bis Ackerman-Funktion ###### tags: `Theo`