Uma máquina de Turing pode decidir se um NFA aceita uma sequência de tamanho primo?

14

Quero saber se o seguinte problema é decidível:

Instância: um NFA A com n estados

Pergunta: Existe algum número primo p tal que A aceite alguma sequência de comprimento p.

Minha crença é que esse problema é indecidível, mas não posso provar. O decisor pode facilmente ter um algoritmo para descobrir se um número específico é primo, mas não vejo como seria capaz de analisar o NFA em detalhes suficientes para saber exatamente quanto tempo ele pode produzir. Ele pode começar a testar seqüências de caracteres com o NFA, mas para um idioma infinito, ele nunca pode parar (e, portanto, não é uma decisão).

O NFA pode ser facilmente alterado para um DFA ou expressão regular, se a solução precisar, é claro.

Esta pergunta é algo que eu tenho ponderado como uma pergunta de preparação feita por mim mesma para uma final que eu tenho em duas semanas.

Calafrio
fonte
Não tenho certeza se esse é o nível de graduação, portanto, não se preocupe em excluí-lo. Pode ser um problema difícil, por exemplo: terrytao.wordpress.com/2007/05/25/…
Bem, eu inventei, então pode ser difícil. Não encontrei nenhuma prova de problemas indecidíveis envolvendo NFAs / DFAs, e foi por isso que achei interessante tentar um.
Acredito que você esteja vinculado a um problema diferente (mais fácil). Ele pode responder "quantas cadeias de comprimento x um NFA aceita?". Utilizando a fórmula fornecida, teríamos que verificar infinitamente muitas instâncias de para ver se existe uma sequência que o NFA aceita com comprimento inicial. Não estou perguntando sobre um determinado primo, estou perguntando sobre todos eles. seu(n)

Respostas:

17

Os comprimentos das strings aceitas por um DFA formam um conjunto semilinear (como no teorema de Parikh para linguagens livres de contexto), a descrição daquelas não é muito difícil de encontrar (essencialmente separa todos os ciclos possíveis do autômato) e por Teorema de Dirichlet Qualquer progressão aritmética da forma com mcd ( a , b ) = 1 contém uma infinidade de primos.uma+bkgcd(uma,b)=1

A junção das opções acima fornece um algoritmo para verificar se a sua linguagem comum (ou mesmo sem contexto) contém cadeias de comprimento primo. Definitivamente não é uma pergunta simples, IMVHO ...

vonbrand
fonte
Eu apreciaria alguma ajuda para entender o teorema de Parikh neste caso. Obviamente, podemos transformar um NFA em um PDA simplesmente não usando a pilha no PDA. Os subconjuntos lineares especificam os ciclos? Se sim, como isso funciona?
Frio
1
kk
1
Eu acho que isso responde à minha pergunta. Vou tentar ler mais sobre o teorema de Parikh. Eu entendo a idéia e como ele pode especificar ciclos neste caso. O que eu quero descobrir é uma solução mais "prática", na qual faço um algoritmo real para resolver esse problema.
Frio
@ Chill, basta olhar para o meu comentário anterior. Não é tão difícil apresentar uma descrição dos possíveis comprimentos, apenas apagando os símbolos no DFA como um gráfico e verificando as caminhadas entre o estado inicial e o final. Difícil de formalizar, fácil de descobrir à mão para qualquer exemplo.
vonbrand 27/03
3
umaumaumauma(umauma)