%
%
% das Paket "flashcards" erzeugt Karteikarten zum lernen
% auf der Vorderseite steht das Buzzword oder die Frage
% auf der Rückseite steht die Antwort
% beim ausdrucken auf doppelseitiges Drucken achten
%
%
\documentclass[avery5371]{flashcards}
\usepackage[utf8]{inputenc}
\usepackage[]{amsmath} 
\usepackage[]{amssymb}
\cardfrontstyle{headings}
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Alphabet}
Ein Alphabet ist eine endliche nichtleere Menge.

Üblicherweise heißen Alphabete hier $\sum, \Gamma, \Delta$. Ist $\sum$ Alphabet, so nennen wir die Elemente oft Buchstaben und die Elemente von $\sum*$ auch Wörter über $\sum$ (auch String/Zeichenkette).
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Menge der endlichen Folgen}
    Für eine Menge X ist X* die Menge der endlichen Folgen über X.\\

    Beispiel: Elemente von ${a,b,c,d}*:(a,b,c),()$
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Wort}
Sind $u=(a_1, a_2, ...a_n)$ und $v=(b_1, b_2,...,b_n)$ Wörter, so ist $u*v$ das Wort $(a_1,a_2,...a_n,b_1,b_2,...,b_n)$; es wird als Verkettung/Konkatenation von u und v bezeichnet.
An Stelle von $u*v$ schreibt man auch $uv$.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Induktiv $w^n$ definieren}
$w^n = \begin{cases} \epsilon \quad\text{falls } n=0 \\ {w * w^{n-1}} \quad\text{ falls } n>0 \end{cases}$
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{y,w sind Wörter über $\sum$. Dann heißt y:}
\begin{itemize}
    \item Präfix/Anfangsstück von w, wenn es $z\in\sum^*$ gibt mit $yz=w$
    \item Infix/Faktor von w, wenn es $x,z\in\sum^*$ gibt mit $xyz = w$
    \item Suffix/Endstück von w, wenn es $x\in\sum^*$ gibt mit $xy=w$
\end{itemize}    
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Sprachen}
f: Menge der möglichen Eingaben $\rightarrow$ Menge der möglichen Ausgaben\\
Spezialfall $A={0,1}$ heißt Entscheidungsproblem. Sie ist gegeben durch die Menge der Eingaben. 
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Präfix}
Seien y,w Wörter über $\sum$. Dann heißt Präfix/Anfangsstück von w, wenn es $z\in\sum*$ gibt mit $yz=w$.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Infix}
Seien y,w Wörter über $\sum$. Dann heißt Infix/Faktor von w, wenn es $x,z \in \sum*$ gibt mit $xyz=w$.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Suffix}
Seien y,w Wörter über $\sum$. Dann heißt Suffix/Endstück von w, wenn es $x\in \sum*$ gibt mit $xy=w$.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{formale Sprachen}
Sei $\sum$ ein Alphabet. Teilmengen von $\sum*$ werden formale Sprachen über $\sum$ genannt.

Eine Menge L ist eine formale Sprache wenn es ein Alphabet $\sum$ gibt, so dass L formale Sprache über $\sum$ ist (d.h. $L\subseteq \sum*$).
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Verkettung von Sprachen}
Sind $L_1$ und $L_2$ Sprachen, so heißt die Sprache $L_1L_2=\{w|\exists w_1\in L_1,w_2\in L_2:w=w_1w_2\}$ (auch $L_1*L_2$) die Konkatenation oder Verkettung von $L_1$ und $L_2$.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Kleene Abschluss}
    Sei L eine Sprache. Dann ist $L*=\bigcup_{n\geq 0} L^n$ der Kleene-Abschluss oder die Kleene-Iteration von L. Weiter ist $L^{+} = \bigcup_{n\geq 0} L^n$\\
    ($L^{+} = L*L = L^* *L$)
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
\begin{flashcard}[Definition]{Prioritätsregeln für Operationen auf Sprachen}
    \begin{itemize}
        \item Potenz/Iteration binden stärker als Konkatenation
        \item Konkatenation stärker als Vereinigung/Durchschnitt/Differenz
    \end{itemize}
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
\begin{flashcard}[Definition]{Grammatik}\scriptsize
Grammatiken sind ein Mittel um alle syntaktisch korrekten Sätze einer Sprache zu erzeugen.\\
Eine Grammatik G ist ein 4-Tupel $G=(V, \sum, P, S)$ das folgende Bedingungen erfüllt
\begin{itemize}
    \item V ist eine endliche Menge von Nicht-Terminalen oder Variablen
    \item $\sum$ ist ein Alphabet (Menge der Terminale) mit 
    $V\cap \sum = \varnothing$
    ,d.h. kein Zeichen ist gleichzeitig Terminal und Nicht-Terminal
    \item $P\subseteq (V\cup \sum)^+ \times (v\cup\sum)^*$ ist eine endliche Menge von Regeln oder Produktionen (Produktionsmenge)
    \item $S\in V$ ist das Startsymbol/ die Startvariable oder das Axiom
\end{itemize}

Jede Grammatik hat nur endlich viele Regeln!
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Ableitung einer Grammatik}
Sei $G=(V, \sum, P, S)$  eine Grammatik. Eine Ableitung ist eine endliche Folge von Wörtern $w_0, w_1, w_2,...,w_n$ mit $w_0\Rightarrow w_1 \Rightarrow w_2 \Rightarrow ... \Rightarrow w_n$.
\end{flashcard}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{flashcard}[Definition]{Wort ist Satzform}
Ein Wort $w\in (V\cup\sum)^*$ heißt Satzform, wenn es eine Ableitung gibt, deren letztes Wort w ist.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{erzeugte Sprache}
Die Sprache $L(G)={w\in \sum^* | S\Rightarrow_G^* w}$ aller Satzformen aus $\sum^*$ heißt von G erzeugte Sprache.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Chomsky-0}
    Jede Grammatik ist vom Typ 0 (Semi-Thue-System) und wird auch als rekursiv-aufzählbar bezeichnet.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Chomsky-1}
    Eine Regel heißt kontext-sensitiv, wenn es Wörter $u,v,w\in(V\cup\sum)^*,|v|>0$ und ein Nichtterminal $A\in V$ gibt mit $l=uAw$ und $r=uvw$. Eine Grammatik ist vom Typ 1 (oder kontext-sensitiv) falls
    \begin{itemize}
        \item alle Regeln aus P kontext-sensitiv sind
        \item $(S\rightarrow \epsilon)\in P$ die einzige nicht kontext-sensitive Regel in P ist und S auf keiner rechten Seite einer Regel aus P vorkommt
    \end{itemize}
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Chomsky-2}
    Eine Regel $(l\rightarrow r)$ heißt kontext-frei wenn $l\in V$ und $r\in (V\cup \sum)^*$ gilt. Eine Grammatik ist vom Typ 2, falls sie nur kontext-freie Regeln enthält
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Chomsky-3}
    Eine Regl ist rechtslinear, wenn $l\in V$ und $r\in \sum V\cup {\epsilon}$ gilt. Eine Grammatik ist vom Typ 3 wenn sie nur rechtslineare Regeln enthält.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Beweise]{Es gibt einen Algorithmus, der als Eingabe eine Typ-1-Grammatik G und ein Wort w bekommst und nach endlicher Zeit entscheidet ob $w\in L(G)$ gilt.}
    \scriptsize{
    \begin{enumerate}
        \item $w=\epsilon$: Da G vom Typ 1 ist, gilt $w\in L(G)$ genau dann wenn $(S\rightarrow \epsilon)\in P$. Dies kannn ein Algorithmus entscheiden
        \item $|w|\geq 1$: Definiere einen gerichteten Graphen (W,E) wie folgt
        \begin{itemize}
            \item Knoten sind die nichtleeren Wörter über $V\cup\sum$ der Länge $\geq|w|$ (insbes. $S,w \in W$)
            \item $(u,v)\in E$ genau dann wenn $u\Rightarrow_G v$
        \end{itemize}
        da kontext-sensitiv ist, gilt $1 = |u_0|\geq |u_1|\geq |u_2|\geq...\geq |u_n| = |w|$, also $u_i\in W$  f.a. $1\geq i \geq n$. Also existiert Pfad von S nach w im Graphen (W , E ), womit die Behauptung bewiesen ist.
    \end{enumerate}
    }
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Deterministische endliche Automaten}
    ein deterministischer endlicher Automat M ist ein 5-Tupel $M=(Z, \sum, z_0, \delta, E)$
\begin{itemize}
    \item $Z$ eine endliche Menge von Zuständen
    \item $\sum$ das Eingabealphabet (mit $Z\cap\sum = \emptyset$)
    \item $z_0\in Z$ der Start/Anfangszustand (max Einer)
    \item $\delta: Z \times \sum \rightarrow Z$ die Übergangsfunktion
    \item $E\subseteq Z$ die Menge der Endzustände
\end{itemize}
Abkürzung: DFA (deterministic finite automaton)
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{DFA mit Funktion $\hat{\delta}$}
    Zu einem gegebenen DFA definieren wir die Funktion $\hat{\delta}: Z \times \sum^* \rightarrow Z$ induktiv wie folgt, wobei $z\in Z$, $w\in\sum^+$ und $a\in \sum$:
    \begin{itemize}
        \item $\hat{\delta}(z, \epsilon) = z$
        \item $\hat{\delta}(z,aw)= \hat{\delta}(\delta(z,a),w)$
    \end{itemize}
    Der Zustand $\hat{\delta}(z,w)$ ergibt sich indem man vom Zustand z aus dem Pfad folgt der mit w beschriftet ist.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{von einem DFA akzeptierte Sprache}
    die von einem DFA akzeptierte Sprache ist: $L(M)={w\in\sum^* | \hat{\delta}(z_0,w)\in E}$\\
    Mit anderen Worten: Ein Wort w wird genau dann akzeptiert, wenn derjenige Pfad, der im Anfangszustand beginnt und dessen Übergänge mit den Zeichen von w markiert sind, in einem Endzustand endet.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{Wann ist eine Sprache regulär?}
    Eine Sprache $L \supseteq \sum^*$ ist regulär, wenn es einen DFA mit $L(M)=L$ gibt ( bzw. wird von einem DFA akzeptiert).  Jede reguläre Sprache ist rechtslinear.
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{flashcard}[Definition]{ ein nichtdeterministischer endlicher Automat M} ist ein 5-Tupel $M=(Z,\sum,S,\delta,E)$ mit
- $Z$ ist eine endliche Menge von Zuständen
- $\sum$ ist das Eingabealphabet
- $S\subseteq Z$ die Menge der Startzustände (können mehrere sein)
- $\delta: Z \times \sum \rightarrow P(Z)$ ist die (Menge der) Überführungs/Übergangsfunktion
- $E\subseteq Z$ die Menge der Endzustände
\end{flashcard}


\begin{flashcard}[Definition]{ Zu einem gegebenen NFA M definieren wir die Funktion $\hat{\delta}:P(Z)\times \sum^* \rightarrow P(Z)$}
     induktiv wie folgt, woebei $Y \subseteq Z$, $w\in \sum^*$ und $a\in\sum$: $\hat{\delta}(Y,\epsilon)=Y$, $\hat{\delta}(Y,aw)=\hat{delta}(\bigcup \delta(z,a),w)$
    \end{flashcard}

\begin{flashcard}[Definition]{ die von einem NFA M akzeptierte Sprache ist} $L(M)={w\in \sum^* | \hat{\delta}(S,w)\cap E \not = \emptyset}$
( Das Wort wird akzeptiert wenn es mindestens einen Pfad vom anfangs in den endzustand gibt)
\end{flashcard}

\begin{flashcard}[Satz]{ Sei $\sum$ ein Alphabet und $L\subseteq \sum^*$ eine Sprache. Dann sind äquivalent}
> 1. L ist regulär (d.h. von einem DFA akzeptiert)
> 2. L wird von einem NFA akzeptiert
> 3. L ist rechtslinear (d.h. von einer Typ-3 Grammatik erzeugt)
\end{flashcard}

\begin{flashcard}[Definition]{ Gegeben sei eine Klasse K und ein n-stelliger Operator $\otimes : K^n \rightarrow K$.}
    Man sagt, eine Klasse $K'\subseteq K$ ist unter $\otimes$ abgeschlossen, wenn für beliebige Elemente $k_1,k_2,...,k_n\in K'$ gilt $\otimes (k_1,k_2,...,k_n)\in K'$
\end{flashcard}

\begin{flashcard}[Satz]{ Wenn $L\subseteq \sum^*$ eine reguläre Sprache ist,} dann ist auch $\sum^* \backslash L$ regulär
\end{flashcard}

\begin{flashcard}[Satz]{ Wenn $L_1$ und $L_2$ reguläre Sprachen sind,} dann ist auch $L_1 \cup L_2$ regulär.
\end{flashcard}

\begin{flashcard}[Satz]{ Wenn $L_1$ und $L_2$ reguläre Sprachen sind,} dann ist auch $L_1 \cap L_2$ regulär.
\end{flashcard}

\begin{flashcard}[Satz]{ Wenn $L_1$ und $L_2$ reguläre Sprachen sind,} dann ist auch $L_1L_2$ regulär
\end{flashcard}

\begin{flashcard}[Satz]{ Wenn L eine reguläre Sprache ist,} dann ist auch $L^+$ regulär
\end{flashcard}

\begin{flashcard}[Satz]{ Wenn L eine reguläre Sprache ist,} dann ist auch $L^*$ regulär.
\end{flashcard}

\begin{flashcard}[Definition]{ Die Menge $Reg(\sum)$ der regulären Ausdrücke über dem Alphabet $\sum$} ist die kleinste Menge mit folgenden Eigenschaften:\begin{itemize}
\item $\varnothing \in Reg(\sum), \lambda \in Reg(\sum), \sum \subseteq Reg(\sum)$
\item Wenn $\alpha, \beta \in Reg(\sum)$, dann auch $(\alpha * \beta), (\alpha + \beta), (\alpha^*)\in Reg(\sum)$
    \end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ Für einen regulären Ausdruck $\alpha \in Reg(\sum)$ ist die Sprache $L(\alpha)\subseteq \sum^*$} induktiv definiert
$$L(\alpha)=\begin{cases}
\varnothing &\text{ falls } alpha=\not O \\
{\epsilon} &\text{ falls } \alpha = \lambda \\
{a} &\text{ falls } \alpha=a\in \sum \\
L(\beta)\cup L(\gamma) &\text{ falls } \alpha =(\beta + \gamma)\\
L(\beta)L(\gamma) &\text{ falls } \alpha=(\beta*\gamma)\\
(L(\beta))^* &\text{ falls } \alpha=(\beta^*)
\end{cases}$$
\end{flashcard}


\begin{flashcard}[Satz]{ Für jedes Alphabet $\sum$ ist die Menge $P(\sum^*)={L|L \text{Sprache über} \sum}$ überabzählbar}
, d.h. es gibt keine bijektive Funktion $F:\mathbb{N} \rightarrow P(\sum^*)$.
\end{flashcard}

\begin{flashcard}[]{Pumping Lemma}
Wenn L eine reguläre Sprache ist, dann gibt es $n\leq 1$ derart, dass für alle $x\in L$ mit $|x|\geq n$ gilt: es gibt Wörter $u,v,w \in \sum^*$ mit:
1. $x=uvw$
2. $|uv|\leq n$
3. $|v|\geq 1$
4. $uv^i w\in L$ für alle $i\geq 0$
Dieses Lemma spricht nicht über Automaten, sondern nur über die Eigenschaften der Sprache. Es ist geeignet, Aussagen über Nicht-Regularität zu machen. Dabei ist es aber nur eine notwendige Bedingung. Es kann nicht genutzt werden, um die Regularität einer Sprache L zu zeigen.
\end{flashcard}


\begin{flashcard}[Definition]{Myhill-Nerode-Äquivalenz} Für eine Sprache $L\subseteq \sum^*$ definieren wir eine binäre Relation $R_L \subseteq \sum^* \times \sum^*$ wie folgt: Für alle $x,y\in \sum^*$ setze $(x,y)\in R_L$ genau dann, wenn $\forall z \in \sum^* :(xy\in L \leftrightarrow yz \in L)$ gilt. Wir schreiben hierfür auch $x R_L y$.
\end{flashcard}

\begin{flashcard}[Definition]{ Für eine Sprache L und ein Wort $x\in \sum^*$ ist $[x]_L=\{y\in\sum^* | x R_L y \}$ }die Äquivalenzklasse von x. Ist L klar, so schreiben wir einfacher $[x]$.
\end{flashcard}

\begin{flashcard}[Satz]{ Satz  von Myhill-Nerode} Sei L eine Sprache. L ist regulär $\leftrightarrow index(R_L)< \infty$
(d.h. nur wenn die Myhill-Nerode-Äquivalenz endliche Klassen hat)
\end{flashcard}

\begin{flashcard}[Definition]{ Ein DFA M heißt reduziert,} wenn es für jeden Zustand $z \in Z$ ein Wort $x_z\in \sum^*$ gibt mit $\hat{\sigma}(l, x_z)=z$
\end{flashcard}

\begin{flashcard}[Definition]{ Sei M ein DFA. Zwei Zustände $z,z'\in Z$ heißen erkennungsäquivalent }(in Zeichen $z\equiv z'$) wenn für jedes Wort $w\in \sum^*$ gilt: $\hat{\sigma}(z,w)\in E \leftrightarrow \hat{\sigma}(z',w)\in E$
\end{flashcard}

\begin{flashcard}[Definition]{ Sei M ein DFA. Dann ist $M'=(Z_{\equiv},\sum, [z_0],\sigma', E')$ mit}\begin{itemize}
\item $\sigma'([z],a)=[\sigma (z,a)]$ für $z\in Z$ und $a\in \sum$ und
\item $E'=\{[z]|z\in E\}$
\end{itemize}
der Quotient von M bzgl $\equiv$
\end{flashcard}


\begin{flashcard}[Definition]{Homomorphismus}
     Seien $M_i$ DFAs (für $i\in\{1,2\}$) und $f:Z_1 \rightarrow Z_2$ eine Funktion. Dann ist f ein Homomorphismus von $M_1$ auf $M_2$, falls gilt:
\begin{itemize}
\item $f(l_1)=l_2$
\item $f(\sigma_1(z,a))=\sigma_2(f(z),a)$ für alle $z\in Z_1$ und $a\in \sum$
\item $z\in E_1 \leftrightarrow f(z)\in E_2$ für alle $z\in Z_1$ (bildet Endzustände aufeinander ab)
\end{itemize}
\end{flashcard}

\begin{flashcard}[Satz]{surjektiver Homomorphismus}
     Seien $M_i$ reduzierte DFAs mit $L(M_1)=L(M_2)$. Sei weiter $M_2'$ der Quotient von $M_2$ bzgl $\equiv$. Dann existiert ein surjektiver Homomorphismus von $M_1$ auf $M_2'$
- die Abbildung f ist surjektiv (auf $M_2$). Und damit ist $M_2 < M_1$
- die Abbildung f ist ein Homomorphismus
\end{flashcard}

\begin{flashcard}[Satz]{ Seien $M_1$ und $M_2$ reduzierte DFAs mit $L(M_1)=L(M_2)$. Sei $M_1'$ der Quotient von M bzgl $\equiv$}\begin{itemize}
\item $M_2$ hat wenigstens so viele Zustände wie $M_1'$
\item Hat $M_2$ genauso viele Zustände wie $M_1'$, so sind $M_2$ und $M_1'$ bis auf Umbennenung der Zustände identisch (sie sind Isomorph)
\end{itemize}

Folgerung: Seien $M_1$ und $M_2$ reduzierte DFAs mit $L(M_1)=L(M_2)$. Seien $M_1'$ und $M_2'$ die Quotienten bzgl $\equiv$. Dann sind $M_1'$ und $M_2'$ isomorph, d.h. für jede reguläre Sprache gibt es (bis auf Umbenennung der Zustände) genau einen minimalen DFA

Um den minimalen DFA zu erhalten bildet man den Quotienten eines beliebigen zur Sprache passenden DFA.
\end{flashcard}

\begin{flashcard}[Satz]{Markierungsalgorithmus} Für einen reduzierten DFA M wird ein Paar ${z,z'}\subseteq Z$ mit $z\not = z'$ genau dann durch den Markierungsalgorithmus markiert werden, wenn $z\not \equiv z'$
\end{flashcard}

\begin{flashcard}{Algorithmus Minimalautomat}
Eingabe: reduzierter DFA M\\
Ausgabe: Menge der Paare erkennungsäquivalenter Zustände
1. Stelle eine Tabelle aller ungeordneten Zustandspaare $\{z,z'\}$ mit $z\not = z'$ auf
2. Markiere alle Paare $\{z,z'\}$ mit $z\in E$ und $z'\not\in E$
3. Markiere ein beliebiges unmarkiertes Paar $\{z,z'\}$, für das es ein $a\in\sum$ gibt, sodass $\{\sigma(z,a),\sigma(z',a)\}$ bereits markiert ist (falls möglich)
4. Wiederhole den vorherigen Schritt, bis sich keine Änderung in der Tabelle mehr ergibt
\end{flashcard}

\begin{flashcard}[Satz]{Minimierungsalgorithmus} Für einen gegebenen reduzierten DFA M markiert der Minimierungsalgorithmus ein $\{z,z'\}(z,z'\in Z, z\not=z')$ genau dann, wenn $z\not\equiv z'$
\end{flashcard}


\begin{flashcard}{Wortproblem}
Gilt $w\in L$ für eine gegebene reguläre Sprache L und $w\in\sum^*$?

Eingabe: DFA M und $w\in\sum^*$

Verfahren: Verfolge die Zustandsübergänge von M, die durch die Symbole $a_1,...,a_n$ vorgegeben sind.
\end{flashcard}


\begin{flashcard}{Leerheitsproblem}
Gilt $L=\varnothing$ für eine gegebene reguläre Sprache L?

Eingabe: NFA M

Verfahren: Sei $G=(Z,\rightarrow)$ der gerichtete Graph mit $z\rightarrow z' \leftrightarrow \exists a \in \sum: z'\in\sigma(z,a)$. Dann gilt $L(M)\not =\varnothing$ genau dann, wenn es in dem Graphen G einen Pfad von einem Knoten aus S zu einem Knoten aus E gibt. Dies kann zB mit dem Algorithmus von Dijkstra entschieden werden.
\end{flashcard}

\begin{flashcard}{Endlichkeitsproblem}
Ist eine gegebene reguläre Sprache L endlich?

Eingabe: NFA M

Verfahren: Sei $G=(Z,\rightarrow)$ wieder der gerichtete Graph mit $z\rightarrow z' \leftrightarrow \exists a \in\sum:z'\in\sigma(z,a)$. Dann gilt L(M) ist genau dann unendlich, wenn es $z\in Z,z_0\in S$ und $z_1\in E$ gibt mit $z_0\rightarrow^* z \rightarrow^+ z \rightarrow^* z_1$. D.h. z liegt auf einem Zyklus, ist von einem Startzustand aus erreichbar und von z kann ein Endzustand erreicht werden. Dies kann wieder mit dem Algorithmus von Dijkstra entschieden werden.
\end{flashcard}

\begin{flashcard}{Schnittproblem}
Gilt $L_1\cap L_2=\varnothing$ für gegebene reguläre $L_1,L_2$?

Eingabe: NFAs $M_1$ und $M_2$

Verfahren: Konstruiere aus $M_1$ und $M_2$ einen NFA M mit $L(M)=L(M_1)\cap L(M_2)$. Teste ob $L(M)=\varnothing$
\end{flashcard}

\begin{flashcard}{Inklusionsproblem}
Gilt $L_1 \subseteq L_2$ für gegebene reguläre $L_1,L_2$?

Eingabe: NFAs $M_1$ und $M_2$

Verfahren: Aus $M_1$ und $M_2$ kann ein NFA M mit $L(M)=\bar{L(M_2)}\cap L(M_1)$ konstruieren. Es gilt $L(M_1)\subseteq L(M_2)$ genau dann, wenn $L(M)=\varnothing$.
\end{flashcard}

\begin{flashcard}{Äquivalenzproblem}
Gilt $L_1=L_2$ für gegebene reguläre $L_1,L_2$?

Eingabe: NFAs $M_1$ und $M_2$

Verfahren 1: es gilt $L(M_1)=L(M_2)$ genau dann, wenn $L(M_1)\subseteq L(M_2)$ und $L(M_2)\subseteq L(M_1)$.

Verfahren 2: bestimme zu $M_i (i\in\{1,2\})$ den äquivalenten minimalen DFA $N_i$. Dann gilt $L(M_1)=L(M_2)$ genau dann, wenn $N_1$ und $N_2$ isomorph sind (d.h. sie können durch Umbennenung der Zustände ineinander überführt werden).
\end{flashcard}

\begin{flashcard}{Kontextfreie Sprachen}
bei Kontext-freien Grammatiken haben alle Produktionen die Form $A\rightarrow w$ mit $A\in V$ und $w\in (V\cup \sum)^*$.
\end{flashcard}


\begin{flashcard}[Definition]{Ableitungsbaum} Sei G eine kontext-freie Grammatik und $X\in V\cup \sum$. Ein X-Ableitungsbaum ist ein gerichteter, geordneter Baum T mit Wurzel, dessen Knoten mit Elementen von $V\cup\sum\cup\{\epsilon\}$ beschriftet sind, wobei:\begin{itemize}
\item die Wurzel mit X beschriftet ist
\item Knoten $v$ mit $a\in\sum\cup\{\epsilon\}$ beschriftet $\Rightarrow$ v ist ein Blatt
\item Knoten $v$ mit $A\in V$ beschriftet und kein Blatt $\Rightarrow$
    \begin{itemize}
\item es gibt eine Produktion $A\rightarrow X_1...X_r$ mit $X_1...X_r\in\sum\cup V$ $(r\geq 1)$ sodass die Nachfolgerknoten von $v$ mit $X_1,X_2,...,X_r$ beschriftet sind
\item oder es gibt Produktion $A\rightarrow \epsilon$ und $v$ hat genau einen Nachfolger; dieser ist mit $\epsilon$ beschriftet
\end{itemize}
\item Das Blattwort $\alpha(T)$ des X-Ableitungsbaumes T erhält man, indem man die Beschriftungen der Blätter von links nach rechts betrachtet. Ein Ableitungsbaum ist ein S-Ableitungsbaum.
\item ein X-Ableitungsbaum ist vollständig, wenn seine Blätter mit Elementen von $\sum\cup\{\epsilon\}$ beschriftet sind.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{Linksableitung} Eine Ableitung heißt Linksableitung wenn in jedem Schritt das am weitesten links stehende Nichtterminal ersetzt wird.
\end{flashcard}

\begin{flashcard}[Definition]{kontextfreie Grammatik}
     Eine Kontextfreie Grammatik G heißt mehrdeutig, wenn es zwei verschiedene vollständige Ableitungsbäume $T$ und $T'$ gibt mit $\alpha(T)=\alpha(T')$.
 Sonst heißt G eindeutig, d.h. G ist eindeutig wenn jedes Wort $w\in L(G)$ genau eine Ableitung besitzt.
 Eine Kontextfreie Sprache heißt inhärent mehrdeutig, wenn jede kontextfreie Grammatik mit $L=L(G)$ mehrdeutig ist
\end{flashcard}

\begin{flashcard}[Definition]{Chomsky Normalform} Eine kontextfreie Grammatik g ist in Chomsky Normalform, falls\begin{itemize}
\item alle Produktionen von G die Form $A\rightarrow AB$ oder $A\rightarrow a$ haben
\item oder alle Produktionen von G die Form $A\rightarrow BC$ oder $A\rightarrow a$ oder $S\rightarrow\epsilon$ haben und S nie auf der rechten Seite einer Produktion vorkommt.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Satz]{ Zu jeder kontextfreien Grammatik gibt es eine Grammatik G' in Chomsky Normalform mit} $L(G)=L(G')$
\end{flashcard}

\begin{flashcard}{Der Cocke-Younger-Kasami- oder CYK-Algorithmus}
Sei G kontextfreie Grammatik.  Gesucht ist ein Algorithmus mit dessen Hilfe wir entscheiden können, ob ein gegebenes Wort zu L(G) gehört.
\end{flashcard}

\begin{flashcard}[Definition]{ Ein Kellerautomat} M ist ein 6-Tupel $M=(Z,\sum,\Gamma, z_0, \delta, \#)$, wobei\begin{itemize}
\item Z die endliche Menge der Zustände
\item $\sum$ das Eingabealphabet
\item $\Gamma$ das Kelleralphabet
\item $z_o\in Z$ der Startzustand
\item $\delta: Z \times (\sum \cup \{\epsilon\})\times \Gamma \rightarrow P_{\epsilon}Z\times\Gamma^*)$ die Überführungsfunktion
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ Ein Konfiguration eines PDA} ist ein Tripel $k\in Z \times \sum^* \times \Gamma^*$
- $z\in Z$ ist der aktuelle Zustand
- $w\in\sum$ ist der noch zu lesende Teil der Eingabe
- $\gamma \in \Gamma^*$ ist der aktuelle Kellerinhalt. Dabei steht das oberste Kellerzeichen ganz links
 
Übergänge zwischen Konfigurationen ergeben sich aus der Überführungsfunktion $\delta$
\end{flashcard}

\begin{flashcard}[Definition]{ Seien $\gamma\in\Gamma^*, A_1B_1,...,B_k\in\Gamma, w, w'\in\sum^*$ und $z,z'\in Z$. Dann gilt $(z,w,A\gamma)\rightarrow (z',w', B_1...B_{k\gamma})$ genau dann, wenn} es $a\in\sum \cup\{\epsilon\}$ gibt mit $w=aw'$ und $(z',B_1...B_k)\in\delta(z,a,A)$
\end{flashcard}

\begin{flashcard}[Definition]{ Sei M ein PDA. Dann ist die von M akzeptierte Sprache:} $L(M)=\{x\in\sum^* | \text{es gibt } z\in Z \text{mit} (z_0, x, \#) [...] ^*(z,\epsilon, \epsilon)\}$
\end{flashcard}


\begin{flashcard}[Definition]{ Sei M ein PDA. Dann ist die von M akzeptierte Sprache}
     $L(M)=\{x\in\sum^* | \text{ es gibt } z\in Z \text{ mit } (z_0,x,\#)\vdash^* (z,\epsilon,\epsilon)\}$
    \end{flashcard}

\begin{flashcard}[Definition]{ eine kontextfreie Grammatik G ist in Greibach Normalform} falls alle Produktionen aus P folgende Form haben: $A\rightarrow aB_1B_2...B_k$, mit $k\in \mathbb{N}$, $A,B_1,...,B_k\in V$ und $a\in \sum$
Die Greibach Normalform garantiert, dass bei jedem Ableitungsschritt genau ein Alphabetsymbol entsteht.
\end{flashcard}

\begin{flashcard}[Satz]{ aus einer kontextfreien Grammatik G kann eine kontextfreie Grammatik G' in Greibach Normalform berechnet werden mit}
     $L(G')=L(G)\ \{\epsilon\}$.

> Jede kontextfreie Sprache L ist Sprache eines PDA M mit nur einem Zustand. Gilt $\epsilon\not\in L$, so werden keine $\epsilon$-Transitionen benötigt

> Ist M ein PDA, so ist L(M) kontextfrei
\end{flashcard}

\begin{flashcard}[Satz]{ Sei L eine Sprache. Dann sind äquivalent}\begin{itemize}
\item L ist kontextfrei
\item es gibt einen PDA M mit $L(M)=L$
\item es gibt einen PDA M mit nur einem Zustand und $L(M)=L$. Gilt $\epsilon\not\in L$, so sind diese Aussagen äquivalent zu
\item es gibt einen PDA M mit nur einem Zustand und ohne eine $\epsilon$-Transitionen, so dass $L(M)=L$ gilt
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{PDAs mit Endzuständen} Ein Kellerautomat mit Endzuständen oder PDAE ist ein 7-Tupel M, wobei $(Z,\sum,\Gamma, \iota, \delta, \#)$ ein PDa und $E\subseteq Z$ eine Menge von Endzuständen ist
\end{flashcard}

\begin{flashcard}[Definition]{ Sei M ein PDAE. Die von M akzeptierte Sprache ist} $L(M)=\{w\in\sum^* | \text{es gibt } e\in E \text{ und } \gamma\in\Gamma^* \text{ mit } (\iota, w,\#)\vdash^* (e,\epsilon,\gamma)\}$
\end{flashcard}

\begin{flashcard}[Definition]{ ein deterministischer Kellerautomat oder DPDA ist ein PDAE M,} so dass für alle $z\in Z, a\in\sum, A\in\Gamma$ gilt: $|\delta(z,a,A)|+|\delta(z,\epsilon,A)|\leq 1$.
\end{flashcard}

\begin{flashcard}[Definition]{ eine Sprache L ist deterministisch kontextfrei,} wenn es einen deterministischen Kellerautomaten M gibt mit $L(M)=L$
\end{flashcard}

\begin{flashcard}[Satz]{ Ist $L\subseteq \sum^*$ deterministisch kontextfrei, }so auch $\sum^*\backslash L$
\end{flashcard}

\begin{flashcard}[Satz]{} aus einem DPDA M kann ein DPDA M' berechnet werden mit $L/M')=\sum^*\backslash L(M)$
\end{flashcard}

\begin{flashcard}[Definition]{das Lemma von Ogden (William Ogden)}
Wenn L eine kontextfreie Sprache ist, dann gibt es $n\geq 1$ derart, dass für alle $z\in L$, in denen n Positionen markiert sind, gilt: es gibt Wörter $u,v,w,x,y\in\sum^*$ mit
\begin{itemize}
\item  $z=uvwxy$
\item v oder x enthält wenigstens eine der Markierungen oder
\item $uv^i wx^i y \in L$ für alle $i\geq 0$
    \end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ Wortproblem für eine kontextfreie Sprache $L$}
     Gegeben $w\in\sum^*$. Gilt $w\in L$?
Ist die kontextfreie Sprache L durch eine kontextfreie Grammatik in Chomsky-Normalform gegeben, so kann das Wortproblem mit dem CYK-Algorithmus in Zeit $O(|w|^3)$ gelöst werden. 
Ist L durch einen deterministischen PDA gegeben, so kann das Wortproblem für L sogar in Zeit $O(n)$ gelöst werden.
\end{flashcard}

\begin{flashcard}[Definition]{ Uniformes Wortproblem für kontextfreie Sprachen} Gegeben kontextfreie Grammatik G und Wort $w\in\sum^*$. Gilt $w\in L(G)$?
Lösung:\begin{itemize}
\item berechne kontextfreie Grammatik G' in Chomsky Normalform mit $L(G)=L(G')$
\item Wende CYK-Algorithmus auf die Frage $w\in L(G')$ an
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ Leerheitsproblem für kontextfreie Sprachen} Gegeben eine kontextfreie Grammatik $G=(V,\sum,P,S)$. Gilt $L(G)=\varnothing$
Lösung: Sei $W=\{A\in V | \exists w\in\sum^*: A\Rightarrow_G^* w\}$ die Menge aller produktiven Nichtterminale. Dann gilt $L(G)\not= \varnothing \leftrightarrow S\in W$. Berechnung von W: 
$W_0:=\{A\in V | \exists w\in\sum^*:(A\rightarrow w)\in P\}$
\end{flashcard}

\begin{flashcard}[Definition]{ Endlichkeitsproblem für kontextfreie Sprachen} Gegeben eine kontextfreie Grammatik G. Ist $L(G)$ endlich?
O.E. können wir annehmen, daß G in Chomsky-Normalform ist. Wir definieren einen Graphen $(W , E )$ auf der Menge der produktiven Nichtterminale mit folgender Kantenrelation: $E=\{(A,B)\in W\times W | \exists C \in W: (A\rightarrow BC)\in P \text{ oder } (A\rightarrow CB)\in P\}$
Beobachtung: $(A,B)\in E$ gilt genau dann, wenn es einen vollständigen A-Ableitungsbaum gibt, so daß B ein Kind der Wurzel beschriftet.
\end{flashcard}

\begin{flashcard}[Definition]{ Intuitiver Berechenbarkeitsbegriff} Eine Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ ist intuitiv berechenbar, wenn es einen Algorithmus gibt, der f berechnet, d.h.\begin{itemize}
\item das Verfahren erhält $(n_1,..., n_k)$ als Eingabe,
\item terminiert nach endlich vielen Schritten
\item und gibt $f(n_1,...,n_k )$ aus.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ Ein Loop-Programm ist von der Form}\begin{itemize}
\item $x_i := c, x_i := x_j + c, x_i := x_j \div c$ mit $c\in\{0, 1\}$ und $i, j$ (Wertzuweisung) oder
\item $P_1 ; P_2$, wobei $P_1$ und $P_2$ Loop-Programme sind (sequentielle Komposition) oder
\item loop $x_i$ do P end, wobei P ein Loop-Programm ist und $i_1$.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Die modifizierte Subtraktion $\div$ ist definiert durch $\div: \mathbb{N}^2 \rightarrow \mathbb{N}: (m,n)\rightarrow max(0,m-n)$
\end{flashcard}

\begin{flashcard}[Definition]{} Für jedes Loop-Programm P, in dem keine Variable $x_i$ mit $i>k$ vorkommt, definieren wir zunächst eine Funktion $[[P]]_k:\mathbb{N}^k\rightarrow \mathbb{N}^k$ durch Induktion über den Aufbau von P 
\end{flashcard}

\begin{flashcard}[Definition]{} Eine Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ (mit $k\geq 0$) heißt loop-berechenbar, falls es ein $l\geq k$ und ein Loop-Programm P, in dem höchstens die Variablen $\forall n_1,...,n_k\in\mathbb{N}:f(n_1,...,n_k)=\pi_1^l([[P]]_l(n_1,...,n_k,0,...,0))$.

Loop-Vermutung: Eine Funktion $\mathbb{N}^k\rightarrow \mathbb{N}$ mit $k \geq 0$ ist genau dann intuitiv berechenbar, wenn sie loop-berechenbar ist.
\end{flashcard}

\begin{flashcard}[Definition]{} Seien $k\geq 0, \mathbb{N}^k\rightarrow \mathbb{N}$ und $h:\mathbb{N}^{k+2}$. Die Funktion $f:\mathbb{N}^{k+1}\rightarrow\mathbb{N}$ mit $f(0,n_2,...,n_{k+2})=g(n_2,...,n_{k+1})$ und $f(m+1, n_2,...,n_{k+1})=h(f(m,n_2,...,n_{k+1}),m,n_2,...,n_{k+1})$ ensteht aus g und h mittels Rekursion.
\end{flashcard}

\begin{flashcard}[Definition]{Hilberts Vermutung (1926)} Eine Funktion $\mathbb{N}^k\rightarrow\mathbb{N}$ mit $k\geq 0$ ist genau dann intuitiv berechenbar, wenn sie primitiv rekursiv ist. 
\end{flashcard}

\begin{flashcard}[Definition]{  Die primitiv rekursiven Funktionen sind induktiv wie folgt definiert}
\begin{itemize}
\item Alle konstanten Funktionen der Form $k_c:\mathbb{N}^0\rightarrow\mathbb{N}:()\rightarrow c$ (für ein festes $c\in\mathbb{N}$) sind primitiv rekursiv.
\item Alle Projektionen der Form $\pi_i^k:\mathbb{N}^k\rightarrow\mathbb{N}: (n_1,..., n_k)\rightarrow n_i$ (mit $1\geq i\geq k$) sind primitiv rekursiv.
\item Die Nachfolgerfunktion $s:\mathbb{N}\rightarrow\mathbb{N}: n\rightarrow n + 1$ ist primitiv rekursiv.
\item Wenn $f:\mathbb{N}^k\rightarrow\mathbb{N}$ und $g_11,...,g_k:\mathbb{N}^l\rightarrow\mathbb{N}$ (mit $k,l\geq 0$) primitiv rekursiv sind, dann ist auch die Funktion $f(g_1,..., g_k):\mathbb{N}^l\rightarrow\mathbb{N}$ primitiv rekursiv (Substitution).
\item Sind $g:\mathbb{N}^k\rightarrow\mathbb{N}$ und $h:\mathbb{N}^{k+2}\rightarrow\mathbb{N}$ primitiv rekursiv (mit $k\geq 0$) und entsteht $f:\mathbb{N}^{k+1}\rightarrow\mathbb{N}$ aus g und h mittels Rekursion, so ist auch f primitiv rekursiv (Rekursion).
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Seien $f,g: \mathbb{N}^{k+1}\rightarrow\mathbb{N}$ Funktionen mit 
\begin{itemize}
\item $$g(m,\bar{n})= \begin{cases} 1 \quad\text{falls } \exists i\leq m: f(i,\bar{n}\geq 1) \\ 0 \quad\text{sonst} \end{cases}$$ 
\item für alle $\bar{n}\in\mathbb{N}^k$. Wir sagen, g geht durch den beschränkten Existenzwuantor aus f hervor.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Die Funktion $ack:\mathbb{N}^2\rightarrow\mathbb{N}$ mit $ack(x,y,)=ack_x(y)$ heißt Ackermann Funktion
\end{flashcard}

\begin{flashcard}[Definition]{} Sei P Loop-Programm mit Variablen $x_1,x_2,...,x_n$. Für Anfangswerte $(n_i)$ seien $(n'_i)$ die Werte der Variablen bei Programmende.

$$f_p:\mathbb{N}\rightarrow\mathbb{N}: n\rightarrow max\{\sum_{1\leq i\leq l} n'_i | \sum_{1\leq i \leq l} n_i\leq n \}$$
\end{flashcard}

\begin{flashcard}[Satz]{ Die Ackermann Funktion ist nicht berechenbar}
Beweis indirekt: Angenommen P wäre Loop-Programm, das $ack$ berechnet. Nach Beschränkungslemma existiert $k\in\mathbb{N}$ mit $f_p(m)< ack_k(m)$, damit $ack_k(k)\leq f_p(2k)< ack_k(2k)$ im Widerspruch zum Monotonielemma. 
\end{flashcard}

\begin{flashcard}[Definition]{ Ein While Programm ist von der Form}
\begin{itemize}
\item $x_i=c; x_i=x_j+c; x_i=x_j-c$ mit $c\in\{0,1\}$ und $i,j\geq 1$ (Wertzuweisung) oder
\item $P_1;P_2$, wobei $P_1$ und $P_2$ bereits While Programme sind (sequentielle Komposition) oder
\item while $x_i\not = 0$ do P end, wobei P ein While Programm ist und $i\geq 1$.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} 
Seien $r\in\mathbb{N}$ und $D\subseteq\mathbb{N}^r$. Eine Funktion $f:D\rightarrow\mathbb{N}$ heißt partielle Funktion von $\mathbb{N}^r$ nach $\mathbb{N}$. Wir schreiben hierfür $f:\mathbb{N}^r \rightarrow\mathbb{N}$.
\end{flashcard}

\begin{flashcard}[Definition]{} wie bei Loop Programmen definieren wir zunächst für jedes While Programm P in dem keine Variable $x_i$ mit $i>k$ vorkommt induktiv eine partielle Abbildung $[[P]]_k:\mathbb{N}^k \rightarrow\mathbb{N}^k$. Hierfür sei $\bar{n}\in\mathbb{N}^k$
    \begin{itemize}
\item $[[x_i=c]]_k(n_1,...,n_k)=(m_1,...,m_k)$ genau dann, wenn $m_i=c$ und $m_l=n_l$ für $l\not = i$
\item $[[x_i=x_j \pm c]]_k(n_1,...,n_k)=(m_1,...,m_k)$ genau dann, wenn $m_i=n_j\pm c$ und $m_l=n_l$ für $l\not = i$
\item $[[P_1; P_2]]_k(\bar{n})$ ist genau dann definiert, wenn $\bar{m}=[[P_1]]_k(\bar{n})\in\mathbb{N}^k$ und $[[P_2]]_k(\bar{m})$ definiert sind. In diesem Falle gilt $[[P_1; P_2]]_k(\bar{n})=[[P_2]]_k([[P_1]]_k(\bar{n}))$, sonst undefiniert.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Eine partielle Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ heißt while Berechenbar, falls es ein $l\geq k$ und ein While Programm P, in dem höchstens die Variablen $x_1,...,x_l$ vorkommen, gibt, sodass für alle $n_1,...,n_k\in\mathbb{N}$ gilt:\begin{itemize}
\item $f(n_1,...,n_k)$ definiert $\leftrightarrow [[P]]_l(n_1,...,n_k,0,...,0)$ definiert
\item Falls $f(n_1,...,n_k)$ definiert ist, gilt $f(n_1,...,n_k)=\pi_1^l ([[P]]_l(n_1,...,n_k,0,...,0))$.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ Gödels Vermutung}
Eine partielle Funktion $\mathbb{N}^k\rightarrow\mathbb{N}$ ist gneau dann intuitiv berechenbar, wenn sie $\mu$-rekursiv ist.
\end{flashcard}

\begin{flashcard}[Definition]{$\mu$-rekursive Funktion} Sei $f:\mathbb{N}^{k+1}\rightarrow\mathbb{N}$ eine partielle Funktion Dann ist $\mu f:\mathbb{N}^k\rightarrow\mathbb{N}$ definiert durch $\mu f(n_1,...,n_k)= min\{m| f(m,n_1,...,n_k)=0 \text{ und } \forall x< m: f(x,n_1,...,n_k) \text{ definiert } \}$. Dabei ist min $\varnothing$ undefiniert. Wir sagen, dass die Funktion $\mu f$ aus f durch den $\mu$-Operator hervorgeht.
\end{flashcard}

\begin{flashcard}[Definition]{Die Klasse der $\mu$-rekursiven Funktionen ist rekursiv definiert}
\begin{itemize} 
\item Alle konstanten Funktionen $k_m:\mathbb{N}^0\rightarrow\mathbb{N}:()\rightarrow m$, alle Projektionen $\pi_i^k:\mathbb{N}^k\rightarrow \mathbb{N}: (n_1,...,n_k)\rightarrow n_i$ und die Nachfolgerfunktion $s:\mathbb{N}\rightarrow \mathbb{N}:n\rightarrow n+1$ sind $\mu$-rekursiv.
\item Sind $f:\mathbb{N}^k \rightarrow \mathbb{N}$ und $g_1,...,g_k:\mathbb{N}^r\rightarrow\mathbb{N}$ $\mu$-rekursiv, so auch $F:\mathbb{N}^r\rightarrow\mathbb{N}$ mit $F(n) = f(g_1(\bar{n}),..., g_k(\bar{n}))$ (wobei $F(n)$ genau dann definiert ist, wenn $g_i(n)$ für alle i definiert ist und wenn f auf diesen Werten definiert ist).
\item Jede partielle Funktion f , die durch Rekursion aus $\mu$-rekursiven Funktionen entsteht, ist $\mu$-rekursiv.
\item Ist f $\mu$-rekursiv, so auch $\mu f$. 
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{Ein GoTo Programm} 
ist eine endliche nichtleere Datei $P=A_1;A_2;...;A_m$ von Anweisungen $A_i$ der folgenden Form:
\begin{itemize}
\item $x_i=c, x_i=x_j+c, x_i=x_j-c$ mit $c\in\{0,1\}$ und $i,j\geq 1$
\item goto l mit $0\leq l\leq m$ (unbedingter Sprung)
\item if $x_i=0$ then l mit $i\geq 1$ und $0\leq l \leq m$ (bedingter Sprung) 
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Sei $P=A_1;A_2;...;A_m$ ein Goto Programm, in dem keine Variable $x_i$ mit $i>k$ vorkommt. Eine Konfiguration von P ist ein $(k+1)$-Tupel $(n_1,n_2,...,n_k,p)\in\mathbb{N}^k\times\{0,1,...,m\}$, wobei $n_i$ die Belegung der Variablen $x_i$ und p den Wert des Programmzählers beschreibt.
\end{flashcard}

\begin{flashcard}[Definition]{} $[[P]]_k(\bar{n})$ ist definiert, falls es $\bar{n'}\in\mathbb{N}^k$ gibt mit $(\bar{n},1)\vdash_P^* (\bar{n'},0)$. In diesem Fall gilt $[[P]]_k(\bar{n})=\bar{n'}$
\end{flashcard}

\begin{flashcard}[Definition]{ Eine partielle Funktion $f:\mathbb{N}^k\rightarrow\mathbb{N}$ heißt Goto berechenbar,} falls es ein $l\geq k$ und ein Goto Programm P, in dem keine Variable $x_i$ mit $i>l$ vorkommt, gibt, sodass für alle $\bar{n}\in\mathbb{N}^k$ gilt:\begin{itemize}
\item $f(n)$ definiert $\leftrightarrow [[P]]_l(\bar{n},0,...,0)$ definiert
\item Falls $f(\bar{n})$ definiert ist, gilt $f(\bar{n})=\pi_1^l ([[P]]_l(\bar{n},0,...,0))$
    \end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Seien $P=A_1;A_2;...;A_m;$ ein GoTo Programm und $(\bar{n},p), (\bar{n'},p')$ zwei Konfigurationen. Wir setzen $(\bar{n},p)\vdash_P (\bar{n'},p')$, falls $p>0$ und eine der folgenden Bedingungen gilt:\begin{itemize}
\item $A_p=(x_i=c), n'_i=c, n'_l=n_l \text{ für } l\not\ =i \text { und } p'=p+1$
\item $A_p=(x_i=x_j+c), n'_i=n_j+c, n'_l=n_l \text{ für } l\not\ =i \text{ und } p'=p+1$
\item $A_p=(x_i=x_j-c), n'_i=n_j-c, n'_l=n_l \text{ für } l\not\ =i \text{ und } p'=p+1$
\item $A_p=(goto l), \bar{n'}=\bar{n} \text{ und } p'=l$
\item $A_p=(if x_i=0 then l), n_i=0, \bar{n'}=\bar{n}, p'=l$
\item $A_p=(if x_i=0 then l), n_i\not=0, \bar{n'}=\bar{n}, p'=p+1$
    \end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ Eine Turingmaschine (TM)} ist ein 7-Tupel $M=(Z,\sum, \Phi, \delta, z_o, \Box, E)$, wobei\begin{itemize}
\item $\sum$ das Eingabealphabet
\item $\Phi$ mit $\Phi\supseteq\sum$ und $\Phi\cap Z\not= 0$ das Arbeits- oder Bandalphabet,
\item $z_0\in Z$ der Startzustand,
\item $\delta:Z\times\Phi\rightarrow(Z\times\Phi\times\{L,N,R\})$ die Überführungsfunktion
\item $\Box\in\Phi/\sum$ das Leerzeichen oder Blank und
\item $E\subseteq Z$ die Menge der Endzustände ist
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Eine Konfiguration einer Turingmaschine ist ein Wort $k\in\Phi^*Z\Phi^+$
Bedeutung: k=uzv\begin{itemize}
\item $u\in\Phi^*$ ist Abschnitt des Bandes vor Kopfposition der bereits besucht wurde
\item $z\in Z$ ost aktueller Zustand
\item $c\in\Phi^+$ ist Abschnitt des Bandes ab Kopfposition, der Besicht wurde oder im Bereich des Eingabewortes liegt.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Sei $M=(Z,\sum,\Phi,\delta,z_o,\Box,E)$ eine TM und k eine Konfiguration. Dann heißt k Haltekonfiguration falls für alle Konfigurationen $k'$ gilt: $k\vdash_M k'\Rightarrow k=k'$ (d.h. ist $k=uzav$, so gilt $\delta(z,a)=(z,a,N)$). Die Haltekonfiguration k ist akzeptierend, wenn zusätzlich $k\in\Box^*E\sum^*\Box^*$ gilt.
\end{flashcard}

\begin{flashcard}[Definition]{} Sei $M=(Z,\sum,\Phi,\delta,z_o,\Box,E)$ eine TM. Die von M berechnete partielle Funktion $f_M:\sum^*\rightarrow \sum^*$ erfüllt f+r alle $x,y\in\sum^*: f_M(x)=y\leftrightarrow \exists z_e \in E,i,j,\in\mathbb{N}:z_0x\Box \vdash_M^* \Box^i z_e y\Box^j$ und $\Box^iz_ey\Box^j$ ist Haltekonfiguration.
\end{flashcard}

\begin{flashcard}[Definition]{} Eine partielle Funktion $f:\sum^*\rightarrow\sum^*$ heißt Turing berechenbar, wenn es eine TM M gibt mti $g_M=f$.
\end{flashcard}

\begin{flashcard}[Definition]{} Sei $f:\mathbb{N}^k\rightarrow\mathbb{N}$ eine partielle Funktion. Definiere eine partielle Funktion $F:\{0,1,\#\}^*\rightarrow\{0,1,\#\}^*$ durch $F(w)=\begin{cases} bin(f(n_1,\dots ,n_k)) \quad\text{ falls } w=bin(n_1)\#bin(n_2)\#\dots \#bin(n_k) \text{ und } f(n_1,\dots,n_k) \text{ definiert} \\ \text{undefiniert} \quad{text{ sonst }}\end{cases}$. Dann heißt f Turing berechenbar, wenn F Turing berechenbar ist.
> (Für $n\in\mathbb{N}$ sei $bin(n)$ die Binärdarstellung der Zahl n)
\end{flashcard}

\begin{flashcard}[Definition]{Mehrband Tunringmaschine}\begin{itemize}
\item Eine Mehrband-Turingmaschine besitzt $k(k\geq 1)$ Bänder mit k unabhängigen Köpfen, aber nur eine Steuereinheit.
\item Aussehen der Übergangsfunktion: $\delta:Z\times\Phi^k\rightarrow (Z\times\Phi^k\times\{L,N,R\}^k)$ (ein Zustand, k Bandsymbole, k Bewegungen)
\item Die Ein- und Ausgabe stehen jeweils auf dem ersten Band. Zu Beginn und am Ende (in einer akzeptierenden Haltekonfiguration) sind die restlichen Bänder leer.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Satz]{ Zu jeder Mehrband Turingmaschine M gibt es} eine (Einband) Turingmaschine M' die diesselbe Funktion löst
Beweis:\begin{itemize}
\item Simulation mittels Einband-Turingmaschine durch Erweiterung des Alphabets: Wir fassen die übereinanderliegenden Bandeinträge zu einem Feld zusammen und markieren die Kopfpositionen auf jedem Band durch $\ast$. Neues Bandalphabet: $\Phi'=\sum\uplus\{\Box\}\uplus (\Phi\times\{\ast, \diamond\})^k$
\item Alphabetsymbol der Form $(a,\ast,b,\diamond,c,\ast,...)\in(\Phi\times\{\ast,\diamond\})^k$ bedeutet: 1. und 3. Kopd anwesen ($\ast$ Kopf anwesend, $\diamond$ Kopf nicht anwesend)
\end{itemize}
\end{flashcard}

\begin{flashcard}[Satz]{} Sei $g:\sum^*\rightarrow\sum^*$ eine Turing-berechenbare partielle Funktion. Dann wird g von einer TM M berechnet, für die gilt: $\forall x\in\sum^*\forall k$ Haltekonfiguration: $z_ox\Box\vdash_M^* k\Rightarrow k\in \Box^*E\sum^*\Box^*$.
\end{flashcard}

\begin{flashcard}[Satz]{} Sind $f:\mathbb{N}^k\rightarrow\mathbb{N}$ und $g_1,g_2,\dots,g_k:\mathbb{N}^l\rightarrow\mathbb{N}$ Turing berechenbar, so auch die partielle Funktion $f(g_1,g_2,\dots,g_k):\mathbb{N}^l\rightarrow\mathbb{N}$
\end{flashcard}

\begin{flashcard}[Definition]{ Eine Sprache $L\subseteq\sum^*$ hei entscheidbar,} falls die charakteristische Funktion von L, d.h. die Funktion $\chi_L:\sum^*\rightarrow\{0,1\}$ mit $\chi_L(w= = \begin{cases} 1 \quad\text{ falls } w\in L \\ 0 \quad\text{ falls } w\not\in L \end{cases}$ berechenbar ist. Eine Sprache die nicht entscheidbar ist, heißt unentscheidbar.
\end{flashcard}

\begin{flashcard}[Definition]{ das allgemeine Halteproblem ist die Sprache }$H=\{w\#x | w\in L_{TM}, x\in\{0,1\}^*, M_w \text{ angesetzt auf x hält}\}$
\end{flashcard}

\begin{flashcard}[Definition]{ das spezielle Halteproblem ist die Sprache }$K=\{w\in L_{TM} | M_w \text{ angesetzt auf w hält}\}$
\end{flashcard}

\begin{flashcard}[Satz]{} Das spezielle Halteproblem ist unentscheidbar
\end{flashcard}

\begin{flashcard}[Definition]{} Seien $A\subseteq\sum^*,B\subseteq\Phi^*$. Eine Reduktion von A auf B ist eine totale und berechenbare Funktion $f:\sum^*\rightarrow\Phi^*$, so dass für alle $w\in\sum^*$ gilt: $w\in A\leftrightarrow f(x)\in B$. A heißt auf B reduzierbar (in Zeichen $A\leq B$), falls es eine Reduktion von A auf B gibt.
\end{flashcard}

\begin{flashcard}[Satz]{} Das allgemeine Halteproblem ist unentscheidbar
\end{flashcard}

\begin{flashcard}[Satz]{} Das Halteproblem auf leerem Band ist unentscheidbar
\end{flashcard}

\begin{flashcard}[Satz]{} Satz  von Rice: Sei $R$ die Klasse aller Turing-berechenbaren Funktionen $\{0,1\}^*\rightarrow\{0,1\}^*$, $\Omega$ die nirgendwo definierte Funktion und sei $S\subseteq R$ mit $\Omega\in S$ und $\not = R$. Dann ist die Sprache $C(S)=\{w\in L_{TM} | \phi_w\in S\}$ unentscheidbar.
\end{flashcard}

\begin{flashcard}[Definition]{} Eine Sprache $L\subseteq \sum^*$ heißt semi-entscheidbar, falls die "halbe" charakteristische Funktion von L, d.h. die partielle Funktion $X'_L:\sum^* \rightarrow \{1\}$ mit $x'_L=\begin{cases} 1 \quad\text{ falls } w\in L\\ undef. \quad\text{ falls } w\not\in L \end{cases}$ berechenbar ist.
\end{flashcard}

\begin{flashcard}[Satz]{} Ein Problem $L\subseteq \sum^*$ ist gneua dann entscheidbar, wenn sowohl L als auch $\bar{L}=\sum^*\backslash L$ semi-entscheidbar sind.
1. $w\in L$, dann existiert $t\in\mathbb{N}$, so dass $M_L$ nach t Schritten terminiert. Wegen $w\not\in\bar{L}$ terminiert $M_{\bar{L}}$ niemals.
2. $w\not\in L$, dann existiert $t\in\mathbb{N}$, so dass $M_{\bar{L}}$ nach t Schritten terminiert. Wegen $w\not\in L$ terminiert $M_L$ niemals.

Dieses letzte Argument heißt mitunter "Schwalbenschwanz-Argument".
\end{flashcard}

\begin{flashcard}[Satz]{Sei $L\subseteq \sum^*$ eine nichtleere Sprache. Dann sind äquivalent}\begin{itemize}
\item L ist semi-entscheidbar
\item L wird von einer Turing-Maschine akzeptiert
\item L ist vom Typ 0 (d.h. von einer Grammatik erzeugt)
\item L ist Bild einer berechenbaren partiellen Funktion $\sum^*\rightarrow\sum^*$
\item L ist Bild einer berechenbaren totalen Funktion $\sum^*\rightarrow\sum^*$
\item L ist rekursiv aufzählbar
\item L ist Definitionsbereich einer berechenbaren partiellen Funktion $\sum^*\rightarrow\sum^*$
    \end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{} Sei $M$ eine Turing Maschine. DIe von M akzeptierte Sprache ist $L(M)=\{ w\in\sum^* | \text{es gibt akzept. Haltekonf. mit } z_0w\Box\vdash_M^* k\}$.
\end{flashcard}

\begin{flashcard}[Definition]{} Eine Sprache $L\subseteq \sum^*$ heißt rekursiv aufzählbar, falls $L\not\in\varnothing$ oder es eine totale und berechenbare Funktion $f:\mathbb{N}\rightarrow\sum^*$ gibt mit $L=\{f(n)| n\in\mathbb{N}\}=\{f(0), f(1),f(2),...\}$.
\end{flashcard}


\begin{flashcard}[Definition]{} Eine Turing Maschine U heißt universelle Turing Maschine, wenn sie die folgende partielle Funktion berechnet. $\{0,1\}^*\rightarrow\{0,1\}^*$
> $$y\rightarrow\begin{cases} \phi_w(x) \quad\text{ falls } y=w000x,w\in L_{TM},x\in\{0,1\}^* \\ undef. \quad\text{ sonst}\end{cases}$$
- U hält bei Eingabe $w000x$ genau dann, wenn $M_w$ bei Eingabe x hält
- U akzeptiert $w000x$ genau dann, wenn $M_w$ das Wort x akzeptiert
\end{flashcard}

\begin{flashcard}[Satz]{} Es gibt eine universelle Turing Maschine
Beweis: eine Turing Maschine mit drei Bändern. 
- 1.Band: Kode w der zu simulierenden Turing Maschine $M_w$
- 2.Band: aktueller Zustand der zu simulierenden Turing Maschine $M_w$
- 3.Band: augenblicklicher Bandinhalt der Turing Maschine $M_w$
1. Initialisierung: auf 1.Band steht w000x mit $w\in L_{TM}$. Kopiere x auf 3.Band und lösche 000x auf erstem, schreibe 010 auf 2.Band
2. Simulation: stehen auf 2.Band $01^{i+1}0$ und auf 3. an Kopfposition j, so suche auf 1.Band Anweisung $(z_{i'},a_{j'},y)=\delta(z_i,a_j)$ und schreibe $01^{i'+1}0$ auf 2.Band; ersetzte j an Kopfposition auf 3.Band durch $j'$; bewege 3.Kopf entsprechend y nah rechts, links oder aber auch nicht.
3. Aufräumen: bei Erreichen einer akzeptierenden Haltekonfiguration auf 3.Band
\end{flashcard}

\begin{flashcard}[Satz]{} das spezielle Halteproblem $K=\{w\in L_{TM} | M_w \text{ angesetzt auf w hält}\}$ ist semi-entscheidbar.
\end{flashcard}

\begin{flashcard}[Satz]{} es gibt eine Grammatik G, deren Wortproblem $L(G)$ unentscheidbar ist.

Folgerung: es gibt eine Typ-0 Sprache, die nicht vom Typ 1 ist.
\end{flashcard}

\begin{flashcard}[Satz]{} das allgemeine Wortproblem $A=\{(G,w) | \text{ G ist Grammatik mit } w\in L(G)\}$ ist unentscheidbar.
\end{flashcard}


\begin{flashcard}[Definition]{}
> 1. Ein Korrespondezsystem ist eine endliche Folge von Paaren $K=((x_1,y_1),(x_2,y_2),...,(x_k,y_k))$ mit $x_i,y_i\in\sum^+$ für alle $1\leq i \leq k$ (dabei ist $\sum$ ein beliebiges Alphabet)
> 2. Eine Lösung von K ist eine endliche Folge von Indizes $i_1,i_2,...,i_n \in \{1,2,...,k\}$ mit $n\geq 1$ und $x_{i1} x_{i2} ... x_{in}=y_{i1} y_{i2}... y_{in}$.
> 3. MPCP ("modifiziertes PCP") ist die Menge der Korrespondezsysteme, die eine Lösung mit $i_1=1$ besitzen
> 4. PCP ist die Menge der Korrespondenzsysteme, die eine Lösung besitzen
\end{flashcard}
 

\begin{flashcard}[Satz]{} Satz  (Emil Post, 1947): PCP ist unentscheidbar. (T. Neary 2015: 5 Paare reichen hierfür.)
\end{flashcard}

\begin{flashcard}[Satz]{} PCP ist semi-entscheidbar.
\end{flashcard}

\begin{flashcard}[Satz]{} Das Regularitätsproblem für PDAs $Reg_{PDA} = \{P | \text{P PDA mit L(P) regulär}\}$ ist nicht semi-entscheidbar.
\end{flashcard}

\begin{flashcard}[Satz]{} Satz  (Stearns 1967): Das Regularitätsproblem für DPDAs $Reg_{DPDA} = \{ P | \text{P DPDA mit L(P) regulär}\}$ ist entscheidbar.
\end{flashcard}

\begin{flashcard}[Satz]{} Das Schnittproblem für DPDAs $Schn_{DPDA} = \{(P_1, P_2 ) | P_1, P_2 \text{ DPDAs mit } L(P_1)\cap L(P_2) = \varnothing\}$ ist nicht semi-entscheidbar.
\end{flashcard}

    \begin{flashcard}[Definition]{ Church-Turing These} Die Funktionen, die durch Turingmaschinen bzw. While/Goto-Programme berechnet werden können, sind genau die intuitiv berechenbaren Funktionen.
    \end{flashcard}

        \begin{flashcard}[Definition]{Unentscheidbarkeit} Probleme, die nicht durch Turing-Maschinen gelöst werden können, sind damit prinzipiell unlösbar (wenn auch u.U. semi-entscheidbar). Beispiele:\begin{itemize}
\item die verschiedenen Versionen des Halteproblems
\item Posts Korrespondenzproblem
\item das Schnitt- und verwandte Probleme über kontextfreie Sprachen
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{Intuitiver Effizienzbegriff} 
Das Wortproblem einer Sprache L ist effizient entscheidbar, wenn es einen Algorithmus gibt, der die Antwort auf die Frage "Gehört das Wort w zu L?" mit geringen Ressourcen (Zeit, Speicherplatz) bestimmt. "mit geringen Ressourcen" heißt hier, daß die benötigten Ressourcen nur moderat mit der Eingabelänge $|w|$ wachsen.
\end{flashcard}

\begin{flashcard}[Definition]{Deterministische Zeitklassen} 
Sei $f:\mathbb{N}\rightarrow\mathbb{N}$ eine monotone Funktion. Die Klasse $TIME(f)$ besteht aus allen Sprachen L, für die es eine Turingmaschine M gibt mit:
\begin{itemize}
\item M berechnet die charakteristische Funktion von L.
\item Für jede Eingabe $w\in\sum^*$ erreicht M von der Startkonfiguration $z_0 w\Box$ aus nach höchstens $f(|w|)$ Rechenschritten eine akzeptierende Haltekonfiguration (und gibt 0 oder 1 aus, je nachdem ob $w\not\in L$ oder $w\in L$ gilt).
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{ REACH} ist die Menge der gerichteten Graphen mit zwei ausgezeichneten Knoten s und t, in denen es einen Pfad von s nach t gibt.
 REACH ist in P. (Beweis: z.B. mit Dijkstras Algorithmus)
\end{flashcard}

 \begin{flashcard}[Definition]{Euler-Kreise}  EC ist die Menge der ungerichteten Graphen, die einen Eulerkreis (d.h. einen Kreis, der jede Kante genau einmal durchläuft) enthalten.
 \end{flashcard}

\begin{flashcard}[Satz]{ Satz  (Euler 1707-1783, 1736)} Ein Graph $(V,E)$ enthält einen Eulerkreis genau dann, wenn er höchstens eine Zusammenhangskomponente mit $>1$ Knoten enthält und jeder Knoten geraden Grad hat (d.h. jeder Knoten hat eine gerade Anzahl von Nachbarn).

Folgerung: EC ist in P, denn die genannten Bedingungen lassen sich in polynomieller Zeit prüfen.

Die erweiterte Church-Turing These: P umfaßt die Klasse der effizient lösbaren Probleme.
\end{flashcard}

\begin{flashcard}[Definition]{Deterministische Platzklassen}
 Sei $f:\mathbb{N}\rightarrow\mathbb{N}$ eine monotone Funktion. Die Klasse $SPACE(f )$ besteht aus allen Sprachen L, für die es eine Turingmaschine M gibt mit:\begin{itemize}
\item M berechnet die charakteristische Funktion von L.
\item Für jede Eingabe $w\in\sum^*$ hat jede von der Startkonfiguration $z_0 w\Box$ aus erreichbare Konfiguration höchstens die Länge $f(|w|)$.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{Definition}
$$PSPACE = \bigcup_{f\in Poly} SPACE(f)$$
$$EXPSPACE = \bigcup_{f\in Poly} SPACE(2^f)$$
$$2EXPSPACE = \bigcup_{f\in Poly} SPACE(2^{2^{f}})...$$
\end{flashcard}

\begin{flashcard}[Definition]{ SAT }ist die Menge der erfüllbaren aussagenlogischen Formeln.

Beobachtung: SAT 2 PSPACE
\end{flashcard}

\begin{flashcard}[Definition]{Hamilton-Kreise HC } ist die Menge der ungerichteten Graphen, die einen Hamiltonkreis (d.h. einen Kreis, der jeden Knoten genau einmal besucht) enthalten.
\end{flashcard}

\begin{flashcard}[Definition]{3-Färbbarkeit  3C}: 3C ist die Menge der ungerichteten Graphen, deren Knoten sich mit drei Farben färben lassen, so daß benachbarte Knoten unterschiedliche Farben haben.

Beobachtung: $3C \in PSPACE$
\end{flashcard}

\begin{flashcard}[Definition]{Sei M NTM. Die von M akzeptierte Sprache ist }$L(M) = \{w\in\sum^* | \text{ es gibt akzept. Haltekonf. k mit } z_0 w\Box \vdash_M^* k\}$.
\end{flashcard}

\begin{flashcard}[Satz]{Determinisierbarkeit von NTM} Zu jeder nichtdeterministischen Turingmaschine gibt es eine Turingmaschine, die dieselbe Sprache akzeptiert.
\end{flashcard}

\begin{flashcard}[Definition]{ Nichtdeterministische Zeitklassen}
Sei $f:\mathbb{N}\rightarrow\mathbb{N}$ eine monotone Funktion. Die Klasse $NTIME(f)$ besteht aus allen Sprachen L, für die es eine nichtdeterministische Turingmaschine M gibt mit:\begin{itemize}
\item M akzeptiert L.
\item Für jede Eingabe $w\in\sum^*$ hält M auf jeden Fall nach $f(|w|)$ vielen Schritten.
\end{itemize}
Definition\begin{itemize}
\item $$NP = \bigcup_{f\in Poly} NTIME(f)$$
\item $$NEXPTIME = \bigcup_{f\in Poly} NTIME(2^f)$$
\item $$2NEXPTIME = \bigcup_{f\in Poly} NTIME(2^{2^{f}})...$$
\end{itemize}
Lemma: $NP \subseteq PSPACE, NEXPTIME \subseteq EXPSPACE, 2NEXPTIME \subseteq 2EXPSPACE ...$
\end{flashcard}

\begin{flashcard}[Definition]{Nichtdeterministische Platzklassen} Sei $f:\mathbb{N}\rightarrow\mathbb{N}$ eine monotone Funktion. Die Klasse $NSPACE(f)$ besteht aus allen Sprachen L, für die es eine nichtdeterministische Turingmaschine M gibt mit:
- M akzeptiert L.
- Für jede Eingabe $w\in\sum^*$ folgt $|k| \leq f(|w|)$ aus $z_0 w\Box\vdash_M^* k$.
\end{flashcard}

\begin{flashcard}[Satz]{ Satz  von Kuroda (1964)}
Sei L eine Sprache. Dann sind äquivalent
\begin{itemize}
\item 1. L ist kontextsensitiv (d.h. vom Typ 1)
\item 2. $L\in NSPACE(n)$
    \end{itemize}
\end{flashcard}

\begin{flashcard}[Satz]{ Satz  von Savitch (1970)}
Für jede super-lineare monotone Funktion $f:\mathbb{N}\rightarrow\mathbb{N}$ gilt $NSPACE (f(n))\subseteq SPACE((f(n))^2)$.

Damit haben wir die folgende Struktur der Komplexitätsklassen:\begin{enumerate}
\item P
\item NP
\item PSPACE = NPSPACE
\item EXPTIME
\item NEXPTIME
\item EXPSPACE = NEXPSPACE
\end{enumerate}
\end{flashcard}

\begin{flashcard}[Definition]{NP-Vollständigkeit} 
Eine Sprache B ist NP-hart, falls für alle $A\in NP$ gilt: $A \leq_P B$ (A ist mindestens so schwer wie jedes Problem in NP). Eine Sprache ist NP-vollständig, falls sie zu NP gehört und NP-hart ist.
\end{flashcard}

\begin{flashcard}[Satz]{SAT Vollständigkeit} 
Stephen Cook \& Leonid Levin: SAT ist NP-vollständig.
\end{flashcard}

\begin{flashcard}[Definition]{3-SAT}
3-SAT ist die Menge der erfüllbaren aussagenlogischen Formeln in konjunktiver Normalform mit höchstens drei Literalen pro Klausel.
\end{flashcard}

\begin{flashcard}[Satz]{3-SAT vollständigkeit}
Das Problem 3-SAT ist NP-vollständig.
\end{flashcard}

\begin{flashcard}[Satz]{SAT und 3-SAT vollständigkeit}
    Die Probleme SAT und 3-SAT sind NP-vollständig.
\end{flashcard}

\begin{flashcard}[Satz]{ist eine Formel $\phi$ in KNF mit höchstens zwei Literalen pro Klausel erfüllbar?}
    Es ist in Polynomialzeit entscheidbar, ob eine Formel $\phi$ in KNF mit höchstens zwei Literalen pro Klausel erfüllbar ist. 
Beweisidee: konstruieren gerichteten Graphen G:
\begin{itemize}
\item Für jede atomare Formel $x$ aus $\phi$ gibt es die Knoten $x$ und $\neg x$.
\item Für jede Klausel $\alpha\vee\beta$ in $\phi$ gibt es Kanten $\sim\alpha\rightarrow\beta$ und $\sim\beta\rightarrow\alpha$, wobei $\sim x =\neg x$ und $\sim\neg x=x$ gelte.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Satz]{Erfüllbarkeitsprobleme vollständigkeit} 
\begin{itemize}
\item Die Erfüllbarkeitsprobleme SAT und 3-SAT sind NP-vollständig.
\item Das Erfüllbarkeitsproblem 2-SAT ist in P.
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{kC}
kC ist die Menge der ungerichteten Graphen, die sich mit k Farben färben lassen.

Ein Graph ist genau dann 2-färbbar, wenn er bipartit ist. Das Problem 2C ist also in P.
\end{flashcard}

\begin{flashcard}[Satz]{ 3C vollständigkeit}
    Das Problem 3C ist NP-vollständig.
\end{flashcard}

\begin{flashcard}{DHC - Gerichteter Hamiltonkreis}
\begin{itemize}
\item EINGABE: ein gerichteter Graph $G = (V , E )$ mit Knotenmenge $V$ und Kantenmenge $E\supseteq V\times V$.
\item FRAGE: Besitzt der Graph G einen Hamiltonkreis, d.h. kann man den Graphen so durchlaufen, dass jeder Knoten genau einmal besucht wird?
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{DHC}
DHC ist die Menge der gerichteten Graphen, die einen Hamiltonkreis enthalten.
\end{flashcard}

\begin{flashcard}[Satz]{DHV vollständigkeit} 
Das Problem DHC ist NP-vollständig.
\end{flashcard}

\begin{flashcard}{HC - Ungerichteter Hamiltonkreis}
\begin{itemize}
\item EINGABE: ein ungerichteter Graph $G=(V,E)$ mit Knotenmenge $V$ und Kantenmenge $E\supseteq \binom{V}{2} = \{X\subseteq V | |X|=2\}$.
\item FRAGE: Besitzt der Graph G einen Hamiltonkreis, d.h. kann man den Graphen so durchlaufen, dass jeder Knoten genau einmal besucht wird?
\end{itemize}
\end{flashcard}

\begin{flashcard}[Definition]{HC}
ist die Menge der ungerichteten Graphen, die einen Hamiltonkreis enthalten.
\end{flashcard}

\begin{flashcard}[Satz]{HC vollständigkeit}
as Problem HC ist NP-vollständig.
\end{flashcard}

\begin{flashcard}{TSP - Travelling Salesman}
\begin{itemize}
\item EINGABE: eine $n\times n$-Matrix $M = (M_{i,j})$ von Entfernungen zwischen $n$ Städten und eine Zahl $d$.
\item FRAGE: Gibt es eine Tour durch alle Städte, die maximal die Länge d hat? Das heißt, gibt es eine Indexfolge $i_1,...,i_m$, so dass gilt:
\item $\{i_1,...,i_m\} = \{1,...,n\}$ (jede Stadt kommt vor)
\item $M_{i_1,i_2} + M_{i_2,i_3} +...+ M_{i_{m-1},i_m} + M_{i_m,i_1} \leq d$ (die Länge Tour ist höchstens d)
\end{itemize}
\end{flashcard}

\begin{flashcard}[Satz]{Das Problem TSP} ist NP-vollständig.
\begin{itemize}
\item Beweis: $TSP\in NP$ ist einfach zu sehen, da eine Indexfolge geraten und in polynomieller Zeit überprüft werden kann, ob sie die Bedingungen erfüllt.
\item Für die NP-Härte zeigen wir $HC\leq_P TSP$: Sei $G=(V,E)$ ein ungerichteter Graph, o.E. $V=\{1,...,n\}$. Wir konstruieren dazu folgende Matrix: $M_{i,j}=\begin{cases} 1\quad\text{ falls } \{i,j\}\in E\\ 2 \quad\text{ falls }\not\in E\end{cases}$
\item Außerdem setzen wir $d=n$.
\end{itemize}
\end{flashcard}

\begin{flashcard}{Church-Turing These} Die Church-Turing These besagt, dass die Funktionen, die durch Turingmaschinen bzw. While-/Goto-Programme berechnet werden können, genau die intuitiv berechenbaren Funktionen sind. 
\end{flashcard}

\begin{flashcard}{Unentscheidbarkeit} Probleme, die nicht durch Turing-Maschinen gelöst werden können, sind damit prinzipiell unlösbar (wenn auch u.U. semi-entscheidbar).
\end{flashcard}

\begin{flashcard}{Erweiterte Church-Turing These} Die erweiterte Church-Turing These besagt, dass die Funktionen, die durch Turingmaschine bzw. While-/Goto-Programme in Polynomialzeit berechnet werden können, genau die intuitiv und effizient berechenbaren Funktionen sind.
\end{flashcard}

\begin{flashcard}{Turing Maschinen für NP und darüber} Probleme, die durch Turing-Maschinen nicht in Polynomialzeit gelöst werden können, sind damit prinzipiell nicht effizient lösbar.
\end{flashcard}

\end{document}

\begin{flashcard}[Definition]{Text}
    Text
\end{flashcard}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%