Un algorithme pour réduire un DFA en introduisant du non-déterminisme?

8

C'est quelque peu lié à une autre question que j'ai posée , mais je pense qu'elle est suffisamment différente pour justifier sa propre question.

Je fais des recherches où j'essaie de trouver la structure des compléments d'une certaine classe de langages finis. Il est facile pour moi d'obtenir les DFA minimaux acceptant ces langues, mais j'aimerais examiner le type de structure des NFA acceptant ces langages, en particulier comment le non-déterminisme aide à la taille de l'état des automates (les DFA sont exponentiellement grands).

Le problème est que la principale technique de réduction NFA utilise des équivalences, ce qui ne produira aucune réduction si je commence avec un DFA minimal (car il utilise essentiellement la même technique). Si je commence avec un DFA non minimal, il crache simplement le DFA minimal.

Ce que je me demande, est-ce qu'il existe des algorithmes qui peuvent commencer avec un DFA et le réduire en un NFA plus petit en introduisant du non-déterminisme? Existe-t-il des "techniques standard" pour ce faire?

J'ai trouvé des réductions de précommande , qui semblent prometteuses mais difficiles à mettre en œuvre. Je suis ouvert à de nombreuses suggestions.

jmite
la source
son possible mais Pspace complet pour trouver un NFA minimal pour un DFA
vzn
Oui mais il existe des techniques de réduction qui sont utiles mais qui ne trouvent pas le minimum dans tous les cas. Je suis plus intéressé par la façon dont le non-déterminisme réduit la taille de l'État que par la recherche du cas minimal.
jmite

Réponses:

4

Pour une heuristique efficace, je suggère de consulter la littérature CAO sur le problème de codage d'état (attribution d'identificateurs binaires aux états d'un DFA pour minimiser la quantité de logique pour la fonction de transition d'état.) Devadas et Newton, "Décomposition et factorisation du fini séquentiel machines d'état ", IEEE TCAD , 8 (11): 1206-1217, 1989 souligne qu'il existe une relation étroite entre le codage d'état et la décomposition de la machine d'état.

Si pour un DFA avec N indique que vous attribuez un unique M identifiant d'état de bit pour chaque état (lg2N<MN), vous avez alors essentiellement décomposé le DFA en un réseau de Mmachines à deux états en interaction. De manière équivalente: vous avez défini un ensembleS avec M et attribué un sous-ensemble unique de Sà chaque état dans votre DFA d'origine. C'est aussi ce que fait l' algorithme de construction du jeu de puissance Rabin-Scott . Donc, en faisant un codage d'état sur le DFA, nous essayons de désosser l'ensemble à partir duquel l'algorithme de construction du jeu de puissance est parti.

Dans le problème de codage d'état traditionnel, tous les codages sont légaux et il existe une fonction objective (liée à la quantité de logique dans la fonction de transition d'état) que vous essayez de minimiser. Pour générer un NFA, vous devez résoudre une version contrainte du problème entrant où:

un encodage de Mles identificateurs de bits vers les états DFA représentent un NFA ssi pour chaque symbole de l'alphabet, la fonction de transition pour chaque bit est une simple disjonction de bits. (Aucune conjonction ou négation n'est autorisée.)

Vous pouvez donc énumérer tous les M encodages de bits pour tous lg2N<MNet vérifiez si chacun satisfait à la contrainte. (Notez que pourM=N l'encodage trivial "one-hot" satisfait toujours les contraintes et vous donne le DFA.) L'énumération est cependant ridiculement grande (le manuel de Di Micheli le donne comme quelque chose comme 2M!(2MN)!M!.) La raison pour laquelle je suggère la littérature CAD est qu'il existe des techniques pour effectuer cette recherche implicitement plutôt que d'énumérer (par exemple, en utilisant des BDD, voir Lin, Touati et Newton, "Don't care minimisation of multi-level sequential. réseaux logiques, " Int'l Conf Comp-Aided Dsgn ICCAD-90: 414-417, 1990 .

Exemple

Prenez le DFA suivant, (avec un codage d'état que j'ai dérivé en trichant (j'ai généré le DFA à partir d'un NFA en utilisant Rabin-Scott, et le codage représente les sous-ensembles choisis par Rabin-Scott.))

DFA de Rabin-Scott

Si nous appelons les bits dans l'affectation d'état ABCD, alors lorsque le symbole d'entrée est 1, la fonction de transition est A = A, B = A, C = B, D = C. Lorsque le symbole d'entrée est 0, la fonction de transition est A = A, C = B, D = C. Il s'agit d'une fonction de transition purement disjonctive sans conjonction ni négation, donc ce codage d'état nous donne un NFA. Les états dans le NFA correspondent un à un avec les bits du codage, et la fonction de transition est la suivante:

NFA pour Rabin-Scott

Formulation comme problème de satisfiabilité booléenne

La description informelle ci-dessus conduit directement à un codage comme un problème de satisfiabilité booléenne. Il existe un ensemble de variables qui décrit les transitions dans le NFA, et un ensemble de variables pour le codage d'état DFA qui serait dérivé de Rabin-Scott pour le NFA choisi. Les transitions du DFA spécifique que vous essayez de décomposer sont utilisées pour placer des contraintes sur les transitions NFA.

Supposons que l'on nous donne un DFA avec N états pour une langue avec S symboles, et nous aimerions en tirer un M état NFA, avec lg2N<MN. Nous utiliserons les variablesysft pour représenter les transitions possibles dans la NFA. ysftsera vrai si il y a une transition dans le NFA de l' état NFAf à l' état NFAtsur le symbole s. Dans l'exemple ci-dessus NFA, l'alphabet est de taille 2 et il y a 4 états NFA, donc il y aSM2=32 y variables et y0AA,y1AA, et y1AB sont tous vrais tout en y1DA c'est faux.

Nous utiliserons les variables xdn pour indiquer si l'algorithme Rabin-Scott doit inclure l'état NFA n dans l'ensemble des états étiquetant l'état DFA d. Dans l'exemple ci-dessus, nous avonsN=8 États DFA et M=4 NFA déclare donc il y a 32 xvariables. Dans l'exemple ci-dessus, supposons que l'état le plus bas (celui intitulé "1011") soit l'étatk, puis xkA, xkC, et xkD sont vrais tout xkB c'est faux.

Maintenant les contraintes. Tout d'abord, Rabin-Scott doit trouver un codage différent pour chaque état DFA, donc pour les états DFAi<j et tous les états NFA {A,B,,D}:

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

Ensuite, il doit être le cas que si Rabin-Scott a trouvé une transition de l'état DFA i à l'état DFA j sur le symbole s puis pour chaque état NFA k inclus dans le codage de j il doit y avoir un état NFA l de l'encodage de l'état DFA j de telle sorte que la NFA d'origine avait une transition de l à k. Dans l'exemple ci-dessus, sur le symbole "1" il y a une transition DFA de l'état DFA "1000" à l'état DFA "1100" donc il doit y avoir une transition NFA de l'état NFA A aux états NFA A et B et aucune transition NFA de NFA l'état A à l'état NFA C ou D. Donc, pour chacun deso(SN2) bords dans le DFA, nous avons les contraintes:

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

Enfin, nous devons gérer le début et accepter les États. L'état de démarrage DFA est codé avec l'union des états de démarrage NFA, il est donc préférable de ne pas coder l'état de démarrage DFA avec l'ensemble vide.x0A+x0B++x0D. Et enfin, nous avons besoin d'un ensemble de variablesfnpour indiquer si chaque état NFA est un état d'acceptation NFA. Il doit être le cas que le codage pour chaque état DFA accepte contient au moins un état NFA accepte et que le codage pour chaque état DFA non accepté ne contient aucun état NFA accepte donc:xiAfA+xiBfB++xiDfD pour DFA accepte les états i et ¬(xjAfA+xjBfB++xjDfD) pour les États non acceptés par DFA j.

Logique errante
la source
Cette idée de rétro-ingénierie de la construction du sous-ensemble est exactement ce que je recherche. Cela semble compliqué, je vais donc prendre le temps de l'analyser. Merci!
jmite
1
J'ai essayé de comprendre comment le reformuler en tant que problème SAT, mais je n'y ai pas encore consacré suffisamment de temps.
Wandering Logic
3

La réduction des NFA est difficile, si difficile en effet que même l'approximation est difficile; voir Minimizing NFA's and Regular Expressions par Gramlich et Schnitger (2005). Cet article semble également contenir des références utiles, par exemple les algorithmes de réduction de la NFA au moyen des inégalités régulières de Champarnaud et Coulon (2002) qui contiennent des techniques de minimisation.

Raphael
la source
Ouais, ça va si c'est juste une réduction et non une minimisation complète. Je vais jeter un coup d'œil, ces références ont l'air vraiment bien cependant.
jmite
2

Il existe quelques notions de canonique FSA qui ne sont pas nécessairement déterministes et peuvent donc être plus petites que le DFA minimal. Un exemple est les FSA "résiduelles", pour lesquelles on peut calculer des FSA résiduelles canoniques assez directement, voir F. Denis, A. Lemay et A. Terlutte. "Automates à états finis résiduels", Fundamenta Informaticae 51 (4): 339-368, 2002 . Plusieurs alternatives existent.

phs
la source
Pourriez-vous expliquer l'informatique assez directement? Cela signifie que le calcul de la FSA résiduelle canonique est un problème complet pour PSPACE. Cela pourrait encore fonctionner pour moi (mes machines sont assez petites) mais je m'en méfie.
jmite
En particulier, je suis confus quant à la façon dont je déterminerais si un état dans une machine est "recouvrable", comme cela est défini à la page 17 du document, juste avant la section 5 Lemme 4.
jmite