Nichtdeterministische Kellerautomaten (NKA)

Aus ProgrammingWiki
Definition

Ein NKA ist ein 7-Tupel M = (Q,\Sigma,\Gamma,\delta,q_0,k_0,E), mit
Q ... endliche Menge von Zuständen,
\Sigma ... Eingabealphabet,
\Gamma ... Stackalphabet,
\delta ... partielle Überführungsfunktion, Q\times(\Sigma\cup\{\varepsilon\})\times\Gamma\mapsto\wp{(Q\times\Gamma^*)}
q_0 ... Anfangszustand (q_0\in Q),
k_0 ... Stackvorbelegungszeichen (k_0\in\Gamma \text{ und } k_0 \not\in\Sigma),
E ... endliche Menge von Endzuständen (E\subseteq Q)

Die von M akzeptierte Sprache L(M)

Auf das Eingabeband von M wird das zu analysierende Wort w geschrieben. Der Automat befindet sich im Anfangszustand q_0 und im Keller steht nichts weiter als das Vorbelegungszeichen k_0. In jedem Schritt wird das oberste Kellerzeichen verbrauchend gelesen und ein Kellerwort auf den Stapel geschrieben. Spontane Übergänge, bei denen kein Eingabezeichen verbraucht wird, stellen einen Sonderfall dar. M akzeptiert genau die Wörter über dem Eingabealphabet, die den Automat nach vollständigem Einlesen des Wortes in einen Endzustand q_e\in E stoppen lassen. Der Kellerinhalt am Ende spielt keine Rolle.

Das Eingabewort wird im Prolog-Programm als Liste repräsentiert.

Beispiel

Wir betrachten die Sprache der Palindrome über irgendeinem Alphabet. Im Gegensatz zu den Festlegungen der theoretischen Informatik, wird dieses Alphabet in der folgenden Prolog-Beschreibung dieses NKA nicht angegeben. Das spart Schreibaufwand, da mehrere Regeln durch Parametrisierung zusammengefasst werden.

Wir fragen, ob das Wort rentner zu der von dem Beispielautomaten akzeptierten Sprache gehört:

Fehlt hingegen das letzte r, so wird das Wort nicht akzeptiert:

Übungsaufgaben

  1. Entwickeln Sie einen NKA für die Sprache L(M)=\{w\mid w=a^nb^n, n>0\}.