Overbodige toestanden
Een eindige automaat kan toestanden hebben vanwaaruit je niet in een eindtoestand kunt komen en die dus overbodig zijn. Zulke toestanden noemen we overbodige toestanden. Die willen we meestal verwijderen, omdat ze de automaat alleen onnodig ingewikkeld maken.
Voorbeeld van overbodige toestanden
Neem deze eindige automaat:
We zien dat we, zodra we in toestand q4 of q5 komen, nooit meer in een van de eindtoestanden q1 of q2 kunnen komen. Zulke toestanden zijn dus overbodig en we kunnen ze gewoon verwijderen, waardoor we een nieuwe automaat krijgen die equivalent is; hij zou dezelfde taal accepteren. Na het verwijderen van de overbodige toestanden zou de automaat er zo uitzien:
Hij zou daarbij dezelfde taal accepteren. Toch zijn er momenten waarop het handig is om enkele overbodige toestanden te hebben — bijvoorbeeld als we een totale automaat construeren.
Definitie van een overbodige toestand
Neem een eindige automaat A = ⟨Q, Σ, δ, q0, F⟩. We zeggen dat een toestand q ∈ Q overbodig is als er geen enkel woord w ∈ Σ∗ en geen enkele toestand qf ∈ F bestaat zodat
Hoe verwijder je overbodige toestanden
We gaan ervan uit dat de invoer een automaat A = ⟨Q, Σ, δ, q0, F⟩ is die al geen onbereikbare toestanden meer heeft. We vinden stap voor stap de toestanden die naar eindtoestanden leiden, dan de toestanden die naar toestanden leiden die naar eindtoestanden leiden, en zo steeds verder. Zo krijgen we de verzameling van alle toestanden die niet overbodig zijn. Aan het begin stellen we S0 = F. We construeren verder verzamelingen Si voor i ∈ ℕ volgens dit voorschrift:
De resulterende verzameling van alle toestanden die niet overbodig zijn, kunnen we zo uitdrukken:
En de verzameling overbodige toestanden als
Met andere woorden: als Si = Si + 1 geldt, dan bevat de verzameling Q ∖ Si de overbodige toestanden. We illustreren de werkwijze aan deze automaat:
Eerst stellen we S0 = {q1, q2}. Daarna bouwen we de verzameling S1 op door aan de verzameling S0 alle toestanden toe te voegen die naar een van de toestanden in de verzameling S0 leiden. We voegen dus de toestanden q0 en q3 toe, omdat vanuit q0 een overgang naar q1 loopt en vanuit q3 een overgang naar q2. We krijgen S1 = {q0, q1, q2, q3}. Omdat S0 ≠ S1, gaan we verder.
We bouwen de verzameling S2 op. We zoeken dus alle toestanden vanwaaruit je in S1 kunt komen en die nog niet in S1 zitten. Dat is één toestand, q6, vanwaaruit je in toestand q3 kunt komen. We krijgen S2 = {q0, q1, q2, q3, q6}. Omdat S1 ≠ S2, gaan we verder.
We bouwen de verzameling S3 op. Bestaat er een nieuwe toestand vanwaaruit je in een van de toestanden in S2 kunt komen? Nee, vanuit de toestanden q4 en q5 kun je in geen enkele toestand in S2 komen en de overige toestanden zitten al in S2. Er geldt dus S3 = {q0, q1, q2, q3, q6}. Omdat S2 = S3, stopt het algoritme en stelt de verzameling S2 de verzameling toestanden voor die niet overbodig zijn. De verzameling {q4, q5} is de verzameling toestanden die wel overbodig zijn.
Formeel construeren we een nieuwe equivalente automaat zonder overbodige toestanden als volgt. We hebben een automaat A = ⟨Q, Σ, δ, q0, F⟩ en construeren daarbij een equivalente automaat A′ = ⟨Q′, Σ, δ′, q0, F⟩ zonder overbodige toestanden.
- ∀q ∈ Q′, a ∈ Σ: δ′(q, a) = δ(q, a) als δ(q, a) ∈ Q′, anders is δ′(q, a) niet gedefinieerd
Bronnen
Hoofdstukken: Onbereikbare toestanden, Overbodige toestanden, Minimalisatie van een automaat