✖

Stări inaccesibile

Un automat finit poate avea stări în care nu este posibil să ajungem. Astfel de stări se numesc stări inaccesibile. De obicei vrem să le eliminăm, deoarece nu fac decât să complice inutil automatul.

Exemplu de stări inaccesibile

Fie acest automat:

Vedem că orice am face, în starea q3 nu ajungem niciodată, deoarece nu intră nicio tranziție în ea. Despre starea q3 spunem că este inaccesibilă. O întrebare: ar fi starea q3 accesibilă dacă ar intra în ea o tranziție dintr-o altă stare? Dacă am duce o muchie dintr-una din stările q0, q1, q2, q5, ar fi accesibilă. Dacă am adăuga un alt nod și am duce o tranziție din el…

…atunci, desigur, ambele stări q3 și q4 ar fi inaccesibile.

Definiția stării inaccesibile

Definim mai întâi starea accesibilă. Fie un automat finit A = ⟨Q, Σ, δ, q0, F⟩. Spunem că o stare q ∈ Q este accesibilă dacă există un cuvânt w ∈ Σ∗ astfel încât

⟨q0,w⟩↦∗⟨q,ε⟩.

Starea q ∈ Q este inaccesibilă dacă nu este accesibilă.

Cum eliminăm stările inaccesibile

Dacă un automat are deja stări inaccesibile, este indicat să le eliminăm. Construim astfel un automat echivalent A′ = ⟨Q′, Σ, δ′, q0, F′⟩, care va fi fără stări inaccesibile.

Vom construi iterativ mulțimea stărilor accesibile. Începem cu mulțimea S0 = {q0}, deoarece starea inițială este cu siguranță accesibilă. Următoarea mulțime o construim astfel:

Si={r|δ(q,a)=r pentru un q∈Si−1,a∈Σ}∪Si−1

Pe românește: mulțimea S0 este mereu dată, iar mulțimea S1 o construim luând toate stările din mulțimea S0 și aflând unde duc tranzițiile lor pentru toate simbolurile din Σ. Reunim aceste stări cu mulțimea inițială de stări S0. Prin același procedeu aflăm mulțimea S2 și următoarele. Evident, va fi adevărat că Si − 1 ⊆ Si.

Mulțimea stărilor accesibile o putem obține astfel:

⋃i=1∞Si

Poate părea ciudat că încercăm să reunim o infinitate de mulțimi Si, dar automatul conține doar un număr finit de stări. Asta înseamnă că, la un moment dat, mulțimile Sj și Sj + 1 și toate cele următoare vor fi egale, așa că, și după reuniunea unei infinități de mulțimi, putem obține o mulțime finită de stări.

Să ne întoarcem la automatul

și să încercăm să găsim mulțimea stărilor accesibile. Începem cu egalitatea de bază

S0={q0}

Acum calculăm mulțimea S1. Trebuie să găsim toate tranzițiile din starea q0 și să adăugăm stările lor țintă la mulțimea S0. Deoarece avem q0 → a q1 și q0 → bq2, mulțimea S1 va conține în plus stările q1 și q2:

S1={q0,q1,q2}

În continuare construim mulțimea S2. Ne uităm unde putem ajunge din stările q0, q1, q2. Singura stare nouă este q5, în care putem ajunge din starea q1:

S2={q0,q1,q2,q5}

În continuare construim mulțimea S3. Putem ajunge din stările q0, q1, q2, q5 într-o stare nouă? Nu putem, deci mulțimea S3 va conține aceleași elemente ca S2:

S3={q0,q1,q2,q5}

Deoarece S2 = S3, avem și S3 = S4 = S5 = … Dacă reunim toate mulțimile Si, obținem mulțimea S2, pentru că niciun alt element nu se mai adaugă în vreo altă mulțime.

Mulțimea stărilor accesibile ale automatului este deci {q0, q1, q2, q5}. Stările inaccesibile le obținem printr-o simplă diferență de mulțimi:

Q∖⋃i=1∞Si

Mulțimea stărilor inaccesibile ale automatului nostru este {q3, q4}. Eliminăm din automatul A toate stările inaccesibile și toate tranzițiile care conțineau o stare inaccesibilă. Adică automatul echivalent fără stări inaccesibile A′ = ⟨Q′, Σ, δ′, q0, F′⟩ al automatului A = ⟨Q, Σ, δ, q0, F⟩ îl definim astfel:

  • Q′=⋃i=1∞Si
  • ∀q ∈ Q′, a ∈ Σ:  δ′(q, a) = δ(q, a)
  • F′=F∩Q′=F∩⋃i=1∞Si

Surse

Capitole: Stări inaccesibile, Stări neproductive, Minimizarea automatului