Mitschrift Repetitorium Theoretische Informatik und Logik

Werbung
Mitschrift Repetitorium Theoretische
Informatik und Logik
Teil 1: Formale Sprachen, 15.01.2010, 1. Edit
Allgemeine Hinweise für die Prüfung

Das Pumping-Lemma für kontextfreie Sprachen kommt nicht (sehr wohl aber das für
reguläre Sprachen!)
Übungsbeispiele durchgehen
„Stupides“ Auswendiglernen der Fragen der vorangegangenen Prüfungen bringt nichts – Es
kommen immer andere Fragen. Es kommt also auf das Verständnis an.
Bei der Prüfung ist die Abgabe von Zusatzzetteln nicht erlaubt
Angabe genau beachten und immer genau das machen, was da steht (zB wenn gefordert ist,
einen DEA zu konstruieren, dann soll es auch ein DEA sein und kein NEA; wenn man eine
Grammatik angeben soll, dann soll die ganze Grammatik angegeben werden und nicht nur
die Produktionen; wenn nicht gesagt ist, dass man bei einem Automaten die Falle weglassen
kann, dann soll man sie auch nicht weglassen; …)
Die im Repetorium gebrachten Beispiele sind aus Zeitgründen sehr einfach gehalten. Das
heißt nicht, dass zur Prüfung auch unbedingt so einfache Beispiele kommen müssen





Reguläre Sprachen
Beispiele für Fragen



Jede endliche Menge ist regulär: Richtig
Jede reguläre Menge ist endlich: Falsch
Jeder deterministische endliche Automat ist auch ein nondeterministischer endlicher
Automat: Richtig
Jeder nondeterministische Automat ist auch ein deterministischer endlicher Automat: Falsch
Es gibt Kontextfreie Sprachen, die regulär sind: Richtig
Alle Kontextfreien Sprachen sind auch regulär: Falsch



Deshalb: Fragen genau lesen!
Geben Sie eine reguläre Grammatik an, welche die Sprache {cba}*{cbb}
akzeptiert
Vorgehensweise: Erst endlichen Automaten zeichnen
c
b
q1
q2
a
b
q3
q4
Die Produktionen bildet man dann einfach in der Form (Zustand) ->
(Terminalsymbol)(Nachfolgezustand) sowie beim Endzustand dann auf -> ε.
Hier also P = { q1 -> cq2, q2->bq3, q3 -> aq1|bq4, q4->ε }
Die Grammatik sieht dann folgendermaßen aus: G = <{ q1, q2, q3, q4 }, { a, b, c }, P, q1>
Geben Sie einen Automaten an, welcher das Komplement der Sprache
{cba}*{cbb} akzeptiert
Konstruktion: Ausgehend vom ursprünglichen Automaten wird ein neuer Zustand hinzugefügt, zu
dem man von allen anderen Zuständen aus mit den anderen Symbolen hingelangt. Danach werden
noch die Endzustände umgekehrt und dann sieht das Ganze in etwa so aus:
a, b, c
b, a
q5
a, c
c
c
a, b, c
b
q1
b
q2
q3
q4
a
Das Komplement zu L ist { a, b, c } * - { cba } * { cbb }
Geben Sie einen deterministischen Automaten an, der die Sprache {a}*{aa}
akzeptiert.
Wenn man jetzt bei der Prüfung intuitiv so einen Automaten zeichnen würde:
a
a
q1
a
q2
q3
dann ist das falsch, denn der obige Automat ist nicht deterministisch (von q1 führt a nämlich zu zwei
verschiedenen Zuständen)
Deshalb muss der Automat determiniert werden. Wer die Lösung nicht gleich selber sieht, kann man
den Algorithmus zum Determinieren anwenden, der im Skriptum angegeben ist:
Zuerst die Übergangsfunktionen aufzeichnen (Die Tabelle erstellt man wie folgt: Von welchen
Zuständen komme ich mit welchen Symbolen zu welchen Zuständen)
δ
q1
q2
q3
a
{q1, q2}
{q3}
{}
Nun determiniert man das, indem aus allen nicht eindeutigen Zuständen in der rechten Spalte einen
neuen Zustand abspaltet, der zu jenen Zuständen führt, die sich aus der Vereinigung der darin
enthaltenen Zustände ergeben:
δ
{q1}
{q1, q2}
{q1, q2, q3}
a
{q1, q2}
{q1, q2, q3}
{q1, q2, q3}
Daraus ergibt sich folgender DEA:
a
a
{q1}
a
{q1,q2}
{q1, q2, q3}
Minimalautomat, der {ab}+ akzeptiert
Falsch:
b
a
q1
b
q2
q3
Warum? Weil ein nichtdetermistischer Automat kein Minimalautomat sein kann. Der
Minimalautomat sieht so aus:
Richtig:
a
a
q1
b
q2
q3
Kontextfreie Sprachen
Geben Sie eine kontextfreie Grammatik an, welche {anbn|n≥1} erzeugt
G = <{S}, {a, b}, { S->aSb | ab }, S>
Auch hier gilt wieder: Beim Test reicht es nicht, nur die Produktionen anzugeben, wenn nach der
Grammatik gefragt ist!
Grammatik für { anbn | n≥0 }
G = <{S}, {a, b}, { S->aSb | ε }, S>
Linksableitungen für alle n ≥ 1
S --> an-1bn-1 --> anbn
Linksableitungen für alle n ≥ 0
S --> anbn --> anbn
Induktive Definition einer Sprache
L ist die kleinste Menge, für die gilt:
ε∈L
a ∈ L für a ∈ Σ
aw ∈ L für a ∈ Σ, w ∈ L
definiert die Sprache {ab}*
Chomsky-Normalform
Wiederholung Chomsky-Normalform: Grammatik der Form, so dass jede Produktion der Gestalt A ->
BC oder A -> a mit A, B, C ∈ Nonterminale und a ∈ Terminalsymbole ist. Um das Leerwort erzeugen
zu können, ist die Erzeugung aus dem Startsymbol S erlaubt, wenn S dann nicht mehr auf der rechten
Seite der Produktion vorkommt
{ S -> aS | bS | ε } in Chomsky-NF:



ε-Produktionen weg: { S -> aS | bS | a | b }
Terminalsymbole wegbringen: { S -> XaS | XbS | a | b, Xa -> a, Xb -> b}
ε wieder rein, das es nur vom Startsymbol weg erlaubt ist, wenn es dann nicht mehr rechts
vorkommt, müssen wir einen neuen Startzustand S‘ bilden: { S‘ -> XaS | XbS | a | b | ε, S-> XaS
| XbS | a | b, , Xa -> a, Xb -> b }
Erweiterte Greibach Normalform
Wiederholung Erweiterte Greibach-Normalform: Zu jeder Kontextfreien Grammatik kann man eine
äquivalente kontextfreie Grammatik konstruieren, dass jeden Produktion der Gestalt A -> aw mit A ∈
Nonterminale, a ∈ Terminale und w beliebig ist
Gegeben ist die Sprache L = { a2n-3b7ka2n+3 | n, k ≥ 2 }. Daraus soll man Produktionen in erweiterter
Greibach-Normalform angeben.
Dazu ist es hilfreich, wenn man sich erst mal ansieht, welche Wörter die Sprache überhaupt
produziert. Zuerst fällt auf, dass das Symbol a links und rechts vom b gleich schnell wächst. Das
kleinste Wort, das von dieser Sprache akzeptiert wird, ist ab14a7. Mit diesem Wissen kann man sich
die Produktionen nun relativ einfach herleiten:
P = { S -> a2Sa2 | aAa7, A -> b7A|b14 }
Aufgabe für Zuhause: Linksableitungen finden
Grenzen von Sprachen/Abschlusseigenschaften
Zeigen Sie, dass die von der Grammatik G = <{S,B}, {a,b,c}, {S->aSBB|c, B-> b},
S> erzeugte Sprache nicht regulär ist
Als erstes sollte man sich überlegen, welche Sprache die Grammatik überhaupt erzeugt. Das geht am
besten mit einem Ableitungsbaum:
S
B
a
S
B
b
B
B
a
S
...
b
b
b
c
Jetzt sieht man deutlich, dass die Grammatik die Sprache L = {ancb2n | n≥0 } erzeugt. Diese Sprache ist
u.a. rekursiv, rekursiv aufzählbar, monoton und kontextfrei. Wir sollen aber zeigen, dass die Sprache
nicht regulär ist.
Also bilden wir sie mit einem Homomorphismus auf die nicht reguläre Sprache L‘ = anb2n ab:
h:{ a, b, c } -> { a, b }*
h(a) = a
h(b) = b
h(c) = ε
Hätte man jetzt eine Sprache wie {anca2n | n≥0 }, dann müsste man eine gsm verwenden, die
folgendermaßen aussieht:
a/ a
a/ b
c/ε
Herunterladen