Overflødige tilstande
En endelig automat kan have tilstande, hvorfra det ikke er muligt at nå en accepttilstand, og som derfor er unødvendige. Sådanne tilstande kalder vi overflødige tilstande. Normalt vil vi gerne fjerne dem, fordi de blot gør hele automaten mere indviklet.
Eksempel på overflødige tilstande
Vi ser på denne endelige automat:
Vi ser, at så snart vi når til tilstandene q4 eller q5, lykkes det os aldrig mere at nå en af accepttilstandene q1 eller q2. Sådanne tilstande er derfor overflødige, og vi kan simpelthen fjerne dem, hvorved vi får en ny automat, som dog er ækvivalent; den ville acceptere det samme sprog. Efter at have slettet de overflødige tilstande ville automaten se sådan ud:
Den ville altså acceptere det samme sprog. Der er dog tidspunkter, hvor det er hensigtsmæssigt at have nogle overflødige tilstande — for eksempel når vi konstruerer en total automat.
Definition af en overflødig tilstand
Vi har en endelig automat A = ⟨Q, Σ, δ, q0, F⟩. Vi siger, at en tilstand q ∈ Q er overflødig, hvis der ikke findes noget ord w ∈ Σ∗ og ingen tilstand qf ∈ F sådan, at
Sådan fjerner du overflødige tilstande
Vi antager, at vi som input har en automat A = ⟨Q, Σ, δ, q0, F⟩, som allerede er uden uopnåelige tilstande. Vi finder efterhånden de tilstande, der fører til accepttilstande, derefter de tilstande, der fører til tilstande, som fører til accepttilstande, og så fremdeles. Dermed får vi mængden af alle tilstande, der ikke er overflødige. Til at begynde med sætter vi S0 = F. Vi konstruerer yderligere mængder Si for i ∈ ℕ efter denne forskrift:
Den resulterende mængde af alle tilstande, der ikke er overflødige, kan vi udtrykke sådan:
Og mængden af overflødige tilstande som
Med andre ord: hvis Si = Si + 1, så indeholder mængden Q ∖ Si de overflødige tilstande. Vi illustrerer fremgangsmåden på denne automat:
Først sætter vi S0 = {q1, q2}. Derefter opstiller vi mængden S1 ved at lægge alle de tilstande til mængden S0, der fører til en af tilstandene i S0. Vi tilføjer således tilstandene q0 og q3, fordi der fra q0 går en overgang til q1, og fra q3 går en overgang til q2. Vi får S1 = {q0, q1, q2, q3}. Da S0 ≠ S1, fortsætter vi.
Vi opstiller mængden S2. Vi leder altså efter alle tilstande, hvorfra man kan nå S1, og som endnu ikke er i S1. Det er den eneste tilstand q6, hvorfra man kan nå tilstanden q3. Vi får S2 = {q0, q1, q2, q3, q6}. Da S1 ≠ S2, fortsætter vi.
Vi opstiller mængden S3. Findes der en ny tilstand, hvorfra man kan nå en af tilstandene i S2? Det gør der ikke, fra tilstandene q4 og q5 kan man ikke nå nogen af tilstandene i S2, og de øvrige tilstande er allerede i S2. Der gælder altså S3 = {q0, q1, q2, q3, q6}. Da S2 = S3, slutter algoritmen, og mængden S2 er mængden af tilstande, der ikke er overflødige. Mængden {q4, q5} er mængden af tilstande, der er overflødige.
Formelt konstruerer vi en ny ækvivalent automat uden overflødige tilstande sådan her. Vi har en automat A = ⟨Q, Σ, δ, q0, F⟩ og konstruerer til den en ækvivalent automat A′ = ⟨Q′, Σ, δ′, q0, F⟩ uden overflødige tilstande.
- ∀q ∈ Q′, a ∈ Σ: δ′(q, a) = δ(q, a), hvis δ(q, a) ∈ Q′, ellers er δ′(q, a) ikke defineret
Kilder
Kapitler: Uopnåelige tilstande, Overflødige tilstande, Minimering af automat