11

Tengo que determinar si un idioma (por ejemplo L = {a^nb^mc^s | 0 < = n < = m < = s}) es regular, sin contexto, recursivo, recursivamente enumerable o ninguno de ellos .¿Cómo determinar si un idioma es recursivo o recursivo enumerable?

Sé cómo determinar si un idioma es regular (encuentra un DFA o una expresión regular que funciona) o sin contexto (encuentre una PDA o gramática sin contexto que funcione); Sé que un lenguaje recursivo tiene una máquina de Turing que siempre se detiene y que un lenguaje recursivo enumerable tiene una máquina de Turing que no puede detenerse.

Entonces la pregunta es: ¿hay un criterio rápido para determinar si el idioma es recursivo o recursivamente enumerable o ninguno? Por ejemplo, no tengo que construir un PDA para comprender que un idioma no tiene contexto, no lo puedo ver porque requiere una pila; ¿Hay un acercamiento rápido similar al problema (que afortunadamente ahorra el problema de construir una máquina de Turing)?

Respuesta

5

No hay una forma estructural de verificar si un idioma es recursivo versus recursivamente enumerable. En realidad, hay una prueba muy buena que dice que para cualquier autómata capaz de reconocer los lenguajes recursivos, hay al menos un lenguaje RE no en R que el autómata también acepta; es una variante del argumento de diagonalización que usa para mostrar la existencia de problemas indecidibles.

La principal manera de demostrar que un lenguaje está en RE pero no en R es probar que el lenguaje está en RE (quizás definiendo una TM para él), luego reducir un problema conocido en RE pero no R en eso problema. Por ejemplo, si puede demostrar que cualquier instancia del problema de detención puede resolverse transformándola en una instancia de su problema, usted sabe que no puede tener una solución recursiva, y si continúa con una TM para el idioma que usted sabe que el idioma está en RE. Juntos, tiene un lenguaje en RE pero no R.

+0

Eso seguro que no es la respuesta que estaba esperando :(aunque aclara algunas dudas que tuve, ¡gracias! Entonces, si tuviera que resolver el ejemplo que escribí al principio, ¿cómo procedería (sabiendo que no está libre de contexto)? – Jacob

+0

@ Jacob- Are ¿Estás seguro de que no está libre de contexto? – templatetypedef

+0

Bastante seguro, sí ... El lema de bombeo debería descartarlo, tampoco puedo encontrar una gramática que funcione. – Jacob

5

Para un lenguaje sin contexto un método rápido es solo ver el número de comparaciones.
En el ejemplo, vea n<=m y m<=s. Entonces hay dos comparaciones involucradas. Entonces puedes sacarlo simplemente diciendo que no está libre de contexto. Si hay una sola comparación involucrada, llámela como un lenguaje libre de contexto.

Igual es el caso con los idiomas regulares. No debe haber relación entre las dos variables, quiero decir que no debe haber ningún tipo de comparación. Por ejemplo, considere los idiomas: 0^m+n 1^n 0^m. Observe con cuidado que solo se ha realizado una comparación que es m+n = n+m (presionar y soltar los símbolos). Por lo tanto, no tiene ningún contexto.
Ahora vea 0^n+m 1^n+m 0^m vea claramente la comparación entre los primeros 2 y los dos siguientes.

Me tomé un tiempo para resolverlo. Pero tomará algunos para tomar las decisiones. Créeme, realmente funciona. Aquí está el último ejemplo para el lenguaje regular. a^n b^2m es regular (Ver no hay comparaciones entre n y m) y {a^n b^m |n=2m} es libre de contexto, ya que tiene sólo una comparación (no regular)

Esperanza esto ayuda

+0

@ saurabh srivastav ¿qué diría usted sobre L = {a^n b^m | n, m> = 1}, ¿es esta CFL? –

+0

@aparajitarai Yo diría que L es un lenguaje común ya que, en realidad, no te importa la relación entre el número de letras ay el número de letras, simplemente dices que cada cadena en el lenguaje tiene que comenzar con un - prefijo vacío de a de tamaño n (sin embargo, no se define, lo que debería ser n) seguido de una secuencia no vacía de b (donde m el límite superior de longitud no está restringido), por lo que puedes construir un expresión para este idioma Por favor corrígeme si me equivoco. Acabo de tomar un curso de informática teórica en mi universidad. – jcxz