¿Cómo demostrar que un idioma no es regular?


76

Aprendimos sobre la clase de idiomas regulares . Se caracteriza por un concepto cualquiera entre expresiones regulares, autómatas finitos y gramáticas lineales izquierdas, por lo que es fácil mostrar que un lenguaje determinado es regular.REG

Sin embargo, ¿cómo muestro lo contrario? Mi TA ha insistido en que para hacerlo, tendríamos que mostrar para todas las expresiones regulares (o para todos los autómatas finitos, o para todas las gramáticas lineales izquierdas) que no pueden describir el lenguaje en cuestión. ¡Esto parece una gran tarea!

He leído sobre algunos lemas de bombeo pero parece realmente complicado.

Se pretende que sea una pregunta de referencia que reúna métodos de prueba habituales y ejemplos de aplicación. Vea aquí la misma pregunta sobre lenguajes sin contexto.

Respuestas:


60

La prueba por contradicción a menudo se usa para mostrar que un idioma no es regular: deje que sea una propiedad verdadera para todos los idiomas regulares, si su idioma específico no verifica , entonces no es regular. Se pueden usar las siguientes propiedades:PP

  1. El lema de bombeo, como se ejemplifica en la respuesta de Dave ;
  2. Propiedades de cierre de lenguajes regulares (operaciones de conjuntos, concatenación, estrella de Kleene, espejo, homomorfismos);
  3. Un lenguaje normal tiene un número finito de clase de equivalencia de prefijo, teorema de Myhill-Nerode .

Para demostrar que un lenguaje no es regular usando propiedades de cierre, la técnica es combinar con lenguajes regulares mediante operaciones que preserven la regularidad para obtener un lenguaje que se sabe que no es regular, por ejemplo, el lenguaje arquetípico . Por ejemplo, deje que . Supongamos es regular, ya que los lenguajes regulares son cerrados bajo la complementación así es 's complemento . Ahora tome la intersección de y que es regular, obtenemos que no es regular.LLI={anbnnN}L={apbqpq}LLLcLcabI

El teorema de Myhill-Nerode se puede usar para demostrar que soy regular. Para , . Todas las clases son diferentes y hay una infinidad contable de tales clases. Como un idioma regular debe tener un número finito de clases, soy regular.Ip0I/ap={arbrbprN}=I.{bp}I


3
No sabía sobre el teorema de Myhill-Nerode, ¡genial!
Daniil

Wikipedia también tiene una sección sobre la cantidad de palabras en un idioma normal: si puede probar que su idioma no coincide con la caracterización, entonces su idioma no es regular: en.wikipedia.org/wiki/…
Alex ten Brink

@Daniil, las expresiones regulares no pueden contar me parecen una formulación informal popular del teorema de Myhill-Nerode.
Programador

@AlextenBrink: Eso está bien. ¿Supongo que las constantes en la declaración son los valores propios del laplaciano del autómata? Esto sería una buena adición a las respuestas aquí.
Louis

@Louis: en realidad, no hemos encontrado ninguna referencia para ese teorema en absoluto, así que si sabes más sobre él ... Ver también: cs.stackexchange.com/questions/1045/…
Alex ten Brink

37

Según la respuesta de Dave, aquí hay un "manual" paso a paso para usar el lema de bombeo.

Recordemos el lema de bombeo (tomado de la respuesta de Dave, tomado de Wikipedia):

Deje que sea ​​un lenguaje regular. Entonces existe un número entero (dependiendo solo de ) de tal manera que cada cadena en de longitud al menos ( se llama "longitud de bombeo") se puede escribir como (es decir, puede ser dividido en tres subcadenas), que cumple las siguientes condiciones:Ln1LwLnnw=xyzw

  1. |y|1
  2. |xy|n y
  3. un "bombeado" se encuentra todavía en : para todos , . wLi0xyizL

Suponga que tiene un lenguaje y quiere demostrar que no es regular a través del lema de bombeo. La prueba se ve así:L

  1. Suponga que es regular.L
  2. Si es regular, entonces el lema de bombeo dice que existe algún número que es la longitud de bombeo.n
  3. Elija una palabra específica de longitud mayor que . La parte difícil es saber qué palabra tomar.wLn
  4. Considere TODAS las formas de dividir en 3 partes, , con e no vacías. Para cada una de estas formas, muestran que no se puede bombear: siempre existe alguna tal que .ww=xyz|xy|nyi0xyizL
  5. Concluya: la palabra no se puede "bombear" (no importa cómo la dividimos en ) en contradicción con el lema de bombeo, es decir, nuestra suposición (paso 1) es incorrecta: no es regular.wxyzL

Antes de pasar a un ejemplo, permítanme reiterar los pasos 3 y 4 (aquí es donde la mayoría de las personas se equivocan). En el paso 3 usted necesita escoger una palabra específica en . escríbalo explícitamente, como "00001111" o " ". Ejemplos de cosas que no son una palabra específica: " " o "una palabra que tiene 000 como prefijo".Lanbn ww

Por otro lado, en el Paso 4 debe considerar más de un caso. Por ejemplo, si no es suficiente decir , y luego llegar a una contradicción. También debe comprobar , y , y todas las otras opciones posibles.w=000111x=00,y=01,z=00x=0,y=0,z=0111x=ϵ,y=000,z=111


Ahora sigamos los pasos y demostremos que no es regular.L={0k12kk>0}

  1. Suponga que es regular.L
  2. Sea la longitud de bombeo dada por el lema de bombeo.n
  3. Sea . (verificación de cordura: según sea necesario. ¿Por qué esta palabra? otras palabras también pueden funcionar ... se necesita algo de experiencia para encontrar la correcta ). Nuevamente, tenga en cuenta que es una palabra específica: .w=0n12n | w | > n w w 000 0 n  veces 111 1 2 n  veces
    |w|>nww0000n times11112n times
  4. Ahora comencemos a considerar los diversos casos para dividir en con e . Dado que no importa cómo dividimos , consistirá de solo 0 y también lo hará . Supongamos y . Necesitamos considerar TODAS las opciones, es decir, todas las posibles tales que y . PARA ESTE la prueba para todos estos casos es la misma, pero en general puede ser diferente. tome y considerewxyz|xy|n|y|>0|xy|<nwxy|x|=s|y|=ks,ks0,k1s+knL i = 0 x y i z = x z LL
    i=0xyiz=xz . Esta palabra no está en , ya que es de la forma (no importa lo que y eran), y desde , esta palabra no está en y llegamos a una contradicción .L0nk12nskk1L
  5. Por lo tanto, nuestra suposición es incorrecta y no es regular.L

Aquí puede encontrar un clip de youtube que explica cómo usar el lema de bombeo en la misma línea.


1
¡Es n esa es la longitud de bombeo en esta definición!
saadtaame

La base para esto es que cualquier cadena que sea lo suficientemente larga debe haber pasado por un ciclo en la máquina de estado, y si pasa por ese ciclo una vez, puede pasarlo varias veces.
gnasher729

28

Desde Wikipedia, el lenguaje de bombeo para los idiomas regulares es el siguiente:

Deje que sea ​​un lenguaje regular. Entonces existe un número entero (dependiendo solo de ) de tal manera que cada cadena en de longitud al menos ( se llama "longitud de bombeo") se puede escribir como (es decir, puede ser dividido en tres subcadenas), que cumple las siguientes condiciones:p 1 L w L p p w = x y z wLp1LwLppw=xyzw

  1. |y|1
  2. |xy|p y
  3. para todos los , . es la subcadena que se puede bombear (eliminar o repetir cualquier cantidad de veces, y la cadena resultante siempre está en ). x y i z L y Li0xyizL
    yL

(1) significa que el bucle y a bombear debe tener una longitud de al menos uno; (2) significa que el bucle debe ocurrir dentro de los primeros p caracteres. No hay restricción en x y z.

En palabras simples, para cualquier lenguaje regular L, cualquier palabra suficientemente larga puede dividirse en 3 partes. es decir, , de manera que todas las cuerdas para también están en .w = x y z x y k z k 0 LwLw=xyzxykzk0L

Ahora consideremos un ejemplo . Deje .L={(01)n2nn0}

Para demostrar que esto no es regular, debe considerar cómo se ven todas las descomposiciones , entonces, ¿cuáles son todas las cosas posibles x, y y z que pueden darse (elegimos mirar esta palabra en particular, de longitud , donde es la longitud de bombeo). Necesitamos considerar dónde ocurre la parte de la cadena. Podría superponerse con la primera parte, y por lo tanto será igual a , , o , para algunos (no olvides que ). Podría superponerse con la segunda parte, lo que significa quex y z = ( 01 ) p 2 p 3 p p y ( 01 ) k + 1 ( 10 ) k + 1 1 ( 01 ) k 0 ( 10 ) k k 0 | y | 1 y = 2 k k > 0 ( 01 ) k +w=xyzxyz=(01)p2p3ppy(01)k+1(10)k+11(01)k0(10)kk0|y|1y=2k, para algunos . O podría superponerse entre las dos partes de la palabra, y tendrá la forma , , o , para y .k>0 (10 ) k + 1 2 l 1(01 ) k 2 l 0(10 ) k 2 l k0l1(01)k+12l(10)k+12l1(01)k2l0(10)k2lk0l1

Ahora bombee cada uno para obtener una contradicción, que será una palabra que no esté en su idioma. Por ejemplo, si tomamos , el lema de bombeo dice, por ejemplo, que debe estar en el idioma , para una elección adecuada de y . Pero esta palabra no puede estar en el idioma ya que un aparece antes de un . x y 2 z = x 0 ( 10 ) k 2 l 0 ( 10 ) k 2 l z x z 2 1y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

Otros casos resultarán en que el número de sea ​​mayor que el número de o viceversa, o darán lugar a palabras que no tendrán la estructura , por ejemplo, teniendo dos en una fila.2 ( 01 ) n 2 n 0(01)2(01)n2n0

No olvides que . Aquí, es útil acortar la prueba: muchas de las descomposiciones anteriores son imposibles porque harían que la parte demasiado larga.z|xy|pz

Cada uno de los casos anteriores debe conducir a tal contradicción, que sería una contradicción del lema de bombeo. Voila! El lenguaje no sería regular.


Sería bueno un ejemplo donde se necesita la hipótesis . |xy|p
Gilles 'SO- deja de ser malvado'

@Gilles: Ni siquiera estoy seguro de lo que significa la oración que agregaste.
Dave Clarke

@Gilles: Creo que todas las descomposiciones son posibles, solo que estará acotado. No estoy seguro de qué tiene que ver con la longitud de . zkz
Dave Clarke

Duh! Ya lo veo. Gracias. Sin embargo, no descarta ninguna de las formas de descomposición mencionadas en la respuesta; solo limita los valores de y que puedo tomar. lkl
Dave Clarke

1
La cantidad de edición que se ha hecho para responder una pregunta tan fácil me hace preguntarme por qué todos enseñan el lema de bombeo como "la" forma de demostrar la falta de regularidad. Por curiosidad, ¿por qué no considerar que su cadena es algo como ? El lema de bombeo le dice que no tiene s, por lo que una contradicción es más directa. y 2(01)2p22py2
Louis

14

Para un idioma dado , dejeLΣ

SL(z)=n0|LΣn|zn

la función generadora (ordinaria) de , es decir, su secuencia de conteos de palabras por longitud.L

La siguiente declaración contiene [ FlSe09 , p52]:

LREGSL rational

Es decir, con polinomios. P,QSL(z)=P(z)Q(z)P,Q

Entonces, cualquier lenguaje cuya función generadora no sea racional no es regular. Desafortunadamente, todos los lenguajes lineales también tienen funciones generadoras racionales, por lo que este método no funcionará para los lenguajes no regulares más simples. Otro inconveniente es que obtener (y mostrar que no es racional) puede ser difícil.SL

Ejemplo: considere el idioma de las palabras entre paréntesis correctamente anidadas, es decir, el idioma Dyck . Es generado por la gramática inequívoca

S[S]Sε

que se puede traducir a la ecuación

S(z)=z2S2(z)+1

una solución (la que tiene todos los coeficientes positivos) de la cual es

S(z)=114z22z2 .

Como [ Kuic70 ] y no es racional, el lenguaje Dyck no es regular.SSL=SS


  1. La prueba de la declaración para lenguajes regulares funciona a través de gramáticas y se transfiere a gramáticas lineales inmediatamente (conmutatividad de multiplicación).

   [FlSe09] Combinatoria analítica de P. Flajolet y R. Sedgewick (2009) [Kuic70] Sobre la entropía de los lenguajes sin contexto de W. Kuich (1970)
  


13

Esta es una versión ampliada de mi respuesta desde aquí. Usar Pumping Lemma para probar el lenguaje no es regularL={(01)m2mm0} ya que se supone que es una pregunta de referencia.

Entonces, ¿crees que el lema de bombeo parece complicado? No te preocupes Aquí hay un enfoque ligeramente diferente, que también está oculto en la respuesta de @ Romuald. (Prueba: ¿dónde?)

Comencemos recordando que cada lenguaje regular es aceptado por un autómata determinista de estado finito (DFA). Un DFA es un gráfico dirigido finito donde cada vértice tiene exactamente un borde exterior para cada letra del alfabeto. Las cadenas le dan un paseo en el gráfico basado en un vértice etiquetado como "inicio", y el DFA acepta si este paseo termina en un vértice etiquetado como "aceptar". (Los vértices se llaman "estados" porque a las diferentes áreas de las matemáticas les gusta inventar su propia terminología para la misma cosa).

Con esta forma de pensar, es fácil ver que: si las cadenas y conducen el DFA al mismo estado, entonces para cualquier otra cadena , y conducen el DFA al mismo estado. b c a c b cabcacbc¿Por qué? Porque el punto de inicio de una caminata y la cadena que lo define determinan el final por completo.

Dicho de otra manera: si es regular y las cadenas y conducen un autómata de reconocimiento al mismo estado, entonces, para todas las cadenas , y están en o ninguno lo está.a b c a c b c LLabcacbcL

Podemos usar esto para mostrar los idiomas no son regulares, imaginando que es y luego subir con y conducir un DFA al mismo estado, y para que está en la lengua y no lo es. Tome el lenguaje de ejemplo de la respuesta de @ Dave. Imagine que es regular, por lo que tiene algo de reconocimiento de DFA con estados. El Principio de Pigeon Hole dice que al menos dos de envían el DFA al mismo estado, digamos y . Como , vemos que está en el lenguaje yabcacbcm{(01)i:0im+1}a=(01)pb=(01)qpqa2pb2p no lo es, por lo que este idioma no puede ser regular.

Lo bueno es que el ejemplo es realmente una plantilla para demostrar que los idiomas no son regulares:

  • Encuentre una familia de cadenas con la propiedad de que cada una de ellas tiene una "cola" para que esté en el idioma y , para no.{ai:iN}tiaitiaitjij
  • Aplique el argumento anterior literalmente. (Esto está permitido, ya que siempre hay suficientes para permitirle invocar el Principio de Pigeon Hole).ai

Hay otros trucos, pero este funcionará fácilmente en la mayoría de sus problemas de tarea.

Editar: Una versión anterior tenía una discusión sobre cómo esta idea se relaciona con el Lema de bombeo.


No creo que reproducir la prueba de Pumping Lemma sea útil en general, pero YMMV. Entender la prueba es bueno en cualquier caso; se conecta de inmediato con una serie de cierres y otras propiedades interesantes de autómatas finitos y lenguajes regulares. Sin embargo, estoy totalmente en desacuerdo con la última oración: la teoría de autómatas no es aburrida en absoluto, y ciertamente no es la parte más aburrida de las clases de teoría.
Raphael

@Louis En tu respuesta, cómo se te ocurrió esta afirmación we see that a2p is in the language and b2p is not, so this language can't be regular.en el último. Por favor, ¿puede dar un ejemplo
Himanshu

@Himanshu y tanto que llegan hasta el mismo estado . Por lo tanto, lo que leas después de eso ( aquí), te llevará al mismo estado , sin importar con qué empezaste: o . abq12pq2ab
Al.G.

7

Siguiendo la respuesta aquí , describiré un método para probar la no regularidad basado en la complejidad de Kolmogorv.

Este enfoque se discute en "Un nuevo enfoque para la teoría del lenguaje formal por la complejidad de Kolmogorov" , por Ming Li y Paul MB Vitanyi (ver sección 3.1).

Supongamos que denota la complejidad de Kolmogorov de una cadena , es decir, la longitud de la codificación más corta de una máquina de Turing , de modo que (cualquiera de las definiciones habituales servirá). Entonces se puede usar el siguiente lema para demostrar que no es regular:K(x)xMM(ϵ)=x

Regularidad KC : deje que sea ​​un lenguaje regular, entonces existe una constante que depende solo de , de modo que para todo , si es la cadena ( relativo al ordenamiento lexicográfico) en , luego .LΣcLxΣynthLx={yΣ|xyL}K(y)O(logn)+c

Uno puede entender (y probar) el lema anterior de la siguiente manera, para cualquier , para describir la cadena en uno necesita especificar:xΣnthLx

  • El autómata que aceptaL
  • El estado en el autómata después de procesar el prefijox
  • El índicen

Ya que sólo hay que recordar el estado después de la transformación , y no sí, podemos ocultar este factor en la constante que depende de . El índice requiere bits para describir, y obtenemos el resultado anterior (para completar, uno necesita agregar las instrucciones específicas requeridas para generar , pero esto solo agrega un factor constante a la descripción final).xxLnlogny

Este lema muestra cómo vincular la complejidad de Kolmogorov de todas las cadenas que son miembros de para algún lenguaje regular y . Para mostrar no regularidad, se puede suponer que es regular y demostrar que los límites son demasiado restrictivos (por ejemplo, la complejidad de Kolmogrov limitada para un conjunto infinito de cadenas).LxLxΣL

La respuesta vinculada anteriormente contiene un ejemplo de cómo usar este lema para mostrar no es regular, se dan varios ejemplos más en el documento. Para completar, mostramos aquí cómo probar no es regular.L={1p|p is prime}L={0n1n|n0}

Dados algunos , denotamos por la palabra en . Tenga en cuenta que . Usando el lema anterior, enfocándonos en los prefijos de la forma y fijando , obtenemos . Dado que , esto significa que podemos vincular la complejidad de Kolmogorov de todas las cadenas de la forma por una constante, que obviamente es falsa. Vale la pena mencionar que podríamos haber examinado una sola , por ejemplo, para suficientemente grandex{0,1}yixithLxy10i=1ixx=0in=1i0:K(y10i)cy10i=1i1ixx=0nnque satisface (comenzamos con un prefijo de alta complejidad). Como , obtenemos , contradicción (supongamos que ).K(0n)logny1x=1nK(1n)<cn>2c


7

En el caso de los idiomas unarios (idiomas sobre un alfabeto de tamaño 1), existe un criterio simple. Arreglemos un alfabeto , y para , defina {σ}AN

L(A)={σn:nA}.

Teorema. Deje . Los siguientes son equivalentes:AN

  1. L(A) es regular.

  2. L(A) tiene contexto.

  3. Existen tal que para todo , se cumple que si y sólo si . (Decimos que es eventualmente periódico ).n n 0 n A n + m A An0,m1nn0nAn+mAA

  4. Deje . Entonces es racional. 0. a 0 a 1 a 2ai=1iA0.a0a1a2

  5. La función generadora es una función racional.iAxi

El teorema se puede probar de muchas maneras, por ejemplo, usando el lema de bombeo, la teoría de Myhill-Nerode, el teorema de Parikh, la estructura de DFA en lenguajes unarios (se ven como un " ", como en el algoritmo Pollard), y pronto. Aquí hay un corolario útil.ρρρ

Corolario. Deje , y suponga que es regular. L ( A )ANL(A)

  1. El límite existe. (Esta es la densidad asintótica de ).ρ=limn|A{1,,n}|nA

  2. Si entonces es finito.ρ=0A

  3. Si entonces es cofinita (es decir, es finita).ρ=1AA¯

Como ejemplo, el lenguaje no es regular, ya que el conjunto tiene una densidad asintótica que desaparece, pero es infinito.L({2n:n0})


4

La clase de idiomas regulares se cierra bajo varias operaciones de cierre, como unión, intersección, complemento, homomorfismo, sustitución regular, homomorfismo inverso y más. Esto puede usarse para demostrar que un idioma dado no es regular mediante la reducción a un idioma que ya se sabe que no es regular.

Como un ejemplo muy simple, supongamos que sabemos que el idioma no es regular. Entonces podemos probar que el idioma (el idioma de todas las palabras con igual cantidad de sy s) no es regular de la siguiente manera:{anbn:n0}{w{a,b}:#a(w)=#b(w)}ab

Suponga que eran regulares. Entonces también sería regular. Pero , que se sabe que no es regular.L={w{a,b}:#a(w)=#b(w)}LabLab={anbn:n0}

Aquí hay un ejemplo más complicado. Demostremos que el lenguaje no es regular.L={(0+1)n2(0+1)n:n0}

Sea el mapeo de homomorfismo dado por , , . Si fuera regular, entonces también lo sería el siguiente lenguaje: . Sin embargo, sabemos que este último no es regular.hh(0)=0h(1)=1h(2)=ϵLh(L021)={0n1n:n0}

Finalmente, aquí hay un ejemplo que usa homomorfismo inverso. Demostremos que el lenguaje no es regular.L={0n10n:n0}

Sea el homomorfismo dado por , , . Si fuera regular, entonces sería, pero ese es solo el lenguaje del ejemplo anterior.kk(0)=0k(1)=0k(2)=1Lk1(L)L


3

Usa la teoría de Myhill – Nerode.

Deja que sea ​​un idioma. Decimos que dos palabras son no equivalentes módulo (o: con respecto a la ) si existe una palabra tal que exactamente uno de es en . En cualquier DFA para , (ejercicio). Esto implica el siguiente criterio:Lx,yLLzxz,yzLLδ(q0,x)δ(q0,y)

Deja que sea ​​un idioma. Suponga que existe un conjunto infinito de palabras no equivalentes por pares (es decir, un conjunto infinito tal que dos no iguales son módulos equivalentes ). Entonces no es regular.LSx,ySLL

Aquí hay un ejemplo simple de aplicar este criterio:

El lenguaje no es regular.L={anbn:n0}

Prueba. Deje . Afirmamos que cualesquiera dos palabras diferentes en son módulos equivalentes . De hecho, deje , donde . A continuación, , pero .S={an:n0}SLai,ajSijaibiLaibjL

Una característica importante de este método es que se garantiza su éxito: si no es regular, entonces existe un conjunto infinito de palabras no equivalentes por pares. Esto es una consecuencia del teorema de Myhill-Nerode . Brevemente, el módulo de equivalencia (la negación del módulo de desigualdad definido anteriormente) es una relación de equivalencia, y un lenguaje es regular si el número de clase de equivalencia del módulo de equivalencia es finito. Si no es regular, sacar una palabra de cada clase de equivalencia constituiría un conjunto infinito de palabras no equivalentes.LLLLLL


1

Dado un lenguaje , por cada cadena de existe un conjunto de cadenas tal que . Cada conjunto de este tipo podría usarse como un estado en una máquina de estados.LxyxyL

Todo lo que necesita hacer es demostrar que el número de tales conjuntos no es finito.

Como ejemplo, sea . Dado para algunos , la única cadena tal que es . Entonces, para cada tenemos un conjunto diferente, lo que significa que no es regular.L=anbn:n0x=anbn1yxyLy=bn1nL

Entonces, en general, si encuentra un conjunto infinito de cadenas tal que cada da un conjunto diferente entonces el lenguaje no puede ser reconocido por una máquina de estados finitos, y por lo tanto no es regular.xx{y:xyL}


¿No es solo Myhill-Nerode?
David Richerby
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.