Esiste un test efficiente per stabilire se un NFA accetta un sottoinsieme di un altro NFA?


12

Quindi, so che testare se una lingua normale è un sottoinsieme della lingua normale S è decidibile, dal momento che possiamo convertirli entrambi in DFA, calcolare R ˉ S e quindi verificare se questa lingua è vuota.RSRS¯

Tuttavia, poiché ciò richiede la conversione in DFA, è possibile che i DFA, e quindi l'algoritmo di testing, siano esponenziali in termini di numero di stati negli NFA di input.

C'è un modo noto per farlo in tempo polinomiale? Questo problema in generale è stato dimostrato completo Co-NP?

RSRS

EDIT: questo non è corretto, in quanto non vi è alcuna garanzia che tale parola sia polinomiale nel numero di stati.


1
è una domanda teorica o in pratica? a volte per una particolare "distribuzione" di input riscontrati nella pratica, un problema completo di Pspace può essere "eseguibile" in P time.
vzn

Idealmente è teorico, ma le prove su cui sto lavorando sono fortemente guidate da test al computer, il che significa che un algoritmo veloce sarebbe sicuramente utile.
jmite,

quindi sì, esiste un algoritmo piuttosto semplice che funziona semplicemente seguendo le transizioni in parallelo per ciascuna delle due macchine e tenendo traccia delle serie di stati risultanti, un po 'come l'algoritmo di determinazione std. non so se è nella letteratura da qualche parte, è così semplice da presumere che lo sia. stai già usando un algoritmo? sarebbe utile se lo citassi. inoltre sarebbero utili ulteriori dettagli sul tipo di input. sembra anche che tu voglia determinare se l'intersezione di due NFA è vuota? vuoi la lingua dell'intersezione o solo S / N se non vuota?
vzn

Sto solo cercando se è vuota, l'idea di essere non vedo se per verificare se . L'algoritmo di transizione parallela funziona, penso che la parte difficile sia prendere il complimento di un NFA, devi prima convertirlo in DFA. L'algoritmo che sto usando in questo momento è solo forza bruta, dato che mi occupo solo di linguaggi finiti. RS={}RS
jmite,

credo che ci possa essere un modo per attraversare i due NFA senza convertirli in un primo DFA, trovando anche il complemento di uno. ma non l'ho mai visto in un rif.
vzn

Risposte:


15

Il problema di decidere il contenimento del linguaggio negli NFA è completo . Per dimostrarlo, è facile ridurre il problema dell'universaility per gli NFA (verificare se ) Quindi, in un certo senso, è necessario determinarlo, ma è possibile farlo al volo.PSPACEL(A)=Σ

La tua osservazione su co-NP è sbagliata (ma carina). Tale testimone può effettivamente essere verificato in tempo polinomiale nel testimone , ma il testimone più breve stesso può essere esponenziale nella lunghezza dell'input. Poiché , anche la decisione di non contenimento è completa di .PSPACE=coPSPACEPSPACE

Per le cose di stato più attentamente, decidendo se è nelle dimensioni di (poiché solo deve essere integrata), e nella dimensione di .L(A)L(B)PSPACEBBNLOGSPACEA


Hai assolutamente ragione. Ho avuto a che fare con una specifica classe di NFA in cui vale quello che ho detto, ma sicuramente non con infiniti NFA generali. Grazie!
jmite,

Non avresti un riferimento a un documento o un libro di testo che lo dimostra completo di PSPACE, vero?
jmite,

1
Non è una prova molto dettagliata, ma penso che lo farà: saggezza.weizmann.ac.il/~vardi/av/notes/lec4.ps
Shaull

4

Dovresti dare un'occhiata al documento Antichain Algorithms per Finite Automata di Jean-François Raskin .

Nei nostri esperimenti, il test di inclusione basato su antichain ha eseguito uno o due ordini di grandezza meglio degli approcci "tradizionalmente".

Se ricordo bene, questo algoritmo è implementato nella libreria libAMoRE ++ .


3

Una delle librerie FSM gratuite migliori, più complete e altamente ottimizzate disponibili online è la libreria FSM AT&T . Implementa "fsmdifference" esattamente come descritto, richiedendo un FSM determinato privo di epsilon per fare la differenza. Un'idea è di ridurre al minimo uno o entrambi gli FSM prima di fare la differenza, che in alcuni casi può essere d'aiuto. (ovvero determinare non è la stessa cosa di minimizzare.) Questo pacchetto ha anche una minimizzazione "approssimativa" o "avida" progettata per essere probabilmente più veloce di una minimizzazione completa.

Tuttavia, studiando problemi simili, credo che ci sia una certa generalizzazione o costruzione di FSM che non compaiono in letteratura che possono aiutare con questo problema evitando la fase di determinazione, cioè fondamentalmente invertendo un NFA senza creare un ulteriore FSM determinato. L'idea è di attraversare i bordi NFA "in parallelo" e tenere traccia dell'insieme di nodi che fanno parte dell'attuale "superstato" (insieme di stati) proprio come con l'algoritmo determinante standard. Quindi, il complemento NFA accetta se e solo se l'insieme degli attuali nodi superstati è "tutto non accettabile" (in contrasto con la costruzione determinante che accetta iff "qualsiasi accettazione").

Tuttavia, non ho visto questo scritto prima e non lo vedo tramite una rapida ricerca online. Ci sono molti riferimenti che suggeriscono o implicano che l'unico modo di lavorare con il complemento di un NFA è determinarlo.

Ecco due riferimenti "vicini" che potrebbero essere utili per alcune idee. Sarei interessato a sapere di eventuali altri "più vicini". Dici che stai lavorando alla verifica del programma, che potrebbe essere un campo che ha una ricerca più diretta sul problema.

[1] Costruzione di intersezione di automi finiti non deterministici usando la notazione Z Nazir Ahmad Zafar, Nabeel Sabir e Amir Ali

[2] Costruzioni complementari per automi non deterministici su parole infinite Orna Kupferman e Moshe Vardi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.