Next: Exercícios Up: Autómatos Finitos Previous: Autómatos Finitos Não-Deterministas

Autómatos Finitos com transições vazias

Nos autómatos que vimos até agora, exigimos, em cada passo, que a cabeça de leitura se mova uma célula para a direita. Vamos agora relaxar esta condição permitindo que a cabeça permaneça na mesma célula durante uma transição. A estas transições, às quais não correspondem nenhum símbolo lido, chamamos transições vazias. Num AFND com transições vazias temos


Para que o nosso programa Prolog aceite estes autómatos, basta acrescentar uma terceira cláusula reconhece/3:

         reconhece(AF,T,EstCor) :-
           transicaoVazia(AF,EstCor,ProxEst),
           reconhece(AF,T,ProxEst).

O poder expressivo de um AFND com transições vazias não é maior que um AFND (que por sua vez é igual, como dissemos, a um AFD). Existem situações, no entanto, em que as transições vazias são úteis. Vejamos alguns exemplos.
Dados dois autómatos AF1 e AF2, pretende-se construir um terceiro autómato AFtv que defina a linguagem dada pela união da linguagem reconhecida por AF1 com a linguagem reconhecida por AF2. O autómato AFtv pretendido pode ser definido com um novo estado inicial que, via transições vazias, conduz aos estados iniciais de AF1 e AF2. Com esta construção vê-se facilmente que se x é uma palavra aceite por AF1, então x é aceite por AFtv e que se x é aceite por AF2, então é aceite por AF3. O inverso também é verdade: se x é aceite por AF3 é aceite por AF1 ou por AF2.
Vejamos, para terminar, um autómato finito com transições vazias que define um número decimal sem sinal



e a respectiva definição em Prolog

         digitos([0,1,2,3,4,5,6,7,8,9]).

         estadoInicial(af_tv,1).
         estadoFinal(af_tv,4).

         delta(af_tv,1,D,2) :- digitos(L), member(D,L).
         delta(af_tv,2,.,3).
         delta(af_tv,3,D,4) :- digitos(L), member(D,L).

         transicaoVazia(af_tv,2,1).
         transicaoVazia(af_tv,2,4).
         transicaoVazia(af_tv,4,3).

que nos permite fazer perguntas como as que se seguem.

         ?- aceita(af_tv,[1,1,.,2,3]). % 11.23
yes

         ?- aceita(af_tv,[.,2,3]). % .23
no

         ?- aceita(af_tv,[2,3]). % 23
yes

Next: Exercícios Up: Autómatos Finitos Previous: Autómatos Finitos Não-Deterministas


1999-05-20