Kellerautomat und Chomsky-Hierarchie
Ein Programm soll prüfen, ob in einem Text zu jeder öffnenden Klammer eine schließende gehört, auch bei beliebiger Schachtelung. Ein endlicher Automat scheitert daran: Er müsste die Tiefe zählen, und die ist unbegrenzt.
Aus den Datenstrukturen kennst du den Stapel. Gibt man einem Automaten einen Stapel als Gedächtnis, den Keller, erkennt er mehr Sprachen. Wie viel mehr, und wo gibt es weiterhin Grenzen? Die Chomsky-Hierarchie ordnet Grammatiken, Sprachen und Automaten in Klassen.
Kellerautomat
Ein Kellerautomat ist ein endlicher Automat mit einem Keller, auf dessen oberstes Symbol er zugreifen kann. Er ist ein Tupel . Neu gegenüber dem DFA sind das Kelleralphabet und das Kellerstartsymbol , das zu Beginn als einziges im Keller liegt. Ein Schritt hängt vom Zustand, vom gelesenen Zeichen (oder keinem, ) und vom obersten Kellersymbol ab. Der Automat wechselt den Zustand und ersetzt das oberste Symbol durch eine Folge von Kellersymbolen. Eine leere Folge entfernt es. Der Keller ist unbegrenzt, aber nur das oberste Symbol ist lesbar. Der Automat akzeptiert ein Wort, wenn er es ganz gelesen hat und dann (gegebenenfalls nach Schritten ohne Lesen) in einem Endzustand steht.
Ein Kellerautomat für mit n ≥ 1
Ein Kellerautomat für mit n ≥ 1
Zustände q0 (liest a), q1 (liest b) und q2 (Endzustand), Kellersymbole Z (Boden) und A. In der Spalte „ersetzt durch“ steht das oberste Symbol links.
| Nr. | Zustand | liest | oben | neuer Zustand | ersetzt durch |
|---|---|---|---|---|---|
| 1 | q0 | a | Z | q0 | AZ |
| 2 | q0 | a | A | q0 | AA |
| 3 | q0 | b | A | q1 | nichts (A entfernen) |
| 4 | q1 | b | A | q1 | nichts (A entfernen) |
| 5 | q1 | ε | Z | q2 | Z |
Wie verarbeitet er aabb?
Jedes a legt ein A auf den Keller, jedes b entfernt eines. Liegt am Ende wieder Z oben, ist die Zahl gleich.
| Schritt | Regel | Zustand | Restwort | Keller |
|---|---|---|---|---|
| 0 | Start | q0 | aabb | Z |
| 1 | 1 | q0 | abb | AZ |
| 2 | 2 | q0 | bb | AAZ |
| 3 | 3 | q1 | b | AZ |
| 4 | 4 | q1 | ε | Z |
| 5 | 5 | q2 | ε | Z |
Das Wort ist gelesen, und q2 ist ein Endzustand: akzeptiert. Bei aab bleibt ein A im Keller, Regel 5 greift nicht, das Wort wird abgelehnt. Der Automat ist deterministisch: In jeder Lage passt höchstens eine Regel.
Deterministische und nichtdeterministische Kellerautomaten
Ein Kellerautomat ist deterministisch, wenn er in jeder Lage höchstens einen möglichen Schritt hat, und nichtdeterministisch, wenn mehrere möglich sind. Ein nichtdeterministischer Automat akzeptiert ein Wort, wenn mindestens ein Weg zum Akzeptieren führt. Er würfelt nicht: Man stellt sich vor, er probiert alle Wege.
Beispiel sind die Palindrome gerader Länge (w gefolgt von w rückwärts, etwa abba). Der Automat legt die erste Hälfte auf den Keller und vergleicht die zweite beim Abbauen. Wo die Mitte liegt, sieht man dem Wort nicht an. Der nichtdeterministische Automat „rät“ sie. Ein deterministischer Kellerautomat erkennt diese Sprache nicht. Nichtdeterministische Kellerautomaten erkennen genau die kontextfreien Sprachen.
Potenzmengenkonstruktion
Ein nichtdeterministischer endlicher Automat (NFA) darf zu einem Zustand und Zeichen mehrere oder keinen Folgezustand haben. Er akzeptiert, wenn mindestens ein Weg in einem Endzustand endet. Beim endlichen Automaten bringt das keine neue Kraft: Jeder NFA lässt sich in einen DFA umbauen, der dieselbe Sprache erkennt. Die Potenzmengenkonstruktion geht so: Die Zustände des DFA sind Mengen von NFA-Zuständen, nämlich diejenigen, in denen der NFA nach dem gelesenen Wortanfang sein kann. Start ist . Beim Zeichen x geht eine Menge in die Vereinigung der Folgezustände all ihrer Elemente über. Eine Menge ist Endzustand, wenn sie einen NFA-Endzustand enthält. Hat der NFA n Zustände, hat der DFA höchstens .
Vom NFA zum DFA
Vom NFA zum DFA
Ein NFA über erkennt Wörter, die auf ab enden. Zustände q0 (Start), q1, q2 (Endzustand).
| Zustand | liest a | liest b |
|---|---|---|
| q0 | {q0, q1} | {q0} |
| q1 | nichts | {q2} |
| q2 | nichts | nichts |
Konstruiere den DFA.
Start ist {q0}. Neue Mengen werden nur gebildet, wenn sie vorkommen:
| Menge | liest a | liest b | Endzustand? |
|---|---|---|---|
| {q0} | {q0, q1} | {q0} | nein |
| {q0, q1} | {q0, q1} | {q0, q2} | nein |
| {q0, q2} | {q0, q1} | {q0} | ja |
Bei {q0, q1} und b: q0 liefert {q0}, q1 liefert {q2}, die Vereinigung ist {q0, q2}. Bei {q0, q2} und a: q0 liefert {q0, q1}, q2 nichts. Der DFA hat nur 3 der möglichen Mengen. Probe mit aab: {q0}, {q0, q1}, {q0, q1}, {q0, q2}: akzeptiert.
Kontextsensitive Sprachen und Chomsky-Hierarchie
In einer kontextsensitiven Grammatik darf ein Nichtterminal nur in einem bestimmten Umfeld ersetzt werden: mit nicht leerem . Man kann zeigen, dass dies dieselben Sprachen ergibt wie die Bedingung, dass keine Regel das Wort verkürzt: . Die Chomsky-Hierarchie ordnet vier Klassen, jede liegt in der nächstgrößeren:
| Typ | Sprachklasse | Regeln | Automatenmodell | Beispiel |
|---|---|---|---|---|
| 3 | regulär | , , | endlicher Automat | Wörter mit dem Teilwort ab |
| 2 | kontextfrei | nichtdeterministischer Kellerautomat | , Palindrome | |
| 1 | kontextsensitiv | mit | linear beschränkter Automat (Band nur so lang wie die Eingabe) | |
| 0 | allgemein | beliebig | Turingmaschine (nächste Lektion) | alle Sprachen, die eine Grammatik erzeugt |
Es gilt Typ 3 ⊂ Typ 2 ⊂ Typ 1 ⊂ Typ 0, und jede Klasse ist echt größer als die vorige. Je größer die Klasse, desto aufwendiger das Wortproblem: Bei Typ 3 und 2 gelingt es mit polynomiellem Aufwand, bei Typ 1 ist es lösbar, aber aufwendig, bei Typ 0 gibt es kein Verfahren, das es für jedes Wort entscheidet.
Eine kontextsensitive Grammatik für
Eine kontextsensitive Grammatik für
Regeln, alle mit : , , , , , . Leite aabbcc ab.
S ⇒ aSBC ⇒ aaBCBC ⇒ aaBBCC ⇒ aabBCC ⇒ aabbCC ⇒ aabbcC ⇒ aabbcc.
Die ersten zwei Schritte erzeugen zwei a und die Platzhalter B und C. Die Regel CB → BC sortiert die B vor die C. Dann werden von links die B zu b und danach die C zu c. Die Regel CB → BC hat links zwei Symbole, die Grammatik ist also nicht kontextfrei. Kein Kellerautomat erkennt diese Sprache. Anschaulich: Der Keller vergleicht die Zahl der a mit der Zahl der b, danach ist sie verbraucht, für die c fehlt sie.
Nichtdeterministisch heißt zufällig
Nichtdeterministisch heißt zufällig
„Ein nichtdeterministischer Automat würfelt bei jedem Schritt.“
Es wird nicht gewürfelt. Er akzeptiert ein Wort, wenn mindestens ein Weg zum Akzeptieren führt. Das ist eine Aussage über alle möglichen Wege, nicht über einen Zufall.
Nichtdeterminismus bringt immer nichts
Nichtdeterminismus bringt immer nichts
„Wie beim endlichen Automaten lässt sich jeder Kellerautomat deterministisch machen.“
Bei endlichen Automaten stimmt das (Potenzmengenkonstruktion). Bei Kellerautomaten nicht: Die Palindrome erkennt nur ein nichtdeterministischer Automat.
Zusammenfassung
Ein Kellerautomat ist ein endlicher Automat mit einem unbegrenzten Keller. Jeder Schritt liest das oberste Kellersymbol und ersetzt es durch eine Folge.
Nichtdeterministische Kellerautomaten erkennen genau die kontextfreien Sprachen. Deterministische erkennen weniger, etwa nicht die Palindrome .
Bei endlichen Automaten ist Nichtdeterminismus nicht stärker: Die Potenzmengenkonstruktion macht aus einem NFA mit n Zuständen einen DFA mit höchstens Zuständen.
Kontextsensitive Grammatiken verkürzen nie das Wort. Sie erzeugen Sprachen wie .
Chomsky-Hierarchie: Typ 3 (regulär), Typ 2 (kontextfrei), Typ 1 (kontextsensitiv), Typ 0 (allgemein). Jede Klasse ist echt größer als die vorige.
Automatenmodelle: endlicher Automat, Kellerautomat, linear beschränkter Automat, Turingmaschine.
Übungen
Ein NFA hat 5 Zustände. Wie viele Zustände hat der DFA der Potenzmengenkonstruktion höchstens?
Der Kellerautomat für aus dem Beispiel hat aaabb gelesen. Wie viele Symbole A liegen jetzt auf dem Keller? Das Bodensymbol Z zählt nicht.
Welche Aussage über die Chomsky-Hierarchie stimmt?
In welche kleinste Klasse der Chomsky-Hierarchie fällt die Sprache ?
Erkläre, wie ein Kellerautomat die Palindrome gerader Länge erkennt und warum er dazu nichtdeterministisch sein muss.