Grenzen endlicher Automaten Gesucht ist ein Endlicher Automat, der die Sprache L = {anbn | n } erkennt, wobei für a das Symbol "(" und für b das Symbol ")" verwendet werden kann und somit eine korrekte Klammersetzung akzeptiert würde. Die zugehörige Grammatik ist leicht zu erzeugen: G = (N, T, P, S) mit: V = {S} T = {a, b} P = { S ab, S aSb} Ein Akzeptor für diese Sprache ist ebenfalls kein Problem, solange n endlich und gegeben ist! [ Mathematiker sagen: „n beliebig, aber fest!“ ] Beispiel für n = 3: Eine Erweiterung scheint problemlos möglich, man muss nur endliche viele neue Zustände einführen. Im allgemeinen Fall würde der Automat unendlich viele Zustände besitzen müssen. Dies widerspricht aber der Definition des endlichen Automaten. Es scheint also, dass diese Sprache nicht von einem endlichen Automaten akzeptiert werden kann. Um die Sprache zu erkennen, ist es notwendig, dass sich der Automat irgendwie die Anzahl der n-mal gelesenen Buchstaben merkt. Das führt uns zu einer neuen, leistungsstärkeren Art von Automaten, den Kellerautomaten Für einen Automaten, der sich etwas merken soll, braucht man zunächst eine 1. Speichereinheit Ein sehr simpler Speicher ist der sog. Kellerspeicher. Wie in einem Keller können Objekte abgelegt (push) und wieder entnommen (pop) werden. Dabei gilt: das zuletzt abgelegte Objekt muss als erstes wieder entnommen werden. Dieses Prinzip bezeichnet man mit Last in – First out (LIFO). 2. Aufbau des Kellerautomaten Der Automat besitzt also einen Kellerspeicher zum Ablegen beliebiger Objekte. Der Kellerspeicher - ist unendlich groß, d. h., man kann beliebig viele Objekte darin ablegen, - hat das Symbol # zur Anzeige des leeren Kellers, das nicht entnommen werden kann. Zum Kellerautomaten gehören außerdem eine Steuereinheit und ein Eingabeband, dass die Eingabezeichen und Bandvorbelegungszeichen $ enthält. Die Steuereinheit kann folgende Speicheroperationen vornehmen: push(Zeichen) top pop Ablegen des Objekts Zeichen anzeigen wegnehmen plus (manchmal ganz hilfreich) nop no Operation – keine Operation sowie is_empty 3. Arbeitsweise: Initialisierung des Kellerautomaten: Keller ist leer, der Kellerlesekopf steht auf #. Einlesen des Eingabezeichens und des aktuelle Kellerzeichen pop/push(Zeichen). Zustandsübergang und Speicheroperation in Abhängigkeit vom aktuellen Zustand, Eingabezeichen und Kellerzeichen Vorrücken des Eingabelesekopf um ein Zeichen ggf. Wiederholung der Schritte 2 bis 4 Der Kellerautomat akzeptiert eine Eingabe, wenn das Eingabewort vollständig eingelesen wurde und dann der aktuelle Zustand ein Endzustand ist. Der Inhalt des Kellers bleibt hierbei unberücksichtigt. 4. Definition: Ein nichtdeterministischer Kellerautomat ist ein 7-Tupel M = (X, Z, Γ, δ, z0, k0, E), mit: X – Eingabealphabet Z – endliche Zustandsmenge Γ – Kelleralphabet δ – partielle Überführungsfunktion z0 – Anfangszustand k0 – Kellervorbelegungszeichen E – Menge der Endzustände. Streng genommen: Ein Widerspruch in sich! Der Automat wird als nichtdeterministisch definiert, d. h., von einem Ausgangszustand sind bei identischen Eingabe- und Kellerzeichen mehrere Folgezustände möglich. Dies drückt auch die Bezeichnung partielle Überführungsfunktion aus. 5. Anwendung für die Sprache L = {anbn | n } Man definiert den Kellerautomaten wir folgt: M = ({a, b}, {z0,z1,z2}, {#, a}, δ, z0, #, {z2}) Darstellung als verkürzter Zustandsgraph ohne Fehlerzustand: wobei: In diesem Falle ist der Kellerautomat sogar deterministisch. Aufgabe: Erstelle eine passende Übergangstabelle für diesen Kellerautomaten! Zustand Kellerzeichen Eingabe neuer Zustand Operation z0 # a z0 push(a) z0 a a z0 push(a) z0 a b z1 pop z1 a b z1 pop z1 # eof z2 nop z0 # eof z2 nop z0 a eof zf nop z1 # a zf nop z1 a a zf nop z1 # b zf nop z1 a eof zf nop zf # a zf nop zf a a zf nop zf # b zf nop zf a b zf nop Entspricht dem Graphen von oben! Ergänzungen Ähnlich wie bei den Zahlbereichserweiterungen in der Mathematik stellen wir als nächstes die Frage nach den Grenzen von Kellerautomaten Betrachte die folgende Sprache L = {anbncn | n > 0} mit der Grammatik: G = (V, T, R, S) mit V = {S, B, C} T = {a, b, c} R = { S aSBC, S aBC, CB BC, aB ab, bB bb, bC bc, cC cc} Es gilt beispielsweise: S aSBC aaSBCBC aaaBCBCBC aaaBBCCBC aaaBBCBCC aaaBBBCCC aaaBBCCC aaabbBCCC aaabbbCCC aaabbbcCC aaabbbccC aaabbbccc Kann man die von der Grammatik erzeugte Sprache ein Kellerautomaten erkennen? Der im vorherigen Abschnitt beschriebene Kellerautomat ist in der Lage, sich n-mal a zu speichern und mit der Anzahl der b's zu vergleichen. Jedoch verliert er beim Vergleich die zu merkende Zahl n. Sie steht dem System für etwaige Prüfungen nicht mehr zur Verfügung. Damit ist es für Kellerautomaten nicht möglich, die Sprache L = {a nbncn | n > 0} zu erkennen. Die nächst höhere Stufe in der Hierarchie der Automaten besteht aus den sogenannten Turing-Maschinen Alan Turing (1912–1954) entwickelte eine abstrakte Maschine, die solche Sprachen akzeptiert. Diese Turing-Maschine ist im Prinzip das mathematische Modell eines Computers und dient den Informatikern zur Untersuchung der Leistungsgrenzen von modernen Rechnern. Wir werden die Turingmaschinen nicht im Unterricht besprechen. Sie könnten jedoch Gegenstand einer interessanten Facharbeit in Informatik sein! Alan Mathison Turing (* 23. Juni 1912 in London; † 7. Juni 1954 in Wilmslow) war ein britischer Logiker, Mathematiker und Kryptoanalytiker. Er schuf einen großen Teil der theoretischen Grundlagen für die moderne Informations- und Computertechnologie. Als richtungsweisend erwiesen sich auch seine Beiträge zur theoretischen Biologie. Alan Turing ist eine sehr interessante Persönlichkeit, über dessen Leben einen Film zu machen sich sicherlich lohnen würde! Avram Noam Chomsky (* 7. Dezember 1928 in Philadelphia, Pennsylvania, USA) ist Professor für Linguistik am Massachusetts Institute of Technology (MIT). Neben seiner linguistischen Arbeit gilt Chomsky als einer der bedeutendsten linken politischen Intellektuellen Nordamerikas und ist als scharfer Kritiker der USamerikanischen und israelischen Außenund Wirtschaftspolitik bekannt. RvdG