Autómatos finitos
Estados com significado, função de transição, construção de DFA e provas de correção.
Para saber se uma palavra termina em , chega guardar o sufixo útil do prefixo lido. Depois de , interessa o último ; depois de , interessa . Um autómato finito guarda esse resumo num estado.
A expressão descreve a mesma condição por blocos. Aqui vamos construir a máquina que a verifica letra a letra.
DFA: definição e leitura
Um autómato finito determinístico, DFA, é :
- é um conjunto finito e não vazio de estados;
- é o alfabeto de entrada;
- é a função de transição;
- é o estado inicial;
- é o conjunto de estados finais, ou de aceitação.
Nesta definição, é total: existe exatamente um destino para cada par estado/símbolo. Um desenho incompleto abrevia transições para um estado poço, do qual nunca se sai. Uma transição ausente não significa que a máquina ignore a letra.
No diagrama, uma seta sem origem marca o início e um círculo duplo marca um estado final. Entrar num estado final a meio da palavra não termina a leitura, porque a aceitação depende do estado depois de consumir toda a entrada.
Construir estados com significado
Vamos reconhecer . Escolhe:
- : não há um sufixo útil, incluindo o início;
- : o prefixo lido termina em ;
- : o prefixo lido termina em .
| Estado | Lê | Lê | Final? |
|---|---|---|---|
| inicial | Não | ||
| Não | |||
| Sim |
Em , outro mantém o sufixo útil . Em , um transforma o sufixo em , que já não termina em nem em .
A ligação entre e lê no sentido descendente e no ascendente. A palavra segue por isso e é aceite, enquanto passa em mas termina em e é rejeitada; termina no estado inicial, que não é final.
Construir e testar o DFA
Edita os estados, o estado inicial, os finais e as transições no laboratório. Cada par estado/símbolo precisa de exatamente uma transição: uma tabela incompleta é um erro de construção, não uma rejeição da palavra. Experimenta aba passo a passo para observar a passagem por um estado final antes do fim da entrada.
Em Resolver exercício, corrige a máquina e verifica o comportamento; os exemplos de teste ajudam a localizar erros, enquanto a comparação completa explora todos os pares de estados alcançáveis com a máquina de referência e mostra uma palavra que revela qualquer diferença. Renomear estados ou acrescentar estados inacessíveis não altera a linguagem reconhecida.
DFA: aceita se terminar num estado final, marcado com círculo duplo.
Editar estados e transições
Até 12 estados, 8 símbolos e 128 símbolos de entrada. Edições e resultados ficam neste dispositivo durante esta visita.
Pronta para executar.
Ver solução
Repõe o exemplo para consultar a máquina de referência. Os estados podem ter outros nomes: a verificação compara o comportamento para todas as entradas.
De onde sai cada transição de recuperação
Cada transição responde à mesma pergunta: se o prefixo lido até agora está resumido no estado e chega a letra , qual é o resumo do prefixo maior? A resposta é sempre o sufixo mais comprido do prefixo maior que ainda seja útil, isto é, ou .
| Estás em | Chega | Prefixo maior termina em | Vais para |
|---|---|---|---|
| sem sufixo útil | |||
| , cujo sufixo útil é | |||
| , cujo sufixo útil é | |||
| , sem sufixo útil |
Verifica com palavras concretas: segue e aceita; segue e rejeita; visita a meio mas termina em e aceita.
Transição estendida
lê um símbolo. Para ler uma palavra, definimos :
Assim, . Por exemplo,
Ver por que podemos dividir a entrada em qualquer posição
Para quaisquer , vale
ou seja, podemos continuar a leitura a partir do estado deixado pelo prefixo. Prova por indução em : a base dá de ambos os lados. Se vale para , então, para :
A segunda linha usa a hipótese de indução.
Provar que a construção está correta
No DFA anterior, afirma que, após ler , a máquina está em se termina em , em se termina em , e em nos restantes casos.
Na base, não termina em nenhum desses sufixos, e a máquina está em . No passo, acrescentar leva sempre a . Acrescentar leva a exatamente quando antes havia um no fim, ou seja, quando estávamos em . Nos outros casos leva a . A tabela preserva o invariante em cada passo.
Como só é final, o invariante prova as duas direções: todas as palavras aceites terminam em , e todas as palavras terminadas em são aceites.
Contar por restos
Um DFA não guarda contagens sem limite, mas pode guardar um resto. Para reconhecer palavras binárias cujo valor é múltiplo de , usa estados .
Se o prefixo representa e lês o bit , o novo valor é . Logo:
| Estado | ||
|---|---|---|
| inicial e final | ||
representa e segue , terminando no resto zero. Nesta convenção, zeros iniciais são permitidos e representa zero. Se o enunciado exigir representação não vazia a começar em , acrescenta um novo estado inicial não final e um poço para entradas que comecem em . Não mudes a linguagem sem explicitar essa condição.
Se a entrada for um número binário lido ao contrário, a letra seguinte já não duplica o prefixo acumulado. Uma via sistemática é construir o DFA para a interpretação normal, inverter a linguagem e determinizar. Outra é guardar o resto acumulado e o peso da próxima posição módulo o divisor; ambos têm finitas possibilidades. Ao ler do bit menos significativo para o mais significativo, guarda : é o resto do valor acumulado e é o peso da posição seguinte módulo 5. Começa em e, por um bit , atualiza
Os pesos possíveis são , repetindo esse ciclo. Para :
| Bit lido | antes | depois |
|---|---|---|
O resto final é , e o valor é . Para exigir entrada não vazia ou um bit mais significativo igual a 1, trata também essas condições. Não reutilizes a recorrência sem conferir qual ponta representa o bit menos significativo.
Combinar duas condições
Se queres guardar a paridade do número de zeros e de uns, o estado é um par de paridades. Há quatro estados. Um troca só a primeira componente; um troca só a segunda.
O estado inicial é . Para aceitar um número par de ambos os símbolos, só esse estado é final. Para aceitar um número par de zeros ou de uns, são finais todos os pares com pelo menos uma componente par.
É a construção de produto: simular dois DFA ao mesmo tempo. Não mistures as transições com o critério de aceitação, porque o mesmo produto permite interseção, união ou diferença, escolhendo os finais. A minimização remove memória redundante depois de a construção estar correta.
Exercícios
A construção para o sufixo 00 adapta o exercício 1.1 da folha prática 2. Os múltiplos de cinco adaptam o exercício 4.1, com outros exemplos. O produto de sufixo e paridade é original.
Múltiplos de cinco
Constrói um DFA completo para as palavras binárias que começam em e representam múltiplos de 5. A representação é lida do bit mais significativo para o menos significativo. Dá a tabela dos cinco restos e os estados adicionais para impor o início. Segue , e . Explica por que a regra dos restos continua correta.
Pista
Separa a condição numérica da condição sobre o primeiro bit.
Solução
Se o valor anterior é e lês o bit , o novo valor é . Portanto basta atualizar para :
| Estado | ||
|---|---|---|
Usa ainda início não final e poço . De , leva a e leva a ; repete ambos os bits. Só é final. segue e aceita o valor 5. chega ao poço no primeiro bit e rejeita, apesar de também representar 5 se aceitássemos zeros iniciais. fica em e rejeita.
Depois do primeiro , o estado guarda o resto do valor do prefixo. A equação mostra que cada transição preserva esse invariante. O início e o poço impõem a condição adicional sobre a representação.
Confere a tua resposta:
- Derivei a recorrência e preenchi os cinco restos.
- Impus começar em 1 com início não final e poço.
- Aceitei 101 e rejeitei 0101 e ε pelas condições certas.
Construir e justificar
Constrói um DFA completo para palavras sobre que terminam em . Mostra os percursos de , e e justifica a construção.
Pista
O que importa é o comprimento do sufixo atual de zeros, limitado a dois.
Mais uma pista
Usa estados . Uma letra 1 leva sempre a .
Solução
A tabela é: : , ; : , ; : , . O início é e só é final. termina em , em e em . O invariante diz que significa nenhum zero final, exatamente um, pelo menos dois. Cada transição preserva esta descrição, logo a linguagem é a pretendida.
Confere a tua resposta:
- Define três estados para zero, um ou pelo menos dois zeros consecutivos no fim.
- Dá as duas transições de cada estado e marca o início e o final.
- Justifica o significado de cada estado por indução nos prefixos.
Erros frequentes
Não cries um estado por comprimento total. Não rejeites 000: continua a terminar em 00.
Juntar duas condições
Constrói um DFA sobre que aceite as palavras terminadas em com um número ímpar de . Define os estados, as transições e os finais. Segue e .
Pista
Usa o produto da máquina de sufixo com uma máquina de duas paridades.
Mais uma pista
Os estados são , com e .
Solução
Usa os seis estados , com a contar os zeros finais até ao máximo dois e a guardar a paridade de uns. O início é . Por , vai para . Por , vai para , onde troca par com ímpar. Só é final.
segue e aceita. termina em e rejeita. Cada componente conserva o seu significado depois de qualquer prefixo, logo o final exige exatamente as duas condições. é rejeitada.
Confere a tua resposta:
- Guarda o sufixo de zeros e a paridade de uns em cada estado.
- Uma letra 0 atualiza o sufixo sem trocar a paridade; 1 reinicia o sufixo e troca a paridade.
- Marca só o par com sufixo de pelo menos dois zeros e paridade ímpar.
Erros frequentes
Não uses união dos finais: o enunciado exige ambas as condições. Não troques a paridade ao ler 0.