Algoritmo para probar si un idioma no tiene contexto

18

¿Existe un algoritmo / procedimiento sistemático para probar si un lenguaje no tiene contexto?

En otras palabras, dado un idioma especificado en forma algebraica (piense en algo como ), pruebe si el idioma está libre de contexto o no . Imagine que estamos escribiendo un servicio web para ayudar a los estudiantes con todas sus tareas; usted especifica el idioma y el servicio web genera "sin contexto" o "sin contexto". ¿Hay algún buen enfoque para automatizar esto?L={unnortesinorteunnorte:nortenorte}

Por supuesto, existen técnicas para la prueba manual, como el lema de bombeo, el lema de Ogden, el lema de Parikh, el lema de Interchange, y más aquí . Sin embargo, cada uno requiere información manual en algún momento, por lo que no está claro cómo convertirlos en algo algorítmico.

Veo que Kaveh ha escrito en otra parte que el conjunto de lenguajes no libres de contexto no es recursivamente enumerable, por lo que parece que no hay esperanza de que ningún algoritmo funcione en todos los lenguajes posibles. Por lo tanto, supongo que el servicio web necesitaría poder mostrar "sin contexto", "sin contexto" o "No puedo decirlo". ¿Hay algún algoritmo que a menudo pueda proporcionar una respuesta que no sea "No puedo decir", en muchos de los idiomas que es probable que uno vea en los libros de texto? ¿Cómo construirías un servicio web así?


Para hacer esta pregunta bien planteada, debemos decidir cómo el usuario especificará el idioma. Estoy abierto a sugerencias, pero estoy pensando en algo como esto:

L={mi:S}

donde es una expresión de palabras y es un sistema de desigualdades lineales sobre las variables de longitud, con las siguientes definiciones:SmiS

  • Cada uno de es una expresión de palabras. (Representan variables que pueden contener cualquier palabra en .)Σ X,y,z,...Σ

  • Cada uno de es una expresión de palabras. (Implícitamente, , por lo que representan un solo símbolo en el alfabeto subyacente).Σ = { a , b , c , ... } a , b , c , ...un,si,C,...Σ={un,si,C,...}un,si,C,...

  • Cada uno de es una expresión de palabra, si es una variable de longitud.ηunη,siη,Cη,...η

  • La concatenación de expresiones de palabras es una expresión de palabras.

  • Cada uno de es una variable de longitud. (Representan variables que pueden contener cualquier número natural).metro,norte,pag,q,...

  • Cada uno de es una variable de longitud. (Estos representan la longitud de una palabra correspondiente).El |XEl |,El |yEl |,El |zEl |,...

Esto parece lo suficientemente amplio como para manejar muchos de los casos que vemos en los ejercicios de libros de texto. Por supuesto, si lo desea, puede sustituir cualquier otro método textual para especificar un idioma en forma algebraica.

DW
fuente
¿No sería más fácil comenzar con la regularidad de los idiomas?
Yuval Filmus
@YuvalFilmus, ¡seguro que sí! Ahora que lo mencionas, es una gran idea. ¿Crees que el problema es factible para los idiomas normales? Me encantaría preguntarle a un correspondiente sobre los idiomas regulares, si cree que puede ser valioso.
DW
2
Ciertamente sería más fácil para los idiomas normales. Por cierto, la no capacidad de decisión general no se aplica necesariamente a los idiomas de la forma que mencionas.
Yuval Filmus
44
Me temo que este problema probablemente esté abierto, al menos un caso específico es: cstheory.stackexchange.com/questions/17976 . Puede haber una forma de obtener la indecidibilidad para su problema más general, pero no lo veo.
sdcvvc
Sería útil dar algunas palabras de ejemplo en el idioma. Sugerir más investigación / colaboración en Computer Science Chat
vzn

Respuestas:

0

Según el teorema de Rice , ver si el lenguaje aceptado por una máquina de Turing tiene alguna propiedad no trivial (aquí: estar libre de contexto) no es decidible. Por lo tanto, tendría que restringir el poder de su maquinaria de reconocimiento (o descripción) para que Turing no esté completa y espere una respuesta.

Para algunas descripciones de lenguaje, la respuesta es trivial: si es por expresiones regulares, es regular, por lo tanto, libre de contexto. Si es por gramáticas libres de contexto, lo mismo.

vonbrand
fuente
1
Estoy de acuerdo con todos sus comentarios, pero no estoy seguro de ver cómo esto responde la pregunta o de cómo usarla para responderla. Soy consciente de todos esos hechos. Describo una forma particular de especificar idiomas. ¿Estás sugiriendo que es Turing completo? No parece probable que sea Turing completo para mí. Un sistema de desigualdades lineales no está completo en Turing, por lo que sospecho / especulo que ya lo he restringido lo suficiente como para no estar completo en Turing. Además, para el método que di para especificar idiomas, no es trivial, ya que no es una expresión regular ni una gramática libre de contexto.
DW
-2

Cualquier idioma es aceptado por un Push Down Automata, es un CFL. Aquí hay un desglose detallado para determinar si un idioma es CFL o no. verificar si el idioma es CFL o no

SiluPanda
fuente
Esto no es un algoritmo.
xskxzr
No veo cómo esto responde la pregunta. Soy consciente de que un lenguaje no tiene contexto si es aceptado por un PDA, pero eso no parece ayudar a encontrar un algoritmo del formulario solicitado en la pregunta. El artículo de geeksforgeeks al que se vincula no proporciona un algoritmo completo para este problema; solo enumera casos especiales no exhaustivos que son más fáciles (y no es una gran referencia, ya que algunas de sus declaraciones son un poco incompletas / dudosas).
DW
AFAIK, todavía no hay un algoritmo bien estructurado para eso. (corrígeme si estoy equivocado). Lo mejor que podemos hacer es verificar los casos.
SiluPanda el
-3

Pruebe el software JFLAP si solo desea verificar un CFG. Incluso puede pedirle a los desarrolladores de JFLAP que le den el código o algoritmo para el software. puede obtener JFLAP desde aquí http://www.jflap.org/jflaptmp/ es gratis, sin embargo, requiere JDK o JRE o algo así. O tal vez pueda probar otros softwares similares y sus desarrolladores.

Haseeb Hassan Asif
fuente
1
No estoy seguro de que esto responda la pregunta. JFLAP no tiene ninguna característica que acepte un lenguaje en notación matemática y le dice si está libre de contexto o no.
Yuval Filmus
TEOREMA 2.20 en el libro Sipser Un lenguaje no tiene contexto si y solo si algún autómata pushdown lo reconoce. Y puede construir PDA en JFLAP a partir de una gramática
Haseeb Hassan Asif
Tal vez tenga razón acerca de la notación matemática que no se puede poner en JFLAP pero aún puede poner todas las reglas de una gramática y puede convertirla en un PDA o dice que no es un CFG o algún otro error
Haseeb Hassan Asif
{unnortesinorteCnorte:nortenorte}
1
Me imagino que JFLAP puede convertir una gramática libre de contexto a una PDA equivalente, pero esto no es de ninguna ayuda aquí.
Yuval Filmus