Una Turing Machine può decidere se un NFA accetta una stringa di lunghezza massima?


14

Voglio sapere se il seguente problema è decidibile:

Istanza: un NFA A con n stati

Domanda: esiste un numero primo p tale che A accetta una stringa di lunghezza p.

La mia convinzione è che questo problema sia indecidibile, ma non posso provarlo. Il decisore può facilmente avere un algoritmo per capire se un determinato numero è primo, ma non vedo come sarebbe in grado di analizzare l'NFA in modo sufficientemente dettagliato da sapere esattamente quali lunghezze può produrre. Potrebbe iniziare a testare le stringhe con l'NFA, ma per un linguaggio infinito, potrebbe non fermarsi mai (e quindi non essere un decisore).

L'NFA può essere facilmente modificato in un DFA o in un'espressione regolare se la soluzione ne ha bisogno, ovviamente.

Questa domanda è qualcosa su cui ho riflettuto come una domanda preparatoria fatta da me per una finale che ho in mente tra 2 settimane.


Non sono sicuro che si tratti di un livello universitario, quindi non preoccuparti di eliminarlo. Potrebbe rivelarsi un problema difficile, vedi ad esempio terrytao.wordpress.com/2007/05/25/…

Beh, l'ho inventato, quindi potrebbe essere difficile. Non ho trovato prove di problemi indecidibili che coinvolgono NFA / DFA, motivo per cui ho pensato che potesse essere interessante provarne uno.

Credo che ciò a cui sei collegato sia un problema diverso (più semplice). Può rispondere "quante stringhe di lunghezza x accetta un NFA?". Usando la formula fornita, dovremmo controllare infinitamente molte istanze di per vedere se esiste una stringa accettata da NFA che è di lunghezza primo. Non sto chiedendo di un particolare primo, sto chiedendo di tutti loro. SL(n)

Risposte:


17

Le lunghezze delle stringhe accettate da un DFA formano un insieme semilineare (come nel teorema di Parikh per i linguaggi liberi dal contesto), la descrizione di quelle non è troppo difficile da trovare (essenzialmente unisce tutti i possibili cicli dell'automa), e da Il teorema di Dirichlet qualsiasi progressione aritmetica della forma con contiene un'infinità di numeri primi.un'+BKGCD(un',B)=1

Mettendo insieme quanto sopra si ottiene un algoritmo per verificare se il proprio linguaggio regolare (o anche senza contesto) contiene stringhe di lunghezza primaria. Sicuramente non è una domanda semplice, IMVHO ...


Apprezzerei un po 'di aiuto per comprendere il teorema di Parikh in questo caso. Ovviamente possiamo trasformare un NFA in un PDA semplicemente non usando lo stack nel PDA. I sottoinsiemi lineari specificano i cicli? In tal caso, come funziona?
Rilassati il

1
@Chill, considera qualsiasi percorso attraverso il DFA. Potrebbe passare direttamente dallo stato iniziale allo stato finale oppure potrebbe essere ripetuto. Le possibili lunghezze delle stringhe sono determinate dalla "porzione diritta" + una somma di volte "lunghezza di un possibile anello" per k arbitrari . Basta disegnare un groviglio di un DFA e tracciare i percorsi attraverso di esso. Vedrai che le possibili lunghezze rientrano in famiglie di sequenze aritmetiche definite dai cicli, cioè formano un insieme semilineare. Non c'è bisogno di passare al contesto gratuito (solo un bel bonus gratuito). KK
vonbrand,

1
Penso che risponda alla mia domanda. Proverò a leggere di più sul teorema di Parikh. Capisco l'idea e come può specificare i cicli in questo caso. Quello che voglio capire è una soluzione più "pratica" in cui realizzo un vero algoritmo per risolvere questo problema.
Rilassati il

@Chill, guarda il mio commento precedente. Non è così difficile trovare una descrizione delle possibili lunghezze semplicemente cancellando i simboli sul DFA come un grafico e controllando le passeggiate tra lo stato iniziale di partenza e gli stati finali. Difficile da formalizzare, facile da capire a mano per ogni dato esempio.
vonbrand,

3
un'un'un'un'(un'un')*
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.