✖

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

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

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:

Si={q∈Q|∃a∈Σ:δ(q,a)∈Si−1}∪Si−1

Podemos expressar o conjunto resultante de todos os estados que não são inúteis assim:

⋃i=1∞Si.

E o conjunto dos estados inúteis como

Q∖⋃i=1∞Si.

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′=⋃i=1∞Si
  • ∀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