Cómo sentir intuitivamente que un idioma es regular

9

Dado un lenguaje , ¿cómo puedo decir directamente, sin mirar las reglas de producción, que este lenguaje no es regular?L={anbncn}

Podría usar el lema de bombeo, pero algunos chicos dicen simplemente mirando la gramática que este no es uno normal. ¿Como es posible?

doniyor
fuente
1
Cualquiera puede mirar cualquier idioma y simplemente decir que no es regular. No estoy seguro de que la intuición, per se, esté tanto en juego aquí como la experiencia. Este es un lenguaje bastante simple (a pesar de no ser regular) y se encuentra inevitablemente en el estudio de los idiomas formales. Una vez que le hayan dicho que no es regular, y haya demostrado que no es regular utilizando ninguna técnica de prueba válida, generalmente no necesita una prueba para convencer a otras personas, porque todos lo probaron por sí mismos cuando se les presentó al tema.
Patrick87
sí, pero a veces en las conferencias solo siguen algunas pruebas matemáticas secas, pero realmente carecen de explicaciones intuitivas con ejemplos simples y reales
doniyor
Olvídate de . ¿Alguna vez sentiste que a n b n no es regular? anbncnanbn
Uday Reddy
2
Mirar una gramática y proclamar porque la gramática no es regular y el lenguaje no es regular es una falacia. Hay muchas gramáticas no regulares para los idiomas regulares. ¡Tener cuidado! Dicho esto, decidir si una gramática es regular es fácil; solo revisa las producciones.
Raphael

Respuestas:

11

La propiedad principal de DFA / NFA es la falta de memoria ilimitada. Si observa un idioma y el único algoritmo (que luego debería traducirse en un autómata finito) puede pensar que requiere esta propiedad, es decir, siente que cualquier algoritmo que lo reconozca necesitará recordar una gran cantidad arbitraria de cosas (como en su ejemplo), entonces ese idioma probablemente no sea regular.n

Por supuesto, siempre debe recordar que la intuición matemática puede estar equivocada, y la única forma de estar seguro de su intuición es demostrarlo.

EDITAR: responderé la última pregunta en los comentarios aquí, por falta de espacio.

Ustedes están hablando de memoria ilimitada, lo que quiere decir es la razón por la cual no es regular. pero a ^ nb ^ m también puede tener memoria ilimitada si quiero, ¿no? Esto todavía no me da paz.


ambnm,n
anbnab's. Esto requerirá memoria ilimitada. Cuando miro un lenguaje y veo que cualquier algoritmo que se me ocurra necesita memoria ilimitada, mi intuición de que el lenguaje no es regular se fortalece. Si no puedo encontrar un algoritmo "inteligente" (uno que requiera una cantidad constante de memoria) en un tiempo razonable (cuánto tiempo es razonable depende de usted) intentaré probar que el idioma no es regular.
Espero que esto lo haga un poco más claro.

Boris Trayvas
fuente
gracias, las pruebas matemáticas traen la intuición, pero mira esta regla de producción: S -> ab | aSb. esto es para un ^ nb ^ n que dice que tampoco es regular. pero a ^ mb ^ n es regular con m, n> = 1. ¿Por qué es esto? estos son en realidad la misma forma, ¿verdad? no entiendo la diferencia entre estos dos idiomas
doniyor
1
Para a ^ nb ^ n necesita hacer un seguimiento de 2 cosas: primero, que el número de a es igual al número de b (esta es la parte imposible para los DFA), y segundo que no 'b' es seguido por un 'a '. Para a ^ mb ^ n no te importa el valor de m, n. Solo le importa que haya al menos una 'a' y al menos una 'b' y que ninguna 'b' vaya seguida de una 'a'. Hablando informalmente, solo debes recordar 3 cosas.
Boris Trayvas
oh ok, ahora lo tengo
doniyor
así que el orden también es crucial, ¿verdad? como aabbcc aceptado pero no aabcbc solo porque el pedido no está bien. ¿Correcto?
doniyor
1
"La propiedad principal de los lenguajes regulares es la falta de memoria ilimitada". - Sé lo que quieres decir, pero esa oración no tiene ningún sentido. "Sientes que cualquier algoritmo que lo reconozca necesitará recordar una gran cantidad arbitraria de cosas". Esta es, de hecho, la única intuición que conozco, pero su tipo es muy, muy peligroso; ver aquí .
Raphael
5

Podría usar lemma de bombeo

anbn

Una buena manera de probar su intuición es mirar estos idiomas:

  1. {xyyzx,y,z{a,b}+}
  2. {xyyzx,y,z{a,b}}
  3. {xyyzx,y,z{a,b,c}+}
  4. {xyyzx,y,z{a,b,c}}

¿Cuáles son libres de contexto?

Rafael
fuente
1
Si alguien conoce ejemplos igualmente agradables para el borde de los idiomas regulares, dígalo. No estropees la respuesta en los comentarios.
Raphael
Raphael: ¡buen trabajo! gracias por dar ejemplos y por probarme explícitamente.
doniyor
4

En realidad, puede decidir si un idioma es regular utilizando cálculos bastante sencillos, en lugar de hacer una prueba completa. Simplemente necesita aplicar un criterio muy poderoso: un lenguaje es regular si y solo si tiene muchos cocientes.

LxxLwxwLL={anbn}aL={an1bn|n1}bL=akL={ankbn|nk}L

DDSaaLDS

James Koppel
fuente
b \ L significa: si divido la L por b, ¿obtendré un conjunto vacío? ¿es porque realmente tengo que empezar a leer la palabra desde el principio? y no por detras?
doniyor
1
bL=L/b
1
Aquí hay una buena presentación de diapositivas que explica los cocientes y cómo construir DFA a partir de ellos: cs.cmu.edu/~cdm/pdf/Minimization.pdf
James Koppel
oh ok muchas gracias ahora me sale un poco. mmm ... déjame estudiar esto de nuevo por un tiempo, aunque ...
doniyor