Stati inutili
Un automa a stati finiti può avere stati da cui è impossibile arrivare in uno stato finale e che quindi non servono a nulla. Tali stati si chiamano stati inutili. Di solito vogliamo eliminarli, perché complicano inutilmente l’intero automa.
Esempio di stati inutili
Prendiamo questo automa a stati finiti:
Vediamo che, una volta arrivati negli stati q4 o q5, non riusciremo mai più ad arrivare in uno degli stati finali q1 o q2. Tali stati sono quindi inutili e possiamo semplicemente eliminarli, ottenendo un nuovo automa che però sarebbe equivalente: accetterebbe lo stesso linguaggio. Dopo aver cancellato gli stati inutili l’automa si presenterebbe così:
Accetterebbe lo stesso linguaggio. Ci sono però casi in cui conviene avere degli stati inutili, ad esempio quando costruiamo un automa completo.
Definizione di stato inutile
Sia A = ⟨Q, Σ, δ, q0, F⟩ un automa a stati finiti. Diciamo che uno stato q ∈ Q è inutile se non esiste nessuna parola w ∈ Σ∗ e nessuno stato qf ∈ F tali che
Come eliminare gli stati inutili
Supponiamo di avere in ingresso un automa A = ⟨Q, Σ, δ, q0, F⟩ già privo di stati irraggiungibili. Troveremo via via gli stati che portano negli stati finali, poi gli stati che portano a stati che portano negli stati finali, e così di seguito. In questo modo otteniamo l’insieme di tutti gli stati che non sono inutili. All’inizio poniamo S0 = F. Costruiremo gli altri insiemi Si per i ∈ ℕ* secondo questa regola:
L’insieme risultante di tutti gli stati che non sono inutili si può esprimere così:
E l’insieme degli stati inutili così:
In altre parole: se vale Si = Si + 1, allora l’insieme Q ∖ Si contiene gli stati inutili. Illustriamo il procedimento su questo automa:
Per prima cosa poniamo S0 = {q1, q2}. Poi costruiamo l’insieme S1 aggiungendo all’insieme S0 tutti gli stati che portano in uno degli stati dell’insieme S0. Aggiungiamo quindi gli stati q0 e q3, perché da q0 c’è una transizione verso q1 e da q3 una transizione verso q2. Otteniamo S1 = {q0, q1, q2, q3}. Poiché S0 ≠ S1, andiamo avanti.
Costruiamo l’insieme S2. Cerchiamo quindi tutti gli stati da cui si può arrivare in S1 e che non sono ancora in S1. È uno solo, q6, da cui si può arrivare nello stato q3. Otteniamo S2 = {q0, q1, q2, q3, q6}. Poiché S1 ≠ S2, andiamo avanti.
Costruiamo l’insieme S3. Esiste qualche stato nuovo da cui si può arrivare in uno degli stati di S2? No: dagli stati q4 e q5 non si può arrivare in nessuno degli stati di S2 e gli altri stati sono già in S2. Vale quindi S3 = {q0, q1, q2, q3, q6}. Poiché S2 = S3, l’algoritmo termina e l’insieme S2 rappresenta l’insieme degli stati che non sono inutili. L’insieme {q4, q5} è l’insieme degli stati inutili.
Formalmente, il nuovo automa equivalente senza stati inutili si costruisce così. Abbiamo l’automa A = ⟨Q, Σ, δ, q0, F⟩ e costruiamo per esso l’automa equivalente A′ = ⟨Q′, Σ, δ′, q0, F⟩ privo di stati inutili.
- ∀q ∈ Q′, a ∈ Σ: δ′(q, a) = δ(q, a) se δ(q, a) ∈ Q′, altrimenti δ′(q, a) non è definita
Fonti
Capitoli: Stati irraggiungibili, Stati inutili, Minimizzazione di un automa