¿Existe un algoritmo / procedimiento sistemático para evaluar si un idioma es regular?
En otras palabras, dado un idioma especificado en forma algebraica (piense en algo como ), pruebe si el idioma es regular o no. Imagine que estamos escribiendo un servicio web para ayudar a los estudiantes con todas sus tareas; el usuario especifica el idioma y el servicio web responde con "regular", "no regular" o "No sé". (Nos gustaría que el servicio web responda "No sé" con la menor frecuencia posible). ¿Hay algún buen enfoque para automatizar esto? ¿Es esto manejable? ¿Es decidible (es decir, es posible garantizar que nunca necesitemos responder "No sé")? ¿Existen algoritmos razonablemente eficientes para resolver este problema y poder proporcionar una respuesta que no sea "no sé"
El método clásico para demostrar que un idioma no es regular es el lema de bombeo. Sin embargo, parece que requiere una visión manual en algún momento (por ejemplo, para elegir la palabra que se va a bombear), por lo que no tengo claro si esto puede convertirse en algo algorítmico.
Un método clásico para demostrar que un lenguaje es regular sería utilizar el teorema de Myhill-Nerode para derivar un autómata de estado finito. Esto parece un enfoque prometedor, pero requiere la capacidad de realizar operaciones básicas en idiomas en forma algebraica. No me queda claro si existe una forma sistemática de realizar simbólicamente todas las operaciones que puedan ser necesarias, en idiomas en forma algebraica.
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:
donde es una expresión de palabras y es un sistema de desigualdades lineales sobre las variables de longitud, con las siguientes definiciones:S
Cada uno de es una expresión de palabras. (Estos representan variables que pueden tomar cualquier palabra en .)Σ ∗
Cada uno de es una expresión de palabras. (Aquí representa el reverso de la cadena .)x r x
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 , ...
Cada uno de es una expresión de palabra, si es una variable de longitud.η
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 tomar cualquier número natural).
Cada uno de es una variable de longitud. (Estos representan la longitud de una palabra correspondiente).
Esto parece lo suficientemente amplio como para manejar muchos de los casos que vemos en los ejercicios de libros de texto. Por supuesto, puede sustituir cualquier otro método textual para especificar un idioma en forma algebraica, si tiene una mejor sugerencia.