✖

Vereinigung regulärer Sprachen

Gegeben seien zwei reguläre Sprachen L1, L2. Wir beweisen, dass ihre Vereinigung L = L1 ∪ L2 ebenfalls eine reguläre Sprache ist.

Vorgehen mit einem deterministischen Automaten

Idee des Vorgehens

Wir haben zwei reguläre Sprachen L1 und L2 und wollen beweisen, dass ihre Vereinigung L1 ∪ L2 wieder eine reguläre Sprache ist. Da L1 und L2 reguläre Sprachen sind, gibt es endliche Automaten A1 und A2, die die Sprachen L1 und L2 akzeptieren, es gilt also L(A1) = L1 und L(A2) = L2. Wir konstruieren nun einen endlichen Automaten A, der die Sprache L1 ∪ L2 akzeptiert, und beweisen damit, dass die Sprache L1 ∪ L2 regulär ist.

Wie gehen wir vor? Wir haben die endlichen Automaten A1 und A2, die die einzelnen Sprachen akzeptieren. Wir können sagen, dass ein Wort w genau dann zur Sprache L1 ∪ L2 gehört, wenn es mindestens einer der Automaten A1 oder A2 akzeptiert.

Der Automat A könnte so funktionieren, dass er für die Eingabe w die Berechnung des Automaten A1 für die Eingabe w simuliert. Akzeptiert A1 das Wort w, dann akzeptiert auch A das Wort w. Lehnt A1 das Wort w ab, dann versucht A noch, die Berechnung von A2 für die Eingabe w zu simulieren. Akzeptiert A2 das Wort w, dann akzeptiert auch A das Wort w. Andernfalls lehnt er ab.

Es bleibt noch zu formalisieren, was es bedeutet, dass der Automat A die Berechnung eines anderen Automaten „simuliert“.

Formalisierung

Wir haben zwei reguläre Sprachen L1 und L2, die von den folgenden endlichen Automaten akzeptiert werden:

A1=⟨Q1,Σ1,δ1,q1,F1⟩A2=⟨Q2,Σ2,δ2,q2,F2⟩.

Wir konstruieren den endlichen Automaten A = ⟨Q, Σ, δ, q, F⟩, der die Sprache L = L1 ∪ L2 akzeptiert. Wir nutzen die Idee, zwei Automaten A1, A2 zu simulieren. Stellen wir uns also vor, dass wir das Wort w = w1w2… wn als Eingabe haben und nun gleichzeitig den Ablauf der Automaten A1 und A2 für das Wort w simulieren. Die Anfangskonfiguration des Automaten A1 ist ⟨q1, w1w2… wn⟩, die Anfangskonfiguration von A2 ist ⟨q2, w1w2… wn⟩. In jedem Automaten führen wir nun einen Rechenschritt aus und gelangen so in die Konfigurationen ⟨δ1(q1, w1), w2… wn⟩ und ⟨δ2(q2, w1), w2… wn⟩.

Wir sehen, dass sich diese Konfigurationen nur in der ersten Komponente unterscheiden, die zweite – der ungelesene Teil des Wortes – ist bei beiden immer gleich. Während der Simulation müssen wir also nicht zwei Konfigurationen zweier Automaten mitführen, sondern es genügt uns eine Konfiguration der Form ⟨⟨qi, qj⟩, wl… wn⟩, wobei qi ∈ Q1 und qj ∈ Q2. Mit anderen Worten: Unser konstruierter Automat A hat die Anfangskonfiguration ⟨⟨q1, q2⟩, w⟩. Der erste Teil des Paares ⟨q1, q2⟩ stellt den Zustand dar, in dem sich der Automat A1 gerade befindet, und die zweite Komponente den aktuellen Zustand des Automaten A2.

Wir können also schreiben, dass der konstruierte Automat A die Zustandsmenge Q = Q1 × Q2 hat. Das ist das kartesische Produkt der Zustände der beiden vorherigen Automaten. Die folgende Idee ist: Der Automat A hat den Startzustand ⟨q1, q2⟩, und wenn der Automat A1 für das Symbol w1 in den Zustand qi übergeht und der Automat A2 für das Symbol w1 in den Zustand qj übergeht, dann geht der Automat A für das Symbol w1 in den Zustand ⟨qi, qj⟩ über.

Die Übergangsfunktion δ schreiben wir so (hier setzen wir schon voraus, dass wir uns gerade in den Zuständen qi und qj befinden):

δ(⟨qi,qj⟩,w)=⟨δ1(qi,w),δ2(qj,w)⟩

Es bleiben nur noch Kleinigkeiten. Für das Alphabet gilt Σ= Σ1 ∪ Σ2. Der Startzustand ist q = ⟨q1, q2⟩. Und die Endzustände sind alle Paare ⟨qi, qj⟩, für die qi ∈ F1 oder qj ∈ F2 gilt.

Veranschaulichung des Vorgehens

Gegeben seien zwei Automaten. Der erste ist der Automat A1, der alle Wörter akzeptiert (einschließlich des leeren Wortes), in denen sich Nullen und Einsen abwechseln, d. h. Wörter der Form 01, 0101, 010101, …

Der andere Automat A2 akzeptiert Wörter, die mindestens eine Null enthalten:

Die Vereinigung dieser Sprachen besteht aus den Wörtern, die entweder eine Null enthalten oder die Form 01, 0101, … haben. Nun konstruieren wir den endlichen Automaten A = ⟨Q, Σ, δ, q, F⟩, der genau diese vereinigte Sprache akzeptiert. Zuerst zeigen wir, wie die Zustände dieses neuen Automaten A aussehen. Es ist das kartesische Produkt der Zustände des ersten und des zweiten Automaten:

Q=Q1×Q2={⟨q0,p0⟩,⟨q0,p1⟩,⟨q1,p0⟩,⟨q1,p1⟩,⟨q2,p0⟩,⟨q2,p1⟩}

So sehen die sechs Zustände des Automaten A aus, der die vereinigte Sprache L(A1) ∪ L(A2) akzeptiert. Im Diagramm sähen sie so aus:

Lass dich nicht davon verwirren, dass wir Zustände haben, die aus Paaren von Zuständen bestehen – das dient nur der besseren Übersicht darüber, was im Automaten eigentlich passiert. Die Zustände könnten ruhig ganz klassisch q0, …, q5 heißen. Endzustände sind die Zustände, die entweder den Zustand q0 oder p1 enthalten, also die Endzustände der ursprünglichen Automaten. Der Startzustand ist ⟨q0, p0⟩.

Nun müssen wir alle Übergänge finden. Wir schreiben uns eine solche Tabelle auf:

01⟨q0,p0⟩⟨q0,p1⟩⟨q1,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q2,p1⟩

Und füllen die Tabelle nach und nach aus. Zuerst stellen wir fest, wohin der Übergang vom Zustand ⟨q0, p0⟩ bei der Eingabe 0 führt. Wir stellen fest, wohin der Übergang vom Zustand q0 bei der Eingabe 0 im Automaten A1 führt: Er führt in den Zustand q1. Im Automaten A2 führt der Übergang von p0 bei der Null in den Zustand p1. In die Tabelle schreiben wir also ⟨q1, p1⟩:

01⟨q0,p0⟩⟨q1,p1⟩⟨q0,p1⟩⟨q1,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q2,p1⟩

Bei der Eingabe 1 erhalten wir: Für den Automaten A1 gilt δ1(q0, 1) = q2 und für den Automaten A2 gilt δ2(p0, 1) = p0. Wir erhalten also den Zustand ⟨q2, p0⟩.

01⟨q0,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q0,p1⟩⟨q1,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q2,p1⟩

Wir ergänzen den Rest der Tabelle:

01⟨q0,p0⟩⟨q1,p1⟩⟨q2,p0⟩⟨q0,p1⟩⟨q1,p1⟩⟨q2,p1⟩⟨q1,p0⟩⟨q2,p1⟩⟨q0,p0⟩⟨q1,p1⟩⟨q2,p1⟩⟨q0,p1⟩⟨q2,p0⟩⟨q2,p1⟩⟨q2,p0⟩⟨q2,p1⟩⟨q2,p1⟩⟨q2,p1⟩

Und anhand dieser Tabelle zeichnen wir nur noch den Rest des Diagramms.

Wir können ausprobieren, ob der Automat so funktioniert, wie er soll. Wir versuchen, das Wort 0100 zu akzeptieren. Der Automat durchläuft nacheinander die Zustände

⟨q0,p0⟩,⟨q1,p1⟩,⟨q0,p1⟩,⟨q1,p1⟩,⟨q2,p1⟩

Da der Zustand ⟨q2, p1⟩ ein Endzustand ist, akzeptiert der Automat A das Wort 0100. Wie würde es ausgehen, wenn wir versuchten, das Wort 0100 mit den Automaten A1 und A2 zu akzeptieren? Der Automat A1 würde nacheinander diese Zustände durchlaufen:

q0,q1,q0,q1,q2

Der Automat endete im Zustand q2, der kein Endzustand ist, also würde der Automat A1 dieses Wort nicht akzeptieren. Und der Automat A2?

p0,p1,p1,p1,p1

Der Zustand p1 ist ein Endzustand, also würde der Automat A2 das Wort 0100 akzeptieren. Beachte, dass die Automaten A1 und A2 in den Zuständen q2 und p1 endeten, was damit übereinstimmt, dass der Automat A im Zustand ⟨q2, p1⟩ endete.

Vorgehen mit einem nichtdeterministischen Automaten

Beispiel

Dass die Menge der regulären Sprachen unter der Vereinigung abgeschlossen ist, können wir auch beweisen, indem wir einen nichtdeterministischen Automaten konstruieren, der viel einfacher sein wird.

Wir haben also zwei reguläre Sprachen L1, L2 und wollen beweisen, dass ihre Vereinigung L = L1 ∪ L2 ebenfalls eine reguläre Sprache ist. Da L1, L2 reguläre Sprachen sind, muss es Automaten A1, A2 geben, die diese Sprachen akzeptieren. D. h. es gilt L(A1) = L1 und L(A2) = L2. Mithilfe dieser Automaten konstruieren wir den Automaten A, der die Sprache L akzeptiert, d. h. L(A) = L.

Nehmen wir an, die endlichen Automaten A1 und A2 sehen so aus:

und

Den Automaten, der die Vereinigung beider Sprachen akzeptiert, konstruieren wir so, dass wir einen neuen Startzustand erzeugen und von diesem Zustand zwei ε-Übergänge zu den ursprünglichen Startzuständen führen. Das ist alles. Der Automat sähe so aus:

Formalisierung

Wir haben zwei Automaten A1 = ⟨Q1, Σ, δ1, q1, F1⟩ und A2 = ⟨Q2, Σ, δ2, q2, F2⟩. Wir konstruieren den Automaten A = ⟨Q, Σ, δ, q0, F⟩, der die Vereinigung der Sprachen akzeptiert, die von den vorherigen Automaten akzeptiert werden, d. h. L(A) = L(A1) ∪ L(A2). Dabei gilt:

  • Q = Q1 ∪ Q2 ∪ {q0}
  • F = F1 ∪ F2

Und die Übergangsfunktion δ definieren wir so:

δ(q,a)={δ1(q,a)fallsq∈Q1δ2(q,a)fallsq∈Q2{q1,q2}fallsq=q0∧a=ε∅fallsq=q0∧a≠ε

Quellen

Kapitel: Abgeschlossenheit regulärer Sprachen, Vereinigung regulärer Sprachen, Schnitt regulärer Sprachen, Differenz regulärer Sprachen, Komplement einer regulären Sprache, Konkatenation regulärer Sprachen, Kleene-Stern einer regulären Sprache