Sie sind auf Seite 1von 171

Prof.

Javier Esparza Technische Universität München


Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Übungsblatt 1

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü1.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• Alphabet Σ; Σ∗ • Ableitungsrelation
• Wort w, |w|, ε, ww, wn • Chomsky-Hierarchie
• formale Sprache A; AA, A∗ , A+ • Wortproblem
• reflexive transitive Hülle • DFA, NFA
• Grammatik G; L(G), AA • Akzeptanzbedingung von DFAs/NFAs

Individualaufgabe Ü1.2. (Automata Tutor: DFA / NFA / Grammatiken)


Automata Tutor (AT) ist ein Online-Tool, mit dem Sie zu vielen Themen aus dem THEO-
Kurs Aufgaben bearbeiten können. Dabei bekommen Sie sogar automatisch individuelles
Feedback! Da wir AT auch für Hausaufgaben verwenden werden, ist es wichtig, dass Sie
sich auf AT ein Konto anlegen, dass mit Ihrem TUM-Login verknüpft ist. Dafür gehen
Sie wie folgt vor:
(a) Besuchen die die Webseite https://automata-tutor.model.in.tum.de.
(b) Klicken Sie auf „TUM Login“ (nicht auf „Register“) und geben Sie ihre TUM-
Kennung (z.B. ab12cde) mit Passwort ein, um ein Konto zu erstellen.
(c) Schreiben sich sich unter „Enroll in course“ mit der Kurs-ID „TUM Theo SS21“
und Passwort „BKIFJCTE“ ein.
(d) Klicken Sie auf „View“, um die aktuellen Aufgaben einzusehen.
Dann können Sie die Aufgaben Ü1.2 (a–l) lösen.
Achtung: Für die Übungsaufgaben haben Sie beliebig viele Versuche. Für die Hausauf-
gaben H1.1 (a–c) nicht!

Individualaufgabe Ü1.3. (NFA / DFA Konstruktionsideen)


Beschreiben Sie in eigenen Worten, wie man im Allgemeinen einen Automaten konstru-
iert, der eine Sprache erkennt, die
(a) nur Wörter enthält, die eine bestimmte Sequenz von Buchstaben enthalten,
(b) am Anfang/Ende jedes Wortes eine bestimmte Sequenz von Buchstaben fordert,
(c) nur Worte gerader/ungerader Länge enthält,
(d) von jedem Wort verlangt, eine bestimmte Anzahl an Buchstaben zu enthalten,
(e) deren Worte an einer fixierten Position einen bestimmten Buchstaben haben müs-
sen.
Lösungsskizze. Zu dieser Aufgabe gibt es auch eine Video-Lösung.
(a) Sei u = u1 . . . un ein Wort. Wir betrachten dann den folgenden NFA:
u1 u2 un
q0 q1 ... qn

Dieser NFA akzeptiert die Sprache {u}. Wenn wir bei q0 und qn noch eine Schleife
mit Σ hinzufügen, akzeptiert der NFA genau die Sprache aller Wörter, die u ent-
halten. Um daraus einen DFA zu bekommen muss man bei q0 die Schleife mit dem
Zeichen u1 entfernen, und von den Zuständen qi Rückwärtskanten für die Zeichen
Σ \ ui+1 einfügen. Das Ziel dieser Kanten muss immer das längste Präfix von u
sein, das ein Suffix der bisher gelesenen Zeichenkette ist. Alternativ kann man den
NFA natürlich mit der Potenzmengenkonstruktion determinisieren.

(b) Ähnlich wie (a). Wenn u am Ende des Wortes vorkommen soll, dann macht man
eine Schleife mit Σ an q0 , soll es am Anfang vorkommen gehört die Schleife an qn .
Im letzteren Fall ist die Determinisierung leicht, man fügt von allen Zuständen qi
(außer qn ) eine Transition mit Σ \ ui+1 in einen Fangzustand ein.
Soll u am Ende des Wortes vorkommen, müssen wir wie bei (a) Rückwärtskanten
einfügen.

(c)
Σ
q0 q1
Σ

Wenn q0 zu einem Endzustand gemacht wird, akzeptiert dieser DFA genau alle
Wörter gerader Länge. Wird hingegen q1 zum Endzustand gemacht, so akzeptiert
er genau alle Wörter ungerader Länge.

(d) Ähnlich zu (a). Der folgende NFA akzeptiert genau alle Wörter der Länge n:

q0 Σ q1 Σ ... Σ qn
Σ
Fügt man noch einen Fangzustand ∅ Σ hinzu und verbindet qn → ∅, so er-
halten wir sogar einen DFA.

(e) Es geht um alle Wörter w, die an der Stelle n den Buchstaben a haben. Man kann
den NFA aus dem ersten Teil von (a) leicht anpassen:
q0 Σ q1 Σ ... Σ qn−1 a qn Σ

Auch hier erreicht man durch Hinzufügen eines Fangzustands wieder einen DFA.

Übung und Nachbereitung

Übungsaufgabe Ü1.4. (Kahoot)


Spielen Sie in der Übungsgruppe das Kahoot zum Stoff der aktuellen Woche. Gehen Sie
dafür auf www.kahoot.it und geben Sie den Game PIN auf dem Bildschirm Ihres Tutors
an.
Lösungsskizze.
• Auf Kahoot Übungsblatt 1.4 klicken,
• „Play as guest“ → „Continue as a guest“,
• unter „Game options“ die Fragen und Antworten auf den Geräten der Spieler
anzeigen lassen,
• auf „Classic“ klicken,
• oben links die Sprache auf Deutsch ändern, und
• nachdem die Studenten mit dem Game-Pin beigetreten sind, auf „Start“ drücken.

Fokusaufgabe Ü1.5. (kleine DFAs vs kleine NFAs)


Sei Σ := {a, b} und Bn := {w ∈ Σ∗ | ∃i : wi = wi+n } die Sprache aller Wörter über Σ, in
denen an irgendeiner Stelle der gleiche Buchstabe im Abstand n vorkommt. Insbesondere
ist B0 die Menge aller nichtleeren Wörter, und B1 die Menge aller Wörter, in denen
ein Buchstabe zweimal hintereinander vorkommt. Versuchen Sie in allen Aufgabenteilen
NFAs und DFAs mit möglichst wenigen Zuständen anzugeben.
(a) Geben Sie jeweils einen NFA für B0 , B1 und B2 an.
(b) Geben Sie jeweils einen DFA für B0 , B1 und B2 an.
(c) Beschreiben Sie kurz, wie der DFA Bn und der NFA Bn für beliebige n ∈ N
aussehen.
(d) Beurteilen Sie die folgende Aussage: Es gibt einen NFA für Bn mit O(n)-vielen
Zuständen, aber jeder DFA zu Bn hat mindestens Ω(2n )-viele Zustände.
Lösungsskizze. Hinweis: Wir haben uns dazu entschlossen, in der ersten Woche des
Übungsbetriebs die Lösung zur Fokusaufgabe zu veröffentlichen. Beachten Sie bitte, dass
wir nicht die Absicht haben, zu allen Fokusaufgaben Lösungen zu veröffentlichen.
Zu dieser Aufgabe gibt es eine Video-Lösung.
(a), (b):
a, b a, b

a, b a, b
q0 q1 q0 q1

NFA für B0 DFA für B0

a, b q1 a, b q1 a, b
a a a a
q0 q3 q0 a b q3

b q2 b b q2 b

NFA für B1 DFA für B1

a, b
a, b q1 q3 a, b
a a
q0 q5

b q2 q4 b
a, b

NFA für B2

q3
b
b
q1 q4 a
a a
a
q0 a b q7 a, b
b
b q2 a q5
a b
b q6

DFA für B2
(c) Der NFA rät, ob jetzt das i-te Zeichen gelesen wird, welches die Bedingung erfüllt.
Der DFA muss sich hingegen immer die letzten n Zeichen die er gelesen hat merken,
um zu überprüfen, ob die Bedingung wi = wi+n erfüllt ist.
(d) Die Aussage ist korrekt. Der Beweis ist ähnlich zu dem Beweis in den Vorlesungs-
folien zur Sprache Lk . (Lemma 3.12)

Übungsaufgabe Ü1.6. (Grammatiken entwerfen)


Bestimmen Sie für jede der folgenden Sprachen eine passende Grammatik G, so dass
L(G) genau die Sprache ist.
(a) A = {w ∈ {0, 1}∗ : |w| gerade} (d) D = {ww : w ∈ {a, b}∗ } *
(b) B = {w ∈ {0, 1}+ : (w)2 gerade} (e) E = {a n2 : n ≥ 0} ***
(c) C = {wwR :w∈ {a, b}∗ }
Hinweise:
• (w)2 ist der Wert von w ∈ {0, 1}∗ zur Basis 2, also z.B. (101010)2 = 42.
• Wir bezeichnen mit wR die Spiegelung von w, d.h. (abb)R = bba, εR = ε.
• Eine mögliche Lösung von Aufgabenteil (d) erweitert die Grammatik von Aufga-
benteil (c) passend.
• Für Aufgabe (e) ist diese Gleichung hilfreich.
Lösungsskizze.
(a) G = ({S}, {0, 1}, P, S) mit P : S → 01S | 10S | 11S | 00S | ε
(b) G = ({S}, {0, 1}, P, S) mit P : S → 0S | 1S | 0. Lösung ohne führende Nullen:
G = ({S, X}, {0, 1}, P, S) mit P : S → 1X | 0 X → 0X | 1X | 0
(c) G = ({S}, {a, b}, P, S) mit P : S → aSa | bSb | ε
(d) Es gibt hier drei Ansätze zur Lösung:
1. G = ({S, X, O, A, B}, {a, b}, P, S) mit Produktionen P wie folgt

S → XO O → ε X → XaA | XbB | ε
Aa → aA Ba → aB AO → Oa
Ab → bA Bb → bB BO → Ob

Wir schreiben alle Buchstaben das Wortes doppelt und verschieben A und B
bis zum Ende (markiert mit O) und wandeln dort das Zeichen wieder um.
Vielen Dank an David Schneller für diese Lösung.

− → −
2. G = ({S, X, O, A, B, A , B }, {a, b}, P, S) mit Produktionen P wie folgt

S → XO O→ε X → aXA | bXB | O



− →
− →
− →
− →

OA → O A AA → AA AB → B A

− →
− →
− →
− →

OB → O B B A → AB BB → BB

− →
− →

AO → a A a → aa A b → ab

− →
− →

BO → b B a → ba B b → bb
Wir erzeugen erst wOwR O und verschieben dann alle Buchstaben von der
Mitte beginnend an das Ende (O). Vielen Dank an Jan Schuchardt für diese
Lösung.

− ←
− → −
3. G = ({S, S 0 , A, A , B, B , X , •, ◦}, {a, b}, P, S) mit Produktionen P wie folgt

S → S0• S 0 → AS 0 A | BS 0 B | ◦
←− ←
− ←
− ←
− ←

A→a A• → A ◦ AA → AA B A → AB

− ←
− ←
− ←
− ←

B→b B• → B ◦ AB → B A B B → B B
←− ←− →

◦ A → A• ◦ B → B• • → ◦X

− →
− →
− →
− → −
X A → AX X B → B X X ◦ → •
◦• → ε •◦ → ε

Ein beliebiges Wort w zu erzeugen ist leicht. Im Aufgabenteil (c) sieht man,
wie man wwR bilden kann. Die Idee hinter dieser Aufgabe ist, zuerst wwR zu
bilden, aber alle Elemente von wR voerst als Nichtterminale darzustellen. Im
Anschluss verschieben wir die Nichtterminale in wR an die richtige Position
und ersetzen Sie schlussendlich durch Terminale. Die Intuition der Lösung

− ← −
ist, dass •, X , X den aktiven Bereich der Berechnung darstellen, wobei X ∈
{A, B}. ◦ ist der deaktivierte Begrenzer, der markiert, bis zu welcher Position
wir noch Buchstaben verschieben müssen. ◦ trennt zunächst die w und wR
voneinander. Mit jedem Buchstaben, den wir vom Ende von wR nach vorne
verschieben, wandert ◦ weiter nach rechts.

− → −
(e) G = ({S, A, A , A , •, ◦, #, $, X# }, {a, b}, P, S) mit Produktionen P wie folgt

S → •AX# $ X# → #X# | ε A → a

− →
− →
− ←
− ←−
•A → A ◦ A AA → AA AA → AA

− →
− ←

◦ A # → •AAA A A # → A #A

− ←−
A$ → ε ◦→ε ◦ A → •A

Die Grammatik rät zuerst die natürliche Zahl n und erzeugt dann alle ungerade
Zahlen 1, 3, ..., 2n (1 wird mit einem Nichtterminal dargestellt, welches am Ende
durch ein Terminal ersetzt wird, 3 mit drei solchen Nichtterminalen, etc.). Die
Summe all dieser ungeraden Zahlen ergibt gerade n2 , damit erhalten wir gerade eine
Zeichensequenz mit n2 Nichtterminalen, die im letzten Schritt dann mit Terminalen
ersetzt werden.

Übungsaufgabe Ü1.7. (baaaaaaaaa...)


Sei Σ = {a, b} und L = {ban } für ein beliebiges aber festes n ∈ N0 .
(a) Sei n = 3. Zeichnen Sie einen NFA, der L erkennt.
(b) Zeigen sie, dass jeder NFA, der die Sprache L erkennt, mindestens n + 2 Zustände
hat.
Lösungsskizze.
(a) Skizze:
q0 b q1 a q2 a q3 a q4

(b) Beweis. Annahme zum Widerspruch: Es gibt einen Automaten M = (Q, Σ, δ, q0 , F)


mit weniger als n + 2 Zuständen, der L akzeptiert. Da M das Wort w = ban akzep-
b a a
tiert und |ban | = n + 1, muss es einen akzeptierenden Lauf L = s0 → s1 → ... →
sn+1 ∈ F geben wobei s0 = q0 . Es gibt aber höchstens n + 1 Zustände, daher folgt
nach Schubfachprinzip, dass mindestens ein Zustand si durch den Lauf zweimal
w wi+1 wj−1
besucht wird. Dadurch gibt es einen Kreis si →i si+1 → D · · · → sj in L, wobei
w wi−1 wj wj+1
si = sj . Wenn wir den Kreis abkürzen, d.h. den Lauf s0 →0 ... → si → sj+1 →
w
... →n qn+1 ∈ F betrachten, dann ist dies auch ein akzeptierender Lauf. Deshalb
akzeptiert M ein Wort w0 mit |w0 | < n + 1, was ein Widerspruch zur Annahme ist,
dass M die Sprache W akzeptiert.

Übungsaufgabe Ü1.8. (endlich Beweise)


Sei Σ ein Alphabet und A, B, C ⊆ Σ∗ beliebig. Entscheiden Sie, ob die folgenden Aus-
sagen wahr oder falsch sind. Geben Sie für korrekte Aussagen einen Beweis an und
widerlegen Sie falsche mithilfe eines geeigneten Gegenbeispiels.
(a) A∗ = A+ genau dann wenn (gdw.) ε ∈ A
(b) A(B ∩ C) = AB ∩ AC
(c) Falls A ⊆ B, dann An ⊆ B n für jedes n ∈ N0 .
(d) Unter der Annahme A 6= ∅ gilt: A = AA gdw. A = A∗ .
Lösungsskizze. Zu dieser Aufgabe gibt es auch Videolösungen: (a), (b), (c), (d)
(a) Die Aussage ist wahr. Wir zeigen beide Richtungen der Aussage getrennt.

⇐=: Annahme ε ∈ A. Per Definition gilt

A∗ :=
[ [
An = A0 ∪ An := A0 ∪ A+ := {ε} ∪ A+ .
n≥0 n≥1

VL
Es reicht also ε ∈ A+ zu zeigen. Nach Vorlesung (VL) wissen wir A+ =
AA∗ := {uv | u ∈ A und v ∈ A∗ }. Wir wissen ε ∈ A per Annahme und es gilt
stets ε ∈ A∗ . Somit ε ∈ AA∗ = A+ . 
=⇒: Beweis per Kontraposition (Erinnerung: Eine Aussage A =⇒ B ist äqui-
valent zu ihrer Kontraposition ¬B =⇒ ¬A). Annahme ε ∈ / A. Zu zeigen
∗ + ∗
A 6= A . Da ε ∈ A , reicht es ε ∈ / A zu zeigen. Da A = n≥1 An per Defi-
+ + S

nition, reicht es ε ∈ n
/ A für n ≥ 1 zu zeigen. Der Fall n = 1 gilt per Annahme.
Für den Fall n > 1 haben wir An := AAn−1 := {uv | u ∈ A und v ∈ An−1 }.
Sei nun w ∈ An . Dann gibt es u ∈ A und v ∈ An−1 mit w = uv. Da ε ∈ / A
gilt |u| > 0, somit |w| = |u| + |v| > 0 = |ε| und somit w 6= ε. 

(b) Die Aussage ist falsch. Wähle A = {a, aa}, B = {b} und C = {ab}. Dann gilt

A(B ∩ C) = A∅ = ∅ =
6 {aab} = {ab, aab} ∩ {aab, aaab} = AB ∩ AC.
(c) Die Aussage ist wahr. Annahme (Ann.) A ⊆ B. Wir zeigen die Aussage per Induk-
tion über n. Für den Fall n = 0 gilt A0 = {ε} = B 0 . Im Fall n + 1 gilt An ⊆ B n per
Induktionshypothese (IH). Wähle nun w ∈ An+1 := AAn := {uv | u ∈ A und v ∈
Ann. IH
An }. Das heißt es gibt u ∈ A ⊆ B und v ∈ An ⊆ B n mit w = uv. Somit
w = uv ∈ BB n := B n+1 . 
(d) Die Aussage ist wahr. Annahme A 6= ∅. Wir zeigen beide Richtungen der Aussage
getrennt.

⇐=: Annahme A = A∗ . Wir zeigen A∗ = A∗ A∗ . Da ε ∈ A∗ gilt A∗ = {ε}A∗ ⊆


A∗ A∗ . Sei nun w ∈ A∗ A∗ . Dann existieren nach Definition u, v ∈ A∗ mit
w = uv. Weiterhin existieren u1 , . . . , um , v1 , . . . , vn ∈ A mit m, n ∈ N sodass
u = u1 · · · um und v = v1 · · · vn . Somit w = u1 · · · um v1 · · · vn ∈ Am+n ⊆ A∗
Ann.
und damit A∗ A∗ ⊆ A∗ . Insgesamt also A∗ = A∗ A∗ = AA. 
=⇒: Annahme A = AA. Nach Definition gilt A ⊆ A∗ . Bleibt noch A∗ ⊆ A zu
zeigen. Aufgrund der Definition von A∗ reicht es An ⊆ A für n ∈ N zu zeigen.
Wir zeigen die Aussage per Induktion über n.
Im Fall n = 0 gilt es A0 := {ε} ⊆ A zu zeigen. Sei hierfür w ∈ A = AA ein
kürzestes Wort. Dann lässt sich w in zwei Wörter u, v ∈ A mit |w| = |u| + |v|
faktorisieren. Da w ein kürzestes Wort ist, gilt |w| ≤ |u| und |w| ≤ |v|. Somit
|w| = |u| = |v| = 0, also w = ε.
IH Ann.
Im Fall n + 1 folgt An+1 := AAn ⊆ AA = A. 
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Hausaufgabenblatt 1

• Beachten Sie die Abgabemodalitäten auf der Vorlesungswebsite!


• Sei Φ := {{1}, {2, 3}, {4, 5}, {6}}. Nach dem Abgabedatum werden wir für jede
Menge A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren, d.h. Auf-
gaben H1.1 und H1.6 werden sicher korrigiert, während zwischen Aufgaben H1.2
und H1.3 eine Münze entscheidet.
• Es werden diese Aufgaben korrigiert: H1.1, H1.2, H1.4, H1.6
• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.
• Es gilt 0 ∈ N.

Aufgabe H1.1. (DFA/NFA Konstruktion) 1+1+1 Punkte


Diese Hausaufgabe wird mit Automata Tutor bearbeitet und abgegeben. Falls Sie es
noch nicht bereits gemacht haben, folgen Sie den Schritten in Ü1.2, um ein Konto zu
erstellen. Achten Sie darauf, dass Sie sich, wie dort beschrieben, mit Ihrer TUM-Kennung
anmelden. Ansonsten können wir Ihnen die Punkte nicht gutschreiben.
Bearbeiten Sie die Hausaufgaben H1.1 (a–c). Achtung: Während Sie für die Aufgaben
aus dem Übungsblatt beliebig viele Versuche hatten, haben Sie für jede Hausaufgabe nur
5 Versuche. Sie bekommen nur dann einen Punkt, wenn Sie die Aufgabe nach 5 Versuchen
vollständig (also mit 10/10 Punkten) gelöst haben.

Aufgabe H1.2. (Sprachen) 1+1+1+1 Punkte


Sei Σ := {a, b}, A := {a, ba, aab}, B := {ε, ab}. Bestimmen Sie folgende Mengen:
(a) AB \ A (b) A3 ∅ (c) AB 0 (d) ∅∗ × B 2
Lösungsskizze.
(a) {baab, aabab} (c) A
(b) ∅ (d) {(ε, ε), (ε, ab), (ε, abab)}
Aufgabe H1.3. (Lug und Trug) 1+1+1+1 Punkte
Sei Σ 6= ∅ ein Alphabet, und A, B, C ⊆ Σ∗ Sprachen über Σ. Folgende Aussagen sind
falsch; geben Sie jeweils ein Gegenbeispiel an.
(a) A+ \ A = A2 A∗ (c) |AB| = |BA|
(b) A ⊆ B ⇔ A∗ ⊆ B ∗ (d) AB \ AC = A(B \ C)
Lösungsskizze. In allen Gegenbeispielen verwenden wir Σ := {a, b}.
(a) A := {ε} oder auch A := {a, aa}.
(b) A := {aa}, B := {a}, womit A∗ ⊆ B ∗ gilt, A ⊆ B aber nicht.
(c) A := {a, aa}, B := {b, ab}, d.h. AB = {ab, aab, aaab} und BA = {ba, baa, aba, abaa}.
(d) A := {a, aa}, B := {ab}, C := {b}, also gelten AB \ AC = {aaab} und A(B \ C) =
{aab, aaab}.

Aufgabe H1.4. (Teilbarkeit) 2+3 Punkte


Der kleine Theodor lernt gerade in der Schule, wie mal Zahlen malnimmt und teilt.
Damit er mehr Zeit zum Malen hat, will er seine Hausaufgaben vollautomatisch lösen.
Sei Σ := {0, ..., 9}. Für ein Wort w1 w2 ...wn = w ∈ Σ∗ bezeichnen wir mit (w)10 :=
Pn n−i die Zahl, die man erhält, wenn man w zur Basis 10 interpretiert (d.h.
i=1 wi · 10
(x)10 ∈ N und es gilt z.B. (42)10 = 42 oder (ε)10 = 0).
Sei k ∈ N, k ≥ 2. Wir definieren die Sprache der durch k teilbaren Dezimalzahlen als
Lk := {w ∈ Σ∗ : (w)10 = i · k, i ∈ N}.
(a) Geben Sie einen deterministischen endlichen Automaten (DFA) an, der L3 akzep-
tiert, und begründen Sie, dass ihr Automat korrekt ist, also genau die Wörter in
L3 akzeptiert.
(b) Geben Sie einen DFA an, der Lk akzeptiert, und beweisen Sie seine Korrektheit.
Anmerkung: k ist ein Parameter, Sie müssen also die Zustände und die Übergangs-
funktion in Abhängigkeit von k angeben.
Hinweis: Es genügt, Teil (b) sinnvoll zu bearbeiten. Die Punkte für (a) erhalten Sie
dann automatisch.
Lösungsskizze. (a) Es ist bekannt, dass eine Zahl genau dann durch 3 teilbar ist, wenn
ihre Quersumme durch 3 teilbar ist. Kurze Begründung, da Grundschulen diese Aussage
häufig ohne Beweis angeben: Sei w1 w2 ...wn = w ∈ Σ∗ ein Wort. Dann gilt
n
X n
X n
X
(w)10 mod 3 = wi · 10n−i mod 3 = wi · (10 mod 3)n−i mod 3 = wi mod 3
i=1 i=1 i=1

Um festzustellen, ob die Quersumme durch 3 teilbar ist, genügt es uns, sich die Quer-
summe modulo 3 zu merken. Wir verwenden also Zustände Q = {0, 1, 2}, Startzustand
q0 = 0, akzeptierenden Zustände {0}, und Übergänge δ wie folgt.
0,3,6,9

1
2,5,8 1,4,7
0,3,6,9
1,4,7 2,5,8
1,4,7 0,3,6,9
0 2
2,5,8

Insbesondere gilt δ(q, c) = (q + c) mod 3 für alle Zustände q und Zeichen c ∈ {0, ..., 9}.
(b) Einfach die Quersumme zu betrachten genügt hier nicht, aber wir können ein
ähnliches Verfahren verwenden. Sei Mk := (Q, Σ, δ, q0 , F ) ein DFA, mit Zuständen
Q := {0, ..., k − 1}, Startzustand q0 := 0, akzeptierenden Zuständen F = {0}, und
Übergängen δ(q, c) := (10q + c) mod k für jedes q ∈ Q, c ∈ Σ.
Um zu beweisen, dass L(Mk ) = Lk gilt, zeigen wir die Aussage δ̂(q0 , w) = (w)10 mod k
mit vollständiger Induktion über die Wortlänge. Die Aussage, die wir beweisen wollen,
ist also: für jedes n ∈ N gilt, dass alle Wörter w ∈ Σn mit Länge |w| = n die Gleichung
δ̂(q0 , w) = (w)10 mod k erfüllen.
Induktionsbasis. Für n = 0 kann w nur das leere Wort sein, und es gilt

δ̂(q0 , ε) = q0 = 0 = (ε)10 mod k

Induktionsschritt. Angenommen, die Aussage gilt für ein bestimmtes n ∈ N, es gilt also
δ̂(q0 , w) = (w)10 mod k für alle Wörter w mit Länge n. Wir müssen nun zeigen, dass
diese Gleichung auch für alle Wörter der Länge n + 1 gilt. Sei also w ∈ Σn+1 ein Wort
der Länge n + 1. Wir können w schreiben als w = uc, wobei u ∈ Σn ein Wort der Länge
n ist und c ∈ Σ ein Zeichen. Es gilt also
(1) (IA)
δ̂(q0 , w) = δ̂(q0 , uc) = δ(δ̂(q0 , u), c) = δ((u)10 mod k, c)
(2) (3)
= (10(u)10 + c) mod k = (uc)10 mod k = (w)10 mod k

In Schritt (1) haben wir die Definition von δ̂ verwendet, für (2) unsere Konstruktion von
δ, und (3) folgt aus der Definition von (w)10 .
Aufgabe H1.5. (Buchstabenfhler) 2+2+1 Punkte
Der Superschurke Dr. Evilsparza hat sich ins Campusnetzwerk gehackt und es ist ihm
gelungen, aus mehreren Programmen Fragmente zu löschen! Sie sind Teil des Cyberse-
curityteams, das versucht das Ausmaß des Schadens zu bestimmen und die beschädigten
Programme zu reparieren.
Sei Σ := {a, b} ein Alphabet und w ∈ Σ∗ ein Wort. Mit wR bezeichnen wir die
Umdrehung von w, also (w1 w2 ...wn )R := wn wn−1 ...w1 (hier sind w1 , w2 , ..., wn ∈ Σ) die
Buchstaben von w. Beispielsweise gilt also (abbaaa)R = aaabba.
(a) Sei L := {w ∈ Σ∗ : w = wR } die Menge der Palindrome über Σ. Wir definieren
folgende kontextfreie Grammatik G = ({S}, Σ, P, S) mit Produktionen P := {S →
aSa | bSb | ε}.
Gilt L(G) = L? Wenn ja, beweisen Sie es, wenn nein, geben Sie ein Gegenbeispiel
an und „reparieren“ Sie G, konstruieren Sie also eine Grammatik G0 mit L(G0 ) = L,
indem Sie neue Produktionen zu G hinzufügen.
(b) Sei G eine beliebige Grammatik, und G0 eine Grammatik, die durch das Entfernen
von einer beliebigen Produktion aus G entsteht. Beweisen Sie L(G0 ) ⊆ L(G), oder
widerlegen Sie es durch Angabe eines Gegenbeispiels.
(c) Sei G wieder eine beliebige Grammatik, und G0 eine Grammatik, die man erhält,
wenn man von G ein beliebiges Nichtterminalzeichen aus der rechten Seite einer
beliebigen Produktion löscht. Beweisen oder widerlegen Sie: L(G0 ) ⊆ L(G)
Lösungsskizze.
(a) L(G) = L gilt nicht, da a ∈ L, aber nicht über G produziert werden kann, weil
jedes Wort w ∈ ({S} ∪ Σ)∗ das aus S abgeleitet werden kann, d.h. S →∗G w, eine
gerade Anzahl an a’s hat. Wir reparieren G, indem wir S → a | b hinzufügen.
(b) Die Aussage ist wahr: Sei w ∈ L(G0 ) beliebig, und S das Startsymbol von G. Nach
Definition von L(G0 ) gilt also S →∗G0 w. Da wir für G0 aber nur eine Produktion
entfernt haben, gilt S →∗G w ebenfalls, und somit w ∈ L(G).
(c) Falsch! Ein Gegenbeispiel wäre G = ({S}, Σ, P, S) mit P = {S → aS}. Es ist nicht
möglich, in G ein Wort produzieren, das nur aus Terminalzeichen besteht, also
L(G) = ∅. Wenn wir allerdings die Produktionsregel zu S → a verändern, erhalten
wir L(G0 ) = {a}.

Bonusaufgabe H1.6. (Thue-Morse-Sequenz) 1+4 Bonuspunkte


Die Thue-Morse-Sequenz über dem Alphabet Σ := {0, 1} kann wie folgt definiert wer-
den. Wir setzen w0 := 0, und für n ∈ N definieren wir wn+1 := wn wn , wobei w das
Einerkomplement des Binärwortes w ∈ Σ∗ bezeichnet, z.B. 100111 = 011000. Die ersten
Folgenglieder sind also w0 = 0, w1 = 01, w2 = 0110, und w3 = 01101001.
(a) Überprüfen Sie (w5 )2 mod 7 = 4, wobei (w)2 – analog zu Aufgabe H1.4 – den Wert
von w zur Basis 2 bezeichnet. Geben Sie Ihren vollständigen Rechenweg an.
(b) Bestimmen Sie (w2021 )2 mod 19. Beschreiben Sie ihr Vorgehen.
Hinweis: Für Teilaufgabe (b) dürfen sie einen Computer zu Hilfe nehmen. Falls Sie
dies tun, beschreiben Sie bitte Ihren Ansatz in natürlicher Sprache. Sie können (müssen
aber nicht), ihrer Lösung Programmcode beifügen, jedoch steht es den Korrektoren frei,
diesen zu ignorieren. Zur Kontrolle: (w42 )2 mod 19 = 2, (w43 )2 mod 19 = 10 .
Lösungsskizze. (a) Wir verwenden quasi den DFA M7 = (Q, Σ, δ, q0 , F ) aus Aufga-
be H1.4, gehen aber von Basis 10 zu Basis 2. Es gilt also Q = {0, ..., 6}, q0 = 0, und
δ(q, c) = (2q +c) mod 7 für alle Zustände q ∈ Q und Zeichen c ∈ Σ. Analog zum dortigen
Beweis, gilt für jedes q ∈ Q, w ∈ Σ∗ , dass δ̂(q0 , w) = (w)2 mod 7.
Wir können also insbesondere den Rest (w5 )2 mod 7 ablesen, indem wir den Zustand
betrachten, den der Automat nach Einlesen von w6 erreicht:
Wort w5 01101001100101101001011001101001
Zustand 001366530124242530001254125413654

(b) Hier verwenden wir wieder einen DFA M19 = (Q, Σ, δ, q0 , F ) aus Aufgabe H1.4. Das
Wort w2021 hat allerdings Länge 22021 , eine Zahl, die zu groß ist, um ihre Binärdarstel-
lung in diesem Universum zu speichern. Wir müssen uns also ein geschicktes Verfahren
überlegen, um M19 auf w2021 auszuführen, ohne jedes Zeichen einzeln durchzugehen.
Hierzu merken wir uns für jedes n nicht nur, in welchen Zustand M19 landet, wenn wir
in Zustand 0 starten und wn einlesen, sondern wir merken uns auch die Endzustände für
jeden anderen Startzustand. In anderen Worten sind wir an der Funktion fn : Q → Q
interessiert, die fn (q) = δ̂(q, wn ) erfüllt. Analog dazu definieren wir uns gn für wn , also
gn (q) = δ̂(q, wn ).
Nach Definition von wn+1 gilt wn+1 = wn wn , wir können also (nach Definition von δ̂)
folgendes schreiben:

fn+1 (q) = δ̂(q, wn+1 ) = δ̂(q, wn wn ) = δ̂(δ̂(q, wn ), wn ) = δ̂(fn (q), wn ) = gn (fn (q))

Somit gilt fn+1 = gn ◦ fn . Mit dem gleichen Argument zeigen wir auch gn+1 = fn ◦ gn
(beachten Sie hier, dass wn+1 = wn wn ). Die Startwerte f0 , g0 ergeben sich direkt aus δ,
z.B. f0 (q) = δ(q, 0). Es genügt nun, f2021 (0) auszurechnen, etwa mit folgenden Python-
Code:

f = [(2*i) %19 for i in range(19)]


g = [(2*i+1)%19 for i in range(19)]
for it in range(2021):
f_new = [g[f[i]] for i in range(19)]
g_new = [f[g[i]] for i in range(19)]
f, g = f_new, g_new
print(f[0])

Das Ergebnis ist (w2021 )2 mod 19 = 15.


Alternativlösung: Es gibt auch eine Lösung, die Automaten nicht verwendet: Vorab
betrachten wir zunächst die Folge a0 := 2, an+1 := a2n mod 19. Offensichtlich gilt
n
an = 22 mod 19; die ersten Folgenglieder sind
n 0 1 2 3 4 5 6 7
an 2 4 16 9 5 6 17 4
Insbesondere gilt a1 = a7 , damit ist die Folge periodisch.
Wir wollen nun die rekursive Definition wn+1 = wn wn , die auf der Binärdarstellung
operiert, über arithmetische Operationen darstellen. Setzen wir also xn := (wn )2 . Um
dem Binärwort wn genau l := |wn | = 2n Nullen anzuhängen, müssen wir den Wert xn
mit 2l multiplizieren. Außerdem können wir das Einerkomplement von wn bilden, indem
wir (2l − 1) − xn rechnen. (Binär dargestellt besteht 2l − 1 aus l Einsen.) Insgesamt
können wir also xn+1 folgendermaßen ausrechnen:
n n n
xn+1 = 22 xn + (22 − 1) − xn = (22 − 1)(xn + 1)

Schließlich können wir yn := xn mod 19 definieren, und obige Gleichung ergibt


n
yn+1 = (22 − 1)(xn + 1) mod 19 = (an − 1)(yn + 1) mod 19

Der gesuchte Wert y2021 lässt sich leicht berechnen:

def a(n):
if n == 0: return 2
return [4, 16, 9, 5, 6, 17][(n-1)%6]
y = 0
for i in range(2021):
y = (a(i)-1) * (y+1) % 19
print(y)

Anmerkung: Da an 6-periodisch ist, und yn nur 19 mögliche Werte hat, ist yn auch
periodisch, mit Periode höchstens 6 · 19 = 114. Tatsächlich ist yn 108-periodisch und
somit gilt y2021 = y77 .
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Übungsblatt 2

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü2.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• Regulärer Ausdruck • Potenzmengenkonstruktion
• -NFA • Produktkonstruktion
• Rechtslineare Grammatik • Strukturelle Induktion

Individualaufgabe Ü2.2. (Automata Tutor: Reguläre Ausdrücke)


Lösen Sie die Aufgaben Ü2.2 (a–g) auf Automata Tutor.1 Beachten Sie, dass wir für
einen regulären Ausdruck r das folgende Makro definieren: r+ = rr∗ .
Achtung: Für die Übungsaufgaben haben Sie beliebig viele Versuche. Für die Aufgaben
in Hausaufgabe H2.1 nicht!

Individualaufgabe Ü2.3. (Konstruieren von NFAs mit Einschränkungen)


Entscheiden Sie, ob die folgenden Aussagen korrekt sind, und begründen Sie Ihre Behaup-
tung, indem Sie entweder ein Gegenbeispiel oder eine passende Konstruktion angeben.
Für jeden NFA N = (Q, Σ, δ, q0 , F ) gibt es einen NFA N 0 = (Q0 , Σ, δ 0 , q00 , F 0 ) mit
L(N ) = L(N 0 ) und ...
(a) der Startzustand hat keine eingehenden Kanten.
(b) kein Endzustand hat eine ausgehende Kante.
(c) für jeden Zustand q gilt: alle eingehenden Kanten von q sind mit demselben Zeichen
beschriftet.
(d) für jeden Zustand q gilt: alle ausgehenden Kanten von q sind mit demselben Zeichen
beschriftet.
Zu dieser Aufgabe gibt es Video-Lösungen: (a) (b) (c) (d)

1
Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in Ü1.2, um sich
richtig zu registrieren.
Lösungsskizze.
(a) Ja: Man erstellt vom Startzustand q0 eine Kopie q00 , die nur die ausgehenden Kanten
von q0 erbt. Danach wird q0 zu einem normalen Zustand, während q00 zu einem
Startzustand wird. Formal: N 0 = (Q0 , Σ, δ 0 , q00 , F 0 ), wobei

• Q0 = Q ∪ {q00 },
• δ 0 = δ ∪ {(q00 , x, q) : (q0 , x, q) ∈ δ}
• F 0 = F ∪ {q00 : q0 ∈ F }

(b) Nein: Betrachte einen NFA N für L = {ε, a}.


(c) Ja: man spaltet jeden Zustand q ∈ Q nach dem Buchstaben der eingehenden
Kanten auf, d.h. aus q macht man die Zustände (q, x) für jedes x ∈ Σ.
Danach setzt man δ 0 ((q, x), y, (q 0 , y)) := δ(q, y, q 0 ).
Wird dabei der Startzustand aufgespalten, wählt man einen beliebigen daraus her-
vorgehenden Zustand als neuen Startzustand.
(d) Nein: Betrachte einen NFA N mit L(N ) = {a, b} = Σ. Dann gilt δ(q0 , a) ∩ F 6= ∅
und δ(q0 , b) ∩ F 6= ∅.

Individualaufgabe Ü2.4. (Potenzmengenkonstruktion)


Mit |w|x bezeichnen wir die Anzahl der Vorkommen des Buchstabens x ∈ Σ in w ∈ Σ∗ .
Sei Σ = {a, b, c} und L = {w ∈ Σ∗ | ∃ x ∈ Σ : |w|x = 0}.
(a) Konstruieren Sie einen NFA N mit genau 4 Zuständen und L(N ) = L.
(b) Determinisieren Sie den NFA N aus (a) mittels der Potenzmengenkonstruktion,
um einen DFA M mit L(M ) = L(N ) zu erhalten.
Zu dieser Aufgabe gibt es Video-Lösungen: (a) (b)
Lösungsskizze.
(a) Der folgende NFA rät im initialen Zustand welche beiden Buchstaben im Wort
auftauchen:
a, b

q2
a, b
a, c

a, c
q1 q3

b, c
b, c
q4

(b) Anwendung der Potenzmengenkonstruktion:


a
a, b

q2 , q3 b q2

a c c
a
a, b, c

b b a, c b
q1 q2 , q4 q3 ∅

c c
c a a
b, c

q3 , q4 q4
b

Übung und Nachbereitung

Fokusaufgabe Ü2.5. (RA → -NFA → NFA → DFA)


Wir betrachten den regulären Ausdruck r = 1(0 | 1)∗ | 0.
(a) Konstruieren Sie für r mit dem Standardverfahren aus der Vorlesung einen -NFA
A, so dass L(r) = L(A) gilt.
(b) Wandeln Sie diesen Automaten in einen äquivalenten NFA ohne -Übergänge um.
(c) Konstruieren Sie durch Anwendung des Potenzmengenverfahrens einen DFA, der
die Sprache des Ausdrucks r akzeptiert.

Übungsaufgabe Ü2.6. (Produktkonstruktion)


Konstruieren Sie einen DFA M mit L(M ) = L(M1 ) ∩ L(M2 ), indem Sie die Produkt-
konstruktion verwenden. Ist M minimal?
a b b
b
b a
a
q r s f g
a a, b
M1 M2
Lösungsskizze.
b
(q, f ) (s, f ) b

a a b
a a
(q, g) (r, g)

Der DFA M ist nicht minimal. Er akzeptiert die gleiche Sprache wie M1 .
Übungsaufgabe Ü2.7. (Teilwörter und reguläre Sprachen)
Ein Teilwort eines Wortes w ist ein zusammenhängendes Wort in w. Wir definieren die
Menge aller Teilwörter von w als ↓[w] := {w0 ∈ Σ∗ : w enthält w0 }. Also gilt beispielswei-
se the, he, theo, ε ∈ ↓[theo], aber to, theoo ∈
/ ↓[theo]. Die Menge aller Wörter, von denen
w ein Teilwort ist, ist dann entsprechend definiert als ↑[w] := {w0 ∈ Σ∗ : w0 enthält w};
z.B. thetheotee ∈ ↑[theo]. Wir erweitern dies auf Sprachen: Für eine beliebige Sprache
L ⊆ Σ∗ , definieren wir also ↓[L] := w∈L ↓[w], und ↑[L] := w∈L ↑[w].
S S

Sei nun Σ := {t, h, e, o} und L eine beliebige reguläre Sprache.


(a) Geben Sie für ↓[theo] und ↑[theo] einen -NFA an.
(b) Zeigen Sie, dass ↓[L] regulär ist.
(c) Zeigen Sie, dass ↑[L] regulär ist.
Lösungsskizze.
(a) -NFA für ↓[theo]:

 
 

q0  q1 t q2 h q3 e q4 o q5

-NFA für ↑[theo]:

Σ Σ
 
q0 q1 t q2 h q3 e q4 o q5 q6

(b) Wenn L regulär ist, gibt es einen NFA N = (Q, Σ, δ, q0 , F ) der L akzeptiert und
bei dem jeder Zustand von q0 erreichbar ist. Wir zeigen, dass es einen -NFA N 0
gibt, der ↓[L] akzeptiert, indem wir N modifizieren.
Idee: Da wir alle Teilwörter akzeptieren wollen, muss es in N 0 möglich sein, ein
Präfix zu überspringen. Dafür führen wir einen neuen Startzustand ein, der jeden
anderen Zustand mit einem -Übergang erreichen kann. Da auch ein beliebiges Suf-
fix gelöscht werden darf, wird jeder Zustand in N , der einen Endzustand erreichen
kann, akzeptierend.
Wir definieren also -NFA N 0 = (Q ∪ {q00 }, Σ, δ 0 , q00 , F 0 ). Dabei ist

δ 0 = δ ] {(q00 , , q) : q ∈ Q}
F 0 = {q ∈ Q : ∃w ∈ Σ∗ : δ̄ˆ(q, w) ∩ F 6= ∅}

Wir müssen zeigen: L(N 0 ) = ↓[L].


⊆: Sei w ∈ L(N 0 ). Dann gibt es einen akzeptierenden Lauf q00 q1 q2 ...qk in N 0 . Da
jeder Zustand in N und somit auch in N 0 erreichbar ist, gibt es ein Wort
u ∈ Σ∗ , so dass q1 ∈ δ̂(q0 , u). Per Definition von F 0 gibt es auch ein Wort
v ∈ Σ∗ , so dass δ̂(qk , v) ∩ F 6= ∅. Somit gilt, uwv ∈ L(N ). Aus w ∈ ↓[uwv]
folgt dann w ∈ ↓[L].
⊇: Sei w ∈ ↓[L]. Per Definition wissen wir, dass es u, v ∈ Σ∗ gibt, sodass uwv ∈ L.
Betrachte einen akzeptierenden Lauf für uwv in N . Sei q1 ...qk der Teil des
Laufes, bei dem w eingelesen wird. Da in N von qk mit v akzeptiert werden
kann, ist qk akzeptierend in N 0 . Dann ist q00 q1 ...qk ein akzeptierender Lauf in
N 0 und somit w ∈ L(N 0 ).
(c) Wenn L regulär ist, gibt es einen NFA N = (Q, Σ, δ, q0 , F ), der L akzeptiert. Wir
zeigen, dass es einen -NFA N 0 gibt, der ↑[L] akzeptiert, indem wir N modifizieren.
Idee: Da wir alle Wörter akzeptieren, die ein Wort aus L als Teilwort enthalten,
muss es in N 0 möglich sein ein beliebiges Präfix, dann ein beliebiges Wort aus
L, und dann einen beliebiges Suffix zu lesen. Also fügen wir einen neuen Start-
zustand ein, bei dem beliebige Zeichen gelesen werden kann. Dieser erreicht den
alten Startzustand mit einem -Übergang. Statt zu akzeptieren, haben alle in N
akzeptierenden Zustand einen -Übergang zum neuen Endzustand. In diesem wird
jedes Wort akzeptiert.
Wir definieren also -NFA N 0 = (Q ∪ {q00 , qf }, Σ, δ 0 , q00 , {qf }). Dabei ist

δ 0 = δ ] (q00 , x, q00 ) x ∈ Σ ] (q00 , , q0 )


 

] {(q, , qf ) | q ∈ F } ] {(qf , x, qf ) | x ∈ Σ}

Wir müssen zeigen: L(N 0 ) = ↑[L].

⊆: Sei w ∈ L(N 0 ). Dann gibt es einen akzeptierenden Lauf für w in N 0 . Nach


Konstruktion lässt sich der Lauf in drei Teile unterteilen: Im ersten Teil befin-
det sich N nur in Zustand q00 , bis er mit einem -Übergang nach q0 übergeht.
Im zweiten Teil befindet sich N 0 nur in Zuständen von Q, bis er mit einem
-Übergang von einem Zustand q ∈ F nach qf übergeht. Im letzten Teil be-
findet sich N 0 nur in qf . Wir nennen die drei Teilworte von w, die in den
einzelnen Abschnitten eingelesen wurden, u, w0 und v. Da es möglich ist von
q0 beim Einlesen von w0 einen akzeptierenden Zustand q zu erreichen, gilt
w0 ∈ L(N ) = L. Da w = uw0 v ∈ ↑[w0 ], gilt somit w ∈ ↑[L].
⊇: Sei w ∈ ↑[N ], es gibt also u, w0 , v ∈ Σ∗ mit w = uw0 v und w0 ∈ L. Wegen
L(N ) = L gibt es einen akzeptierenden Lauf für w0 in N . Somit gibt es einen
akzeptierenden Lauf für uw0 v in N 0 , bei dem erst u in q00 eingelesen wird,
dann folgt der Lauf für w0 aus N und danach wird v in qf eingelesen. Somit
gilt w ∈ L(N 0 ).
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 2

• Beachten Sie die Abgabemodalitäten auf der Vorlesungswebsite!


• Sei Φ := {{1}, {2, 3}, {4}, {5, 6}, {7}}. Nach dem Abgabedatum werden wir für
jede Menge A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren.
• Es werden diese Aufgaben korrigiert: H2.1, H2.3, H2.4, H2.6, H2.7
• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.

Aufgabe H2.1. (DFA/NFA Konstruktion) 0.5+0.5+0.5+0.5 Punkte


Diese Hausaufgabe wird mit Automata Tutor bearbeitet und abgegeben. Falls Sie es
noch nicht bereits gemacht haben, folgen Sie den Schritten in Ü1.2, um ein Konto zu
erstellen. Achten Sie darauf, dass Sie sich, wie dort beschrieben, mit Ihrer TUM-Kennung
anmelden. Ansonsten können wir Ihnen die Punkte nicht gutschreiben.
Bearbeiten Sie die Hausaufgaben H2.1 (a–d). Achtung: Während Sie für die Aufgaben
aus dem Übungsblatt beliebig viele Versuche hatten, haben Sie für jede Hausaufgabe nur
5 Versuche. Sie bekommen nur dann einen Punkt, wenn Sie die Aufgabe nach 5 Versuchen
vollständig (also mit 10/10 Punkten) gelöst haben.
Lösungsskizze.
(a) La = L(∅∅∗ a∗ |bbb∗ (a|c)∗ ) = L(bbb∗ (a|c)∗ ).
Somit bbba, bbac, bbbc ∈ La und aa, cc, acac 6∈ La .
(b)

Lb =L(a(a|b)∗ b(a|b)∗ |b(a|b)∗ a(a|b)∗ |a(a|c)∗ c(a|c)∗ |c(a|c)∗ a(a|c)∗


|c(c|b)∗ b(c|b)∗ |b(c|b)∗ c(c|b)∗ )

Somit aaaccc, babbaabaa, acacaacc ∈ Lb und aa, cc, abac 6∈ Lb .


(c) (ab)∗ (a|)|(ba)∗ (b|)|
(d) (a|b|c)∗ (ac|ca)(a|b|c)∗

Aufgabe H2.2. (Potenzmengenkonstruktion) 3 Punkte


Konvertieren sie den folgenden NFA über dem Alphabet Σ = {a, b} zu einem DFA,
indem Sie die Potenzmengenkonstruktion aus der Vorlesung verwenden.
Hinweis: Es genügt, nur die vom Startzustand erreichbaren Zustände zu konstruieren.
a, b

a b
b
1 2 3 4
b a
Lösungsskizze.

a b a
{1} {2} {1, 3} {2, 3} a a
b a a b

∅ {1, 3, 4} {3}
b a
b
a, b b
{3, 4}

Aufgabe H2.3. (Produktkonstruktion) 2+1 Punkte


Zwei DFAs M1 , M2 sind wie folgt definiert.
b a b a

a, b a a
b
q r s f g h
b a b
M1 M2

(a) Konstruieren Sie einen DFA M mit L(M ) = L(M1 ) ∩ L(M2 ), indem Sie die Pro-
duktkonstruktion verwenden.
(b) Konstruieren Sie einen DFA M 0 mit L(M 0 ) = L(M1 )∪L(M2 ). Sie dürfen ihr Ergeb-
nis aus Teilaufgabe (a) wiederverwenden – in dem Fall genügt es, zu beschreiben,
wie Sie es anpassen.
Lösungsskizze.
(a)
a
a
(q, f ) (r, f ) (s, f )
b a
b b
b
(q, g) (r, g) (s, g) b
b a
a
b b
a a
(r, h) (s, h)
a
(b) Wir müssen im Automaten aus (a) lediglich die akzeptierenden Zustände ändern,
hier sind {(r, f ), (r, g), (r, h), (q, g), (s, g)} akzeptierend.
Aufgabe H2.4. (Fangfrage) 2+1 Punkte
Sei Σ := {a, ..., z} und L := {w ∈ Σ∗ : w enthält theo}. Die Sprache L besteht also
aus genau den Wörtern, die theo als Teilwort besitzen, z.B. apotheose, pantheon, oder
theologie.
Für einen DFA bezeichnen wir einen Zustand als Fangzustand, wenn er keinen End-
zustand erreichen kann. (Es kann mehr als einen Fangzustand geben.)
(a) Zeigen Sie, dass jeder DFA, der L akzeptiert, einen Fangzustand besitzt.
(b) Zeigen Sie, dass in keinem DFA, der L akzeptiert, ein vom Startzustand aus er-
reichbarer Fangzustand existiert.
Lösungsskizze.
(a) Sei M = (Q, Σ, δ, q0 , F ) ein DFA mit L(M ) = L. Wir betrachten den Zustand
q := δ̂(q0 , theo), also den Zustand nach dem Einlesen des Wortes theo, und be-
hauptet nun, dass q ein Fangzustand ist. Hierzu führen wir einen Widerspruchsbe-
weis durch, wir nehmen also an, dass q kein Fangzustand ist. Somit kann q einen
Endzustand erreichen; es gibt also ein Wort w mit δ̂(q, w) ∈ F . Insbesondere ist
damit das Wort theo w von M akzeptiert – dies ist ein Widerspruch, da is in L
enthalten ist, und M genau das Komplement von L akzeptiert.
(b) Wir führen wider einen Widerspruchsbeweis. Nehmen wir also an, es gäbe einen
DFA M = (Q, Σ, δ, q0 , F ) mit L(M ) = L, sodass M einen Fangzustand q besitzt,
der von q0 zu erreichen ist. Es gibt also ein Wort w mit δ̂(q0 , w) = q. Da q ein
Fangzustand ist, gilt δ̂(q, theo) ∈
/ F , das Wort w theo wird also nicht von M
akzeptiert. Dies ist ein Widerspruch zur Annahme L(M ) = L.

Aufgabe H2.5. (Limited Power) 1+3 Punkte


Dora ist traurig. Heute morgen im Kindergarten wurde sie von einem Schmetterling ab-
gelenkt und hat deswegen nicht aufgepasst. Jetzt möchte sie die Vereinigung von zwei
deterministischen endlichen Automaten berechnen, weiß aber nicht, wie die Produkt-
Konstruktion funktioniert. Sie muss die Vereinigung also mithilfe von -NFAs erzeugen
und hat Angst, dass die dann notwendige Determinisierung über Potenzmengenkonstruk-
tion eine exponentielle Vergrößerung des Zustandsraumes nach sich zieht. Können Sie
Dora trösten?
Sei Σ := {a, b} ein Alphabet und seien zwei beliebige DFAs M1 = (Q1 , Σ, δ1 , q01 , F1 )
und M2 = (Q2 , Σ, δ2 , q02 , F2 ) gegeben. Wir definieren einen -NFA M = (Q, Σ, δ, q0 , F )
formal als Q := Q1 ] Q2 ] {q0 }, δ := δ1 ] δ2 ] {(q0 , , q01 ), (q0 , , q02 )} und F := F1 ] F2 .1
Der NFA M sieht also folgendermaßen aus:


q01 ... M1

q0

 q02 ... M2

1
Die Notation A ] B entspricht A ∪ B, fordert aber zusätzlich, dass A und B disjunkt sind.
(a) Wenden Sie das Verfahren aus der Vorlesung an, um M zu einem NFA M 0 zu
konvertieren, indem Sie geeignet die ε-Kanten durch neue Kanten ersetzten. Be-
schreiben Sie das Ergebnis kurz.
(b) Zeigen Sie, dass das Anwenden der Potenzmengenkonstruktion aus der Vorlesung
auf M 0 einen DFA M 00 mit höchstens O(|Q1 | · |Q2 |) Zuständen ergibt. Beachten
Sie, dass wir – wie üblich – nur die aus {q0 } erreichbaren Zustände konstruieren.
Lösungsskizze. (a) Von {q0 } gibt es zwei Kanten für das Zeichen a, eine davon zu
δ1 (q01 , a), also dem Zustand, den M1 nach Lesen eines a erreicht; die andere zu δ2 (q02 , a).
Analog gibt es zwei Kanten mit Zeichen b. Insgesamt ergibt sich folgendes:

a
q01 ... M1
a b
b
q0 a

b
a
q02 ... M2
b

(b) Behauptung: Jeder von {q0 } in n ≥ 1 Schritten erreichbare Zustand in M 00 hat die
Form {r, s}, wobei r ∈ Q1 und s ∈ Q2 . Wir zeigen die Behauptung gleich per Induktion.
Falls die Behauptung tatsächlich wahr ist, dann hat M 00 höchstens 1+|Q1 ||Q2 | Zustände,
da es nur {q0 } von {q0 } in 0 Schritten erreicht werden kann.
Induktionsbasis. Für n = 1 müssen wir alle Zustände betrachten, die man von {q0 }
erreichen kann. Wie in (a) beschrieben, erreichen wir über Zeichen a die Zustände r :=
δ1 (q01 , a) und s := δ2 (q02 , a). Es gilt r ∈ Q1 und s ∈ Q2 , und somit ist {r, s} von der
beschriebenen Form. Das gleiche Argument funktioniert auch für Zeichen b.
Induktionsschritt. Set q ⊆ Q ein Zustand, der in n > 1 Schritten von {q0 } erreicht
wird. Nach dem vorletzten Schritt sind wir in einem Zustand q 0 ⊆ Q der in n − 1 ≥
1 Schritten erreicht wurde, für ihn gilt also q 0 = {r0 , s0 } mit r0 ∈ Q1 und s0 ∈ Q2
nach Induktionsannahme. In unserer Konstruktion haben wir aber keine zusätzlichen
ausgehenden Transitions zu den Zuständen vom M1 und M2 hinzugefügt. Da M1 und
M2 DFAs sind, erreichen r0 und s0 jeweils genau einen Zustand beim Lesen eines Zeichens.
Für Zeichen a erhalten wir mit r := δ1 (r0 , a) und s := δ2 (s0 , a) also Zustand {r, s}. Dies
gilt für Zeichen b analog, was die Aussage beweist.
Aufgabe H2.6. (Sparmaßnahmen) 1+3 Punkte
Die Universitätsleitung zeigt sich entsetzt über die große Menge an Tinte, die in die
fettgedruckten Symbole  und ∅ in regulären Ausdrücken fließt. Deshalb wird angeordnet,
dass diese Symbole künftig – wenn möglich – vermieden werden. Jeder reguläre Ausdruck
soll in eine der folgenden Formen gebracht werden:
(F1) r (F2) r |  (F3)  (F4) ∅
Hierfür ist r ein beliebiger regulärer Ausdruck, der weder  noch ∅ enthält.
Beruhigen Sie ihre verzweifelten Kollegen, indem Sie beweisen, dass jeder Ausdruck in
diese Form gebracht werden kann.
(a) Beweisen Sie (r | )∗ ≡ r∗ für jeden regulären Ausdruck r.
(b) Zeigen Sie, dass zu jedem regulären Ausdruck r0 ein äquivalenter Ausdruck r exis-
tiert, der in einer der obigen Formen ist.
Hinweis: Für (b) können Sie strukturelle Induktion verwenden.
Lösungsskizze. (a) Sei r ein beliebiger regulärer Ausdruck.

L((r | )∗ ) ⊆ L((r∗ | )∗ ) = L((r∗ )∗ ) = L(r∗ ) ⊆ L((r | )∗ )

(b) Wir zeigen die Aussage mithilfe von struktureller Induktion. Als Induktionsbasis
zeigen wir die Aussage also für alle atomaren regulären Ausdrücke (d.h. für ∅,  und jedes
c ∈ Σ); für den Induktionsschritt nehmen wir an, dass die Aussage für zwei beliebige
reguläre Ausdrücke r, s gilt, und zeigen, dass sie auch für r∗ , r | s und rs gilt.
Induktionsbasis. ∅ ist bereits in (F4),  in (F3), und jedes Zeichen c ∈ Σ ist in (F1).
Induktionsschritt. Seien r0 , s0 beliebige reguläre Ausdrücke, die jeweils einen äquivalent
regulären Ausdruck r, s in einer der obigen Formen besitzen.
r∗ : Wenn r =  oder r = ∅ (also (F3) oder (F4)), dann ist r∗ ≡ . Wenn r in (F1)
ist, so ist es auch r∗ . Wenn r in (F2) ist, dann gilt r = t |  für einen regulären
Ausdruck t in (F1). Nach (a) gilt r∗ ≡ t∗ ; und t∗ ist in (F1).
rs: Wenn r = ∅ oder s = ∅, dann ist rs ≡ ∅. Wenn r = , dann ist rs ≡ s, und s ist
bereits in (F1), (F2) oder (F3). Analog für s = . Es bleiben 4 Fälle:
1. r und s in (F1): Dann ist rs auch in (F1).
2. r in (F1), s in (F2): Sei s = u | . Es gilt rs = r(u | ) ≡ ru | r, was in (F1) ist.
3. r in (F2), s in (F1): Analog zum vorherigen Fall.
4. r und s in (F2): Seien r = t |  und s = u | . Dann gilt rs = (t | )(u | ) ≡
(tu | t | u) | , was in (F2) ist.
r | s: Da Vereinigung kommutativ ist, können wir ohne Beschränkung der Allgemeingül-
tigkeit annehmen, dass r und s nach Formnummer sortiert sind. (Wenn z.B. r in
(F4) ist und s in (F3), dann tauschen wir sie; r hat also nie eine größere Form als
s.) Wenn s = ∅ (also (F4)) dann ist r | s ≡ r, und r ist in einer der 4 Formen.
Folgende Fälle bleiben übrig:
1. r und s in (F1): Dann ist r | s auch in (F1).
2. r in (F1), s in (F2): Sei s = u | . Es gilt r | s ≡ (r | u) | , was in (F1) ist.
3. r in (F1), s in (F3): Dann ist r | u bereits in (F2).
4. r und s in (F2): Seien r = t |  und s = u | . Dann gilt r | s = (t | ) | (u | ) ≡
(t | u) | , was in (F2) ist.
5. r in (F2) oder (F3), s in (F3): Dann ist r | u ≡ r, und r ist bereits in (F2)
oder (F3).
Bonusaufgabe H2.7. (Passwortsuche) 1+2 Bonuspunkte
Nach dem jüngsten Hackerangriff hat die IT der Universität beschlossen, neue Sicher-
heitsvorkehrungen zu treffen. Passwörter müssen nun die folgenden Regeln erfüllen:
• Ein Passwort besteht aus Ziffern Z := {0, ..., 9}, Kleinbuchstaben K = {a, ..., z},
Großbuchstaben G := {A, ..., Z}, und Sonderzeichen S := {+, −, %, $, /, #, ∼, !}.
• Jedes Passwort hat mindestens 3 und höchstens 5 Zeichen.
• Nach jeder Ziffer kommt ein Sonderzeichen oder das Wortende.
• Es dürfen keine zwei Sonderzeichen aufeinander folgen.
• Das Passwort muss mit einem Buchstaben oder einer Ziffer anfangen und enden.
• Ein Sonderzeichen darf nicht auf einen Buchstaben folgen.
• Nach einem Großbuchstaben darf keine Ziffer stehen.
• Vor einem Großbuchstaben darf kein Kleinbuchstabe stehen.
Die letzten sechs Regeln beziehen sich hierbei immer auf die Zeichen unmittelbar danach
oder davor. So darf z.B. nur direkt vor einem Großbuchstaben kein Kleinbuchstabe
stehen, aber r0 $E wäre erlaubt. Sie sollen nun die Stärke dieses Systems einschätzen,
indem Sie zählen, wie viele Passwörter erlaubt sind.
(a) Bestimmen Sie zunächst die Anzahl der möglichen Passwörter über dem verein-
fachten Alphabet Σ0 := {Z, K, G, S}. Hierzu ersetzen wir jeden Kleinbuchstaben
durch K, jeden Großbuchstaben durch G, usw. Aus dem Passwort Te0 !1 würde
also GKZSZ werden.
(b) Erweitern Sie nun ihr Ergebnis aus (a) und zählen sie die Passwörter, die den
obigen Regeln genügen.
Sowohl bei (a) als auch bei (b) sind wir an Verfahren interessiert, die sich verallgemei-
nern ließen, und z.B. auch Passwörter mit Länge 20 zählen könnten. Alle Möglichkeiten
durchzugehen ist hierfür nicht hinreichend. Geben Sie sowohl bei (a) als auch bei (b) Ih-
ren vollständigen Rechenweg an. Sie dürfen einen Taschenrechner verwenden, ansonsten
lösen Sie die Aufgabe bitte – wie immer – von Hand.
Hinweis: Auch die Bonusaufgaben beziehen sich auf die Vorlesungsinhalte und lassen
sich mit diesen lösen. (Es mag auch andere Lösungen geben.)
Lösungsskizze. (a) Abgesehen von der Länge werden die Regeln von dem folgenden DFA
M1 überprüft:
G
S G G

Z K K
S
Z
Z K K

Nicht existente Kanten führen hier zu einem impliziten Fangzustand. Die Idee hinter
M1 ist, dass wir uns immer das letzte Zeichen merken. Der Anfang des Wortes ist dabei
äquivalent dazu, hinter einem Sonderzeichen zu stehen. Die Länge überprüfen wir dann
mit einem DFA M2 :
Σ Σ Σ Σ Σ
0 1 2 3 4 5

Nicht existente Kanten führen wieder zu einem impliziten Fangzustand. Nun berechnen
wir einen DFA M = (Q, Σ0 , δ, q0 , F ) als Schnitt von M1 und M2 . Den Zustand (X, i) ist
dabei als Xi notiert, und jede eingehende Kante vom Zustand Xi ist mit X beschriftet.
Es gibt wieder einen impliziten Fangzustand.

Z1 Z2 Z3 Z4 Z5

S0 S2 S3 S4

G1 G2 G3 G4 G5

K1 K2 K3 K4 K5

Nun berechnen wir für jeden Zustand q von M , wie viele Wörter von q aus akzeptiert
werden, d.h. wir berechnen die Größe von a(q) := {w ∈ (Σ0 )∗ : δ̂(q, w) ∈ F }. Nach
Definition von DFAs ist a(q) = {ε : q ∈ F } ] c∈Σ0 {c}a(δ(q, c)); also ε, wenn q akzep-
U

tierend ist, und sonst alle enthält a(q) alle Wörter a(q 0 ) des Nachfolgezustandes q 0 , den
man über Zeichen c erreicht, mit einem c vorne angehängt. Diese Wörter sind alle unter-
schiedlich, wir können also |a(q)| bestimmen, indem wir die Werte der Nachfolgezustände
summieren und, falls q ∈ F , um 1 erhöhen.

16 7 4 1 1

53 16 7 3

21 12 7 3 1

16 9 5 3 1

Es gibt also 53 Möglichkeiten.


(b) Hier verfahren wir genauso wie bei (a), nur dass wir in M jede Z-Kante 10-fach,
jede S-Kante 8-fach, und jede G- und K-Kante 26-fach zählen.

729072 18800 497 1 1

111347920 91134 2350 62

3027232 86164 2341 53 1

974968 30268 973 37 1

Es gibt also insgesamt 111347920 mögliche Passwörter.


Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Übungsblatt 3

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü3.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• Wortproblem • Äquivalenzproblem
• Leerheitsproblem • Ardens Lemma
• Endlichkeitsproblem • Pumping Lemma

Individualaufgabe Ü3.2. (Kahoot)


Falls Sie das Kahoot aus der Vorlesung verpasst haben: Spielen Sie es jetzt! Link. 1

Individualaufgabe Ü3.3. (Automata Tutor: Pumping Lemma Game)


Lösen Sie die Aufgaben Ü3.3 (a–b) auf Automata Tutor. 2

Individualaufgabe Ü3.4. (Strukturelle Induktion)


Geben Sie eine rekursive Prozedur empty(r) an, die für einen gegebenen regulären Aus-
druck r entscheidet, ob L(r) = ∅. Für Ihre Definition sollten Sie das folgende Gerüst
verwenden:
• empty(∅) = • empty(αβ) =
• empty(a) = • empty(α | β) =
• empty() = • empty(α∗ ) =
Beweisen Sie mittels struktureller Induktion, dass Ihre Definition korrekt ist.
Zu dieser Aufgabe gibt es eine Video-Lösung: rekursive Prozedur, strukturelle Induk-
tion.
Lösungsskizze. Wir teilen den Beweis in zwei Teile auf.
Konstruktion.
• empty(∅) = true
1
Falls der Link nicht mehr funktioniert, teilen Sie es bitte der Übungsleitung mit. Die Teilnehmeranzahl
ist leider auf 2000 begrenzt.
2
Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in Ü1.2, um sich
richtig zu registrieren.
• empty(a) = false
• empty() = false
• empty(αβ) = empty(α) ∨ empty(β)
• empty(α | β) = empty(α) ∧ empty(β)
• empty(α∗ ) = false
Korrektheit. Wir zeigen L(r) = ∅ ⇐⇒ empty(r) mittels struktureller Induktion.
Fall r = ∅, r = a, r = . Trivial.
Fall r = α∗ . Wir haben  ∈ L(α∗ ) 6= ∅ ⇐⇒ ¬empty(α∗ ). Die Aussage gilt per
Definition von empty.
Fall r = αβ. Als Induktionshypothesen erhalten wir L(α) = ∅ ⇐⇒ empty(α) und
L(β) = ∅ ⇐⇒ empty(β). Es gilt L(αβ) = ∅ ⇐⇒ L(α)L(β) = ∅ ⇐⇒ L(α) =
I.H.
∅ ∨ L(β) = ∅ ⇐⇒ empty(α) ∨ empty(β) = empty(αβ).
Fall r = α | β. Es gelten dieselben Induktionshypothesen wie im vorherigen Fall. Wir
I.H.
haben L(α | β) = ∅ ⇐⇒ L(α) ∪ L(β) = ∅ ⇐⇒ L(α) = ∅ ∧ L(β) = ∅ ⇐⇒
empty(α) ∧ empty(β) = empty(α | β).

Übung und Nachbereitung

Fokusaufgabe Ü3.5. (Pumping Lemma)


Beweisen Sie für jede der folgenden Sprachen mithilfe des Pumping Lemmas, dass sie
nicht regulär sind.
(a) L1 = {w ∈ {0, 1}∗ | w = wR }
(b) L2 = {w ∈ {0, 1}∗ | |w|0 ≥ |w|1 }
i
(c) L5 = {a2 | i ≥ 0}

Übungsaufgabe Ü3.6. (Ardens Lemma)


Gegeben sei folgender Automat M = ({q1 , q2 , q3 }, {a, b}, δ, q1 , {q3 }):

q2

a a
b
q1 q3 a
b

Berechnen Sie mit dem Gauß-Verfahren und Ardens Lemma einen regulären Ausdruck
α mit L(α) = L(M ).
Lösungsskizze. Gleichungssystem:

X1 ≡ aX2 | bX3 (1)


X2 ≡ aX3 | bX2 (2)
X3 ≡ aX3 | bX1 |  (3)

Gleichung (2) nach X2 auflösen und in (1) einsetzen:

X2 ≡ b∗ aX3 (4)
∗ ∗
X1 ≡ ab aX3 | bX3 ≡ (ab a | b)X3 (5)

Gleichung (5) in (3) einsetzen und auflösen:

X3 ≡ aX3 | b(ab∗ a | b)X3 |  (6)


∗ ∗
≡ (a | b(ab a | b)) (7)
∗ ∗
≡ (a | bb | bab a) (8)

Einsetzen in (5):

X1 ≡ α ≡ (ab∗ a | b)(a | bb | bab∗ a)∗ (9)

Übungsaufgabe Ü3.7. (Strukturelle Induktion: Klausuraufgabe von 2020 )


(a) Sei Σ ein Alphabet. Geben Sie die Rekursionsgleichungen für eine rekursive Pro-
zedur contains(a, r) an, die für einen Buchstaben a ∈ Σ und regulären Ausdruck r
berechnet, ob a in jedem Wort aus L(r) vorkommt.
Es soll also für alle w ∈ L(r) gelten, dass (∃u, v ∈ Σ∗ . w = uav) =: P (w).
(b) Beweisen Sie mit Hilfe von struktureller Induktion, dass ihre Prozedur korrekt ist.
Sie dürfen dabei den Konkatenationsfall (d.h. r = r1 r2 ) weglassen. Kennzeichnen
Sie dabei die Induktionshypothesen und deren Anwendungen deutlich.
Lösungsskizze.
(a)

contains(a, ∅) = true
contains(a, ) = false
contains(a, x) = (x = a)
contains(a, r1 |r2 ) = contains(a, r1 ) ∧ contains(a, r2 )
contains(a, r1 r2 ) = contains(a, r1 ) ∨ contains(a, r2 )
contains(a, r∗ ) = false

(b) • Fall r = ∅
Es gilt contains(a, ∅) = true ⇐⇒ ∀w ∈ L(∅). P (w), da L(∅) = ∅.
• Fall r = 
Wir haben L(r) = {} und contains(a, ) = false ⇐⇒ P () ⇐⇒ ∀w ∈
L(). P (w).
• Fall r = x
Wenn a = x, dann gilt L(x) = {a} und somit contains(a, x) = true ⇐⇒
P (a) ⇐⇒ ∀w ∈ L(x). P (w). Ansonsten haben wir contains(a, x) = false ⇐⇒
P (x) ⇐⇒ ∀w ∈ L(x). P (w), da L(x) = {x}.
• Fall r = r1 |r2
Als Induktionshypothesen erhalten wir contains(a, r1 ) ⇐⇒ ∀w ∈ L(r1 ). P (w)
und contains(a, r2 ) ⇐⇒ ∀w ∈ L(r2 ). P (w). Damit haben wir

contains(a, r1 |r2 ) ⇐⇒ contains(a, r1 ) ∧ contains(a, r2 )


I.H.
⇐⇒ (∀w ∈ L(r1 ). P (w)) ∧ (∀w ∈ L(r2 ). P (w))
⇐⇒ ∀w ∈ L(r1 ) ∪ L(r2 ). P (w)
⇐⇒ ∀w ∈ L(r1 |r2 ). P (w)

• Fall r = r1 r2 (optional)
Als Induktionshypothesen erhalten wir contains(a, r1 ) ⇐⇒ ∀w ∈ L(r1 ). P (w)
und contains(a, r2 ) ⇐⇒ ∀w ∈ L(r2 ). P (w). Wenn L(r1 ) = ∅ oder L(r2 ) = ∅,
dann gilt L(r1 r2 ) = ∅ und die Korrektheit folgt analog zum Fall r = ∅.
Ansonsten gilt

contains(a, r1 r2 ) ⇐⇒ contains(a, r1 ) ∨ contains(a, r2 )


I.H.
⇐⇒ (∀w ∈ L(r1 ). P (w)) ∨ (∀w ∈ L(r2 ). P (w))
⇐⇒ (∀w ∈ L(r1 r2 ). ∃y ∈ L(r2 ). ∃u, v. w = uavy)∨
(∀w ∈ L(r1 r2 ). ∃y ∈ L(r1 ). ∃u, v. w = yuav)
⇐⇒ (∀w ∈ L(r1 r2 ). ∃u, v. w = uav)∨
(∀w ∈ L(r1 r2 ). ∃u, v. w = uav)
⇐⇒ ∀w ∈ L(r1 r2 ). ∃u, v. w = uav

Dabei gilt die dritte Äquivalenz aufgrund der Annahmen L(r1 ) 6= ∅ und
L(r2 ) 6= ∅.
• Fall r = r1∗
Dann gilt  ∈ L(r1∗ ) und da P () = false, ist die Definition contains(a, r∗ ) =
false korrekt.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 3

• Beachten Sie die Abgabemodalitäten auf der Vorlesungswebsite!


• Sei Φ := {{1}, {2}, {3, 4}, {5}}. Nach dem Abgabedatum werden wir für jede Men-
ge A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren.
• Es werden diese Aufgaben korrigiert: H3.1, H3.2, H3.3, H3.5
• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.

Aufgabe H3.1. (ein paar as, dann ein b...) 1+1+1 Punkte
Geben sie an, zu welchen regulären Ausdrücken die gleiche Sprache gehört. Bestimmen
Sie außerdem für jede Sprache, die Sie so identifizieren, ein Wort, das nur in dieser
Sprache liegen. Die sechs regulären Ausdrücke erzeugen drei unterschiedliche Sprachen.
Beispiel: Sie stellen fest, dass (1,2), (3,4) und (5,6) die gleiche Sprache erzeugen. Dann
müssen Sie ein Wort in L1,2 \ (L3,4 ∪ L5,6 ) finden, eines in L3,4 \ (L1,2 ∪ L5,6 ), und eines
in L5,6 \ (L1,2 ∪ L3,4 ).
Wie üblich, schreiben wir r+ anstelle von rr∗ , für einen regulären Ausdruck r.
(1) b | a+ (baa+ )∗ (b|bab) (4) (aba | a)∗ b
(2) (a | ab)+ | a(b∗ a∅)+ (5) a(a∗ ba)∗ a∗ (b | )
(3) (a+ b)∗ (6) ∅∗ | a(a | ba)∗ b
Lösungsskizze.
• (1) ≡ (4): b
• (2) ≡ (5): a (alle Wörter in a+ sind möglich)
• (3) ≡ (6): ε

Aufgabe H3.2. (Matriririririkelnummern) 2+2+1 Punkte


An der Technischen Hochschule Estlingen-Oberfeld werden Matrikelnummern nach ei-
nem kuriosen System vergeben. Matrikelnummern haben die Form #36442 – eine Raute
gefolgt von einer Zahl. Die Quersumme der Zahl muss hierbei eine Primzahl sein, eine al-
te estlinger Tradition. Nun hält der technische Wandel auch nicht vor Estlingen-Oberfeld
ein, und der Rektor versucht verzweifelt, einen endlichen Automaten zu finden, der kor-
rekte Matrikelnummern akzeptiert.
(a) Sei Σ := {0, ..., 9}, und L := {#}{w ∈ Σ∗ : i≥1 wi prim}, also die Sprache der
P

Dezimalzahlen, deren Quersumme eine Primzahl ist, mit einer Raute vorneweg.
Beweisen Sie, dass L nicht regulär ist.
Der Rektor hat sich in der Zwischenzeit einen neuen Ansatz überlegt. Die Primzahl-
quersumme bräuchte man eigentlich nur in der traditionellen estlinger Form, für neue
Studenten müsse man es nicht so genau nehmen – ##1234 sei ja auch eine prima Matri-
kelnummer (für nicht-Estlinger).
(b) Zeigen Sie, dass die Sprache L0 := L ∪ {#i w : i 6= 1, w ∈ Σ∗ } die Eigenschaft des
Pumping-Lemmas erfüllt.
(c) Beweisen Sie, dass L0 dennoch nicht regulär ist, z.B. indem Sie Abschlusseigen-
schaften regulärer Sprachen verwenden.
Lösungsskizze.
(a) Wir nehmen an, L wäre regulär. Nun verwenden wir das Pumping-Lemma, um
einen Widerspruch herzuleiten. Sei also n ∈ N beliebig (n ist die „Pumping-
Lemma Zahl“). Es gibt unendlich viele Primzahlen, wir können dementsprechend
eine Primzahl p ≥ n wählen. Als Wort z wählen wir nun #1p . Offensichtlich gilt
z ∈ L und |z| ≥ n. Das Pumping-Lemma gibt uns nun eine Zerlegung z = uvw,
sodass v 6= ε und uv i w ∈ L für alle i ∈ N. Falls v die Raute enthält, ist das Wort
uv 0 w = w bereits nichts in L enthalten. Ansonsten sei z 0 := uv p+1 w, aber für
dessen Quersumme gilt

zi0 =
X X X
zi + p vi = p + p|v| = p(|v| + 1)
i>1 i>1 i≥1

Da v 6= ε und somit |v| > 0 ist p(|v|+1) aber keine Primzahl, da es durch die Zahlen
p und |v| + 1 teilbar ist. In jedem Fall konnten wir das Wort z also „aufpumpen“,
sodass es nicht mehr in L liegt. Dies steht aber im Widerspruch zur Aussage des
Pumping-Lemma, somit kann L nicht regulär sein.
(b) Wir wählen n := 2. Sei nun z ∈ L0 beliebig, mit |z| ≥ 2. Nun gibt es folgende Fälle,
abhängig von der Anzahl an Rauten k, mit denen z beginnt.

• k = 0: Dann ist z ∈ / L und z ∈ Σ∗ . Wir wählen u := ε, v := z1 , w := z2 z3 ...


und für jedes i gilt uv i w ∈ Σ∗ ⊆ L0 .
• k = 1: Hier gilt z ∈ L. Wir wählen wieder u := ε, v := z1 = #, w := z2 z3 ....
Für jedes i 6= 1 gilt uv i w ∈ {#i w : w ∈ Σ∗ } ⊆ L0 , und für i = 1 ist
uv i w = z ∈ L0 bereits klar.
• k = 2 ∨ k > 3: Nun verwenden wir für v die ersten beiden Zeichen, also u := ε,
v := z1 z2 = ##, w = z3 z4 ... . Somit kann uv i w nie mit genau einer Raute
anfangen und uv i w ∈ L0 .
• k = 3: Ähnlich zum Fall k = 1 wählen wir u := ε, v := z1 = #, w := z2 z3 ....
Für jedes i gilt uv i w ∈ {#j w : j ≥ 2, w ∈ Σ∗ } ⊆ L0 .

(c) Sei L1 := {#}Σ∗ die Sprache der Matrikelnummern, die mit genau einer Rau-
te beginnen. Die Sprache L1 ist offensichtlich regulär. Um einen Widerspruch zu
erzeugen, nehmen wir an, dass L0 regulär sei. Nach den Abschlusseigenschaften
regulärer Sprachen wäre dann auch L1 ∩ L0 regulär, es gilt aber L1 ∩ L0 = L und
wir haben bereits gezeigt, dass L nicht regulär ist. Dies ist ein Widerspruch, also
kann L0 auch nicht regulär sein.
Anmerkung: Es lässt sich auch auf direktem Wege beweisen, dass L0 nicht regulär
ist, z.B. mit der Methode über Residualsprachen, die wir im Kontext des Satzes von
Myhill-Nerode kennen lernen werden.
Aufgabe H3.3. (NFA zu RA) 3+1 Punkte
(a) Konvertieren Sie den folgenden NFA M zu einem regulären Ausdruck, indem Sie
ein geeignetes Gleichungssystem aufstellen und dieses lösen.
(b) Geben Sie einen äquivalenten NFA an, der 4 Zustände aber nur 5 Transitionen hat.

b
a
a b a
X Y Z W

Lösungsskizze. (a) Wir stellen folgende Gleichungen auf:

X ≡ aY | aZ X ≡ abZ | aZ X ≡ abb∗ aW | ab∗ aW


Y ≡ bZ (1) Y ≡ bZ (2) Y ≡ bb∗ aW
Z ≡ bZ | aW Z ≡ b∗ aW Z ≡ b∗ aW
W ≡ aY |  W ≡ abZ |  W ≡ abb∗ aW | 

X ≡ ab∗ aW X ≡ ab∗ a(abb∗ a)∗


(3) Y ≡ bb∗ aW (4) Y ≡ bb∗ a(abb∗ a)∗
Z ≡ b∗ aW Z ≡ b∗ a(abb∗ a)∗
W ≡ (abb∗ a)∗ W ≡ (abb∗ a)∗

Erklärung: (1) Wir setzen Y ≡ bZ bei X und W ein und wenden Ardens Lemma auf
Z an. (2) Wir setzen Z ≡ b∗ aW bei X, Y und W ein. (3) Wir vereinfachen die Gleichung
von X, da L(abb∗ aW ) ⊆ L(ab∗ aW ), außerdem wenden wir Ardens Lemma auf W an.
(4) Wir setzen W ≡ (abb∗ a)∗ in den anderen Gleichungen ein.
Somit erhalten wir L(M ) = L(ab∗ a(abb∗ a)∗ ).
(b) Wir konvertieren unseren regulären Ausdruck direkt zu einem NFA. Zustände 0, 1, 2
bilden das ab∗ a Präfix ab, also ist 2 akzeptierend. Um die (abb∗ a)∗ Schleife einzuleiten,
geht der Automat zuerst von 2 zu 3 – da der b∗ a Teil bereits am Anfang vorkommt,
können wir aber direkt von 3 zu 1 gehen.
b

a a a
0 1 2 3

Aufgabe H3.4. (Spieglein, Spieglein, an der Wand...) 2+1+1 Punkte


Sei Σ := {a, b}. Wie üblich definieren wir wR als die Spiegelung des Wortes w. Für eine
beliebige Sprache L definieren wir nun LR := {wR : w ∈ L}.
(a) Zeigen Sie, dass LR regulär ist, wenn L regulär ist.
(b) Sei M ein NFA mit n Zuständen. Konstruieren Sie einen NFA für L(M )R mit
höchstens n + 1 Zuständen.
(c) Sei r ein regulärer Ausdruck. Konstruieren Sie einen regulären Ausdruck r0 für
L(r)R mit Länge |r|.
Hinweise: Sie müssen die Teilaufgaben nicht in der Reihenfolge lösen, in der sie
gestellt wurden. Bei der Länge eines regulären Ausdrucks zählen wir Klammern nicht,
die Länge von (ab | )∗ wäre also 5. Bei (c) bietet es sich an, ähnlich zur strukturellen
Induktion, ein rekursives Verfahren anzugeben.
Lösungsskizze. Wir beginnen mit Teilaufgaben (b) und (c). Aus letzterer folgt (a) dann
unmittelbar.
(b) Idee: Wenn M ein Wort akzeptiert, gibt es einen Lauf von einem Start- in einen
Endzustand. Der neue NFA soll diesen Lauf rückwärts ausführen; das bedeutet, wir wol-
len die letzte Transition zuerst rückwärts ausführen, dann die vorletzte, und so weiter.
Wir müssen in einem Finalzustand starten, wir wissen jedoch nicht, in welchem. Dies
wird der neue NFA am Anfang erraten. Wenn wir von irgendeinem dieser Finalzustän-
de aus beim Rückwärtsausführen im Initialzustand landen, dann wollen wir das Wort
akzeptieren.
Sei M = (Q, δ, Σ, q0 , F ). Wir definieren uns einen NFA M 0 := (Q0 , δ 0 , Σ, q00 , F 0 ) mit
Q0 := Q ] {q00 }, wobei q00 ∈
/ Q ein neuer Zustand ist und unser Startzustand wird. Wenn
wir von q00 ein Zeichen a lesen, gehen wir in einen beliebigen Zustand, den man von F
mit einem a erreichen kann, wir setzen also

δ 0 (q00 , a) := δ 0 (F, a) für alle a ∈ Σ.

Ansonsten übernehmen wir die Transitionen aus M , drehen sie aber um:

δ 0 (q 0 , a) := {q ∈ Q : q 0 ∈ δ(q, a)} für alle q 0 ∈ Q, a ∈ Σ

Es gibt also eine Transition von q 0 zu q in M 0 genau dann, wenn es eine von q zu q 0 in M
gibt. Die akzeptierenden Zustände sind F 0 = {q0 }, falls ε ∈/ L(M ), sonst F 0 = {q0 , q00 }.
Dieser NFA hat wie gefordert n + 1 Zustände.
(c) Wir geben die Konstruktion rekursiv an. Es gibt folgende Möglichkeiten:
• r ∈ {∅, } ∪ Σ: Wir setzen r0 := r, da hier L(r) = L(r)R gilt.
• r = (s)∗ : Wir konstruieren rekursiv einen regulären Ausdruck s0 mit L(s0 ) = L(s)R
und setzen r0 := (s0 )∗ . Dann gilt

L(r)R = (L(s)∗ )R = (L(s)R )∗ = L(s0 )∗ = L((s0 )∗ ) = L(r0 ) .

• r = st: Rekursiv gibt es reguläre Ausdrücke s0 , t0 mit L(s0 ) = L(s)R und L(t0 ) =
L(t)R . Wir definieren r0 := t0 s0 und erhalten

L(r)R = L(st)R = L(t)R L(s)R = L(t0 )L(s0 ) = L(t0 s0 ) = L(r0 ) .

• r = s | t: Wieder gibt es s0 , t0 mit L(s0 ) = L(s)R und L(t0 ) = L(t)R . Wir definieren
r0 := s0 | t0 und erhalten

L(r)R = L(s | t)R = L(s)R ∪ L(t)R = L(s0 ) ∪ L(t0 ) = L(s0 | t0 ) = L(r0 ) .

In allen Fällen bleibt die Länge des regulären Ausdrucks erhalten.


(a) Sei L regulär. Dann gibt es einen regulären Ausdruck r mit L(r) = L. Wie wir in
Teilaufgabe (c) gezeigt haben, existiert ein regulärer Ausdruck r0 mit LR = L(r)R =
L(r0 ), also ist LR regulär.
Bonusaufgabe H3.5. (Nach den Sternen greifen) 3 Bonuspunkte
Sei L eine reguläre Sprache. Zeigen Sie, dass L0 := {w : {w}∗ ⊆ L} regulär ist.
Lösungsskizze. Sei M = (Q, Σ, δ, q0 , F ) ein DFA, der L akzeptiert. Die Idee ist, dass wir
einen DFA M 0 für L0 konstruieren, der sich nach Einlesen eines Wortes w ∈ Σ∗ merkt, wie
M sich auf dem Wort w verhält. Dafür benötigen wir lediglich die Funktion fw : Q → Q,
die wir definieren als fw (q) := δ̂(q, w) für alle Zustände q ∈ Q. Es gilt also beispielsweise
fww (q) = fw (fw (q)); oder auch fwv = fv ◦ fw für alle Wörter w, v. Beachten Sie, dass es
zwar unendliche viele Wörter w gibt, aber nur endlich viele Funktionen fw .
Schreiben wir nun fwk für die k-fache Anwendung von fw (also fw0 (q) := q und
fw (q) := fwk (fw (q)) ), dann ist gilt allgemein fwk (q) = fwk (q) für alle k ∈ N, und
k+1

w ∈ L0 ist äquivalent zu q0 , fw (q0 ), fw2 (q0 ), ... ∈ F .


Für den DFA M 0 = (Q0 , Σ, δ 0 , q00 , F 0 ) verwenden wir als Zustandsmenge die Menge
aller Funktionen von Q nach Q (üblicherweise als QQ geschrieben), also Q0 := QQ . Der
Anfangszustand ist q00 := fε = Id, also die Identitätsfunktion. Wenn wir ein Zeichen
c ∈ Σ lesen, wollen wir von fw zu fwc übergehen, es soll also gelten

δ 0 (fw , c) = fwc = fc ◦ fw für alle w ∈ Σ∗

Der Term fc ◦ fw hängt nur von fw (dem aktuellen Zustand) und c ab – insbesondere
hängt es nicht unmittelbar von w ab. Es ist für einen Zustandsübergang also (glückli-
cherweise) nicht wichtig, mit welchem Wort wir den Zustand betreten haben.
Für einen Zustand f ∈ Q0 und Zeichen c definieren wir also δ 0 (f, c) := fc ◦ f . Die
Finalzustände sind nun F 0 := {f ∈ Q0 | ∀i ∈ N : f i (q0 ) ∈ F }; wie oben erläutert ist
fwi (q0 ) der Zustand, den M erreicht, nachdem er das Wort w genau i-mal eingelesen
hat. Wir merken an, dass es uns zwar genügen würde, die Menge F 0 mathematisch zu
definieren, ohne dass wir angeben, wie man feststellt, ob ein bestimmter Zustand q ∈ Q0
nun tatsächlich dort enthalten wäre. Allerdings lässt sich die Eigenschaft ∀i : f i (q0 ) ∈ F
auch unschwer entscheiden: man berechnet sukzessiv die Folge q0 , f (q0 ), f 2 (q0 ), ... und
überprüft, ob alle Zustände in F enthalten sind. Sobald sich ein Zustand wiederholt,
kann man aufhören.
Abschließend beweisen wir noch formal, dass M 0 tatsächlich L0 akzeptiert. Es gilt

w ∈ L0 ⇔ {w}∗ ⊆ L ⇔ ∀i : wi ∈ L ⇔ ∀i : δ̂(q0 , wi ) ∈ F ⇔ ∀i : fwi (q0 ) ∈ F

Da fwi = fwi nach Definition von δ̂, erhalten wir also w ∈ L0 genau dann, wenn fw ∈ F 0 .
Es genügt also, δ̂ 0 (q00 , w) = fw für alle w ∈ Σ∗ zu zeigen. Dies folgt über Induktion; als
Basis erhalten wir δ̂ 0 (q00 , ε) = q00 = Id = fε . Für den Induktionsschritt sei nun w ∈ Σ∗
und c ∈ Σ beliebig.
IA
δ̂ 0 (q00 , wc) = δ 0 (δ̂ 0 (q00 , w), c) = δ 0 (fw , c) = fc ◦ fw = fwc
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Übungsblatt 4

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü4.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• Äquivalenzklasse • Minimierung
• Kanonischer Minimalautomat • Myhill-Nerode-Relation

Individualaufgabe Ü4.2. (Kahoot)


Falls Sie das Kahoot aus der Vorlesung verpasst haben: Spielen Sie es jetzt! Link.1

Individualaufgabe Ü4.3. (Automata Tutor: “Equivalenz Classes”)


Lösen Sie die Aufgaben Ü4.3 (a–c) auf Automata Tutor.2
Lösungsskizze.
(a) (i)  ≡L a mit Suffix a∗ b∗ c∗
(ii) b 6≡L c; unterschieden durch b
(iii) abv 6≡L cba; unterschieden durch 
(b) (i) b, bb, aab ∈ [ab]L
(ii) c, cc, abc ∈ [bc]L
(iii) cb, ba, ccb ∈ [cb]L
(c) (i) b ist lexikographisch kleinstes Element in [abab]L
(ii) c ist lexikographisch kleinstes Element in [bacc]L

Individualaufgabe Ü4.4. (verbesserter Minimierungsalgorithmus)


(a) Minimieren Sie den folgenden DFA.

1
Falls der Link nicht mehr funktioniert, teilen Sie dies bitte der Übungsleitung mit. Die Teilnehmeran-
zahl ist leider auf 2000 begrenzt.
2
Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in Ü1.2, um sich
richtig zu registrieren.
b

q1 a
a
a
q0 q3
b b b
q2

a
(b) Überlegen Sie sich, wie man den Minimierungsalgorithmus aus der Vorlesung ab-
ändern könnte, damit er neben einem minimalen DFA auch noch für jedes Paar
an Zuständen (q1 , q2 ), die nicht äquivalent sind, ein möglichst kurzes Wort w ge-
neriert, dass beweist, dass q1 und q2 nicht äquivalent sind.
Wenden Sie den neuen Algorithmus auf den DFA aus (a) an.
Lösungsskizze.
(a) Hier die Tabelle aus dem Minimierungsalgorithmus und der minimierte DFA:
b

q1
q0 q1 q2 q3 a
q0 − − − − a
q0 , q3
q1 × − − −
b
q2 × × − −
q3 = × × − b q2

a
(b) Statt in der Tabelle nur mit einem Kreuz (×) zu markieren, dass zwei Zustände
unterscheidbar sind, merken wir uns in der Tabelle ein Wort, dass sie unterscheidet.
Gegeben ein DFA (Q, Σ, q0 , δ, F ). Im ersten Schritt, tragen wir bei allen Paaren q1 ∈
F, q2 ∈ Q \ F das leere Wort  ein. Dann iterieren wir so lange über die Tabelle, bis
sich nichts mehr ändert. Immer wenn wir zwei Zustände q1 , q2 ∈ Q mit dem Zeichen
x ∈ Σ unterscheiden können, tragen wir als Beweis xw in die Tabelle ein, wobei
w ∈ Σ∗ der Beweis aus der Tabelle ist, dass δ(q1 , x), δ(q2 , x) unterscheidbar sind.
Hier die Tabelle von Aufgabe (a), die durch den neuen Minimierungsalgorithmus
entsteht:
q0 q1 q2 q3
q0 − − − −
q1 ε − − −
q2 ε a − −
q3 = ε ε −

Übung und Nachbereitung

Fokusaufgabe Ü4.5. (Myhill-Nerode-Relation und Äquivalenzklassen)


Sei L = L(a∗ b∗ c∗ ) über dem Alphabet Σ = {a, b, c}.
(a) Entscheiden Sie, welche der folgenden Äquivalenzen wahr sind und begründen Sie
Ihre Antwort:
? ? ?
• ε ≡L a • b ≡L c • abc ≡L cba
(b) Sei v = aababc. Geben Sie ein Wort u 6= v an, so dass u ≡L v.
(c) Geben Sie die Mengen [ab]L , [bc]L und [ca]L an.
(d) Finden Sie nun L0 , sodass c ≡L0 ba, c 6≡L0 ab und aba ≡L0 bab. Weiterhin soll
ε, aba ∈ L0 gelten.

Übungsaufgabe Ü4.6. (Minimierung)


Minimieren Sie die folgenden DFAs mit Hilfe des verbesserten Minimierungsalgorithmus
aus Aufgabe Ü4.4 (b), der für jedes unterscheidbare Paar an Zuständen ein Wort liefert,
das die Zustände unterschiedet.
(a) DFA D1
a a a a

p0 b p1 b p2 b p3

b
(b) DFA D2
b
b
q0 a q1 q2
b

a
a a
b b b

q5 a q4 q3
a

Lösungsskizze.
(a) Tabelle und minimierter DFA für D1 :

p0 p1 p2 p3
p0 − − − −
p1 ε − − −
p2 ε b − −
p3 = ε ε −

a
a a

p0 , p3 b p1 b p2

b
(b) Tabelle und minimierter DFA für D2 :

q0 q1 q2 q3 q4 q5
q0 − − − − − −
q1 ε − − − − −
q2 ε = − − − −
q3 b ε ε − − −
q4 b ε ε = − −
q5 = ε ε b b −

b {q1 , q2 }
a
a
b
{q0 , q5 } {q3 , q4 }
a

Übungsaufgabe Ü4.7. (Myhill-Nerode-Relation)


Hinweis: Bei dieser Aufgabe ist es nicht essentiell, dass Sie alle Teilaufgaben bearbeiten.
Die ersten beiden Teilaufgaben reichen aus, um das Prinzip zu verstehen.
Entscheiden Sie, ob folgende Sprachen über dem Alphabet Σ = {a, b, c} regulär sind.
Bestimmen Sie hierzu die Äquivalenzklassen der dazugehörigen Myhill-Nerode-Relation.
Falls die Sprache regulär ist, zählen Sie alle Äquivalenzklassen auf und zeichnen Sie den
kanonischen Minimalautomat ML = (Σ∗ / ≡L , Σ, δL , [ε]≡L , FL ). Falls die Sprache nicht
regulär ist, reicht es eine unendliche Menge von Äquivalenzklassen zu bestimmen.
(a) L1 = {a2i | i ∈ N }
(b) L2 = {ai bi ci | i ∈ N }
(c) L3 = {w ∈ Σ∗ | |w|a = 2 · |w|b }
(d) L4 = L((a∗ (b | c))∗ )
(e) L5 = {wcw | w ∈ {a, b}∗ }
(f) L6 = L((bba|bab)∗ ) mit dem Alphabet Σ = {a, b}
(g) L7 = {w ∈ Σ∗ | w 6= wR } mit dem Alphabet Σ = {a, b}
Lösungsskizze. Hinweis: Da die Sprachen aus dem Kontext ersichtlich sind, lassen wir
den Li Subscript bei ≡ und [w] weg.
(a) • Bestimmen der Äquivalenzklassen:

[ε] = L1 [a] = {a2i+1 | i ∈ N } [b] = {w ∈ Σ∗ | |w|b > 0 ∨ |w|c > 0}

• Kanonischer DFA:
a [a]
a
[ε] b, c

b, c
[b] Σ

(b) • Bestimmen einer unendlichen Menge von Äquivalenzklassen:

{[ai ] | i ∈ N }

Beweis: Sei i, j ∈ N verschieden. Dann ai bi ci ∈ L2 , aber aj bi ci 6∈ L2 . Daher


[ai ] 6= [aj ]. Somit ist die Menge unendlich und L2 keine reguläre Sprache.
• Unendliches Transitionssystem (Ablehnende Äquivalenzklasse und entspre-
chende Transitionen sind nicht gezeichnet):
[ε]
a

a a a ...
[abc] [a] [aa] [aaa]

c b b b

[ab] [aab] [aaab]

c b b

[aabb] [aaabb]

c b

[aaabbb]

...
(c) • Bestimmen einer unendlichen Menge von Äquivalenzklassen:

{[bi ] | i ∈ N }

Beweis: Sei i, j ∈ N verschieden. Dann bi a2·i ∈ L3 , aber bj a2·i 6∈ L3 . Daher


[bi ] 6= [bj ]. Somit ist die Menge unendlich und L3 keine reguläre Sprache.
(d) • Bestimmen der Äquivalenzklassen:

[ε] = L((a∗ (b | c))∗ ) = L4 [a] = L((a | b | c)∗ a)

• Kanonischer DFA:
b, c a
a
[ε] [a]
b, c

(e) • Bestimmen der unendlichen Menge von Äquivalenzklassen:

{[ai bi ] | w ∈ Σ∗ }

Beweis: Sei i, j ∈ N verschieden. Dann ai bi cai bi ∈ L5 , aber aj bj cai bi 6∈ L5 .


Somit ist die Menge unendlich und L5 keine reguläre Sprache.
(f) • Bestimmen der Äquivalenzklassen:

[ε] = L6 [b] = {wb | w ∈ L6 }

[ba] = {wba | w ∈ L6 } [bb] = {wbb | w ∈ L6 }


[a] = {vw | v ∈ L6 , w ∈ L((a | bbb | baa)(a|b)∗ )}

• Kanonischer DFA:
[bb]

b
a

[b]

b a b
b
[ε] [ba]

a a

[a]

a, b

(g) Bestimmen einer unendlichen Menge von Äquivalenzklassen:

{[(ab)i ] | i ∈ N }

Beweis: Sei i, j ∈ N verschieden und ohne Einschränkung der Allgemeinheit i < j.


Dann gilt (ab)i (ba)i ∈
/ L2 . Für w = (ab)j (ba)i ist aber wR = (ab)i (ba)j und somit
gilt wegen i < j dass w ∈ L7 . Daher [(ab)i ] 6= [(ab)j ]. Somit ist die Menge unendlich
und L7 keine reguläre Sprache.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 4

• Beachten Sie die Abgabemodalitäten auf der Vorlesungswebsite!


• Sei Φ := {{1}, {2}, {3, 4}, {5, 6}, {7}}. Nach dem Abgabedatum werden wir für
jede Menge A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren.
• Es werden diese Aufgaben korrigiert: H4.1, H4.2, H4.3, H4.6, H4.7
• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.

Aufgabe H4.1. (vero nihil verius) 0.5+0.5+0.5+0.5+1 Punkte


Bestimmen Sie für folgende Aussagen, ob sie wahr oder falsch sind. Geben sie eine kurze
Begründung für wahre Aussagen an und ein Gegenbeispiel für falsche.
Sei Σ 6= ∅ ein Alphabet, L1 , L2 ⊆ Σ∗ reguläre Sprachen, und L3 , L4 ⊆ Σ∗ nicht-
reguläre Sprachen.
(a) (L1 ∩ L2 )2 ist regulär.
(b) L3 ∪ L4 ist nicht regulär.
(c) L4 erfüllt die Eigenschaft des Pumping-Lemmas nicht.
(d) Jede Teilmenge L ⊆ L1 ist regulär.
(e) (L3 )∗ ist regulär.
Lösungsskizze. Anmerkung: Diese Aufgabe zielt darauf ab, die Abschlusseigenschaften
regulärer Sprachen zu wiederholen. Durch Zitat des entsprechenden Satzes sind sie daher
in einer Zeile gelöst. In dieser Lösung geben wir auch die Begründungen/Konstruktionen
an, woher die Abschlusseigenschaften kommen.
(a) Wahr. Da L1 und L2 regulär sind, gibt es DFAs N1 und N2 mit L(N1 ) = L1
und L(N2 ) = L2 . Die Produktkonstruktion liefert einen Automaten N1 × N2 für
L1 ∩ L2 , somit ist L1 ∩ L2 regulär. Damit gibt es einen regulären Ausdruck r mit
L(r) = L1 ∩ L2 . Dann gilt L(rr) = (L1 ∩ L2 )2 , somit ist die geforderte Sprache
regulär.
(b) Falsch. Sei L3 eine beliebige nicht-reguläre Sprache. Wähle L4 = L̄3 . Wir behaup-
ten L4 ist nicht-regulär. Angenommen L4 wäre regulär. Dann gibt es einen DFA
für L4 und das Komplement dieses DFAs berechnet daher die Sprache L3 , die
nicht-regulär ist, Widerspruch. Also ist L4 nicht-regulär. Aber L3 ∪ L4 = Σ∗ ist
regulär.
(c) Falsch. In der Vorlesung wurde erwähnt, dass auch nicht-reguläre Sprachen das
Pumping-Lemma erfüllen können. In Aufgabe H3.2 wurde außerdem ein konkretes
Beispiel angegeben.
(d) Falsch. Gegenbeispiel: Wähle Σ = {a, b}, L1 := Σ∗ und wähle für L eine beliebige
nicht-reguläre Sprache, zum Beispiel {an bn : n ∈ N}. Dann ist L1 regulär und
L ⊆ L1 , aber L ist nicht-regulär.
(e) Falsch. Gegenbeispiel: Wähle Σ = {a, b, c}, L3 := {an bn c : n ∈ N}. Wenn (L3 )∗
regulär wäre, dann wäre nach Abschlusseigenschaften auch (L3 )∗ ∩ L(a∗ b∗ c) = L3
regulär, ein Widerspruch.
Anmerkung: Bei der letzten Teilaufgabe gibt es gute und schlechte Wahlen von L3 . Die
Sprache L = {w = wR : w ∈ Σ∗ } der Palindrome zu wählen, würde zu L∗ = Σ∗
führen, da jedes Zeichen einzeln ein Palindrom ist und daher jedes Wort trivial eine
Konkatenation von Palindromen. Das Problem ist, dass Palindrome mit allen möglichen
Buchstaben anfangen und aufhören können. Wenn wir also nur ein Wort wie aabbbaaabb
haben, gibt es viele Möglichkeiten dies in Teil-Palindrome zu zerlegen. Wir könnten z.B.
jedes Zeichen für sich lesen, oder a(abbba)(aa)bb als Teil-Palindrome nehmen. Unsere
Wahl von L3 umgeht dies: Das Wortende ist in L3 mit einem c markiert, sodass ein
Wort aus L∗3 sich leicht in seine Teilwörter zerlegen lässt.
Aufgabe H4.2. (in nuce) 1+1 Punkte
(a) Vereinfachen Sie den folgenden -NFA M , konstruieren Sie also einen äquivalenten
-NFA mit höchstens 6 Zuständen.
(b) Finden Sie einen regulären Ausdruck r mit |r| ≤ 6 und L(r) = L(M ).
Beschreiben Sie bei beiden Teilaufgaben ihr Vorgehen.
Hinweise: Bei der Länge eines regulären Ausdrucks zählen wir Klammern nicht, die
Länge von (ab | )∗ wäre also 5. Zur Lösung dieser Aufgabe sind keine Kenntnisse über
minimale DFAs vonnöten.
b

a  
0 1 2 3
  b
b
a a
4 42 6 7
a  b a

b b
b
8 9 A B

Lösungsskizze. (a) Zuerst entfernen wir die unnötigen Zustände 1, 3 und B.


b

a
0 2
 b

b
a a
4 42 6 7
a  b

b b
b
8 9 A

Da Zustand 6 lediglich beliebig viele b einliest und dann zu Zustand 2 wechselt, der
ebenfalls beliebig viele b einliest (und beide Zustände akzeptierend sind), lässt sich die
Kante von 6 zu 2 kollabieren. Von 42 aus wird jede Folge an b akzeptiert, auch das
leere Wort, also können wir die Kante von 42 nach A kollabieren. Schließlich können wir
Zustand 9 entfernen, indem wir Kanten von 8 direkt zu 4 und 12 erstellen.
b

b
a
0 2 7
 a
b
a
4 42
a b
b b
8

(b) Die oberen Zustände (also {0, 2, 7}) des Automaten akzeptieren genau a(b | ba)∗ .
Dies sind die Wörter, die mit einem a beginnen und aa nicht enthalten. An dieser Stelle
kann man auch durch clevere Umformungen darauf kommen, dass der untere Teil des
Automaten genau die gleiche Sprache akzeptiert – falls man dies allerdings nicht bemerkt,
bietet sich eine Potenzmengenkonstruktion an, um die beiden Teile zu vereinfachen.

b
a
{0} {2} {2, 7}
a
b

b
a
{4} {8, 42} {8, 4, 42}
a

Nicht gezeichnete Kanten führen zu einem impliziten Fangzustand. Da beide DFAs iden-
tisch sind, müssen auch beide Teile des -NFAs die gleiche Sprache akzeptieren. Somit
können wir Zustände {4, 8, 42} löschen, und erhalten a(b | ba)∗ als regulären Ausdruck
äquivalent zu M mit Länge 6.
Aufgabe H4.3. (a maiore ad minus) 2+1 Punkte
(a) Bestimmen Sie für folgenden DFA M die Äquivalenzklassen von ≡M mit der Er-
weiterung des in der Vorlesung vorgestellten Verfahrens aus Ü4.4. Geben Sie also
insbesondere für jedes Paar an Zuständen (q, r), das sie „markieren“, ein Wort w
an, das sie unterscheidet (d.h. von δ(q, w), δ(r, w) ist genau einer akzeptierend). Es
steht ihnen frei, auch die optimierte Version des Verfahrens mit Abhängigkeitsana-
lyse zu verwenden.
(b) Erzeugen Sie einen minimalen DFA äquivalent zu M , indem sie die äquivalenten
Zustände von M kollabieren.
b

a
a, b b
a
0 1 2 3
b a
a a
b
4 5
b

Lösungsskizze.
0 0 0
ε 1 ε 1 ε 1
ε 2 a ε 2 a ε 2
ε ε 3 ε ε 3 ε ε 3
ε ε 4 ε a ε 4 ε a ε 4
ε ε ε 5 ε ε ε 5 ε ε ε 5

(a) Zuerst markieren wir alle Paare die genau einen akzeptierenden Zustand besitzen als
a
unterschiedlich. Danach gehen wir alle verbleibenden Paare durch: (0, 2) → (1, 2) und
a
(1, 2) ist markiert mit ε, also wird auch (0, 2) markiert, und zwar mit a. (1, 3) → (2, 2)
b a
und (1, 3) → (0, 0), also bleibt (1, 3) unmarkiert (und wird es auch immer sein). (2, 4) →
a b
(2, 1), also wird (2, 4) markiert, ebenfalls mit a. (3, 5) → (2, 2) und (3, 5) → (0, 4), also
a b
bleibt (3, 5) unmarkiert. (0, 4) → (1, 1) und (0, 4) → (1, 5), also bleibt (0, 4) unmarkiert.
a b
Schließlich gilt (1, 5) → (2, 2) und (1, 5) → (0, 4), und (1, 5) bleibt auch unmarkiert.
In der nächsten Iteration gibt es keine Veränderungen. Die Äquivalenzklassen sind also
{{0, 4}, {1, 3, 5}, {2}}.
(b) Der minimierte DFA sieht folgendermaßen aus:

a
a, b a
0, 4 1, 3, 5 2
b b

Aufgabe H4.4. (a maximo ad minimum) 2+1 Punkte


(a) Bestimmen Sie für folgenden DFA M 0 die Äquivalenzklassen von ≡M 0 . Sie müssen
hierzu nicht nach dem in der Vorlesung vorgestellten Verfahren vorgehen.
(b) Minimieren Sie nun M 0 mit dem Minimierungsalgorithmus aus der Vorlesung und
geben Sie einen regulären Ausdruck für L(M 0 ) an.
b a, b

a
a b
0 2 4 7
b a
a
b
b b
1 3 5 8
b
a a
a, b
a 6 9
a, b

Lösungsskizze. (a) Die Äquivalenzklassen sind {{0, 4}, {1}, {2, 5}, {3, 8}, {6, 7, 9}}.
b a, b

a
a b
0 2 4 7
b a
a
b
b b
1 3 5 8
b
a a
a, b
a 6 9
a, b

(b) Zuerst eliminieren wir den nicht-erreichbaren Zustand 1. Danach kollabieren wir
äquivalente Zustände und erhalten folgenden Automaten.
a
2, 5 0, 4
a b
b b
a
3, 8 6, 7, 9 a, b

Zustand 7 ist ein Fangzustand, der DFA akzeptiert also die Sprache, die von dem regu-
lären Ausdruck a(aa | bb)∗ erzeugt wird.
Aufgabe H4.5. (ejusdem generis) 1+3 Punkte
(a) Sei Σ := {a}, k ∈ N>0 beliebig und L := {aik : i ∈ N} die Sprache der Wörter
deren Länge ein Vielfaches von k ist. Bestimmen sie die Äquivalenzklassen von
≡L (s. Definition 3.55), und zeigen Sie so, dass der minimale DFA für L genau k
Zustände hat.
(b) Sei r := ab∗ | ba∗ ein regulärer Ausdruck über Σ := {a, b}. Konstruieren Sie den
kanonischen Minimalautomaten für L(r) direkt nach Definition 3.59. Beschriften
Sie hierfür jeden Zustand mit einem regulären Ausdruck, dessen erzeugte Sprache
der Äquivalenzklasse des Zustandes entspricht. (Der Startzustand wäre z.B. mit
 beschriftet.) Beschreiben Sie ihr Vorgehen. Sie müssen nicht beweisen, dass Sie
jeder Äquivalenzklasse einen passenden regulären Ausdruck zugeordnet haben.
Achtung: Wir betrachten die Äquivalenzklassen bezüglich ≡L(r) , nicht die der
Zustände des Automaten!
Lösungsskizze. (a) Zwei Wörter u, v sind äquivalent genau dann, wenn |u| ≡ |v| (mod k).
Die Äquivalenzklassen von ≡L sind also

[aj ]≡L = {aj+ik : i ∈ N} für j ∈ {0, ..., k − 1}

(b) (Wie üblich ergibt sich die Äquivalenzrelation implizit aus dem Kontext und wir
schreiben [·] statt [·]≡L(r) .) Zuerst müssen wir uns davon überzeugen, dass [ε] = {ε}
tatsächlich gilt, wie von der Aufgabenstellung behauptet. Zur Erinnerung: [ε] enthält
die Wörter w, sodass für jedes Wort u das Wort wu genau dann in L ist, wenn u es auch
ist. Da ab ∈ L, muss somit auch wab ∈ L gelten – aber jedes Wort in L hat genau ein a
oder genau ein b, also gilt w = ε.
Vom Startzustand  ausgehend müssen wir nun die Äquivalenzklassen [a] und [b] be-
stimmen. An das Wort a lassen sich genau die Wörter in b∗ anhängen (um ein Wort
in L zu erhalten), die Äquivalenzklasse ist also ab∗ . Analog dazu ist gilt [b] = L(ba∗ ).
Außerdem gilt ε ∈ [a], [b], beide Zustände sind somit final. Der Automat sieht nun wie
folgt aus:

a ab∗


b
ba∗

Wir fahren mit Zustand [a] = L(ab∗ ) fort. Da ab ∈ L(ab∗ ), gilt [ab] = [a] und es gibt eine
b-Schleife von diesem Zustand aus. Für aa gilt, dass es kein Wort w gibt, sodass aaw ∈ L,
die Äquivalenzklasse [aa] enthält also genau die Wörter, die nicht Präfix eines Wortes
in L sind. Das sind genau die Wörter, bei denen der erste Buchstabe ein zweites Mal im
Wort vorkommt, also ab∗ a(a | b)∗ und ba∗ b(a | b)∗ . Beachten Sie, dass beide Ausdrücke
mit (a | b)∗ enden, da ein schlechtes Präfix nicht gut werden kann, indem man Zeichen
anhängt. Für [ba] und [bb] ist die Situation dann analog.
b
a, b

a ab∗ a
 (ab∗ a | ba∗ b)(a|b)∗
b ba∗ b

Aufgabe H4.6. (sic parvis magna) 1+2+1 Punkte


Dora hat ihren Kindergartenprofessor noch einmal gefragt, und weiß nun, wie die Produkt-
Konstruktion funktioniert. Jetzt ist ihr aber aufgefallen, dass der entstandene Produkt-
automat nicht minimal sein muss! Entrüstet möchte sie zu ihrem Kindergartenprofessor
stampfen, ihn mit Sand bewerfen, und sich darüber beschweren, dass er ihr ein offen-
sichtlich schlechtes Verfahren beigebracht hat. Können Sie Dora beschwichtigen, indem
Sie demonstrieren, dass die ihr bekannten Verfahren, um Mengenoperationen auf DFAs
auszuführen, zumindest manchmal ein bestmögliches Ergebnis liefern?
(a) Sei L eine reguläre Sprache und M = (Q, Σ, δ, q0 , F ) ein minimaler DFA für L.
Zeigen Sie, dass es einen minimalen DFA für L mit |Q| Zuständen gibt.
(b) Zeigen Sie, dass es für jede Zahl n ∈ N zwei DFAs M1 = (Q1 , Σ, δ1 , q01 , F1 ) und
M2 = (Q2 , Σ, δ2 , q02 , F2 ) gibt, sodass |Q1 |, |Q2 | ≥ n und der minimale Automat für
L(M1 ) ∩ L(M2 ) genau |Q1 | · |Q2 | Zustände hat.
(c) Beweisen Sie, dass es für jede Zahl n ∈ N zwei DFAs M3 = (Q3 , Σ, δ3 , q03 , F3 ) und
M4 = (Q4 , Σ, δ4 , q04 , F4 ) gibt, sodass |Q3 |, |Q4 | ≥ n und der minimale Automat für
L(M3 ) ∪ L(M4 ) genau |Q3 | · |Q4 | Zustände hat.
Hinweis: Es mag hilfreich sein, Ergebnisse aus Aufgabe H4.5 zu verwenden.
Lösungsskizze.
(a) Das Verfahren zur Komplementbildung von DFAs, das wir kennen, macht jeden
Finalzustand normal und umgekehrt. (Die neuen Finalzustände sind also Q \ F .)
Dies verändert die Anzahl der Zustände nicht und wir wissen schon mal, dass es
einen DFA für L mit |Q| Zuständen gibt. Wenn es einen DFA M 0 = (Q0 , Σ, δ 0 , q00 , F 0 )
für L mit |Q0 | < |Q|, also echt weniger als |Q| Zuständen, gäbe, könnten wir dessen
Komplement bilden und würden einen DFA für L mit |Q0 | Zuständen erhalten.
Aber M war bereits minimal, dies ist also nicht möglich. Somit kann kein Automat
für L weniger als |Q| Zustände haben, und das Komplement von M ist bereits
minimal.
(b) Wir verwenden, dem Hinweis folgend, Aufgabe H4.5 (a) und betrachten die Spra-
chen L1 := {ain : i ∈ N} und L2 := {ai(n+1) : i ∈ N}. Da n und n + 1 aufeinan-
derfolgende natürliche Zahlen sind, sind sie teilerfremd, und damit ist ihr kleinstes
gemeinsames Vielfaches n(n + 1). Hieraus folgt L1 ∩ L2 = {ain(n+1) : i ∈ N}.
Nach H4.5 (a) besitzen die minimalen DFAs für L1 bzw. L2 damit n bzw. n + 1
Zustände, und der minimale DFA für L1 ∩ L2 besitzt n(n + 1) Zustände, wie zu
zeigen war. (Es ist also M1 der minimale DFA für L1 , und M2 für L2 .)
Anmerkung: Statt n und n + 1 hätten wir auch genauso gut zwei beliebige Prim-
zahlen p1 , p2 ≥ n wählen können.
(c) Wir wählen L1 , L2 genau so wie in in Teilaufgabe (b), und definieren Mi+2 als
minimalen DFA für das Komplement von Li für i = 1, 2, d.h. L(M3 ) = L1 und
L(M4 ) = L2 . Nach Teilaufgabe (a) gilt |Q1 | = |Q3 | und |Q2 | = |Q4 |, da der
minimale DFA einer Sprache und ihres Komplements gleich groß sind. Außerdem
gilt nach De Morgan

L(M3 ) ∪ L(M4 ) = L(M3 ) ∩ L(M4 ) = L1 ∩ L2

Nach (b) hat der minimale DFA für L1 ∩L2 genau |Q1 |·|Q2 | = |Q3 |·|Q4 | Zustände,
und somit nach (a) auch der minimale DFA für L1 ∩ L2 = L(M3 ) ∪ L(M4 ).
Bonusaufgabe H4.7. (inveniet quod quisque velit) 3 Bonuspunkte
Der Superschurke Dr. Evilsparza hat jüngst ein Pharmaunternehmen (Evillest Evilness
Inc.) gegründet, und behauptet nun, einen Impfstoff gegen schlechtes Wetter entwickelt
zu haben. Die Öffentlichkeit ist begeistert – Sie trauen dem angeblich reformierten Sün-
der allerdings nicht und versuchen, in der DNA-Sequenz nach Hinweisen zu suchen.
Bekanntermaßen werden in der DNA vier verschiedene Basen kodiert: Evalcyclohex-
andifluorit, Isophoronditrigocyanat, Vinylcyclohexenquadroxid, und Levomethagameor-
phan. Diese werden mit ihrem Initialbuchstaben abgekürzt, sodass letztendlich ein Wort
über dem Alphabet Σ := {e, i, l, v} entsteht. Sie sind in Besitz einer Sequenz, mit der Dr.
Evilsparza in 2006 versuchte, die gesamte Studierendenschaft zu mathematischen Zom-
bies zu wandeln, um die Universitätsherrschaft an sich zu reißen. Sie vermuten, dass er
diese Sequenz wieder verwendet – aber Sie müssen Beweise finden, und die Zeit drängt!
Unter diesem Link finden Sie sowohl die Impfstoff-Sequenz w, als auch die Zombie-
Sequenz s. Bestimmen Sie, ob s in w enthalten ist, und geben sie den kleinsten Index i
an, sodass w1 w2 ...wi bereits s enthält. Beschreiben Sie ihr Vorgehen.
Hinweise: Verwenden Sie zur Lösung dieser Aufgabe einen Computer. Beschreiben
Sie bitte Ihren Ansatz in natürlicher Sprache und illustrieren die wesentlichen Schritte
ihrer Lösung mit geeigneten Codefragmenten. Sie können (müssen aber nicht), ihrer
Lösung ihren vollständigen Programmcode beifügen, jedoch steht es den Korrektoren
frei, diesen zu ignorieren. Wenn Sie existierende Algorithmen verwenden, die nicht Teil
der Vorlesung sind, beschreiben Sie bitte ausführlich, weshalb und auf welche Weise diese
funktionieren.
Wir sind, wie immer, an Lösungen interessiert, die sich verallgemeinern lassen. Ihre
Lösung sollte also für beliebige Wörter w und s funktionieren. Zusätzlich soll ihre Lösung
effizient sein (im Bezug auf die theoretische Komplexität des Algorithmus), und innerhalb
von wenigen Sekunden (aber auf jeden Fall innerhalb von einer Minute) terminieren. Sie
dürfen Standard-Datenstrukturen (wie etwa Hashtabellen oder binäre Bäume) verwen-
den, ansonsten beschränken Sie sich bitte auf grundlegende Funktionalitäten verbreiteter
Programmiersprachen.
Highscores: Die Musterlösung wurde nicht optimiert und terminiert in etwa 750ms.
Falls ihr Programm schneller ist, können Sie gerne eine Mail an Philipp Czerner mit
dem Betreff „THEO H4.7“ schreiben, in der Sie ihr Programm und Anweisungen, es
auszuführen, anhängen. Wir veröffentlichen dann eine Bestenliste auf Zulip. (Um die
Zeiten für die Bestenliste zu ermitteln, werden wir etwas andere w, s ∈ Σ∗ verwenden.)
Lösungsskizze. Zuerst lesen wir die beiden Dateien ein:

w = open(’impfstoff.txt’, ’r’).read()
s = open(’zombie.txt’, ’r’).read() + ’.’

An s hängen wir dabei noch ein $ an, da dies den folgenden Code vereinfachen wird.
Wir erzeugen zunächst wir einen NFA M , um s (mit Länge l := |s|) zu erkennen:
Σ

s1 s2 s3 sl
0 1 2 l
In Mengenschreibweise würden wir M = (Q, Σ, δ, q0 , F ) also definieren, indem wir
Zustände Q := {0, ..., l} wählen, q0 := 0, F := {l}, und Übergänge

((0, c), 0) für c ∈ Σ


((i − 1, si ), i) für i ∈ {1, ..., l}

Diesen Automaten konvertieren wir nun zu einem DFA M 0 = (Q0 , Σ, δ 0 , q00 , F 0 ), indem wir
eine Potenzmengenkonstruktion anwenden. Prinzipiell könnte M 0 bis zu 21000 Zustände
haben, tatsächlich hat M 0 aber nur |s|+1 Zustände. (Dies lässt sich mit der Beobachtung
zeigen, dass q := δ({q0 }, s1 s2 ...si ) der einzige Zustand von M 0 ist, der i ∈ q, i+1, i+2, ... ∈
/
q erfüllt. Für weitere Details seien interessierte Studierende Vorlesung Automatentheorie
verwiesen.) Die Potenzmengenkonstruktion lässt sich folgendermaßen implementieren.
states = {q_0}
transitions = {}
q_0 = (0,)
final = set()
workset = [q_0]
while workset:
q = workset.pop()
for c in ’eilv’:
q_next = tuple([0] + [i+1 for i in q if s[i] == c])
if q_next not in states:
states.add(q_next)
if len(s)-1 in q_next: final.add(q_next)
workset.append(q_next)
transitions[q,c] = q_next
Dies ist ein Workset-Algorithmus: Die Zustände, die wir noch nicht abgearbeitet haben,
befinden sich in workset. Wir nehmen uns wiederholt einen Zustand aus dem Work-
set heraus, in erzeugen dessen ausgehende Transitionen. Immer wenn wir einen neuen
Zustand erreichen, fügen wir ihn in das Workset ein.
Schlussendlich erhalten wir
• states: Q0 , gespeichert in einem set, damit wir effizient überprüfen können, ob
ein Element enthalten ist.
• transitions: δ 0 , als dict, bildet (q, c) ∈ Q0 × Σ0 Paare auf δ 0 (q, c) ab.
• q_0: Der Startzustand q00 .
• final: Die Finalzustände F 0 , wieder als set.
Hier werden die Zustände direkt als Tupel dargestellt, z.B. wäre {0, 3, 8} ∈ Q0 das
Python-Tupel (0,3,8). Es gibt zwar nur |s| + 1 Zustände in M 0 , aber diese können
auch bis zu |s| + 1 Elemente enthalten. Das macht es ineffizient, direkt mit den Tupeln
zu arbeiten. Stattdessen benennen wir die Zustände jetzt um, sodass sie wieder Zahlen
0, ..., |s| sind.
M = {q: i for i, q in enumerate(states)}
transitions = {(M[q],c): M[r] for (q,c),r in transitions.items()}
q_0 = M[q_0]
final = {M[i] for i in final}
Hierzu erstellen wir ein dict, also M, das Zustände in states auf Zahlen in 0, ..., |s|
abbildet. Das verwenden wir dann, um die Zustände in transitions, q_0 und final
umzubenennen. Schließlich müssen wir nur den DFA auf dem Wort w ausführen.

q = q_0
for i, c in enumerate(w):
q = transitions[q,c]
if q in final: print(i+1); break

Das Programm gibt 4026864 aus, also ist s bereits in w1 w2 ...w4026864 enthalten.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Übungsblatt 5

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü5.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• Kontextfreie Sprache (CFL) • Kontextfreie Grammatik (CFG)
• rechts-lineare / links-lineare CFG • (Links-/Rechts-)Ableitung
• Syntaxbaum • mehrdeutige CFG

Individualaufgabe Ü5.2. (Automata Tutor: “Contextfree Languages”)


Lösen Sie die Aufgaben Ü5.2 (a–d) auf Automata Tutor.1 Achtung: Für die Übungsauf-
gaben haben Sie beliebig viele Versuche. Für die Aufgaben in Hausaufgabe H5.1 nicht!
Lösungsskizze.
(a) S → AundS → AundA → AundNVNM → AundNVNsehr
→ AundNVesparzasehr
→ AundNfeiertesparzasehr
→ Aundstudentfeiertesparzasehr
→ NVNundstudentfeiertesparzasehr
→ NVtheoundstudentfeiertesparzasehr
→ Nbrauchttheoundstudentfeiertesparzasehr
→ tumbrauchttheoundstudentfeiertesparzasehr
(b) S → Y X → bY Y X → baY X → baGX → badX → badaX → badaaX →
badaaS → badaaF → badaac
(c) S → SS | A
A→B |C |D |
B → {C}
C → [D] | CC | DC | CD
D → ()D | ()

1
Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in Ü1.2, um sich
richtig zu registrieren.
(d) S → aSb | A | B
A → aA | a
B → bB | b

Individualaufgabe Ü5.3. (Anwendungsbeispiel kontextfreie Grammatiken)


Betrachten Sie die folgende Grammatik G = (V, Σ, P, J) mit

V = {J, D, T, N, N 0 , Z, A, S, E, U, B, C, V, U 0 , B 0 }
Σ = {;, {, }, (, ), =, a, b, ..., y, z, 0, 1, ..., 8, 9, +, -, ·, /, %, !, <, >, &&, ||}

mit den Produktionen P :=

J → DS | S
D → T N ;D | T N ;
T → int
N → AN 0
N 0 → AN 0 | ZN 0 | A | Z
A → a | b | c | ... | y | z
Z → 0 | 1 | ... | 8 | 9
S → SS | ; | {S} | N = E; | N = read(); | write(E); | if(C) S else S | while(C) S
E → Z | N | (E) | U E | EBE
U →-
B→-|+|·|/|%
C → true | false | (C) | EV E | U 0 (C) | CB 0 C
V → == | != | <= | < | >= | >
U0 → !
B 0 → && | ||

(a) Was für eine Sprache erzeugt diese Grammatik?


(b) Beurteilen Sie die folgende Aussagen: Alle Worte in L(G) können zu einem funk-
tionierenden Programm compiliert werden.
(c) Geben Sie ein gültiges Wort in der Sprache an, das alle Nichtterminale mindestens
einmal verwendet.
(d) Zeichnen Sie den Syntaxbaum für das in Teilaufgabe (c) gefundene Wort.
Lösungsskizze.
(a) Alle syntaktisch korrekten MiniJava Programme (siehe Vorlesung: Einführung in
die Informatik 1 )
(b) Die Aussage ist falsch. Die semantische Korrektheit des Programms kann durch
die Grammatik nicht sichergestellt werden, nur die syntaktische. Es können zum
Beispiel Variablen verwendet werden, die nicht deklariert sind.
(c) int x1;
while(!(x2 > 0))
{ if(x3==x4 && true) write(x5); else x7 = -1 % 5; }
(d) Syntaxbaum:
J

D S

T N ; while( C ) S
..
int A N’ C’ ( C ) .

x Z ! C B’ C
.. .
1 . && ..

Übung und Nachbereitung

Fokusaufgabe Ü5.4. (Sprache einer kontextfreien Grammatik)


Gegeben sei die folgende Grammatik G:

S → aSa | bSb | aT b | bT a
T → aT | bT | 

(a) Welche Sprache beschreibt G? Geben Sie eine intensionale Mengendarstellung2 L


für L(G) an.
(b) Zeigen oder widerlegen Sie: L ist regulär.
(c) Zeigen Sie L(G) = L formal. Beweisen Sie dabei auch induktiv, welche Sprache
von T erzeugt wird.

Übungsaufgabe Ü5.5. (Sprache einer kontextfreien Grammatik)


Sei G = ({S, E, O, A, B, X}, {a, b}, P, S) die CFG mit folgenden Produktionen P :

S→E|O
E → AB | BA
A → XAX | a
B → XBX | b
O → XXO | X
X→a|b

(a) Geben Sie für jedes der folgenden Wörter jeweils eine Linksableitung und eine
Rechtsableitung zzgl. des entsprechenden Syntaxbaums an:
(i) abaaaa (ii) babab (iii) aabbaaba
(b) Entscheiden Sie, ob die Grammatik G mehrdeutig ist oder nicht. Wenn sie mehr-
deutig ist, geben Sie ein Wort w ∈ L(G) mit zwei Syntaxbäumen an. Sonst beweisen
Sie, dass G nicht mehrdeutig ist.
2
Das heißt, eine Beschreibung der Form L := {w ∈ A | P (a)} für eine geeignete Menge A und Prädikat
P.
Lösungsskizze.
(a) (i)
Linksableitung: S → E → BA → XBXA → aBXA → abXA → abaA →
abaXaX → abaaaX → abaaaa
Rechtsableitung: S → E → BA → BXaX → BXaa → Baaa → XbXaaa →
Xbaaaa → abaaaa
S

B A

X B X X A X

a b a a a a
(ii)
S

X X O

b a X X O

b a X

b
(iii)
S

B A

X B X a

a X B X b

aX B Xa

b b a
(b) G ist nicht eindeutig:
S S

E E

A B A B

a X B X X A X X

a b b a a b b
Übungsaufgabe Ü5.6. (Residualsprachen)
Die Äquivalenzklassen einer Sprache L kann man verwenden um z.B. direkt den minima-
len DFA aufzustellen, oder um festzustellen, ob L regulär ist. Allerdings ist es teilweise
mühsam, die Äquivalenzklassen herauszufinden: die Äquivalenzklasse von u enthält alle
Wörter v, sodass die Suffixe w, die man an u anhängen muss, damit uw ∈ L, genau die
sind, die man an v anhängen muss, damit vw ∈ L. Wir betrachten nun diese Suffixe
direkt und zeigen, dass man auch auf diese Weise bereits den minimalen DFA aufstellen
kann und entscheiden kann, ob eine Sprache regulär ist.
Sei Σ := {a, b} und L ⊆ Σ∗ eine Sprache über Σ. Für ein Wort w ∈ Σ∗ definieren wir
die Residualsprache Lw := {u : wu ∈ L}. Die Residualsprache Lw enthält also genau die
Wörter in L, die mit w beginnen, wobei das führende w entfernt wurde. Beispielsweise
gilt L(ab∗ | ba∗ )a = L(b∗ ) und L(ab∗ | ba∗ )aba = ∅.
(a) Zeigen Sie u ≡L v ⇔ Lu = Lv für beliebige Wörter u, v ∈ Σ∗ .
(b) Folgern Sie aus der (a), dass L genau dann regulär ist, wenn L endlich viele (un-
terschiedliche) Residualsprachen besitzt, also |{Lw : w ∈ Σ∗ }| < ∞.
(c) Konstruieren Sie den kanonischen Minimalautomaten zu dem regulären Ausdruck
r := ab | ba∗ , indem Sie einen Zustand [w]≡L(r) nicht mit dessen Äquivalenzklasse,
sondern mit einem regulären Ausdruck für die Residualsprache L(r)w beschriften.
Lösungsskizze. (a) Seien u, v ∈ Σ∗ beliebig. Wir teilen den Beweis in zwei Richtungen
auf.
„⇒“ Es gelte also u ≡L v. Zur Erinnerung bedeutet dies, dass für alle w ∈ Σ∗ gilt, dass
uw ∈ L ⇔ vw ∈ L. Wir müssen für alle Wörter w ∈ Σ∗ zeigen, dass w ∈ Lu ⇔
w ∈ Lv . Sei also w beliebig. Es gilt
(1) (2) (1)
w ∈ Lu ⇐⇒ uw ∈ L ⇐⇒ vw ∈ L ⇐⇒ w ∈ Lv

Bei (1) verwenden wir die Definition von Residualsprachen, bei (2) benutzen wir
u ≡L v, wie oben angemerkt.
„⇐“ Nun nehmen wir Lu = Lv an. Es ist zu zeigen, dass für alle Wörter w ∈ Σ∗ gilt,
dass uw ∈ L ⇔ vw ∈ L. Es gilt für alle w:
(1) (2) (1)
uw ∈ L ⇐⇒ w ∈ Lu ⇐⇒ w ∈ Lv ⇐⇒ vw ∈ L.

Bei (1) verwenden wir wieder die Definition von Residualsprachen, bei (2) Lu = Lv .
(b) Aus (a) folgt u 6≡L v ⇔ Lu 6= Lv . Das bedeutet, die Anzahl Äquivalenzklassen bezüg-
lich ≡L ist genau die Anzahl der verschiedenen Residualsprachen. Laut Myhill-Nerode
(Satz 3.60) ist eine Sprache regulär genau dann, wenn sie endlich viele Äquivalenzklassen
besitzt. Aufgrund der eben festgestellten Gleichheit also regulär genau dann, wenn sie
endlich viele Residualsprachen besitzt.
Etwas formaler sei M1 := {[w]≡L : w ∈ Σ∗ } die Menge der Äquivalenzlassen von
≡L und M2 := {Lw : w ∈ Σ∗ } die Menge der Residualsprachen von L. Wir definieren
die Funktion f : M1 → M2 als f ([w]≡L ) := Lw für alle w ∈ Σ∗ . Nach Teilaufgabe
(a) hängt f ([w]≡L ) nicht davon ab, welchen Repräsentanten w ∈ [w]≡L wir wählen,
f ist also wohldefiniert. Für Äquivalenzklassen [u]≡L 6= [v]≡L gilt Lu 6= Lv (wieder
nach (a)), und somit f ([u]≡L ) 6= f ([v]≡L ). Also ist f injektiv. Da jedes Wort w ∈ Σ∗
eine Äquivalenzklasse [w]≡L besitzt, ist f auch surjektiv. Also ist f eine Bijektion und
|M1 | = |M2 | gilt; insbesondere gibt es genau dann unendlich viele Äquivalenzklassen,
wenn es unendlich viele Residualsprachen gibt.
(c) Wir erhalten folgenden Automaten:

a b
ab | ba∗ b 

b a
a, b
b
a a∗ ∅

a, b

Übungsaufgabe Ü5.7. (Pfeilsprachen)


In dieser Aufgabe betrachten wir Sprachen, deren Worte Linienzüge in einem unendli-
chen zweidimensionalen Gitter von einem fixen Startpunkt aus beschreiben. Die folgende
Grafik zeigt einen Ausschnitt aus dem Gitter:

Wir haben Startpunkt blau markiert. Linienzüge beschreiben wir im Folgenden als eine
Sequenz von Pfeilen, d.h. als Worte über dem Alphabet Σ = {→, ←, ↑, ↓}. Die Pfeile
beschreiben dabei (vom Startpunkt aus gesehen) einen ein Kästchen langen Schritt ent-
lang des Gitters. Wir stellen daher den im Bild rot eingezeichnete Linienzug durch das
Wort w =→→↑←←←↓↓ dar.
(a) Betrachten Sie die folgenden natürlich sprachlichen Beschreibungen zusammen mit
jeweils einem Beispiel, welches in der Sprache liegt (auf der linken Seite), und einem
Beispiel, das kein Element der Sprache ist (auf der rechten Seite). Geben Sie für
jede der Sprachen eine formale Definition der Form {w ∈ Σ∗ | ...} an.3
(1) die Sprache aller Treppen über dem Alphabet Σ0 = {→, ↑}

(2) die Sprache aller im Uhrzeigersinn laufenden Spiralen über dem Alphabet Σ,
die vom Startpunkt aus zuerst nach oben laufen

(3) die Sprache aller “Skylines” über dem Alphabet Σ00 = {→, ↑, ↓}

3
Das heißt insbesondere, dass Sie in diesem Aufgabenteil keinen Automaten, keinen regulären Ausdruck,
keine Grammatik oder ähnliches angeben sollen, die die Sprache beschreiben.
Hinweis: Die Sprachen sind mithilfe der Beispiele nicht eindeutig bestimmt! Ziel der
Aufgabe ist es, die intuitive Beschreibung (z.B. “Sprache aller Skylines”) zusammen
mit den Beispielen in eine möglichst allgemeine Sprachdefinition zu bringen.
(b) Stellen Sie Vermutungen auf, ob die obigen Sprachen regulär oder kontextfrei sind.
Begründen Sie Ihre Antwort möglichst anschaulich anhand des Beispiels.
(c) Geben Sie zu jeder der Sprachen L aus Aufgabenteil (a) eine Grammatik G an.
Lösungsskizze.
(a) (1) L = {(→↑)i | i ∈ N }{ε, →}
(2) L = {u ∈ Σ∗ | ∃v ∈ Σ∗ . uv ∈ L((↑+ →+ ↓+ ←+ )∗ )}
(3) L = {w ∈ Σ∗ | (∀u, v ∈ Σ∗ . w = uv → |u|↑ ≥ |u|↓ ) ∧ (∀u, v ∈ Σ∗ . ∀x, y ∈
Σ. w = uxyv → xy 6∈ {↑↓, ↓↑})}
(b) (1) regulär, da nur eine Alternierung konstanter Pfade verlangt wird.
(2) regulär, da nur die Laufrichtung wichtig ist, aber nicht die Länge.
(3) kontextfrei, da zwei Längen verglichen werden müssen.
(c) (1) S 7→→↑ S |→| ε
(2) S 7→ ↑ S | ↑ T | ε T 7→ → T | → U | ε U 7→ ↓ U | ↓ V |
ε V →
7 ←V |←S |ε
(3) S 7→ T? | T? → S T? 7→ ε | T T 7→ ↑ T ↓ | T? → T?
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 5

• Sei Φ := {{1}, {2, 3}, {4}, {5}, {6}}. Nach dem Abgabedatum werden wir für jede
Menge A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren.
Update: Die Aufgaben {1, 2, 4, 5, 6} werden korrigiert.
• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.

Aufgabe H5.1. (Automata Tutor) 1+1 Punkte


Diese Hausaufgabe wird mit Automata Tutor bearbeitet und abgegeben. Falls Sie es
noch nicht bereits gemacht haben, folgen Sie den Schritten in Ü1.2, um ein Konto zu
erstellen. Achten Sie darauf, dass Sie sich, wie dort beschrieben, mit Ihrer TUM-Kennung
anmelden. Ansonsten können wir Ihnen die Punkte nicht gutschreiben.
Bearbeiten Sie die Hausaufgaben H5.1 (a–b). Achtung: Während Sie für die Aufgaben
aus dem Übungsblatt beliebig viele Versuche hatten, haben Sie für jede Hausaufgabe nur
5 Versuche. Sie bekommen nur dann einen Punkt, wenn Sie die Aufgabe nach 5 Versuchen
vollständig (also mit 10/10 Punkten) gelöst haben.
Lösungsskizze.
(a) S → XS |  (b) S → XY
X → aXc | B X → aXb | 
B → bB |  Y → bY a | 
Aufgabe H5.2. (Gib mir ein a!) 0.5+0.5+0.5+0.5 Punkte
Sei G = ({S, A, B, C}, {a, b}, P, S) eine Grammatik mit den Produktionen
S → AB | BC A → AA | a
B → ABA | BCB | b C → ab | ba
Sind die folgenden Wörter in L(G) enthalten? Falls ja, geben sie einen Syntaxbaum und
eine Linksableitung an, falls nein, begründen Sie dies kurz.
(a) ε (b) aababb (c) abaabbba (d) abaabbbba
Lösungsskizze.
(a) Nein, da keine Produktion α → ε enthalten ist.
(b) Ja, S → AB → AAB → aAB → aaB → aaBCB → aabCB → aababB → aababb.
S

A B

A A B C B

a a b a b b
(c) Ja, S → BC → BCBC → ABACBC → aBACBC → abACBC → abaCBC →
abaabBC → abaabbC → abaabbba.
S

B C

B C B b a

A B A a b b

a b a
(d) Nein, da kein Wort in G vier konsekutive b enthält. (Aus A werden nur Wörter
in a+ erzeugt, aus C nur Wörter, die ein a beinhalten und mit höchstens einem
b anfangen oder aufhören. Somit aus B nur Wörter, die ein a beinhalten und
mit höchstens zwei b anfangen oder aufhören, und höchstens drei konsekutive b
beinhalten; ebenso für S.)

Aufgabe H5.3. (Do you even pump?) 1+1 Punkte


Sei Σ := {a, b}. Beweisen oder widerlegen Sie, dass die folgenden Sprachen regulär sind.
Bitte beachten Sie, dass es beim Beweisen von Regularität regelmäßig nicht genügt, einen
entsprechenden Automaten anzugeben – zumindest eine Begründung ist erforderlich.
Um zu widerlegen, dass eine Sprache regulär ist, steht Ihnen die Wahl der Beweistechnik
(Pumping Lemma, unendlich viele Äquivalenzklassen / Residualsprachen) frei.
Wie üblich schreiben wir |x|v := |{u : x = uvw, u, w ∈ Σ∗ }| für die Anzahl der
Vorkommnisse des Wortes v ∈ Σ∗ in x ∈ Σ∗ , z.B. gilt |abbbabb|bb = 3.
(a) L = {w ∈ Σ∗ : |w|aa = |w|bb }
(b) L = {w ∈ Σ∗ : |w|ab = |w|ba }
Lösungsskizze. (a) Nein, die Sprache ist nicht regulär. Wie zeigen dies, indem wir unend-
lich viele Residualsprachen finden (siehe Übungsaufgabe Ü5.6). Wir wählen ui := (aab)i ,
vi := (abb)i für i ∈ N. Beachten Sie, dass |ui vj |aa = i und |ui vj |bb = j für alle i, j ∈ N.
In der Residualsprache Lui ist vi enthalten, aber kein vj für j 6= i. Also sind die Residu-
alsprachen Lu0 , Lu1 , Lu2 , ... paarweise verschieden, und L somit nicht regulär.
(b) Ja, die Sprache ist regulär, sie enthält genau die Wörter, deren erster und letzter
Buchstabe gleich sind (und das leere Wort). Dies ist dadurch begründet, dass auf ein ab
kein weiteres ab folgen kann, ohne dass ein ba dazwischen entsteht, und umgekehrt. Die
Differenz |w|ab − |w|ba kann also nicht betragsmäßig größer als 1 werden. Ein regulärer
Ausdruck für die Sprache ist a(a|b)∗ a | b(a|b)∗ b | a | b | .
Aufgabe H5.4. (no context) 1+1+2+1 Punkte
Sei G = ({S}, {a, b}, P, S) eine Grammatik mit den Produktionen S → aSbS | bSaS | ε.
(a) Geben Sie eine Sprache L mit L = L(G) an. Definieren Sie L auf möglichst leichte
Art und Weise (insbesondere ohne G zu verwenden).
(b) Zeigen Sie, dass jedes Wort w ∈ L \ {ε} sich in aubv = w oder buav = w zerlegen
lässt, mit u, v ∈ L.
Achtung: L ist die Sprache, die Sie in (a) angegeben haben, nicht L(G) !
(c) Verwenden Sie (b) und beweisen Sie L(G) = L.
(d) Ist G mehrdeutig? Begründen Sie Ihre Antwort.
Lösungsskizze. (a) (Anmerkung: Zur Lösung dieser Aufgabe genügt eine Zeile. Wir wollen
aber auch schildern, wie man auf diese Lösung kommt.)
Zunächst ist es immer eine gute Idee, sich zu überlegen, welche Arten von Wörtern in
der Sprache enthalten sind (untere Schranke) und welche Arten definitiv nicht enthalten
sind (obere Schranke).
Obere Schranke: Für eine obere Schranke suchen wir nach Invarianten, wie etwa „Jede
Produktion aus dem Nichtterminal ... erzeugt gleich viele ... wie ...“. Hier ist leicht zu
sehen, dass jede Produktion (aus dem einzigen Nichtterminal S) gleich viele a und b
erzeugt. Es gilt also L(G) ⊆ {w ∈ Σ∗ : |w|a = |w|b }.
Welche Wörter liegen sicher in der Sprache? Hierfür versuchen wir immer, auf einige
Nichtterminale sofort die ε-Produktion zu verwenden. Zum Beispiel hier S → aSbS →
aSb. Damit können wir nun an bn für alle n ∈ N erzeugen. Ähnlich (mit der zweiten Pro-
duktion) enthält die Sprache auch bn an für alle n ∈ N. Andererseits ist diese Grammatik
(wenn wir bei beiden Produktionen wieder das rechte S durch ε ersetzen) ähnlich zu
der Grammatik für Palindrome. Aus dieser Ähnlichkeit kann man erkennen, dass diese
Grammatik alle Wörter gerader Länge enthält, die von rechts und links gelesen genau
entgegengesetzt sind. Immer wenn das i-te Zeichen von links ein a ist, ist das i-te Zeichen
von rechts ein b, zum Beispiel bei abbaab. Als Erklärung, wie wir diese Wörter produzie-
ren: Wir produzieren immer das erste und letzte Zeichen gleichzeitig, dann das zweite
und vorletzte usw. Bis jetzt haben wir das zweite S noch nicht benutzt – die Grammatik
erzeugt also wahrscheinlich wesentlich mehr Wörter.
Zusammengefasst: Die untere Schranke wirkt kompliziert, als obere Schranke finden
wir auf die Schnelle eine Invariante, nämlich dass es gleich viele a wie b gibt. In der
Tat stellt sich nachher in Aufgabenteil (c) heraus, dass diese simple obere Schranke
L(G) = {w ∈ Σ∗ : |w|a = |w|b } bereits genau unsere Sprache ist. Wichtig: Soweit steht
hier noch kein formaler Beweis für diese Aussage!
(b) Unsere Idee ist, dass wir uns den ersten Buchstaben des Wortes anschauen, und dann
einen „passenden“ Buchstaben im Wort suchen. Für aababbba hätten wir beispielsweise
folgende Optionen:
(1) a a b abbba (2) a aba b bba (3) a abab b ba (4) a ababb b a
Option (1) funktioniert nicht, da a ∈ / L. Es gibt vor dem ersten b also zu viele a,
ebenso wie Option (2). Option (4) funktioniert ebenfalls nicht, in ababb ∈
/ L sind zu
viele b enthalten. Aber Option (3) passt, abab ∈ L und ba ∈ L gelten. Wir können also
nicht immer das erste oder das letzte b nehmen, sondern wir müssen die Möglichkeiten
so lange durchgehen, bis eine „passt“. Nun der eigentliche Beweis:
Sei w ∈ L, w 6= ε ein nichtleeres Wort in L und n := |w| seine Länge. Wir betrachten
den Fall, dass das erste Zeichen von w ein a ist, der Fall für b ist analog.
Wir gehen ähnlich zum Beweis von Satz 4.16 vor und betrachten die Funktion

h : {1, ..., n} → Z, h(i) := |w1 w2 ...wi |a − |w1 w2 ...wi |b

Um h(i) auszurechnen lesen wir also die Zeichen w1 , w2 , ..., wi und rechnen +1 für jedes
a, und −1 für jedes b. Da w ∈ L muss h(n) = 0 gelten, wir können also das auch
kleinste i wählen, sodass h(i) = 0 gilt. In jedem Schritt kann sich h nur um maximal
1 verändern, h(i − 1) = 1 muss also gelten (wenn h(i − 1) = −1 wäre, würde es ein
kleineres i mit h(i) = 0 geben). Daraus folgt wi = b, und wir definieren nun unsere
Zerlegung als u := w2 w3 ...wi−1 , v =: wi+1 wi+2 ...wn . (Beachten Sie, dass nach Konvention
w1 w2 ...wi = ε für i = 0.)
Schließlich erhalten wir u, v ∈ L aufgrund von

|u|a − |u|b = h(i − 1) − h(1) = 1 − 1 = 0

|v|a − |v|b = h(n) − h(i) = 0 − 0 = 0


(c) Wir teilen den Beweis von L(G) = L in zwei Teile auf.
„⊆“: Wir müssen also zeigen, dass jedes von G erzeugte Wort gleich viele a und b hat.
Möglichkeit 1: Wir zeigen die stärkere Aussage, dass jede von G ableitbare Satzform
w (also ein aus Terminalen und Nichtterminalen bestehendes Wort) |w|a − |w|b = 0
erfüllt. Dies beweisen wir mit vollständiger Induktion über die Länge der Produk-
tionskette.
Induktionsbasis: |S|a = 0 = |S|b
Induktionsschritt: Seien also w, w0 ∈ {a, b, S} mit w → w0 . Wenn Regel S → ε
angewandt wurde, gilt |w0 |a = |w|a und |w0 |b = |w|b . Ansonsten wurde S → aSbS |
bSaS angewandt und wir erhalten |w0 |a = |w|a + 1 und |w0 |b = |w|b + 1. In allen
Fällen gilt |w0 |a − |w0 |b = |w|a − |w|b , was nach Induktionsannahme 0 ist.
Möglichkeit 2: Wir verwenden wie in der Vorlesung die induktive Definition einer
Sprache (Folie mit Beispiel 4.10, Seite 137 im Handout). Für unsere Grammatik
erhalten wir (steht für allgemeine Grammatiken 8 Seiten weiter auf Seite 145):
– ε ∈ LG (S).
– u ∈ LG (S), v ∈ LG (S) ⇒ aubv ∈ LG (S).
– u ∈ LG (S), v ∈ LG (S) ⇒ buav ∈ LG (S).
Um also das Prädikat P (w) ⇔ |w|a = |w|b per Induktion über die Erzeugung zu
beweisen, müssen wir folgende Aussagen beweisen:
1.: P (ε): Trivial.
2.: P (u) ∧ P (v) ⇒ P (aubv): Es gilt

|aubv|a = 1 + |u|a + |v|a =[P (u)∧P (v)] 1 + |u|b + |v|b = |aubv|b .

3.: P (u) ∧ P (v) ⇒ P (buav): Es gilt

|buav|a = |u|a + 1 + |v|a =[P (u)∧P (v)] |u|b + 1 + |v|b = |buav|b .

„⊇“: Jetzt zeigen wir, dass jedes Wort w mit gleich vielen a und b sich aus G erzeugen
lässt. Dies geschieht per Induktion über die Wortlänge.
Induktionsbasis: S → ε ist trivial.
Induktionsschritt: Sei w ∈ L beliebig, mit w 6= ε. Nach (b) gilt w = aubv oder w =
buav für u, v ∈ L. Im ersten Fall können wir S → aSbS ableiten, und aus u, v ∈ L
folgt nach Induktionsannahme S →∗ u und S →∗ v, da |u|, |v| < |w|. Insgesamt
erhalten wir S → aSbS →∗ aubS →∗ aubv = w. Der zweite Fall w = buav ist
analog.
(d) Die Grammatik ist mehrdeutig, denn das Wort w = abab hat zwei Syntaxbäume.

S S

a S b S a S b S

ε a S b S b S a S ε

ε ε ε ε

Aufgabe H5.5. (dada) 0.5+2+0.5 Punkte


Der kleine Theo ist schon wieder traurig. Er würde gerne Kekse backen, muss aber zuerst
herausfinden, ob es ein Wort gibt, das er seinem noch kleineren Neffen beibringen kann.
Theo hat sich schon aufgeschrieben, welche Arten von Wörtern sein Neffe bereits gesagt
hat. Nun muss er aber ein möglichst kurzes Wort finden, das anders ist. Dazu würde
er gerne den kanonischen Minimalautomaten konstruieren, hat aber Riesenprobleme,
die Äquivalenzklassen aufzustellen. Sie haben neulich ein Gerücht gehört, dass sich der
minimale DFA auch über Residualsprachen konstruieren lässt, und wollen Theo helfen.
Zuerst müssen Sie ihm das Konzept einer Residualsprache erklären.
Sei L ⊆ Σ∗ eine Sprache über Σ. Für ein Wort w ∈ Σ∗ definieren wir die Residual-
sprache Lw := {u : wu ∈ L}. Die Residualsprache Lw enthält also genau die Wörter
in L, die mit w beginnen, wobei das führende w entfernt wurde. Beispielsweise gilt
L(ad∗ | da∗ )a = L(d∗ ) und L(ad∗ | da∗ )ada = ∅.
(a) Sei s := a∗ da∗ | d∗ a(ad | dd). Geben Sie für L(s)d , L(s)da , L(s)dad und L(s)dada
jeweils einen regulären Ausdruck an.
Hinweis: Es gilt Luv = (Lu )v für eine beliebige Sprache L und Wörter u, v.
Wie in Übungsaufgabe Ü5.6 (a) gezeigt hängt die Residualsprache Lw nicht davon ab,
welchen Repräsentanten w wir aus [w]≡L wählen. Um den kanonischen Minimalautoma-
ten einer Sprache L aufzuschreiben, können wir als Zustände anstatt der Äquivalenz-
klassen von L also auch die Residualsprachen von L verwenden.
Sei nun Σ := {a, d} und r := d(ad | da)∗ | d∗ a∗ | a(a | d)∗ . Wir suchen das kürzeste Wort
w∈ / L(r). Dazu wollen wir den minimalen DFA für L(r) erstellen.
(b) Konstruieren Sie den kanonischen Minimalautomat für L(r). Beschriften Sie hier-
bei einen Zustand [w]≡L(r) nicht mit dessen Äquivalenzklasse, sondern mit einem
regulären Ausdruck für die Residualsprache L(r)w .
(c) Finden Sie alle kürzesten Wörter w ∈
/ L(r).
Lösungsskizze. (a) a∗ | d∗ a(ad | dd), a∗ | (ad | dd), d und ∅.
(b) Der minimale DFA sieht wie folgt aus:
(a|d)∗ a, d
a

d(ad|da)∗ | d∗ a∗ d (ad|da)∗ | d∗ a∗ a d(ad|da)∗ | a∗


| a(a|d)∗
d a d
a
a
a(ad|da)∗ | d∗ a∗ a (ad|da)∗ | a∗ d a(ad|da)∗ (ad|da)∗
d
d d a
d

d∗ a∗ a a∗ d ∅ a d(ad|da)∗
d

a a, d

(c) Die möglichen Wörter sind daad, dada, dadd, und ddad.
Bonusaufgabe H5.6. (Irrational irregulär) 1+3 Bonuspunkte
Sei Σ := {0, ..., 9}. Für Wörter u, v ∈ Σ∗ bezeichnen wir mit (u.v)10 := (u)10 +10−|v| ·(v)10
den Wert eines Dezimalbruchs, es gilt also z.B. (1.75)10 = 74 .
(a) Zeigen Sie, dass L1 := {w ∈ Σ∗ : (0.w)10 < 17 } regulär ist.
(b) Beweisen Sie, dass L2 := {w ∈ Σ∗ : (0.w)10 < √12 } nicht regulär ist, indem sie un-
endlich viele Äquivalenzklassen (oder Residualsprachen, s. Übungsaufgabe Ü5.6)
von ≡L2 identifizieren. (Sie müssen nicht angeben, welche Elemente in den Äqui-
valenzklassen / Residualsprachen enthalten sind.)
Lösungsskizze. (a) In Dezimalschreibweise erhalten wir 17 = 0.142857. Wir sind nun an
den endlichen Dezimalbrüchen interessiert, die kleiner sind, wobei wir die Ziffern von
links nach rechts einlesen. Zur Veranschaulichung ein paar Beispiele: Das Wort 27384
würden wir nicht akzeptieren, da 0.27384 > 0.142857. Dies lässt sich bereits an der
ersten Ziffer erkennen, da 0.2 > 0.142857. Es ist nicht möglich, die Zahl zu verkleinern,
indem weitere Ziffern angehängt werden. Umgekehrt würden wir 1234 akzeptieren, da
0.1234 < 0.142857. Hier lässt sich dies bereits nach der zweiten Ziffer bestimmen, denn
0.129 = 0.13 < 0.142857 – auch wenn nach Lesen von 12 stets die größtmögliche Ziffer
käme, können wir nur Zahlen erreichen, die kleiner als 71 sind.
Nun machen wir diese Überlegung formal. Sei f1 , f2 , ... ∈ Σ eine Folge, sodass f1 f2 ...f6 =
142857 und fi+6 = fi für i ∈ N+ . Die Folge (fi )i∈N+ entspricht also den Ziffern der De-
zimaldarstellung von 71 . Es gilt
1
(0.w)10 < 7
⇔ 10−|w| (w)10 < 0.142857
⇔ (w)10 < (f1 f2 ...f|w| )10 + α
wobei 0 < α < 1 hier eine geeignete Konstante ist. Mit f := f1 f2 ...f|w| erhalten wir

⇔ (w)10 ≤ (f1 f2 ...f|w| )10 = (f )10


⇔ w ≤lex f

Hier bezeichnet ≤lex die lexikographische Sortierung: wir vergleichen zunächst w1 und
f1 . Wenn w1 < f1 , dann ist w <lex f , wenn w1 > f1 , dann ist w >lex f . Ansonsten
gilt w1 = f1 , und wir wiederholen diese Prozedur mit w2 und f2 . (Nach diesem Schema
werden auch Wörter in einem Lexikon sortiert, daher der Name.)
Da sich die Zeichen von f wiederholen, lässt sich leicht ein DFA zeichnen, der diese
Vergleiche ausführt.
7

1 4 2 8 5
f1 f2 f3 f4 f5 f6
0, 1, 2 0, ..., 7
0, ..., 3 0, ..., 4
0 0, ..., 6

0, ..., 9

Nicht gezeichnete Kanten führen zu einem impliziten Fangzustand. In Zustand fi ∈


{f1 , f2 , ..., f6 } wird das eingelesene Zeichen c mit fi verglichen. Falls c < fi , gehen wir
zu einem akzeptieren Zustand, der nicht wieder verlassen werden kann. Für c > fi gehen
wir in einen Fangzustand, und wenn c = fi machen wir weiter mit f(i mod 6)+1 .
(b) Die Idee des Beweises ist, dass nach Einlesen der ersten i Nachkommastellen von
√1 die Residualsprachen alle unterschiedlich sein müssen, da √1 irrational ist. Falls der
2 2
DFA nach Einlesen von i und von j 6= i Nachkommastellen im gleichen Zustand wäre,
können wir folgern, dass die Dezimaldarstellung von √12 periodisch wäre, was aber nicht
der Fall ist. Da der Automat aber nur endlich viele Zustände hat, muss dies irgendwann
geschehen. Es folgt der formale Beweis.
Sei 0.f1 f2 ... := 0.707106781186... die Ziffernfolge der Dezimaldarstellung von √12 .
Sei nun i ∈ N beliebig, und sei f := f1 f2 ...fi . Wir betrachten die Residualsprache Lf2 ;
insbesondere sind wir an dem Supremum von M := {(0.w)10 : w ∈ Lf2 } interessiert. Wir
behaupten nun, dass sup M = 10i · √12 − (f )10 =: x gilt. Wie üblich, erfolgt dieser Beweis
in zwei Schritten: zunächst zeigen wir, dass x eine obere Schranke ist, und dann, dass es
keine kleinere obere Schranke gibt.
• „x ist obere Schranke“: Angenommen, dies wäre nicht der Fall. Dann gibt es ein
w ∈ Lf2 mit (0.w)10 > x. Aus w ∈ Lf2 folgt nach Definition von Residualsprachen
f w ∈ L2 , also gilt

(1) (2)
10i (0.f w)10 = (f )10 + (0.w)10 > (f )10 + 10i · √1
2
− (f )10

Für (1) verwenden wir |f | = i, für (2) (0.w)10 > x. Insgesamt erhalten wir
(0.f w)10 > √12 , was im Widerspruch zu f w ∈ L2 steht.
• „keine kleinere obere Schranke“: Sei nun y < x beliebig. Wir wählen nun ein w ∈ Σ∗
mit y < (0.w)10 < x, d.h. w stellt einen Dezimalbruch zwischen x und y dar. Nun
gilt

10i (0.f w)10 = (f )10 + (0.w)10 < (f )10 + x = √1


2

Also ist f w ∈ L2 und somit w ∈ Lf2 und schließlich (0.w)10 ∈ M . Da y < (0.w)10 ,
ist y keine obere Schranke vom M .
Die Behauptung ist somit bewiesen. Wenn L2 regulär wäre, kann es – wie in Übungs-
aufgabe Ü5.6 gezeigt – nur endliche viele Residualsprachen geben. Obige Ausführungen
0
gelten für ein beliebiges i, wir wählen also i, i0 mit Lf2 = Lf2 , wobei wir f := f1 f2 ...fi
und f 0 := f1 f2 ...fi0 definieren. Weiterhin definieren wir M, M 0 und x, x0 entsprechend.
0
Da Lf2 = Lf2 muss auch M = M 0 und somit x = sup M = sup M 0 = x0 gelten. Die
Aussage x = x0 ist nach Definition von x äquivalent zu
0
10i · √1
2
− (f )10 = 10i · √1
2
− (f 0 )10
0
⇒ (10i − 10i ) · √1
2
= (f )10 − (f 0 )10
0
√ 10i − 10i
⇒ 2= ∈Q
(f )10 − (f 0 )10
0 √
Da 10i , 10i , (f )10 − (f 0 )10 rationale Zahlen sind, müsste 2 es demnach auch sein. Dies
ist aber bekanntermaßen nicht der Fall und L2 kann somit nicht regulär sein sein.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Übungsblatt 6

• Dies ist ein Entwurf. Die finale Version wird am Montag bereitgestellt, sich aber
aller Wahrscheinlichkeit nicht besonders stark unterscheiden.
• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü6.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• nützlich, erzeugend, erreichbar (Symbole)
• Chomsky-Normalform
• Greibach-Normalform
• Pumping-Lemma für kontextfreie Sprachen
• Abschlusseigenschaften für kontextfreie Sprachen

Individualaufgabe Ü6.2. (Automata Tutor: “Contextfree Languages”)


Lösen Sie die Aufgaben Ü6.2 (a–b) auf Automata Tutor.1 Tipp: Für die Aufgabenty-
pen diese Woche können Sie sich zum Üben weitere Aufgaben von AT generieren lassen.
Klicken Sie dafür auf Home > My Autogenerated Problems und wählen Sie den Aufga-
bentyp und gewünschten Schwierigkeitsgrad.
Lösungsskizze.
(a) Zwischenschritte:
S → FR | A | B
S → F SG | A | B
R → SG
S → aSb | A | B A → FA | a
A → FA | a
A → aA | a B → GB | b
B → GB | b
B → bB | b F →a
F →a
G→b
G→b

1
Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in Ü1.2, um sich
richtig zu registrieren.
Lösung: S → F R | F A | a | GB | b
R → SG
A → FA | a
B → GB | b
F →a
G→b
(b) Zwischenschritte:
S → KX | AT
X → DT
S → KDT | AT
K → c | j | ET | D
S → KDT | aT K → c | j | ET | D
D → BY | AZ
K→c|j|E D → BDS | ABB
Y → DS
D → bDS | abb T →
Z → BB
T → E→a|T
T →
E→a|T A→a
E→a|T
B→b
A→a
B→b
S → KX | X | AT | A
S → KX | X | A | A
X → DT | D
X→D|D
K → c | j | ET | D | E | T | 
K→c|j|E|D|E
D → BY | AZ
D → BY | AZ
Y → DS
Y → DS
Z → BB
Z → BB
T →
E→a
E→a|T |
A→a
A→a
B→b
B→b

Lösung: S → KX | BY | AZ | a
X → BY | AZ
K → c | j | a | BY | AZ
D → BY | AZ
Y → DS
Z → BB
E→a
A→a
B→b

Individualaufgabe Ü6.3. (Pumping-Lemma für Kontextfreie Sprachen)


Wir betrachten Pfeil-Sprachen über dem Alphabet Σ = {↑, ↓, ←, →}. Wir interpretieren
dabei ein Wort w ∈ Σ∗ als einen Pfad in einem 2D-Gitter.
(a) Geben Sie eine formale Definition für die folgenden beiden Sprachen an:
(1) Pfade, die in den Ursprung zurückkehren.
(2) Pfade, die „in großer Kurve umkehren“ — beliebig weit nach rechts fahren,
dann noch weiter entweder nach oben oder unten gehen und letztlich wieder
umkehren und noch weiter nach links fahren. Diese Pfade enden dann links
vom Ursprung.
(b) Zeigen Sie mit Hilfe des Pumping-Lemma für kontextfreie Sprachen, dass diese
Sprachen nicht kontextfrei sind
Lösungsskizze. Für diese Aufgabe gibt es eine Video-Lösung.
(a) (1)

La = {w ∈ Σ∗ | |w|↑ = |w|↓ ∧ |w|← = |w|→ }

(2)
[
Lb = L(→i (↑j | ↓j ) ←k )
i<j<k

(b) (1) • Wir nehmen an, dass La kontextfrei ist und führen diese Annahme zum
Widerspruch.
• Sei n ≥ 1 eine Pumping-Lemma-Zahl für die kontextfreie Sprache La .
• Sei zusätzlich z =→n ↑n ←n ↓n , d.h., z ∈ La und |z| ≥ n.
• Gemäß Pumping-Lemma gibt es dann also eine Zerlegung z = uvwxy mit
Wörtern u, v, w, x, y ∈ Σ∗ und den folgenden Eigenschaften:

(1) vx 6=  (2) |vwx| ≤ n (3) ∀i ∈ N0 . uv i wxi y ∈ La

• Aufgrund von (1) unterscheiden wir die folgenden Fälle:

– |vx|→ > 0: Wegen (2) gilt |vx|← = 0. Allerdings gilt auch:

|uv 2 wx2 y|→ = n + |vx|→ > n = |uv 2 wx2 y|←

Dies ist ein Widerspruch zu (3).


– |vx|↑ > 0: Wegen (2) gilt |vx|↓ = 0. Allerdings gilt auch:

|uv 2 wx2 y|↑ = n + |vx|↑ > n = |uv 2 wx2 y|↓

Dies ist ein Widerspruch zu (3).


– |vx|← > 0: Wegen (2) gilt |vx|→ = 0. Allerdings gilt auch:

|uv 2 wx2 y|→ = n < n + |vx|← = |uv 2 wx2 y|←

Dies ist ein Widerspruch zu (3).


– |vx|↓ > 0: Wegen (2) gilt |vx|↑ = 0. Allerdings gilt auch:

|uv 2 wx2 y|↑ = n < n + |vx|↓ = |uv 2 wx2 y|↓

Dies ist ein Widerspruch zu (3).

• Da jeder Fall zu einem Widerspruch führt und die obigen Fälle alle mög-
lichen Zerlegungen abdecken, kann die ursprüngliche Annahme nicht gel-
ten. Also ist La nicht kontextfrei.
(2) • Wir nehmen an, dass Lb kontextfrei ist und führen diese Annahme zum
Widerspruch.
• Sei n ≥ 1 eine Pumping-Lemma-Zahl für die kontextfreie Sprache Lb .
• Dann ist z =→n ↑n+1 ←n+2 , d.h., z ∈ Lb und |z| ≥ n.
• Gemäß Pumping-Lemma gibt es dann also eine Zerlegung z = uvwxy mit
Wörtern u, v, w, x, y ∈ Σ∗ und den folgenden Eigenschaften:

(1) vx 6=  (2) |vwx| ≤ n (3) ∀i ∈ N0 . uv i wxi y ∈ Lb

• Zuerst informell: Da |vwx| ≤ n, kann vwx nur von der Form →∗ ↑∗ oder
↑∗ ←∗ sein. Wegen |vx| > 0 muss mindestens ein Pfeil gepumpt werden.
Gilt |vx|→ > 0, dann können wir die Anzahl der → über die Anzahl der
← pumpen, enthält vx keinen → aber mindestens ein ↑, so kann man
die Anzahl der → auf höchstens n reduzieren, indem man vx entfernt.
Andernfalls besteht vx nur aus ←, dann aus mindestens einem, so dass
man durch Entfernen von vx die Anzahl der ← auf n + 1 oder weniger
reduziert wird, man also höchstens so viele ← wie ↑ hat.
• Formal: Aufgrund von (1) unterscheiden wir die folgenden Fälle:

– |vx|→ > 0: Wegen (2) gilt |vx|← = 0. Allerdings gilt auch:

|uv 3 wx3 y|→ = n + 2|vx|→ ≥ n + 2 = |uv 3 wx3 y|←

Dies ist ein Widerspruch zu (3).


– |vx|→ = 0 und |vx|↑ > 0: Dann gilt:

|uv 0 wx0 y|↑ = n + 1 − |vx|↑ ≤ n = |uv 0 wx0 y|→

Daher ist uv 0 wx0 y ∈


/ Lb , ein Widerspruch zu (3).
– |vx|→ = 0 und |vx|↑ = 0: Dann muss |vx|← > 0 gelten, und es folgt:

|uv 0 wx0 y|← = n + 2 − |vx|← < n + 1 = |uv 0 wx0 y|↑

Daher ist uv 0 wx0 y ∈


/ Lb , ein Widerspruch zu (3).

Da jeder Fall zu einem Widerspruch führt und die obigen Fälle alle mög-
lichen Zerlegungen abdecken, kann die ursprüngliche Annahme nicht gel-
ten. Also ist Lb nicht kontextfrei.
Übung und Nachbereitung

Fokusaufgabe Ü6.4. (Pumping-Lemma für Kontextfreie Sprachen)


Entscheiden Sie ob die folgenden Sprachen kontextfrei sind. Wenn ja, geben Sie eine
Grammatik an und zeigen Sie, dass Ihre Grammatik die Sprache akzeptiert. Wenn nein,
beweisen Sie dies durch einen Widerspruchsbeweis unter Verwendung des Pumping Lem-
mas für kontextfreie Sprachen.
(a) L1 = {an bm cl | n, m, l ∈ N ∧ n > m ∧ n > l}
(b) L2 = {ww | w ∈ {a, b, c}∗ ∧ w = wR }

Übungsaufgabe Ü6.5. (Abschlusseigenschaften)


Gegeben seien die kontextfreien Grammatiken G1 = (V1 , Σ1 , P1 , S1 ) und G2 = (V2 , Σ2 , P2 , S2 ).
Konstruieren Sie aus diesen neue Grammatiken für die Sprachen:
(a) L(G1 ) ∪ L(G2 )
(b) L(G1 )L(G2 )
(c) L∗ (G1 )
Lösungsskizze. Wir nehmen oBdA an, dass V1 ∩ V2 = ∅, weil wir im Zweifel die Nichtter-
minale umbenennen, also z.B. mit 1 und 2 indexieren können. Sei S ∈
/ V1 ∪ V2 ein neues
Nichtterminal.
(a) G∪ = (V1 ∪ V2 ∪ {S}, Σ1 ∪ Σ2 , P1 ∪ P2 ∪ {S → S1 | S2 }, S)
(b) Gkonk = (V1 ∪ V2 ∪ {S}, Σ1 ∪ Σ2 , P1 ∪ P2 ∪ {S → S1 S2 }, S)
(c) Gstern = (V1 ∪ {S}, Σ1 , P1 ∪ {S → S1 S | }, S)

Übungsaufgabe Ü6.6. (Chomsky-Normalform)


Die CFG G bestehe aus folgenden Produktionen über dem Alphabet Σ = {a, b}:

S → ASA | aB A→B|S B→b|ε

(a) Überführen Sie die Grammatik in Chomsky-Normalform.


(b) Erklären Sie in eigenen Worten, wie Sie nach Überführen einer Grammatik in CNF
überprüfen können, dass Sie keine Fehler gemacht haben.2
Lösungsskizze.
(a) Überführung in CNF :

• In jeder Regel (X, γ) mit |γ| ≥ 2 Ersetzen jedes Vorkommen eines Terminals
x durch Xx und Ergänzen der benötigten Produktionen Xx → x:

G0 : S → ASA | Xa B A→B|S B→b|ε Xa → a

Alle rechten Seiten sind jetzt von der Form V ∗ ∪ Σ.

2
Hier geht es nicht um einen formalen Beweis, dass die beiden Sprachen gleich sind, sondern um eine
Strategie, wie Sie bei Aufgaben wie im vorherigen Aufgabenteil Fehler vermeiden.
• Überführen aller rechten Seiten, welche aus mindestens drei Variablen beste-
hen, in quadratische Monome über V . Die einfachste Variante ist dabei, aus
XY Z einfach XXY Z machen, wobei XY Z einfach eine Hilfsvariable ist, die
das Ergebnis von Y Z mittels XY Z → Y Z zugewiesen bekommt. Damit:
G00 : S → AXSA | Xa B A→B|S B→b|ε Xa → a XSA → SA

Erkennen von ε-Regeln :

• E0 := {X ∈ V | (X, ε) ∈ P }
• Ek+1 := Ek ∪ {X ∈ V | ∃(X, γ) ∈ P. γ ∈ Ek∗ } bis Ek+1 = Ek .
E0 = {B} E1 = {B, A} = E2

• Erzeugen zusätzlicher Produktionen, welche alle möglichen Kombinationen


von ε-Produktionen beachten:
S → AXSA S → AXSA | XSA
S → Xa B S → Xa B | Xa
A→B A→B|ε
A→S A→S
B→b B→b
B→ε B→ε
Xa → a Xa → a
XSA → SA XSA → SA | S

• Entfernen aller ε-Produktionen:


S → AXSA | XSA | Xa B | Xa
A→B|S
000
G :B→b
Xa → a
XSA → SA | S

Zusammenziehen von Kettenproduktionen :

• T0 := {(X, Y ) ∈ P ∩ V × V }
• Tk+1 := Tk ∪ {(X, Y ) ∈ V × V | ∃Z ∈ V. (X, Z) ∈ Tk ∧ (Z, Y ) ∈ Tk } bis
Tk+1 = Tk =: T∗ (einfach transitiver Abschluss über durch Kettenproduktio-
nen gegebener Kantenrelation auf V ).
T0 = {(S, XSA ), (S, Xa ), (A, B), (A, S), (XSA , S)}
T1 = T0 ∪ {(S, S), (A, XSA ), (A, Xa ), (XSA , XSA ), (XSA , Xa )} = T2

• Dann (1) Entfernen aller Kettenproduktion und (2) anschließend, falls (X, Y ) ∈
T∗ , füge (X, γ) zu P hinzu für jede Regel (Y, γ) ∈ P .
G0000 : S → AXSA | SA | Xa B | a
A → b | AXSA | SA | Xa B | a
B→b
Xa → a
XSA → SA | AXSA | SA | Xa B | a
(b) • Prüfen, dass alle Produktionen die Form A → BC oder A → a haben.
• Insbesondere darf  nur vom Startsymbol (oder gar nicht, wie hier) produziert
werden.
• Für einige kleine/leichte Worte überprüfen, dass Sie von beiden Grammatiken
(nicht) erzeugt werden können.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 6

• Diese Woche werden alle Aufgaben korrigiert.


• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.

Aufgabe H6.1. (Xuby) 1+1+1+1 Punkte


Sei Σ := {a, b}, und sei G = (V, Σ, P, S) eine kontextfreie Grammatik mit den Produk-
tionen

S → XU b | Y Y → ab | Y Y
X → U bY | U U U → aU | ε

Konvertieren Sie G mit dem aus der Vorlesung bekannten Verfahren schrittweise zur
Chomsky-Normalform, indem Sie G so anpassen, dass für jede Produktion α → β fol-
gende zusätzlichen Einschränkungen gelten:
(a) β ∈ Σ ∪ V ∗ (b) |β| ≤ 2 (c) β 6= ε (d) β ∈
/V
0 0
Sie sollen also eine Grammatik G angeben, die (a) und L(G ) = L(G) erfüllt, eine
Grammatik G00 , die (a), (b) und L(G00 ) = L(G) erfüllt, usw.
Lösungsskizze.
(a) Wir fügen A → a und B → b hinzu, und ersetzten a und b in den anderen Pro-
duktionen jeweils durch A und B.

S → XUB | Y U → AU | ε
X → UBY | U U A→a
Y → AB | Y Y B→b

(b) Wir passen jeweils die erste Produktion von S und von X an.

S → XS1 | Y Y → AB | Y Y
S1 → UB U → AU | ε
X → U X1 | U U A→a
X1 → BY B→b

(c) Zuerst betrachten wir U → ε. Damit können wir folgende Ableitungen erzeugen:

S1 → B
X→U
X→ε
X → X1
U →A
Wir erhalten also insbesondere X → ε, hiermit erzeugen wir

S → S1

Nach Entfernen der ε-Transitionen ergibt sich also

S → XS1 | Y | S1 Y → AB | Y Y
S1 → UB | B U → AU | A
X → U X1 | U U | U | X1 A→a
X1 → BY B→b

(d) Nun entfernen wir die Kettenproduktionen. Aus den Kettenproduktionen S → Y ,


S → S1 , S1 → B, X → U , X → X1 und U → A erhalten wir

S → AB | Y Y | UB | B
S1 → b
X → AU | A | BY
U →a

Des weiteren müssen wir S → S1 und X → U erneut anwenden (da S1 und U


zusätzliche Produktionen haben), und die neuen Kettenproduktionen S → B und
X → A berücksichtigen. Letztere sind redundant und nur der Anschaulichkeit
halber gezeigt – es ist nicht möglich, eine Produktion mehrfach zu besitzen.

X→a|a
S→b|b

Schließlich entfernen wir die nun unnötigen Kettenproduktionen.

S → XS1 | AB | Y Y | UB | b Y → AB | Y Y
S1 → UB | b U → AU | a
X → U X1 | U U | AU | BY | a A→a
X1 → BY B→b

Aufgabe H6.2. (Matriririkelnununummern) 2+2 Punkte


Eines Morgens erhalten Sie einen panischen Anruf von einem alten Bekannten1 , dem
Rektor der Technischen Hochschule Estlingen-Oberfeld. Nachdem eine Horde wütender
Studierender das Verwaltungsgebäude stürmte und die Wiedereinführung der traditio-
nellen Estlinger Matrikelnummern verlangte, hat sich der Rektor nun im Keller ver-
barrikadiert und sucht verzweifelt nach Lösungen, um diese automatisch verarbeiten zu
können. In einem alten Kabinett hat er einen Bausatz für Automaten gefunden, mit
denen man anscheinend beliebige kontextfreie Sprachen akzeptieren kann. Sind diese
„Kellerautomaten“ vielleicht die Lösung?
(a) Sei Σ := {0, ..., 9}. Zeigen Sie, dass die Sprache L := {#}{w ∈ Σ∗ :
P
i≥1 wi prim}
nicht kontextfrei ist.
1
Siehe H3.2
Nachdem sich seine letzte Hoffnung in Luft aufgelöst hat, beschließt der Rektor, durch
einen der vielen unterirdischen Tunnel zu fliehen. Diese werden leider von der Bergbau-
fakultät kontrolliert, und können nur mit bestimmten Klopfzeichen betreten werden, die
einem komplizierten System folgen, von dem der Rektor schlicht überfordert ist. Aber
vielleicht kann er sich ja einen Kellerautomaten dafür bauen...
(b) Zeigen oder widerlegen Sie: L := {ai bj ck : i, j, k ∈ N und j 2 ≤ ik} ist kontextfrei.
Lösungsskizze. (a) Wir wenden das Pumping-Lemma für kontextfreie Sprachen an. Sei
also n ∈ N beliebig. Wir wählen das Wort z := #1p , wobei p ≥ n eine Primzahl
ist. Nun erhalten wir eine Zerlegung z = uvwxy. Falls # ∈ v oder # ∈ x gilt, ist
uv 0 wx0 y = uwy ∈
/ L, da uwy nicht mit einer Raute beginnt. Ansonsten enthalten v und
x nur das Zeichen 1, somit gilt vx = 1k für k := |vx|. Sei nun i := 1 + p. Wir erhalten
uv i wxi y = #1p+kp
Da aber p + kp = p(k + 1) und k > 0 nach den Eigenschaften der Zerlegung gilt, besitzt
p(k + 1) mindestens zwei Teiler (p und k + 1), ist keine Primzahl, und uv i wxi y ∈/ L.
In beiden Fällen haben wir ein i gefunden, sodass uv i wxi y ∈
/ L. Damit gilt die Eigen-
schaft des PL nicht, und L kann nicht kontextfrei sein.
(b) L ist nicht kontextfrei. Wir wenden wieder das Pumping-Lemma für kontextfreie
Sprachen an und fixieren ein beliebiges n. Als Wort wählen wir w := an bn cn . Da n2 = nn
gilt w ∈ L. Nun erhalten wir eine Zerlegung w = uvwxy. Da |vwx| ≤ n, gilt entweder
a∈ / vx oder c ∈/ vx. Wir betrachten den Fall c ∈ / vx, der Fall a ∈ / vx lässt sich dann
analog beweisen. Nun betrachten wir folgende Teilfälle:
1. ab ∈ v oder ab ∈ x: Diese Zerlegung erlaubt es uns, die Struktur des Wortes zu
/ L(a∗ b∗ c∗ ) und somit uv 2 wx2 y ∈
zerstören. Es gilt insbesondere uv 2 wx2 y ∈ / L.
2. b ∈
/ vx: Aufpumpen würde einfach die Anzahl a erhöhen, aber durch abpumpen
kommen wir unter die Schranke. Sei also z 0 := uv 0 wx0 y. Somit gilt |z 0 |a = n−|vx| <
n und |z 0 |b = |z 0 |c = n. Da aber n2 > n(n − |vx|), ergibt sich z 0 ∈
/ L.
3. a ∈
/ vx: Dieser Fall ist ähnlich zum vorherigen, nur dass Aufpumpen die Anzahl b
erhöht. Sei z 0 := uv 2 wx2 y. Somit gilt |z 0 |b = n + |vx| > n und |z 0 |a = |z 0 |c = n. Da
aber (n + |vx|)2 > n · n, ergibt sich z 0 ∈/ L.
4. v = ar , x = bs mit r, s ≥ 1: Nun erhöht Aufpumpen sowohl die Anzahl an a
als auch die Anzahl b. Letztere zählt jedoch quadratisch, wir müssen also nur oft
genug pumpen. Sei i := 1 + rn und z 0 := uv i wxi y. Wir erhalten |z 0 |a = n + r(rn),
|z 0 |b = n + s(rn) und |z 0 |c = n. Es gilt
2
|z 0 |b − |z 0 |a |z 0 |c = (n + srn)2 − (n + r2 n)n = n2 (1 + sr)2 − (1 + r2 )


Nun verwenden wir r, s ≥ 1 und erhalten


(1 + sr)2 − (1 + r2 ) = 1 + 2sr + s2 r2 − 1 − r2 = 2sr + (s2 − 1)r2 > 0
2
Damit gilt |z 0 |b > |z 0 |a |z 0 |c , und z 0 ∈
/ L.

Aufgabe H6.3. ((()((())()))))) 3+1 Punkte


S-Expressions sind eine Notation für verschachtelte Listen. Für unsere Zwecke verwenden
wir das Alphabet Σ := {a, ..., z, 0, ..., 9}, und ein Atom ist ein Wort in Σ∗ . Eine S-
Expression ist entweder ein Atom, oder eine Liste (w1 w2 ... wn ), wobei w1 , ..., wn S-
Expressions sind. Beispiele:
theo
(theo 2021)
((1) (2 3) (4 5) () (6))

Wir definieren uns nun eine Programmiersprache, die wir theoLISP nennen, aus folgenden
Komponenten.
• Arithmetische Operationen:

(add x y) → x + y
(sub x y) → x − y
(mul x y) → xy

• Bedingungen und Schleifen:

(if x y z) Wenn x > 0, wird y ausgeführt, sonst z


(while x y) Solange x > 0, wird y ausgeführt.

• Variablenzuweisungen:

(set x y) Setzt die Variable mit Namen x auf den Wert von y

Ein Programm ist eine Liste an Befehlen, die Ausgabe eines Programms ist der Wert
der Variablen result. Alle Variablen sind mit 0 initialisiert, und können Werte in Z
annehmen.
Beispielprogramme mit Ihren Ausgaben:

((set x 42)
(set result (sub x 2021)))

→ −1979

((set x 1)
(while (sub 16 i) (
(set x (mul x 2))
(set i (add i 1))))
(set result x))

→ 65536

((set a 247) (set b 299)


(while a (
(set a (sub b a))
(if (sub a b) (
(set t a) (set a b) (set b t))
() )))
(set result b))

→ 13

Folgende sechs Programme sind nicht gültig:


((print 42))
((set 5 7))
(set result 42)
((if (while x ()) () ()))
((set result (if x 16 42)))
((if ((add 20 21)) () ()))

Insbesondere erwartet z.B. set als erstes Argument einen Variablennamen, keine Zahl;
und if als erstes Argument eine Variable, Zahl, oder arithmetische Operation, und keine
Anweisung oder Liste an Anweisungen.
(a) Konstruieren Sie eine kontextfreie Grammatik, die genau die theoLISP Programme
erzeugt. Es genügt, wenn Sie nur die Programme erzeugen, die keine unnötigen
Leerzeichen oder Zeilenumbrüche enthalten. Das erste Beispielprogramm wäre also

((set x 42) (set result (sub x 2021))

Sie können Leerzeichen mit . notieren.


(b) Geben Sie einen Syntaxbaum Ihrer Grammatik für folgendes Programm an:

((while x ()) (set x (add 42 7)))

Lösungsskizze.
(a)

S → ( hBefehlei ) | ( )
hBefehlei → ( hBefehli ) . hBefehlei | ( hBefehli )
hBefehli → hIfi | hWhilei | hSeti
hTermi → ( hArithi ) | hZahli | hVari
hArithi → hOpi . hTermi . hTermi
hIfi → if . hTermi . S . S
hWhilei → while . hTermi . S
hSeti → set . hVari . hTermi
hVari → hAlphaihVari | hAlphai
hZahli → hZifferihZahli | hZifferi
hOpi → add | mul | sub
hAlphai → a | ... | z
hZifferi → 0 | ... | 9

(b)
S

( hBefehlei )

( hBefehli ) . hBefehlei

hWhilei ( hBefehli )

while . hTermi . S hSeti

hVari () set . hVari . hTermi

hAlphai hAlphai ( hArithi )

x x hOpi . hTermi . hTermi

add hZahli hZahli

hZifferi hZahli hZifferi

4 hZifferi 7

2
Bonusaufgabe H6.4. (S-Parser) 1+1+1 Bonuspunkte
Bei Ausgrabungen im antiken Rom findet der Archäologe Jasper Vazarie eine kuriose
Marmortafel mit folgender Beschriftung:

((set n 339) (while (sub 1 result) ((set nn (sub n 1)) (while (


sub 1 flag) ((set dd 0) (while (sub nn 1) ((set dd (add dd 1)) (
set nn (sub nn 2)))) (if nn ((set flag 1)) ((set nn dd) (set d dd
) (set r (add r 1)))))) (set k 4) (while k ((set a (mul (add a 1)
89)) (while ((sub a 112)) ((set a (sub a 113)))) (set x 1) (set
set dd d) (while dd ((set x (mul x a)) (while (sub x (sub n 1)) (
(set x (sub x n)))) (set dd (sub dd 1)))) (set xx (mul (sub x 1)
(sub x (sub n 1)))) (set flag 0) (if (mul xx xx) ((set rr (sub r
1)) (while rr ((set x (mul x x)) (while (sub x (sub n 1)) ((set x
(sub x n)))) (if (sub (sub n 1) x) () ((set flag 1) (set rr 0)))
(set rr (sub rr 1))))) ((set flag 1))) (if (sub 1 flag) ((set k 0
)) ()) (set k (sub k 1)))) (if (add k 1) ((set result n)) ((set n
(add n 2))))))))

Jasper vermutet, dass es sich hierbei um ein theoLISP Programm handelt, da dies
eine beliebte Programmiersprache in der damaligen hispanischen Provinz Gallaecia war.
Die Tafel stammt aus dem Jahre 339 n. Chr. und wurde, so die Überlieferung, dazu
verwendet, die Geburt des nächsten großen Kaisers vorherzusagen. Leider litt auch die
Marmortafel unter dem Zahn der Zeit und es befinden sich einige Fehler im Programm.
Helfen Sie Jasper, und korrigieren das Programm! Implementieren Sie hierzu einen
Recogniser, der entscheidet, ob ein Wort ein syntaktisch korrektes theoLISP Programm
ist, wie in Aufgabe H6.3 definiert. (Sie dürfen annehmen, dass das Programm keine
unnötigen Leerzeichen und Zeilenumbrüche enthält.)
Hinweise: Verwenden Sie zur Lösung dieser Aufgabe einen Computer. Beschreiben
Sie bitte Ihren Ansatz in natürlicher Sprache und illustrieren die wesentlichen Schritte
Ihrer Lösung mit geeigneten Codefragmenten. Sie können (müssen aber nicht), Ihrer Lö-
sung Ihren vollständigen Programmcode beifügen, jedoch steht es den Korrektoren frei,
diesen zu ignorieren. Beschränken Sie sich in Ihrer Implementierung auf grundlegende
Funktionalitäten verbreiteter Programmiersprachen. Insbesondere ist die Verwendung
von Library-Funktionen für reguläre Ausdrücke oder andere Parser-Generatoren nicht
gestattet.
Obiges Programm hat genau drei Fehler. Um Ihr Programm zu implementieren, mag
es sinnvoll sein, Ihre Lösung zu Aufgabe H6.3(a) zu verwenden, und für jede Variable V
eine Funktion zu schreiben, die (rekursiv) ein maximales Präfix aus LG (V ) einliest. Zum
Finden der Syntaxfehler bietet es sich an, dass Ihr Recogniser zusätzliche Informationen
ausgibt, wenn er einen Fehler feststellt.
Die Beispielprogramme auf diesem Blatt finden Sie unter diesem Link. Im Ordner
nospace finden Sie jeweils Versionen ohne unnötige Leerzeichen und Zeilenumbrüche.
Die syntaktisch korrekten Beispiele beginnen mit einem a, die inkorrekten Beispiele mit
einem b, und obiges Programm heißt c1.
Lösungsskizze. (Der Code lässt sich unter diesem Link herunterladen.) Zuerst lesen wir
das Programm ein und entfernen unnötige Leerzeichen und Zeilenumbrüche.

import sys
with open(sys.argv[1], ’r’) as f: code_raw = f.read()

code = ’’; last = None


for c in code_raw:
if c.isspace(): c = ’ ’

if last == ’(’ and c == ’ ’: continue


elif last == ’ ’ and c == ’ ’: continue
elif last == ’ ’ and c == ’)’:
code = code[:-1] + c
last = c
else:
code += c
last = c
while code[-1] == ’ ’: code = code[:-1]

(Dies ist nicht notwendig.)


Die Variable code enthält den Code, den wir noch einlesen müssen. Am Anfang ist dies
dementsprechend das gesamte Programm. Für das eigentliche Parsen implementieren
wir zwei Hilfsfunktionen, eat und eat_maybe. Die Idee ist, dass z.B. eat(’while’) die
Zeichenkette while vom Anfang des verbleibenden Programms einliest, und einen Fehler
ausgibt, falls dies nicht möglich ist. Die Prozedur eat_maybe ist ähnlich, aber, statt einen
Fehler zu werfen, gibt sie zurück, ob die Operation erfolgreich war.

def eat_maybe(s):
global code
if code.startswith(s):
code = code[len(s):]
return True
else:
return False

def eat(s): assert eat_maybe(s)

Nun lassen sich die Produktionen der Grammatik ohne viel Aufwand umsetzen.

S → ( hBefehlei ) | ( )

def S():
eat(’(’)
if not eat_maybe(’)’):
Befehle()
eat(’)’)

Für S gibt es zwei mögliche Produktionen, die beider mit ( beginnen. Also lesen
wir die öffnende Klammer zuerst ein, und entscheiden danach, welche der Produktio-
nen wir ausführen. Falls direkt danach eine schließende Klammer kommt, wird die mit
eat_maybe(’)’) eingelesen und wir sind fertig, ansonsten lesen wir hBefehlei und da-
nach die schließende Klammer ein. Die anderen Produktionen werden auf ähnliche Art
implementiert.
hBefehlei → ( hBefehli ) . hBefehlei | ( hBefehli )

def Befehle():
eat(’(’); Befehl(); eat(’)’)
if eat_maybe(’ ’): Befehle()

Interessant ist lediglich, wie wir entscheiden, welche Produktion wir ausführen. Hierfür
reicht es allerdings immer, sich das nächste Zeichen anzuschauen. Bei hBefehli, hTermi
und hOpi wird dies besonders deutlich:

hBefehli → hIfi | hWhilei | hSeti

def Befehl():
if code[0] == ’i’: If()
elif code[0] == ’w’: While()
elif code[0] == ’s’: Set()
else: assert False

hTermi → ( hArithi ) | hZahli | hVari

def Term():
if eat_maybe(’(’): Arith(); eat(’)’)
elif code[0].isdigit(): Zahl()
elif code[0].isalpha(): Var()
else: assert False

hOpi → add | mul | sub

def Op():
if code[0] == ’a’: eat(’add’)
elif code[0] == ’m’: eat(’mul’)
elif code[0] == ’s’: eat(’sub’)
else: assert False

Die Nichtterminale hArithi, hIfi, hWhilei und hSeti sind leicht zu implementieren, da
es hierfür nur jeweils eine Produktion gibt.

hArithi → hOpi . hTermi . hTermi


hIfi → if . hTermi . S . S
hWhilei → while . hTermi . S
hSeti → set . hVari . hTermi

def Arith(): Op(); eat(’ ’); Term(); eat(’ ’); Term()


def If(): eat(’if ’); Term(); eat(’ ’); S(); eat(’ ’); S()
def While(): eat(’while ’); Term(); eat(’ ’); S()
def Set(): eat(’set ’); Var(); eat(’ ’); Term()

(Beachten Sie, dass eat(’if ’) nach dem if auch ein Leerzeichen liest.) Schließlich
verbleiben noch hVari und hZahli, wobei wir hier leicht von der Grammatik abweichen,
und diese direkt implementieren.

hVari → hAlphaihVari | hAlphai


hZahli → hZifferihZahli | hZifferi
hAlphai → a | ... | z
hZifferi → 0 | ... | 9

def Var():
assert code[0].isalpha()
while code[0].isalpha(): eat(code[0])
def Zahl():
assert code[0].isdigit()
while code[0].isdigit(): eat(code[0])

Damit ist die Grammatik implementiert. Um einen Recogniser zu erhalten, müssen


wir nun S() aufrufen und danach sicherstellen, dass auch tatsächlich der gesamte Code
eingelesen wurde.

try:
S()
assert len(code) == 0
print(’Correct’)
except:
print(’Incorrect’)
sys.exit(1)

Nun haben wir bereits einen funktionierenden Recogniser. Damit es leichter wird,
die Fehler zu finden, erweitern wir unseren Recogniser, sodass er ein maximales Präfix
angibt, das zu einem korrekten Programm erweitert werden kann. Beispiel:

((set result (if x 16 42)))

Die Zeichen bis zum if können zu einem korrekten Programm erweitert werden, etwa

((set result (add 1 1)))

Unseren Recogniser so zu erweitern ist leicht – wir speichern die Zeichen, die wir bereits
eingelesen haben, und geben diese dann aus. Hierzu passen wir die eat_maybe Prozedur
an:

parsed = ’’
def eat_maybe(s):
global code
global parsed
if code.startswith(s):
parsed += s
code = code[len(s):]
return True
else:
return False
Wenn es einen Fehler gibt, können wir nun den Inhalt von parsed ausgeben.

try:
S()
assert len(code) == 0
print(’Correct’)
except:
print(’Incorrect’)
print(parsed)
sys.exit(1)

Nun lassen sich die Fehler leicht finden und beheben.

...
89)) (while ((sub a 112)) ((set a (sub a 113)))) (set x 1) (set
set dd d) (while dd ((set x (mul x a)) (while (sub x (sub n 1)) (
...
(add n 2))))))))

• In Zeile 5 müssen bei ((sub a 112)) die äußeren Klammern entfernt werden
• Am Ende von Zeile 5 beginnt (set set dd d) – hier sollte nur ein set sein
• Am Ende des Programms befindet sich eine schließende Klammer zu viel
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Übungsblatt 7

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Notation von PDA-Regeln: Anstatt der in den Folien verwendeten Schreibweise


a
(q, Y Z) ∈ δ(p, a, X) für die Ersetzungsregeln eines PDA kann man alternativ pX −


qY Z schreiben wobei p, q ∈ Q, X ∈ Γ, Y Z ∈ Γ , a ∈ Σ ∪ {ε}.
Beispiel: Den PDA mit δ:

δ(p, a, Z0 ) = {(p, XZ0 )} δ(p, a, X) = {(p, XX)}


δ(p, b, X) = {(p, ε)} δ(p, ε, Z0 ) = {(p, ε)}

schreibt man alternativ:


a a b ε
pZ0 −
→ pXZ0 pX −
→ pXX pX →
− p pZ0 →
− p

oder man stellt diesen als Graph mit Knotenmenge Q dar, wobei die Kante (p, q)
dann mit “a, X/Y Z” beschriftet ist (siehe Hopcroft et al., Introduction to Automata
Theory, Kapitel 6 ):

a, Z0 /XZ0

b, X/ε p a, X/XX

ε, Z0 /ε

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü7.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• nützlich, erzeugend, erreichbar (Symbole)
• CYK-Algorithmus
• Kellerautomat (PDA)
• Unterschied zwischen L (A) und LF (A) für einen PDA A
• deterministischer Kellerautomat (DPDA)
• deterministische kontextfreie Sprache (DCFL)
Individualaufgabe Ü7.2. (Kahoot)
Falls Sie das Kahoot aus der Vorlesung verpasst haben: Spielen Sie es jetzt! Link1

Individualaufgabe Ü7.3. (Automata Tutor: “CYK & PDAs”)


Lösen Sie die Aufgaben Ü7.3 (a–f) auf Automata Tutor.2 Achtung: Für die Übungsauf-
gaben haben Sie beliebig viele Versuche. Für die Aufgaben in Hausaufgabe H7.1 nicht!
Bei den PDA construction Aufgaben darf ihr konstruierter PDA nicht zu viele Zustän-
de haben (siehe Aufgabenstellung). Wenn Sie einen ε-Übergang angeben wollen, geben
Sie statt ε bitte E ein (siehe Hinweisbox über Canvas). Die Simulation bei PDAs ist
deaktiviert. Bitte wundern Sie sich nicht, dass bei einem Klick auf Start Simulation
nichts passiert. Tipp: Für den Aufgabentyp “CYK” können Sie sich zum Üben weitere
Aufgaben von AT generieren lassen. Klicken Sie dafür auf Home > My Autogenerated
Problems und wählen Sie den Aufgabentyp und gewünschten Schwierigkeitsgrad.
Lösungsskizze.

1,5 S
1,4 S 2,5 S
1,3 2,4 S 3,5
(a)
1,2 2,3 L 3,4 4,5

1,1 S 2,2 A 3,3 S 4,4 B 5,5 S


x a x b x

1,4 O
1,3 O 2,4 Y
(b) 1,2 O, U 2,3 Y 3,4 S
1,1 O, K, U 2,2 O, K, U 3,3 S 4,4 S
d d v v
(c) , bb, aababbab ∈ L und abaab, bbb, aaabaaa 6∈ L
(d) abaababb, abba, ababbaaaba ∈ L und baa, aab, bbbbb 6∈ L
a, Z0 /AAZ0 b, A/ε
b, A/ε
a, A/AAA q p
ε,
Z ε, Z0 /ε
0/
ε
r
(e)

1
Falls der Link nicht mehr funktioniert, teilen Sie dies bitte der Übungsleitung mit. Die Teilnehmeran-
zahl ist leider auf 2000 begrenzt.
2
Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in Ü1.2, um sich
richtig zu registrieren.
(, Z0 /XZ0

), X/ε q (, X/XX

ε, Z0 /ε
(f)

Individualaufgabe Ü7.4. (Mein erster PDA)


Zeichnen Sie einen PDA, der die Sprache L = ai bi | i ≥ 0 erkennt.


Lösungsskizze. Idee: Für jedes a legen wir ein X auf den Stack und überprüfe dann, ob
die die Anzahl von bs mit der Anzahl an X auf dem Stack übereinstimmt.
Ein PDA A der mit leerem Keller die Sprache L akzeptiert (also L (A) = L) ist:

a, Z0 /XZ0

b, X/ε
q p b, X/ε
ε, Z0 /ε

a, X/XX ε, Z0 /ε

Übung und Nachbereitung

Fokusaufgabe Ü7.5. (PDAs)


Geben Sie für die folgenden Sprachen jeweils einen Kellerautomaten Ai in einer der
oben aufgeführten Darstellungsarten an, so dass Li = L(Ai ). Der Automat soll mit
leerem Stack akzeptieren. Geben Sie dann zusätzlich für jeden Automaten jeweils ein
nicht-leeres Wort w mit akzeptierendem Lauf an.
(a) L1 = {an b3n | n ≥ 0}
(b) L2 = {an bm ∈ {a, b}∗ | n ≤ m ≤ 2n}
(c) L3 = {w ∈ {a, b}∗ | 2 · |w|a = 3 · |w|b }

Übungsaufgabe Ü7.6. (CFG bereinigen)


Die CFG G bestehe aus folgenden Produktionen über dem Alphabet Σ = {a, b}:

S → ASA | aB
A → B | S | CB
B → b|ε
C → aC
D → aSCb | a

(a) Beschreiben Sie in eigenen Worten, wann ein Nichtterminal nützlich in einer Gram-
matik ist.
(b) Reduzieren Sie die Grammatik G auf die nützlichen Nichtterminale.
Lösungsskizze.
(a) Ein Nichtterminal ist nützlich, wenn es eine Ableitung vom Startsymbol zu einem
Wort (also einer Folge von Terminalen) gibt, in der das Nichtterminal verwendet
wird. Nützliche Symbole sind stets erzeugend und erreichbar. Erzeugend bedeu-
tet, dass von dem Nichtterminal ausgehend ein Wort produziert werden kann; er-
reichbar bedeutet, dass vom Startsymbol ausgehend das Nichtterminal produziert
werden kann. Der Begriff ist relevant, da ähnlich wie bei Automaten angenommen
wird, dass alle Zustände erreichbar sind, man bei Grammatiken annehmen möch-
te, dass Sie nur nützliche Nichtterminale enthalten. Deswegen benötigt man eine
klare Definition und eine Möglichkeit, eine Grammatik, die die Anforderung nicht
erfüllt, in eine mit nur nützlichen Nichtterminalen zu überführen.
(b) Erzeugende Variablen :

• Intuition: C kann kein Wort produzieren, da eine Ableitung, die ein C enthält,
niemals “terminiert”, also nie nur Terminale enthält.
• Formal bauen wir iterativ die Menge aller Nichtterminale, die eine Möglichkeit
haben, ein Wort aus nur Terminalen zu erzeugen.
• P0 := {X | ∃(X, Γ) ∈ P. Γ ∈ Σ∗ }
• Pk+1 := Pk ∪ {X ∈ V | ∃(X, Γ) ∈ P. ∀Y ∈ V. (|Γ|Y > 0 → Y ∈ Pk )} bis
Pk+1 = Pk .
• Führt auf:

P0 = {B, D} P1 = {B, D, A, S} = P2

Damit kann C samt C → aC, A → CB und D → aSCb entfernt werden.

Erreichbare Variablen :

• Intuition: D kann von S aus nicht erreicht werden.


• Formal bauen wir die Menge aller Nichtterminale, die von S aus erzeugt wer-
den können.
• R0 := {S}
• Rk+1 := Rk ∪ {Y ∈ V | ∃(X, Γ) ∈ P. X ∈ Rk ∧ |Γ|Y > 0} bis Rk+1 = Rk .
• Führt auf:

R0 = {S} R1 = {S, A, B} = R2

Damit kann D und D → a entfernt werden.

Die reduzierte (bereinigte) Grammatik ist also:

S → ASA | aB A→B|S B→b|ε

Hinweis: Diese Grammatik haben wir in Aufgabe Ü6.6 in CNF überführt.


Übungsaufgabe Ü7.7. (CYK )
(a) Beschreiben Sie in eigenen Worten, wie die Indizes in einer CYK-Tabelle zu ver-
stehen sind.
(b) Beschreiben Sie in eigenen Worten, wie man den Inhalt eines Feldes in der CYK-
Tabelle berechnet.
(c) Wir betrachten die Grammatik G = ({S, T, U, A, B, C}, {a, b, c}, P, S) in CNF mit
den folgenden Produktionen P :

S → T S | CT | a A→a
T → AU | T T | c B→b
U → SB | AB C→c

Bestimmen Sie mit dem CYK-Algorithmus, ob ccaab ∈ L(G) und aabcc ∈ L(G).
Geben Sie dabei auch die berechneten Tabellen an.
Lösungsskizze.
(a) Das Feld Fx,y beinhaltet alle Nichtterminale, die das Teilwort vom x-ten Terminal
bis zum y-ten Terminal erzeugen können. (Wir fangen hier mit 1 an zu zählen.)
Beispiel: Wenn das Wort w = abaaab ist, dann beinhaltet F2,4 die Terminale, die
baa erzeugen.
(b) Für Felder Fx,x (in der untersten Zeile) sucht man nach allen Nichtterminalen
X, die eine Produktion X → a haben wobei a das x-te Zeichen des betrachteten
Wortes ist.
Für Felder Fx,y betrachtet man alle Kombinationen aus Feldern Fx,x × Fx+1,y ,
Fx,x+1 × Fx+2,y und so weiter.3 Wenn (A, B) in einer der Mengen vorkommt und
es eine Produktion X → AB gibt, dann fügt man X zum Feld Fx,y hinzu.
(c) Nach dem CYK-Algorithmus ergeben sich folgende Berechnungstabellen:

1,5 S, T
1,4 2,5 S, T
1,3 S 2,4 3,5 T
1,2 S, T 2,3 S 3,4 4,5 U
1,1 C, T 2,2 C, T 3,3 S, A 4,4 S, A 5,5 B
c c a a b

1,5 S, T
1,4 T 2,5

1,3 T 2,4 3,5

1,2 2,3 U 3,4 4,5 S, T


1,1 S, A 2,2 S, A 3,3 B 4,4 C, T 5,5 C, T
a a b c c
3
Tipp: Man legt seinen linken Zeigefinger auf das Feld Fx,x und seinen rechten Zeigefinger auf Fx+1,y .
Der linke Finger geht immer ein Feld höher, der rechte immer ein Feld nach unten rechts.
Also ist ccaab ∈ L(G) und aabcc ∈ L(G).

Übungsaufgabe Ü7.8. (PDA Einschränkungen)


(a) Wir beschränken die Größe des Kelleralphabets Γ von PDAs und zeigen, dass jede
kontextfreie Sprache von einem PDA mit |Γ| = 2 erkannt werden kann. Skizzieren
Sie hierzu eine allgemeine Übersetzung von einem PDA mit |Γ| > 2 zu einem PDA
mit |Γ0 | = 2, so dass beide Automaten die gleiche Sprache erkennen.
(b) Wir beschränken die Kellerhöhe von PDAs auf maximal k Kellerzeichen und nen-
nen diese PDAs k-bounded-Stack- PDA. Insbesonders kann ein solcher PDA keine
PUSH-Operationen ausführen sollten danach mehr als k Symbole auf dem Stack
liegen. Zeigen Sie, dass k-bounded-Stack- PDA genau die regulären Sprachen er-
kennen, indem Sie eine allgemeine Übersetzung von PDAs zu ε− NFA angeben.
Lösungsskizze.
(a) Wir encodieren binär die Stacksymbole Γ mit Hilfe von Γ0 . Sei k eine passende
Konstante, so dass |Γ| ≤ 2k . Der neue PDA liest immer genau k Zeichen über
eine Reihe von Hilfszuständen und rekonstruiert somit X ∈ Γ und führt dann die
passende Transition aus. Hierauf werden wieder mit einer Reihe von Hilfszuständen
die neuen Stacksymbole auf den Stack gepusht.
(b) Da der Stack beschränkt ist, kann der ε− NFA den Stack in den Zuständen
encodieren: Q0 = Q × ki=0 Γi und dementsprechend die Transitionen simulieren.
S

Falls wir Lε (M ) betrachten, definieren wir F 0 = {(q, ε) | q ∈ Q}. Falls wir LF (M )


betrachten, definieren wir F 0 = {(q, α) ∈ Q0 | q ∈ F }.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Hausaufgabenblatt 7

• Diese Woche werden alle Aufgaben korrigiert.


• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.

Aufgabe H7.1. (AT ) 0.5+0.5+0.5+0.5+1+1 Punkte


Diese Hausaufgabe wird mit Automata Tutor bearbeitet und abgegeben. Falls Sie es
noch nicht bereits gemacht haben, folgen Sie den Schritten in Ü1.2, um ein Konto zu
erstellen. Achten Sie darauf, dass Sie sich, wie dort beschrieben, mit Ihrer TUM-Kennung
anmelden. Ansonsten können wir Ihnen die Punkte nicht gutschreiben.
Bearbeiten Sie die Hausaufgaben H7.1 (a–f). Achtung: Während Sie für die Aufga-
ben aus dem Übungsblatt beliebig viele Versuche hatten, haben Sie für jede Hausaufgabe
nur 5 Versuche. Sie bekommen nur dann einen Punkt, wenn Sie die Aufgabe nach 5 Ver-
suchen vollständig (also mit 10/10 Punkten) gelöst haben. Bei den PDA construction
Aufgaben darf ihr konstruierter PDA nicht zu viele Zustände haben (siehe Aufgabenstel-
lung). Wenn Sie einen ε-Übergang angeben wollen, geben Sie statt ε bitte E ein (siehe
Hinweisbox über Canvas). Die Simulation bei PDAs ist deaktiviert. Bitte wundern Sie
sich nicht, dass bei einem Klick auf Start Simulation nichts passiert.
Lösungsskizze.

1,5

1,4 R 2,5

1,3 S, R 2,4 S 3,5


(a)
1,2 S, A 2,3 R 3,4 S, R, B 4,5

1,1 S, A, F 2,2 S, A, F 3,3 S, B, G 4,4 S, B, G 5,5 S, A, F


x a x b x

1,5 S, T, H
1,4 S, T 2,5 S, T, H
1,3 S 2,4 S, T 3,5 S
(b)
1,2 2,3 S 3,4 S 4,5 S, H
1,1 L 2,2 H 3,3 L 4,4 S, T, L 5,5 L
z s z w z
(c) , aabccb, acbccb ∈ L und b, bb, abb 6∈ L
(d) , aaabbaaa, ababbaba ∈ L und bbb, aab, aaabaaa 6∈ L
(e)
a, Z0 /A
a, A/AA
a, B/AB ε, Z0 /ε
ε, A/A
ε, B/B a, A/ε
q p
b, B/ε

b, Z0 /B
b, A/BA
b, B/BB
(f)
b, A/AAA
b, A/ε
3 4 b, A/ε
a, Z0 /AA
ε, Z0 /ε
a, A/A
0 a, Z/ε
a, B/B
b, Z/ε
b, A/A
a, Z0 /A
b, B/B
b, Z0 /B a, A/ε
1 2
b, B/ε
a, A/AA ε, A/A
a, B/AB ε, B/B
b, A/BA
b, B/BB

Aufgabe H7.2. (Würze ∈ Kürze) 2+2 Punkte


Der kleine Theodor muss morgen in der Schule einen Grammatiktest schreiben. Eigent-
lich sollte er lernen, aber er würde viel lieber den Blümchen beim Wachsen zuschauen.
Die Grammatik hat er sich auch schon aufgeschrieben, aber leider passt sie nicht auf
seinen Spickzettel. Können Sie Ihre moralischen Bedenken überwinden und ihn dabei
unterstützen?
Die Grammatik G sei über die folgenden Produktionen gegeben:

S → SS | AD | DB | T E → aABb | bBAa | EabU


A → aT | aaD T → S | ET b | aAU | ε
B → U b | BB U → W DW | aEb | aU
C → aV | ε W → aB | bAU b | bW a
D → Sb | b V → aSb | ab

(a) Eliminieren Sie alle unnützen Symbole aus G mit den aus der Vorlesung bekannten
Verfahren. Geben Sie ihren Rechenweg an.
(b) Leider ist G noch nicht klein genug. Geben Sie eine Grammatik G0 mit L(G0 ) =
L(G) an, die höchstens zwei Produktionen enthält. Beschreiben Sie ihr Vorgehen.
Lösungsskizze. (a) Zuerst berechnen wir die Menge der erzeugenden Symbole. Jede Zeile
entspricht hierbei einem Schritt der Induktion aus Satz 4.37.

{a, b}
∪ {C, D, T, V }
∪ {A, S}
∪∅

Hier ist die Induktion (bzw. der Fixpunktalgorithmus) also abgeschlossen, und wir er-
halten folgende Grammatik:

S → SS | AD | T D → Sb | b
A → aT | aaD T →S|ε
C → aV | ε V → aSb | ab

Nun bestimmen wir die Symbole, die erreichbar sind, induktiv nach Satz 4.40.

{S}
∪ {A, D, T }
∪∅

Schließlich ergibt sich die folgende Grammatik.

S → SS | AD | T D → Sb | b
A → aT | aaD T →S|ε

(b) Zuerst eliminieren wir T , da offensichtlich T und S äquivalent sind.

S → SS | AD | ε D → Sb | b
A → aS | aaD | a

Die Produktionen von D lassen sich einsetzen.

S → SS | ASb | Ab | ε
A → aS | aaSb | aab | a

Ebenso die von A.

S → SS | aSSb | aaSbSb | aabSb | aSb | aaSbb | aabb | ab | ε

Die Produktionen S → aSSb | aaSbSb | aabSb | aaSbb | aabb | ab lassen sich nun entfernen,
da man jeweils die rechte Seite auch in folgender Grammatik ableiten kann.

S → SS | aSb | ε

Diese Grammatik erzeugt genau die balancierten Klammerwörter (mit a als öffnende
und b als schließende Klammer), wie aus der Vorlesung (Beispiel 4.10) bekannt. Dafür
können wir aber auch eine kleinere Grammatik angeben:

S → aSbS | ε
Aufgabe H7.3. (Hochstaplerei) 1+3 Punkte
Dora ist wütend. Ihr Kindergartenrivalin, Eva Pirsalz, behauptet einen größeren Bau-
steinturm als Dora gebaut zu haben. Aber als Dora sich den Turm anschauen wollte,
war er nicht mehr da – Eva behauptet, sie hat ihn schon wieder abgebaut. Dora will der
Sache auf den Grund gehen, und besorgt sich eine Kopie von Evas Labortagebuch. Da
muss für jeden Baustein jeweils vermerkt sein, wann der er aus der Bausteinbox geholt
wurde, wann er verbaut wurde, und wann er wieder zurückgelegt wurde.
Die Einträge werden mit dem Alphabet Σ := {g, v, z} notiert. In Doras Labortage-
buch steht z.B. das Protokoll ggvgvvzgvzzz. Ein Baustein muss immer zuerst geholt,
dann verbaut, und dann zurückgegeben werden. Das Protokoll gvvgzz wäre also nicht
gültig, da hier ein Stein verbaut wurde, bevor er geholt wurde. Ebenso wäre ggvgvvzz
nicht in Ordnung, da einer der Steine nicht zurückgegeben wurde, oder gz, da einer der
Steine nicht verbaut wurde. Sei L := {w ∈ Σ∗ : w ist gültiges Protokoll}. Um Eva zu
überführen, will Dora nun einen Kellerautomaten bauen, der jedes Protokoll in Evas
Labortagebuch überprüft.
(a) Zeigen Sie, dass L nicht kontextfrei ist und es somit keinen Kellerautomaten für L
gibt.
Dora ist enttäuscht, hat aber noch eine Idee: Für Ihre Zwecke wäre es genauso gut, einen
Kellerautomaten zu haben, der die ungültigen Protokolle akzeptiert.
(b) Konstruieren Sie einen Kellerautomaten für L und beschreiben Sie die Idee hinter
Ihrer Konstruktion.
Hinweis: Bitte beachten Sie die Anmerkungen zur Notation von Kellerautomaten
auf Übungsblatt 7.
Lösungsskizze. (a) Angenommen, L wäre kontextfrei. Dann können wir das Pumping-
Lemma für kontextfreie Sprachen anwenden.
Sei n ∈ N PL-Zahl. Wir wählen das Wort r := g n v n z n . (Wir bezeichnen dies meist als
z, das wäre hier aber ungünstig, da im Alphabet Σ. Also wählen wir r statt z für den
Namen des Wortes, und f statt v für den zweiten Teil der Zerlegung.)
Sei uf wxy eine Zerlegung unseres Wortes mit |f wx| ≤ n und f x 6= ε. Wir betrachten
die folgenden Fälle:
• |f x|z = 0: Wir pumpen also kein z. Wir pumpen ab, betrachten also das Wort
r0 := uf 0 wx0 y = uwy. Da f x 6= ε, haben wir zumindest ein g oder ein f entfernt.
Daher gilt |r0 |g < |r0 |z oder |r0 |v < |r0 |z . Das heißt, ein Stein wurde zurückgegeben
bevor er geholt oder verbaut wurde. Daher ist in beiden Fällen das Wort r0 ∈ / L.
• |f x|z > 0: Aufgrund der Form unseres Wortes und |f wx| ≤ n gilt also |f wx|g = 0.
Wir pumpen 2-mal, betrachten also r0 := uf 2 wx2 y. Es gilt |r0 |g = n < n + |f x|z =
|r0 |z . In r0 wurde daher ein Stein zurückgegeben, bevor er geholt wurde, und r0 ∈
/ L.
(b) Um zu überprüfen, dass ein Wort in L enthalten ist, können wir folgendermaßen
vorgehen: Wir gehen das Wort Zeichen für Zeichen durch, und merken uns stets die
Anzahl der Steine die wir geholt, aber nicht verbaut haben, und die der Steine, die wir
verbaut, aber nicht zurückgelegt haben. (Erstere Zahl nennen wir A, und letztere B.)
Keine dieser Zahlen darf negativ werden, und am Ende müssen beide 0 sein. Mit einem
Kellerautomaten kann man dies nicht überprüfen, da er sich nur eine dieser Zahlen
merken kann. Aber: Falls das Wort nicht in der Sprache ist, muss also einer dieser
Zähler negativ werden oder nicht auf 0 enden. Dies können wir überprüfen, indem wir
den Nichtdeterminismus ausnutzen.

g, Γ/AΓ
v, A/ε
z, Γ/Γ v, Z0 /Z0
1
ε, A/ε
ε
g
0 3 4 v
z
ε
ε, B/ε
g, Γ/Γ 2 z, Z0 /Z0
v, Γ/BΓ
z, B/ε

(Der PDA verwendet die auf Übungsblatt 8 eingeführte Kurznotation.) Zuerst entschei-
det sich der Automat, ob er A oder B überprüft. Wir betrachten nun den Fall, dass der
Automat A überprüft, das Vorgehen für B ist analog. Anfangs setzten wir den Zähler
auf 1, indem er ein A auf den Stapel legt. Danach liest er das Wort ein. Jedes g legt
ein weiteres A auf den Stapel, jedes v nimmt eines herunter. Es gibt zwei Möglichkeiten,
wie das Wort inkorrekt sein könnte: (1) Der Zähler erreicht zwischendurch die Zahl 0 (es
wurde also ein Stein verbaut, der nicht geholt wurde). (2) Der Zähler endet nicht bei 1
(es wurden nicht alle Steine verbaut).
Im Fall (1) geht der Automat zu Zustand 4 über, und kann dort den Rest des Wortes
akzeptieren. (Umgekehrt kann man Zustand 4 auch nur in Fall (1) erreichen.) Bei (2)
müssen am Ende des Wortes zwei A auf dem Stapel liegen (der Zähler ist also mindestens
2) – hier gehen wir nach 3, von wo aus keine weiteren Zeichen mehr eingelesen werden
können. Auch hier gilt die Umkehrung: wir können nur nach 3 gehen, wenn wir am Ende
des Wortes sind und mindestens zwei A auf dem Stapel liegen.
Bonusaufgabe H7.4. 2 Bonuspunkte
Implementieren Sie ein Programm, das beliebige theoLISP Programme ausführen kann
(wie in Aufgabe H6.3 definiert). Führen Sie so das (korrigierte) Programm aus Aufga-
be H6.4 aus und geben Sie das Ergebnis an.
Hinweise: Es ist sinnvoll, hierzu Ihre Lösung von Aufgabe H6.4 zu erweitern. Alter-
nativ können Sie auch auf der Musterlösung aufbauen, diese finden sie hier, zusammen
mit dem korrigierten Programm aus Aufgabe H6.4. Beachten Sie bitte auch die Beispiel-
programme zu Aufgabe H6.3 (diese sind hier zu finden), für die die korrekten Ausgaben
jeweils angegeben sind.
Wie immer: Beschreiben Sie bitte Ihren Ansatz in natürlicher Sprache und illustrie-
ren die wesentlichen Schritte Ihrer Lösung mit geeigneten Codefragmenten. Sie können
(müssen aber nicht), Ihrer Lösung Ihren vollständigen Programmcode beifügen, jedoch
steht es den Korrektoren frei, diesen zu ignorieren. Beschränken Sie sich in Ihrer Imple-
mentierung auf grundlegende Funktionalitäten verbreiteter Programmiersprachen.
Es genügt zu beschreiben, wie Sie ihren Recogniser (oder den der Musterlösung) an-
passen. Sie müssen nicht erneut beschreiben, wie dieser funktioniert.
Knobelaufgabe: Wenn Sie herausfinden, was das Programm tatsächlich ausrechnet
(für beliebige Eingaben n), können Sie gerne eine E-Mail an Philipp Czerner schicken.
Lösungsskizze. Zuerst ändern wir unseren Recogniser, sodass er eine verschachtelte Liste
mit dem Programminhalt zurückgibt. Für das Programm

((while x ()) (set x (add 42 7)))

erhalten wir z.B.

[[’while’, ’x’, []], [’set’, ’x’, [’add’, 42, 7]]]

Die Liste entspricht also exakt der S-Expression; Zahlen sind als Zahlen repräsentiert,
und alles andere als String. In unserem Parser haben wir bereits für jede Variable eine
Funktion, die diese Variable einliest – wir müssen die Funktion nun so anpassen, dass
sie eine entsprechende Liste zurückgibt. Beispiel:

def Zahl():
r = ’’
assert code[0].isdigit()
while code[0].isdigit(): r += code[0]; eat(code[0])
return int(r)

Hier wird eine Zahl eingelesen und zu einem Integer konvertiert. Die meisten dieser
Funktionen arbeiten rekursiv:

def Term():
if eat_maybe(’(’): r = Arith(); eat(’)’); return r
elif code[0].isdigit(): return Zahl()
elif code[0].isalpha(): return Var()
else: assert False
def Arith():
r1 = Op(); eat(’ ’)
r2 = Term(); eat(’ ’)
r3 = Term()
return [r1, r2, r3]
def While():
eat(’while’); eat(’ ’)
r2 = Term(); eat(’ ’)
r3 = S()
return [’while’, r2, r3]

Das Vorgehen ist stets das gleiche, die anderen Funktionen sind deshalb hier nicht gezeigt.
Nun können wir das Programm einlesen.

program = S()

Um das Programm dann auszuführen, gehen wir wieder rekursiv vor. Wir erstellen
drei Funktionen: run, um eine Liste an Befehlen auszuführen; run_single, für einen
einzelnen Befehl, und calc, um den Wert eines arithmetischen Ausdrucks zu ermitteln.
Die Implementation von run ist leicht.
def run(program):
for i in program: run_single(i)

Um calc zu implementieren, müssen wir uns den aktuellen Wert aller Variablen merken.
Hierzu verwenden wir ein globales Dictionary.

variables = {}
def calc(E):
if isinstance(E, int): return E
elif isinstance(E, str): return variables.get(E, 0)
elif E[0] == ’add’: return calc(E[1]) + calc(E[2])
elif E[0] == ’mul’: return calc(E[1]) * calc(E[2])
elif E[0] == ’sub’: return calc(E[1]) - calc(E[2])

Beachten Sie, dass wir für Variablen, denen bisher kein Wert zugewiesen wurde, den
Wert 0 verwenden. Schließlich implementieren wir run_single, unter Verwendung der
beiden vorherigen Funktionen.

def run_single(P):
if P[0] == ’if’:
if calc(P[1]) > 0: run(P[2])
else: run(P[3])
elif P[0] == ’while’:
while calc(P[1]) > 0: run(P[2])
elif P[0] == ’set’:
variables[P[1]] = calc(P[2])

Nun führen wir das Programm aus und geben das Ergebnis zurück.

run(program)
print(calc(’result’))

Der Ergebnis ist 347. (Und tatsächlich wurde im Jahre 347 der spätere Kaiser Theodosius
der Große geboren. )
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Übungsblatt 8

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Notation von PDA-Regeln 2: Auf Übungsblatt 7 wurde eine graphische Notation für
PDAs eingeführt. Für einige häufige Fälle führen wir nun weitere Kurzschreibweisen
ein. Sei M = (Q, Σ, Γ, q0 , Z0 , δ, F ) ein PDA mit Γ = {X1 , X2 , ..., Xk } und a ∈ Σ∪{}.
Wir schreiben
• a, Γ/ε statt a, X1 /ε, ..., a, Xk /ε,
• a, Γ/αΓ statt a, X1 /αX1 , ..., a, Xk /αXk , mit α ∈ Γ∗ , und
• a statt a, Γ/Γ.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü8.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• deterministischer Kellerautomat (DPDA)
• deterministische kontextfreie Sprache (DCFL)
• Abschlusseigenschaften von DCFL
• Abschlusseigenschaften von CFL
• Konversion CFG ↔ PDA

Individualaufgabe Ü8.2. (Kahoot)


Falls Sie das Kahoot aus der Vorlesung verpasst haben: Spielen Sie es jetzt! Link1

Individualaufgabe Ü8.3. (Automata Tutor: “DPDAs”)


Lösen Sie die Aufgaben Ü8.3 (a–b) auf Automata Tutor.2 Achtung: Für die Übungs-
aufgaben haben Sie beliebig viele Versuche. Für die Aufgaben in Hausaufgabenblatt 8
nicht! Ihr konstruierter Automat darf nicht zu viele Zustände haben (siehe Aufgaben-
stellung). Wenn Sie einen ε-Übergang angeben wollen, geben Sie statt ε bitte E ein (siehe
1
Falls der Link nicht mehr funktioniert, teilen Sie dies bitte der Übungsleitung mit. Die Teilnehmeran-
zahl ist leider auf 2000 begrenzt.
2
Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in Ü1.2, um sich
richtig zu registrieren.
Hinweisbox über Canvas) und beim Entfernen eines Kellersymbols, lassen Sie den Teil
hinter “/” bitte leer (Beispiel: “a, X/”). Wir haben diese Woche die Simulation aktiviert.
Nutzen Sie die Simulation, um Ihren Automaten zu testen.
Lösungsskizze.
(a) Zu der Aufgabe gibt es ein Lösungsvideo. Mögliche Lösung:

x, Z/Z
a, Γ/XΓ q p x,Z/Z
a,Z/XZ

a,X/XX x,X/X

b, X/ε ε,Z/Z
r
x, X/X

(b) Mögliche Lösung:

a, Γ/AΓ
q0 q1

a, Γ/AΓ
b
b, A/ε
q2 q3

b, A/ε
b, Z0 /Z0
b
q4 q5
b

Übung und Nachbereitung

Fokusaufgabe Ü8.4. (CFG ↔ PDA)


Wie Sie in der Vorlesung gesehen haben (Folie 198ff), können kontextfreie Grammatiken
und Pushdown-Automaten sich gegenseitig simulieren. Wir üben nun diese Übersetzun-
gen zwischen CFG und PDA.
(a) Überführen Sie die folgende CFG G = ({S}, {a, b, c}, P, S) mithilfe von Satz 4.54
in einen PDA M mit Lε (M ) = L(G):

S → SS | aSb | bSa | c

(b) Übersetzen Sie den folgenden PDA M = ({q, p}, {a, b}, {Z0 , A, B}, q, Z0 , δ) in eine
CFG G mit Lε (M ) = L(G), wobei δ definiert ist durch:

δ(q, a, A) = {(q, AA)} δ(q, b, A) = {(p, )} δ(p, b, A) = {(p, )}


δ(q, a, Z0 ) = {(q, A)} δ(q, b, Z0 ) = {(q, )}

a, A/AA

b, Z0 /ε q p b, A/ε
b, A/ε
a, Z0 /A

Übungsaufgabe Ü8.5. (Zählerautomaten)


Wir beschränken in dieser Aufgabe das Kelleralphabet von PDAs auf nur ein einziges
Symbol und untersuchen die Ausdrucksmächtigkeit dieser Automaten etwas genauer.
(a) Geben Sie eine äquivalente Formulierung als Automaten, die statt des Kellers einen
Zähler verwenden, an.
(b) Geben Sie einen solchen Automaten an, der eine nicht reguläre Sprache akzeptiert.
(c) Nun betrachten wir eine Variante, die zusätzlich noch ein Kellersymbol erlaubt,
um den Anfang des Kellers zu markieren. Geben Sie wieder eine Charakterisierung
mit Zählern an und einen Automaten, der eine kontextfreie Sprache akzeptiert, die
von keinem Automaten im vorherigen Modell akzeptiert wird.
(d) Geben Sie eine kontextfreie Sprache an, die von keiner der betrachteten Automa-
tenklassen akzeptiert wird.
Knobelaufgaben: Die folgenden Aufgaben können alle unabhängig voneinander gelöst
werden:
(a) Geben Sie einen solchen Automaten an, der die Sprache L für L = {w ∈ {a, b}∗ |
w = wR } akzeptiert.
(b) Nun betrachten wir deterministische Varianten dieser Automaten. Zeigen Sie zu-
nächst, dass die Klasse dieser deterministischen Automaten unter dem Sprachkom-
plement abgeschlossen ist.
(c) Zeigen Sie, dass kein deterministischer Zählerautomat die Sprache L akzeptiert.
Hinweis: Wie viele verschiedene Zustände kann ein Automat beim Lesen von Wor-
ten der Länge n erreichen?
(d) Zeigen Sie aus den vorherigen Aussagen, dass nichtdeterministische Automaten mit
einem Zähler strikt mächtiger sind als deterministische Automaten mit beliebig
vielen Zählern.
Lösungsskizze.
(a) Die Automaten sind ähnlich zu NFAs, aber besitzen einen Zähler der am Anfang
auf eins steht. Beim Lesen eines Zeichens kann man sich entscheiden, den Zähler
zu inkrementieren, zu dekrementieren, oder gleich zu lassen. Falls der Zähler 0
erreicht, bleibt der Automat stecken. Solche Automaten nennt man manchmal auch
halbblinde Zählerautomaten. Wir werden im Folgenden ein Akzeptanzkriterium
mit Zählerwert 0 verwenden.
(b) Der folgende Automat akzeptiert die Sprache {an bn | n ∈ N>0 }.
a/+1 b/−1

a/0 b/−1
q0 qa qb

(c) In dieser Variante steht der Zähler am Anfang auf 0 und beim Lesen eines Zeichens
kann der Zähler auf Gleichheit mit 0 überprüft werden. Akzeptiert wird mit Endzu-
stand. Der folgende Automat akzeptiert die Sprache {w | |w|a = |w|b ∧w ∈ {a, b}∗ }.
a, !0/ + 1

qa b, !0/−1
a, 0/+1

ε, 0/0
q0
b, 0/+1

ε, 0/0
qb a, !0/−1

b, !0/+1

Hier bezeichnet 0 (bzw !0) an der zweiten Stelle einer Transition, dass der Zähler
(nicht) gleich null ist. Es ist auch möglich diesen Automaten zu determinisieren.
(d) Beispiel: {wwR : w ∈ {a, b}∗ }
Knobelaufgaben:
(a) Idee: Wir raten eine Stelle k, an der der k-te Buchstabe nicht mit dem k-letzten
Buchstaben übereinstimmt.
Σ, !0/0

qa
a, ?/+1 b, !0/−1

ε, 0/0
inc Σ, ?/+1 Σ, !0/−1 dec qf

b, ?/+1 a, !0/−1

qb

Σ, !0/0

(b) Durch Vertauschen der Endzustände erhalten wir ein Komplementierungsverfahren


für deterministische Zählerautomaten analog zu DFA’s.
(c) Bei k Zählern können beim Lesen von Worten der Länge n maximal O(nk ) ver-
schiedene Konfigurationen erreicht werden.
Beweis. Die Anzahl der Zustände im Automaten ist konstant. Nach n Schritten
kann jeder Zähler nur einen Wert im Zahlenbereich von 0 bis n annehmen. Damit
erhalten wir |Q|(n + 1)k ∈ O(nk ) mögliche Konfigurationen.
Damit fallen alle Worte der Länge n in O(nk ) viele Äquivalenzklassen. Für die
Sprache L befindet sich aber jedes Wort in einer eigenen Äquivalenzklasse. Damit
fallen die Worte der Länge n in O(2n ) verschiedene Äquivalenzklassen. Also kann
kein deterministischer Zählerautomat die Sprache L akzeptieren.
(d) Angenommen es gäbe einen deterministischen Zählerautomaten A, der L akzep-
tiert. Dann gäbe es auch einen deterministischen Zählerautomaten A0 , der L akzep-
tiert. Widerspruch. Da wir aber bereits einen nichtdeterministischen Automaten
mit einem Zähler konstruiert haben, der L akzeptiert, ist diese Klasse strikt mäch-
tiger.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 8

• Sei Φ := {{1}, {2}, {3, 4}, {5}}. Nach dem Abgabedatum werden wir für jede Men-
ge A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren.
• Es werden diese Aufgaben korrigiert: H8.1, H8.2, H8.4, H8.5

Aufgabe H8.1. (AT ) 1+1+1 Punkte


Diese Hausaufgabe wird mit Automata Tutor bearbeitet und abgegeben. Falls Sie es
noch nicht bereits gemacht haben, folgen Sie den Schritten in Ü1.2, um ein Konto zu
erstellen. Achten Sie darauf, dass Sie sich, wie dort beschrieben, mit Ihrer TUM-Kennung
anmelden. Ansonsten können wir Ihnen die Punkte nicht gutschreiben.
Bearbeiten Sie die Hausaufgaben H8.1 (a–c). Achtung: Während Sie für die Aufgaben
aus dem Übungsblatt beliebig viele Versuche hatten, haben Sie für jede Hausaufgabe nur
5 Versuche. Sie bekommen nur dann einen Punkt, wenn Sie die Aufgabe nach 5 Versuchen
vollständig (also mit 10/10 Punkten) gelöst haben. Ihr konstruierter Automat darf nicht
zu viele Zustände haben (siehe Aufgabenstellung). Wenn Sie einen ε-Übergang angeben
wollen, geben Sie statt ε bitte E ein (siehe Hinweisbox über Canvas) und beim Entfernen
eines Kellersymbols, lassen Sie den Teil hinter “/” bitte leer (Beispiel: “a, X/”).
Lösungsskizze. (a) Ein DPDA für {an b2m : 0 < n < m}
a, X/XX

a, Z0 /XZ0 b, X/X
0 1 2 5

b, X/ε b, Z0 /Z0
b, X/X b, Z0 /Z0
b, Z0 /Z0
3 4

(b) Um einen PDA für die Sprache der Grammatik S → (S) | S +S | SS | x zu erstellen,
formen wir die Grammatik zunächst um.
S → (SQ | SP S | SS | x
Q→) P →+
Den PDA erstellen wir nun mit dem Verfahren aus der Vorlesung. Das initiale Keller-
symbol ist S, und der PDA akzeptiert über leeren Keller.
(, S/SQ
, S/SP S
, S/SS
0 x, S/ε
), Q/ε
+, P/ε
(c) Vorab kurz die Anmerkung, dass man für diese Aufgabe den DPDA auch direkt
hinschreiben kann. In der folgenden Lösung präsentieren wir eine Möglichkeit, wie man
strukturiert vorgehen kann – dies ist aber nicht notwendig.
Für diesen Aufgabenteil formen wir die Grammatik zunächst um, mit dem Ziel, dass
man nur mit Kenntnis des nächsten Zeichen des Wortes bereits entscheiden kann, welche
Produktion verwendet werden soll. Die Produktionen S → S + S | SS stellen hier
jedoch ein Problem dar, da man sie erst nach dem Einlesen von S unterscheiden kann.
(Produktionen solcher Form bezeichnet man auch als linksrekursiv, für mehr Details sei
auf die Vorlesung Compilerbau verwiesen.) Also führen wir eine neue Variable T ein, zu
der wir die Produktionen von S, die nicht mit S beginnen, bewegen, und terminieren
die Rekursion direkt in T :

S → T + S | TS | T
T → (S) | x

Die Produktionen von S beginnen allerdings alle mit T , sodass wir immer noch nicht
zwischen ihnen unterscheiden können. Stattdessen führen wir eine neue Variable ein,
sodass S nur noch eine Produktion hat.

S → TR
R → +S | S | ε
T → (S) | x

Anschließend können wir die Produktionen R → S umformen, indem wir S → T R und


T → (S) | x einsetzen. Bei R und T setzen wir S ebenfalls ein.

S → TR
R → +T R | (T R)R | xR | ε
T → (T R) | x

Nun hat jede Variable entweder genau eine Produktion, oder jede Produktion beginnt
mit unterschiedlichen Terminalsymbolen. Jede Produktion? Nein! Die Produktion R → ε
leistet erbitterten Widerstand. Wir wollen die Grammatik nun weiter umformen, sodass
die Produktion R → ε nur am Ende des Wortes vorkommen kann (und wir das Wort
mit dieser Produktion also direkt akzeptieren).
Wir beobachten, dass nach R immer entweder das Ende des Wortes oder ) kommt.
Wir führen also eine neue Variable K ein, die R und dann eine schließende Klammer
einliest.

S → TR
R → +T R | (T KR | xR | ε
T → (T K | x
K → R)

Damit R nun tatsächlich immer nur am Ende des Wortes steht, müssen wir die Produk-
tion K → R) ersetzten, und die dadurch entstandenen R) in den Produktionen von K
wieder durch K.

S → TR
R → +T R | (T KR | xR | ε
T → (T K | x
K → +T K | (T KK | xK | )

Hieraus lässt sich ein DPDA erstellen. Der DPDA akzeptiert über Finalzustände. Wir
haben dafür gesorgt, dass R stets an der untersten Stelle des Kellers steht, sodass wir
ein Wort genau dann akzeptieren, wenn wir R das einzige Zeichen im Keller ist. Also
fügen wir eine -Transition ein, die feststellt, ob dies der Fall ist.
, S/T R
(, T /T K
x, T /ε
+, K/T K
0 (, K/T KK
x, K/K
), K/ε
+, R/T R
, R/R
(, R/T KR

1 x, R/R

Aufgabe H8.2. (Sprachfindung) 1+1+1+1 Punkte


Geben Sie für die folgenden Kellerautomaten jeweils die akzeptierte Sprache in Mengen-
notation an. Die PDAs akzeptieren über leeren Keller.

a, Z0 /XXZ0
0 a, X/XXX
a, Y /X
b, X/XX b, Z0 /Y Y Z0
a, Z0 /XZ0 a, X/
0 1 2 b, X/Y
b, Y /
b, Y /Y Y Y
b, X/X
b, X/
1
b, Y /
ε, X/X
c, X/ a, X/
c, Z0 / a, Y /

3 2 3
c, X/ ε, X/ ε, Y /
c, Z0 / ε, Z0 / ε, Z0 /

(a) (b)
γ := ( ε, Z0 /Z0 ε, X/X ε, Y /Y )

a, A/AA d, X/ c, X/XX
b, A/BA d, Y /Y Y c, Y /
3
d, Z0 /Y Z0 c, Z0 /XZ0
γ γ
0 1
a, A/AA 0 2
a, B/AB
a, Z0 /AZ0 a, A/
ε, A/A a, X/XX
b, B/ a, Y / b, X/
ε, B/B 1
2 ε, Z0 / a, Z0 /XZ0 b, Y /Y Y
ε, Z0 /Z0
γ b, Z0 /Y Z0
γ
(c) (d)

Lösungsskizze.
(a) {ab2n cn+2 : n ∈ N}
(b) {wxy : w ∈ {aa, bb}∗ , x, y ∈ {a, b}, f (y)(f (w) + 2f (x)) ≥ 0}, f (w) := |w|a − |w|b .
Alternativ:

{waa : w ∈ {aa, bb}∗ , 12 |w|a + 1 ≥ 21 |w|b }


∪ {wba : w ∈ {aa, bb}∗ , 12 |w|a − 1 ≥ 12 |w|b }
∪ {wab : w ∈ {aa, bb}∗ , 12 |w|a + 1 ≤ 12 |w|b }
∪ {wbb : w ∈ {aa, bb}∗ , 12 |w|a − 1 ≤ 12 |w|b }

(c) {wwR : w ∈ L((ab|aa)∗ )}


(d) Die leere Sprache, also ∅. Es gab einen Fehler in der Aufgabe, die Sprache hätte
eigentlich {w ∈ {a, b, c, d}∗ : |w|a + |w|c = |w|b + |w|d } sein sollen (aber Z0 wird
nie entfernt).

Aufgabe H8.3. (Kontextfreie Residualsprachen) 1+3+1 Punkte


Sei Σ ein Alphabet. Zur Erinnerung: Für eine Sprache L ⊆ Σ∗ und ein Wort w ∈ Σ∗ ist
Lw := {v : wv ∈ L} die Residualsprache von L bezüglich w (siehe Ü5.6).
(a) Sei G folgende Grammatik:

S → aC | Da | BC C → aS | BC
B → BB | b D → CB | ε

Bestimmen Sie eine kontextfreie Grammatik für L(G)a .


(b) Sei H = (V, Σ, P, S) eine beliebige kontextfreie Grammatik und c ∈ Σ. Beschreiben
Sie ein allgemeines Verfahren, um eine kontextfreie Grammatik H 0 = (V 0 , Σ, P 0 , S 0 )
mit L(H 0 ) = L(H)c zu konstruieren.
(c) Führen Sie Ihr Verfahren auf der Grammatik G aus, um eine Grammatik für L(G)b
zu bestimmen.
Hinweise: Sie dürfen auch (b) zur Lösung von (a) verwenden. Bitte beachten Sie, dass
wir aus der Vorlesung nur wissen, dass die Greibach-Normalform existiert, wir kennen
jedoch kein Verfahren, sie zu erzeugen. (Streng genommen wissen wir auch nicht, ob ein
solches Verfahren existiert.) Lösungen, die sich auf die GNF berufen, sind wahrscheinlich
inkorrekt.
Lösungsskizze. (a) Wir fügen zu G ein neues Startsymbol S 0 und folgende Produktionen
hinzu:

S 0 → C | SBa | ε

Begründung: LG (aC)a = LG (C) ist klar, also S 0 → C. Da ε ∈ LG (D), gilt a ∈ L(G)


und wir fügen S 0 → ε hinzu. Davon abgesehen gibt es die Produktion D → CB, die
genau dann mit einem a beginnt, wenn wir C → aS ableiten, da LG (B) ⊆ L(b+ ). Also
gilt S → DA → CBa → aSBa und wir fügen S 0 → SBa hinzu. Wir angemerkt gilt
LG (B) ⊆ L(b+ ), also erzeugt die Produktion S → BC keine Wörter, die mit a beginnen.
Insgesamt ergibt sich also folgende Grammatik:

S 0 → C | SBa | ε
S → aC | Da | BC C → aS | BC
B → BB | b D → CB | ε

(b) Wir konvertierten H zuerst zur Chomsky-Normalform. (Beachten Sie, dass es keinen
Einfluss auf L(H)c hat, ob ε ∈ L(H).) Als Variablen verwenden wir V 0 := V ] {Xc :
X ∈ V }, und das Startsymbol ist nun S 0 := Sc . Die Idee ist, dass LH 0 (Xc ) = LH (X)c
für jedes X ∈ V gilt, dass also Xc genau die Wörter erzeugt, die der Residualsprache
der von X erzeugen Wörter entspricht.
Die Produktionen P 0 konstruieren wir folgendermaßen:
• Alle Produktionen aus P sind in P 0 enthalten.
• Für (X → c) ∈ P fügen wir Xc → ε zu P 0 hinzu.
• Für (X → Y Z) ∈ P fügen wir Xc → Yc Z zu P 0 hinzu.
(c) Zuerst konvertieren wir G zur Chomsky-Normalform.

S → AC | DA | BC | a C → AS | BC
B → BB | b D → CB
A→a

Nun fügen wir folgende Produktionen hinzu (Sb ist das neue Startsymbol).

Sb → Ab C | Db A | Bb C Cb → Ab S | Bb C
Bb → Bb B | ε D b → Cb B

Wir merken an, dass das Symbol Ab nicht erzeugend ist – alle Produktionen, die es
involvieren, könnten also auch gelöscht werden.
Aufgabe H8.4. (Twice the ↑, double the ↓) 2+3 Punkte
Durch die steigenden Bevölkerungszahlen in jüngerer Vergangenheit wachsen auch die
Orte Estlingen und Oberfeld langsam zusammen. Dies stellt die Bebauungsplanerstel-
lungskommission der Gemeindeverwaltung Oberfeld vor Probleme, die (teils kuriosen)
traditionellen Estlinger Bauweisen mit den wissenschaftlich fundierten Oberfelder Vor-
gaben zu vereinen. Nun benötigen sie Ihre Hilfe bei einem besonders kniffeligen Fall.
Ähnlich zu Übungsaufgabe Ü5.7 betrachten wir „Skylines“. Sei also Σ := {↑, →, ↓, ↑, ↓}
ein Alphabet, wobei wir Wörter aus Σ∗ als Linien illustrieren. Beispielsweise stellen wir

→↑ ↑ ↑→↓ ↓ ↓→→↑↑ ↑ ↑→→↓ ↓ ↓↓→↑↑↑→↓↓↓→→→↑→→↓→↑↑→ ↓ ↓→

über folgende Linie dar:

Die Pfeile ↑ und ↓ stellen jeweils Fenster dar. Formal definieren wir Skylines induktiv:
ε ist eine Skyline, jedes Wort in n,m>0 {↑, ↑}n {→}m {↓, ↓}n ist eine Skyline, und für
S

Skylines u, v sind u→v, u→ und →u auch Skylines.


Alle PDAs in dieser Aufgabe akzeptieren über Finalzustände.
(a) Konstruieren Sie einen PDA, der genau die Skylines akzeptiert, die folgenden Ein-
schränkungen erfüllen:

• Alle Gebäude haben ungerade Höhe und Fenster befinden sich nur in ungera-
den Stockwerken. (Das linke Haus in obigem Beispiel erfüllt dies.)
• Die Fenster auf gegenüberliegenden Seiten des Hauses müssen übereinstim-
men, und alle Häuser müssen mindestens Breite 2 haben.

Hinweise: Sie dürfen die (b) verwenden. Falls Sie dies tun, ist es nicht notwendig,
M auszurechnen – M1 und M2 genügen. Um Ihre Notation zu vereinfachen, können
Sie alternativ das Alphabet Σ0 := {o, r, u, o0 , u0 } benutzen.
Sie sind mittlerweile leicht genervt von „traditionellen“ Estlinger Bräuchen, und beschlie-
ßen, der Bebauungsplanerstellungskommission ein Werkzeug an die Hand zu geben, mit
dem sie sich entsprechende PDAs auch selbst zusammenstellen kann.
Sei f : Σ → N eine Funktion und M = (Q, Σ, Γ, q0 , Z0 , δ, F ) ein PDA. Wir sagen,
dass M Signatur f hat, wenn für alle (q, c, Z) ∈ Q × Σ × Γ sowohl |α| = f (c) für alle
(q 0 , α) ∈ δ(q, c, Z) gilt, also auch |α| = 1 für alle (q 0 , α) ∈ δ(q, , Z). In anderen Worten
sorgt jede Transition, die ein Zeichen c ∈ Σ einliest, dafür, dass genau f (c) − 1 Zeichen
auf den Stapel geschrieben werden, und -Transitionen dürfen die Größe des Stapels
nicht verändern.
(b) Seien M1 , M2 beliebige PDAs, die beide Signatur f haben. Konstruieren Sie einen
PDA M mit LF (M ) = LF (M1 ) ∩ LF (M2 ), und begründen Sie, wieso Ihre Kon-
struktion funktioniert.
Lösungsskizze. (a) Zuerst konstruieren wir uns einen PDA für die erste Einschränkung:
↓, X/
↓, Y /
→ → ↓, Y /
↑, Γ/XΓ
ε → ε
0 1 2 3 4
↑, X/Y X ε, Z0 /Z0
↑, X/Y X
5

Und nun einen für die zweite:


↑, Γ/XΓ ↓, X/
→ ↑, Γ/Y Γ → ↓, Y /

ε → → ε, Z0 /Z0
0 1 2 3 4

→, Z0 /Z0

Beide PDAs haben die Signatur f mit f (→) = 1, f (↑) = f (↑) = 2 und f (↓) = f (↓) = 0.
Über (b) konstruieren wir dann einen PDA für ihren Schnitt.
(b) Diese Konstruktion ist ähnlich zur Produktkonstruktion für DFAs. Wir müssen
jedoch auch die Stapel beider PDAs gleichzeitig simulieren, und haben nur einen Stapel
zur Verfügung. Hier benutzen wir, dass die PDAs M1 und M2 die gleiche Signatur haben,
was dazu führt, dass ihre Stapel stets gleich groß sind.
Formal: Seien M1 = (Q1 , Σ, Γ1 , q01 , Z01 , δ1 , F1 ) und M2 = (Q2 , Σ, Γ2 , q02 , Z02 , δ2 , F2 )
zwei PDAs mit Signatur f . Aus technischen Gründen passen wir M1 und M2 zuerst so
an, dass es in jedem Zustand eine -Transition zu sich selbst gibt. Für i ∈ {1, 2} und

q ∈ Qi , X ∈ Γi fügen wir also qX → qX in δi ein. (∗)
Wir definieren Q := Q1 × Q2 , Γ := Γ1 × Γ2 , q0 := (q01 , q02 ), Z0 := (Z01 , Z02 ) und
a a
F := F1 × F2 . Sei a ∈ Σ ∪ {ε}. Für jede Transition (q1 X1 → r1 α) ∈ δ1 und (q2 X2 →
r2 β) ∈ δ2 gilt |α| = f (a) = |β| (da M1 und M2 beide Signatur f haben). Wir setzen also
α1 ...αk := α und β1 ...βk := β, und fügen folgende Transition zu δ hinzu.
a
(q1 , q2 )(X1 , X2 ) → (r1 , r2 )(α1 , β1 )(α2 , β2 ) · · · (αk , βk )
Aufgrund der Definition von δ wird ein Schritt von M wird immer aus gültigen Schrit-
ten von M1 und M2 bestehen. Falls M in einen Endzustand übergeht, sind sowohl M1
als auch M2 in einem Endzustand, das Wort muss also in beiden Sprachen liegen. An-
dererseits, wenn sowohl M1 als auch M2 für ein gegebenes Wort w mit irgendwelchen
Übergängen in einen Endzustand können, können wir diese Übergänge kombinieren und
in M ausführen, damit wir also auch alle Wörter im Schnitt von M1 und M2 akzeptieren.
Falls nur einer der PDAs eine -Transition ausführt, kann der andere eine der nutzlosen
Transitionen, die wir in (∗) hinzugefügt haben, ausführen.
Wichtig! Wir wissen aus der Vorlesung, dass kontextfreie Sprachen nicht unter Durch-
schnitt abgeschlossen sind, deswegen funktioniert diese Konstruktion (wie vorher mehr-
mals erwähnt) nur wegen der Bedingung an die Signatur! In anderen Fällen ist ein
Argument, dass wir einen PDA für den Durchschnitt bauen können, inkorrekt.
Bonusaufgabe H8.5. (Semilineare Mengen) 2+2 Bonuspunkte
Sei n ∈ N beliebig. Wir nennen eine Menge M ⊆ Nn linear, wenn es Vektoren r, p1 , ..., pk ∈
Nn gibt, sodass

M = {r + λ1 p1 + ... + λk pk : λ1 , ..., λk ∈ N}

Eine Menge S ist semilinear, wenn S = M1 ∪ ... ∪ Ml , wobei M1 , ..., Ml ⊆ Nn lineare


Mengen sind, und l ∈ N≥0 . Sei nun n := 2 und S ⊆ N2 eine beliebige semilineare Menge.
Zeigen Sie, dass L := {w ∈ {a, b}∗ : (|w|a , |w|b ) ∈ S} kontextfrei ist, indem Sie
(a) geeignet einen PDA M konstruieren und
(b) die Korrektheit von M beweisen.
Lösungsskizze. (a) Seien M1 , ..., Ml lineare Mengen mit S = M1 ∪ ... ∪ Ml sind (siehe
Definition von semilinearen Mengen). Es gilt

L = {w ∈ {a, b}∗ : (|w|a , |w|b ) ∈ {w ∈ {a, b}∗ : (|w|a , |w|b ) ∈ Mi }


[ [
Mi } =
i i

Insbesondere genügt es also einen PDA für den Spezialfall, dass S eine lineare Menge ist,
zu konstruieren. Für den allgemeinen Fall bilden wir dann die Vereinigung von endlich
vielen PDAs.
Sei also nun S linear. Wir können also r, p1 , ..., pk ∈ N2 wählen, sodass

S = {r + λ1 p1 + ... + λk pk : λ1 , ..., λk ∈ N}

gilt. Wir zeigen, dass L kontextfrei ist, indem wir einen PDA für L erstellen.
Die Idee des PDAs ist, dass er eine Sequenz an Vektoren v ∈ {p1 , ..., pk } ⊆ N2 „rät“.
Er merkt sich daraufhin, dass er v2 zusätzliche b einlesen muss, indem er entsprechende
Zeichen in den Keller schreibt, und liest v1 viele a ein. Wir verwenden den Keller also als
Zähler, wobei X jeweils „+1“ repräsentiert, und Y „−1“. (Wir üblich sorgen wir dafür,
dass sich X und Y nicht vermischen.)
Beispiel: Sei p1 := (2, 1) und p2 := (1, 1). Beim Einlesen des Wortes aabba geht der
Automat folgendermaßen vor:
• Der Automat wird initialisiert.
Keller: Z0 , Restwort: aabba
• Der PDA rät v = p1 = (2, 1), schreibt X auf den Keller und liest aa ein.
Keller: XZ0 , Restwort: bba
• Der PDA liest zwei b ein und dekrementiert den Zähler zweimal.
Keller: Y Z0 , Restwort: a
• Schließlich rät der PDA v = p2 = (1, 1), erhöht den Zähler um 1, und liest ein a
ein.
Keller: Z0 , Restwort: ε
Nun definieren wir den Automaten M = (Q, Σ, Γ, q0 , Z0 , δ, F ) formal. Wir wählen
hierfür P := max{v1 , v2 : v ∈ {r, p1 , ..., pk }} als den größten Eintrag in einem der Vek-
toren, die S festlegen. Unsere Zustände sind Q := {0, ..., P } × {0, ..., P }, wobei Zustand
(i, j) ∈ Q bedeutet, dass wir i-mal ein a einlesen wollen, und j-mal ein b. Als Kelleral-
phabet verwenden wir Γ := {Z0 , X, Y }, der Startzustand ist q0 := r und die Menge an
akzeptierenden Zuständen F := ∅, da wir mit leerem Keller akzeptieren wollen.
Es verbleibt, die Übergangsfunktion δ zu beschreiben. Zuerst kümmern wir uns darum,
dass wir die korrekte Anzahl an b einlesen: Wenn wir in einem Zustand (i, j) ∈ Q sind
mit j > 0, wollen wir den Zählen um j erhöhen. Dafür erhöhen wir den Zähler um 1 und
gehen zu Zustand (i, j − 1).
ε
(i, j)Z0 → (i, j−1)XZ0
ε
(i, j)X → (i, j−1)XX für i ∈ {0, ..., P } und j ∈ {1, ..., P } (1)
ε
(i, j)Y → (i, j−1) ε

Die Zustände (i, 0) ∈ Q können dann beliebig viele b einlesen, und den Zählen jeweils
um 1 senken.
b
(i, 0)Z0 → (i, 0)Y Z0
b
(i, 0)X → (i, 0) ε für i ∈ {0, ..., P } (2)
b
(i, 0)Y → (i, 0)Y Y

Um die richtige Anzahl an a einzulesen benutzen wir den Zustand direkt.


a
(i, 0) → (i−1, 0) für i ∈ {1, ..., P } (3)
c
Hier verwenden wir eine Kurzschreibweise und notieren q → s für q, s ∈ Q, c ∈ Σ ∪ {ε},
c
anstatt qW → sW für jedes W ∈ Γ zu schreiben.
Sobald alle a eingelesen sind, wir also den Zustand (0, 0) erreicht haben, kann der Au-
tomat sich einen beliebigen Vektor v ∈ {p1 , ..., pk } aussuchen und zu dem entsprechenden
Zustand übergehen.
ε
(0, 0) → v für v ∈ {p1 , ..., pk } (4)

Schließlich kann der PDA akzeptieren, wenn er in Zustand (0, 0) im Keller nur Z0 stehen
hat, der Zähler also 0 ist.
ε
(0, 0)Z0 → (0, 0) ε (5)

(b) Nun beweisen wir, dass obiger Automat korrekt ist. Wie üblich, teilen wir diesen
Beweis in zwei Richtungen auf und zeigen L(M ) ⊆ L und L(M ) ⊇ L. Für die folgenden
Beweise ist ein wenig Notation hilfreich, wir definieren also f : Σ∗ → N2 als f (w) :=
(|w|a , |w|b ) und g : Γ∗ → N als g(α) := |w|X − |w|Y . Außerdem schreiben wir e2 := (0, 1).
„⊆“: Sei w ∈ Σ∗ ∗ beliebig. Wir zeigen, dass für jede Konfiguration C := (q, w0 , α)
von M , die von der Startkonfiguration (r, w, Z0 ) erreicht werden kann, H(C) :=
q + e2 g(α) + f (w) − f (w0 ) ∈ S gilt. Aus dieser Aussage folgt L(M ) ⊆ L direkt,
da ein Wort nur in einer Konfiguration C ∗ := ((0, 0), ε, ε) akzeptiert wird, und
H(C ∗ ) = f (w) ∈ S impliziert w ∈ L. Der Beweis erfolgt mithilfe von Induktion
über die Anzahl ausgeführter Transitionen.
Für die Induktionsbasis erhalten wir C = (q, w0 , α) = (r, w, Z0 ), und somit H(C) =
r ∈ S. Für den Induktionsschritt sei nun C = (q, u, α) eine beliebige Konfiguration
mit H(C) ∈ S, und C 0 = (q 0 , u0 , α0 ) eine Konfiguration mit C →M C 0 . Nun müssen
wir lediglich alle Transitionen durchgehen: (1) inkrementiert g(α) und senkt q2
um 1, (2) dekrementiert g(α) und erhöht −f (u)2 um 1, (3) reduziert q1 und ver-
größert −f (u)1 , und (5) ändert keinen der Terme. In diesen Fällen gilt also (mit
Induktionsannahme)

H(C 0 ) = q 0 + e2 g(α0 ) + f (w) − f (u0 ) = q + e2 g(α) + f (u) − f (w) = H(C) ∈ S

Es bleibt noch Transition (4), hier gilt q = (0, 0) und q 0 ∈ {p1 , ..., pk } und somit:

H(C 0 ) = H(C) + q 0 ∈ S

Hier verwenden wir wieder die Induktionsannahme, und x + v ∈ S für alle x ∈ S


und v ∈ {p1 , ..., pk }.
„⊇“: Wir zeigen zunächst L ∩ L(a∗ b∗ ) ⊆ L(M ). Hierzu beobachten wir, dass jede Kon-
figuration C = (q, aq1 w, α), mit q ∈ Q, w ∈ Σ∗ , α ∈ Γ∗ eine Konfiguration
((0, 0), w, α0 ) mit g(α0 ) = g(α) + q2 erreichen kann, indem wir von C aus q2 -mal
Transition (1) ausführen, und q1 -mal Transition (3).
Sei nun x ∈ S beliebig. Wir können also eine Folge v (1) , v (2) , ..., v (m) ∈ {p1 , ..., pk }
(1) (m)
wählen, sodass x = r + v (1) + ... + v (m) . Für λ := r1 + v1 + ...v1 wenden wir nun
unsere Beobachtung m-mal an:

(r, ax1 bx2 , Z0 )


(1) (m) (1) (m)
r1 +v1 +...v1 r2 +v2 +...v2
= (r, a b , Z0 )
(1) (m) (1) (m)
→∗M ((0, 0), a v1 +...v1
br2 +v2 +...v2
, X r1 Z0 )
(1) (m) (1) (m)
→∗M ((0, 0), av1 +...v1
br2 +v2 +...v2
, X r2 Z0 )
(1) (m) (1) (m)
→∗M (v (1) , av1 +...v1
br2 +v2 +...v2
, X r2 Z0 )
(2) (m) (1) (m) (1)
→∗M ((0, 0), av1 +...v1
br2 +v2 +...v2
, X r2 +v2 Z0 )
→∗M · · ·
(1) (m) (1) (m)
→∗M ((0, 0), br2 +v2 +...v2
, X r2 +v2 +...v2
Z0 )

Anschließend müssen wir lediglich Transition (4) x2 -mal anwenden und können
dann das Wort mit Transition (5) akzeptieren. Insbesondere gilt damit ax1 bx2 ∈
L(M ) für jedes x ∈ S, und somit L ∩ L(a∗ b∗ ) ⊆ L(M ).
Um den Beweis abzuschließen, zeigen wir, dass für w ∈ L(M ) mit ab ∈ w auch
w0 ∈ L(M ) gilt, wobei w0 das Wort ist, das wir erhalten, wenn wir ein ab in
w durch ba ersetzen. Da sich ein a nur über Transition (3) einlesen lässt, muss
der PDA vor Einlesen des a in einem Zustand der Form (i, 0) sein, von dem aus
wir Transition (2) ausführen können (ohne den Zustand zu ändern). Da wir den
Keller aus (auch negativen) Zähler verwenden, können wir die Transition (2), die
b einliest, nach vorne verschieben, und die übrigen Transitionen lassen sich immer
noch ausführen. Am Ende der Ausführung (vor Transition (5)) muss der Zähler
dann den gleichen Wert anzeigen, und wir können w0 ebenfalls über Transition (5)
akzeptieren.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Übungsblatt 9

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü9.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• abzählbar / überabzählbar
• berechenbar / unberechenbar
• Church-Turing These
• nichtdeterministische / deterministische Turing-Maschine (TM)
• Konfiguration einer TM
• akzeptierte Sprache einer TM
• Turing-berechenbar
• k-Band Turing-Maschine
• WHILE-Programm
• GOTO-Programm
• Konvertierung: WHILE → TM → GOTO → WHILE

Individualaufgabe Ü9.2. (Meine erste TM )


Sei Σ = {a, b, c}. Geben Sie TM M an, so dass:
L(M ) = {an bn cn | n ≥ 0}
Tipp: Es gibt verschiedene Webseiten auf denen Turing Maschinen interaktiv konstruiert
und simuliert werden können, z.B. https://wimmers.github.io/turing-machine-viz/.
Beachten Sie dass diese Seite Endzustände nicht visualisiert.
Lösungsskizze. Für diese Aufgabe gibt es eine Videolösung: Link
Idee: Ersetze für jedes a je ein a, b und c durch x, wobei nach dem Ersetzen die restlichen
Buchstaben der gleichen Art unverändert gelassen werden. Wenn am Ende nur noch x
auf dem Band stehen, terminiere. Sonst bleibt die Berechnung in einem Nichtendzustand
stecken.
Wir schreiben  für eine leere Bandzelle.
Sei TM M = ({qa , qb , qc , qL , qB , qC , qF }, {a, b, c}, Σ ∪ {A, B, C, }, δ, qa , , {qF }).
a/a, R b/b, R X/X, L
B/B, R C/C, R für X ∈ {a, b, B, C}

a/A, R b/B, R c/C, N


qa qb qc qL

A/A, R
B/B, R /
,
N

qB qC qF
C/C, R /, N

B/B, R C/C, R

Übung und Nachbereitung

Fokusaufgabe Ü9.3. (Zweierpotenz: TM & WHILE)


(a) Sei f : {0, 1}∗ → {0, 1} die Funktion, die berechnet, ob ein Wort die Binärdarstel-
lung einer Zweierpotenz ist1 :
(
1 wenn (w)2 = 2n für ein n
f (w) =
0 sonst

Geben Sie (graphisch) eine TM an, die f (w) berechnet.


Erinnerung: Damit eine TM eine Funktion berechnet, muss das Band nach der
Berechnung nur noch die Ausgabe enthalten und der Kopf der TM muss auf das
erste Zeichen der Ausgabe zeigen.
(b) Geben Sie ein WHILE-Programm an, das berechnet, ob x1 (die Eingabe) eine
Zweierpotenz ist.
Erinnerung: Es gibt bei WHILE-Programmen (und GOTO-Programmen) kein
Band und keinen direkten Zugriff auf die Binärrepräsentation der Eingabe. Nach
dem Terminieren des Programms muss die Ausgabe in x0 stehen.

Übungsaufgabe Ü9.4. (GOTO → WHILE)


(a) Welche Ausgabe produziert das folgende GOTO-Programm für die Eingaben 16, 3
und 42? Was macht das Programm im Allgemeinen für die Eingabe x1 > 0? Ter-
miniert es immer?

1
Führende Nullen sind erlaubt: (0100)2 = (100)2 = 4
M1 : x0 := x0 + 1
M2 : if x1 = 1 goto M16
M3 : x2 := x1
M4 : x3 := 0
M5 : x4 := 4
M6 : if x2 = 1 goto M12
M7 : if x2 = 0 goto M14
M8 : x2 := x2 − 2
M9 : x3 := x3 + 1
M10 : x4 := x4 + 6
M11 : goto M6
M12 : x1 := x4
M13 : goto M1
M14 : x1 := x3
M15 : goto M1
M16 : HALT
(b) Übersetzen Sie das GOTO-Programm mit Hilfe der Konstruktion aus der Vorlesung
(Satz 5.24, Folie 253f) in ein WHILE-Programm. Nutzen Sie diese Vorlage:
pc :=
while do
if pc = 1 then end
if pc = 2 then end
if pc = 3 then end
if pc = 4 then end
if pc = 5 then end
if pc = 6 then end
if pc = 7 then end
if pc = 8 then end
if pc = 9 then end
if pc = 10 then end
if pc = 11 then end
if pc = 12 then end
if pc = 13 then end
if pc = 14 then end
if pc = 15 then end
if pc = 16 then end
end
Lösungsskizze.
(a) • Eingabe x1 = 16 produziert Ausgabe x0 = 5
(16 → 8 → 4 → 2 → 1)
• Eingabe x1 = 3 produziert Ausgabe x0 = 8
(3 → 10 → 5 → 16 → · · · → 1)
• Eingabe x1 = 42 produziert Ausgabe x0 = 9
(42 → 21 → 64 → 32 → 16 → · · · → 1)
Das Programm berechnet die Länge der Collatz-Sequenz für die positive Zahl x1 .
Die Collatz-Sequenze entsteht durch wiederholtes Anwenden der Funktion
(
x
2 wenn x ≡ 0 (mod 2)
f (x) =
3x + 1 sonst

bis der Wert 1 erreicht wird.2 Es ist unbekannt, ob die Sequenz / das Programm
immer terminiert.
(b) Lösungsvorschlag:

2
Es gibt auch Definitionen der Sequenz, bei denen die Sequenz bei 1 weitergeht und somit die Sequenz
1 → 4 → 2 → 1 unendlich oft wiederholt wird.
pc := 1
while pc 6= 0 do
if pc = 1 then x0 := x0 + 1; pc := pc + 1 end
if pc = 2 then if x1 = 1 then pc := 16 else pc := pc + 1 end end
if pc = 3 then x2 := x1 ; pc := pc + 1 end
if pc = 4 then x3 := 0; pc := pc + 1 end
if pc = 5 then x4 := 4; pc := pc + 1 end
if pc = 6 then if x2 = 1 then pc := 12 else pc := pc + 1 end end
if pc = 7 then if x2 = 0 then pc := 14 else pc := pc + 1 end end
if pc = 8 then x2 := x2 − 2; pc := pc + 1 end
if pc = 9 then x3 := x3 + 1; pc := pc + 1 end
if pc = 10 then x4 := x4 + 6; pc := pc + 1 end
if pc = 11 then pc := 6 end
if pc = 12 then x1 := x4 ; pc := pc + 1 end
if pc = 13 then pc := 1 end
if pc = 14 then x1 := x3 ; pc := pc + 1 end
if pc = 15 then pc := 1 end
if pc = 16 then pc := 0 end
end
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Hausaufgabenblatt 9

• Sei Φ := {{1}, {2, 3}, {4}}. Nach dem Abgabedatum werden wir für jede Menge
A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren.
Update: Wir korrigieren H9.1, H9.2 und H9.4
• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.
• 0∈N

Aufgabe H9.1. (Jeu de mots) 1+1+1 Punkte


Ihr Freund, der Archäologe Jasper Vazarie, hat wieder einige Programme ausgegraben,
und braucht Ihre Hilfe, um deren Bedeutung zu verstehen.
(a) Folgende Maschine wurde als Grabbeigabe (neben zwei Ringen) in Uruk gefunden.
Welche Sprache L ⊆ {a, b, c}∗ akzeptiert sie?

a/a, R b/b, R
x/x, R x/x, R x/x, R

a/a, R b/x, R /, N


0 1 2 4 5

c/x, L
a/x, R
3 /, R
b/b, L
x/x, L

(b) Überlieferungen zufolge hatte der Hochpriester von Nakbé folgendes Programm
verwendet, um seine Entscheidungen zu begründen. Welche Funktion f : N → N
berechnet es?
z := x1 + 6
while x1 6= 0 do
w := z + 0
while w 6= 0 do
y := y + 1
w := w − 1
end
x1 := x1 − 1
end
x0 := y − 91
(c) Folgende Wegbeschreibung wurde neben einer römischen Straße im heutigen Italien
entdeckt. Welche Funktion f : N → N berechnet sie?
Geata: if x1 = 0 goto Rom
y := x1
z := 1
k := y MOD 2
Labici: if k = 1 goto Ardea
y := y DIV 2
z := z ∗ 2
k := y MOD 2
goto Labici
Ardea: x1 := x1 − z
x1 := x1 ∗ 2
x0 := x0 + 1
goto Geata
Rom: HALT
Beachten Sie, dass hierbei die syntaktischen Abkürzungen von Folie 245 verwendet
wurden. Insbesondere ist x DIV y die (abgerundete) Division von x durch y, und
x MOD y der verbleibende Rest.
Lösungsskizze.
(a) Die TM sollte die Sprache {an bn+1 cn+1 : n ∈ N>0 } akzeptieren, tut es aber leider
nicht.
(b) Zuerst vereinfachen wir das Programm zu
z := x1 + 6
while x1 6= 0 do
y := y + z
x1 := x1 − 1
end
x0 := y − 91
und dann zu
z := x1 + 6
y := zx1
x0 := y − 91
Nun ist klar, dass das Programm die Funktion f (x) := max{(x + 6)x − 91, 0}
berechnet. Äquivalent lässt sich dies auch folgendermaßen schreiben:
(
x2 + 6x − 91 für x ≥ 7
f (x) :=
0 sonst

(c) Nach Labici steht in z die maximale Zahl der Form 2i , sodass x1 2−i ganzzahlig ist.
Insbesondere ist x1 2−i damit ungerade, und in der Binärdarstellung von x1 − z ist
ein Bit weniger gesetzt als in x1 . Die Zeile x1 := x1 ∗ 2 ändert daran nichts, und
wir erreichen irgendwann den Fall, in dem kein Bit von x1 gesetzt ist, ergo x1 = 0.
Es führen also alle Wege nach Rom, und x0 enthält die Anzahl der 1-Bits von x1 .
Die Funktion f ist also f (x) := | bin(x) |1 .
Aufgabe H9.2. (Gelangwhiled?) 1+1+1+1+2 Punkte
Doras Kindergartenprofessor steht leider im Stau, und die Kindergartenkinder wissen
nicht, was sie mit ihrer Zeit anfangen sollen. Ehe es einen Aufstand gibt, beschließen
Sie die Kinder zu unterhalten, indem Sie die Konvertierung von WHILE-Programmen zu
deterministischen Turingmaschinen erklären.
(a) Sei Σ := {0, 1}. Geben Sie eine TM M 0 an, die die Funktion f : Σ∗ → Σ∗ berechnet,
mit f (w) = 0 für alle w.
(b) Geben Sie eine TM M − an, die eine Funktion f : Σ∗ → Σ∗ berechnet, wobei
f (bin(i)) := bin(i − 1) für alle i ∈ N>0 gilt, und f (0) := 0.
(Wie aus der Vorlesung bekannt bezeichnet bin(i) die Binärdarstellung von i, also
das kürzeste w ∈ {0, 1}+ mit (w)2 = i.)
Im Folgenden seien die TMs aus (a) und (b) so modifiziert, dass sie auf einem beliebigen
(aber festen) Band einer k-Band-TM operieren. Wir nennen die Version von M − , die auf
Band i operiert, dec(i). Ebenso sei setzero(i) die Version von M 0 , die auf Band i arbeitet.
Zusätzlich verwenden wir inc(i) für die angepasste TM aus Beispiel 5.13 (Binär +1), und
iszero(i) für die „Band i = 0 ?“ TM von Folie 241.
(c) Seien n, i ∈ N fix. Konstruieren Sie nun eine k-Band TM add(i, n), die die Binärzahl
auf Band i um n erhöht, und eine k-Band TM sub(i, n), die die Binärzahl auf Band
i um n senkt (statt negativen Ergebnissen ergibt sich 0).
Hinweis: Hier (und im Folgenden) bietet sich die Notation zur sequentiellen Kom-
position aus der Vorlesung an (Folie 240).
(d) Konstruieren Sie eine k-Band TM copy(i, j), die das WHILE-Programm xi := xj
simuliert.
(e) Konvertieren Sie nun folgendes WHILE-Programm, das eine Funktion f : N → N
berechnet, zu einer k-Band TM:
while x1 6= 0 do
x2 := 0
while x1 6= 0 do
x1 := x1 − 2
x2 := x2 + 1
end
x1 := x2
x0 := x0 + 1
end
Lösungsskizze.
(a)
0/, R
1/, R

/0, N
0 1

(b)
0/0, R 0/0, L
1/1, R 0/1, L 1/1, L

1/1, R /, L 1/0, L


0 2 3 4

0/0, N /, R

1 5

1/1, N
0/, R
6

(c) Wir schalten einfach inc(i) (bzw. dec(i)) n-mal hintereinander:

add(i, n) : → inc(i) → inc(i) → · · · → inc(i) → (n-mal)

sub(i, n) : → dec(i) → dec(i) → · · · → dec(i) → (n-mal)


Alternativ kann man die TMs auch rekursiv definieren, z.B. add(i, 1) := inc(i) und

add(i, n) : → add(i, n − 1) → inc(i) →

(d) Wir wählen uns eine Hilfsvariable xk . Zuerst implementieren wir eine TM move(k, i, j),
die das Programm xk := xj ; xi := xi + xj ; xj := 0 implementiert:

nein
setzero(k) iszero(j) dec(j) inc(k) inc(i)
ja

Die TM für xi := xj erhalten wir nun als


−→ move(k, i, j) −→ move(i, j, k) −→
(e)

nein nein
iszero(1) setzero(2) iszero(1) sub(1, 2) inc(2)
ja ja
copy(1, 2) inc(0)

Aufgabe H9.3. (Gehe zu GOTO, gehe nicht über WHILE...) 1+1+1+1+2 Punkte
In dieser Aufgabe wollen wir uns die Konvertierung von Turingmaschinen zu GOTO-
Programmen genauer ansehen und diese auf direktem Wege implementieren. Anders
als in der Vorlesung benutzen wir also nicht, dass wir WHILE über GOTO simulieren kön-
nen. Beachten Sie insbesondere, dass sie in der folgenden Aufgabenteilen nur Makros
verwenden dürfen, die wir ohne Simulation von WHILE-Programmen darstellen können.
(a) Implementieren Sie ein GOTO-Programm addmul(x, y, b). Die Parameter x, y sind
Namen von Variablen, und b ∈ N≥2 ist eine Zahl. Das Programm soll y mit b
multiplizieren, und das Ergebnis auf x addieren.
(b) Implementieren Sie ein GOTO-Programm divmod(x, y, z, b). Die Parameter x, y, z
sind Namen von Variablen, und b ∈ N≥2 ist eine Zahl. Das Programm soll z durch
b teilen, das (abgerundete) Ergebnis in x schreiben und den Rest in y. Es soll also
b · x0 + y 0 = z und y 0 < b gelten, wobei x0 , y 0 den Wert der Variablen nach der
Ausführung bezeichnen.
Fortan können wir x := y ∗ b + z als Makro für x := z; addmul(x, y, b) schreiben (mit
x, y, z Variablen, und b ∈ N≥2 ).
Sei M = (Q, Σ, Γ, δ, q0 , , F ) eine TM, mit Γ = {} ∪ {a1 , ..., ab−1 } für ein b ∈ N≥2 .
Um die spätere Notation zu vereinfachen setzen wir a0 := . Wie in der Vorlesung wollen
wir einen Bandinhalt w ∈ Γ∗ als Zahl darstellen, wir definieren also f : Γ∗ → N über

f (ε) := 0 und f (ak w) := k + b · f (w) für k ∈ {0, ..., b − 1}, w ∈ Γ∗

(c) Ist f surjektiv? Injektiv? Begründen Sie Ihre Antworten kurz.


(d) Implementieren Sie switch(x, c1 , M1 , c2 , M2 , ..., ck , Mk ), wobei x eine Variable ist,
c1 , ..., ck ∈ Γ paarweise verschieden, und M1 , ..., Mk Marken. Falls x = f (ci w) für
ein i ∈ {1, ..., k} und w ∈ Γ∗ , soll das Programm zu Mi springen. Ansonsten soll es
halten. switch schaut sich also das erste Zeichen des Wortes, das in x gespeichert
wird, an, und springt dann zu der entsprechenden Markierung.
(e) Konstruieren Sie schließlich für jedes q ∈ Q ein Programm der Form Mq : Pq . Wie
in der Vorlesung verwenden wir x und y, um den Bandinhalt zu speichern. In Kon-
figuration (α, q, β) ∈ Γ∗ × Q × Γ∗ würde also x = f (αR ) und y = f (β) gelten.
Sei C 0 = (α0 , r, β 0 ) die eindeutige Konfiguration mit (α, q, β) →M (α0 , r, β 0 ). Nach
Ausführung von Pq soll x = f ((α0 )R ) und y = f (β 0 ) gelten, und Programm Pr aus-
geführt werden. Falls ein solches C 0 nicht existiert, soll das Programm stattdessen
anhalten. Intuitiv soll Pq also einen Schritt von M aus Zustand q simulieren.
Sei {q0 , ..., qn } := Q. Mit folgendem Programm können wir nun M simulieren:

Mq0 : Pq0 ; Mq1 : Pq1 ; ··· Mqn : Pqn

Hinweis: Sie können δ1 , δ2 , δ3 verwenden, um auf die einzelnen Komponenten von δ


zuzugreifen, es gilt also δ(q, a) = (δ1 (q, a), δ2 (q, a), δ3 (q, a)) für q ∈ Q, a ∈ Γ.
Lösungsskizze.
(a) Um Seiteneffekte zu vermeiden, kopieren wir y erst in eine neue Variable y 0 .
y 0 := y
loop: if y 0 = 0 goto end
x := x + b
y 0 := y 0 − 1
goto loop
end: HALT
(b) Wir implementieren divmod(x, y, z, b) über wiederholte Subtraktion.
x := 0
y := z
loop: w := y − (b − 1)
if w = 0 goto end
x := x + 1
y := y − b
goto loop
end: HALT
(c) Die Funktion f ist surjektiv, da jede natürliche Zahl bezüglich jeder Basis b ∈ N≥2
dargestellt werden kann. f ist jedoch nicht injektiv, da f (ε) = 0 = f (). Allgemein
lässt sich  vorne hinzufügen, ohne f zu ändern.
(d) Das erste Zeichen ist einfach der Rest bei Division durch b. Wir schreiben γ(ai ) := i
für ai ∈ Γ.
divmod(w1 , w2 , x, b)
if w2 = γ(c1 ) goto M1
if w2 = γ(c2 ) goto M2
..
.
if w2 = γ(ck ) goto Mk
HALT
(e) Zuerst implementieren wir ein Programm deltaq (x, y, ML , MR , MN ), das x auf das
i ∈ {0, ..., b − 1} setzt, sodass δ2 (q, ay ) = ai gilt, und danach zu Mδ3 (q,ay ) springt.
Falls δ(q, ay ) undefiniert ist, hält das Programm stattdessen. Seien dazu c1 , ..., ck ∈
Γ die Zeichen, sodass δ(q, ci ) definiert ist, für i ∈ {1, ..., k}.
switch(y, c1 , M1 , ..., ck , Mk )
Mq1 : x := δ2 (q, a1 ); goto Mδ3 (q,a1 )
Mq2 : x := δ2 (q, a2 ); goto Mδ3 (q,a2 )
..
.
Mqk : x := δ2 (q, ak ); goto Mδ3 (q,ak )
Das eigentliche Programm ist nun wie folgt.
Mq : divmod(y, c, y, b)
deltaq (c0 , c, MqL , MqR , MqN )
MqL : y := y ∗ b + c0
divmod(x, c00 , x, b)
y := y ∗ b + c00
goto Mq0
MqR : x := x ∗ b + c0
goto Mq0
MqN : y := y ∗ b + c0
Mq 0 : switch(c, c1 , Mδ1 (q,c1 ) , ..., ck , Mδ1 (q,ck ) )

Aufgabe H9.4. (Permutation) 1+2 Punkte


Sei Σ := {a, b}. Für ein Wort w ∈ Σ∗ mit w = w1 w2 ...wn definieren wir nun die Menge
der Permutationen von w als

Perm(w) := {wf (1) wf (2) ...wf (n) | f : {1, ..., n} → {1, ..., n} bijektiv}
Beispielweise gilt Perm(abaa) = {aaab, aaba, abaa, baaa}. Wir erweitern dies auf Spra-
chen, für L ⊆ Σ∗ gilt also Perm(L) := w∈L Perm(w).
S

(a) Zeigen oder widerlegen Sie: Für jede Sprache L gibt es eine TM M , die Perm(L)
akzeptiert.
(b) Zeigen Sie, dass Perm(L) kontextfrei ist, wenn L regulär ist.
Lösungsskizze. (a) Die Aussage ist falsch. Wir zeigen, dass es überabzählbar viele Spra-
chen Perm(L) gibt. Daraus folgt die Aussage, denn – wie aus der Vorlesung bekannt –
es gibt nur abzählbar viele TMs, und jede TM akzeptiert genau eine Sprache.
Zuerst beobachten wir, dass Perm(L) = L für L ⊆ {a}∗ . Es genügt also zu zeigen,
dass es überabzählbar viele unäre Sprachen gibt. Eine Sprache L ⊆ {a}∗ können wir
identifizieren mit einer Funktion f : N → {0, 1}, die für jedes n ∈ N angibt, ob an ∈ L.
Nach Satz 5.8 ist die Menge der Funktionen f : N → {0, 1} überabzählbar.
(b) Hier gibt es zwei Ansätze: Man kann aus einem DFA M für L einen PDA M 0 direkt
konstruieren. M 0 hat als Zustände genau die Zustände von M , und verwendet den Stapel
als Zähler. Es gibt folgende Transitionen:
• M 0 kann ein a einlesen, und den gleichen Übergang wie M ausführen.
• M 0 kann ein b einlesen, und den Zähler um 1 dekrementieren.
• M 0 kann den b-Übergang von M ausführen, und den Zähler um 1 erhöhen.
• Wenn M 0 in einem Finalzustand von M ist und der Zähler auf 0 steht, kann M 0
akzeptieren.
Statt dies formal zu beweisen werden wir aber eine andere Lösung angeben, die Aufga-
be H8.5 verwendet.
Sei f : Σ∗ → N2 mit f (w) := (|w|a , |w|b ). Wir erweitern f auf Sprachen und setzten
f (L) := {f (w) : w ∈ L} für L ⊆ Σ∗ . Offensichtlich gilt w ∈ Perm(L) ⇔ f (w) ∈ f (L),
da es nur darauf ankommt, wie viele Zeichen in w vorhanden sind. Für einen regulären
Ausdruck s schreiben wir außerdem F (s) := f (L(s)).
Sei s nun ein regulärer Ausdruck. Wir zeigen nun, dass F (s) semilinear ist, indem wir
mit struktureller Induktion über s beweisen, dass es reguläre Ausdrücke s1 , ..., sk gibt,
sodass F (si ) linear ist und s ≡ s1 | ... | sk .
• s = ∅: Hier gilt F (s) = ∅, wir setzten also k := 0.
• s =  ∨ s = a ∨ s = b: Die Mengen F (s) = {(0, 0)}, F (s) = {(1, 0)} und F (s) =
{(0, 1)} sind bereits linear.
• s = t | u: Wir wählen t1 , ..., tk und u1 , ..., ul entsprechend der Induktionsannahme,
es gilt also s ≡ t1 | ... | tk | u1 | ... | uk und somit die Aussage für s.
• s = tu: Hier gilt s ≡ t1 u1 | t1 u2 | ... | t1 ul | t2 u1 | ... | tk ul . Es genügt also zu zeigen,
dass für beliebige i, j die Menge F (ti uj ) = {x + y : x ∈ F (ti ), y ∈ F (uj )} linear ist.
Da (nach Induktionsannahme) F (ti ) und F (uj ) linear sind, können wir Vektoren
r, p1 , ..., pj , r0 , p01 , ..., p0k ∈ N2 mit

F (ti ) = {r + λ1 p1 + ... + λm pm : λ ∈ Nm }
F (uj ) = {r0 + λ01 p01 + ... + λ0n p0n : λ0 ∈ Nn }

wählen. (Dies folgt aus der Definition von linear.) Dann gilt

F (ti uj ) = {r + r0 + λ1 p1 + ... + λm pm + λ01 p01 + ... + λ0n p0n : λ ∈ Nm , λ0 ∈ Nn }


Somit ist F (ti uj ) ebenfalls linear. Insbesondere haben wir auch gezeigt, dass F (tu)
linear ist, wenn F (t) und F (u) linear sind. (∗)
• s = t∗ : Aus t ≡ t1 | ... | tk folgt t∗ ≡ (t∗1 ...t∗k )∗ . Wenn wir also zeigen können, dass
F (t∗ ) linear ist, wenn F (t) linear ist, dann ist F (t∗i ) für jedes i linear, nach (∗) ist
somit F (t∗1 ...t∗k ) linear, und schließlich auch F (t∗ ).
Sei also F (t) linear. Wir wählen wieder r, p1 , ..., pj ∈ N2 mit

F (t) = {r + λ1 p1 + ... + λm pm : λ ∈ Nm }

Da jedes Wort in t∗ die Konkatenation von endlich vielen Wörtern aus t ist, folgt

F (t∗ ) = {λ0 r + λ1 p1 + ... + λm pm : λ0 ∈ N, λ ∈ Nm }

Also ist F (t∗ ) linear.


Wir haben gezeigt, dass F (s) für jeden regulären Ausdruck s semilinear ist. Damit ist
aus f (L) für jede reguläre Sprache L semilinear, und Perm(L) ist nach Aufgabe H8.5
kontextfrei.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Übungsblatt 10

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü10.1. (Wichtige Begriffe & Kahoot)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• abzählbar / überabzählbar
• berechenbar / unberechenbar
• rekursiv aufzählbar
• entscheidbar
• semi-entscheidbar
• Reduktion (Beispiel: A ≤ B, sprich: "A ist reduzierbar auf B")
• Satz von Rice
• terminierend
Falls Sie das Kahoot aus der Vorlesung verpasst haben: Spielen Sie es jetzt! Link1

Individualaufgabe Ü10.2. (Entscheidbarkeit vs. Berechenbarkeit)


Ordnen Sie die folgenden Satzanfänge den Satzenden so zu, dass richtige Aussagen ent-
stehen. Sei dazu A, B ⊆ {0, 1}∗ :
(a) Die Funktion χA ist berechenbar, (i) wenn A ≤ B gilt und B entscheidbar ist.
(b) A ist entscheidbar, (ii) wenn A entscheidbar ist.
(c) B ist nicht entscheidbar, (iii) wenn A ≤ B gilt und A nicht entscheid-
bar ist.
Lösungsskizze. (a) → (i)/(ii), (b) → (i)/(ii), (c) → (iii).
Individualaufgabe Ü10.3. (Entscheidbarkeit)
Überprüfen Sie, ob die folgenden Behauptungen korrekt oder inkorrekt sind. Begründen
Sie dann Ihre Antworten wie folgt: Wenn L entscheidbar ist, beschreiben Sie einen Al-
gorithmus, der die charakteristische Funktion χL berechnet. Wenn L unentscheidbar ist,
leiten Sie einen Widerspruch zu einem Ergebnis der Vorlesung ab.
1
Falls der Link nicht mehr funktioniert, teilen Sie dies bitte der Übungsleitung mit. Die Teilnehmeran-
zahl ist leider auf 2000 begrenzt.
(a) Wenn A und B entscheidbare Sprachen sind, dann ist A ∩ B entscheidbar.
(b) Wenn A und A ∪ B entscheidbar sind, dann ist B entscheidbar.
Lösungsskizze. Für diese Aufgabe gibt es eine Videolösung: Link
(a) Korrekt. Wenn A und B entscheidbar sind, dann sind die charakteristischen Funk-
tionen χA und χB berechenbar. Wir definieren
(
1, wenn χA = 1 ∧ χB = 1,
χA∩B =
0 sonst.

Diese Funktion ist intuitiv berechenbar und eine charakteristische Funktion von
A ∩ B, da

χA∩B (w) = 1 ⇔ χA (w) = 1 ∧ χB (w) = 1 ⇔ w ∈ A ∧ w ∈ B ⇔ w ∈ A ∩ B.

Folglich ist die Menge A ∩ B entscheidbar.

Alternativ mit Turingmaschinen:


Sei TA DTM, die A entscheidet, TB DTM, die B entscheidet. DTM zu A ∩ B:
Gegeben x, berechne TA [x]. Falls TA [x] mit 0 auf dem Band hält, lehne x ab,
ansonsten berechne TB [x]. Hält TB [x] mit 0 auf dem Band, lehne x ab, sonst
akzeptiere x. Da TA , TB die jeweiligen Mengen entscheiden, terminieren beide
DTM, womit auch die DTM zu A∩B stets mit dem korrekten Ergebnis terminiert.
Damit ist A ∩ B entscheidbar.
(b) Inkorrekt. Sei B = H0 = {w ∈ {0, 1}∗ | Mw []↓} ( {0, 1}∗ das Halteproblem auf
leerem Band und A = {0, 1}∗ . Dann sind A und A ∪ B = {0, 1}∗ entscheidbar, aber
B nicht.

Übung und Nachbereitung

Fokusaufgabe Ü10.4. (Reduktion)


Erinnerung: H := {w#x : w, x ∈ {0, 1}∗ , Mw [x]↓} (Allgemeines Halteproblem) und
H0 := {w ∈ {0, 1}∗ | Mw []↓} (Halteproblem auf leerem Band)
(a) Sei Huvu := {w#u#v : w, u, v ∈ {0, 1}∗ , Mw [uvu]↓}.
Zeigen Sie: Huvu ist unentscheidbar, da H ≤ Huvu .
(b) Sei HΣ∗ := {w ∈ {0, 1}∗ | ∀x ∈ Σ∗ : Mw [x]↓}.
Zeigen Sie: HΣ∗ ist unentscheidbar, da H0 ≤ HΣ∗ .

Übungsaufgabe Ü10.5. (Allgemeine Reduktion)


Entscheiden Sie, ob folgende Aussagen korrekt oder inkorrekt sind, und begründen Sie
Ihre Antwort, indem Sie einen Beweis bzw. ein passendes Gegenbeispiel angeben. Sei
Σ := {0, 1}.
(a) ∀A ⊆ Σ∗ : A ≤ Σ∗
(b) ∀A, B ⊆ Σ∗ : A ≤ B ⇐⇒ A≤B
(c) ∀A, B, C ⊆ Σ∗ : A ≤ B ∧ B ≤ C =⇒ A ≤ C
Lösungsskizze.
(a) Falsch. Sei A = ∅. Damit A = Σ∗ . Dann muss für eine Reduktionsfunktion f gelten:
∀x ∈ A. f (x) 6∈ Σ∗ . Eine solche Funktion f existiert aber nicht.
(b) Wahr. Gelte A ≤ B. Dann existiert ein totales und berechenbares f mit: ∀x ∈
Σ∗ . x ∈ A ⇔ f (x) ∈ B. Somit gilt auch: ∀x ∈ Σ∗ . x ∈ A ⇔ f (x) ∈ B. Daraus folgt
dann A ≤ B. Die Rückrichtung geht analog.
(c) Wahr. Seien f und g Reduktionen von A ≤ B und B ≤ C. Sei nun h(x) = g(f (x)).
h ist total und berechenbar, da f und g total und berechenbar sind. Sei x ∈ A
beliebig. Dann gilt f (x) ∈ B und h(x) = g(f (x)) ∈ C. Sei nun x 6∈ A beliebig.
Dann gilt f (x) 6∈ B und damit h(x) = g(f (x)) 6∈ C. Somit ist h eine geeignete
Reduktion.

Übungsaufgabe Ü10.6. (Satz von Rice)


Sei Σ ein beliebiges Alphabet. Entscheiden Sie, ob die folgenden Mengen unentscheidbar
sind und begründen Sie Ihre Antworten mit dem Satz von Rice (falls anwendbar). Geben
Sie dabei die Menge F genau an und argumentieren Sie, warum die Menge nicht trivial
ist (d.h. weder alle berechenbare Funktionen enthält noch leer ist).
(a) L1 = w ∈ {0, 1}∗ | {u ∈ Σ∗ | ϕw (u) = 1 ist regulär}


(b) L2 = {w ∈ {0, 1}∗ | ∀n ∈ N0 : ϕw (n) = n · (n + 23) + 42}


(c) L3 = {w ∈ {0, 1}∗ | ∀x ∈ Σ∗ : ϕw (x) 6= |w|}
(d) L4 = {w ∈ {0, 1}∗ | ∀p ∈ N0 . (|w| > p ∧ p ist prim) =⇒ wp = 0}
Bei (d) bezeichnet wp ∈ Σ den Buchstaben an der p-ten Stelle im Wort w .
Lösungsskizze.
(a) Sei F = {f | f ist berechenbar ∧ f −1 (1) ist regulär}. Sei nun g, h mit g(w) := 1
und
(
1 falls ∃i ≥ 0. w = 0i 1i
h(w) :=
0 sonst
zwei berechenbare Funktionen. Dann gilt g ∈ F und h 6∈ F. Somit ist F nicht die
Menge aller berechenbarer Funktionen. Damit folgt aus dem Satz von Rice, dass
L1 unentscheidbar ist.
(b) Sei F = {f | f ist berechenbar ∧ ∀n ∈ N0 : f (n) = n · (n + 23) + 42}. Dann gilt
für die konstante Nullfunktion g, dass g ∈/ F. Somit ist F nicht die Menge aller
berechenbarer Funktionen. Weiterhin ist F auch nicht leer, da das Polynom in der
Definition berechenbar ist. Somit ist nach Satz von Rice L2 unentscheidbar.
(c) Die Menge ist unentscheidbar, jedoch ist der Satz von Rice nicht anwendbar. Für
den Satz von Rice müsste es eine nicht-triviale Menge F an berechenbaren Funk-
tionen geben, sodass L3 = {w ∈ {0, 1}∗ | ϕ ∈ F }. Das Problem ist nun, das zwei
Turingmaschinenkodierungen verschiedener Längen existieren können, sodass die
Maschinen dieselbe Funktion berechnen, die eine Kodierung die Bedingung erfüllt,
die andere jedoch nicht. Formaler:
Je nach Kodierungsfunktion können v, w ∈ {0, 1}∗ mit |v| 6= |w| existieren, sodass
ϕ = ϕ, ϕ(x) = |w| für ein x ∈ Σ∗ und ϕ(x) 6= |v| für alle x ∈ Σ∗ . Somit ist weder
ϕ(= φv ) ∈ F noch ϕ(= φw ) ∈/ F und somit ist F nicht definierbar.
Der Beweis für die Unentscheidbarkeit kann durch Reduktion von H0 erfolgen. Idee
(muss nicht besprochen werden): Länge der TM (|w|) auf zweitem Band speichern;
Eingabe löschen; TM Mw [] simulieren; erstes Band löschen; |w| ausgeben
(d) L4 ist entscheidbar. Eine TM kann alle Primzahlen kleiner |w| berechnen und an
diesen Stellen in w prüfen, ob wp = 0 gilt.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Hausaufgabenblatt 10

• Diese Woche werden alle Aufgaben korrigiert.


• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.

Aufgabe H10.1. (Auf- und Ab) 0.5+0.5+0.5+0.5+0.5+0.5 Punkte


Wir betrachten folgende Eigenschaften: (1) abzählbar, (2) rekursiv aufzählbar, (3) semi-
entscheidbar, und (4) entscheidbar. Geben Sie für jede der folgenden Mengen an, welche
der vier Eigenschaften erfüllt sind. Bitte beachten Sie, dass (2-4) nur auf Sprachen defi-
niert sind.
(a) ∅
(b) {w ∈ R : w < √1 }
2
(c) {w ∈ ∗
{0, ..., 9} : (0.w) < √1 }
10 2
(d) {w ∈ {0, 1}∗ : {1, 10, 111} ∩ L(Mw ) 6= ∅}
(e) {w ∈ {0, 1}∗ | ∀v ∈ L(Mw ) : (7(v)2 − 31)2 > 8}
(f) {w ∈ {0, 1}∗ : Mw hält für ein v ∈ {0, 1}∗ in |v| Schritten}
Eine Begründung ist nicht erforderlich. Für (c) verwenden wir die Notation aus H5.6.
Sie können folgende Tabelle verwenden:

(1) (2) (3) (4)


(a) · · · ·
(b) · · · ·
(c) · · · ·
(d) · · · ·
(e) · · · ·
(f) · · · ·
Lösungsskizze.
(1) (2) (3) (4)
(a) × × × ×
(b) · · · ·
(c) × × × ×
(d) × × × ·
(e) × × × ×
(f) × × × ·
Anmerkungen: (2) und (3) sind äquivalent. (c) Die Sprache kann man entscheiden,
indem man die Eingabe quadriert und überprüft, ob sie kleiner als 21 ist. (d) Für ein
gegebenes w kann man Mw auf 1, 10 und 111 gleichzeitig laufen lassen – wenn eine
dieser Eingaben terminiert, akzeptieren wir. (e) Die Ungleichung (7x − 31)2 ≤ 8 hat
keine ganzzahlige Lösung, da das Polynom sein Minimum bei 4 < 31 7 < 5 annimmt, aber
(7 · 4 − 31)2 = 9 und (7 · 5 − 31)2 = 16 beide größer als 8 sind. Die Eigenschaft ist also
immer wahr. (f) Wir können über alle Wörter v iterieren und Mw jeweils für |v| Schritte
simulieren, die Sprache ist also semi-entscheidbar. Aber nicht entscheidbar (man kann
von H0 reduzieren, indem man die Eingabe ignoriert).
Aufgabe H10.2. (Rote Zahlen schreiben) 3+2 Punkte
Heute ist „Tag der offenen Tür“ in Theos Schule und Dora besucht ihn. Es geht um
Farbenzahlen, und besonders um die Farbe Rot. Theo hat leider letzte Woche nicht so
gut aufgepasst, da er damit beschäftigt war, die Sandkörner in seinem Sandkasten zu
zählen. Er kann sich nur noch daran erinnern, dass eine Zahl genau dann rot ist, wenn
ihr größter echter Teiler rot ist. Was aber mit Zahlen passiert, die keine echten Teiler
haben, weiß er nicht. Dora möchte ihm helfen, hat aber in der Kindergartenvorlesung
bisher nur gelernt, welche Primzahlen rot sind. Können Dora und Theo zusammen die
gestellten Aufgaben lösen?
Sei R ⊆ N≥2 die Menge der roten Zahlen, und P die Menge der Primzahlen. Zur
Erinnerung: Für x, y ∈ N≥1 sagen wir „x ist ein Teiler von y“, oder x | y, wenn es ein
k ∈ N mit xk = y gibt. Wenn zusätzlich 1 < x < y, dann ist x ein echter Teiler von y.
Falls x der größte echte Teiler von y ist, gilt also y ∈ R ⇔ x ∈ R.
(a) Theo möchte sich ein Verfahren ausdenken, mit dem er die Aufgaben lösen kann.
Schreiben Sie also ein WHILE-Programm, das die charakteristische Funktion χR
berechnet (siehe Definition 5.28). Verwenden Sie den zusätzlichen Befehl dora; nach
Ausführung von dora wird x0 auf 1 gesetzt, falls x1 ∈ R ∩ P , sonst auf 0. Erklären
Sie ihren Ansatz in natürlicher Sprache.
Sie dürfen alle Makros aus der Vorlesung verwenden, sowie eigene definieren. Für
eine beliebige entscheidbare Menge M und Variablennamen x, y dürfen Sie zudem
x := y ∈ M als Makro schreiben, das x auf χM (y) setzt. Sie dürfen auch x := y ∈
/M
verwenden, mit analoger Bedeutung.
(b) Zeigen Sie, dass R reduzierbar auf R ∩ P ist, indem sie eine berechenbare, totale
Funktion f : N → N angeben, sodass x ∈ R ⇔ f (x) ∈ R ∩ P für jedes x ∈ N gilt.
Lösungsskizze. (a) Jede Zahl x1 ∈ N≥2 ist entweder eine Primzahl, oder besitzt einen
echten Teiler. Solange x1 also keine Primzahl ist, ersetzten wir es durch seinen größten
Teiler. Dies beeinflusst nicht, ob x1 ∈ R. Danach können wir einfach dora aufrufen.
Um uns das Leben leichter zu machen, definieren wir das Makro while x > n do S end
für Variablennamen x, n ∈ N und Programm S als
s := x − n
while s 6= 0 do
S
s := x − n
end
Hier ist s eine temporäre Variable, die nirgendwo sonst verwendet wird. Unser Programm
ist nun
s := x1 ∈/ P ∪ {0, 1}
while s 6= 0 do
z := x1 − 1
while z > 1 do
t := x1 MOD z
if t = 0 then
x1 := z
z := 0
end
z := z − 1
end
s := x1 ∈/P
end
dora
(b) Eine einfache Lösung ist, f als die Funktion zu definieren, die von dem WHILE-
Programm aus (a) ausgerechnet wird, wenn man die letzte Zeile (mit dem dora Befehl),
ersetzt durch x0 := x1 . Dann ist f offensichtlich berechenbar. Außerdem ist f total, da
das Programm immer terminiert (die innere Schleife kann für höchstens z Iterationen
laufen, die äußere höchstens für x1 ). Da das ursprüngliche Programm (mit dem dora-
Befehl) die Funktion χR berechnet, muss das modifizierte Programm eine Funktion f
berechnen, die x ∈ R ⇔ f (x) ∈ R ∩ P erfüllt.
Als alternative Lösung können wir uns überlegen, was genau das wiederholte Berech-
nen des größten echten Teilers bewirkt. Sei x ∈ N≥2 beliebig, und y, z jeweils der kleinste
und der größte echte Teiler von x. Wir behauptet nun yz = x. Dies ist äquivalent zu
z = x/y. Da y ein Teiler von x ist, gilt x/y ∈ N, und da (x/y) · y = x ist x/y auch
ein Teiler von x. Falls es einen kleineren Teiler gäbe, also z < x/y, dann wäre x/z auch
ein Teiler von x, und x/z > x/(x/y) = y. Aber y ist der größte Teiler, dies ist also ein
Widerspruch und x/y = z (und somit unsere Behauptung) gilt.
Nun ist z notwendigerweise eine Primzahl (sonst gäbe es einen kleineren echten Teiler),
und zwar die kleinste Primzahl, die x teilt. Wenn wir x als Produkt von Primzahlen
schreiben (nach Größe sortiert), also x = p1 ·2 ·... · pk für p1 , ..., pk ∈ P mit p1 ≤ p2 ≤
... ≤ pk , dann ist z = p1 und y = p2 · ... · pk . Nun lässt sich leicht sehen, dass die
wiederholte Anwendung dieses Prozesses pk als Ergebnis hat, also die größte Primzahl,
die x teilt.
Wir definieren unsere Reduktionsfunktion f : N → N nun wie folgt:
(
x für x ∈ P ∪ {0, 1}
f (x) :=
max{y ∈ P : y | x} sonst

Aufgabe H10.3. (Semi-Entscheidbarkeit) 2 Punkte


Sei Σ := {0, 1}. Zeigen Sie, dass die Sprache L, definiert als

{w ∈ Σ∗ : Mw hält für zwei unterschiedliche Eingaben in gleich vielen Schritten},

semi-entscheidbar ist. Sie dürfen ohne Beweis verwenden, dass es berechenbare, surjektive
Funktionen g : N → Σ∗ und h : N → Nk gibt, für beliebiges k ∈ N.
Hinweise: Es ist nicht notwendig (und oft unerwünscht), eine TM formal präzise
anzugeben. Achten Sie jedoch darauf, Ihre Idee genau zu schildern, sodass einem Leser
klar ist, wie eine entsprechende TM auszusehen hätte.
Lösungsskizze. Sei w ∈ Σ∗ beliebig. Wir schreiben Mw [v]↓n für Mw hält für Eingabe v
in n Schritten. Nun können w ∈ L äquivalent schreiben als

∃(u, v, n) ∈ Σ∗ × Σ∗ × N : u 6= v und Mw [u]↓n und Mw [v]↓n

Gegeben u, v, n lassen sich Mw [u]↓n und Mw [v]↓n leicht überprüfen, indem man Mw auf
der entsprechenden Eingabe für n Schritte simuliert. Unser Programm ist also
for all (u, v, n) ∈ Σ∗ × Σ∗ × N
if u 6= v ∧ Mw [u]↓n ∧ Mw [v]↓n return
Es verbleibt noch, zu argumentieren, dass wir über alle Elemente Σ∗ × Σ∗ × N iterieren
können. Es genügt, eine surjektive, berechenbare Funktion f : N → Σ∗ × Σ∗ × N zu
finden: diese konstruieren wir als f (n) := (g(h1 (n)), g(h2 (n)), h3 (n)), wobei g, h wie in
der Aufgabenstellung definiert sind, mit k := 3.
Aufgabe H10.4. (Alle Register ziehen) 0.5+0.5+1 Punkte
Als es gerade den Oeehthto-Gürtel umrundet, wird Tyx’Hxli E’Oozrts Raumschiff von
Piraten – geführt vom berüchtigten Dokh’Toa Ivl’Zpaasa – angegriffen. Tyx kann zwar
gerade noch entfliehen, steht aber nun vor einem neuen Problem: Sein Bordcomputer
wurde schwer beschädigt und fast alle Speicherbänke wurden zerstört. Ohne dessen Re-
chenkapazität kann Tyx aber unmöglich die quantenstatischen absolutitätstheoretischen
Berechnungen ausführen, die für einen Hyperraumsprung notwendig sind. Können Sie
Tyx helfen?
Unser Ziel ist es, mit einem GOTO-Programm, das nur auf die Variablen x0 und x1
zugreifen darf, ein beliebiges Programm zu simulieren. Wir definieren also die Tyx-GOTO -
Programme als die GOTO-Programme, die nur die Variablen x0 und x1 verwenden.
(a) Beschreiben Sie, wie Sie Zahlen y1 , ..., yk ∈ N über eine einzelne Zahl x darstellen
können. Geben Sie also eine berechenbare, injektive Funktion f : Nk → N an, und
beschreiben sie, wie sich f (y1 , ..., yk ) verändert, wenn sie einzelne Komponenten
von (y1 , ..., yk ) inkrementieren oder dekrementieren.
(b) Implementieren Sie nun ein Tyx-GOTO Makro für yi := yi + n, mit i ∈ {1, ..., k} und
n ∈ Z. Wenn vorher x0 = 0 und x1 = f (y1 , ..., yk ) gilt (für y1 , ..., yk ∈ N), soll nach
der Ausführung x0 = 0 und x1 = f (y1 , ..., yi−1 , max{yi + n, 0}, yi+1 , ..., yk ) gelten.
(c) Zeigen Sie, dass das allgemeine Halteproblem für Tyx-GOTO Programme unent-
scheidbar ist, also die Sprache

L := {P #i : P, i ∈ {0, 1}∗ ∧ P ist Tyx-GOTO Programm und hält auf (i)2 }

Lösungsskizze. (a) Seien p1 , ..., pk die ersten k Primzahlen. Dann definieren wir f als

f (y1 , ..., yk ) := py11 · py22 · ... · pykk

Es ist klar, dass f berechenbar ist. Da die Primfaktorzerlegung einer Zahl eindeutig ist,
ist f injektiv. Wenn wir yi inkrementieren (bzw. dekrementieren) müssen wir f mit pi
multiplizieren (bzw. durch pi teilen).
(b) Vorab implementieren wir ein Makro für xi := 0:

loop : if xi = 0 goto end


xi := xi − 1
goto loop
end : x0 := x0

Wir implementieren das Makro für die Spezialfälle n = ±1, die übrigen Fälle erhält
man, indem man wiederholt inkrementiert bzw. dekrementiert. Für n = 1 müssen wir
x1 einfach mit der Konstanten pi multiplizieren.

loop : x1 := x1 − 1
if x1 = 0 goto end
x0 := x0 + pi
goto loop
end : x1 := x0
x0 := 0

Für n = −1 ist das Vorgehen etwas komplizierter. Hier müssen wir überprüfen, ob x1
durch pi teilbar ist. Falls dies nicht der Fall ist, gehen wir zu fail und machen so die
vorherigen Veränderungen rückgängig.

loop : if x1 = 1 goto fail


..
.
if x1 = pi − 1 goto fail
x1 := x1 − pi
if x1 = 0 goto end
x0 := x0 + 1
goto loop
end : x1 := x0
x0 := 0
goto done
fail : x1 := x1 + pi
x0 := x0 − 1
if x0 = 0 goto done
goto fail
done : x0 := x0

(c) Wir wollen zunächst ein Makro iszero(yi ) implementieren. Wenn vorher x0 = 0 und
x1 = f (y1 , ..., yk ) gilt (für y1 , ..., yk ∈ N), soll nach der Ausführung x0 auf 1 gesetzt
werden, falls yi = 0, sonst auf 0. Dafür müssen wir nur unser Programm für n = −1 aus
(b) leicht anpassen:

loop : if x1 = 1 goto fail


..
.
if x1 = pi − 1 goto fail
x1 := x1 − pi
if x1 = 0 goto end
x0 := x0 + 1
goto loop
end : x1 := x0
x0 := 0
yi := yi + 1
goto done
fail : x1 := x1 + pi
x0 := x0 − 1
if x0 = 0 goto zero
goto fail
zero : x0 := 1
done : x0 := x0
Abhängig davon, ob wir in fail oder done landen, setzten wir x0 . (Wir verwenden x0 := 1
als Makro für x0 := 0; x0 := x0 + 1.) Im letzteren Fall müssen wir außerdem die Verän-
derung an x1 rückgängig machen. Nun können wir ein Makro für „if yi = 0 goto M “
implementieren:
iszero(yi )
if x0 = 0 goto skip
x0 := 0
goto M
skip : x0 := x0
Um beliebige GOTO-Programme simulieren zu können, implementieren wir yi := yj für
j 6= i als Makro. Hierfür ist yk eine temporäre Variable, die sonst nicht verwendet wird.
drain : if yj = 0 goto flood
yk := yk + 1
yj := yj − 1
goto drain
flood : if yk = 0 goto done
yk := yk − 1
yi := yi + 1
yj := yj + 1
goto flood
done : x0 := x0
Schließlich benötigen wir noch ein Makro für „if yi = n goto M “:
yk := yi − (n − 1)
if yk = 0 goto skip
yk := yk − 1
if yk = 0 goto M
skip : x0 := x0
Nun können wir beliebige GOTO-Programme simulieren. Wir zeigen, dass L unent-
scheidbar ist, indem wir vom Halteproblem auf leerem Band, H0 , reduzieren. Sei w ∈
{0, 1}∗ also beliebig. Mir der Prozedur aus der Vorlesung konvertieren wir Mw in ein
GOTO-Programm P . Insbesondere terminiert P auf Eingabe 0 genau dann, wenn Mw auf
leerem Band hält. Wir ersetzen nun jede Variable xi in P durch yi und erhalten P 0 . Dies
konvertieren wir nun mit obigen Makros zu einem Tyx-GOTO Programm P 00 . Wenn wir
P 00 mit Eingabe x1 := 1 laufen lassen, simuliert es P 0 auf Eingabe y1 = y2 = ... = yk = 0,
und terminiert also genau dann, wenn Mw auf leerem Band hält.
Somit haben wir H0 auf L reduziert. Da H0 unentscheidbar ist, ist es auch L.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Übungsblatt 11

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü11.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• Postsche Korrespondenzproblem (PCP)
• Reduktion
• berechenbar
• totale Funktion
• entscheidbar / unentscheidbar
• semi-entscheidbar (bzw. rekursiv aufzählbar)

Individualaufgabe Ü11.2. (Kahoot)


Falls Sie das Kahoot aus der Vorlesung verpasst haben: Spielen Sie es jetzt! Link1

Individualaufgabe Ü11.3. (HN EQ )


Sei Σ ein beliebiges Alphabet. Zeigen Sie: Es ist unentscheidbar zu prüfen, ob für zwei
als Eingabe gegebene Turing-Maschinen die eine auf allen Eingaben genau dann hält,
wenn die andere nicht hält. Formaler: Zeigen Sie, die Menge

HN EQ := w1 #w2 | w1 , w2 ∈ {0, 1}∗ und ∀x ∈ Σ∗ . Mw1 [x]↓ ⇐⇒ ¬Mw2 [x]↓




ist unentscheidbar.
Lösungsskizze. Für diese Aufgabe gibt es eine Videolösung: Link
Wir reduzieren das Halteproblem auf leerem Band H0 auf HN EQ . Dabei gilt zu beach-
ten, dass die Reduktion total, berechenbar und korrekt sein muss.
Reduktion von H0 : Sei w⊥ die Kodierung einer Turing-Maschine, die auf keiner Eingabe
hält. Sei w ∈ {0, 1}∗ beliebig. Wir berechnen zunächst die Kodierung w0 einer Turing-
Maschine, die bei jeder Eingabe das Band löscht und dann Mw [] ausführt. Anschließend
1
Falls der Link nicht mehr funktioniert, teilen Sie dies bitte der Übungsleitung mit. Die Teilnehmeran-
zahl ist leider auf 2000 begrenzt.
geben wir w0 #w⊥ zurück.
Die Reduktion ist total: Für jede Eingabe w wird die Ausgabe w0 #w⊥ erzeugt.
Die Reduktion ist berechenbar: Die En- und Dekodierungsfunktionen für Turing-Maschinen
sind berechenbar. Außerdem kann eine TM alle Zeichen auf dem Band, die nicht dem
Leerzeichen entsprechen, durch geeignete Übergänge anfangs überschreiben.
Die Reduktion ist korrekt:

w ∈ H0 ⇐⇒ Mw []↓ (Def. H0 )

⇐⇒ ∀x ∈ Σ . Mw0 [x]↓ (Mw0 führt immer Mw [] aus)
∗ 
⇐⇒ ∀x ∈ Σ . Mw0 [x]↓ und ¬Mw⊥ [x]↓ (Mw⊥ hält nie)
0
⇐⇒ w #w⊥ ∈ HN EQ (Def. HN EQ )

Übung und Nachbereitung

Fokusaufgabe Ü11.4. (Unentscheidbare Typ-2 Probleme)


In der Vorlesung haben wir folgende Probleme für kontextfreie Grammatiken G1 , G2
über einem Alphabet Σ kennengelernt:
h1i Ist L(G1 ) ∩ L(G2 ) = ∅ ? h4i Ist L(G1 ) ⊆ L(G2 ) ?
h2i Ist |L(G1 ) ∩ L(G2 )| < ∞ ? h5i Ist L(G1 ) = L(G2 ) ?
h3i Ist L(G1 ) ∩ L(G2 ) kontextfrei?
Von h1i wurde in der Vorlesung gezeigt, dass es unentscheidbar ist. In der Übung
und den Hausaufgaben dieser Woche wollen wir auch die anderen Probleme behandeln.
Zeigen Sie:
(a) h1i ≤ h2i (b) h1i ≤ h3i
Hinweise: Zur Vereinfachung dürfen Sie Σ = {a, b} jeweils für das zu reduzierenden
Problem annehmen (ohne das Problem, auf das Sie reduzieren, einzuschränken).

Übungsaufgabe Ü11.5. (Überblick: Entscheidbarkeit)


Vervollständigen Sie das folgende Diagramm.
(a) Fügen Sie die Begriffe „entscheidbar“, „unentscheidbar“, „semi-entscheidbar“, „re-
kursiv aufzählbar“, „co-semi-entscheidbar“2 und „nulli-entscheidbar“3 sinnvoll zum
Diagramm hinzu.
(b) Sei Vf = {w | ϕw = f } für eine totale berechenbare Funktion f : N → N.
Ordnen Sie diese Beispiel-Probleme richtig zu: {x ∈ N | x = f (1)}, H, H, H0 , H0 ,
HΣ∗ , HΣ∗ , K, K, HN EQ , HN EQ , PCP, PCP, CFG Äquivalenz, Vf , Vf und „alle
Sprachen L ∈ P “

2
Eine Sprache L ist co-semi-entscheidbar, wenn es eine TM gibt, die 0 ausgibt wenn die Eingabe nicht
in L ist und nicht terminiert wenn die Eingabe in L ist.
3
Problem ist nulli-entscheidbar, wenn es nicht semi-entscheidbar ist und nicht co-semientscheidbar
Problem ist.
Wenn
terminiert
x 6∈ A terminiert
nicht
Wenn (0)
(⊥)
x∈A

Beispiele: Beispiele:

terminiert
(1)

terminiert
nicht
(⊥)

Beispiele: Beispiele:

Lösungsskizze. Ausgefüllte Tabelle:


Wenn
terminiert
x 6∈ A terminiert
nicht
Wenn (0)
(⊥)
x∈A

Beispiele: {x ∈ N | x = f (1)}, Beispiele: H0 , H, K, Vf


alle Sprachen L ∈ P PCP

terminiert semi-entscheidbar
entscheidbar
(1) rekursiv-aufzählbar
r
i d ba
e
terminiert
co-semi- t sch
nicht en „nulli-entscheidbar“
(⊥)
entscheidbar un

Beispiele: H0 , H, K, Vf , Beispiele: HΣ∗ , HΣ∗ ,


PCP, CFG Äquivalenz HN EQ , HN EQ

Übungsaufgabe Ü11.6. (Reductio ad absurdum)


Sei A := {w ∈ Σ∗ | ∃i ∈ N0 . |w| = 5i + 3} mit Σ = {a, b}. Erklären Sie, warum die
angegebenen Funktionen keine Reduktionen gemäß Vorlesungsdefinition sind.
(a) Behauptung: H0 ≤ A
Reduktion: Definiere f : H0 → A mit f (w) := aaa.
(b) Behauptung: H0 ≤ A
Reduktion:
(
aaa falls w ∈ H0
f (w) =
b sonst

(c) Behauptung: A ≤ H0
Reduktion: f bildet jedes Element x ∈ Σ∗ auf die Kodierung einer TM Mx ab, die
wie folgt definiert ist: Die TM Mx löscht die Eingabe und schreibt x aufs Band,
bestimmt dann die Länge von x, zieht 3 ab und prüft anschließend, ob das Ergebnis
durch 5 teilbar ist. Dementsprechend gibt die Maschine „Ja“(1) oder „Nein“(0) aus.
(d) Behauptung: H0 ≤ H0
Reduktion: f bildet jedes w ∈ {0, 1}∗ auf die Kodierung f (w) einer TM Mf (w)
ab, die Mw [] simuliert. Falls Mw [] hält, geht Mf (w) in eine Endlosschleife. Falls
Mw [] nicht hält, hält Mf (w) .
(e) Behauptung: HΣ∗ ≤ H0 mit HΣ∗ := {w ∈ {0, 1}∗ | ∀x ∈ Σ∗ . Mw [x]↓}.
Reduktion: f bildet jedes w ∈ {0, 1}∗ auf die Kodierung f (w) einer TM Mf (w) ab,
die erst die Eingabe löscht, dann nichtdeterministisch x ∈ Σ∗ erzeugt und dann
Mw [x] simuliert.
Lösungsskizze.
(a) f ist undefiniert auf {0, 1}∗ \ H0 6= ∅ und somit nicht total.
(b) f ist unberechenbar, da H0 unentscheidbar ist und somit χH0 unberechenbar ist.
(c) f bildet auf Kodierungen von Turing-Maschinen ab, die immer terminieren. Da
a 6∈ A, aber f (a) ∈ H0 , erfüllt die Funktion f nicht die Definition einer Reduktion.
Außerdem ist die Notation Mx ungünstig, da wir einen Index einer TM in der
Regel verwenden, um anzuzeigen, dass Mw die TM ist, die von w encodiert wird.
In dieser Reduktion hat Mx aber eine andere Bedeutung.
(d) f ist nicht wohldefiniert. Wenn Mf (w) die Berechnung von Mw [] simuliert und
Mw [] nicht hält, dann hält definitiv Mf (w) auch nicht.
(e) Sei w die Kodierung einer TM mit Mw []↓ und Mw [0]↑. Dann gilt w 6∈ HΣ∗ und
f (w) ∈ H0 .
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 11

• Sei Φ := {{1}, {2}, {3, 4}}. Nach dem Abgabedatum werden wir für jede Menge
A ∈ Φ eine zufällige Aufgabe a ∈ A wählen und korrigieren.
• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.
• 0 ∈ N, TMs sind deterministisch

Aufgabe H11.1. (Do or do not. There is no try.) 0.5+0.5+0.5+0.5+1 Punkte


Sei Σ := {0, 1}. Entscheiden Sie jeweils, ob folgende Aussagen wahr sind. Falls ja, geben
Sie eine kurze Begründung an, ansonsten ein Gegenbeispiel.
(a) Sei L ⊆ Σ∗ unentscheidbar und w ∈ L. Dann ist {v : Mw [v]↓} unentscheidbar.
(b) Für zwei unentscheidbare Sprachen L1 , L2 ⊆ Σ∗ ist L1 ∪ L2 unentscheidbar.
(c) Sei f : N → N total, berechenbar und bijektiv. Dann ist f −1 berechenbar.
(d) Für beliebige TMs M1 , M2 ist die Sprache L(M1 ) \ L(M2 ) semi-entscheidbar.
(e) Sei L ⊆ Σ∗ unendlich. Dann gibt es eine unentscheidbare Sprache L0 ⊆ L.
Hinweis: Bitte beachten Sie, dass nach Definition L(M ), für eine TM M , die Sprache
der Wörter ist, auf denen M in einem Haltezustand terminiert. Insbesondere ist L(M )
semi-entscheidbar, aber nicht unbedingt entscheidbar.
Lösungsskizze.
(a) Falsch. Sei L definiert als das universelle Halteproblem vom letzten Übungsblatt.
Dann ist L unentscheidbar, aber {v : Mw [v]↓} = Σ∗ ist entscheidbar, für jedes
w ∈ L. (Ein einziges w würde bereits reichen, damit die Aussage falsch ist.)
(b) Falsch. Sei L1 eine beliebige unentscheidbare Sprache, zum Beispiel das Haltepro-
blem auf leerem Band. Dann ist das Komplement L2 := L1 ebenfalls unentscheid-
bar (Fakt 5.29). Es gilt L1 ∪ L2 = Σ∗ , aber Σ∗ ist entscheidbar.
(c) Wahr. Um f −1 (y) zu berechnen, gehen wir alle möglichen x ∈ N durch und über-
prüfen, ob f (x) = y gilt. Da f berechenbar ist, können wir dies machen, und da f
bijektiv ist, terminiert die Suche mit einem x, das wir ausgeben.
(d) Falsch. Wähle L(M1 ) = Σ∗ und L(M2 ) = H0 , das Halteproblem auf leerem
Band. Diese sind beide semi-entscheidbar, daher gibt es TMs für diese Spra-
chen. Nun ist L(M1 ) \ L(M2 ) das Komplement des Halteproblems und damit nicht
semi-entscheidbar. Denn sonst wären sowohl H0 als auch das Komplement semi-
entscheidbar und damit H0 entscheidbar (Satz 5.42).
(e) Wahr. Da L ⊂ Σ∗ ist L abzählbar. Wähle also eine Bijektion N → L. Die An-
zahl möglicher Wahlen von L0 ist die Anzahl möglicher Funktionen N → {0, 1}
(wir können für jede Nummer eines Elements von L wählen ob das Element in L0
ist). Dies ist überabzählbar. Da es aber nur abzählbar viele TMs gibt, muss eine
unentscheidbare Sprache enthalten sein.
Aufgabe H11.2. (The line must be drawn here! This far, no further!) 4 Punkte
Wir nennen eine TM 2n-platzbeschränkt, wenn sie für alle Eingaben mit Länge n den
Lesekopf nicht weiter als 2n Felder vom Ursprung entfernt. Zeigen Sie, dass L unent-
scheidbar ist, mit

L := {w ∈ {0, 1}∗ : Mw ist 2n-platzbeschränkt}


Lösungsskizze. Sei H0 das Halteproblem auf leerem Band und H0 sein Komplement.
Dann ist H0 unentscheidbar, und wir zeigen nun H0 ≤ L.
Sei M eine beliebige TM über dem Alphabet {0, 1}. Unsere Reduktion muss also M
so ändern, dass die neue TM M 0 nicht 2n-platzbeschränkt ist, gdw. M auf leerem Band
hält. Unsere neue TM M 0 geht wie folgt vor:
1. Platziere Markierungen links und rechts von der Eingabe, lösche alles zwischen den
Markierungen, und gehe in die Mitte der Eingabe.
2. Führe M aus. Falls der Kopf eine der Markierungen betritt, terminiere.
3. Falls M terminiert (ohne eine der Markierungen betreten zu haben), laufe in einer
Schleife nach rechts.
Die Idee ist also, dass M 0 darauf achtet, immer platzbeschränkt zu sein. Die einzige
Ausnahme ist, wenn M terminiert – dann bricht M 0 „absichtlich“ die Platzbeschränkung.
Wir argumentieren nun die Korrektheit der Reduktion, also M ∈ / H0 ⇔ M 0 ∈ L.
„⇒“: Wenn M auf der leeren Eingabe nicht terminiert, kann M 0 nie die Platzbeschrän-
kung verletzten, und M 0 ∈ L folgt.
„⇐“: Wir nehmen nun M ∈ H0 an. Insbesondere macht M auf der leeren Eingabe nur
endlich viele Schritte, und es gibt ein k ∈ N, sodass M sich hierbei nicht weiter
als k Felder vom Ursprung entfernt. Wir führen nun M 0 auf Eingabe 12k aus. Da
M sich nicht weiter als k Felder vom Ursprung entfernt, wird M 0 in Schritt 2. nie
eine der Markierungen erreichen, und M terminiert. Damit ist M 0 aber auf dieser
Eingabe nicht platzbeschränkt, und M 0 ∈ / L folgt.

Aufgabe H11.3. (Downwards is the only way forwards.) 2+3 Punkte


In der Vorlesung haben wir folgende Probleme für kontextfreie Grammatiken G1 , G2
über einem Alphabet Σ kennengelernt:
h1i Ist L(G1 ) ∩ L(G2 ) = ∅ ? h4i Ist L(G1 ) ⊆ L(G2 ) ?
h2i Ist |L(G1 ) ∩ L(G2 )| < ∞ ? h5i Ist L(G1 ) = L(G2 ) ?
h3i Ist L(G1 ) ∩ L(G2 ) kontextfrei?
Von h1i wurde in der Vorlesung gezeigt, dass es unentscheidbar ist, h2i und h3i werden
in der Übung behandelt. Es verbleiben h4i und h5i, zeigen Sie also:
(a) h4i ≤ h5i (b) h1i ≤ h4i
Hinweise: Zur Vereinfachung dürfen Sie Σ = {a, b} jeweils für das zu reduzierenden
Problem annehmen (ohne das Problem, auf das Sie reduzieren, einzuschränken). Für die
(b) mag es sinnvoll sein, die Sprache L(G1 ){$}L(G2 )R zu betrachten.
Lösungsskizze. Wie im Hinweis nehmen wir Σ = {a, b} entsprechend an. In beiden Fällen
bildet unsere Reduktion die Eingabe G1 , G2 auf G01 , G02 ab, wobei letzteres die Eingabe
für das Problem ist, auf das wir reduzieren.
(a) Hier konstruieren wir G01 so, dass L(G01 ) = L(G1 ) ∪ L(G2 ), und G02 := G2 . Dann gilt

L(G01 ) = L(G02 ) ⇔ L(G1 ) ∪ L(G2 ) = L(G2 ) ⇔ L(G1 ) ⊆ L(G2 )

(b) Unsere Reduktion konstruiert G01 entsprechend dem Hinweis, also gilt L(G01 ) =
L(G1 ){$}L(G2 )R . Dies ist möglich, da wir CFGs sowohl konkatenieren als auch umdre-
hen können. Die Sprache L := {w$wR : w ∈ Σ∗ } ist deterministisch kontextfrei (siehe
Beispiel 4.61), also ist auch ihr Komplement kontextfrei (Satz 4.66). Wir wählen also ein
G02 mit L(G02 ) = L.
Es gilt

L(G01 ) ⊆ L(G02 ) ⇔ L(G01 ) ⊆ L ⇔ L(G01 ) ∩ L = ∅

und

L(G01 ) ∩ L = L(G1 ){$}L(G2 )R ∩ {w$wR : w ∈ Σ∗ }


= {w$wR : w ∈ L(G1 ), wR ∈ L(G2 )R }
= {w$wR : w ∈ L(G1 ) ∩ L(G2 )}

Offensichtlich gilt nun L(G01 ) ∩ L = ∅ genau dann, wenn L(G1 ) ∩ L(G2 ) = ∅.


Anmerkung: Statt L kann man auch die Sprache {u$v : u, v ∈ Σ∗ , u 6= v R } verwenden.
Die ist ebenfalls kontextfrei und wird z.B. von folgender Grammatik erzeugt:

S → aSa | bSb | aT b | bT a | CP | QC
T → CT C | $
P → CP | CP C | $
Q → QC | CQC | $
C→a|b

Aufgabe H11.4. (No one can be told what The Matrix is.) 1+1+3 Punkte
Doras Urgroßonkel, der ehemalige Rektor der TH Estlingen-Oberfeld, hat Geburtstag,
und die ganze Familie ist eingeladen. Nach altem Estlinger Brauch gibt es statt Kerzen
auf einer Geburtstagstorte einen Vektor mit dem Alter (er ist (100)7 geworden), und statt
zu pusten wird dieser Vektor so lange mit Matrizen multipliziert, bis er verschwunden
ist. (Die Matrizen werden von den Gästen mitgebracht.) Leider hat Doras Urgroßonkel es
dieses Jahr nicht geschafft, seinen Altersvektor wegzumultiplizieren, obwohl er sich viel
Mühe gegeben hat. Dora möchte ihn nun trösten, und ihm beweisen, dass das Problem
nicht immer gelöst werden kann.
Wir untersuchen nun das Vektorvernichtungsproblem (VVP):
Eingabe: Matrizen M1 , ..., Mk ∈ Z3×3 , Vektor v ∈ Z3
Ausgabe: Existieren A1 , ..., Al ∈ {M1 , ..., Mk } mit A1 A2 · · · Al v = 0 ?
Unser Ziel ist, zu zeigen, dass das VVP unentscheidbar ist.
 
(a) Sei M := 0 v −v , mit v ∈ Z3 , und M1 , ..., Mk ∈ Z3×3 , wobei M1 , ..., Mk
invertierbar sind. Zeigen Sie, dass das VVP für M, M1 , ..., Mk ; v genau dann eine
Lösung hat, wenn es A1 , ..., Al ∈ {M1 , ..., Mk } gibt, sodass M A1 A2 · · · Al v = 0.
Wir verwenden wieder Zahlen, um Wörter darzustellen. Sei also Σ := {0, 1} und
f : Σ∗ → N definiert als f (ε) := 0 und f (wc) := 3f (w) + c + 1 für w ∈ Σ∗ , c ∈ Σ.
Insbesondere gilt somit f (u) = f (v) ⇔ u = v für alle u, v ∈ Σ∗ .
(b) Seien x, y ∈ Σ∗ beliebig. Konstruieren Sie eine Matrix Mx,y ∈ Z3×3 mit
   
1 1
Mx,y f (u) = f (ux) für alle u, v ∈ Σ∗ .
   
f (v) f (vy)

(c) Zeigen Sie nun, dass das VVP unentscheidbar ist, indem sie 01-MPCP reduzieren.1
Erinnerung: Sei M ∈ R3×3 . Folgende Aussagen sind äquivalent:
(1) M ist invertierbar
(2) det(M ) 6= 0
(3) M x 6= 0 für alle x ∈ R3 \ {0}
Lösungsskizze. (a) Wir zeigen beide Richtungen, wobei „⇐“ allerdings trivial ist. Für
„⇒“ sei nun B0 , ..., Bl ∈ {M, M1 , ..., Mk } eine Lösung des VVP für M, M1 , ..., Mk ; v. Wir
wählen eine kürzeste Lösung, also eine mit minimalem l. Es gibt nun folgende Fälle.
• B0 ∈ {M1 , ..., Mk }: Sei x := B1 · · · Bl v. Wenn x = 0 wäre l nicht minimal, also gilt
x 6= 0. Da B0 invertierbar ist, muss aber B0 x 6= 0 gelten, ein Widerspruch dazu,
das B0 , ..., Bl eine Lösung des VVP ist. Dieser Fall kann also gar nicht auftreten.
• ∃i > 0 : Bi = M : Sei x := Bi · · · Bl v. Es muss wieder x 6= 0 gelten, da sonst
Bi , ..., Bl eine kürzere Lösung wäre. Da Bi = M , muss aber x = αv gelten, für
ein α ∈ R, α 6= 0. Dies folgt aus der Beobachtung, dass für jeden Vektor y =
(y1 , y2 , y3 )> ∈ R3 gilt, dass M y = v(y2 − y3 ). Es gilt:

B0 · · · Bl v = 0 ⇒ B0 · · · Bi−1 x = 0 ⇒ B0 · · · Bi−1 ( α1 x) = 0

Aber α1 x = v, also wäre B0 , ..., Bi−1 eine kürzere Lösung und dieser Fall kann
ebenfalls nicht eintreten.
• B0 = M und B1 , ..., Bl ∈ {M1 , ..., Mk }: Dies ist genau die Aussage, die wir zeigen
wollen, und wir sind fertig.
(b) Nach Definition von f folgt f (ux) = f (u) · 3|x| + f (x), da f Zeichen an die Basis-3
Darstellung der Zahl anhängt. Um sicher zu gehen, zeigen wir diese Aussage kurz per
Induktion über n := |x|.
Die Basis x = ε ist klar. Für den Induktionsschritt fixieren wir ein n und nehmen
f (ux) = f (u) · 3|x| + f (x) für alle u, x ∈ Σ∗ mit |x| = n an. Für beliebige u, x ∈ Σ∗ mit
x = rc für ein r ∈ Σ∗ und c ∈ Σ gilt nun
f IA
f (ux) = f (urc) = 3f (ur) + c + 1 = 3(f (u) · 3|r| + f (r)) + c + 1
f
= f (u) · 3|r|+1 + 3f (r) + c + 1 = f (u) · 3|rc| + f (rc) = f (u) · 3|x| + f (x)

1
Wir haben zwar nicht explizit in der Vorlesung gezeigt, dass 01-MPCP unentscheidbar ist, aber der
Beweis von Korollar 5.59 funktioniert unverändert.
Unsere Matrix ist nun folgende:
 
1 0 0
Mx,y := f (x) 3
 |x| 0 

f (y) 0 3|y|

(c) Wir reduzieren von 01-MPCP und erhalten somit Wörter x1 , ..., xk , y1 , ..., yk ∈ {0, 1}∗
als Eingabe. Unsere Reduktion konstruiert die Instanz M, M1 , ..., Mk ; v des VVPs, mit
Mi := Mxk ,yk (wie in (b) definiert) und v := (1, f (x1 ), f (y1 ))> . Nun zeigen wir, dass die
Reduktion korrekt ist, also „MPCP lösbar“ ⇔ „VVP lösbar“.
„⇒“: Sei i1 , ..., in ∈ {1, ..., k} eine Lösung des MPCP, es gilt somit i1 = 1. Wir behaupten
nun, dass M, Min , ..., Mi2 eine Lösung des VVPs ist. Es gilt

M M i 2 Mi 3 · · · Mi n v
   
1 1
 (b)
= M Min · · · Mi3 Mi2 f (xi1 ) = M Min · · · Mi3 f (xi1 xi2 )
  
f (yi1 ) f (yi1 yi2 )
   
1 0
 (∗)  
= ... = M f (xi1 ...xin ) = f (xi1 ...xin ) − f (yi1 ...yin ) v = 0
 
f (yi1 ...yin ) 0

Für (∗) verwenden wir, dass i1 , ..., in ∈ {1, ..., k} eine Lösung des MPCPs ist und
somit xi1 ...xin = yi1 ...yin gilt.
„⇐“: Da det(Mx,y ) = 3|x|+|y| 6= 0 für x, y ∈ Σ∗ , können wir die Aussage der (a) anwen-
den, und es existiert eine Lösung der Form M, Min , ..., Mi2 mit i2 , ..., in ∈ {1, ..., k}.
Wie wir für den anderen Fall bereits argumentiert haben, gilt
 
f (xi1 ...xin ) − f (yi1 ...yin )
M M i n · · · Mi 2 v =  0
 

0

wobei wir i1 := 1 setzen. Da M, Min , ..., Mi2 eine Lösung des VVPs ist, muss die
linke Seite 0 sein. Somit folgt direkt f (xi1 ...xin ) = f (yi1 ...yin ) und schließlich, wie
nach der Definition von f angemerkt, xi1 ...xin = yi1 ...yin . Folglich ist i1 , ..., in eine
Lösung des MPCP, mit i1 = 1.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik

Einführung in die Theoretische Informatik


Sommersemester 2021 – Übungsblatt 12

• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor der
Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil, der
Aufgaben enthält, die in der Übung besprochen werden und von Ihnen anschließend
zur Nachbereitung verwendet werden können.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü12.1. (Wichtige Begriffe)


Überprüfen Sie, dass Sie die folgenden Begriffe oder Notationen korrekt definieren kön-
nen.
• timeM (w) und ntimeM (w)
• T IM E(f (n)) und N T IM E(f (n))
• Landau-Notation (oder auch O-Notation): O(n), O(2n ), ...
• P und NP
?
• P = NP
• NP-hart (oder auch auch: “NP-schwer”)
• NP-vollständig
• Zertifikat und polynomiell beschränkter Verifikator
• polynomielle Reduktion
• A ≤p B (sprich: "A ist polynomiell reduzierbar auf B")
• Die Probleme1 : HAMILTON, RUCKSACK, SAT, 3KNF-SAT, FÄRBBARKEIT (COL),
3COL, MENGENÜBERDECKUNG (MÜ), CLIQUE, PARTITION, BIN PACKING,
TRAVELLING SALESMAN (TSP)

Individualaufgabe Ü12.2. (TSP ist NP-vollständig)


Sie kennen bereits das Problem HAMILTON := {G | G enthält einen Hamiltonkreis}.
Dieses Problem ist NP-vollständig. Zeigen Sie nun, dass das Travelling-Salesman-Problem
(TSP) ebenfalls NP-vollständig ist.

TSP:
• Eingabe: n × n Matrix M mit Mi,j ∈ N und eine Zahl k ∈ N.
• Frage: Gibt es eine “Rundreise” der Länge ≤ k.

1
Wir lernen viele dieser Probleme erst in den kommenden Vorlesungen kennen. Sie müssen nicht schon
zum jetzigen Zeitpunkt alle Probleme kennen / verstehen.
Eine Rundreise ist eine Permutation π von [1; n], also ein einfacher Kreis, der jede Insel
einmal enthält. Die Länge der Rundreise ist die Summe der Kosten der einzelnen Reisen,
also Σni=1 Mπi ,πj (dabei ist πi der i-te Eintrag der Permutation, beginnend bei 0, und πj
ist der Eintrag für die nächste Insel, also j = (i + 1)%n).
Lösungsskizze. (Diese Lösung ist sehr ausführlich und wird teilweise auch auf Folie 350
behandelt.) Um zu zeigen, dass TSP NP-vollständig ist, müssen wir zeigen, dass TSP
∈ NP und dass TSP NP-schwer ist.
• ∈ NP: Wir können eine korrekte Rundreise raten, und dann in polynomieller Zeit
verifizieren, dass sie eine Länge ≤ k hat, indem wir einmal den Pfad entlang gehen
und die Kosten ausrechnen. Das entspricht |π| = n Zugriffen auf die Matrix, geht
also in linearer Zeit.
• NP-schwer: Durch Reduktion HAMILTON ≤p TSP. Gegeben das Encoding eines
Graphen G = (V, E) konstruieren wir eine Matrix wie folgt: Wir nummerieren die
Knoten in G von 1 bis n durch. Dann ist
(
1 falls {vi , vj } ∈ E
Mi,j :=
2 sonst

Also sind die Kosten, von i nach j zu kommen 1, wenn eine Kante in G existiert, und
2, wenn nicht. Dann ist (M, n) eine Instanz des TSP und es gilt G ∈ HAMILTON ⇔
f (G) = (M, n) ∈ TSP. (noch zu beweisen)
Gegeben etwas, das keinen Graphen encodiert, geben wir etwas zurück, das nicht
∈ TSP ist, also z.B. etwas, das kein Tupel (M, k) encodiert oder eine Matrix mit
positiven Kosten und k = 0.
Außerdem noch ein Randfall: Gegeben einen Graphen, der weniger als 3 Knoten
hat, geben wir etwas zurück, das nicht ∈ TSP ist, weil ein Graph mit weniger als
3 Knoten niemals einen Hamilton-Kreis enthalten kann; unsere Reduktion könnte
aber eventuell ein Element aus TSP zurück geben. Beispiel: G = ({1, 2}, {{1, 2}}).
Korrektheit:
– Wenn G ∈ HAMILTON, dann gibt es einen Kreis, der nur Kanten von G
verwendet und alle Knoten genau einmal besucht. Folglich gibt es auch eine
Rundreise mit Kosten n in M .
– Wenn G ∈ / HAMILTON, dann gibt es keinen Kreis, der nur Kanten von G ver-
wendet und alle Knoten genau einmal besucht. Folglich gibt es keine Rund-
reise mit Kosten ≤ n in M , da mindestens einmal eine Kante mit Kosten 2
verwendet werden muss.
– Gegeben etwas, das keinen Graph encodiert, also nicht in HAMILTON ist,
geben wir etwas zurück, das nicht in TSP ist.
Berechenbarkeit in polynomieller Zeit:
Die Reduktion definiert eine n × n Matrix, wobei n die Anzahl der Knoten von G
ist. Folglich braucht sie quadratische Zeit in der Anzahl der Knoten.
Übung und Nachbereitung

Fokusaufgabe Ü12.3. (Stundenplan)


In dieser Aufgabe betrachten wir das STUNDENPLAN-Problem:
• Eingabe: Endliche Mengen S (Studierende), V (Vorlesungen) und T (Termine)
und eine Relation R ⊆ S × V . Dabei bedeutet (s, v) ∈ R, dass s die Vorlesung v
besuchen möchte.
• Frage: Gibt es eine Abbildung f : V → T , so dass alle Studierenden einen über-
schneidungsfreien Stundenplan haben, also

(s, v1 ) ∈ R ∧ (s, v2 ) ∈ R ∧ v1 6= v2 =⇒ f (v1 ) 6= f (v2 ) .

(a) Zeigen Sie, dass STUNDENPLAN in NP liegt.


(b) Zeigen Sie, dass STUNDENPLAN NP-schwer ist, indem sie eine polynomielle Re-
duktion von 3COL auf STUNDENPLAN angeben. (Wir werden in der Vorlesung
noch lernen, dass 3COL NP-schwer ist.)

Übungsaufgabe Ü12.4. (SAT-Varianten)


Wir betrachten verschiedene Varianten von SAT, die auch NP-vollständig sind.
In der Vorlesung werden wir das NP-vollständige Problem 3KNF-SAT kennen lernen. Dies
führen wir hier vorab schon einmal ein, da es als Einschränkung von SAT die Reduktion
leichter macht.
Sei X eine Menge an Variablen. Die Menge der Literale ist L := X ∪ {¬x : x ∈ X},
enthält also alle Variablen und Negationen von Variablen. Eine k-Klausel ist eine Formel
der Form l1 ∨ l2 ∨ ... ∨ lk mit l1 , ..., lk ∈ L, und eine Formel F ist in k-konjunktiver
Normalform (k-KNF), wenn F = F1 ∧ F2 ∧ ... ∧ Fn , wobei F1 , ..., Fn jeweils k-Klauseln
sind. Das Problem 3KNF-SAT ist nun
• Eingabe: Aussagenlogische Formel F in 3-KNF
• Frage: Ist F erfüllbar?
Ein Beispiel für eine Instanz wäre also (¬x ∨ y ∨ z) ∧ (x ∨ ¬y ∨ z) ∧ (x ∨ y ∨ ¬z) .
Wir betrachten zusätzlich zu 3KNF-SAT noch weitere Varianten von SAT, die auch NP-
vollständig sind. Zeigen Sie diese NP-Vollständigkeit, indem Sie für jede Variante X eine
Reduktion 3KNF-SAT ≤p X angeben und X ∈ NP zeigen.
(a) 3-OCC-KNF-SAT:

• Eingabe: Eine Formel F in KNF, bei der jede Variable höchstens dreimal
auftritt.
• Frage: Ist F erfüllbar?

(b) Wir betrachten den ITE-Operator mit der Semantik ITE(x, y, z) := (x → y) ∧


(¬x → z). Eine ITE-Formel genügt der folgenden Grammatik:

F → ITE(F, F, F ) | x | true | false für Variablen x ∈ V

ITE-SAT:
• Eingabe: Eine ITE-Formel F .
• Frage: Ist F erfüllbar?
Lösungsskizze.
• NP-schwer: Sei F eine Formel in 3-KNF. Somit F = ni=1 Ki und Ki =
V
(a)
Wm
j=1 Lij mit m ≤ 3. O.b.d.A. kommen keine Variablen doppelt in einer
Klausel vor. Sei v die Anzahl der in F verwendeten Variablen. Dann er-
setzten wir in jeder Klausel die Variablen mit für diese Klausel spezifische
Variablen und fügen eine Bedingung ein, die erzwingt, dass alle Kopien ei-
ner Variable in der Eingabe den gleichen Wert zugewiesen bekommen. Die-
se Bedingung hat eine Ringstruktur, um Variablenverwendungen zu sparen:
(xk,1 → xk,2 ) ∧ (xk,2 → xk,3 ) ∧ ...(xk,n → xk,1 ).

n
^ v ^
^ n
f (F ) = f (Ki ) ∧ (¬xk,i ∨ xk,(i mod n)+1 )
i=1 k=1 i=1
m
_
f (Ki ) = f (Lij )
j=1
(
xk,i falls Lij = xk
f (Lij ) =
¬xk,i falls Lij = ¬xk

Diese Reduktion ist in polynomieller Zeit berechenbar, da nur die Eingabe


einmal kopiert werden muss und ein zusätzlicher Term der Größe m·v erzeugt
wird.
Korrektheit: Aus jeder erfüllenden Belegung σ für F können wir eine erfüllende
Belegung σ 0 für f (F ) konstruieren mit σ 0 (xk,i ) = σ(xk ). Auch können wir
aus jeder erfüllenden Belegung σ für f (F ) ein Belegung für F konstruieren.
Da σ(xk,i ) = σ(xk,j ) für alle i, j gelten muss, können wir einfach σ 0 über
σ 0 (xk ) = σ(xk,1 ) definieren. Somit ist die Konstruktion erfüllbarkeitserhaltend
und die Reduktion korrekt.
• ∈ NP: Eine erfüllende Belegung ist ein geeignetes Zertifikat, das es maximal
genauso groß ist wie die Formel F und in polynomieller Zeit geprüft werden
kann.
(b) • NP-schwer: Sei F eine Formel in 3-KNF. Wir wandeln F in polynomieller
Zeit unter der Verwendung der folgenden semantischen Äquivalenzen in eine
ITE-Formel:

¬x ≡ ITE(x, false, true) x∧y ≡ ITE(x, y, false) x∨y ≡ ITE(x, true, y)

Eine Klausel mit drei Literalen, z.B. ¬x ∨ ¬y ∨ ¬z lässt sich damit umformen
zu

¬x ∨ ¬y ∨ ¬z ≡ ITE(
ITE(x, false, true),
true,
ITE(
ITE(y, false, true),
true,
ITE(z, false, true)
)
)

Jede Klausel wird in eine ITE-Formel übersetzt, welche nur um einen kon-
stanten Faktor größer ist. Entsprechend übersetzt sich jede 3KNF-Formel in
eine semantisch äquivalente ITE-Formel, die nur um einen konstanten Faktor
größer ist. Die Korrektheit folgt aus der Verwendung semantisch-äquivalenten
Umformungen.
• ∈ NP: Eine erfüllende Belegung ist ein geeignetes Zertifikat, das es maximal
genauso groß ist wie die Formel F und in polynomieller Zeit geprüft werden
kann.

Übungsaufgabe Ü12.5. (ZOLP)


Das Zero-One-Linear-Program (ZOLP) Problem sei wie folgt definiert:
• Eingabe: Ein System von linearen Ungleichungen

b1 ≤ a1,1 y1 + . . . + a1,n yn
b2 ≤ a2,1 y1 + . . . + a2,n yn
..
.
bm ≤ am,1 y1 + . . . + am,n yn

mit ai,j , bi ∈ Z und m, n > 0.


• Frage: Gibt es für die Variablen y1 , . . . , yn Werte aus {0, 1}, sodass alle Unglei-
chungen gleichzeitig erfüllt sind?
Zeigen Sie, dass das Entscheidungsproblem ZOLP NP-schwer ist. Geben Sie hierzu eine
geeignete Reduktion von 3KNF-SAT auf ZOLP an und beschreiben Sie zusätzlich das
Vorgehen anhand folgender Formel:

(¬x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ ¬x3 ∨ x4 )

Den Korrektheitsbeweis müssen Sie nicht ausformulieren.


Lösungsskizze.
• Möglichkeit 1: Für jede Variable im Ausgangsproblem zwei Variablen im Zielpro-
blem. Sei F := ki=1 Ci und Ci := 3j=1 Li,j mit z Variablen die Eingabe für das
V W

3KNF-SAT Problem. Die Reduktion f modelliert jede Variable des SAT-Problems


mit zwei Variablen des ZOLP-Problems. Sei xi eine Variable dann encodiert y2i ,
ob das Literal xi wahr ist, und y2i−1 , ob das Literal ¬xi wahr ist. Somit haben wir
f (xi ) 7→ y2i f (¬xi ) 7→ y2i−1

Für das ZOLP wählen wir m = k + 2z und n = 2z. Die Zeile i ∈ [1, k] ist dann
definiert in Abhängigkeit von Ci als
f (Li,1 ∨ Li,2 ∨ Li,3 ) 7→ 1 ≤ f (Li,1 ) + f (Li,2 ) + f (Li,3 )

Zusätzlich fügen wir folgende Konsistenzgleichungen ein, damit y2i und y2i − 1
unterschiedliche Werte erhalten für alle i ∈ [1, z]
1 ≤ y2i + y2i−1
−1 ≤ −y2i − y2i−1

Die Reduktion ist polynomiell in der Eingabegröße, da für jede Klausel eine Un-
gleichung und für jede Variable 2 Ungleichungen erstellt werden.
Anwendung auf Beispiel (¬x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ ¬x3 ∨ x4 ):
1 ≤ y1 + y4 + y6
1 ≤ y2 + y3 + y8
1 ≤ y1 + y2
−1 ≤ −y1 − y2
1 ≤ y3 + y4
−1 ≤ −y3 − y4
1 ≤ y5 + y6
−1 ≤ −y5 − y6
1 ≤ y7 + y8
−1 ≤ −y7 − y8

• Möglichkeit 2: Für jede Variable im Ausgangsproblem eine Variable im Zielproblem.


Skizze: Wir kodieren jede Klausel als eine Ungleichung im Zielproblem. Disjunktio-
nen ersetzen wir mit Addition. Literale xi werden in einen Summanden yi übersetzt
und Literale ¬xi in einen Summanden 1 − yi . Damit ist ein Literal l erfüllt genau
dann wenn der entsprechende Summand den Wert 1 annimmt. Um sicherzustellen,
dass jede Klausel erfüllt ist, steht auf der linken Seite jeder Ungleichung 1. Offen-
sichtlich kann eine jede Ungleichung dieser Form in die von ZOLP geforderte Form
gebracht werden.
Anwendung auf Beispiel (¬x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ ¬x3 ∨ x4 ):
1 ≤ (1 − y1 ) + y2 + y3
1 ≤ y1 + (1 − y3 ) + y4
Umformen:
0 ≤ −y1 + y2 + y3
0 ≤ y1 − y3 + y4
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 12

• Diese Woche werden alle Aufgaben korrigiert.


• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.
• Die genauen Details, wie wir die Eingabe einer Sprache kodieren, sind für uns nicht
relevant. Es ist z.B. erlaubt SAT = {Formel F : F ist nicht erfüllbar} zu schreiben,
obwohl eigentlich auch Wörter, die überhaupt keine Formel gültig kodieren, in SAT
enthalten wären. Eine Ausnahme bildet nur, wenn die Wahl der Kodierung die
Länge der Eingabe signifikant beeinflussen würde (z.B. unäre/binäre Darstellung
von Zahlen).
• Sie dürfen verwenden, dass Addition, Subtraktion und Multiplikation binäre dar-
gestellter Zahlen in polynomieller Zeit berechnet werden kann.
• 0∈N

Aufgabe H12.1. (Eine Tautologie ist eine Tautologie) 1+1+1+1 Punkte


Doras Freundin Bijanka (eine Kaffeemaschine) geht es gerade nicht so gut. Sie sucht
schon seit Stunden nach einer Lösung für eine Formel, die Theo ihr gesagt hat, kann
trotz ihres hochmodernen Prozessors aber keine finden. (Dora vermutet, dass Theo mal
wieder versucht, seine Hausaufgaben nicht selbst machen zu müssen.) Sie möchte Bijanka
trösten, indem sie sich eine Formel ausdenkt, für die es ganz leicht ist, eine Lösung zu
finden! Die NP-Probleme sind dafür schlecht, da es für sie schwierig ist, Lösungen zu
finden – also denkt sich Dora eine neue Klasse aus, die sie coffee-NP (kurz coNP) nennt.
Wir definieren coNP := {L : L ∈ NP}. Wir nennen eine aussagenlogische Formel F
Tautologie, wenn F für jede Belegung erfüllt ist. Das Problem TAUTOLOGY ist nun
Eingabe: Aussagenlogische Formel F
Ausgabe: Ist F eine Tautologie?
(a) Beweisen Sie SAT ≤p TAUTOLOGY .
(b) Seien L1 , L2 Sprachen. Zeigen Sie L1 ≤p L2 ⇔ L1 ≤p L2 .
(c) Seien L1 , L2 , L3 Sprachen. Zeigen Sie L1 ≤p L2 ∧ L2 ≤p L3 ⇒ L1 ≤p L3 .
(d) Zeigen Sie, dass TAUTOLOGY coNP-hart ist, also L ≤p TAUTOLOGY für jedes
L ∈ coNP.
Lösungsskizze. (a) Eine Formel F ist (nach Definition) erfüllbar, gdw. es eine Belegung
σ gibt, sodass σ(F ) = 1. Für F ∈
/ SAT gilt also σ(F ) = 0 für alle Belegungen σ. Die
Formel ¬F ist dann eine Tautologie. Insgesamt erhalten wir
 
F ∈ SAT ⇔ ∀σ : σ(F ) = 0 ⇔ ∀σ : σ(¬F ) = 1 ⇔ ¬F ∈ TAUTOLOGY

Unsere Reduktion negiert also einfach die Formel, was offensichtlich in polynomieller
Zeit geht.
(b) Wenn L1 ≤p L2 , dann gibt es eine polynomiell berechenbare Funktion f , die L1 auf
L2 reduziert. Wir können die gleiche Funktion verwenden, um L1 auf L2 zu reduzieren:
w ∈ L1 ⇔ w ∈
/ L1 ⇔ f (w) ∈
/ L2 ⇔ f (w) ∈ L2
Damit haben wir L1 ≤p L2 ⇒ L1 ≤p L2 gezeigt. Indem wir diese Aussage auf die rechte
Seite anwenden, erhalten wir

L1 ≤p L2 ⇒ L1 ≤p L2 ⇔ L1 ≤p L2
(c) Sei f die Reduktionsfunktion für L1 ≤p L2 , und g die für L2 ≤p L3 . Dann wählen
wir h := g ◦ f (also g angewendet auf f ). Dies ist offensichtlich in polynomieller Zeit
berechenbar, und es gilt
w ∈ L1 ⇔ f (w) ∈ L2 ⇔ g(f (w)) ∈ L3 ⇔ h(w) ∈ L3
(d) Sei L ∈ coNP beliebig. Es gilt also L ∈ NP. Wir wissen, dass SAT NP-vollständig ist,
somit insbesondere NP-hart, woraus L ≤p SAT folgt. Durch Anwenden der (b) erhalten
wir L ≤p SAT, und aus der (a) und der (c) folgt nun L ≤p TAUTOLOGY .
Aufgabe H12.2. (NP = Number Pyramids?) 2+1 Punkte
Der kleine Theo macht gerade seine Hausaufgaben (auch wenn eigentlich viel lieber den
Pfützen beim Austrocknen zuschauen würde). Heute kamen Zahlenpyramiden dran:

500

45 100
17 90

6 7 50 10

Jedes Feld ist die Summe der beiden darunterliegenden Felder, und alle Felder sind mit
ganzen Zahlen gefüllt (nur Pluszahlen). Formal ist das Problem PYRAMID wie folgt:
Eingabe: w1 $...$wk , mit wi ∈ {} ∪ bin(N) und k = 1 + ... + n für ein n ∈ N
Ausgabe: Existiert eine Zahlenpyramide, deren i-tes Feld wi enthält, für wi 6=  ?
Hierfür nummerieren wir die Felder durch, von oben nach unten und links nach rechts.
(a) Konstruieren Sie eine Zertifikatssprache für PYRAMID (nach Def. 6.7), sodass das
Zertifikat für w ∈ PYRAMID höchstens Länge p(|w|) hat, für ein Polynom p. Sie
dürfen annehmen, dass jede lösbare Pyramide mit k Feldern eine Lösung hat, in
der alle Zahlen höchstens D · 2k sind, wobei D die größte vorgegebene Zahl ist.
Achtung: Eine Begründung, wieso die Zertifikate die vorgegebene Länge haben,
ist erforderlich.
(b) Zeigen Sie, dass ein polynomiell beschränkter Verifikator für PYRAMID (bezüglich
ihrer Zertifikate aus (a)) existiert, und somit PYRAMID ∈ NP.
Anmerkung: Können Sie die gezeigten Pyramiden (von Hand) lösen? Es gibt jeweils
eine eindeutige Lösung. Für den geneigten Leser haben wir auch noch weitere Instanzen.
Lösungsskizze. (a) Sei w ∈ PYRAMID beliebig, mit w = w1 $...$wk . Es gibt also eine
Lösung der (partiellen) Zahlenpyramide w, und damit eine, deren größter Eintrag D · 2k
ist, wobei D = max{(wi )2 : i ∈ {1, ..., k}}.
Unser Zertifikat enthält einfach die Binärdarstellungen der Zahlen, die in den Feldern
der vollständig ausgefüllten Pyramide stehen. Wir wählen also c := c1 $...$ck mit ci :=
bin(xi ), wobei xi ∈ N die Zahl ist, die in Feld i steht.
Wir wissen, dass |w| ≥ k und |w| ≥ log2 D gelten (letzteres, da die Binärdarstellung
einer Zahl x ∈ N>0 genau dlog2 (x + 1)e Stellen hat). Somit folgt

|c| ≤ k(1 + |c1 |) ≤ k(2 + log2 (x1 + 1)) ≤ k(3 + log2 x1 )


≤ k(3 + log2 D + k) ≤ |w|(3 + 2|w|)

für x1 > 0. Im Fall x1 = 0 gilt stattdessen |c| = 2k − 1 ≤ 2|w| − 1 ≤ |w|(3 + 2|w|). Für
beide Fälle finden wir also ein polynomielle Schranke für |c| in Abhängigkeit von |w|.
(b) Gegeben drei Binärwörter u, v, w ∈ {0, 1}∗ lässt sich in polynomieller Zeit über-
prüfen, ob (u)2 + (v)2 = (w)2 . Gegeben eine Eingabe w#c mit w = w1 $...$wk und
c = c1 $...$ck , müssen wir also überprüfen, dass
• wi = ci für alle wi 6= , und
• (ci )2 + (cj )2 = (cl )2 für alle Felder l, die über Feldern i, j liegen.
Beides lässt sich in polynomieller Zeit überprüfen, und muss jeweils höchstens k-mal
ausgeführt werden. Da |w| ≥ k, erhalten wir insgesamt einen polynomiell beschränkter
Verifikator.
Aufgabe H12.3. (Laser-focused) 1+1+1+1+1 Punkte
Nachdem er sich einige Wochen lange verdeckt gehalten hatte, hatten die meisten den
berüchtigten Superschurken Dr. Evilsparza schon vergessen. Nun ist er aber wieder aufge-
taucht, mit einem diabolischen Plan, die Weltherrschaft an sich zu reißen! Er hat eine Rei-
he von Superlasern aufgestellt, mit denen er direkt auf den THEO-Hausaufgabenserver
zielt. Ohne Musterlösungen werden sicher alle Teilnehmer durchfallen, sodass es keine
neuen Informatikabsolventen gibt, und alle auf das IT-Consultingunternehmen „Evillest
Evilness Software Inc“ angewiesen sind. Zum Glück hat der Lehrstuhl für KI (Klausu-
rintegrität) einen Plan.
Spezielle, mit Spiegeln ausgestattete Drohnen können losgeschickt werden, um die
Superlaser zu ihrer Quelle zurückzuschicken und so zu zerstören. Auf einer Karte sind
bereits die Schusslinien der Laser eingezeichnet, die möglichen Flugbahnen der Drohnen,
die Punkte, an denen eine Drohne den Laserstrahl kreuzen würde, und die Punkte, an
denen sich die Flugbahn zweier Drohnen kreuzen würde. Letzteres würde zum Absturz
beider Drohnen führen und muss unbedingt vermieden werden.
Ihre Aufgabe ist es nun, herauszufinden welche Drohnen gestartet werden müssen,
sodass sich keine zwei Drohnen kreuzen und alle Laser zerstört werden.
(1) (2) (3)

Formal definieren wir das Klausurrettungsproblem (KRP) wie folgt:


Eingabe: Mengen an Geraden L, D und Schnittpunkte S ⊆ L×D ∪ D×D
Ausgabe: Existiert M ⊆ D mit M ×M ∩ S = ∅ und {l}×M ∩ S 6= ∅ für alle l ∈ L ?
In der Zeichnung finden Sie eine Instanz des KRP (1), eine Lösung dieser Instanz (2), und
eine weitere, unlösbare Instanz (3). Die Laser sind jeweils als Pfeile gezeichnet und die
möglichen Flugbahnen der Drohnen als gestrichelte Linien. Beachten Sie insbesondere,
dass nicht jeder Schnittpunkt von zwei Graden bedeutet, dass sich die Drohnen bzw.
Laser da kreuzen würden.
(a) Zeigen Sie KRP ≤p SAT.
(b) Konstruieren Sie ein „Gadget“, um eine boolesche Variable zu modellieren. Wir
suchen eine Instanz Ix = (L, D, S) mit x, x ∈ D. Jede Lösung von Ix muss entweder
x oder x enthalten, und es muss Lösungen S1 , S2 mit x ∈ S1 , x ∈ S2 geben.
In der Vorlesung werden wir das NP-vollständige Problem 3KNF-SAT kennen lernen.
Dies führen wir hier vorab schon einmal ein, da es als Einschränkung von SAT die
Reduktion leichter macht.
Sei X eine Menge an Variablen. Die Menge der Literale ist L := X ∪ {¬x : x ∈ X},
enthält also alle Variablen und Negationen von Variablen. Eine k-Klausel ist eine Formel
der Form l1 ∨ l2 ∨ ... ∨ lk mit l1 , ..., lk ∈ L, und eine Formel F ist in k-konjunktiver
Normalform (k-KNF), wenn F = F1 ∧ F2 ∧ ... ∧ Fn , wobei F1 , ..., Fn jeweils k-Klauseln
sind. Das Problem 3KNF-SAT ist nun
Eingabe: Aussagenlogische Formel F in 3-KNF
Ausgabe: Ist F erfüllbar?
Ein Beispiel für eine Instanz wäre also (¬x ∨ y ∨ z) ∧ (x ∨ ¬y ∨ z) ∧ (x ∨ y ∨ ¬z) .
(c) Beschreiben Sie, wie Sie Klauseln der Länge 3 mithilfe ihres Gadgets aus (b) mo-
dellieren können, sodass jede Lösung der Instanz einer erfüllenden Belegung der
Klausel entspricht, und umgekehrt. Demonstrieren sie Ihre Konstruktion anhand
des Beispiels x ∨ ¬y ∨ z.
(d) Zeigen Sie 3KNF-SAT ≤p KRP.
(e) Konstruieren Sie eine KRP Instanz, die genau dann lösbar ist, wenn (x ∨ ¬y ∨ z) ∧
(¬x ∨ y ∨ z) erfüllbar ist. Verwenden Sie hierzu Ihre Konstruktion aus (d).
Lösungsskizze. (a) Sein (L, D, S) eine KRP-Instanz. Wir konstruieren nun eine SAT-
Instanz, also eine aussagenlogische Formel, die genau dann erfüllbar ist, wenn (L, D, S)
eine Lösung hat. Wir verwenden eine Variable xd für jede Drohne d ∈ D. Unsere Formel
F ist nun
^ _   ^ 
xd ∧ (¬xd ∨ ¬xb )
l∈L (l,d)∈S (d,b)∈S∩D2

Anschaulich gesprochen fordern wir also für jeden Laser, der von Drohnen d1 , ..., dk
geschnitten wird, dass xd1 ∨...∨xdk (jeder Laser muss zerstört werden), und für jedes Paar
Drohnen (d, b), deren Flugbahnen sich überschneiden, dass ¬xd ∨¬xb (keine zwei Drohnen
kreuzen sich). Aus der Konstruktion ist bereits offensichtlich, dass die Reduktion korrekt
ist.
(b) Unsere Konstruktion sieht folgendermaßen aus:

x x

Formal verwenden wir also zwei Drohnen D := {x, x} und einen Laser L := {l}. Die
Schnittpunkte sind S := {(x, x), (l, x), (l, x)}.
(c) Wir fügen eine Kopie von Iv für jede Variable v ∈ {x, y, z} ein. Für dir Klausel
erstellen wir dann einen Laser, und Schnittpunkte mit genau den Literalen aus der
Klausel. Für das Beispiel x ∨ ¬y ∨ z erhalten wir folgendes.

x x y y z z

(d) Hier müssen wir lediglich ein Gadget Iv für jede Variable erstellen, und dann für
jede Klausel einen Laser wie in (c) einfügen. Dies lässt sich offensichtlich in polynomieller
Zeit machen. Wir zeigen nun „KRP lösbar ⇔ 3KNF-SAT lösbar“:
„⇒“ Sei M die Lösung des KRP. Für jede Variable v ist nach Konstruktion von Iv
entweder v ∈ M oder v ∈ M . Wir wählen nun eine entsprechende Belegung der
3KNF-SAT Instanz. Unter dieser Belegung muss nun jede Klausel erfüllt sein, da
wir für jede Klausel einen entsprechenden Laser erstellt haben.
„⇐“ Sei σ eine erfüllende Belegung der 3KNF-SAT Formel. Wir wählen nun M := {v :
σ(v) = 1} ∪ {v : σ(v) = 0}. Da für jede Variable v die Drohnen v und v nicht
gleichzeitig fliegen, kollidieren keine Drohnen. Jeder Laser in Iv wird zerstört, da
v oder v immer fliegt, und die Laser für die Klauseln werden auch zerstört, da σ
erfüllend ist.
(e) Die Instanz sieht folgendermaßen aus:

x x y y z z

Bonusaufgabe H12.4. (Teilerfolg) 1+1 Punkte


Achtung: Die Bonusaufgabe wird diese Woche separat korrigiert. Bitte fertigen Sie für
diese Aufgabe eine getrennte Lösung an.
Wir betrachten wieder das KRP aus Aufgabe H12.3. Sie haben leider festgestellt, dass
es unmöglich ist, alle von Dr. Evilsparzas Lasern zu stoppen, wollen aber nicht aufgeben.
Gibt es vielleicht eine Möglichkeit, zumindest die meisten Laser aufzuhalten?
(a) Zeigen Sie: Wenn die Flugbahn jeder Drohne mit höchstens einer anderen Drohne
kollidieren würde, und jeder Laser von mindestens zwei Drohnen gestoppt werden
kann, ist es möglich, mindestens 43 der Laser zu stoppen.
(b) Beschreiben Sie ein Verfahren, das eine entsprechende Lösung in polynomieller Zeit
auf einer DTM berechnet.
Hinweis: Vereinfachen Sie zunächst die Instanz und betrachten dann eine sinnvol-
le Teilmenge F der möglichen Lösungen. Wenn die Lösungen aus F im Durchschnitt
mindestens 34 der Laser stoppen, dann tut es die beste Lösung aus F auch.
Lösungsskizze. (a) Zunächst können wir das Problem vereinfachen, indem wir alle Droh-
nen, die mit keiner anderen Drohne kollidieren, aktivieren. Diese Drohnen und die von
ihnen gestoppten Laser können wir nun entfernen, und erhalten eine Instanz, in der jede
Drohne mit genau einer anderen kollidiert, und jeder Laser von mindestens zwei Drohnen
gestoppt wird.
Nun können wir die Drohnen in Paare (d, b) aufteilen, die jeweils nur miteinander
kollidieren. Wir betrachten im Folgenden nur Lösungen, bei denen genau einer dieser
Drohnen fliegt. Sei also V := S ∩ D×D die Menge dieser Paare. Für jede Funktion
f : V → {0, 1} existiert nun eine Lösung Mf := {df ((d0 ,d1 )) : (d0 , d1 ) ∈ V }, indem wir
für jedes Paar die Drohne entsprechend f wählen.
Wir für einen Laser l ∈ L definieren wir r(f, l) als 1, wenn die Lösung Mf den Laser
l stoppt, und 0 sonst. Wir berechnen nun die durchschnittliche Anzahl σ an Laser, die
von einer Lösung Mf gestoppt werden, also
1 X X
σ := r(f, l)
2|V | f :V →{0,1} l∈L

Für einen Laser l ∈ L gilt nun, dass es höchstens 2|V |−2 Möglichkeiten gibt, f so zu
wählen, dass l nicht gestoppt wird: Für l gibt es mindestens zwei Drohnen d, b. Falls
d, b kollidieren würden, fliegt immer mindestens eine davon und l würde immer gestoppt
werden. Ansonsten muss f sowohl für d als auch für b jeweils den Partner wählen.
Insbesondere gibt es also immer 2|V | − 2|V |−2 = 34 · 2|V | Möglichkeiten, f zu wählen,
sodass l gestoppt wird. Nun gilt
1 X X 1 X X 1 X 3 |V | 3
σ= r(f, l) = r(f, l) ≥ · 2 = · |L|
2|V | f :V →{0,1} l∈L
2|V | l∈L f :V →{0,1}
2|V | l∈L 4 4

Im Durchschnitt über alle f werden also 34 der Laser gestoppt, und, da das Maximum
immer höher als der Durchschnitt ist, gibt es somit ein f , dass mindestens 34 der Laser
stoppt.
(b) Wir können das Verfahren aus der (a) erweitern. Zunächst vereinfachen wir die
Instanz wie in (a), danach entfernen wir zusätzlich jeden Laser, der von zwei Drohnen,
die kollidieren, gestoppt werden kann. (Diese Laser werden immer gestoppt.) Nun wissen
wir, dass es für jeden Laser l, der von k Drohnen gestoppt werden kann, genau 2|V |−k
mögliche Wahlen von f gibt, sodass l gestoppt wird. (Die k Drohnen dürfen jeweils nicht
fliegen, und die anderen |V | − k sind beliebig.) Sei also N (l) := |{{l}×D ∩ S}| die Anzahl
der Drohnen, die Laser l stoppen könnten. Nun gilt
(a) 1 X 1 X
2|V |−N (l) = 2−N (l)
X X
σ = r(f, l) =
2|V | l∈L f :V →{0,1}
2|V | l∈L l∈L

Wir können den Durchschnitt also in polynomieller Zeit ausrechnen. Nun wählen wir ein
beliebiges Paar (d, b) ∈ V und betrachten die beiden Instanzen, die wir erhalten, wenn
wir p (bzw. b) aktivieren und b (bzw. p) löschen. Für diese beiden Instanzen berechnen
wir die Durchschnitte σ1 , σ2 . (Dazu müssen wir die sicher gestoppten Laser zunächst
entfernen, und danach wieder aufaddieren.) Es gilt σ = (σ1 + σ2 )/2, also gibt es ein
i ∈ {1, 2} mit σi ≥ σ. Wir wählen nun dieses i und arbeiten rekursiv auf dieser Instanz
weiter. Da die durchschnittliche Anzahl an gestoppten Lasern nie sinkt, finden wir also
nach |V | Schritten eine Instanz, in der 34 der Laser gestoppt wurden.
Greedy Algorithmen, die immer die Drohne wählen, die die meisten Laser stoppt, funk-
tionieren nicht. Hier ist ein Gegenbeispiel:

Der Greedy Algorithmus würde nur die oberen 8 Laser abdecken. Allerdings ist 8 < 43 ·11,
somit würde er also nicht genügend Laser stoppen.
Eine andere Variante wählt immer die Drohne, die am wenigsten Laser stoppt, und
entfernt diese.
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Übungsblatt 13

• Dieses Übungsblatt besteht aus einer Auswahl von Klausuraufgaben aus vorheri-
gen Jahren und beeinhaltet keinen neuen Stoff aus der Vorlesung. Verwenden Sie
die letzte Übung für allgemeine Fragen zum Vorlesungsstoff in Hinblick auf die
Klausurvorbereitung. (siehe Aufgabe Ü13.1)
• Das Übungsblatt ist in zwei Teile gegliedert: den Vorbereitungsteil, den Sie vor
der Übung selbstständig bearbeiten sollen, und den Übungs-/Nachbereitungsteil,
der Aufgaben enthält, die in der Übung besprochen werden und Aufgaben, die
von Ihnen anschließend zur Nachbereitung verwendet werden können. Insbesondere
werden nicht alle Aufgaben aus dem Übungs-/Nachbereitungsteil in der Übung
besprochen.
• Das ist nicht das Hausaufgabenblatt! Die Hausaufgaben finden Sie auf einem se-
paraten Blatt.

Vorbereitung (→ vor der Übung selbständig zu bearbeiten)

Individualaufgabe Ü13.1. (letzte Übung ⇒ (letzte) Chance für Fragen)


Diese Woche findet die letzte Übung statt. Bitte lassen Sie deshalb Ihrem Tutor recht-
zeitig (also so früh wie möglich) Fragen auf Zulip zukommen, die sie noch haben. Z.B.
könnten das allgemeine Fragen zu Konzepten wie Reduktion oder Techniken wie Pum-
ping Lemma sein oder aber auch Fragen zu Übungsaufgaben oder Hausaufgaben, die
Sie gerne besprechen würden. Bitte geben Sie in solchen Fällen immer das Kürzel der
Aufgabe UND die konkrete Frage an.
Bitte geben Sie Ihrem Tutor genügen Zeit, sich auf die Fragen vorzubereiten. Falls
Ihr Tutor es nicht mehr schaffen sollte, sich vorzubereiten, oder Sie nach dem letzten
Tutorium noch Fragen haben, finden Sie natürlich auf Zulip noch Unterstützung.

Individualaufgabe Ü13.2. (Kahoot)


Falls Sie das Kahoot aus der Vorlesung verpasst haben: Spielen Sie es jetzt! Link1 Es kann
hilfreich sein, den passenden Stream (Nr. 24) nebenbei anzuschauen. Dann können Sie
sich mit Ihren Mitstudenten/-innen messen und bekommen die Lösungen vom Professor
erklärt!

Individualaufgabe Ü13.3. (Automata Tutor)


Wenn Sie Automata Tutor noch nicht verwendet haben, folgen Sie erst den Schritten in
Ü1.2, um sich richtig zu registrieren.
Wir haben zusätzlich zu den Übungsaufgaben der letzten Wochen auch die Hausaufga-
ben, die auf AT bearbeitet wurden, frei zugänglich gemacht. Somit haben sie ab jetzt die
Möglichkeit alle AT-Aufgaben zu üben, ohne das die Anzahl der Versuche eingeschränkt
ist. Somit können Sie AT auch sehr gut zur Klausurvorbereitung verwenden.
1
Falls der Link nicht mehr funktioniert, teilen Sie dies bitte der Übungsleitung mit. Die Teilnehmeran-
zahl ist leider auf 2000 begrenzt.
Außerdem wollen wir nochmal auf die Möglichkeit hinweisen, dass sie unter Home >
My Autogenerated Problems für einige der Aufgabentypen selbständig neue Aufgaben
generieren können.

Übung und Nachbereitung

Übungsaufgabe Ü13.4. (Endliche Automaten)


Sei r = (a|b)∗ ab(a|b)∗ ein regulärer Ausdruck über dem Alphabet Σ = {a, b}.
(a) Konstruieren Sie einen NFA A mit L(A) = L(r).
(b) Konstruieren Sie einen DFA B mit L(B) = L(A).
(c) Konstruieren Sie den minimalen DFA C mit L(C) = L(B).
(d) Konstruieren Sie den minimalen DFA D mit L(D) = Σ∗ \ L(C).
(e) Konstruieren Sie einen regulären Ausdruck r0 mit L(r0 ) = L(D). Verwenden Sie
hierzu Ardens Lemma.
Lösungsskizze.
(a) NFA A bzw. gleich B oder C, da DFA auch NFA:
a,b a,b

q0 a q1 b q2

(b) DFA B bzw. gleich DFA C aus nächstem Schritt (ist ja offensichtlich):
a
a b
b

q0 a q0 , q1 b q0 , q2 a q0 , q1 , q2

b
(c) DFA C:
a a,b
b

q0 a q0 , q1 b q0 , q2

(d) DFA D:
b a a,b

q0 a q1 b q2
(e) Aufstellen des LSGs und lösen:

rq0 ≡ arq1 | brq0 | 


rq1 ≡ arq1 | brq2 | 
rq2 ≡ (a|b)rq2

Endergebnis: r0 = rq0 = b∗ a∗

Übungsaufgabe Ü13.5. (Kontextfreie Sprachen (1))


Sei Σ = {a, b, c}.
(a) Geben Sie für die Sprache L = {(aba)n bm (ba)n b} eine kontextfreie Grammatik G
an, sodass L(G) = L gilt.
(b) Sei G = ({S}, Σ, {S → ε | aSc | aSbSc}, S) eine kontextfreie Grammatik. Zeigen
Sie, dass für alle in G ableitbaren Wörter w die Eigenschaft |w|a = |w|c gilt.
Lösungsskizze.
(a) G = ({S, X, B}, Σ, P, S) mit P : S → Xb X → abaXba | B B → bB | ε
(b) Sei u ∈ L(G). Wir zeigen |w|a = |w|c mit Induktion über die Erzeugung von u.

ε: |ε|a = 0 = |ε|c .
aSc: Sei |w|a = |w|c . Dann gilt |awc|a = 1 + |w|a = 1 + |w|c = |awc|c .
aSbSv: Sei |w|a = |w|c und |v|a = |v|c . Dann gilt |avbwc|a = 1 + |v|a + |w|a =
1 + |v|c + |w|c = |avbwc|c .

Übungsaufgabe Ü13.6. (Kontextfreie Sprachen (2))


Zeigen Sie, dass folgende Sprache L = {am bn | m ≥ n ≥ 0} deterministisch kontextfrei
ist, indem Sie einen deterministischen Kellerautomaten (DPDA) angeben, der L auf
Endzustand akzeptiert. Ihr DPDA darf maximal vier Zustände besitzen.
Lösungsskizze. DPDA mit Initialkonfiguration qX und F = {q, p}:
a a b b
qX −
→ qAX qA −
→ qAA qA →
− p pA →
− p

X dient als Keller-Ende-Symbol.


Phase I (Zustand q): DPDA merkt sich, solange nur as gelesen werden, die Anzahl der
as auf dem Stack.
Phase II (Zustand p): sobald das erste b gelesen wird, reagiert der DPDA nur noch bs,
und das nur solange noch ein A auf dem Stack liegt.
Damit kann eine Eingabe nur vollständig gelesen werden, falls sie von der Form am bn
mit m ≥ n ≥ 0 ist.
Da beide Zustände akzeptierend sind, wird somit genau die angegebene Sprache akzep-
tiert.
Übungsaufgabe Ü13.7. (Pumping Lemma)
Sei Σ = {a, b, c}. Zeigen Sie, dass die Sprache L = {wcn wR | w ∈ {a, b}n ∧ n ∈ N0 } nicht
kontextfrei ist. Führen Sie einen Widerspruchsbeweis unter Verwendung des Pumping
Lemmas für kontextfreie Sprachen.
Lösungsskizze.
• Angenommen, L wäre kontextfrei. Dann können wir das PL für kontextfreie Spra-
chen anwenden.
• Sei n ∈ N+ eine PL-Zahl für L.
• Wähle z = an cn an . Es gilt |z| = 3n ≥ n und z ∈ L.
• Nach PL gibt es eine Zerlegung z = uvwxy mit 1. vx 6= ε, 2. |vwx| ≤ n und 3.
∀i ∈ N0 .uv i wxi y ∈ L.
• Sei z 0 = uv 2 wx2 y. Da wegen (2) nur maximal einer der beiden a-Blöcke gepumpt
werden kann, gilt, dass z 0 = an cz 00 oder z 0 = z 00 can . Da mindestens einer der
beiden a-Blöcke noch Länge n hat, muss |z 0 | = 3n gelten. Es ist aber wegen (1)
auch |z 0 | > 3n. Dies ist ein Widerspruch zu (3).
Alternativ: Fallunterscheidung über |vx|a > 0 oder |vx|c > 0.
• Also haben wir einen Widerspruch zur Annahme hergeleitet und somit ist L nicht
kontextfrei.

Übungsaufgabe Ü13.8. (Entscheidbarkeit)


Betrachten Sie die Menge A = {w ∈ {0, 1}∗ | |L(Mw )| ≤ 42}.
(a) Beweisen Sie, dass die Menge nicht semi-entscheidbar ist, indem Sie H0 ≤ A zeigen.
(b) Geben Sie einen Semientscheidungsalgorithmus für A an.
Lösungsskizze.
(a) A ist die Menge der Wörter, deren korrespondierenden Turingmaschine auf maxi-
mal 42 Eingaben hält. Wir zeigen H0 ≤ A mittels folgender Reduktion:
Reduktionsfunktion: Gegeben ein Wort w, gib die Kodierung w0 einer TM zurück,
die zuerst das Band löscht und dann Mw simuliert. Danach geht Mw0 in einen
Endzustand und hält.
Totalität: Die Reduktion gibt für jede Eingabe w ein entsprechendes w0 zurück.
Berechenbarkeit: Die Reduktion ist berechenbar, da nach VL Löschen des Bandes
und Simulation einer TM berechenbar sind.
Korrektheit:

• w ∈ H0 : Mw hält nicht auf dem leeren Band, folglich hält Mw0 auf keinem
Input, da es immer das Band löscht und Mw auf dem leeren Band simuliert.
Damit ist |L(Mw0 )| = 0 ≤ 42 und somit w0 ∈ A.
• w∈ / H0 : Da Mw auf dem leeren Band hält, akzeptiert Mw0 jeden Input, da
es immer Mw auf dem leeren Band simuliert und dann in einen Endzustand
übergeht. Damit ist |L(Mw0 )| = ∞ > 42 und w0 ∈
/ A.

(b) A ist die Menge der Wörter, die eine TM kodieren, die auf mindestens 43 Einga-
ben hält. Semientscheidungsalgorithmus: Simuliere Mw mit Dove-Tailing auf allen
Inputs. (Also: Simuliere für alle Eingaben der Länge ≤1 für 1 Schritt, dann für alle
Eingaben der Länge ≤2 für 2 Schritte, usw.) Sobald 43 der Simulationen halten,
gib 1 aus.
Übungsaufgabe Ü13.9. (polynomielle Reduktion)
Mit SUBSET bezeichnen wir das Problem:
• Gegeben: Ein -NFA N mit n Zuständen über dem Alphabet Σ = {0, 1} und eine
Zahl m ≤ n.
• Frage: Gibt es ein Wort w der Länge m, sodass N dieses Wort nicht akzeptiert?
In Mengenschreibweise:

SUBSET := {(N, m) | N = (Q, Σ, δ, q0 , F ) ist -NFA ∧ m ≤ |Q| ∧ Σm \ L(N ) 6= ∅}

(a) Zeigen Sie, dass SUBSET NP-vollständig ist. Verwenden Sie hierbei eine geeignete
Reduktion von 3-KNF-SAT auf SUBSET.
(b) Wenden Sie Ihre Reduktion auf (x1 ∨ ¬x3 ∨ x4 ) ∧ (¬x1 ∨ x2 ∨ x3 ) an. Geben Sie
den konstruierten -NFA graphisch an.
Hinweis: Betrachten Sie die Menge aller nichterfüllenden Belegungen für die Formel F ,
die genau m Variablen hat, als Wörter der Länge m.
Lösungsskizze.
(a) • Idee: Der -NFA N erkennt alle nicht erfüllenden Belegungen von F . Hierfür
rät er zunächst die Klausel, welche nicht erfüllt ist und dann die unerfüllende
Belegung.
• Reduktion: Sei F = ki=1 Ci eine Formel in 3-KNF mit m Variablen (x1 , x2 , ...xm )
V

und mit Ci = lj=1


Wi
Lij für jedes i. Der -NFA wird dann wie folgt definiert
 
N = {q0 } ∪ {qij | i ∈ [1, k] ∧ j ∈ [0, m]}, {0, 1}, δ, q0 , {qim | i ∈ [1, k]} ,

wobei

δ = {(q0 , , qi0 ) | i ∈ [1, k]}


∪ {(qi(k−1) , 0, qik ) | k ∈ [1, m] ∧ ¬xk 6∈ {Li1 , . . . , Lili }}
∪ {(qi(k−1) , 1, qik ) | k ∈ [1, m] ∧ xk 6∈ {Li1 , . . . , Lili }}

Die Reduktion bildet dann F auf (N, m) ab.


• Korrektheit:
F ist erfüllbar gdw. nicht alle Belegungen nicht erfüllend sind. Sei σ(F ) = 0
eine nicht erfüllende Belegung. Dann existiert insbesondere eine Klausel Ci
mit σ(Ci ) = σ(Li1 ) + σ(Li2 ) + σ(Li3 ) = 0. Das Wort w = σ(x1 )σ(x2 )...σ(xm )
wird dann von qi0 aus akzeptiert und es gilt somit w ∈ L(N ).
Besteht andererseits ein Lauf in N über qi0 , so erfüllt die Belegung, beschrie-
ben durch den Lauf, kein Literal der Klausel Ci . Damit ist die Belegung
unerfüllend für F .
• Polynomielle Reduzierbarkeit:
Der konstruierte -NFA hat O(km) Zuständen und ein konstantes Alphabet
und hat somit maximal Größe polynomiell in der Größe von F . Er kann auch
in polynomieller Zeit berechnet werden, da jede Komponente während des
Lesens einer Klausel C direkt konstruiert werden kann.
• SUBSET ∈ N P :
Ein Zertifikat ist ein Wort w ∈ Σm \ L(N ). Da m ≤ |Q|, ist |w| = m poly-
nomiell bezüglich |N |. Das Wortproblem (und damit w ∈
/ L(N )) kann nun in
polynomieller Zeit gelöst werden (vgl. Vorlesung).
(b) (N, 4) mit N :
0 0, 1 1 0



1 0 0 0, 1
Prof. Javier Esparza Technische Universität München
Philipp Czerner, Martin Helfrich Lehrstuhl für Theoretische Informatik
Einführung in die Theoretische Informatik
Sommersemester 2021 – Hausaufgabenblatt 13

• Diese Woche werden alle Aufgaben korrigiert.


• Wenn Sie einen Beweis aufstellen, von dem Sie wissen, das einzelne Schritte proble-
matisch oder unvollständig sind, merken Sie dies bitte in Ihrer Lösung an, damit
wir das bei der Korrektur positiv berücksichtigen können.
• Um die Korrektheit einer Reduktion zu argumentieren, genügt es, die wesentlichen
Argumente hinter Ihrer Konstruktion zu nennen. Ein vollständig präzises formales
Argument ist nicht notwendig.
• 0∈N

Aufgabe H13.1. (2-EZ ) 0.5+0.5+0.5+0.5+0.5+0.5 Punkte


Bestimmen Sie für folgende Probleme jeweils, ob sie NP-vollständig sind, unter der An-
nahme P 6= NP. Begründen Sie Ihre Antworten kurz.
(a) Eingabe: Aussagenlogische Formel F
Ausgabe: Existieren zwei erfüllende Belegungen für F ?
(b) Eingabe: Wörter u, v ∈ {0, 1}∗
Ausgabe: Gibt es ein Wort w ∈ {0, 1}|uv| , sodass auf Eingabe w die DTM Mu
in weniger Schritten als die DTM Mv hält? (Mv muss nicht halten.)
(c) Eingabe: Zwei endliche Mengen A, B ⊂ N, k ∈ N
Ausgabe: Gibt es M ⊆ B, |M | ≤ k, sodass jedes x ∈ A ein Element in M teilt?
(d) Eingabe: Aussagenlogische Formel F
Ausgabe: Existiert eine äquivalente Formel F 0 in konjunktiver Normalform?
(e) Eingabe: Vektoren v1 , ..., vk ∈ Zd , d ∈ N
Ausgabe: Existieren x1 , ..., xn , y1 , ..., ym ∈ {v1 , ..., vk }, sodass i xi − i yi = 0,
P P

n + m > 0, und {x1 , ..., xn } ∩ {y1 , ..., ym } = ∅ ?


(f) Eingabe: Ungerichteter Graph G = (V, E)
Ausgabe: Gibt es einen Kreis in G, der jeden Knoten und jede Kante genau
einmal besucht? (Start und Ende werden nicht separat gezählt.)
Lösungsskizze.
(a) Wahr. Für (a) ∈ NP verwenden wir das Paar der Belegungen als Zertifikat. Außer-
dem können wir von SAT reduzieren, indem wir eine nutzlose Variable hinzufügen.
(b) Falsch. Das Problem ist unentscheidbar; wir reduzieren leicht von Halteproblem
auf leerem Band, indem wir die TM so verändern, dass sie ihre Eingabe löscht,
und als Mu verwenden. Mv ist dann eine TM, die nie terminiert.
(c) Wahr. Das Zertifikat ist M , und für die andere Richtung reduzieren wir von MEN-
GENÜBERDECKUNG: Jedes Element wird zu einer unterschiedlichen Primzahl,
und jede Menge zum Produkt der Primzahlen ihrer Elemente. Um n Primzahlen
zu finden, gehen wir n2 Zahlen durch und testen, ob die Zahl prim ist. Dass wir so
immer genug Primzahlen finden, folgt z.B. aus dem Primzahlsatz.
(d) Falsch. Die Antwort ist immer „ja“, und das Problem somit in P. Wenn es NP-
vollständig wäre, folgt P = NP nach Lemma 6.16, entgegen der Annahme.
(e) Falsch. Das Problem ist in P, da es genügt zu bestimmen, ob die Vektoren v1 , ..., vk
linear abhängig sind (mit Gauß-Elimination). Die Summe i xi − i yi ist nach
P P

den Einschränkungen eine nichttriviale Linearkombination der vi , falls diese also


linear unabhängig sind, kann die Summe nie 0 sein. Umgekehrt gilt, dass, falls
die vi linear abhängig sind, nichttriviale Faktoren λ1 , ..., λk ∈ Q existieren, sodass
P
i λi vi = 0. Indem wir mit dem Produkt der Nenner multiplizieren, erhalten wir
Faktoren λ0i ∈ Z. Wenn λ0i > 0, dann wählen wir vi entsprechend häufig als xj ,
ansonsten als yj .
(f) Falsch. Ein Kreis, der jede Kante besucht, besucht jeden Knoten mit Grad d genau
d/2-mal. Wir müssen also lediglich überprüfen, ob der Graph zusammenhängend
ist und alle Knoten Grad 2 haben.

Aufgabe H13.2. (There are four colours! Four!) 1+1+0.5+0.5+1+1 Punkte


Sei G = (V, E) ein ungerichteter Graph. Für k ∈ N ist eine k-Färbung von G eine (totale)
Funktion f : V → {0, ..., k−1} mit f (u) 6= f (v) für alle {u, v} ∈ E. Es haben also alle
benachbarten Knoten unterschiedliche Farben. Das k-Färbbarkeitsproblem (k-COL) ist
folgendermaßen definiert, für k ∈ N.
Eingabe: Ungerichteter Graph G = (V, E)
Ausgabe: Existiert eine k-Färbung für G ?
Unser Ziel ist es, zu zeigen, dass 3-COL ein NP-vollständiges Problem ist. Als Zwischen-
schritt betrachten wir eine Variante des Problems, bei dem eine Teilfärbung bereits vor-
gegeben ist. Für eine k-Färbung f ist eine Teilfärbung f 0 : V → {0, ..., k−1} eine beliebige
partielle Funktion mit f 0 (v) ∈ {f (v), ⊥} für alle v. Das partielle k-Färbbarkeitsproblem
(Partial-k-COL) ist nun
Eingabe: Ungerichteter Graph G = (V, E), partielle Funktion f 0 : V → {0, ..., k−1}
Ausgabe: Existiert eine k-Färbung f für G, mit Teilfärbung f 0 ?
(a) Zeigen Sie Partial-k-COL ≤p k-COL und k-COL ≤p Partial-k-COL für k ∈ N. Es
genügt hier, die Korrektheit Ihrer Reduktionen zu skizzieren, ein vollständiger
Beweis ist nicht notwendig.
(b) Beweisen Sie k-COL ∈ NP für k ∈ N.
Nun wollen wir SAT auf Partial-3-COL reduzieren, indem wir die Farben verwenden,
um logische Gatter zu simulieren. Wir verwenden Farben {0, 1, 2}, wobei 0 und 1 für wahr
und falsch stehen, und 2 eine Farbe ist, die wir intern in unserem Schaltkreis verwen-
den, allerdings nicht als Eingabe oder Ausgabe. Zusätzlich betrachten wir mehrdeutige
Gatter, die bei bestimmten Eingaben sowohl 1 als auch 0 ausgeben können.
Seien nun n ∈ N und g : {0, 1}n → P({0, 1}) beliebig. Wir wollen eine Instanz von
Partial-k-COL konstruieren, also einen partiell gefärbten Graphen, die einen Schaltkreis
darstellt, der g simuliert. Dazu verwenden wir Knoten x1 , ..., xn und y, wobei x1 , ..., xn
die Eingabe abbilden (also mit beliebigen Farben in {0, 1} gefärbt werden können), und
y dann eine Farbe entsprechend g erhalten muss.
Formal sei G = (V ∪ {x1 , ..., xn , y}, E) ein Graph, und f 0 : V → {0, 1, 2} eine
partielle Funktion. Wir sagen, dass (G, f 0 ) ein g-Gatter ist, wenn für jede Funktion
I : {x1 , ..., xn } → {0, 1} eine 3-Färbung f von G existiert, sodass f 0 und I Teilfärbungen
von f sind. Die Menge der Farben, die solche f dem Knoten y zuordnen können, muss
genau g(I(x1 ), ..., I(xn )) entsprechen, es gilt also {f (y) : f } = g(I(x1 ), ..., I(xn )).
Die folgende Instanz ist z.B. ein CHOICE-Gatter, wobei CHOICE(x1 , x2 ) := {x1 , x2 }
für x1 , x2 ∈ {0, 1}. (Die Ausgabe entspricht also einer der Eingaben, darf sich aber
aussuchen, welcher.)

x1

y 2

x2

(c) Konstruieren Sie ein NOT-Gatter, wobei NOT(x1 ) := {¬x1 } für x1 ∈ {0, 1}.
(d) Sei weakNOT(x1 ) := NOT(x1 ) ∪ {0}. Konstruieren Sie ein weakNOT-Gatter.
(e) Konstruieren Sie ein OR-Gatter, mit OR(x1 , x2 ) := {x1 ∨ x2 } für x1 , x2 ∈ {0, 1}.
(f) Beweisen Sie nun SAT ≤p Partial-3-COL.
Hinweis: Wenn Sie ein Objekt konstruieren, und es nicht offensichtlich ist, dass ihre
Konstruktion den geforderten Bedingungen entspricht, begründen Sie dies kurz.
Lösungsskizze. (a) k-COL ≤p Partial-k-COL ist trivial, wir verwenden einfach die partielle
Funktion, die nirgendwo definiert ist und lassen den Graph unverändert.
Für die andere Richtung sei nun G = (V, E) ein Graph und f 0 : V → {0, ..., k−1} eine
partielle Funktion. Wir fügen G eine k-Clique hinzu, mit Knoten v0 , ..., vk−1 . Wir wissen,
dass jede Färbung von G den Knoten v0 , ..., vk−1 unterschiedliche Farben zuweisen muss
(wir ignorieren f 0 zunächst). Bei einer Färbung Farben zu tauschen macht die Färbung
nicht ungültig, wir können also oBdA annehmen, dass vi genau Farbe i bekommt, für
i ∈ {0, ..., k−1}. Damit können wir nun die partielle Färbung realisieren: hier verbinden
wir jeden Knoten u ∈ V , für den f 0 (u) 6= ⊥ gilt, mit den Knoten {vi : i 6= f 0 (u)}. Damit
muss u dann zwangsläufig Farbe f 0 (u) haben.
Die Aufgabenstellung fordert nur eine Beweisskizze der Korrektheit und die bisherigen
Ausführungen genügen dafür. Zwecks Verständlichkeit folgt nun ein ausführlicher Beweis.
Formal definieren wir also G0 := (V 0 , E 0 ) mit V 0 := V ] {v0 , ..., vk−1 } und

E 0 := E ∪ {vi , vj : i 6= j} ∪ {{u, vi } : u ∈ V, i 6= f (u) 6= ⊥}

Wenn eine Färbung f für G0 existiert, dann existiert auch eine Färbung f ∗ mit f ∗ (vi ) = i
für i ∈ {0, ..., k−1}. (Dies gilt, da wir Farben vertauschen können, ohne die Färbung zu
beeinflussen.) Angenommen, f 0 wäre keine Teilfärbung von f ∗ . Dann gibt es ein u ∈ V
mit ⊥ = 6 f 0 (u) 6= f ∗ (u). Sei nun c := f ∗ (u). Da ⊥ =
6 f 0 (u) und f 0 (u) 6= c, gibt es eine
Kante {u, vc }. Aber f ∗ (vc ) = c = f ∗ (u); dies ist ein Widerspruch dazu, dass f ∗ eine
Färbung ist.
Umgekehrt, wenn f : V → {0, ..., k−1} eine Färbung von G mit Teilfärbung f 0 ist,
können wir f auf V 0 erweitern, indem wir f (vi ) := i definieren, für i ∈ {0, ..., k−1}.
Jede Kante in E hat unterschiedliche Farben, da f eine Färbung ist. Jede Kante in
{v0 , ..., vk−1 } auch, da f (vi ) = i. Und schließlich sind auch die Kanten zwischen einem
u ∈ V und einem vi erfüllt, da diese Kanten nur existieren, wenn f 0 (u) definiert ist;
somit gilt f (u) = f 0 (u) 6= i = f (vi ).
(b) Hierzu verwenden wir die Färbung als Zertifikat. Wir verifizieren die Färbung, indem
wir alle Kanten durchgehen, was polynomielle Zeit benötigt. Die Färbung besteht aus
|V | Zahlen, ist also auch nur polynomiell lang.
(c)

x1 y 2

(d) Hier geben wir zwei mögliche Lösungen an. Zunächst kann man das Gatter folgen-
dermaßen auf direktem Wege bauen:

x1 y

0 2

Wenn x1 = 1, dann muss der nächste Knoten 2 sein, der nächste 1 und y schließlich 0.
Für x1 = 0 können wir den nächsten Knoten als 1 wählen, den folgenden als 2 und y
dann als 0 oder 1. Alternativ lässt es sich auch über das CHOICE-Gatter konstruieren, da
weakNOT(x1 ) = CHOICE(NOT(x1 ), 0), also als

x1

y 2

2 0

(e) Wenn wir nur CHOICE(x1 , x2 ) verwenden, sind wir für die Fälle x1 = x2 bereits
fertig. Für die Fälle x1 6= x2 müssen wir dann allerdings dafür sorgen, dass die Ausgabe
1 und nicht 0 ist. Hierfür können wir zwei weakNot-Gatter verwenden: Für x1 und x2
bauen wir jeweils ein solches Gatter und verbinden dessen Ausgabe mit der Ausgabe
des CHOICE-Gatters. Wenn z.B. x1 = 0, dann kann das weakNot-Gatter einen beliebigen
Wert annehmen und beeinflusst die Ausgabe des CHOICE-Gatters nicht. Wenn allerdings
x1 = 1, dann ist hat das weakNot-Gatter Ausgabe 0, und das CHOICE-Gatter muss somit
Ausgabe 1 haben.

x1

y 2

x2

0
(f) Mit den Gattern für NOT und OR können wir auch ein Gatter für AND bauen, und
damit beliebige Schaltkreise. Wir reduzieren nun von SAT, sei also F eine beliebige
aussagenlogische Formel mit Variablen x1 , ..., xk . Wir definieren uns nun die Funktion
g : {0, 1}k → P({0, 1}), sodass für eine beliebige Belegung σ : {x1 , ..., xk } → {0, 1}
gilt, dass g(σ(x1 ), ..., σ(xk )) := {σ(F )}. Die Funktion g bildet also die Werte der Va-
riablen auf die einelementige Menge, die den Wahrheitswert der Formel beinhaltet, ab.
Nun können wir ein g-Gatter bauen, unter Verwendung der NOT-, OR- und AND-Gatter.
Schließlich müssen wir sicherstellen, dass eine Färbung den Knoten x1 , ..., xk eine erfül-
lende Belegung zuweist. Hierzu erstellen wir einen Knoten, den wir mit Farbe 2 färben,
und verbinden ihn mit jedem xi , für i ∈ {1, ..., k}, damit diese nur noch Farben 0 und 1
erhalten können. Um dafür zu sorgen, dass die Belegung erfüllend ist, weisen wir Knoten
y die Farbe 1 zu.
Aufgabe H13.3. (Vollständig, oder fehlt da was?) 1+1 Punkte
Zeigen Sie, dass das folgende Problem, was wir NTM-SIM nennen, NP-vollständig ist,
indem Sie Definitionen 6.14 und 6.15 direkt verwenden. Sie dürfen also insbesondere
nicht benutzen, dass wir von anderen Problemen (z.B. SAT) bereits gezeigt haben, dass
diese NP-schwierig sind.
Eingabe: v$x$1n für v, x ∈ {0, 1}∗ , n ∈ N
Ausgabe: Akzeptiert die NTM Mv die Eingabe x in höchstens n Schritten?
(a) Zeigen Sie NTM-SIM ∈ NP .
(b) Beweisen Sie, dass NTM-SIM NP-schwierig ist.
Sie dürfen ohne Angabe von Details verwenden, dass eine Turingmaschine M eine
beliebige andere TM Mw simulieren kann, auch wenn sie nur über w verfügt.
Lösungsskizze. (a) Wir können dieses Problem leicht mit einer NTM lösen. Hierfür si-
mulieren wir Mv auf der Eingabe x für n Schritte – wenn Mv akzeptiert, tun wir dies
auch. Da eine Eingabe w = v$x$1n Länge mindestens |w| ≥ n hat, benötigen wir nur
polynomiell viel Zeit hierfür. Somit kann das Problem in Polynomialzeit auf einer NTM
entschieden werden, und ist in NP.
(b) Sei P ∈ NP beliebig, und sei Mv eine NTM, die P in polynomieller Zeit entscheidet.
Insbesondere gibt es also ein Polynom p, sodass Mv jedes x ∈ P in höchstens p(|x|) Schrit-
ten akzeptiert. Unsere Reduktionsfunktion f ist nun definiert als f (x) := v$x$1p(|x|) . Dies
lässt sich offensichtlich in polynomieller Zeit berechnen, und die Länge der Eingabe ist
polynomiell in |x|.
Aufgabe H13.4. (Auf Wiedersehen! Tschüss!) 1+1 Punkte
Theo hat bald die Grundschule erfolgreich abgeschlossen, und wechselt auf eine weiter-
führende Schule. Dora freut sich riesig für ihn, und möchte eine große Abschiedsparty
organisieren. Sie hat auch schon eine lange Liste mit Freunden und Bekannten, die sie
einladen könnte. Leider gibt es ein paar Personen, die sich nicht leiden können und des-
wegen nicht gleichzeitig eingeladen werden sollten. Dora versucht herauszufinden, wie
viele Leute sie maximal einladen kann. Können Sie ihr dabei helfen?
Wir betrachten hier das PARTY Problem.
Eingabe: Endliche Menge F an Freunden, Abneigungen A ⊆ F × F , k ∈ N
Ausgabe: Existiert ein M ⊆ F mit |M | ≥ k und M 2 ∩ A = ∅ ?
(a) Dora hat folgende Liste:
1. Theo 7. Tyx’Hxli E’Oozrt
2. Dora 8. Ehemaliger Rektor
3. Bijanka 9. Dokh’Toa Ivl’Zpaasa
4. Theos Neffe 10. Dr. Evilsparza
5. Eva Pirsalz 11. Kindergartenprofessor
6. Jasper Vazarie 12. Baukommissionsleiter
Folgende Personen verstehen sich nicht so gut und dürfen deshalb nicht beide
eingeladen werden.

{(2, 5), (7, 9), (8, 12), (1, 10), (5, 11), (3, 6),
(4, 5), (3, 12), (9, 10), (6, 9), (2, 10), (8, 11)}

Wie viele Personen kann Dora maximal einladen? Beweisen Sie Ihre Antwort, und
somit insbesondere, wieso es unmöglich ist, mehr Personen einzuladen.
(b) Zeigen Sie, dass PARTY ein NP-vollständiges Problem ist.
Lösungsskizze. (a) Wir können diese Liste als Graphen betrachten:

1 10 2 5 4

7 9 11

6 3 12 8

Dies ist genau der ungerichtete Graph G = (F, A). In diesem Graphen finden wir nun
ein Matching, also eine Teilmenge der Kanten, sodass keine zwei Kanten adjazent sind:

1 10 2 5 4

7 9 11

6 3 12 8

Von jeder dieser Kanten können wir einen der adjazenten Knoten einladen. Wir haben
5 solcher Paare gefunden und |F | = 12, es ist also nicht möglich, mehr als 7 Personen
einzuladen. Nun genügt es also, eine Lösung M ⊆ F mit Größe |M | = 7 zu finden.
Notwendigerweise müsste hierfür nach unserem vorherigen Argument 4, 11 ∈ M gelten
(falls ein M mit Größe 7 existiert). Für jedes Paar müsste genau einer der Knoten
eingeladen werden, also dann 2, 12, danach 1, 6, und schließlich 7. Wir erhalten M =
{1, 2, 4, 6, 7, 11, 12}, was tatsächlich eine Lösung ist.
1 10 2 5 4

7 9 11

6 3 12 8

(b) Wie in (a) betrachten wir für das PARTY Problem den ungerichteten Graphen (F, A).
Sei f die Funktion, die auf Eingabe eines ungerichteten Graphen G = (V, E) den
komplementären Graphen G = (V, V 2 \ E) ausgibt, also den Graphen, in dem zwei
Knoten genau dann adjazent sind, wenn sie es in G nicht sind. (Formal eigentlich G =
(V, E) mit E := {{u, v} : u, v ∈ V, u 6= v, {u, v} ∈/ E}), da ungerichtete Kanten keine
Paare sind.) Offensichtlich lässt sich f in Polynomialzeit berechnen, da |E| ≤ |V |2 immer
gelten muss.
Wir können nun PARTY ≤p CLIQUE und CLIQUE ≤p PARTY reduzieren. In beiden
Fällen ist f die Reduktionsfunktion (den Parameter k lassen wir unverändert). Sei nun
(F, A, k) eine Instanz von PARTY, und G := (F, A). Eine Menge M ⊆ F mit |M | ≥ k ist
genau dann eine Lösung von (F, A, k), wenn keine zwei Knoten in M benachbart sind.
Dies ist äquivalent dazu, dass in f (G) alle Knoten in M benachbart sind, also M eine
Clique in f (G) bildet. Somit gilt

(G, k) ∈ PARTY ⇔ (f (G), k) ∈ CLIQUE

und wir haben PARTY ≤p CLIQUE gezeigt. Da f bijektiv ist, gilt ebenfalls

(G, k) ∈ CLIQUE ⇔ (f −1 (G), k) ∈ PARTY

Aufgrund von f −1 = f folgt nun CLIQUE ≤p PARTY.


Da CLIQUE (wie in der Vorlesung gezeigt) NP-vollständig ist, ist es auch PARTY.

Wir hoffen, Sie hatten zumindest ein wenig Freude beim Bear-
beiten der Aufgaben. Die Hausaufgabenzeit ist nunmehr bald
vorbei – wir verabschieden uns und wünschen Ihnen fröhliche
vorlesungsfreie Wochen!

—Ihr fiktionales THEO-Team

Das könnte Ihnen auch gefallen