5.8. EQUIVALENCIA ENTRE LLC Y AUTÓMATAS APILADORES 99 ✷Teorema 26 Si L es N(M) para algún AA, M, entonces L es un lenguaje libre <strong>de</strong> contexto.Demostración : Sea M el AA Q, Σ, Γ, δ, q 0 , Z 0 , ∅). Sea G = (V, Σ, P, S) una gramática libre <strong>de</strong> contexto enque V es un conjunto <strong>de</strong> objetos <strong>de</strong> la forma [q, A, p], en que q y p ∈ Q y A ∈ Γ, a<strong>de</strong>más <strong>de</strong> un nuevo símboloS. P es el conjunto <strong>de</strong> producciones1. S → [q 0 , Z 0 , q] ∀q ∈ Q2. [q, A, q M+1 ] → a [q 1 , B 1 , q 2 ] [q 2 , B 2 , q 3 ] . . . [q M , B M , q M+1 ] para cada q, q 1 , q 2 , . . . , q M+1 ∈ Q, cada a ∈Σ ∪ {ε} y A, B 1 , B 2 , . . . , B M en Γ tales que δ(q, a, A) contiene (q 1 , B 1 B 2 . . . B M ). Si M = 0, la producciónes [q, A, q 1 ] → a.Las variables y producciones <strong>de</strong> G se han <strong>de</strong>finido <strong>de</strong> forma que una <strong>de</strong>rivación por la izquierda <strong>de</strong> Xen G es una simulación <strong>de</strong>l AA, M, en input X. En particular las variables que aparecen en cualquier paso<strong>de</strong> una <strong>de</strong>rivación por la izquierda en G, correspon<strong>de</strong>n a los símbolos en el stack <strong>de</strong> M al momento en queM ha visto tanto <strong>de</strong>l input como lo generado por la gramática. Puesto <strong>de</strong> otra forma, la intención es que[q, A, p] <strong>de</strong>rive X si y sólo si X hace que M elimine una A <strong>de</strong> su stack usando una secuencia <strong>de</strong> movidas quecomienzan en el estado q y terminan en el estado p.Para mostrar que L(G) = N(M), se prueba por inducción en el número <strong>de</strong> pasos en una <strong>de</strong>rivación <strong>de</strong> Go número <strong>de</strong> movidas <strong>de</strong> M, que[q, A, p] ⇒ G∗X ssi (q, X, A)⊢M∗(p, ε, ε)Primero se muestra por inducción en i, que si (q, X, A) ⊢(p, i ∗ε, ε) entonces [q, A, p] ⇒ X. Si i = 1 entoncesδ(q, X, A) <strong>de</strong>be contener (p, ε). Aquí X es ε o un símbolo simple. Por lo tanto [q, A, p] → X es una producción<strong>de</strong> G. Si i > 1, sea X = aY y(q, aY, A) ⊢ (q 1 , Y, B 1 B 2 . . . B N ) i−1⊢ (p, ε, ε)el string Y pue<strong>de</strong> escribirse Y = Y 1 Y 2 . . . Y N en que Y j tiene el efecto <strong>de</strong> hacer pop <strong>de</strong> B j <strong>de</strong>s<strong>de</strong> el stack(posiblemente <strong>de</strong>spués <strong>de</strong> muchas movidas). Esto es, sea Y 1 el prefijo <strong>de</strong> Y al fin <strong>de</strong>l cual el stack por primeravez llega a tener N − 1 símbolos. Sea Y 2 el substring <strong>de</strong> Y que sigue a Y 1 , tal que al final <strong>de</strong> Y 2 por primeravez el stack tiene N − 2 símbolos, y así sucesivamente.Nótese que B 1 no es necesariamente el n-ésimo símbolo en el stack durante el tiempo en que Y 1 está siendoleido por M; B 1 pue<strong>de</strong> ser cambiado si está al tope <strong>de</strong>l stack y ser reemplazado por uno o más símbolos.Sin embargo, ninguno <strong>de</strong> B 2 , B 3 , . . . , B N están nunca al tope mientras Y 1 está siendo leido, por lo tanto nopue<strong>de</strong>n ser cambiados ni influenciar las movidas. En general B j permanece sin cambios en el stack mientrasY 1 , . . . , Y j−1 es leido.Existen estados q 2 , q 3 , . . . , q N+1 = p tales que(q j , Y j , B j ) ∗ ⊢(q j+1 , ε, ε)en menos <strong>de</strong> i movidas <strong>de</strong> M (q j es el estado al que se entra cuando por primera vez el stack tiene n − j + 1símbolos). Por la hipótesis <strong>de</strong> inducción[q j , B j , q j+1 ] ∗ ⇒Y j (1 ≤ j ≤ N)De la primera movida: (q, aY, A) ⊢ (q 1 , Y, B 1 B 2 . . . B N ) se sabe que[q, A, p] ⇒ a [q 1 , B 1 , q 2 ] [q 2 , B 2 , q 3 ] . . . [q N , B N , q N+1 ]y por lo tanto[q, A, p] ∗ ⇒aY 1 Y 2 . . . Y N = aY = X
100 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOiSupóngase ahora que [q, A, p] ⇒ X, se muestra, por inducción en i, que (q, X, A) ⊢(p, ∗ ε, ε). La base, i = 1,es inmediata ya que [q, A, p] → X <strong>de</strong>be ser una producción <strong>de</strong> G y por lo tanto δ(q, X, A) <strong>de</strong>be contener(p, ε). Nótese que X es ε o está en Σ.Para la inducción suponga[q, A, p] ⇒ a [q 1 , B 1 , q 2 ] . . . [q N , B N , q N+1 ] i−1⇒ Xen que q N+1 = p. Se pue<strong>de</strong> escribir X = aX 1 X 2 . . . X N en que [q j , B j , q j+1 ] ∗ ⇒X j , (1 ≤ j ≤ N), y con cada<strong>de</strong>rivación en menos <strong>de</strong> i-pasos. Por la hipótesis <strong>de</strong> inducción(q j , X j , B j ) ∗ ⊢(q j+1 , ε, ε) (1 ≤ j ≤ n)Si se inserta B j+1 . . . B N al fondo <strong>de</strong>l stack en la secuencia anterior <strong>de</strong> DI’s, se ve que(q, X, A) ⊢ (q 1 , X 1 X 2 . . . X N , B 1 B 2 . . . B N )es una movida <strong>de</strong> M y, por lo tanto, usando la anterior para j = 1, 2, . . . , N, se tiene que(q, X, A) ∗ ⊢(p, ε, ε)La <strong>de</strong>mostración concluye con la observación <strong>de</strong> que si q = q 0 y A = Z 0 , se ha probado que[q 0 , Z 0 , p] ∗ ⇒X ssi (q 0 , X, Z 0 ) ∗ ⊢(p, ε, ε)Esta observación, junto con la primera regla para construir G, dicen queS ∗ ⇒X ssi (q 0 , X, Z 0 ) ∗ ⊢(p, ε, ε)para algún estado p. Es <strong>de</strong>cir, X ∈ L(G) ssi X ∈ N(M)Ejemplo 77 Sea M = ({q 0 , q 1 }, {0, 1}, {X, Z 0 }, δ, q 0 , Z 0 , ∅) con δ dada porδ(q 0 , 0, Z 0 ) = {(q 0 , XZ 0 )}δ(q 0 , 0, X) = {(q 0 , XX)}δ(q 0 , 1, X) = {(q 1 , ε)}δ(q 1 , 1, X) = {(q 1 , ε)}δ(q 1 , ε, X) = {(q 1 , ε)}δ(q 1 , ε, Z 0 ) = {(q 1 , ε)}Para construir una gramática libre <strong>de</strong> contexto, G = (V, T, P, S), que genere N(M), seaV = {S, [q 0 , X, q 0 ] , [q 0 , X, q 1 ] , [q 1 , X, q 0 ] , [q 1 , X, q 1 ] ,[q 0 , Z 0 , q 0 ] , [q 0 , Z 0 , q 1 ] , [q 1 , Z 0 , q 0 ] , [q 1 , Z 0 , q 1 ]}y Γ = {0, 1}.Para construir el conjunto <strong>de</strong> producciones con facilidad, es útil darse cuenta que algunas variables pue<strong>de</strong>nno aparecer en <strong>de</strong>rivaciones que comienzan con S. Se pue<strong>de</strong> ahorrar algo <strong>de</strong> esfuerzo si se comienza con lasproducciones-S y se agregan aquellas para variables que aparecen en el lado <strong>de</strong>recho <strong>de</strong> alguna ya incluidaen P .Las producciones para S sonS → [q 0 , Z 0 , q 0 ]S → [q 0 , Z 0 , q 1 ]✷