Existe um algoritmo / procedimento sistemático para testar se um idioma é regular?
Em outras palavras, dado um idioma especificado em forma algébrica (pense em algo como ), teste se o idioma é regular ou não. Imagine que estamos escrevendo um serviço da Web para ajudar os alunos com todos os seus trabalhos de casa; o usuário especifica o idioma e o serviço da web responde com "regular", "não regular" ou "não sei". (Gostaríamos que o serviço da Web respondesse "não sei" com a menor frequência possível.) Existe alguma boa abordagem para automatizar isso? Isso é tratável? É decidível (ou seja, é possível garantir que nunca precisamos responder "eu não sei")? Existem algoritmos razoavelmente eficientes para resolver esse problema e poder fornecer uma resposta diferente de "não sei"
O método clássico para provar que um idioma não é regular é o lema de bombeamento. No entanto, parece que requer uma percepção manual em algum momento (por exemplo, para escolher a palavra a ser bombeada), então não estou claro se isso pode ser transformado em algo algorítmico.
Um método clássico para provar que uma linguagem é regular seria usar o teorema de Myhill-Nerode para derivar um autômato de estado finito. Isso parece uma abordagem promissora, mas requer a capacidade de executar operações básicas em idiomas na forma algébrica. Não está claro para mim se existe uma maneira sistemática de executar simbolicamente todas as operações que possam ser necessárias, em idiomas de forma algébrica.
Para tornar essa questão bem formulada, precisamos decidir como o usuário especificará o idioma. Estou aberto a sugestões, mas estou pensando em algo assim:
onde é uma expressão de palavra e é um sistema de desigualdades lineares sobre as variáveis de comprimento, com as seguintes definições:S
Cada um de é uma expressão de palavra. (Eles representam variáveis que podem assumir qualquer palavra em .)Σ ∗
Cada um de é uma expressão de palavra. (Aqui x r representa o reverso da cadeia x .)
Cada de a , b , c , … é uma expressão de palavra. (Implicitamente, Σ = { a , b , c , … } , então a , b , c , … representam um único símbolo no alfabeto subjacente.)
Cada de a η , b η , c η , … é uma expressão de palavra, se η é uma variável de comprimento.
A concatenação de expressões de palavras é uma expressão de palavras.
Cada um de é uma variável de comprimento. (Eles representam variáveis que podem assumir qualquer número natural.)
Cada um de É uma variável de comprimento. (Eles representam o comprimento de uma palavra correspondente.)
Isso parece amplo o suficiente para lidar com muitos dos casos que vemos nos exercícios de livros didáticos. Obviamente, você pode substituir qualquer outro método textual de especificar um idioma na forma algébrica, se tiver uma sugestão melhor.
Respostas:
A resposta é não. Decidir se uma determinada gramática sem contexto gera uma linguagem regular é um problema indecidível.
Update . Eu dei essa resposta negativa à pergunta geral
uma vez que linguagens livres de contexto são soluções de equações algébricas em linguagens: veja o Capítulo II, Teoremas 1.4 e 1.5 no livro de J. Berstel Transductions and Context-Free Languages .
No entanto, a mesma pergunta é decidível para linguagens determinísticas livres de contexto, um resultado não trivial devido ao Stearns [1] e aprimorado pelo Valiant [2]:
[1] RE Stearns, um teste de regularidade para máquinas de empilhamento , informações e controle 11 323- 340 (1967). DOI: 10.1016 / S0019-9958 (67) 90591-8.
[2] LG Valiant. Regularidade e problemas relacionados ao autômato de empuxo determinístico J. ACM 22 (1975), pp. 1–10.
Há outro resultado positivo, mais próximo das especificações fornecidas na segunda parte da pergunta. Lembre-se de que os subconjuntos semilineares de são exatamente os conjuntos definíveis na aritmética do Presburger. Existem também os subconjuntos racionais de . Em particular, um subconjunto de definido por inequações lineares é racional. Agora, dado um subconjunto racional de , é decidível se o idioma é regular. De fato, sabe-se [Ginsburg-Spanier] que é regular se e somente se é um subconjunto reconhecível deN K N K R N K G(R)={ u n 1 1 ⋯ u n k k |( n 1 ,..., N k )∈R}L(R)R N K N KNk Nk Nk R Nk
S. Ginsburg e EH Spanier., Semigroups, Presburger fórmulas e idiomas , Pacific J. Math. 16 (1966), 285-296.
S. Ginsburg e EH Spanier. Conjuntos regulares limitados , Proc. da matemática americana. Soc. 17 , 1043-1049 (1966).
Isso não resolve a segunda parte da pergunta, que pode ser indecidível por causa da palavra variáveis, mas fornece um fragmento razoável para começar.
fonte