Está en la página 1de 19

Captulo 12.

Propiedades de lenguajes independientes del contexto


12.1. Identificacin de lenguajes independientes del contexto
Lema de bombeo.

12.2. Propiedades
Cierre, Complemento de lenguajes, Sustitucin, Algoritmos de decisin.

12.1. Identificacin de Lenguajes independientes del contexto


Lema de Bombeo
Teorema: Sea L un lenguaje independiente del contexto. Entonces existe una constante n tal que, cualquier palabra xL con |x|n puede escribirse de la forma z=y.z.u.v.w, con las siguientes condiciones: 1. |z.u.v| n (la parte central no es demasiado larga) 2. |z.v| > 0 (por lo menos uno de los trozos que se bombean no esta vaco) 3. Para todo i0, y.zi.u.vi.w L. Es decir, las cadenas z y v pueden ser bombeadas y la cadena resultante es una palabra de L.

Ejemplos: L={anbn | n>=1} L={xxR | x{a,b}*, xR imagen inversa de x}

Tamao de los rboles de derivacin


Teorema: Sea G=(T,N,S,P) una GIC en FNC. Sea wT* una palabra de L(G) y A un rbol de derivacin cuyo resultado es w. Si la profundidad del rbol es n, entonces la longitud de w es menor o igual a 2n-1, es decir, |w|2n-1.

Ejemplo: rboles de GICs en FNC son binarios. n=3 |w|=322=4 S A a A a S S b n=3 |w|=422=4 A A a S b S A A a S c

Profundidad: la longitud del camino ms largo del rbol Camino: sucesin de arcos desde la raz hasta un nodo hoja Longitud de un camino: nmero de sus arcos

Demostracin: (por induccin) BASE: n=1. Por tanto, el rbol solo tiene dos niveles. Por definicin de los rboles de derivacin y dado que G est en FNC, un rbol de dos niveles cuyo resultado es una palabra wT* tiene solo dos nodos: la raz (S) y un nodo etiquetado con un smbolo terminal aT, y su resultado es a. Por lo tanto, w=a y |w|=1. Puesto que 2n-1=20=1, se cumple |w|2n-1. PASO INDUCTIVO: Suponiendo que el teorema se cumple para rboles de profundidad n, se demuestra que se cumple tambin para rboles de profundidad n+1. hiptesis inductiva: Dado un rbol de profundidad n con resultado wT*, se cumple |w|2n-1. paso de n a n+1: (se demuestra que, para un rbol de profundidad n+1 con resultado w, se cumple |w| 2n) Sea un rbol de profundidad n+1, se demuestra que como n+1>1, la raz del rbol tiene que usar una produccin SAB (no se podra usar Sa siendo a un terminal). Por tanto la derivacin de w tiene la forma SAB*w y se puede descomponer en w=u.v tal que A*u y B*v. Obviamente, la profundidad de los subrboles (para A*u y B*v ) no puede ser mayor que n, puesto que la profundidad del rbol entero es n+1 y se excluye el primer nivel. Por la hiptesis de induccin, se cumple que |u|2n-1 y |v|2n-1 Dado que w=u.v, se sigue que |w| = |u|+|v| 2n-1+2n-1=2n. 4

Corolario: Sea G=(T,N,S,P) una GIC en FNC. Sea wT* cualquier palabra de L(G). Sea m un nmero tal que |w|2m. La profundidad de cualquier rbol de derivacin para la palabra w es mayor o igual a m+1. Demostracin: Segn el teorema de antes, un rbol de derivacin de profundidad m solo puede tener un resultado w con |w|2m-1. Por tanto, para derivar una palabra w con |w|2m se requiere un rbol de profundidad mayor o igual a m+1.

Demostracin del Lema de bombeo:


CASOS ESPECIALES: L=, L es finito No se viola el lema. Elegimos cualquier n>0, tal que, |x|<n, para cualquier xL. El lema dice que cualquier palabra x con |x|n cumple las condiciones, pero como no hay palabras con |x|n no se pueden violar las condiciones. CASO NORMAL: L es infinito Sea G=(T,N,S,P) una GIC en FNC que genera este lenguaje. (dado que L es un lenguaje independiente del contexto, existe una GIC que genera L, y ya se ha demostrado tambin que toda GIC tiene una GIC en FNC equivalente). Si L contiene la palabra vaca, se demuestra el lema para L-{} (se quita la regla S::= de G). En general, como constante del lema se elige n>0 por lo que la palabra con ||=0 no tiene importancia.

Supongamos que G tiene m variables (|N|=m). Elegimos n=2m y suponemos una palabra genrica xL con |x|n (es decir, |x|2m). Segn el corolario, para derivar x, se requiere un rbol de profundidad mayor o igual a m+1, es decir con al menos un camino que pasa por m+1=|N| +1 nodos con smbolos no terminales. Como slo hay |N| smbolos no terminales en G, por lo menos uno estar repetido en dicho camino. rbol de derivacin de x: S y z A A u w v m+1=|N|+1 smbolos no teminales

Primera condicin: Sea A el primer smbolo no terminal que se repite (visto desde abajo) en el camino ms largo (o uno de ellos). Es decir, en el camino ms largo del subrbol desde A no se repite ningn otro smbolo no terminal salvo A (y solo una vez). La profundidad de este subrbol es menor o igual que m+1=|N|+1 (como mucho aparecen todos los smbolos no terminales y uno dos veces) y el resultado del subrbol desde A es z.u.v. De acuerdo con el teorema de antes, cualquier resultado de un rbol de profundidad menor o igual que m+1, tiene una longitud menor o igual a 2m. Por tanto, se verifica |z.u.v|2m, es decir, |z.u.v|n. Tercera condicin: El rbol esquemtico corresponde a una derivacin: S*yAw*yzAvw*yzuvw Por tanto, existen las derivaciones A*zAv y tambin A*u. Usando solo la segunda, desde S tambin se puede derivar: S*yAw *yuw que equivale a la palabra yziuviw con i=0. Adems, se puede derivar: S*yAw*yzAvw*yzzAvvw *...*yziAviw*yziuviw es decir todas las palabras yziuviw para i=1,2.... Segunda condicin: Dado que G no contiene reglas unitarias ni reglas- la derivacin A*zAv no puede tener la forma A*A, eso es, por lo menos uno, z o v, debe ser distinto de . Por tanto se cumple |z.v|>0. Estos tres pasos demuestran el lema. 8

Aplicacin del lema de Bombeo


Para que sirve el lema de bombeo? Para demostrar que ciertos lenguajes no son independientes del contexto. No se puede demostrar que un lenguaje es independiente del contexto. Hay lenguajes que no son independientes del contexto pero s cumplen el lema de bombeo. PERO: no hay ningn lenguaje independiente del contexto que no cumpla el lema. Para demostrar que un lenguaje no es independiente del contexto basta probar que no cumple el lema de bombeo. (A veces funciona a veces no.) Mtodo: Por reduccin al absurdo. Se supone que L es independiente del contexto (por tanto debe cumplir el lema de bombeo) y se demuestra que no lo cumple. Hay que demostrar que para cualquier n existe un xL con xn tal que para cualquier descomposicin de x=y.z.u.v.w con |z.v|>0 y |z.u.v|n existe algn y.zi.u.vi.w (con i=0,1,2,...) que no pertenece a L.

Ejemplo:

L={ambmcm| m>0}

1. supongamos que L es independiente del contexto. 2. elegimos un n arbitrario como constante del lema 3. seleccionamos un x L con |x|n: x=anbncn 4. Descomponemos x= anbncn =y.z.u.v.w de todas formas posibles donde |z.v|>0 y |z.u.v|n. Dado la ltima condicin (|z.u.v|n) no es posible que z.u.v contenga as y cs a la vez. Adems, dado que |z.v|>0 por lo menos uno de los dos tiene que ser distinto de . Para que el lenguaje cumpla el lema de bombeo, debe ser posible bombear las palabras en z y v (y.zi.u.vi.w), aadiendo el mismo nmero de as, bs y cs. Sin embargo, por las dos condiciones de arriba, cualquiera cadenas que sean z y v, al bombearlos (zi y vi) no se puede aadir nunca el mismo nmero de as, bs y cs. Por lo tanto no se cumple el lema de bombeo. La suposicin de que L fuese independiente del contexto es errnea. L no es independiente del contexto

10

12.2. Propiedades

Propiedades de cierre

Clausura, concatenacin y unin


Teorema: El conjunto de lenguajes independientes del contexto (Lic_) es cerrado respecto a la concatenacin, la unin y la clausura.

Demostracin: Sean las gramticas G1=(1T,1N,S1,P1) y G2=(2T,2N,S2,P2) dos GIC que representan a dos lenguajes indep. del contexto L(G1) y L(G2). Supondremos que 1N y 2N no tienen smbolos comunes.

11

1. Concatenacin: Construimos una gramtica G=(1T2T, 1N2N{S}, S, P) donde: P=P1P2{S::=S1S2} y S1N2N (Obviamente G es una gramtica independiente del contexto.) Vamos a demostrar que una palabra est en L(G) si y solo si est en L(G1).L(G2). (Se demuestra que L(G)= L(G1).L(G2)). SI: (L(G)L(G1).L(G2)) Sea z.y con zL(G1) e yL(G2), es decir, z.y L(G1).L(G2). Por tanto existen las derivaciones S1*z y S2*y en G1 y G2, respectivamente. Por tanto, considerando G, existe la derivacin SS1S2*zS2*zy y se sigue que z.yL(G). SOLO SI: (L(G)L(G1).L(G2)) Sea xL(G). Con G existe la derivacin SS1S2*x. Para que eso sea as y dado que G es una gramtica independiente del contexto, debe existir alguna descomposicin x=z.y con S1*z y S2*y. Eso, a su vez, implica que zL(G1) e yL(G2) y, por tanto, se verifica que x=z.y pertenece a L(G1).L(G2).

12

2. Unin: Construimos una gramtica G=(1T2T, 1N2N{S}, S, P) donde: P=P1P2{S::=S1|S2} y S1N2N (Obviamente G es una gramtica independiente del contexto.) Vamos a demostrar que una palabra est en L(G) si y solo si est L(G1) L(G2). (Se demuestra que L(G)= L(G1) L(G2)). SI: (L(G)L(G1) L(G2)) Parte 1: (L(G)L(G1)) Sea zL(G1). Por tanto existen las derivaciones S1*z en G1. Por tanto, considerando G, existe la derivacin SS1*z y se sigue que zL(G). Parte 2: (L(G)L(G2)) Sea zL(G2). Por tanto existen las derivaciones S2*z en G2. Por tanto, considerando G, existe la derivacin SS2*z y se sigue que zL(G). SOLO SI: (L(G)L(G1) L(G2)) Sea xL(G). Por construccin de G existe una de las siguientes derivaciones SS1*x o SS2*x. Es decir, existe una derivacin S1*x o S2*x. Eso, a su vez, implica que xL(G1)L(G2).

13

3. Clausura: Construimos una gramtica G=(1T, 1N{S}, S, P) donde: P=P1{S::=S1S | } y S1N (Obviamente G es una gramtica independiente del contexto.) Vamos a demostrar que una palabra est en L(G) si y solo si est L(G1)*. (Se demuestra que L(G)= L(G1)*). SI: (L(G) L(G1)*) Sea zL(G1)*. Por definicin de L(G1)*, se cumple que z= o z=z1.z2....zn con ziL(G1). Caso 1: z= En G existe la derivacin S, por lo que zL(G). Caso 2: z= z1.z2....zn con ziL(G1) Obviamente, para cada zi existe una derivacin S1*zi en G1. Considerando G, existe la derivacin SS1S*z1S z1S1S*... z1...znS z1...zn por lo que se sigue que z= z1....zn L(G). SOLO SI: (L(G) L(G1)*) : Sea xL(G). Por construccin de G se deriva x de una de las siguientes derivaciones: S o SS1S* S1 S1.... S1 S S1 S1.... S1*x. Caso 1: S Por definicin tambin pertenece a L(G1)*. Caso 2: SS1S* S1 S1.... S1 S S1 S1.... S1*x Dado que G es una GIC, se sigue que x=x1x2...xn tal que para cada xi existe la derivacin S1*xi. Por la construccin de G se sigue que todos los xi pertenecen a L(G). Dada la definicin de L(G1)*=, se verifica que x=x1x2...xnL(G1)*. 14

Interseccin y Complemento
Teorema: El conjunto de lenguajes independientes del contexto no es cerrado respecto a la interseccin y la complementacin. Demostracin: 1. Interseccin (Basta encontrar un contraejemplo.): Sean G1 y G2 dos GICs S::=AB C::=DE A::=aAb | ab E::=bEc | bc B::=cB | c D::=aD | a 1 n n m representando L(G )={a b c |m,n>0} y L(G1)={ambncn|m,n>0}. Obviamente, L(G1) y L(G2) son lenguajes independientes del contexto y su interseccin L(G1)L(G2) es el lenguaje L={anbncn|n>0}. Ya hemos demostrado que L no es un lenguaje independiente del contexto (lema de bombeo). 2. Complementacin (por reduccin al absurdo): Suponiendo que LLic_: c(L)Lic_. Sean L1,L2Lic_. Por la suposicin se sigue que c(L1) y c(L2)Lic_. Por tanto, como ya hemos visto (unin), se verifica que tambin c(L1)c(L2)Lic_. Y con la suposicin de arriba se verifica que c(c(L1)c(L2))Lic_. De acuerdo con las leyes de De Morgan: c(c(L1)c(L2))=L1L2. Se verifica L1,L2Lic_: L1L2Lic_. Ya hemos visto que eso es falso, por lo que se concluye que la suposicin inicial es incorrecta, es decir, el conjunto de lenguajes independientes del contexto no est cerrado respecto a la complementacin.

15

Ms propiedades:
Teorema: Sea L1 y L2 dos lenguajes independientes del contexto y L3 un lenguaje regular. Se verifica lo siguiente: 1. L1L3 es un lenguaje independiente del contexto. 2. L1 L3 es un lenguaje independiente del contexto. 3. L1 L2 no necesariamente es un lenguaje independiente del contexto. (nos ahorramos las demostraciones)

16

Sustituciones
Sean y dos alfabetos. Se define una sustitucin s sobre en como la aplicacin s: P(*), que asigna a cada smbolo a de un lenguaje La *. La sustitucin se extiende a palabras x=x1x2...xn de la siguiente forma: s(x1x2...xn)= s(x1).s(x2)...s(xn) (concatenacin de lenguajes) Se extiende s a lenguajes: s(L)= s(x)
x L

Ejemplo: Lenguaje L definido por E::=(E) | E+E | E*E | i Sustitucin: s(()={(}, s())={)}, s(+)={+}, s(*)={*}, s(i)= lenguaje definido por 0+((1+...+9)(0+...+9)*) L={i, (i), i+i, i*i, (i+i)*i, ...} s(L)={2, (45), 67+3, 9*0, (9+33)*99, ...} Teorema: Sea L un lenguaje independiente del contexto sobre el alfabeto y s una sustitucin sobre en . Si para cada a, s(a) es un lenguaje independiente del contexto, entonces s(L) es un lenguaje independiente del contexto. Idea de la demostracin: Por construccin de una gramtica para s(L) a partir de las GIC: GL=(, NL,S,P) y Ga=(, Na,Sa,Pa) para todo a.

17

Algunos algoritmos de decisin para lenguajes generados por una GIC Lema
Existe un algoritmo para reconocer si el lenguaje generado por una GIC es vaco. Demostracin: Sea la GIC G = (T , N , S, P). Obviamente, si L(G)=, no existe ninguna derivacin de la forma S*x, con xT*, es decir, S es un smbolo superfluo. Existe un algoritmo para eliminar los smbolos superfluos de cualquier GIC. Algoritmo (para comprobar si L(G)=): 1. 2. Aplicar el algoritmo de eliminacin de smbolos superfluos a G, obteniendo G=(T , N , S, P). L(G) es vaco si y solo si en este algoritmo se elimina el smbolo S como smbolo superfluo.

Ejemplo: G= ( {a,b} {A,B,S}, S, { S::=bA | baS | B , A::= Aa , B::=Bb} )

18

Lema
Existe un algoritmo para reconocer si el lenguaje generado por una GIC es infinito Demostracin Sea la GIC G = (T , N , S, P). Se define el algoritmo: Primero, se usa el algoritmo anterior para ver si L(G) es vaco. Si lo es, entonces L es finito (vaco). Si no lo es, entonces seguimos: Hay dos pasos: 1. Primero se convierte G en una gramtica bien formada G = (T , N , S, P). 2. Construimos un grafo cuyos nodos son los smbolos de N. Para cada par de nodos (A, B), se aade un arco de A a B si existe una regla A ::= B, con , * y BN (A y B pueden ser iguales) 3. Si existen ciclos en este grafo, entonces L(G) es infinito. En caso contrario L(G) es finito. (Los ciclos corresponden a derivaciones de la forma A*A, con ||+||>0). Ejemplo: G= ({a,b} {A,B,S}, S,{ S::=bA | baS | B, A::= Aa , B::=bb | b})

19

También podría gustarte