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/ε