Existe-t-il un test efficace pour savoir si un NFA accepte un sous-ensemble d'un autre NFA?

12

Donc, je sais que tester si un langage régulier R est un sous-ensemble du langage régulier S est décidable, car nous pouvons les convertir tous les deux en DFA, calculer RS¯ , puis tester si ce langage est vide.

Cependant, comme cela nécessite une conversion en DFA, il est possible que les DFA, et donc l'algorithme de test, soient exponentiels en termes de nombre d'états dans les NFA en entrée.

Existe-t-il un moyen connu de le faire en temps polynomial? Ce problème a-t-il été prouvé en général que le Co-NP était complet?

RSRS

EDIT: ceci est incorrect, car il n'y a aucune garantie qu'un tel mot serait polynomial dans le nombre d'états.

jmite
la source
1
est-ce une question théorique ou à propos dans la pratique? parfois pour une "distribution" particulière d'entrées rencontrées en pratique, un problème complet de Pspace peut être "exécutable" en temps P.
vzn
Idéalement, c'est théorique, mais les preuves sur lesquelles je travaille sont fortement basées sur des tests informatiques, ce qui signifie qu'un algorithme rapide serait certainement utile.
jmite
alors oui, il y a un algorithme assez simple qui fonctionne en suivant simplement les transitions en parallèle pour chacune des deux machines et en gardant une trace des jeux d'états résultants, un peu comme l'algorithme de détermination std. Je ne sais pas si c'est quelque part dans la littérature, c'est si simple que ça suppose. utilisez-vous déjà un algorithme? il serait utile de le citer. de plus amples détails sur le type d'entrées seraient utiles. il semble également que vous souhaitiez déterminer si l'intersection de deux NFA est vide? voulez-vous la langue de l'intersection ou juste O / N si elle n'est pas vide?
vzn
Je cherche juste si elle est vide, l'idée étant que je suis à la recherche si pour tester si . L'algorithme de transition parallèle fonctionne, je pense que la partie difficile prend le compliment d'un NFA, vous devez d'abord convertir en DFA. L'algorithme que j'utilise actuellement n'est que de la force brute, car je ne traite que des langages finis. RS={}RS
jmite
pense qu'il peut y avoir un moyen de traverser les deux NFA sans se convertir non plus en un DFA 1er, même en trouvant le complément d'un également. mais je ne l'ai pas vu dans une réf.
vzn

Réponses:

15

Le problème de la décision de confinement de la langue dans les NFA est complet sur . Pour le prouver, il est facile de réduire le problème d'universalité pour les NFA (tester si ) Donc, d'une certaine manière, vous devez déterminer, mais vous pouvez le faire à la volée.PSPACEL(A)=Σ

Votre observation sur le co-NP est fausse (mais agréable). Un tel témoin peut en effet être vérifié en temps polynomial dans le témoin , mais le témoin le plus court lui-même peut être exponentiel dans la longueur de l'entrée. Depuis , puis décider non-confinement est également -complete.PSPACE=coPSPACEPSPACE

De dire les choses avec plus de soin, de décider si est la taille de (puisque seuls doit être complétée) et la taille de .L(A)L(B)PSPACEBBNLOGSPACEA

Shaull
la source
Vous avez absolument raison. J'ai eu affaire à une classe spécifique de NFA où ce que j'ai dit tient, mais ce n'est certainement pas le cas avec les NFA généraux infinis. Merci!
jmite
Vous n'auriez pas de référence à un document ou à un manuel qui prouve qu'il est complet sur PSPACE, n'est-ce pas?
jmite
1
Ce n'est pas une preuve très détaillée, mais je pense que cela suffira: wisdom.weizmann.ac.il/~vardi/av/notes/lec4.ps
Shaull
4

Vous devriez jeter un œil à l'article de Jean-François Raskin, Antichain Algorithms for Finite Automata .

Dans nos expériences, le test d'inclusion basé sur la chaîne a réalisé un ou deux ordres de grandeur mieux que les approches "traditionnelles".

Si je me souviens bien, cet algorithme est implémenté dans la bibliothèque libAMoRE ++ .

Dan
la source
3

La bibliothèque FSM AT&T est l'une des bibliothèques FSM gratuites les plus avancées, les plus avancées et les plus optimisées disponibles en ligne . Il implémente "fsmdifference" exactement comme vous le décrivez, nécessitant un FSM déterminé sans epsilon pour faire la différence. Une idée est de minimiser un ou les deux FSM avant de faire la différence, ce qui peut aider dans certains cas. (c'est-à-dire que la détermination n'est pas la même chose que la minimisation.) Ce paquet a également une minimisation "approximative" ou "gourmande" qui est conçue pour être éventuellement plus rapide qu'une minimisation complète.

Cependant, en étudiant des problèmes similaires, je pense qu'il y a une généralisation ou une construction de FSM qui n'apparaissent pas dans la littérature qui peut aider à résoudre ce problème en évitant l'étape de détermination, c'est-à-dire en inversant fondamentalement un NFA sans créer un FSM déterminé supplémentaire. L'idée est de traverser les bords NFA "en parallèle" et de suivre l'ensemble des nœuds qui font partie du "superstate" (ensemble d'états) actuel, tout comme avec l'algorithme de détermination standard. Ensuite, le complément NFA accepte si et seulement si l'ensemble des nœuds superstates actuels sont "tous non acceptants" (contrairement à la construction déterminante qui accepte ssi "toute acceptation").

Cependant, je n'ai jamais vu cela écrit auparavant et je ne le vois pas via une recherche en ligne rapide. De nombreuses références suggèrent ou impliquent que la seule façon de travailler avec le complément d'un NFA est de le déterminer.

Voici deux références "à proximité" qui pourraient être utiles pour certaines idées. Je serais intéressé d'entendre parler de ceux qui sont "plus proches". Vous mentionnez que vous travaillez sur la vérification de programme, qui peut être un domaine qui a des recherches plus directes sur le problème.

[1] Construction d'une intersection d'automates finis non déterministes à l'aide de la notation Z Nazir Ahmad Zafar, Nabeel Sabir et Amir Ali

[2] Constructions de complémentation pour les automates non déterministes sur des mots infinis Orna Kupferman et Moshe Vardi

vzn
la source