<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Automatentheorie</id>
	<title>Automatentheorie - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://dev.kaibel.net/index.php?action=history&amp;feed=atom&amp;title=Automatentheorie"/>
	<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Automatentheorie&amp;action=history"/>
	<updated>2026-08-24T22:44:21Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in dev.kaibel.net</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://dev.kaibel.net/index.php?title=Automatentheorie&amp;diff=193&amp;oldid=prev</id>
		<title>PhilKa: Die Seite wurde neu angelegt: „{{Infobox Fachgebiet | Name = Automatentheorie | Gebiet = Theoretische Informatik | Zentrale Objekte = Automaten, Zustände, Übergänge, formale Sprachen | Wichtige Modelle = Endliche Automaten, Kellerautomaten, Turingmaschinen, linear beschränkte Automaten | Verwandte Themen = Formale Sprachen, Berechenbarkeitstheorie, Komplexitätstheorie, Compilerbau }}  &#039;&#039;&#039;Automatentheorie&#039;&#039;&#039; ist ein Teilgebiet der [[Theoretische Informatik|theoretischen Informatik]…“</title>
		<link rel="alternate" type="text/html" href="http://dev.kaibel.net/index.php?title=Automatentheorie&amp;diff=193&amp;oldid=prev"/>
		<updated>2026-04-30T10:16:55Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „{{Infobox Fachgebiet | Name = Automatentheorie | Gebiet = Theoretische Informatik | Zentrale Objekte = Automaten, Zustände, Übergänge, formale Sprachen | Wichtige Modelle = Endliche Automaten, Kellerautomaten, Turingmaschinen, linear beschränkte Automaten | Verwandte Themen = Formale Sprachen, Berechenbarkeitstheorie, Komplexitätstheorie, Compilerbau }}  &amp;#039;&amp;#039;&amp;#039;Automatentheorie&amp;#039;&amp;#039;&amp;#039; ist ein Teilgebiet der [[Theoretische Informatik|theoretischen Informatik]…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Fachgebiet&lt;br /&gt;
| Name = Automatentheorie&lt;br /&gt;
| Gebiet = Theoretische Informatik&lt;br /&gt;
| Zentrale Objekte = Automaten, Zustände, Übergänge, formale Sprachen&lt;br /&gt;
| Wichtige Modelle = Endliche Automaten, Kellerautomaten, Turingmaschinen, linear beschränkte Automaten&lt;br /&gt;
| Verwandte Themen = Formale Sprachen, Berechenbarkeitstheorie, Komplexitätstheorie, Compilerbau&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Automatentheorie&amp;#039;&amp;#039;&amp;#039; ist ein Teilgebiet der [[Theoretische Informatik|theoretischen Informatik]]. Sie beschäftigt sich mit abstrakten Rechenmodellen, sogenannten &amp;#039;&amp;#039;&amp;#039;Automaten&amp;#039;&amp;#039;&amp;#039;. Automaten dienen dazu, Berechnungen formal zu beschreiben und zu untersuchen, welche Arten von Problemen oder Sprachen durch bestimmte Maschinenmodelle erkannt oder entschieden werden können.&lt;br /&gt;
&lt;br /&gt;
Ein Automat kann vereinfacht als mathematisches Modell einer Maschine verstanden werden, die eine Eingabe liest, Zustände wechselt und am Ende entscheidet, ob die Eingabe akzeptiert oder verworfen wird. Die Automatentheorie bildet eine wichtige Grundlage für [[Formale Sprachen]], [[Compilerbau]], [[Berechenbarkeitstheorie]], [[Komplexitätstheorie]], [[Künstliche Intelligenz]], [[Softwareverifikation]] und viele weitere Bereiche der Informatik.&lt;br /&gt;
&lt;br /&gt;
== Grundidee der Automatentheorie ==&lt;br /&gt;
&lt;br /&gt;
Die Automatentheorie untersucht, wie sich Berechnungen mit einfachen mathematischen Modellen darstellen lassen. Dabei steht nicht die konkrete technische Umsetzung eines Computers im Vordergrund, sondern die abstrakte Struktur einer Berechnung.&lt;br /&gt;
&lt;br /&gt;
Ein Automat verarbeitet Eingaben schrittweise. Er befindet sich zu jedem Zeitpunkt in einem bestimmten Zustand. Abhängig vom aktuellen Zustand und dem gelesenen Eingabezeichen wechselt er in einen neuen Zustand.&lt;br /&gt;
&lt;br /&gt;
Typische Fragen der Automatentheorie sind:&lt;br /&gt;
&lt;br /&gt;
* Welche Eingaben akzeptiert ein Automat?&lt;br /&gt;
* Welche Sprache wird durch einen Automaten erkannt?&lt;br /&gt;
* Welcher Automatentyp ist für welche Sprachklasse geeignet?&lt;br /&gt;
* Kann ein Automat in ein anderes Modell umgewandelt werden?&lt;br /&gt;
* Welche Probleme sind mit einem bestimmten Automatenmodell entscheidbar?&lt;br /&gt;
* Welche Grenzen haben einfache Automatenmodelle?&lt;br /&gt;
&lt;br /&gt;
== Grundbegriffe ==&lt;br /&gt;
&lt;br /&gt;
=== Alphabet ===&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Alphabet&amp;#039;&amp;#039;&amp;#039; ist eine endliche, nichtleere Menge von Zeichen. Es wird meistens mit &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Sigma = \{0,1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Sigma = \{a,b\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Sigma = \{a,b,c,\dots,z\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Alphabet legt fest, aus welchen Zeichen Eingabewörter bestehen dürfen.&lt;br /&gt;
&lt;br /&gt;
=== Wort ===&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Wort&amp;#039;&amp;#039;&amp;#039; ist eine endliche Folge von Zeichen aus einem Alphabet.&lt;br /&gt;
&lt;br /&gt;
Beispiele über dem Alphabet &amp;lt;math&amp;gt;\Sigma = \{0,1\}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;101&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;00110&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das leere Wort wird mit &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; bezeichnet. Es enthält kein Zeichen und hat die Länge 0.&lt;br /&gt;
&lt;br /&gt;
=== Sprache ===&lt;br /&gt;
&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;formale Sprache&amp;#039;&amp;#039;&amp;#039; ist eine Menge von Wörtern über einem Alphabet.&lt;br /&gt;
&lt;br /&gt;
Formal gilt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L \subseteq \Sigma^*&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei bezeichnet &amp;lt;math&amp;gt;\Sigma^*&amp;lt;/math&amp;gt; die Menge aller endlichen Wörter über dem Alphabet &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L = \{w \in \{0,1\}^* \mid w \text{ endet auf } 01\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Sprache enthält alle binären Wörter, die auf die Zeichenfolge &amp;lt;math&amp;gt;01&amp;lt;/math&amp;gt; enden.&lt;br /&gt;
&lt;br /&gt;
=== Zustand ===&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Zustand&amp;#039;&amp;#039;&amp;#039; beschreibt die aktuelle interne Situation eines Automaten. Ein Automat besitzt nur endlich viele oder, bei erweiterten Automatenmodellen, formal beschriebene Zustände.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Automat, der prüfen soll, ob ein Wort auf &amp;lt;math&amp;gt;01&amp;lt;/math&amp;gt; endet, muss sich merken, ob zuletzt eine &amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt; gelesen wurde und ob danach eine &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; folgt.&lt;br /&gt;
&lt;br /&gt;
=== Startzustand ===&lt;br /&gt;
&lt;br /&gt;
Der &amp;#039;&amp;#039;&amp;#039;Startzustand&amp;#039;&amp;#039;&amp;#039; ist der Zustand, in dem sich ein Automat zu Beginn der Verarbeitung befindet. Er wird häufig mit &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
=== Endzustand ===&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Endzustand&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;akzeptierender Zustand&amp;#039;&amp;#039;&amp;#039; ist ein Zustand, in dem der Automat eine Eingabe akzeptiert, wenn die Eingabe vollständig verarbeitet wurde.&lt;br /&gt;
&lt;br /&gt;
Die Menge der Endzustände wird häufig mit &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
=== Übergangsfunktion ===&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Übergangsfunktion&amp;#039;&amp;#039;&amp;#039; beschreibt, wie ein Automat von einem Zustand in einen anderen Zustand wechselt.&lt;br /&gt;
&lt;br /&gt;
Bei einem deterministischen endlichen Automaten hat sie die Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\delta : Q \times \Sigma \rightarrow Q&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: Für jeden Zustand und jedes Eingabezeichen ist eindeutig festgelegt, welcher Folgezustand erreicht wird.&lt;br /&gt;
&lt;br /&gt;
== Automaten als Spracherkenner ==&lt;br /&gt;
&lt;br /&gt;
In der Automatentheorie betrachtet man Automaten häufig als &amp;#039;&amp;#039;&amp;#039;Spracherkenner&amp;#039;&amp;#039;&amp;#039;. Ein Automat bekommt ein Wort als Eingabe und entscheidet, ob dieses Wort zu einer bestimmten Sprache gehört.&lt;br /&gt;
&lt;br /&gt;
Ein Wort wird akzeptiert, wenn der Automat nach vollständigem Lesen der Eingabe in einem akzeptierenden Zustand endet.&lt;br /&gt;
&lt;br /&gt;
Ein Wort wird verworfen, wenn der Automat nach vollständigem Lesen der Eingabe nicht in einem akzeptierenden Zustand endet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Die Sprache&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L = \{w \in \{0,1\}^* \mid w \text{ enthält eine gerade Anzahl von Einsen}\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann durch einen endlichen Automaten erkannt werden. Der Automat benötigt nur zwei Zustände:&lt;br /&gt;
&lt;br /&gt;
* einen Zustand für „bisher gerade Anzahl von Einsen“,&lt;br /&gt;
* einen Zustand für „bisher ungerade Anzahl von Einsen“.&lt;br /&gt;
&lt;br /&gt;
== Wichtige Automatenmodelle ==&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Automatenmodelle sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Automatentyp&lt;br /&gt;
! Speicher&lt;br /&gt;
! Erkennt Sprachklasse&lt;br /&gt;
! Typische Anwendung&lt;br /&gt;
|-&lt;br /&gt;
| Endlicher Automat&lt;br /&gt;
| Kein zusätzlicher Speicher&lt;br /&gt;
| Reguläre Sprachen&lt;br /&gt;
| Mustererkennung, lexikalische Analyse&lt;br /&gt;
|-&lt;br /&gt;
| Kellerautomat&lt;br /&gt;
| Stapelspeicher&lt;br /&gt;
| Kontextfreie Sprachen&lt;br /&gt;
| Syntaxanalyse, Klammerstrukturen&lt;br /&gt;
|-&lt;br /&gt;
| Linear beschränkter Automat&lt;br /&gt;
| Linear beschränktes Band&lt;br /&gt;
| Kontext-sensitive Sprachen&lt;br /&gt;
| theoretische Sprachmodelle&lt;br /&gt;
|-&lt;br /&gt;
| Turingmaschine&lt;br /&gt;
| Unbeschränktes Band&lt;br /&gt;
| Rekursiv aufzählbare Sprachen&lt;br /&gt;
| allgemeines Berechnungsmodell&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Endliche Automaten ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;endlicher Automat&amp;#039;&amp;#039;&amp;#039; ist das einfachste wichtige Automatenmodell. Er besitzt eine endliche Menge von Zuständen und liest ein Eingabewort Zeichen für Zeichen von links nach rechts.&lt;br /&gt;
&lt;br /&gt;
Endliche Automaten haben keinen zusätzlichen Speicher. Sie können sich daher nur endlich viele Informationen über die bisher gelesene Eingabe merken.&lt;br /&gt;
&lt;br /&gt;
Endliche Automaten erkennen genau die &amp;#039;&amp;#039;&amp;#039;regulären Sprachen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Deterministischer endlicher Automat ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;deterministischer endlicher Automat&amp;#039;&amp;#039;&amp;#039;, kurz &amp;#039;&amp;#039;&amp;#039;DEA&amp;#039;&amp;#039;&amp;#039;, ist ein Automat, bei dem für jeden Zustand und jedes Eingabezeichen genau ein Folgezustand festgelegt ist.&lt;br /&gt;
&lt;br /&gt;
Ein DEA wird formal als Tupel definiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A = (Q, \Sigma, \delta, q_0, F)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei gilt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Symbol&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt;&lt;br /&gt;
| endliche Menge von Zuständen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
| Eingabealphabet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;&lt;br /&gt;
| Übergangsfunktion&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;&lt;br /&gt;
| Startzustand&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;&lt;br /&gt;
| Menge der akzeptierenden Endzustände&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Übergangsfunktion lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\delta : Q \times \Sigma \rightarrow Q&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Arbeitsweise eines DEA ===&lt;br /&gt;
&lt;br /&gt;
Ein DEA arbeitet folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
# Der Automat startet im Startzustand &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Er liest das Eingabewort von links nach rechts.&lt;br /&gt;
# Für jedes Zeichen wird anhand der Übergangsfunktion der nächste Zustand bestimmt.&lt;br /&gt;
# Nach dem letzten Zeichen wird geprüft, ob der aktuelle Zustand ein Endzustand ist.&lt;br /&gt;
# Ist der Zustand ein Endzustand, wird das Wort akzeptiert.&lt;br /&gt;
# Andernfalls wird das Wort verworfen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel eines DEA ===&lt;br /&gt;
&lt;br /&gt;
Gesucht ist ein Automat über dem Alphabet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Sigma = \{0,1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der alle Wörter akzeptiert, die eine gerade Anzahl von Einsen enthalten.&lt;br /&gt;
&lt;br /&gt;
Die Zustände sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zustand&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;&lt;br /&gt;
| bisher gerade Anzahl von Einsen gelesen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
| bisher ungerade Anzahl von Einsen gelesen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Der Startzustand ist &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;. Gleichzeitig ist &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt; auch der einzige Endzustand.&lt;br /&gt;
&lt;br /&gt;
Die Übergangstabelle lautet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Aktueller Zustand&lt;br /&gt;
! Eingabe 0&lt;br /&gt;
! Eingabe 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;q_1&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine gelesene &amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt; ändert die Anzahl der Einsen nicht. Eine gelesene &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; wechselt zwischen gerade und ungerade.&lt;br /&gt;
&lt;br /&gt;
== Nichtdeterministischer endlicher Automat ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;nichtdeterministischer endlicher Automat&amp;#039;&amp;#039;&amp;#039;, kurz &amp;#039;&amp;#039;&amp;#039;NEA&amp;#039;&amp;#039;&amp;#039;, erlaubt für einen Zustand und ein Eingabezeichen mehrere mögliche Folgezustände.&lt;br /&gt;
&lt;br /&gt;
Die Übergangsfunktion eines NEA hat die Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\delta : Q \times \Sigma \rightarrow \mathcal{P}(Q)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei bezeichnet &amp;lt;math&amp;gt;\mathcal{P}(Q)&amp;lt;/math&amp;gt; die Potenzmenge von &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt;, also die Menge aller Teilmengen von &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ein NEA akzeptiert ein Wort, wenn es mindestens einen möglichen Rechenweg gibt, der in einem akzeptierenden Zustand endet.&lt;br /&gt;
&lt;br /&gt;
=== Unterschied zwischen DEA und NEA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Eigenschaft&lt;br /&gt;
! DEA&lt;br /&gt;
! NEA&lt;br /&gt;
|-&lt;br /&gt;
| Folgezustand&lt;br /&gt;
| eindeutig bestimmt&lt;br /&gt;
| mehrere Möglichkeiten erlaubt&lt;br /&gt;
|-&lt;br /&gt;
| Berechnung&lt;br /&gt;
| genau ein Rechenweg&lt;br /&gt;
| mehrere mögliche Rechenwege&lt;br /&gt;
|-&lt;br /&gt;
| Akzeptanz&lt;br /&gt;
| Endzustand nach eindeutigem Lauf&lt;br /&gt;
| mindestens ein akzeptierender Lauf genügt&lt;br /&gt;
|-&lt;br /&gt;
| Ausdrucksstärke&lt;br /&gt;
| reguläre Sprachen&lt;br /&gt;
| reguläre Sprachen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Obwohl ein NEA flexibler wirkt, ist er nicht mächtiger als ein DEA. Jeder NEA kann in einen äquivalenten DEA umgewandelt werden. Dieses Verfahren heißt &amp;#039;&amp;#039;&amp;#039;Potenzmengenkonstruktion&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Epsilon-NEA ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Epsilon-NEA&amp;#039;&amp;#039;&amp;#039; ist ein nichtdeterministischer endlicher Automat, der zusätzlich sogenannte &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-Übergänge erlaubt.&lt;br /&gt;
&lt;br /&gt;
Ein &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-Übergang ist ein Zustandswechsel, bei dem kein Eingabezeichen gelesen wird.&lt;br /&gt;
&lt;br /&gt;
Die Übergangsfunktion lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\delta : Q \times (\Sigma \cup \{\varepsilon\}) \rightarrow \mathcal{P}(Q)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch Epsilon-NEAs erkennen genau die regulären Sprachen.&lt;br /&gt;
&lt;br /&gt;
== Reguläre Sprachen ==&lt;br /&gt;
&lt;br /&gt;
Eine Sprache heißt &amp;#039;&amp;#039;&amp;#039;regulär&amp;#039;&amp;#039;&amp;#039;, wenn sie durch einen endlichen Automaten erkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Reguläre Sprachen können äquivalent beschrieben werden durch:&lt;br /&gt;
&lt;br /&gt;
* deterministische endliche Automaten,&lt;br /&gt;
* nichtdeterministische endliche Automaten,&lt;br /&gt;
* Epsilon-NEAs,&lt;br /&gt;
* reguläre Ausdrücke,&lt;br /&gt;
* reguläre Grammatiken.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele regulärer Sprachen ===&lt;br /&gt;
&lt;br /&gt;
Über dem Alphabet &amp;lt;math&amp;gt;\Sigma = \{0,1\}&amp;lt;/math&amp;gt; sind folgende Sprachen regulär:&lt;br /&gt;
&lt;br /&gt;
* alle Wörter, die mit &amp;lt;math&amp;gt;0&amp;lt;/math&amp;gt; beginnen,&lt;br /&gt;
* alle Wörter, die auf &amp;lt;math&amp;gt;101&amp;lt;/math&amp;gt; enden,&lt;br /&gt;
* alle Wörter mit gerader Anzahl von Einsen,&lt;br /&gt;
* alle Wörter, die die Teilfolge &amp;lt;math&amp;gt;00&amp;lt;/math&amp;gt; enthalten,&lt;br /&gt;
* alle Wörter mit höchstens drei Zeichen.&lt;br /&gt;
&lt;br /&gt;
== Reguläre Ausdrücke ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;regulärer Ausdruck&amp;#039;&amp;#039;&amp;#039; beschreibt eine reguläre Sprache durch eine formale Schreibweise.&lt;br /&gt;
&lt;br /&gt;
Wichtige Operationen sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Schreibweise&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;&lt;br /&gt;
| das Zeichen &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;r \mid s&amp;lt;/math&amp;gt;&lt;br /&gt;
| Alternative: &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; oder &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;rs&amp;lt;/math&amp;gt;&lt;br /&gt;
| Konkatenation von &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;r^*&amp;lt;/math&amp;gt;&lt;br /&gt;
| beliebig viele Wiederholungen von &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
| leeres Wort&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
| leere Sprache&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;(0 \mid 1)^*101&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser reguläre Ausdruck beschreibt alle binären Wörter, die auf &amp;lt;math&amp;gt;101&amp;lt;/math&amp;gt; enden.&lt;br /&gt;
&lt;br /&gt;
== Äquivalenz von Automaten und regulären Ausdrücken ==&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Satz der Automatentheorie lautet:&lt;br /&gt;
&lt;br /&gt;
: Eine Sprache ist genau dann regulär, wenn sie von einem endlichen Automaten erkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Gleichwertig gilt:&lt;br /&gt;
&lt;br /&gt;
: Eine Sprache ist genau dann regulär, wenn sie durch einen regulären Ausdruck beschrieben werden kann.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, dass endliche Automaten und reguläre Ausdrücke dieselbe Ausdrucksstärke besitzen.&lt;br /&gt;
&lt;br /&gt;
== Potenzmengenkonstruktion ==&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Potenzmengenkonstruktion&amp;#039;&amp;#039;&amp;#039; ist ein Verfahren zur Umwandlung eines NEA in einen äquivalenten DEA.&lt;br /&gt;
&lt;br /&gt;
Die Grundidee ist, dass ein Zustand des neuen DEA einer Menge von möglichen Zuständen des NEA entspricht.&lt;br /&gt;
&lt;br /&gt;
Wenn der NEA die Zustände&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Q = \{q_0, q_1, q_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
hat, dann können die Zustände des konstruierten DEA Teilmengen davon sein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\emptyset&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\{q_0\}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\{q_1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\{q_0, q_1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\{q_0, q_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\{q_0, q_1, q_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der neue DEA simuliert also gleichzeitig alle möglichen Rechenwege des NEA.&lt;br /&gt;
&lt;br /&gt;
== Minimierung endlicher Automaten ==&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Automatenminimierung&amp;#039;&amp;#039;&amp;#039; beschäftigt sich damit, zu einem gegebenen endlichen Automaten einen äquivalenten Automaten mit möglichst wenigen Zuständen zu finden.&lt;br /&gt;
&lt;br /&gt;
Zwei Zustände heißen äquivalent, wenn sie für alle möglichen Fortsetzungen der Eingabe dasselbe Akzeptanzverhalten besitzen.&lt;br /&gt;
&lt;br /&gt;
Ein minimaler DEA besitzt keine unterscheidbaren Zustände, die zusammengelegt werden können.&lt;br /&gt;
&lt;br /&gt;
=== Bedeutung der Minimierung ===&lt;br /&gt;
&lt;br /&gt;
Die Minimierung ist wichtig, weil sie Automaten vereinfacht und effizienter macht.&lt;br /&gt;
&lt;br /&gt;
Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Optimierung von lexikalischen Scannern,&lt;br /&gt;
* Reduktion von Zustandsautomaten,&lt;br /&gt;
* formale Verifikation,&lt;br /&gt;
* Mustererkennung,&lt;br /&gt;
* Protokollanalyse.&lt;br /&gt;
&lt;br /&gt;
== Myhill-Nerode-Theorem ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Myhill-Nerode-Theorem&amp;#039;&amp;#039;&amp;#039; ist ein grundlegender Satz über reguläre Sprachen.&lt;br /&gt;
&lt;br /&gt;
Es charakterisiert reguläre Sprachen über Äquivalenzklassen von Wörtern. Vereinfacht besagt es:&lt;br /&gt;
&lt;br /&gt;
: Eine Sprache ist genau dann regulär, wenn sie nur endlich viele unterscheidbare Restsprachen besitzt.&lt;br /&gt;
&lt;br /&gt;
Anschaulich bedeutet das: Ein endlicher Automat kann nur endlich viele verschiedene Situationen unterscheiden. Wenn eine Sprache unendlich viele wirklich verschiedene Merksituationen benötigt, ist sie nicht regulär.&lt;br /&gt;
&lt;br /&gt;
Das Myhill-Nerode-Theorem wird verwendet, um:&lt;br /&gt;
&lt;br /&gt;
* die Regularität einer Sprache zu charakterisieren,&lt;br /&gt;
* minimale Automaten zu bestimmen,&lt;br /&gt;
* zu beweisen, dass bestimmte Sprachen nicht regulär sind.&lt;br /&gt;
&lt;br /&gt;
== Pumping-Lemma für reguläre Sprachen ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Pumping-Lemma&amp;#039;&amp;#039;&amp;#039; ist ein Werkzeug, um zu zeigen, dass eine Sprache nicht regulär ist.&lt;br /&gt;
&lt;br /&gt;
Es besagt vereinfacht:&lt;br /&gt;
&lt;br /&gt;
: Wenn eine Sprache regulär ist, dann gibt es eine Zahl &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;, sodass jedes Wort &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; der Sprache mit &amp;lt;math&amp;gt;|w| \geq p&amp;lt;/math&amp;gt; in drei Teile &amp;lt;math&amp;gt;w = xyz&amp;lt;/math&amp;gt; zerlegt werden kann, wobei der mittlere Teil &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; beliebig oft wiederholt werden darf und das Wort trotzdem in der Sprache bleibt.&lt;br /&gt;
&lt;br /&gt;
Formal gilt für reguläre Sprachen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w = xyz&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mit:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;|xy| \leq p&amp;lt;/math&amp;gt;,&lt;br /&gt;
* &amp;lt;math&amp;gt;|y| &amp;gt; 0&amp;lt;/math&amp;gt;,&lt;br /&gt;
* &amp;lt;math&amp;gt;xy^iz \in L&amp;lt;/math&amp;gt; für alle &amp;lt;math&amp;gt;i \geq 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Nicht-Regularität von a^n b^n ===&lt;br /&gt;
&lt;br /&gt;
Die Sprache&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L = \{a^n b^n \mid n \geq 0\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ist nicht regulär.&lt;br /&gt;
&lt;br /&gt;
Ein endlicher Automat kann nicht beliebig viele &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;-Zeichen zählen, um anschließend genau dieselbe Anzahl von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;-Zeichen zu überprüfen. Dafür wäre ein unbeschränkter Speicher erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Kellerautomaten ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Kellerautomat&amp;#039;&amp;#039;&amp;#039; ist ein Automat mit zusätzlichem Stapelspeicher. Dieser Stapel wird auch &amp;#039;&amp;#039;&amp;#039;Keller&amp;#039;&amp;#039;&amp;#039; genannt.&lt;br /&gt;
&lt;br /&gt;
Ein Kellerautomat kann:&lt;br /&gt;
&lt;br /&gt;
* Eingabezeichen lesen,&lt;br /&gt;
* Zustände wechseln,&lt;br /&gt;
* Symbole auf den Stapel legen,&lt;br /&gt;
* Symbole vom Stapel entfernen,&lt;br /&gt;
* das oberste Stapelsymbol betrachten.&lt;br /&gt;
&lt;br /&gt;
Kellerautomaten erkennen genau die &amp;#039;&amp;#039;&amp;#039;kontextfreien Sprachen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Aufbau eines Kellerautomaten ==&lt;br /&gt;
&lt;br /&gt;
Ein Kellerautomat wird häufig als Tupel beschrieben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A = (Q, \Sigma, \Gamma, \delta, q_0, Z_0, F)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei gilt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Symbol&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt;&lt;br /&gt;
| endliche Zustandsmenge&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
| Eingabealphabet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\Gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
| Kelleralphabet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;&lt;br /&gt;
| Übergangsfunktion&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;&lt;br /&gt;
| Startzustand&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Z_0&amp;lt;/math&amp;gt;&lt;br /&gt;
| Startsymbol im Keller&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;&lt;br /&gt;
| Menge akzeptierender Zustände&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für eine kontextfreie Sprache ===&lt;br /&gt;
&lt;br /&gt;
Die Sprache&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L = \{a^n b^n \mid n \geq 0\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann durch einen Kellerautomaten erkannt werden.&lt;br /&gt;
&lt;br /&gt;
Die Idee ist:&lt;br /&gt;
&lt;br /&gt;
# Für jedes gelesene &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; legt der Automat ein Symbol auf den Keller.&lt;br /&gt;
# Für jedes gelesene &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; entfernt der Automat ein Symbol vom Keller.&lt;br /&gt;
# Am Ende wird akzeptiert, wenn der Keller wieder leer ist beziehungsweise nur noch das Startsymbol enthält.&lt;br /&gt;
&lt;br /&gt;
Dadurch kann der Kellerautomat die Anzahl der &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;-Zeichen mit der Anzahl der &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;-Zeichen vergleichen.&lt;br /&gt;
&lt;br /&gt;
== Deterministische und nichtdeterministische Kellerautomaten ==&lt;br /&gt;
&lt;br /&gt;
Bei endlichen Automaten sind deterministische und nichtdeterministische Varianten gleich mächtig. Bei Kellerautomaten ist das anders.&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;nichtdeterministischer Kellerautomat&amp;#039;&amp;#039;&amp;#039; ist mächtiger als ein deterministischer Kellerautomat.&lt;br /&gt;
&lt;br /&gt;
Das bedeutet:&lt;br /&gt;
&lt;br /&gt;
* Nichtdeterministische Kellerautomaten erkennen alle kontextfreien Sprachen.&lt;br /&gt;
* Deterministische Kellerautomaten erkennen nur eine echte Teilklasse der kontextfreien Sprachen.&lt;br /&gt;
&lt;br /&gt;
Diese Unterscheidung ist besonders im Compilerbau relevant. Viele Programmiersprachen sind so gestaltet, dass ihre Syntax deterministisch analysierbar ist.&lt;br /&gt;
&lt;br /&gt;
== Turingmaschinen ==&lt;br /&gt;
&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;Turingmaschine&amp;#039;&amp;#039;&amp;#039; ist ein sehr mächtiges abstraktes Berechnungsmodell. Sie wurde von Alan Turing eingeführt und gilt als formales Modell allgemeiner Berechenbarkeit.&lt;br /&gt;
&lt;br /&gt;
Eine Turingmaschine besteht aus:&lt;br /&gt;
&lt;br /&gt;
* einer endlichen Zustandsmenge,&lt;br /&gt;
* einem Band mit Speicherzellen,&lt;br /&gt;
* einem Schreib-/Lesekopf,&lt;br /&gt;
* einem Eingabealphabet,&lt;br /&gt;
* einem Bandalphabet,&lt;br /&gt;
* einer Übergangsfunktion,&lt;br /&gt;
* einem Startzustand,&lt;br /&gt;
* akzeptierenden und verwerfenden Zuständen.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu endlichen Automaten und Kellerautomaten kann eine Turingmaschine auf ihrem Band lesen und schreiben. Der Schreib-/Lesekopf kann sich nach links und rechts bewegen.&lt;br /&gt;
&lt;br /&gt;
== Formaler Aufbau einer Turingmaschine ==&lt;br /&gt;
&lt;br /&gt;
Eine Turingmaschine kann als Tupel beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M = (Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei gilt:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Symbol&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt;&lt;br /&gt;
| endliche Menge von Zuständen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
| Eingabealphabet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\Gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
| Bandalphabet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;&lt;br /&gt;
| Übergangsfunktion&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_0&amp;lt;/math&amp;gt;&lt;br /&gt;
| Startzustand&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_{accept}&amp;lt;/math&amp;gt;&lt;br /&gt;
| akzeptierender Zustand&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;q_{reject}&amp;lt;/math&amp;gt;&lt;br /&gt;
| verwerfender Zustand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Übergangsfunktion hat häufig die Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\delta : Q \times \Gamma \rightarrow Q \times \Gamma \times \{L,R\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: Abhängig vom aktuellen Zustand und dem gelesenen Bandsymbol schreibt die Turingmaschine ein neues Symbol, wechselt den Zustand und bewegt den Kopf nach links oder rechts.&lt;br /&gt;
&lt;br /&gt;
== Bedeutung der Turingmaschine ==&lt;br /&gt;
&lt;br /&gt;
Die Turingmaschine ist eines der wichtigsten Modelle der Informatik, weil sie die theoretische Grenze algorithmischer Berechenbarkeit beschreibt.&lt;br /&gt;
&lt;br /&gt;
Nach der Church-Turing-These gilt:&lt;br /&gt;
&lt;br /&gt;
: Alles, was intuitiv algorithmisch berechenbar ist, kann auch von einer Turingmaschine berechnet werden.&lt;br /&gt;
&lt;br /&gt;
Die Turingmaschine ist damit nicht nur ein Automatenmodell, sondern auch ein Fundament der [[Berechenbarkeitstheorie]].&lt;br /&gt;
&lt;br /&gt;
== Entscheidbare und akzeptierbare Sprachen ==&lt;br /&gt;
&lt;br /&gt;
Im Zusammenhang mit Turingmaschinen unterscheidet man häufig zwischen entscheidbaren und akzeptierbaren Sprachen.&lt;br /&gt;
&lt;br /&gt;
=== Entscheidbare Sprache ===&lt;br /&gt;
&lt;br /&gt;
Eine Sprache heißt &amp;#039;&amp;#039;&amp;#039;entscheidbar&amp;#039;&amp;#039;&amp;#039;, wenn es eine Turingmaschine gibt, die für jedes Eingabewort nach endlich vielen Schritten anhält und korrekt entscheidet, ob das Wort zur Sprache gehört.&lt;br /&gt;
&lt;br /&gt;
=== Akzeptierbare Sprache ===&lt;br /&gt;
&lt;br /&gt;
Eine Sprache heißt &amp;#039;&amp;#039;&amp;#039;akzeptierbar&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;rekursiv aufzählbar&amp;#039;&amp;#039;&amp;#039;, wenn es eine Turingmaschine gibt, die jedes Wort der Sprache akzeptiert. Für Wörter, die nicht zur Sprache gehören, muss sie jedoch nicht unbedingt anhalten.&lt;br /&gt;
&lt;br /&gt;
Jede entscheidbare Sprache ist akzeptierbar, aber nicht jede akzeptierbare Sprache ist entscheidbar.&lt;br /&gt;
&lt;br /&gt;
== Das Halteproblem ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Halteproblem&amp;#039;&amp;#039;&amp;#039; ist ein klassisches Beispiel für ein unentscheidbares Problem.&lt;br /&gt;
&lt;br /&gt;
Es fragt:&lt;br /&gt;
&lt;br /&gt;
: Hält ein gegebenes Programm bei einer gegebenen Eingabe nach endlich vielen Schritten an?&lt;br /&gt;
&lt;br /&gt;
Alan Turing zeigte, dass es keinen allgemeinen Algorithmus geben kann, der diese Frage für alle Programme und Eingaben korrekt beantwortet.&lt;br /&gt;
&lt;br /&gt;
Das Halteproblem zeigt eine fundamentale Grenze automatischer Berechnung.&lt;br /&gt;
&lt;br /&gt;
== Linear beschränkte Automaten ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;linear beschränkter Automat&amp;#039;&amp;#039;&amp;#039; ist eine eingeschränkte Turingmaschine. Sein Band ist nur linear in der Länge der Eingabe beschränkt.&lt;br /&gt;
&lt;br /&gt;
Linear beschränkte Automaten erkennen die &amp;#039;&amp;#039;&amp;#039;kontext-sensitiven Sprachen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Sie stehen in der Chomsky-Hierarchie zwischen Kellerautomaten und allgemeinen Turingmaschinen.&lt;br /&gt;
&lt;br /&gt;
== Chomsky-Hierarchie und Automaten ==&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Chomsky-Hierarchie&amp;#039;&amp;#039;&amp;#039; ordnet formale Sprachen nach ihrer Ausdrucksstärke. Jeder Sprachklasse entspricht ein bestimmtes Automatenmodell.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Typ&lt;br /&gt;
! Sprachklasse&lt;br /&gt;
! Grammatik&lt;br /&gt;
! Automatenmodell&lt;br /&gt;
|-&lt;br /&gt;
| Typ 3&lt;br /&gt;
| Reguläre Sprachen&lt;br /&gt;
| Reguläre Grammatiken&lt;br /&gt;
| Endliche Automaten&lt;br /&gt;
|-&lt;br /&gt;
| Typ 2&lt;br /&gt;
| Kontextfreie Sprachen&lt;br /&gt;
| Kontextfreie Grammatiken&lt;br /&gt;
| Kellerautomaten&lt;br /&gt;
|-&lt;br /&gt;
| Typ 1&lt;br /&gt;
| Kontext-sensitive Sprachen&lt;br /&gt;
| Kontext-sensitive Grammatiken&lt;br /&gt;
| Linear beschränkte Automaten&lt;br /&gt;
|-&lt;br /&gt;
| Typ 0&lt;br /&gt;
| Rekursiv aufzählbare Sprachen&lt;br /&gt;
| Unbeschränkte Grammatiken&lt;br /&gt;
| Turingmaschinen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Hierarchie zeigt, dass mächtigere Automatenmodelle größere Sprachklassen erkennen können.&lt;br /&gt;
&lt;br /&gt;
== Vergleich wichtiger Automatenmodelle ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Eigenschaft&lt;br /&gt;
! Endlicher Automat&lt;br /&gt;
! Kellerautomat&lt;br /&gt;
! Turingmaschine&lt;br /&gt;
|-&lt;br /&gt;
| Zustände&lt;br /&gt;
| endlich&lt;br /&gt;
| endlich&lt;br /&gt;
| endlich&lt;br /&gt;
|-&lt;br /&gt;
| Zusätzlicher Speicher&lt;br /&gt;
| keiner&lt;br /&gt;
| Stapel&lt;br /&gt;
| unbeschränktes Band&lt;br /&gt;
|-&lt;br /&gt;
| Speicherzugriff&lt;br /&gt;
| nicht vorhanden&lt;br /&gt;
| nur oberstes Stapelsymbol&lt;br /&gt;
| beliebige Bandbewegung schrittweise&lt;br /&gt;
|-&lt;br /&gt;
| Erkannte Sprachen&lt;br /&gt;
| regulär&lt;br /&gt;
| kontextfrei&lt;br /&gt;
| rekursiv aufzählbar&lt;br /&gt;
|-&lt;br /&gt;
| Beispielproblem&lt;br /&gt;
| Wort endet auf 01&lt;br /&gt;
| gleich viele a und b in Form a^n b^n&lt;br /&gt;
| allgemeine Berechnung&lt;br /&gt;
|-&lt;br /&gt;
| Ausdrucksstärke&lt;br /&gt;
| gering&lt;br /&gt;
| mittel&lt;br /&gt;
| sehr hoch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abschluss- und Entscheidungsprobleme ==&lt;br /&gt;
&lt;br /&gt;
In der Automatentheorie werden häufig Entscheidungsprobleme über Automaten und Sprachen untersucht.&lt;br /&gt;
&lt;br /&gt;
Typische Fragen sind:&lt;br /&gt;
&lt;br /&gt;
* Ist die Sprache eines Automaten leer?&lt;br /&gt;
* Sind zwei Automaten äquivalent?&lt;br /&gt;
* Akzeptiert ein Automat ein bestimmtes Wort?&lt;br /&gt;
* Ist eine Sprache regulär?&lt;br /&gt;
* Ist eine Grammatik mehrdeutig?&lt;br /&gt;
* Hält eine Turingmaschine auf einer bestimmten Eingabe?&lt;br /&gt;
&lt;br /&gt;
Einige dieser Probleme sind entscheidbar, andere nicht.&lt;br /&gt;
&lt;br /&gt;
== Leerheitsproblem ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Leerheitsproblem&amp;#039;&amp;#039;&amp;#039; fragt, ob die von einem Automaten erkannte Sprache leer ist.&lt;br /&gt;
&lt;br /&gt;
Für endliche Automaten lautet die Frage:&lt;br /&gt;
&lt;br /&gt;
: Gibt es mindestens ein Wort, das vom Automaten akzeptiert wird?&lt;br /&gt;
&lt;br /&gt;
Bei endlichen Automaten ist dieses Problem entscheidbar. Man prüft, ob ein Endzustand vom Startzustand aus erreichbar ist.&lt;br /&gt;
&lt;br /&gt;
== Wortproblem ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Wortproblem&amp;#039;&amp;#039;&amp;#039; fragt, ob ein bestimmtes Wort von einem Automaten akzeptiert wird.&lt;br /&gt;
&lt;br /&gt;
Für endliche Automaten ist das Wortproblem leicht entscheidbar: Man simuliert den Automaten auf dem Eingabewort.&lt;br /&gt;
&lt;br /&gt;
Auch für Kellerautomaten und Turingmaschinen kann man entsprechende Varianten betrachten. Bei Turingmaschinen kann das Wortproblem jedoch problematisch werden, wenn die Maschine auf manchen Eingaben nicht anhält.&lt;br /&gt;
&lt;br /&gt;
== Äquivalenzproblem ==&lt;br /&gt;
&lt;br /&gt;
Das &amp;#039;&amp;#039;&amp;#039;Äquivalenzproblem&amp;#039;&amp;#039;&amp;#039; fragt, ob zwei Automaten dieselbe Sprache erkennen.&lt;br /&gt;
&lt;br /&gt;
Für deterministische endliche Automaten ist das Äquivalenzproblem entscheidbar.&lt;br /&gt;
&lt;br /&gt;
Die Frage lautet:&lt;br /&gt;
&lt;br /&gt;
: Gilt &amp;lt;math&amp;gt;L(A_1) = L(A_2)&amp;lt;/math&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
Man kann dies zum Beispiel prüfen, indem man einen Produktautomaten konstruiert und untersucht, ob es ein Wort gibt, das von genau einem der beiden Automaten akzeptiert wird.&lt;br /&gt;
&lt;br /&gt;
== Produktautomat ==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;#039;&amp;#039;&amp;#039;Produktautomat&amp;#039;&amp;#039;&amp;#039; kombiniert zwei Automaten zu einem neuen Automaten. Er wird häufig verwendet, um Abschlussoperationen oder Entscheidungsprobleme zu untersuchen.&lt;br /&gt;
&lt;br /&gt;
Wenn zwei Automaten die Zustandsmengen &amp;lt;math&amp;gt;Q_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;Q_2&amp;lt;/math&amp;gt; besitzen, dann hat der Produktautomat Zustände der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;(q_1, q_2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q_1 \in Q_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;q_2 \in Q_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der Produktautomat simuliert beide Automaten gleichzeitig.&lt;br /&gt;
&lt;br /&gt;
== Abschlusseigenschaften regulärer Sprachen ==&lt;br /&gt;
&lt;br /&gt;
Reguläre Sprachen sind unter vielen Operationen abgeschlossen. Das bedeutet: Wenn man reguläre Sprachen mit bestimmten Operationen kombiniert, entsteht wieder eine reguläre Sprache.&lt;br /&gt;
&lt;br /&gt;
Reguläre Sprachen sind abgeschlossen unter:&lt;br /&gt;
&lt;br /&gt;
* Vereinigung,&lt;br /&gt;
* Schnitt,&lt;br /&gt;
* Komplement,&lt;br /&gt;
* Differenz,&lt;br /&gt;
* Konkatenation,&lt;br /&gt;
* Kleene-Stern,&lt;br /&gt;
* Spiegelung.&lt;br /&gt;
&lt;br /&gt;
Diese Eigenschaften lassen sich häufig mit Automatenkonstruktionen beweisen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Vereinigung regulärer Sprachen ==&lt;br /&gt;
&lt;br /&gt;
Seien &amp;lt;math&amp;gt;L_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; reguläre Sprachen.&lt;br /&gt;
&lt;br /&gt;
Dann ist auch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L_1 \cup L_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
regulär.&lt;br /&gt;
&lt;br /&gt;
Begründung: Man kann einen Produktautomaten konstruieren, der beide Automaten parallel simuliert. Der neue Automat akzeptiert, wenn mindestens einer der beiden ursprünglichen Automaten akzeptiert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel: Schnitt regulärer Sprachen ==&lt;br /&gt;
&lt;br /&gt;
Seien &amp;lt;math&amp;gt;L_1&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; reguläre Sprachen.&lt;br /&gt;
&lt;br /&gt;
Dann ist auch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L_1 \cap L_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
regulär.&lt;br /&gt;
&lt;br /&gt;
Der Produktautomat akzeptiert in diesem Fall nur dann, wenn beide ursprünglichen Automaten akzeptieren.&lt;br /&gt;
&lt;br /&gt;
== Typische Beweismethoden ==&lt;br /&gt;
&lt;br /&gt;
In der Automatentheorie werden verschiedene mathematische Beweismethoden eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Wichtige Methoden sind:&lt;br /&gt;
&lt;br /&gt;
* Konstruktion eines Automaten,&lt;br /&gt;
* Angabe einer Übergangstabelle,&lt;br /&gt;
* Induktionsbeweis über die Länge des Eingabewortes,&lt;br /&gt;
* Pumping-Lemma-Beweis,&lt;br /&gt;
* Myhill-Nerode-Argument,&lt;br /&gt;
* Reduktion,&lt;br /&gt;
* Simulation eines Automatenmodells durch ein anderes.&lt;br /&gt;
&lt;br /&gt;
== Typische Klausuraufgaben ==&lt;br /&gt;
&lt;br /&gt;
Typische Aufgaben zur Automatentheorie sind:&lt;br /&gt;
&lt;br /&gt;
* Konstruieren Sie einen DEA zu einer gegebenen Sprache.&lt;br /&gt;
* Geben Sie einen regulären Ausdruck zu einem Automaten an.&lt;br /&gt;
* Wandeln Sie einen NEA in einen DEA um.&lt;br /&gt;
* Minimieren Sie einen endlichen Automaten.&lt;br /&gt;
* Entscheiden Sie, ob eine Sprache regulär ist.&lt;br /&gt;
* Zeigen Sie mit dem Pumping-Lemma, dass eine Sprache nicht regulär ist.&lt;br /&gt;
* Konstruieren Sie einen Kellerautomaten für eine kontextfreie Sprache.&lt;br /&gt;
* Geben Sie eine Grammatik zu einem Automaten an.&lt;br /&gt;
* Ordnen Sie eine Sprache in die Chomsky-Hierarchie ein.&lt;br /&gt;
* Erklären Sie den Unterschied zwischen DEA, NEA und Epsilon-NEA.&lt;br /&gt;
* Beschreiben Sie die Arbeitsweise einer Turingmaschine.&lt;br /&gt;
* Zeigen Sie, dass ein Problem entscheidbar oder unentscheidbar ist.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbereiche ==&lt;br /&gt;
&lt;br /&gt;
Obwohl Automaten abstrakte Modelle sind, haben sie viele praktische Anwendungen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bereich&lt;br /&gt;
! Anwendung der Automatentheorie&lt;br /&gt;
|-&lt;br /&gt;
| Compilerbau&lt;br /&gt;
| lexikalische Analyse und Syntaxanalyse&lt;br /&gt;
|-&lt;br /&gt;
| Reguläre Ausdrücke&lt;br /&gt;
| Suchmuster in Texten&lt;br /&gt;
|-&lt;br /&gt;
| Protokolle&lt;br /&gt;
| Modellierung von Zustandsübergängen&lt;br /&gt;
|-&lt;br /&gt;
| Softwareverifikation&lt;br /&gt;
| Prüfung von Programmzuständen&lt;br /&gt;
|-&lt;br /&gt;
| Hardwareentwurf&lt;br /&gt;
| Modellierung digitaler Schaltungen&lt;br /&gt;
|-&lt;br /&gt;
| Datenbanken&lt;br /&gt;
| Anfrageverarbeitung und formale Logik&lt;br /&gt;
|-&lt;br /&gt;
| Sprachverarbeitung&lt;br /&gt;
| formale Beschreibung syntaktischer Strukturen&lt;br /&gt;
|-&lt;br /&gt;
| Künstliche Intelligenz&lt;br /&gt;
| Zustandsräume und Suchverfahren&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Beispiel aus dem Compilerbau ==&lt;br /&gt;
&lt;br /&gt;
Im Compilerbau werden endliche Automaten häufig für die lexikalische Analyse verwendet.&lt;br /&gt;
&lt;br /&gt;
Ein Scanner zerlegt Quelltext in sogenannte Token. Beispiele für Token sind:&lt;br /&gt;
&lt;br /&gt;
* Schlüsselwörter,&lt;br /&gt;
* Bezeichner,&lt;br /&gt;
* Zahlen,&lt;br /&gt;
* Operatoren,&lt;br /&gt;
* Klammern.&lt;br /&gt;
&lt;br /&gt;
Reguläre Ausdrücke beschreiben dabei die Struktur der Token. Aus diesen regulären Ausdrücken können endliche Automaten erzeugt werden, die den Quelltext effizient erkennen.&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner in einer Programmiersprache könnte zum Beispiel durch folgenden regulären Ausdruck beschrieben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;[a-zA-Z][a-zA-Z0-9]^*&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Ausdruck beschreibt Wörter, die mit einem Buchstaben beginnen und danach aus Buchstaben oder Ziffern bestehen.&lt;br /&gt;
&lt;br /&gt;
== Beispiel aus der Protokollmodellierung ==&lt;br /&gt;
&lt;br /&gt;
Kommunikationsprotokolle lassen sich als Zustandsautomaten beschreiben.&lt;br /&gt;
&lt;br /&gt;
Ein stark vereinfachter Verbindungsaufbau könnte folgende Zustände besitzen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zustand&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| CLOSED&lt;br /&gt;
| keine Verbindung&lt;br /&gt;
|-&lt;br /&gt;
| LISTEN&lt;br /&gt;
| wartet auf Verbindung&lt;br /&gt;
|-&lt;br /&gt;
| SYN_RECEIVED&lt;br /&gt;
| Verbindungsanfrage empfangen&lt;br /&gt;
|-&lt;br /&gt;
| ESTABLISHED&lt;br /&gt;
| Verbindung aufgebaut&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Übergänge entstehen durch Ereignisse wie eingehende Pakete, Zeitüberschreitungen oder Benutzeraktionen.&lt;br /&gt;
&lt;br /&gt;
== Grenzen einfacher Automaten ==&lt;br /&gt;
&lt;br /&gt;
Endliche Automaten sind sehr effizient, aber in ihrer Ausdrucksstärke beschränkt. Sie können keine beliebig großen Mengen zählen oder verschachtelte Strukturen allgemeiner Tiefe erkennen.&lt;br /&gt;
&lt;br /&gt;
Nicht regulär sind zum Beispiel Sprachen wie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L = \{a^n b^n \mid n \geq 0\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L = \{ww \mid w \in \{0,1\}^*\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solche Sprachen erfordern mehr Speicher als ein endlicher Automat besitzt.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang mit Berechenbarkeit und Komplexität ==&lt;br /&gt;
&lt;br /&gt;
Die Automatentheorie bildet eine Brücke zwischen formalen Sprachen, Berechenbarkeit und Komplexität.&lt;br /&gt;
&lt;br /&gt;
* Endliche Automaten zeigen, welche Sprachen mit sehr begrenztem Speicher erkannt werden können.&lt;br /&gt;
* Kellerautomaten erweitern dieses Modell um Stapelspeicher.&lt;br /&gt;
* Turingmaschinen beschreiben allgemeine Berechenbarkeit.&lt;br /&gt;
* Die Komplexitätstheorie untersucht anschließend, wie viele Ressourcen eine Berechnung benötigt.&lt;br /&gt;
&lt;br /&gt;
Damit ist die Automatentheorie eine Grundlage für das Verständnis der Frage, was Computer prinzipiell leisten können und wo ihre Grenzen liegen.&lt;br /&gt;
&lt;br /&gt;
== Wichtige Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Begriff&lt;br /&gt;
! Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| Automat&lt;br /&gt;
| abstraktes mathematisches Modell einer berechnenden Maschine&lt;br /&gt;
|-&lt;br /&gt;
| Zustand&lt;br /&gt;
| interne Situation eines Automaten&lt;br /&gt;
|-&lt;br /&gt;
| Startzustand&lt;br /&gt;
| Zustand, in dem die Verarbeitung beginnt&lt;br /&gt;
|-&lt;br /&gt;
| Endzustand&lt;br /&gt;
| akzeptierender Zustand eines Automaten&lt;br /&gt;
|-&lt;br /&gt;
| Übergangsfunktion&lt;br /&gt;
| Regel für Zustandswechsel&lt;br /&gt;
|-&lt;br /&gt;
| DEA&lt;br /&gt;
| deterministischer endlicher Automat&lt;br /&gt;
|-&lt;br /&gt;
| NEA&lt;br /&gt;
| nichtdeterministischer endlicher Automat&lt;br /&gt;
|-&lt;br /&gt;
| Epsilon-Übergang&lt;br /&gt;
| Zustandswechsel ohne Lesen eines Eingabezeichens&lt;br /&gt;
|-&lt;br /&gt;
| Reguläre Sprache&lt;br /&gt;
| Sprache, die von einem endlichen Automaten erkannt wird&lt;br /&gt;
|-&lt;br /&gt;
| Kellerautomat&lt;br /&gt;
| Automat mit Stapelspeicher&lt;br /&gt;
|-&lt;br /&gt;
| Turingmaschine&lt;br /&gt;
| allgemeines Modell algorithmischer Berechnung&lt;br /&gt;
|-&lt;br /&gt;
| Chomsky-Hierarchie&lt;br /&gt;
| Klassifikation formaler Sprachen&lt;br /&gt;
|-&lt;br /&gt;
| Pumping-Lemma&lt;br /&gt;
| Werkzeug zum Nachweis, dass eine Sprache nicht regulär ist&lt;br /&gt;
|-&lt;br /&gt;
| Potenzmengenkonstruktion&lt;br /&gt;
| Verfahren zur Umwandlung eines NEA in einen DEA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Die Automatentheorie untersucht abstrakte Maschinenmodelle und deren Fähigkeit, formale Sprachen zu erkennen. Sie beginnt bei einfachen endlichen Automaten, die reguläre Sprachen erkennen, und reicht über Kellerautomaten bis hin zu Turingmaschinen als allgemeinem Berechnungsmodell.&lt;br /&gt;
&lt;br /&gt;
Endliche Automaten sind besonders wichtig für reguläre Sprachen und praktische Anwendungen wie reguläre Ausdrücke, Scanner und Protokollmodellierung. Kellerautomaten erweitern dieses Modell um einen Stapelspeicher und können dadurch kontextfreie Sprachen erkennen. Turingmaschinen bilden schließlich ein umfassendes Modell für algorithmische Berechnung.&lt;br /&gt;
&lt;br /&gt;
Die Automatentheorie zeigt damit sowohl die Möglichkeiten als auch die Grenzen formaler Berechnungsmodelle. Sie ist ein zentrales Fundament der theoretischen Informatik und eng mit formalen Sprachen, Berechenbarkeitstheorie und Komplexitätstheorie verbunden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Theoretische Informatik]]&lt;br /&gt;
* [[Formale Sprachen]]&lt;br /&gt;
* [[Reguläre Sprachen]]&lt;br /&gt;
* [[Reguläre Ausdrücke]]&lt;br /&gt;
* [[Deterministischer endlicher Automat]]&lt;br /&gt;
* [[Nichtdeterministischer endlicher Automat]]&lt;br /&gt;
* [[Kellerautomat]]&lt;br /&gt;
* [[Turingmaschine]]&lt;br /&gt;
* [[Chomsky-Hierarchie]]&lt;br /&gt;
* [[Berechenbarkeitstheorie]]&lt;br /&gt;
* [[Komplexitätstheorie]]&lt;br /&gt;
* [[Pumping-Lemma]]&lt;br /&gt;
* [[Myhill-Nerode-Theorem]]&lt;br /&gt;
&lt;br /&gt;
== Kategorien ==&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Theoretische Informatik]]&lt;br /&gt;
[[Kategorie:Automatentheorie]]&lt;br /&gt;
[[Kategorie:Formale Sprachen]]&lt;br /&gt;
[[Kategorie:Berechenbarkeit]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;/div&gt;</summary>
		<author><name>PhilKa</name></author>
	</entry>
</feed>