6.11 Die Grenzen kontextfreier Sprachen

Im letzten Teilkapitel haben wir den CYK-Algorithmus kennengelernt. Dieser verwendet das Prinzip des Dynamic Programming, um für eine allgemeine kontextfreie Grammatik G und ein Eingabewort γ einen Ableitungsbaum zu finden (oder festzustellen, dass es keinen gibt und somit γL(G)).

In diesem Teilkapitel werden wir sehen, dass viele Sprachen gar nicht kontextfrei sind, und werden hoffentlich ein Gefühl dafür entwickeln, welche Konstruktionen Kontextfreiheit verhindern, ähnlich wie "Verschachtelung" eine Sprache nicht-regulär macht.

Beispiel 6.11.1 Betrachten wir die Sprache L:={anbncn |  n0} .

Ein Kellerautomat könnte nun alle a auf den Stack legen und dann, wenn die b beginnen, den Stapel abarbeiten. Allerdings hätte er dann, wenn die c kommen, vergessen, wieviele a es denn waren. Irgendwie scheinen Kellerautomaten nicht für L geeignet. Dies ist natürlich nur eine Intuition. Vielleicht kennen wir einfach nicht alle Tricks, die man mit Kellerautomaten (und somit mit kontextfreien Grammatiken) anstellen kann.

Wir werden nun beweisen, dass L nicht kontextfrei ist; dass es also für L keine kontextfreie Grammatik gibt. Wir gehen wie folgt vor: wir nehmen eine kontextfreie Grammatik G, die jedes Wort γL ableiten kann. Dann sehen wir uns den Ableitungsbaum für ein "sehr langes" γ an und werden sehen, dass wir in G andere Wörter γ ableiten können, die nicht in L sind. Somit haben wir gezeigt, dass G keine korrekte Grammatik für L ist. Als erstes verlangen wir, dass G in Chomsky-Normalform vorliegt. Dann schauen wir uns für ein γ=anbncn den Ableitungsbaum an:

Nun betrachten wir in diesem Ableitungsbaum den längsten Pfad von S zu einem Nichtterminalknoten, der direkt über den Terminalen steht. Wenn dieser Länge d hat (also d Kanten lang ist), dann hat der Baum höchstens 2d Blätter, also |γ|2d. Wenn nun |γ|2|N|=:p ist, dann gibt es einen Pfad der Länge |N| von diesem X aufwärts richtung S. Auf diesem liegen |N|+1 Nichtterminalsymbole, mehr als es in G gibt; also muss ein Terminalsymbol zweimal vorkommen:
Der Pfad vom oberen zum unteren Z hat höchstens Länge N (so haben wir diesen Pfad gewählt), und somit hat das Unterwort vwx höchstens p=2|N| Zeichen. Wenn wir nun das Wort anbncn für ein sehr großes n betrachten, sagen wir np=2|N|, dann kann das Wort vwx nicht alle drei Symbole a,b,c enthalten; sonst würde es ja alle n Symbole b und noch weitere enthalten, wäre also länger als np; allerdings haben wir ja gesehen, dass |vwx|p gilt. Nehmen wir nun also der Einfachheit halber an, dass vwx nicht das Symbol c enthält: vwx{a,b} (der andere Fall ist symmetrisch und kann mit den gleichen Argumenten wie unten behandelt werden).

Nun holen wir zum entscheidenden Schlag aus: wir "pumpen" das Wort γ auf, indem wir die Teilbäume mit Z an der Wurzel wiederholen. Konkret besagt ja oberer Baum, dass γ wie folgt hergeleitet wurde: SuZvuvZxyuvwxy Insbesondere heißt das, dass ZvZx gilt. Wir können diesen Schritt also wiederholen:

und somit das Wort uvvwxxy und ganz allgemein jedes Wort uviwxiy ableiten, für jedes i0. Selbst für i=0 geht das:

Betrachten wir nun das Wort uwy. Wir haben ja gesehen, dass in uvwxy alle c-Symbole rechts von vwx liegen, also in y. Das Wort uwy hat also immer noch n viele c-Symbole. Allerdings hat es die Symbole in v und x verloren! Wir wissen nicht, wieviele davon a und b waren, aber eines ist ganz klar: in uwy kommen die Symbole a,b,c nicht mehr gleich häufig vor, und somit uwyL.

Wir haben also gezeigt, dass die kontextfreie Grammatik G nicht die Sprache L erzeugt: wenn wir alle γL erzeugen kann, dann kann sie auch Wörter wie uwyL erzeugen. Da unsere Argumentation keine Annahmen über G getroffen hat, außer, dass sie kontextfrei ist, haben wir gezeigt: L ist keine kontextfreie Sprache.

Vorsicht! Wir haben angenommen, das uwy weniger Zeichen hat als uvwxy, weil ja v und x fehlen. Kann aber v=x=ϵ eintreten? Dies würde unsere Argumentation zerstören. Hier kommt wieder die Chomsky-Normalform zur Hilfe: es gibt keine Produktionen Xϵ, (außer vielleicht für das Startsymbol S, welches dann aber nicht auf einer rechten Seite auftreten dürfte). Ganz allgemein: wenn eine Grammatik G in Chomsky-Normalform ein Wort γ herleitet und γϵ, dann kommt in der Ableitung keine ϵ-Produktion zur Anwendung.

Die obige Argumentationslinie ist als Pumping Lemma für kontextfreie Sprachen bekannt:

Theorem 6.11.2 (Pumping Lemma für kontextfreie Sprachen) Für jede kontextfreie Grammatik G gibt es eine Zahl pN, so dass jedes Wort γL(G) der Länge |γ|p zerlegt werden kann in γ=uvwxy , wobei |vwx|p gilt und v,x nicht beide ϵ sind, so dass uviwxiyL(G) gilt, für alle i0. Die Zahl p kann zum Beispiel als 2NCNF gewählt werden, wobei NCNF die Anzahl der Nichtterminale in einer zu G äquivalenten Chomsky-Normalform ist.
Übungsaufgabe 6.11.1 Sei L{a,b,c}n die Sprache aller Wörter {αcα | α{a,b}} . In Worten: rechts und links vom c in der Mitte muss das gleiche Teilwort stehen. Zeigen Sie analog zu dem vorherigen Beweis, dass L nicht kontextfrei ist.
Übungsaufgabe 6.11.2 Sie L{1} die Sprache aller Wörter, deren Länge eine Zweierpotenz ist: L:={1n | n=2d für ein dN} Also L={1,11,1111,11111111,1111111111111111,}. Zeigen Sie, dass L nicht kontextfrei ist.

Mengenoperationen auf kontextfreien Sprachen

Im Kapitel über reguläre Sprachen hatten wir folgende Abschlusseigenschaften:
Theorem 6.11.3 Wenn reguläre Sprachen sind, dann sind die folgenden Sprachen auch regulär:
  1. . Das war einfach: wir kombinieren die Grammatiken und fügen die Startproduktionen hinzu.
  2. . Das war schon schwieriger, ging aber auch irgendwie.
  3. . Das ging ähnlich zum vorherigen.
  4. , die Komplementsprache. Das ist einfach, sobald man einen endlichen Automaten für gebaut hat: man tauscht akzeptierende und nicht-akzeptierende Zustände aus.
  5. , die Sprache, die entsteht, wenn man jedes Wort in von rechts nach links liest. Dies ist gar nicht so offensichtlich, wenn man reguläre Grammatiken oder endliche Automaten ansieht. Wenn man aber für einen regulären Ausdruck gebaut hat, wird es zur Trivialität: einfach den Ausdruck umdrehen.
  6. . Hierfür könnte man für jeweils endliche Automaten bauen und die dann "parallel" laufen lassen; man muss nun sehen, dass man dieses parallele Laufen mit einem Automaten simulieren kann: dieser hat als Zustandsmenge , merkt sich also in einem Zustand, in welchen Zuständen und sind. Oder man macht es sich einfach:
    • Nach Punkt 4 sind und regulär.
    • Nach Punkt 1 daher auch ist regulär.
    • Nach Punkt 4 ist daher wiederum regulär, was nach den De-Morganschen Gesetzen die gleiche Menge ist wie .
Wie sieht es nun aus, wenn kontextfreie Sprachen sind? Welche der obigen Kombinationen sind dann ebenfalls kontextfrei?
Übungsaufgabe 6.11.4 6.11.3 Seien kontextfrei. Zeigen Sie, dass die folgenden Sprachen auch kontextfrei sind:
  1. Überspringen wir ; dieses ist nämlich im Allgemeinen nicht kontextfrei.
  2. Überspringen wir ; dieses ist nämlich im Allgemeinen nicht kontextfrei.

Tip: dies ist viel einacher als für reguläre Grammatiken.

Wie schon angedeutet, geben uns Komplement und Schnittmenge im Allgemeinen keine kontextfreie Sprache. Das Gegenbeispiel haben wir schon fast gesehen:
Beobachtung 6.11.5 Der Schnitt zweier kontextfreier Sprachen ist im Allgemeinen nicht kontextfrei. Ein Beispiel ist Diese sind beide kontextfrei (schreiben Sie jeweils eine Grammatik, wenn Sie's nicht glauben). Der Schnitt allerdings ist genau diejenige Sprache, für die wir oben gezeigt haben, dass sie nicht kontextfrei ist.
Beobachtung 6.11.6 Das Komplement einer kontextfreien Sprache ist im Allgemeinen nicht kontextfrei. Warum? Wenn er es wäre, dann wäre mit Hilfe von Punkt 1 auch kontextfrei, was es aber im Allgemeinen nicht ist. Befriedigender wäre es allerdings, wenn wir ein konkretes Beispiel hätten.
Übungsaufgabe 6.11.4 Sei . Wir wissen bereits, dass nicht kontextfrei ist. Zeigen Sie, dass kontextfrei ist. Die Sprache ist somit ein Beispiel für eine kontextfreie Sprache, deren Komplement, also , nicht kontextfrei ist.

Tip. Listen Sie alle Möglichkeiten auf, wie ein Wort nicht in sein kann: (1) es hat nicht die Form ; (2) es hat die Form, hat aber mehr als es hat; (2) es hat mehr als es hat...