Zum Inhalt springen
Zurück zur Themenübersicht

Theoretische Informatik

Endliche Automaten und reguläre Sprachen

Der Zusammenhang zwischen Automaten und Grammatiken, und wo die Grenze des Modells beweisbar verläuft.

Benötigte Grundlagen

Dieses Vorwissen brauchst du für das Kapitel. Schau kurz nach, wenn dir etwas davon nicht mehr präsent ist, sonst leg direkt los.

Einführung

Zwei Werkzeuge, die zunächst nichts miteinander zu tun haben: Ein liest eine Zeichenfolge und entscheidet, ob sie zulässig ist. Eine erzeugt Zeichenfolgen aus Regeln.

Das eine prüft, das andere produziert. Und trotzdem beschreiben sie in einem wichtigen Fall exakt dieselben Sprachen.

Dieser Zusammenhang ist eines der schönsten Ergebnisse der theoretischen Informatik. Er erlaubt, zwischen beiden Sichten zu wechseln, je nachdem, welche gerade die einfachere ist. Und er zeigt genau, wo die Grenze des Automatenmodells liegt.

Das kannst du nach diesem Kapitel

  • die Arbeitsweise eines endlichen an einer regulären Sprache erläutern.

  • einen Automaten zu einer gegebenen Sprache entwerfen und prüfen.

  • den Zusammenhang zwischen Automat und beschreiben.

  • deterministische und nichtdeterministische Automaten unterscheiden (Vertiefung).

  • beweisen, dass eine bestimmte Sprache nicht regulär ist.

Kurz aufgefrischt

Vorausgesetzt werden , Startzustand, Übergänge, Endzustände und die aus Automaten und Zustandsdiagramme, dazu Alphabet, Wort und Sprache aus dem vorigen Kapitel.

Neu ist hier die Sprachsicht: Ein Automat wird nicht mehr als Beschreibung eines Geräts benutzt, sondern als Entscheider über eine Menge von Wörtern.

Ein Automat erkennt eine Sprache

Man lässt den ein Wort Zeichen für Zeichen lesen und schaut, wo er endet:

Ein Wort wird akzeptiert, wenn der Automat nach dem letzten Zeichen in einem Endzustand steht. Die von ihm erkannte Sprache ist die Menge aller akzeptierten Wörter.

Sprachen, für die es einen endlichen Automaten gibt, heißen regulär.

Beispiel: alle Wörter über {a,b}\{a, b\}, die auf abab enden.

        b            a            b
  →(S0) ──→ S0   (S0) ──→ (S1)  (S1) ──→ ((S2))

Vollständige Übergangstabelle:

Eingabe aaEingabe bb
S0S_0 (Start)S1S_1S0S_0
S1S_1 (zuletzt aa)S1S_1S2S_2
S2S_2 (zuletzt abab, Endzustand)S1S_1S0S_0

Beachte die Zeile S2S_2: Nach einem gefundenen abab geht es normal weiter, denn es können noch Zeichen folgen. Entscheidend ist allein, wo der Automat am Ende steht.

Alle Wörter, die auf ab enden

baababS0nichtsS1zuletzt aS2zuletzt ab

Drei , und jeder merkt sich genau eine Sache: wie das Wort bisher aufhört. S0S_0 heißt „nichts Brauchbares am Ende“, S1S_1 heißt „zuletzt ein aa“, S2S_2 heißt „zuletzt abab“, und nur S2S_2 ist Endzustand. Die interessante Kante ist die von S2S_2 zurück: Nach einem gefundenen abab geht es normal weiter, denn es können noch Zeichen folgen. Entscheidend ist allein, wo der am Ende steht. Probiere abababab durch: S0→S1→S2→S1→S2S_0 \to S_1 \to S_2 \to S_1 \to S_2: Endzustand, also akzeptiert. Und abaaba: S0→S1→S2→S1S_0 \to S_1 \to S_2 \to S_1, kein Endzustand, also nicht.

Der Zusammenhang mit Grammatiken

Jetzt der überraschende Teil. Aus einem lässt sich eine ablesen, und zwar mechanisch:

  • Jeder wird ein Nichtterminal.
  • Jeder Übergang X→cYX \xrightarrow{c} Y wird eine Regel X→c YX \to c\,Y.
  • Jeder Endzustand EE bekommt zusätzlich die Regel E→εE \to \varepsilon.

Für den Automaten oben:

S0 → a S1 | b S0
S1 → a S1 | b S2
S2 → a S1 | b S0 | ε

Diese Grammatik erzeugt genau die Wörter, die der Automat akzeptiert. Umgekehrt lässt sich aus jeder Grammatik dieser Form ein Automat bauen.

🔴 Solche Grammatiken heißen regulär: Auf der rechten Seite jeder Regel steht höchstens ein Nichtterminal, und es steht ganz rechts. Damit gilt:

Eine Sprache ist genau dann regulär, wenn es einen endlichen Automaten für sie gibt, und genau dann, wenn es eine reguläre Grammatik für sie gibt.

Der praktische Nutzen liegt im Wechseln der Sicht. Ein Automat ist leichter zu prüfen, weil man Wörter einfach durchlaufen lassen kann. Eine Grammatik ist leichter zu erweitern, weil man Regeln ergänzt. Man wählt, was gerade passt.

Dieselbe Sprache, zwei Schreibweisen

Im AutomatenIn derGrammatikWas ist ein Zustand?ein Zustand (einKreis)einNichtterminalWas ist ein Übergang?ein Übergang X→c Y (ein Pfeil)eine Regel X → cYWas ist ein Endzustand?ein Endzustand (Doppelkreis)zusätzlich dieRegel E → εWofür ist die Sicht gut?leicht zuprüfen: Wortdurchlaufenlassenleicht zuerweitern: eineRegel ergänzenEine Sprache ist genau dannregulär, wenn es einen Automatenfür sie gibt und genau dann, wennes eine reguläre Grammatik gibt.

Diese Tafel ist eine Übersetzungsvorschrift, keine Aufzählung von Ähnlichkeiten: Zu jedem Bestandteil links gehört genau einer rechts, und die Umwandlung läuft rein mechanisch in beide Richtungen. Aus dem von oben wird so S0→aS1∣bS0S_0 \to a S_1 \mid b S_0, S1→aS1∣bS2S_1 \to a S_1 \mid b S_2, S2→aS1∣bS0∣εS_2 \to a S_1 \mid b S_0 \mid \varepsilon. Der Nutzen steckt in der letzten Zeile: Man wechselt die Sicht je nachdem, was man vorhat. Prüfen ist im Automaten leichter, Erweitern in der und weil beide dieselbe Sprache beschreiben, darf man jederzeit wechseln.

Vertiefung: deterministisch und nichtdeterministisch

Dieser Abschnitt gehört zum erhöhten Anforderungsniveau.

Ein heißt deterministisch, wenn zu jedem Paar aus und Eingabezeichen genau ein Folgezustand festgelegt ist. Genau das leistet eine vollständig ausgefüllte Übergangstabelle.

Erlaubt man mehrere mögliche Folgezustände, spricht man von einem nichtdeterministischen Automaten. Er akzeptiert ein Wort, wenn es mindestens einen Weg gibt, der in einem Endzustand endet.

Nichtdeterministische Automaten sind oft viel kleiner und leichter zu entwerfen. Für „enthält irgendwo die Folge abab" genügt ein Automat, der einfach an einer beliebigen Stelle „rät", dass hier das gesuchte abab beginnt.

Der wichtige Satz dazu lautet: Beide Bauarten erkennen genau dieselben Sprachen. Zu jedem nichtdeterministischen Automaten lässt sich ein deterministischer bauen, dessen Zustände die Mengen der jeweils möglichen Zustände des ursprünglichen sind. Der Preis ist die Größe: Aus nn Zuständen können im ungünstigsten Fall 2n2^n werden.

Praktisch heißt das: Man entwirft bequem nichtdeterministisch und lässt umwandeln. Die Ausdruckskraft gewinnt man dadurch nicht, nur Bequemlichkeit.

Enthält irgendwo ab, nichtdeterministisch

a, baba, bq0q1q2

Sieh dir q0q_0 genau an: Bei einem aa gibt es zwei Möglichkeiten, in q0q_0 bleiben oder nach q1q_1 gehen. Genau das ist Nichtdeterminismus, und die Tabelle wäre an dieser Stelle nicht mehr eindeutig ausfüllbar. Anschaulich rät der an einer beliebigen Stelle, dass hier das gesuchte abab beginnt; akzeptiert wird, wenn es mindestens einen Weg in den Endzustand gibt. Der Gewinn ist die Größe: Deterministisch bräuchte man mehr und müsste jede Zeile vollständig ausfüllen. Der wichtige Satz dazu lautet aber: Beide Bauarten erkennen genau dieselben Sprachen. Man gewinnt Bequemlichkeit, keine Ausdruckskraft.

Die Grenze: nicht jede Sprache ist regulär

In Klasse 10 stand die Behauptung, dass kein endlicher gleich viele öffnende wie schließende Klammern zählen kann. Jetzt lässt sich das beweisen, und der Beweis ist kurz.

Betrachte L={anbn∣n≥1}L = \{a^n b^n \mid n \ge 1\}, also die Sprache aus dem vorigen Kapitel.

Annahme: Es gäbe einen endlichen Automaten AA für LL. Er hat eine feste Zahl kk von .

Schritt 1: Wir lassen AA die Wörter a,aa,aaa,…,ak+1a, aa, aaa, \ldots, a^{k+1} lesen und notieren, in welchem Zustand er jeweils steht. Das sind k+1k+1 Zustände bei nur kk verfügbaren.

Schritt 2: Nach dem Schubfachprinzip müssen zwei davon gleich sein. Es gibt also i≠ji \neq j mit: Nach aia^i und nach aja^j befindet sich AA im selben Zustand.

Schritt 3: Ab diesem Punkt kann AA die beiden Fälle nicht mehr unterscheiden, denn sein Zustand ist alles, was er sich merkt. Was auch immer nun folgt, er behandelt beide gleich.

Schritt 4: Nun folge bib^i. Das Wort aibia^i b^i gehört zu LL und muss akzeptiert werden. Also endet AA in einem Endzustand. Da aja^j denselben Zustand erreicht hatte, akzeptiert AA auch ajbia^j b^i. Wegen i≠ji \neq j gehört dieses Wort aber nicht zu LL.

Widerspruch. Also gibt es keinen solchen Automaten, und LL ist nicht regulär.

🔴 Halte fest, was hier bewiesen wurde: nicht „man hat keinen gefunden", sondern „es kann keinen geben". Die Ursache ist ausschließlich die Endlichkeit der Zustandsmenge. Ein Automat kann nur endlich viel unterscheiden, und unbegrenztes Zählen verlangt unendlich viele Unterscheidungen.

Das Schubfachprinzip in einer Tabelle

EingabeZustand danachaz1aaz2aaaz3aaaaz2, schon dagewesenBeispiel für einen Automaten mitdrei Zuständen. Vier Eingaben, dreiZustände: Zwei müssenzusammenfallen, welche, hängt vomAutomaten ab, DASS zweizusammenfallen, nicht.

Hier steckt der ganze Beweis. Ein mit kk liest die Wörter a,aa,aaa,…a, aa, aaa, \ldots, bei k+1k+1 Wörtern und nur kk Zuständen müssen zwei im selben Zustand landen; das ist das Schubfachprinzip. In der Tabelle sind es aaaa und aaaaaaaa. Und jetzt der entscheidende Schritt: Der Zustand ist alles, was der Automat sich merkt. Ab hier kann er die beiden Fälle nicht mehr unterscheiden, was auch immer folgt. Lässt man bbbb folgen, so muss er aabbaabb akzeptieren (es gehört zu LL) und akzeptiert damit zwangsläufig auch aaaabbaaaabb, das nicht dazugehört. Widerspruch. Nicht „man hat keinen gefunden“, sondern es kann keinen geben, und die Ursache ist allein die Endlichkeit der Zustandsmenge.

Wozu reguläre Sprachen taugen

Trotz dieser Grenze sind sie außerordentlich nützlich, weil sehr viele praktische Prüfungen regulär sind:

  • Ist das eine gültige Postleitzahl, Uhrzeit, IBAN?
  • Beginnt der Bezeichner mit einem Buchstaben?
  • Findet sich dieses Muster im Text?

Genau dafür gibt es reguläre Ausdrücke, eine kompakte Schreibweise für reguläre Sprachen. Sie stecken in jeder Suchfunktion und jeder Eingabeprüfung, und intern arbeitet dort ein endlicher .

Die Kehrseite folgt aus dem Beweis oben: Verschachtelte Strukturen wie Klammerungen, HTML oder Programmquelltext sind nicht regulär. Wer sie mit regulären Ausdrücken prüfen will, scheitert nicht an mangelndem Geschick, sondern an einer beweisbaren Grenze des Modells.

Einen Automaten entwerfen und prüfen

Entwirf einen über {0,1}\{0, 1\}, der genau die Wörter mit einer geraden Anzahl von Einsen akzeptiert. Prüfe ihn an 10111011 und 110110.

  1. 1

    Was muss sich der Automat merken? Nicht die Anzahl der Einsen, sondern nur, ob sie gerade oder ungerade ist. Das sind zwei Fälle, also genügen zwei .

  2. 2

    Zustände: GG (bisher gerade viele Einsen, Start und Endzustand) und UU (ungerade viele).

  3. 3

    Übergänge: Eine Null ändert nichts, eine Eins wechselt den Zustand.

    ZustandEingabe 0Eingabe 1
    GG (Start, Ende)GGUU
    UUUUGG
  4. 4

    Warum ist GG auch Startzustand? Vor dem ersten Zeichen wurden null Einsen gelesen, und null ist gerade. Das leere Wort gehört damit zur Sprache, was richtig ist.

  5. 5

    Prüfung 10111011: G→1U→0U→1G→1UG \xrightarrow{1} U \xrightarrow{0} U \xrightarrow{1} G \xrightarrow{1} U. Ende in UU, also abgelehnt. Stimmt, denn 10111011 enthält drei Einsen.

  6. 6

    Prüfung 110110: G→1U→1G→0GG \xrightarrow{1} U \xrightarrow{1} G \xrightarrow{0} G. Ende in GG, also akzeptiert. Stimmt, zwei Einsen.

Zwei Zustände genügen, weil nur die Unterscheidung gerade oder ungerade gebraucht wird und nicht die Anzahl selbst.

Vom Automaten zur Grammatik

Wandle den aus dem vorigen Beispiel in eine reguläre um und leite 110110 ab.

  1. 1

    werden Nichtterminale: GG und UU. Startsymbol ist der Startzustand GG.

  2. 2

    Jeder Übergang wird eine Regel, jeder Endzustand bekommt zusätzlich ε\varepsilon:

    G → 0 G | 1 U | ε
    U → 0 U | 1 G
    
  3. 3

    Ableitung von 110110: G⇒1U⇒11G⇒110G⇒110G \Rightarrow 1U \Rightarrow 11G \Rightarrow 110G \Rightarrow 110.

  4. 4

    Der letzte Schritt benutzt G→εG \to \varepsilon, und das ist genau die Regel, die GG als Endzustand ausdrückt.

  5. 5

    Gegenprobe mit 10111011: G⇒1U⇒10U⇒101G⇒1011UG \Rightarrow 1U \Rightarrow 10U \Rightarrow 101G \Rightarrow 1011U. Jetzt steht UU da, und UU hat keine ε\varepsilon-Regel. Die Ableitung lässt sich nicht abschließen, das Wort gehört nicht zur Sprache. Dasselbe Ergebnis wie beim Automaten.

Die Umwandlung ist rein mechanisch, und beide Beschreibungen liefern für jedes Wort dieselbe Antwort.

Typischer Fehler

„Wenn der unterwegs einmal in einem Endzustand war, wird das Wort akzeptiert."

Entscheidend ist ausschließlich, wo der Automat nach dem letzten Zeichen steht. Was dazwischen passiert, spielt keine Rolle.

Nimm den Automaten für „endet auf abab" und das Wort abbabb. Nach abab steht er im Endzustand S2S_2; das nächste bb führt ihn nach S0S_0. Am Ende steht er also nicht in einem Endzustand, und abbabb wird zu Recht abgelehnt, denn es endet auf bbbb.

Der Denkfehler kommt daher, dass man „Endzustand" als „fertig" liest. Der Automat ist aber nicht fertig, solange noch Zeichen kommen. Ein Endzustand bedeutet nur: Wenn das Wort hier zu Ende wäre, gehörte es zur Sprache.

Daraus folgt auch die Regel für Übergangstabellen: Ein Endzustand braucht vollständige Zeilen wie jeder andere . Wer sie leer lässt, weil „dort ist doch Schluss", baut einen unvollständigen Automaten, der für längere Wörter keine Antwort hat.

Übung 1

leicht

Ein über {a,b}\{a, b\} hat die Z0Z_0 (Start) und Z1Z_1 (Endzustand) mit den Übergängen: Z0→aZ1Z_0 \xrightarrow{a} Z_1, Z0→bZ0Z_0 \xrightarrow{b} Z_0, Z1→aZ1Z_1 \xrightarrow{a} Z_1, Z1→bZ0Z_1 \xrightarrow{b} Z_0.

a) Welche Wörter akzeptiert er? b) Prüfe baabaa, abab und ε\varepsilon.

Tipp anzeigen

Sieh dir an, welches Zeichen jeweils in den Endzustand führt.

Lösung anzeigen

a) In den Endzustand Z1Z_1 führt ausschließlich ein aa, und ein bb führt immer nach Z0Z_0. Akzeptiert werden also genau die Wörter, die mit aa enden.

b) baabaa: Z0→bZ0→aZ1→aZ1Z_0 \xrightarrow{b} Z_0 \xrightarrow{a} Z_1 \xrightarrow{a} Z_1 → akzeptiert. abab: Z0→aZ1→bZ0Z_0 \xrightarrow{a} Z_1 \xrightarrow{b} Z_0 → abgelehnt. ε\varepsilon: Der Automat bleibt im Startzustand Z0Z_0, der kein Endzustand ist → abgelehnt.

Detaillierte Schritterklärung anzeigen

Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.

Erklärungstiefe

✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.

  1. 1

    a) Die akzeptierte Sprache aus den Übergängen ablesen

    Man schaut, welches Zeichen in den Endzustand führt: In Z1Z_1 führt ausschließlich ein aa, und ein bb führt immer nach Z0Z_0 zurück. Akzeptiert werden also genau die Wörter, die mit aa enden.

  2. 2

    b) Drei Eingaben verfolgen, jede prüft etwas anderes

    baabaa: Z0→Z0→Z1→Z1Z_0 \to Z_0 \to Z_1 \to Z_1, Ende in Z1Z_1 → akzeptiert. abab: Z0→Z1→Z0Z_0 \to Z_1 \to Z_0, Ende in Z0Z_0 → abgelehnt. ε\varepsilon: Der Automat bleibt im Startzustand Z0Z_0, der kein Endzustand ist → abgelehnt.

  3. 3

    Die allgemeine Leseregel sichern

    Entscheidend ist immer nur, wo der Automat nach dem letzten Zeichen steht, nicht, ob er unterwegs einmal im Endzustand war. Ein Endzustand ist eine Markierung, kein Halt.

Übung 2

mittel

a) Entwirf einen über {0,1}\{0,1\} für alle Wörter, die die Teilfolge 0101 irgendwo enthalten. b) Gib die Übergangstabelle vollständig an. c) Wandle den Automaten in eine reguläre um. d) Begründe, warum ein einmal erreichter Endzustand hier nie wieder verlassen wird.

Tipp anzeigen

Zu a): Was muss sich der Automat merken, solange er das Muster noch nicht gefunden hat?

Lösung anzeigen

a) Drei genügen: AA (Start, noch nichts Passendes gesehen), BB (zuletzt eine 0 gelesen), CC (Muster gefunden, Endzustand).

b) Übergangstabelle:

ZustandEingabe 0Eingabe 1
AA (Start)BBAA
BBBBCC
CC (Ende)CCCC

Die Zeile BB bei Eingabe 0 führt wieder nach BB: Eine weitere Null ändert nichts daran, dass zuletzt eine Null kam.

c) Grammatik:

A → 0 B | 1 A
B → 0 B | 1 C
C → 0 C | 1 C | ε

d) Weil beide Übergänge aus CC wieder nach CC führen. Das ist inhaltlich richtig: Die Sprache verlangt, dass 0101 irgendwo vorkommt. Ist es einmal aufgetreten, kann keine weitere Eingabe das rückgängig machen. Solche Zustände nennt man Fangzustände; sie treten immer dann auf, wenn eine Bedingung einmal erfüllt für immer erfüllt bleibt. Vergleiche das mit dem Automaten für „endet auf abab": Dort kann der Endzustand verlassen werden, weil sich die Eigenschaft „endet auf" mit jedem weiteren Zeichen ändert.

Detaillierte Schritterklärung anzeigen

Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.

Erklärungstiefe

✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.

  1. 1

    Teil a): Die richtige Frage stellen

    Nicht „welche Situationen gibt es", sondern: Was muss ich mir merken, um bei der nächsten Eingabe richtig zu reagieren? Hier genügt: Habe ich das Muster schon gefunden, und falls nicht, war das letzte Zeichen eine Null?

    Zwischenergebnis

    Drei Fälle, also drei Zustände.

    Die Position im Wort und die Anzahl gelesener Zeichen gehören ausdrücklich nicht dazu. Sie ändern das künftige Verhalten nicht.

  2. 2

    Teil b): Die Tabelle vollständig füllen

    Bei 3 Zuständen und 2 Eingaben sind es sechs Zellen. Jede braucht einen Eintrag, auch die im Endzustand.

    3 \times 2 = 6\ \text{Zellen}

    Zwischenergebnis

    Sechs Einträge, keine Lücke.

  3. 3

    Teil c): Mechanisch umwandeln

    Jeder Übergang X→cYX \xrightarrow{c} Y wird zur Regel X→cYX \to cY, jeder Endzustand bekommt zusätzlich die Regel mit dem leeren Wort. Man liest die Tabelle einfach zeilenweise ab.

    A \xrightarrow{0} B ;\Rightarrow; A \to 0B

    Zwischenergebnis

    Sechs Regeln plus C→εC \to \varepsilon.

  4. 4

    Teil d): Fangzustand erkennen und begründen

    Man liest die Zeile CC und stellt fest, dass beide Übergänge wieder nach CC führen. Der inhaltliche Grund liegt in der Formulierung der Sprache: „enthält irgendwo" ist eine Eigenschaft, die einmal erfüllt für immer erfüllt bleibt.

    Zwischenergebnis

    CC ist ein Fangzustand, und das ist hier richtig.

    Vergleiche mit „endet auf abab": Diese Eigenschaft kann verloren gehen, deshalb hat der dortige Endzustand Übergänge, die ihn verlassen. Woran man es erkennt: an den Wörtern irgendwo gegen endet auf.

Übung 3

schwer

a) Beweise, dass die Sprache L={anbn∣n≥1}L = \{a^n b^n \mid n \ge 1\} nicht regulär ist. b) Erkläre, welche Rolle das Schubfachprinzip dabei spielt. c) Ein Mitschüler will HTML mit einem regulären Ausdruck prüfen. Was sagst du ihm, und warum? d) (Vertiefung) Warum erkennen nichtdeterministische keine zusätzlichen Sprachen, obwohl sie mehr dürfen?

Tipp anzeigen

Zu a): Wie viele verschiedene Präfixe aia^i kann ein Automat mit kk unterscheiden?

Lösung anzeigen

a) Annahme: Es gäbe einen endlichen Automaten AA für LL mit kk Zuständen.

Betrachte die k+1k+1 Wörter a1,a2,…,ak+1a^1, a^2, \ldots, a^{k+1}. Nach dem Lesen jedes dieser Wörter befindet sich AA in einem Zustand. Da es k+1k+1 Wörter, aber nur kk Zustände gibt, müssen zwei davon denselben Zustand erreichen: Es gibt i≠ji \neq j mit AA im selben Zustand nach aia^i und nach aja^j.

Ein Automat merkt sich nichts außer seinem Zustand. Also verhält er sich ab jetzt für beide Präfixe identisch. Lässt man nun bib^i folgen, so gilt: aibi∈La^i b^i \in L, also wird es akzeptiert und AA endet im Endzustand. Da aja^j im selben Zustand war, endet auch ajbia^j b^i im Endzustand und wird akzeptiert. Wegen i≠ji \neq j ist ajbi∉La^j b^i \notin L.

Widerspruch. Also existiert kein solcher Automat, und LL ist nicht regulär.

b) Das Schubfachprinzip liefert den entscheidenden Schritt: Verteilt man k+1k+1 Dinge auf kk Fächer, liegen in einem Fach mindestens zwei. Hier sind die Fächer die Zustände und die Dinge die Präfixe aia^i. Ohne dieses Prinzip müsste man zeigen, dass zwei Präfixe zusammenfallen; mit ihm folgt es allein aus dem Abzählen, ohne dass man den Automaten kennen muss. Genau deshalb gilt der Beweis für jeden denkbaren Automaten und nicht nur für einen bestimmten.

c) Er wird scheitern, und zwar aus einem grundsätzlichen Grund. HTML ist beliebig tief verschachtelt: Ein Element kann Elemente enthalten, die wieder Elemente enthalten. Um zu prüfen, ob jedes öffnende Tag ein passendes schließendes hat, müsste man die Verschachtelungstiefe mitzählen, und die ist unbegrenzt. Das ist genau die Struktur von {anbn}\{a^n b^n\}, und nach a) ist sie nicht regulär. Reguläre Ausdrücke entsprechen aber genau den regulären Sprachen. Für einzelne, flache Muster wie „finde alle Zeichenfolgen der Form href="…"\texttt{href="…"}" sind sie geeignet; zum Prüfen der Struktur braucht es einen richtigen Parser.

d) Weil sich jeder nichtdeterministische Automat in einen deterministischen umwandeln lässt. Die Idee: Man führt als Zustände des neuen Automaten die Mengen von Zuständen des alten, in denen er sich gleichzeitig befinden könnte. Da es zu nn Zuständen nur endlich viele, nämlich 2n2^n, Teilmengen gibt, bleibt der neue Automat endlich. Der Nichtdeterminismus bringt also Bequemlichkeit und Kompaktheit, aber keine zusätzliche Ausdruckskraft. Der Preis ist die mögliche Größe: Aus 20 Zuständen können über eine Million werden.

Detaillierte Schritterklärung anzeigen

Hier wird jeder Schritt einzeln erklärt, vor allem, warum er gemacht wird.

Erklärungstiefe

✦ Empfohlen: Standard – Die normale Erklärungstiefe passt zum Einstieg.

  1. 1

    a) Der Widerspruchsbeweis: annehmen, es gäbe einen Automaten

    Man nimmt an, es gäbe einen endlichen Automaten AA für LL mit kk Zuständen, und betrachtet die k+1k+1 Wörter a1,a2,…,ak+1a^1, a^2, \ldots, a^{k+1}. Nach dem Lesen jedes dieser Wörter befindet sich AA in einem Zustand. Da es k+1k+1 Wörter, aber nur kk Zustände gibt, müssen zwei davon denselben Zustand erreichen.

  2. 2

    a) Den Widerspruch herbeiführen: derselbe Zustand, verschiedene Fortsetzungen

    Es gibt also i≠ji \neq j mit AA im selben Zustand nach aia^i und nach aja^j. Ein Automat merkt sich nichts außer seinem Zustand, verhält sich ab jetzt für beide Präfixe identisch. Lässt man bib^i folgen: aibi∈La^i b^i \in L wird akzeptiert, also endet AA im Endzustand, dann aber auch für ajbia^j b^i. Wegen i≠ji \neq j ist ajbi∉La^j b^i \notin L. Widerspruch.

  3. 3

    b) Die Rolle des Schubfachprinzips

    Das Schubfachprinzip liefert den entscheidenden Schritt: Verteilt man k+1k+1 Dinge auf kk Fächer, liegen in einem Fach mindestens zwei. Hier sind die Fächer die Zustände und die Dinge die Präfixe aia^i. Ohne dieses Prinzip müsste man zeigen, dass zwei Präfixe zusammenfallen; mit ihm folgt es allein aus dem Abzählen.

  4. 4

    c) HTML mit regulären Ausdrücken prüfen: derselbe Grund

    Er wird scheitern, und zwar grundsätzlich. HTML ist beliebig tief verschachtelt; um zu prüfen, ob jedes öffnende Tag ein passendes schließendes hat, müsste man die Verschachtelungstiefe mitzählen, und die ist unbegrenzt. Das ist genau die Struktur von {anbn}\lbrace a^n b^n \rbrace, und reguläre Ausdrücke entsprechen genau den regulären Sprachen.

  5. 5

    d) (Vertiefung) Warum Nichtdeterminismus keine neuen Sprachen bringt

    Weil sich jeder nichtdeterministische Automat in einen deterministischen umwandeln lässt: Man führt als Zustände des neuen Automaten die Mengen von Zuständen des alten, in denen er sich gleichzeitig befinden könnte. Da es zu nn Zuständen nur endlich viele, nämlich 2n2^n, Teilmengen gibt, bleibt der neue Automat endlich.

Zusammenfassung

Ein endlicher akzeptiert ein Wort, wenn er nach dem letzten Zeichen in einem Endzustand steht; die Menge aller akzeptierten Wörter ist die von ihm erkannte Sprache, und solche Sprachen heißen regulär. Automat und sind dabei zwei Sichten auf dieselbe Sache: Jeder wird ein Nichtterminal, jeder Übergang eine Regel der Form X→cYX \to cY, jeder Endzustand bekommt zusätzlich das leere Wort. Eine Sprache ist genau dann regulär, wenn es einen endlichen Automaten für sie gibt, und genau dann, wenn es eine reguläre Grammatik gibt. Nichtdeterministische Automaten sind oft kleiner und leichter zu entwerfen, erkennen aber dieselben Sprachen, weil sie sich in deterministische umwandeln lassen. Die Grenze des Modells ist beweisbar: Über das Schubfachprinzip zeigt man, dass zwei Präfixe im selben Zustand landen und danach ununterscheidbar sind, weshalb {anbn}\{a^n b^n\} nicht regulär ist. Deshalb prüfen reguläre Ausdrücke zwar zuverlässig flache Muster, aber niemals verschachtelte Strukturen wie Klammern oder HTML.