Algoritmo para reduzir um DFA introduzindo o não-determinismo?

8

Isso está um pouco relacionado a outra pergunta que fiz , mas acho que é diferente o suficiente para justificar sua própria pergunta.

Estou pesquisando onde estou tentando encontrar a estrutura de complementos de uma determinada classe de linguagens finitas. É fácil para mim conseguir o mínimo de DFAs aceitando essas linguagens, mas eu gostaria de examinar que tipo de estrutura os NFAs que aceitam esses idiomas têm, particularmente como o não-determinismo ajuda no tamanho do estado dos autômatos (os DFAs são exponencialmente grandes).

O problema é que a principal técnica de redução de NFA usa equivalências, que não produzirão nenhuma redução se eu começar com um DFA mínimo (já que é basicamente usando a mesma técnica). Se eu começar com um DFA não mínimo, ele apenas cuspirá o DFA mínimo.

O que eu quero saber é: existem algoritmos que podem começar com um DFA e reduzi-lo a um NFA menor, introduzindo o não determinismo? Existem "técnicas padrão" para fazer isso?

Encontrei reduções de pré-encomenda , que parecem promissoras, mas difíceis de implementar. Estou aberto a muitas sugestões.

jmite
fonte
sua possível mas PSPACE completa para encontrar uma NFA mínima para um DFA
vzn
Sim, mas existem técnicas de redução que são úteis, mas não encontram o mínimo em todos os casos. Estou mais interessado em como o não determinismo reduz o tamanho do estado do que realmente encontrar o caso mínimo.
jmite

Respostas:

4

Para heurísticas eficientes, sugiro examinar a literatura CAD sobre o problema de codificação de estado (atribuir identificadores binários aos estados de um DFA para minimizar a quantidade de lógica para a função de transição de estado). Devadas e Newton, "Decomposição e fatoração de finito seqüencial máquinas de estado ", IEEE TCAD , 8 (11): 1206-1217, 1989 aponta que existe uma estreita relação entre codificação de estado e decomposição de máquina de estado.

Se para um DFA com N afirma que você atribui um único M identificador de estado de bit para cada estado (lg2N<MN), decompôs o DFA essencialmente em uma rede de Mmáquinas de dois estados em interação. Equivalentemente: você definiu um conjuntoS com M elementos e atribuiu um subconjunto exclusivo de Spara cada estado no seu DFA original. Isso também é o que o algoritmo de construção de conjuntos de potências Rabin-Scott faz. Portanto, ao fazer uma codificação de estado no DFA, estamos tentando fazer engenharia reversa do conjunto do qual o algoritmo de construção do conjunto de energia começou.

No problema tradicional de codificação de estado, todas as codificações são legais e há alguma função objetiva (relacionada à quantidade de lógica na função de transição de estado) que você está tentando minimizar. Para gerar um NFA, você precisa resolver uma versão restrita do problema de encadeamento em que:

uma codificação de Midentificadores de bits para os estados do DFA representam um if de NFA para cada símbolo no alfabeto, a função de transição para cada bit é uma simples disjunção de bits. (Nenhuma conjunção ou negação é permitida.)

Então você pode enumerar todas as M codificações de bits para todos lg2N<MNe verifique se cada um satisfaz a restrição. (Observe que paraM=N a trivial codificação "quente" sempre satisfaz as restrições e fornece o DFA.) A enumeração é ridiculamente grande, porém (o livro de Di Micheli a apresenta como algo como 2M!(2MN)!M!.) A razão pela qual estou sugerindo a literatura CAD é que existem técnicas para fazer essa pesquisa implicitamente, em vez de enumerar (por exemplo, usando BDDs, consulte Lin, Touati e Newton: "Não se importe com a minimização de sequências multiníveis redes lógicas ", Dsgn ICCAD-90: Comp Confided Int'l ICCAD-90: 414-417, 1990 .

Exemplo

Pegue o DFA a seguir (com um código de estado derivado por trapaça (gere o DFA a partir de um NFA usando Rabin-Scott, e a codificação representa os subconjuntos escolhidos por Rabin-Scott))

DFA de Rabin-Scott

Se chamarmos os bits na atribuição de estado ABCD, quando o símbolo de entrada for 1, a função de transição será A = A, B = A, C = B, D = C. Quando o símbolo de entrada é 0, a função de transição é A = A, C = B, D = C. Esta é uma função de transição puramente disjuntiva, sem conjunção ou negação, portanto, essa codificação de estado nos fornece um NFA. Os estados no NFA correspondem um a um aos bits na codificação e a função de transição é a seguinte:

NFA para Rabin-Scott

Formulação como problema de satisfação booleana

A descrição informal acima leva diretamente a uma codificação como um problema de satisfação booleana. Há um conjunto de variáveis ​​que descreve as transições na NFA e um conjunto de variáveis ​​para a codificação do estado DFA que seria derivada de Rabin-Scott para a NFA escolhida. As transições do DFA específico que você está tentando decompor são usadas para colocar restrições nas transições do NFA.

Suponha que recebamos um DFA com N estados para um idioma com S símbolos e gostaríamos de derivar uma M AFN estadual, com lg2N<MN. Nós vamos usar as variáveisysft para representar as possíveis transições no NFA. ysftserá verdadeiro se houver uma transição na NFA do estado da NFAf para o estado NFAtno símbolo s. No exemplo acima NFA, o alfabeto é do tamanho 2 e há 4 estados NFA, portanto, existemSM2=32 y variáveis ​​e y0AA,y1AAe y1AB são todos verdadeiros enquanto y1DA é falso.

Nós vamos usar as variáveis xdn para indicar se o algoritmo de Rabin-Scott deve ou não incluir o estado da NFA n no conjunto de estados que rotula o estado do DFA d. No exemplo acima, temosN=8 Estados do DFA e M=4 Estados NFA então existem 32 xvariáveis. No exemplo acima, suponha que o estado mais inferior (o rotulado "1011") seja o estadok, então xkA, xkCe xkD são verdadeiras enquanto xkB é falso.

Agora as restrições. Antes de tudo, Rabin-Scott deve encontrar uma codificação diferente para cada estado do DFA, portanto, para os estados do DFAi<j e todos os estados da NFA {A,B,,D}:

(xiAxjA)+(xiBxjB)++(xiDxjD).

Em seguida, deve ser o caso em que Rabin-Scott encontrou uma transição do estado do DFA i para o estado DFA j no símbolo s então para cada estado da NFA k incluído na codificação de j deve haver um estado NFA l da codificação do estado DFA j de tal forma que a NFA original teve uma transição de l para k. No exemplo acima, no símbolo "1", há uma transição do DFA do estado do DFA "1000" para o estado do DFA "1100", portanto, deve haver uma transição do NFA do estado do NFA A para os estados do NFA A e B e nenhuma transição do NFA do NFA estado A para NFA, estado C ou D. Portanto, para cada um doso(SN2) arestas no DFA, temos as restrições:

xjA=ysAAxiA+ysBAxiB++ysDAxiDxjB=ysABxiA+ysBBxiB++ysDBxiDxjD=ysADxiA+ysBDxiB++ysDDxiD.

Finalmente, precisamos lidar com o início e aceitar os estados. O estado inicial do DFA é codificado com a união dos estados iniciais da NFA; portanto, é melhor que o estado inicial do DFA não seja codificado com o conjunto vazio;x0A+x0B++x0D. E, finalmente, precisamos de um conjunto de variáveisfnpara indicar se cada estado da NFA é um estado de aceitação da NFA. Deve ser o caso de que a codificação para cada estado de aceitação do DFA contenha pelo menos um estado de aceitação do NFA e que a codificação para cada estado de não aceitação do DFA não contenha estados de aceitação do NFA, portanto:xiAfA+xiBfB++xiDfD para DFA aceitar estados i e ¬(xjAfA+xjBfB++xjDfD) para estados não aceitos do DFA j.

Lógica Errante
fonte
Essa idéia de engenharia reversa da construção do subconjunto é exatamente o que estou procurando. Parece complicado, então levarei algum tempo para analisá-lo. Obrigado!
jmite
1
Eu tenho tentado descobrir como reformulá-lo como um problema de SAT, mas ainda não coloquei tempo suficiente nele.
Wandering Logic
3

Minimizar NFAs é difícil, tão difícil que até a aproximação é difícil; veja Minimizando NFA e expressões regulares de Gramlich e Schnitger (2005). Este artigo também parece ter algumas referências úteis, por exemplo, algoritmos de redução de NFA por meio de desigualdades regulares de Champarnaud e Coulon (2002), que contêm técnicas de minimização.

Rafael
fonte
Sim, eu estou bem se é apenas uma redução e não uma minimização completa. Vou dar uma olhada, essas referências parecem muito boas.
jmite
2

Existem algumas noções de FSAs canônicos que não são necessariamente determinísticas e, portanto, podem ser menores que o DFA mínimo. Um exemplo são os FSAs "residuais", para os quais é possível calcular FSAs residuais canônicos diretamente, veja F. Denis, A. Lemay e A. Terlutte. "Autômatos residuais de estado finito", Fundamenta Informaticae 51 (4): 339-368, 2002 . Existem várias alternativas.

phs
fonte
Você poderia explicar a computação diretamente? Dessa forma, calcular a FSA residual canônica é um problema completo do PSPACE. Isso ainda pode funcionar para mim (minhas máquinas são razoavelmente pequenas), mas tenho cuidado com isso.
jmite
Em particular, eu estou confuso a respeito de como eu determinar se um estado em uma máquina é "coverable", como é definido na página 17 do documento, logo antes Seção 5 Lema 4.
jmite