Converter expressões e autómatos
Construção de Thompson, eliminação de estados e equivalência entre descrições regulares.
A expressão descreve palavras terminadas em . Uma máquina equivalente tem de aceitar e , mas rejeitar e . A construção de Thompson permite obter essa máquina seguindo a estrutura da expressão.
No sentido inverso, a eliminação de estados resume percursos por expressões, usando a precedência das expressões e o fecho-ε.
Expressão para ε-NFA: Thompson
A construção de Thompson associa a cada expressão um fragmento com uma entrada e uma saída. A entrada não tem arestas a chegar de dentro do fragmento e a saída não tem arestas a sair dentro dele. A saída será o único estado final quando o fragmento estiver completo.
Os casos básicos são:
- : dois estados ligados por uma aresta ;
- : dois estados ligados por uma aresta vazia;
- : dois estados sem ligação, porque não há palavra que deva passar entre eles.
As composições ligam esses fragmentos. Em cada caso, um percurso completo lê primeiro uma palavra de e depois uma de , ou escolhe um dos ramos, ou repete o fragmento:
- Para , liga a saída de à entrada de por .
- Para , acrescenta entrada e saída novas. Da entrada saem duas arestas vazias para as entradas dos fragmentos. As duas saídas chegam à saída nova por arestas vazias.
- Para , acrescenta entrada e saída novas e quatro arestas vazias: da entrada nova para o fragmento e para a saída nova; da saída do fragmento para a sua entrada e para a saída nova. O caminho direto aceita zero repetições.
Fragmentos separados de Thompson
Para : entrada , saída , fragmento interior , com , , e . O caminho direto aceita ; o ciclo aceita , e continua.
Para : fragmento de com , fragmento de com , mais . Um percurso completo lê primeiro e depois . Sem essa aresta intermédia, nenhum percurso vai da entrada do primeiro fragmento à saída do segundo. A concatenação não aceita palavra alguma.
Para : entrada nova com e ; saídas com e . Cada percurso escolhe um ramo e só um.
Exemplo com união, estrela e concatenação
Para , constrói primeiro , depois aplica estrela, depois concatena o último . A construção, sem simplificações, fica:
Para aceitar , atravessa o ramo uma vez, sai da estrela e lê o final. Para aceitar , salta a estrela. A palavra vazia é rejeitada porque a última aresta é obrigatória.
O desenho não precisa de ser o menor autómato. A vantagem é o procedimento sistemático e a prova por indução estrutural: os casos básicos reconhecem as linguagens certas e cada composição preserva a operação pretendida. A determinização pode vir depois.
Derivadas de expressões
Depois de ler o primeiro de uma palavra que deve terminar em , o que ainda falta ler? A expressão pode guardar esse conjunto de continuações. A derivada descreve
Não remove um em qualquer posição: trata a letra que acabou de ser lida no início. Dizemos que é anulável quando ; uma expressão anulável pode aceitar sem ler outra letra.
As bases são . Para uma expressão que é só um símbolo, a derivada dá se esse símbolo for , e caso contrário. As operações seguem a origem da primeira letra:
Na concatenação, há duas possibilidades. A letra pode vir de uma palavra não vazia de . Se aceitar , pode também vir diretamente de :
Esta segunda parcela é necessária. Em e , ler pode saltar a estrela e consumir a letra de ; a derivada tem de aceitar .
Um DFA cujos estados são expressões
Usa . Como a estrela é anulável, e . Em , a letra pode concluir o sufixo: .
Os três estados alcançáveis são as expressões seguintes, simplificadas pelas leis de união. Um estado é final exatamente quando a sua expressão é anulável:
| Estado e expressão | Final? | ||
|---|---|---|---|
| , inicial | Não | ||
| Não | |||
| Sim |
Para , a leitura passa por , , e aceita. Para , a última letra deixa , que não é anulável, e rejeita. Não se apaga a parcela : ela permite que o prefixo continue enquanto tentamos completar o sufixo.
Depois de qualquer prefixo , o estado descreve exatamente . Cada derivada preserva esse significado ao ler a próxima letra. No fim, aceitar na expressão restante equivale a a palavra lida pertencer à linguagem original. Esta é a construção por derivadas de Brzozowski, uma alternativa a Thompson seguido de determinização. Expressões com textos diferentes podem representar o mesmo estado por linguagem; não as distingas apenas pela escrita.
Autómato para expressão: eliminação de estados
Permite agora que uma aresta tenha uma expressão regular, não apenas uma letra; chama autómato generalizado a esta representação. Uma aresta ausente tem rótulo , e várias arestas paralelas juntam-se por união.
Prepara a máquina acrescentando uma entrada nova e uma saída nova . Liga ao antigo início por e cada antigo final a por . Só fica final, o que resolve também o caso em que o estado inicial era final.
Quando eliminas o estado , atualiza cada ligação entre estados que ficam:
A primeira parte conserva os caminhos que não passam por . A segunda entra em , repete o ciclo zero ou mais vezes e sai para . Usa os rótulos anteriores à eliminação em toda essa ronda, antes de remover .
Exemplo com um ciclo
Considera um estado inicial com ciclo , uma aresta e um estado final com ciclo :
Depois de acrescentar , elimina . A nova aresta de para tem rótulo
Elimina e obténs
Há exatamente um , antes dele só e depois só . A ordem de eliminação pode produzir expressões diferentes, mas equivalentes. Eliminar primeiro estados com poucas ligações evita expressões grandes; não altera a linguagem.
Eliminação completa com retorno e dois finais
Considera estados inicial e finais, com , , , e . Acrescenta entrada e saída , com e . Há um ciclo com retorno e um final que absorve tudo.
Elimina por rondas, usando sempre os rótulos anteriores à ronda. Começa por , que só tem saídas para além dos seus ciclos:
| Ronda | Estado retirado | Rótulos novos |
|---|---|---|
| 1 | ganha : sair de para e ficar lá um tempo arbitrário antes de terminar. As restantes arestas mantêm-se. | |
| 2 | e : chegar pela primeira vez a , ou regressar a através de . | |
| 3 | . |
Depois de retirar , temos . O conserva a possibilidade de terminar em , sem passar por .
A primeira parte da expressão final chega pela primeira vez a . A estrela permite regressar a através de ; o último fator permite terminar ali ou entrar no final absorvente . , e são aceites. , e são rejeitadas, pois nenhuma termina num final. Estes testes conferem a conta; a fórmula de eliminação justifica a equivalência para todas as palavras.
Caminhos com estados intermédios limitados
Ver a recorrência alternativa com estados limitados
Uma alternativa calcula , a expressão dos caminhos de para cujos estados intermédios estão entre os primeiros estados. A recorrência é:
Na base , junta as arestas diretas de para e inclui quando , porque existe um caminho com zero passos de um estado para si mesmo. No fim, junta para todos os finais . O mesmo raciocínio de entrar, repetir e sair justifica a recorrência.
Equivalência de representações
Uma linguagem é regular se pode ser descrita por uma expressão regular, um DFA, um NFA ou um ε-NFA. As construções anteriores, com a construção de subconjuntos, provam a equivalência.
Para complementar uma expressão , não há uma regra que troque cada operador por outro e resolva todos os casos. Converte para um autómato, determiniza, completa, troca os finais e converte novamente para expressão. Para provar que duas expressões são equivalentes, podes comparar os DFA em vez de tentar simplificações algébricas à mão.
Exercícios
Os problemas são originais, salvo as adaptações identificadas no enunciado.
Calcular o novo rótulo
Ao eliminar k, os rótulos existentes são , , e . Qual fica o rótulo de i para j? Descreve a linguagem desse rótulo.
Pista
Há caminhos que não passam por k e caminhos que passam.
Mais uma pista
Os que passam por k leem a, repetem o ciclo b e leem c.
Solução
O novo rótulo é . Aceita a palavra d ou uma palavra que começa em a, segue com zero ou mais b e termina em c. Inclui ac, abc e abbc.
Confere a tua resposta:
- Conserva a aresta direta d.
- Inclui uma entrada por a, zero ou mais b e saída por c.
- Junta os dois caminhos por união, não concatenação.
Erros frequentes
Não percas a ligação direta d. Não exijas pelo menos um b: a estrela permite atravessar k sem dar uma volta ao ciclo.
Escolher o caminho de conversão
Queres uma expressão regular para o complemento de sobre . Descreve um procedimento que termina e explica o que acontece a e a .
Pista
Usa a equivalência entre expressões e máquinas, em vez de trocar operadores à mão.
Mais uma pista
No DFA, cada palavra tem um só estado final da computação.
Solução
Constrói o ε-NFA por Thompson, determiniza por subconjuntos, inclui o poço para ter transições totais e troca finais com não finais. Converte o DFA resultante em expressão por eliminação de estados. Como , é rejeitada pelo complemento. Como aba não consiste em blocos completos ab, é aceite pelo complemento.
Confere a tua resposta:
- Converte a expressão num ε-NFA e calcula o DFA completo.
- Troca os finais apenas no DFA.
- Usa eliminação de estados se for exigida uma expressão para o complemento.
Erros frequentes
Não tomes como expressão construída pelos operadores básicos: a diferença tem de ser realizada por uma construção.
Construir os fragmentos
Aplica Thompson a . Dá a lista de arestas, o início e o único final, sem simplificar os fragmentos. Justifica , , e .
Pista
Faz primeiro os dois ramos a estrela e b; só depois liga a união.
Mais uma pista
Usa e . A estrela precisa de dois estados novos.
Solução
Começa pelas arestas e . Para a estrela, acrescenta e as arestas vazias , , , . Para a união, acrescenta início , final e as arestas vazias , , , . São oito estados e só é final.
passa por sem ler letras. percorre a aresta de duas vezes, repetindo pelo ciclo vazio. escolhe o outro ramo. não é aceite: nenhum percurso pode ler parte no ramo e depois mudar para o ramo .
Confere a tua resposta:
- Constrói o fragmento de a e as quatro arestas vazias da estrela.
- Acrescenta entradas e saídas novas para a união.
- Mostra que cada percurso da união escolhe um ramo, sem os concatenar.
Erros frequentes
Não ligues a saída da estrela à entrada de b: isso construiria concatenação. Não marques as saídas internas como finais da união.
Eliminação com retorno
Sobre , um DFA tem início , finais e transições , , , , . Converte-o numa expressão regular, eliminando pela ordem . Mostra os rótulos novos de cada ronda e testa .
Pista
Depois de retirar p, pergunta que palavra faz uma volta de q até q.
Solução
Acrescenta início e saída , com . Só fica final. Ao retirar , . Ao retirar , e ; mantém-se. Retirar dá
chega a e termina; chega a ; regressa de a e volta a . Todas são aceites pela expressão e pelo DFA. termina em e é rejeitada. Os rótulos de uma ronda usam todos os valores anteriores à eliminação do estado dessa ronda.
Confere a tua resposta:
- Preparei início e final novos.
- Mantive ε na saída de q e calculei o ciclo aa*b.
- Obtive a expressão e conferi as quatro palavras.
Uma continuação que pode terminar agora
Usa derivadas para construir um DFA completo equivalente a . Dá as expressões dos estados alcançáveis, a tabela e os finais. Segue , e . Explica por que não podes omitir a derivada do fator ao calcular . Este problema próprio usa o método de conversão pedido na questão 3 do teste de 24/3/2023, com outra expressão.
Pista
A estrela pode gerar ε. Depois de ler a, também existe uma tentativa de completar o sufixo ba.
Solução
A primeira derivada é , porque pode ler o ou desaparecer antes do fator . Por , fica . Repetindo a derivação, surgem quatro expressões:
| Estado | Final? | ||
|---|---|---|---|
| , inicial | Não | ||
| Não | |||
| Não | |||
| Sim |
Só aceita ε. segue ; segue . Ambas aceitam. segue e rejeita, embora tenha passado por um final.
Depois do prefixo lido, cada expressão descreve todas as continuações que completam uma palavra terminada em aba. A parcela R conserva as tentativas que ainda começam mais à frente. Se ignorássemos a anulabilidade da estrela, a derivação deixaria sempre R, nunca apareceria ε e até aba seria rejeitada.
Confere a tua resposta:
- Mantive a parcela R nas derivadas e a continuação ba depois de a.
- Obtive quatro estados alcançáveis e marquei só R+ba+ε como final.
- Aceitei aba e ababa e rejeitei abab, conferindo o invariante de continuações.