Linguagens FormaisAFD e AFND
Autômatos Finitos Determinísticos (AFD)
14 min de leitura · 3ª mais cobrada em Linguagens Formais
O que é um AFD
Um autômato finito determinístico (AFD) é uma máquina com memória finita — um conjunto finito de estados — que lê uma cadeia (sequência finita de símbolos de um alfabeto finito ) da esquerda para a direita, um símbolo por vez, e decide aceitar ou rejeitar.
Determinístico significa: em cada estado, para cada símbolo do alfabeto, há exatamente uma transição. Não há escolha e não há transição vazia ().
O propósito é reconhecer linguagens formais: conjuntos de cadeias extraídas de um alfabeto finito . A linguagem do AFD é o conjunto das cadeias que, após a leitura completa, deixam a máquina num estado final.
Definição formal
A seção anterior já nomeou os estados, o alfabeto, a transição única por símbolo, o começo da leitura e a aceitação no fim da cadeia:
Um AFD é a quíntupla
onde:
- é um conjunto finito de estados;
- é o alfabeto finito de entrada;
- é a função de transição total: em conjuntos finitos, as desigualdades de tamanho são obrigatórias — o domínio tem pares, e cada par , com e , corresponde um sucessor ;
- é o estado inicial, onde a leitura começa;
- é o conjunto de estados finais (aceitação).
Por que é total? Sem isso, algum par não teria sucessor e a leitura pararia sem estado definido no meio da cadeia.
Completar — por exemplo com um poço que rejeita e não sai mais — garante que toda (toda cadeia finita sobre , inclusive a vazia) tem um único percurso. Escreve-se para o estado depois de ler toda a cadeia a partir de . A linguagem fica bem definida:
São as palavras cujo percurso termina em . O estado depois do último símbolo define aceitação; estados finais visitados no meio do caminho não contam.
O processamento começa em e consome os símbolos na ordem. Não há como “voltar” na fita nem pular um símbolo: cada aplica exatamente uma vez.
Exemplo
Alfabeto . Dois estados: (o número de zeros lidos até agora é par) e .
Quíntupla: , inicial , finais , e
Um inverte a paridade dos zeros já lidos, então a tabela aponta para o outro estado; um não inverte, então a tabela devolve o mesmo estado. A cadeia tem dois zeros. Começa em (nenhum zero). O permanece em ; o primeiro vai a (um zero); o permanece; o último volta a (dois zeros):
Termina em : aceita. A cadeia tem um zero e termina em : rejeita.
A vazia fica em e é aceita — zero zeros é par.
O estado guarda só a paridade dos zeros — um bit de memória. Isso é o que “estado finito” permite guardar. Dois estados não distinguem de ; a linguagem só pergunta a paridade, e para isso basta.
Extensão da transição
A função consome um símbolo. Para uma cadeia , estende-se a :
Começando em , o estado após é . A mesma leitura escreve para . O AFD aceita se e somente se .
A cadeia vazia é aceita exatamente quando , porque . Por isso o AFD da paridade aceita : o inicial é final.
A extensão é uma indução no comprimento. Os dois ingredientes são obrigatórios por razões distintas: porque a cadeia vazia não traz símbolo; porque o próximo símbolo só se aplica depois de conhecido o estado no prefixo . Cada símbolo entra na definição recursiva, na ordem.
O determinismo entra aqui: de cada estado, devolve um único sucessor, então é um único estado — nunca um conjunto.
Um grafo dirigido tem arestas orientadas: cada arco é um par ordenado, de um estado para o sucessor , com o rótulo . O inicial se destaca; cada final leva círculo duplo. O determinismo aparece no desenho: de cada vértice sai uma aresta por símbolo.
Se faltasse alguma aresta, não seria total: complete com um poço do qual todo símbolo volta a . Sem o poço, cadeias que usam um par estado–símbolo sem aresta no grafo não teriam definido.
Cadeias que terminam em
Seja . O AFD só precisa lembrar o último símbolo lido.
, inicial , finais .
significa “ainda não li nada, ou o último símbolo não foi ”; significa “o último símbolo foi ”.
Toda célula está preenchida: é total. Sem isso o rastreio de pararia no primeiro par sem sucessor. Em fórmulas: , , , . No grafo, leva círculo duplo.
Começa em (nada lido; ainda não termina em ). O aplica : o último símbolo passou a ser . O aplica : o último passou a ser . O final aplica .
Logo : aceita.
A cadeia percorre e termina fora de : rejeita. A vazia fica em e também é rejeitada — não termina em . A cadeia é o caso mínimo de aceitação: um único passo .
Este AFD difere do da paridade: o estado guarda o último símbolo, enquanto na paridade a memória é a contagem módulo . Os dois usam , mas o que o estado registra é outro.
Em o AFD visita no meio e mesmo assim é rejeitada: olha só o estado final da leitura.
Em Resumo
Um AFD é a quíntupla , com total: um sucessor por par estado–símbolo.
A extensão é o estado após ler ; é o conjunto das cadeias que terminam em .
Completar (poço, se preciso) garante um único percurso para toda . A tabela de um AFD de dois estados já exibe isso.