Estados inúteis
Um autômato finito pode ter estados dos quais não é possível chegar a um estado final e que, por isso, são inúteis. Esses estados são chamados de estados inúteis. Normalmente queremos removê-los, porque eles apenas complicam o autômato inteiro sem necessidade.
Exemplo de estados inúteis
Considere este autômato finito:
Vemos que, no momento em que chegamos aos estados q4 ou q5, nunca mais conseguiremos chegar a um dos estados finais q1 ou q2. Esses estados são, assim, inúteis e podemos simplesmente removê-los, obtendo um novo autômato que seria, no entanto, equivalente; ele aceitaria a mesma linguagem. Depois de apagar os estados inúteis, o autômato ficaria assim:
Ele aceitaria, portanto, a mesma linguagem. No entanto, há momentos em que convém ter alguns estados inúteis — por exemplo, quando construímos um autômato completo.
Definição de estado inútil
Considere um autômato finito A = ⟨Q, Σ, δ, q0, F⟩. Dizemos que um estado q ∈ Q é inútil se não existe nenhuma palavra w ∈ Σ∗ nem nenhum estado qf ∈ F tal que
Como remover os estados inúteis
Supomos que na entrada temos um autômato A = ⟨Q, Σ, δ, q0, F⟩ que já não tem estados inacessíveis. Vamos encontrando aos poucos os estados que levam a estados finais, depois os estados que levam a estados que levam a estados finais, e assim sucessivamente. Assim obtemos o conjunto de todos os estados que não são inúteis. No começo estabelecemos S0 = F. Vamos construir os outros conjuntos Si para i ∈ ℕ* segundo esta regra:
Podemos expressar o conjunto resultante de todos os estados que não são inúteis assim:
E o conjunto dos estados inúteis como
Em outras palavras: se vale Si = Si + 1, então o conjunto Q ∖ Si contém os estados inúteis. Vamos ilustrar o procedimento com este autômato:
Primeiro estabelecemos a igualdade S0 = {q1, q2}. Em seguida construímos o conjunto S1 acrescentando ao conjunto S0 todos os estados que levam a um dos estados do conjunto S0. Acrescentamos, assim, os estados q0 e q3, porque de q0 sai uma transição para q1 e de q3 sai uma transição para q2. Obtemos S1 = {q0, q1, q2, q3}. Como S0 ≠ S1, continuamos.
Construímos o conjunto S2. Procuramos, então, todos os estados dos quais se pode chegar a S1 e que ainda não estão em S1. É um único estado, q6, do qual se pode chegar ao estado q3. Obtemos S2 = {q0, q1, q2, q3, q6}. Como S1 ≠ S2, continuamos.
Construímos o conjunto S3. Existe algum estado novo do qual se possa chegar a algum dos estados de S2? Não existe: dos estados q4 e q5 não se pode chegar a nenhum dos estados de S2, e os outros estados já estão em S2. Portanto, S3 = {q0, q1, q2, q3, q6}. Como S2 = S3, o algoritmo termina, e o conjunto S2 representa o conjunto dos estados que não são inúteis. O conjunto {q4, q5} é o conjunto dos estados que são inúteis.
Formalmente, construímos o novo autômato equivalente sem estados inúteis assim. Temos o autômato A = ⟨Q, Σ, δ, q0, F⟩ e construímos para ele o autômato equivalente A′ = ⟨Q′, Σ, δ′, q0, F⟩ sem estados inúteis.
- ∀q ∈ Q′, a ∈ Σ: δ′(q, a) = δ(q, a), se δ(q, a) ∈ Q′; caso contrário, δ′(q, a) não está definida
Fontes
Capítulos: Estados inacessíveis, Estados inúteis, Minimização de autômatos