Hub / LF / Parciales / Quiz de practica — Parcial 2

Quiz de practica — Parcial 2

Parcial 2 • Dificultad: medium

Quiz de practica — Parcial 2

Temas: Automatas de pila (PDA), propiedades de los LLC, maquinas de Turing, computabilidad, jerarquia de Chomsky. Repaso acumulativo: DFA, NFA, CFG, expresiones regulares, lema de bombeo.

Instrucciones: Resuelva cada pregunta con notacion formal completa. Justifique sus respuestas.


Pregunta 1 — Diseno de PDA (7-tupla)

Disenar un automata de pila (PDA) que acepte por estado final el lenguaje:

L={anbnn1}L = \{a^n b^n \mid n \geq 1\}

Dar la 7-tupla completa M=(Q,Σ,Γ,δ,q0,Z0,F)M = (Q, \Sigma, \Gamma, \delta, q_0, Z_0, F) y la funcion de transicion δ\delta.

Ver respuesta

M=({q0,q1,qf},{a,b},{X,Z0},δ,q0,Z0,{qf})M = (\{q_0, q_1, q_f\}, \{a, b\}, \{X, Z_0\}, \delta, q_0, Z_0, \{q_f\})

Transiciones:

δ(q0,a,Z0)={(q0,XZ0)}δ(q0,a,X)={(q0,XX)}δ(q0,b,X)={(q1,ε)}δ(q1,b,X)={(q1,ε)}δ(q1,ε,Z0)={(qf,Z0)}\begin{aligned} \delta(q_0, a, Z_0) &= \{(q_0, XZ_0)\} \\ \delta(q_0, a, X) &= \{(q_0, XX)\} \\ \delta(q_0, b, X) &= \{(q_1, \varepsilon)\} \\ \delta(q_1, b, X) &= \{(q_1, \varepsilon)\} \\ \delta(q_1, \varepsilon, Z_0) &= \{(q_f, Z_0)\} \end{aligned}

Idea: En q0q_0 se apilan XX‘s por cada aa. Al leer la primera bb, se transita a q1q_1 desapilando. En q1q_1 se desapila una XX por cada bb. Si la pila queda con solo Z0Z_0, se acepta. Se requiere n1n \geq 1 porque no hay transicion δ(q0,ε,Z0)qf\delta(q_0, \varepsilon, Z_0) \to q_f.


Pregunta 2 — Traza de ejecucion del PDA

Usando el PDA de la Pregunta 1, realizar la traza completa de ejecucion (descripcion instantanea) para la cadena w=aabbw = aabb.

Ver respuesta(q0,  aabb,  Z0)(q0,  abb,  XZ0)apilar X(q0,  bb,  XXZ0)apilar X(q1,  b,  XZ0)desapilar X(q1,  ε,  Z0)desapilar X(qf,  ε,  Z0)aceptar\begin{aligned} (q_0,\; aabb,\; Z_0) &\vdash (q_0,\; abb,\; XZ_0) &\quad \text{apilar } X \\ &\vdash (q_0,\; bb,\; XXZ_0) &\quad \text{apilar } X \\ &\vdash (q_1,\; b,\; XZ_0) &\quad \text{desapilar } X \\ &\vdash (q_1,\; \varepsilon,\; Z_0) &\quad \text{desapilar } X \\ &\vdash (q_f,\; \varepsilon,\; Z_0) &\quad \text{aceptar} \quad \checkmark \end{aligned}

La cadena es aceptada porque se consume toda la entrada y se alcanza el estado final qfq_f.


Pregunta 3 — Conversion de CFG a PDA

Dada la gramatica libre de contexto G=(V,Σ,R,S)G = (V, \Sigma, R, S):

SaSbABAaAεBbBε\begin{aligned} S &\to aSb \mid AB \\ A &\to aA \mid \varepsilon \\ B &\to bB \mid \varepsilon \end{aligned}

Construir el NPDA de estado unico equivalente que acepte L(G)L(G) por pila vacia, usando el metodo estandar de conversion CFG \to PDA.

Ver respuesta

M=({q},{a,b},{S,A,B,a,b},δ,q,S)M = (\{q\}, \{a, b\}, \{S, A, B, a, b\}, \delta, q, S)

Transiciones de produccion (reemplazar variable en tope de pila por lado derecho):

δ(q,ε,S)={(q,aSb),  (q,AB)}δ(q,ε,A)={(q,aA),  (q,ε)}δ(q,ε,B)={(q,bB),  (q,ε)}\begin{aligned} \delta(q, \varepsilon, S) &= \{(q, aSb),\; (q, AB)\} \\ \delta(q, \varepsilon, A) &= \{(q, aA),\; (q, \varepsilon)\} \\ \delta(q, \varepsilon, B) &= \{(q, bB),\; (q, \varepsilon)\} \end{aligned}

Transiciones de emparejamiento (consumir terminal si coincide con tope):

δ(q,a,a)={(q,ε)}δ(q,b,b)={(q,ε)}\begin{aligned} \delta(q, a, a) &= \{(q, \varepsilon)\} \\ \delta(q, b, b) &= \{(q, \varepsilon)\} \end{aligned}

Nota: El PDA simula una derivacion por la izquierda. La pila almacena la forma sentencial restante. Se acepta cuando la pila queda vacia y la entrada se ha consumido.


Pregunta 4 — Propiedades de los LLC (Verdadero o Falso)

Para cada afirmacion, indicar si es verdadera (V) o falsa (F). Justificar brevemente.

(a) Los lenguajes libres de contexto son cerrados bajo union.

(b) Los lenguajes libres de contexto son cerrados bajo interseccion.

(c) Los lenguajes libres de contexto son cerrados bajo complemento.

(d) La interseccion de un lenguaje libre de contexto con un lenguaje regular siempre es libre de contexto.

(e) Si L1L_1 es libre de contexto y L2L_2 es regular, entonces L1L2L_1 \setminus L_2 es libre de contexto.

Ver respuesta

(a) Verdadero. Si G1G_1 genera L1L_1 y G2G_2 genera L2L_2 (con variables disjuntas), se construye GG con nueva variable inicial SS1S2S \to S_1 \mid S_2. Entonces L(G)=L1L2L(G) = L_1 \cup L_2.

(b) Falso. Contraejemplo clasico: L1={anbncmn,m0}L_1 = \{a^n b^n c^m \mid n, m \geq 0\} y L2={ambncnn,m0}L_2 = \{a^m b^n c^n \mid n, m \geq 0\} son ambos LLC, pero L1L2={anbncnn0}L_1 \cap L_2 = \{a^n b^n c^n \mid n \geq 0\} no es libre de contexto.

(c) Falso. Si los LLC fueran cerrados bajo complemento, por las leyes de De Morgan (L1L2=L1L2L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}) tambien serian cerrados bajo interseccion, lo cual contradice (b).

(d) Verdadero. Se demuestra con la construccion producto: dado un PDA PP para L1L_1 y un DFA DD para L2L_2, se construye un PDA que simula ambos en paralelo. El PDA resultante acepta L1L2L_1 \cap L_2.

(e) Verdadero. Se tiene L1L2=L1L2L_1 \setminus L_2 = L_1 \cap \overline{L_2}. Como L2L_2 es regular, L2\overline{L_2} es regular (los regulares son cerrados bajo complemento). Por (d), la interseccion de un LLC con un regular es LLC.


Pregunta 5 — Lema de bombeo para LLC

Demostrar que el lenguaje L={anbncnn0}L = \{a^n b^n c^n \mid n \geq 0\} no es libre de contexto, usando el lema de bombeo para lenguajes libres de contexto.

Ver respuesta

Lema de bombeo (CFL): Si LL es un LLC, entonces existe p1p \geq 1 tal que toda cadena zLz \in L con zp|z| \geq p se puede descomponer como z=uvwxyz = uvwxy donde:

  1. vwxp|vwx| \leq p
  2. vx1|vx| \geq 1
  3. Para todo i0i \geq 0: uviwxiyLuv^iwx^iy \in L

Demostracion por contradiccion:

Supongamos que LL es libre de contexto. Sea pp la constante del lema de bombeo. Elegimos z=apbpcpLz = a^p b^p c^p \in L, con z=3pp|z| = 3p \geq p.

Por el lema, z=uvwxyz = uvwxy con vwxp|vwx| \leq p y vx1|vx| \geq 1.

Como vwxp|vwx| \leq p, la subcadena vwxvwx no puede contener simultaneamente aa‘s y cc‘s (estan separadas por pp caracteres bb). Por lo tanto, vxvx contiene a lo sumo dos de los tres simbolos.

Caso 1: vxvx contiene solo aa‘s y/o bb‘s (no contiene cc‘s). Entonces uv2wx2yuv^2wx^2y tiene mas aa‘s o bb‘s que cc‘s, asi que uv2wx2yLuv^2wx^2y \notin L.

Caso 2: vxvx contiene solo bb‘s y/o cc‘s (no contiene aa‘s). Entonces uv2wx2yuv^2wx^2y tiene mas bb‘s o cc‘s que aa‘s, asi que uv2wx2yLuv^2wx^2y \notin L.

En todos los casos, bombear con i=2i = 2 produce una cadena fuera de LL, contradiciendo el lema. Por lo tanto, LL no es libre de contexto. \blacksquare


Pregunta 6 — Maquina de Turing: diseno informal

Disenar informalmente una maquina de Turing que reconozca el lenguaje de los palindromos sobre Σ={a,b}\Sigma = \{a, b\}:

L={w{a,b}w=wR}L = \{w \in \{a, b\}^* \mid w = w^R\}

Describir los estados, la estrategia general, y el movimiento de la cabeza. No es necesario dar la tabla de transiciones completa, pero si la idea de cada fase del algoritmo.

Ver respuesta

Estrategia: Comparar el primer simbolo con el ultimo, luego el segundo con el penultimo, y asi sucesivamente.

Estados:

  • q0q_0: estado inicial. Leer el primer simbolo de la cinta.
  • qaq_a: se leyo una aa al inicio. Buscar el final para verificar que tambien sea aa.
  • qbq_b: se leyo una bb al inicio. Buscar el final para verificar que tambien sea bb.
  • qvolverq_{\text{volver}}: regresar la cabeza al inicio (al primer simbolo no marcado).
  • qaceptarq_{\text{aceptar}}: estado de aceptacion.
  • qrechazarq_{\text{rechazar}}: estado de rechazo.

Algoritmo:

  1. Leer y marcar el primer simbolo. En q0q_0, leer el simbolo bajo la cabeza. Si es blanco (\sqcup), aceptar (cadena vacia o todos los simbolos ya fueron verificados). Si es aa, reemplazarlo por XX, ir a qaq_a. Si es bb, reemplazarlo por XX, ir a qbq_b.

  2. Mover al final. En qaq_a o qbq_b, mover la cabeza a la derecha hasta encontrar \sqcup o XX, luego retroceder una posicion para posicionarse sobre el ultimo simbolo no marcado.

  3. Verificar el ultimo simbolo. Si el simbolo coincide con el primero (ej: qaq_a y se lee aa), marcarlo con XX e ir a qvolverq_{\text{volver}}. Si no coincide, ir a qrechazarq_{\text{rechazar}}. Si ya esta marcado (solo quedaba un simbolo), aceptar.

  4. Regresar al inicio. En qvolverq_{\text{volver}}, mover la cabeza a la izquierda hasta encontrar XX, luego avanzar una posicion a la derecha y volver a q0q_0.

  5. Repetir hasta aceptar o rechazar.

Complejidad: O(n2)O(n^2) pasos para una cadena de longitud nn.


Pregunta 7 — Jerarquia de Chomsky

Clasificar cada uno de los siguientes lenguajes en el nivel mas restrictivo de la jerarquia de Chomsky al que pertenecen. Justificar brevemente.

(a) L1={w{0,1}w contiene un numero par de 0’s}L_1 = \{w \in \{0, 1\}^* \mid w \text{ contiene un numero par de } 0\text{'s}\}

(b) L2={anbnn0}L_2 = \{a^n b^n \mid n \geq 0\}

(c) L3={anbncnn0}L_3 = \{a^n b^n c^n \mid n \geq 0\}

(d) L4={ww codifica una MT que se detiene con entrada vacia}L_4 = \{w \mid w \text{ codifica una MT que se detiene con entrada vacia}\}

Ver respuesta

(a) Tipo 3 — Lenguaje regular.

Se reconoce con un DFA de dos estados que alterna entre “par” e “impar” al leer un 00. La expresion regular es: (1*01*01*)*1*. Pertenece al nivel mas bajo de la jerarquia.

(b) Tipo 2 — Lenguaje libre de contexto (no regular).

Es generado por la gramatica SaSbεS \to aSb \mid \varepsilon (tipo 2). No es regular: el lema de bombeo para lenguajes regulares lo demuestra facilmente (bombeando apbpa^p b^p, se desbalancea la cantidad de aa‘s y bb‘s).

(c) Tipo 1 — Lenguaje sensible al contexto (no libre de contexto).

Se demostro en la Pregunta 5 que no es LLC. Sin embargo, es sensible al contexto: se puede construir una gramatica sensible al contexto (o equivalentemente, un automata linealmente acotado) que lo reconozca. La gramatica usa reglas como CBBCCB \to BC para reordenar simbolos.

(d) No es recursivo (fuera de la jerarquia, o Tipo 0 / RE).

Este es el problema de la detencion (Halting problem). Es recursivamente enumerable (Tipo 0): se puede construir una MT que simule la MT dada y acepte si se detiene. Pero no es decidible (no es recursivo), ya que no existe MT que siempre se detenga y decida este lenguaje (demostrado por Turing via diagonalizacion).

LenguajeTipoClase
L1L_13Regular
L2L_22Libre de contexto
L3L_31Sensible al contexto
L4L_40Recursivamente enumerable

Pregunta 8 — Repaso: diseno de DFA

Disenar un DFA que acepte el lenguaje sobre Σ={0,1}\Sigma = \{0, 1\}:

L={w{0,1}w contiene un numero par de 0’s}L = \{w \in \{0, 1\}^* \mid w \text{ contiene un numero par de } 0\text{'s}\}

Dar la 5-tupla M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F) y la tabla de transiciones.

Ver respuesta

M=({qpar,qimpar},{0,1},δ,qpar,{qpar})M = (\{q_{\text{par}}, q_{\text{impar}}\}, \{0, 1\}, \delta, q_{\text{par}}, \{q_{\text{par}}\})

Tabla de transiciones:

Estado01
qparq_{\text{par}}qimparq_{\text{impar}}qparq_{\text{par}}
qimparq_{\text{impar}}qparq_{\text{par}}qimparq_{\text{impar}}
  • qparq_{\text{par}}: se han leido un numero par de 00‘s (estado inicial y de aceptacion).
  • qimparq_{\text{impar}}: se han leido un numero impar de 00‘s.
  • Los 11‘s no cambian de estado (son irrelevantes para la paridad de 00‘s).
  • La cadena vacia ε\varepsilon se acepta (cero es par).

Pregunta 9 — Gramaticas libres de contexto (Verdadero o Falso)

Para cada afirmacion, indicar si es verdadera (V) o falsa (F). Justificar brevemente.

(a) Toda gramatica libre de contexto ambigua puede transformarse en una gramatica no ambigua equivalente.

(b) Toda gramatica libre de contexto puede transformarse a la forma normal de Chomsky (CNF).

(c) En una derivacion por la izquierda, en cada paso se reemplaza la variable mas a la izquierda de la forma sentencial.

(d) Si una cadena ww tiene dos arboles de derivacion distintos en una gramatica GG, entonces GG es ambigua.

(e) Todo lenguaje libre de contexto tiene una gramatica en forma normal de Greibach (GNF).

Ver respuesta

(a) Falso. Existen lenguajes inherentemente ambiguos: todo LLC tiene al menos una gramatica, pero algunos lenguajes son tales que toda gramatica que los genere es ambigua. Un ejemplo clasico es L={aibjcki=j o j=k}L = \{a^i b^j c^k \mid i = j \text{ o } j = k\}.

(b) Verdadero (con una salvedad). Toda CFG que no genera la cadena vacia puede convertirse a CNF. Si εL(G)\varepsilon \in L(G), se permite la regla SεS \to \varepsilon donde SS no aparece en el lado derecho de ninguna otra produccion (version extendida de CNF).

(c) Verdadero. Esa es precisamente la definicion de derivacion por la izquierda (leftmost derivation). En cada paso se expande la variable mas a la izquierda.

(d) Verdadero. Una gramatica es ambigua si y solo si existe al menos una cadena wL(G)w \in L(G) que tiene dos o mas arboles de derivacion distintos.

(e) Verdadero (con la misma salvedad que CNF). Todo LLC sin ε\varepsilon tiene una gramatica en GNF, donde cada produccion tiene la forma AaαA \to a\alpha con aΣa \in \Sigma y αV\alpha \in V^*. La conversion se realiza mediante el algoritmo de Greibach (sustitucion y eliminacion de recursion izquierda).


Pregunta 10 — Demostracion formal: gramatica y lenguaje generado

Considere la gramatica G=({S,A},{a,b},R,S)G = (\{S, A\}, \{a, b\}, R, S) con producciones:

SaAbAaAbε\begin{aligned} S &\to aAb \\ A &\to aAb \mid \varepsilon \end{aligned}

(a) Demostrar que L(G)={anbnn1}L(G) = \{a^n b^n \mid n \geq 1\}.

(b) Dar las derivaciones por la izquierda para las cadenas abab, aabbaabb y aaabbbaaabbb.

Ver respuesta

(a) Demostracion (por doble contencion):

(L(G){anbnn1}L(G) \subseteq \{a^n b^n \mid n \geq 1\}):

Toda derivacion en GG comienza con SaAbS \Rightarrow aAb. Luego, en cada paso, AaAbA \Rightarrow aAb agrega una aa a la izquierda y una bb a la derecha. Al aplicar AεA \Rightarrow \varepsilon, se termina la derivacion. Si se aplica AaAbA \to aAb exactamente kk veces (k0k \geq 0) y luego AεA \to \varepsilon, se obtiene ak+1bk+1a^{k+1}b^{k+1}. Como k0k \geq 0, se tiene n=k+11n = k + 1 \geq 1. Toda cadena generada pertenece a {anbnn1}\{a^n b^n \mid n \geq 1\}.

({anbnn1}L(G)\{a^n b^n \mid n \geq 1\} \subseteq L(G)):

Dada anbna^n b^n con n1n \geq 1, construimos la derivacion: aplicar SaAbS \Rightarrow aAb, luego AaAbA \Rightarrow aAb exactamente n1n - 1 veces, y finalmente AεA \Rightarrow \varepsilon. Esto produce anbna^n b^n. Por lo tanto, anbnL(G)a^n b^n \in L(G) para todo n1n \geq 1.

Se concluye que L(G)={anbnn1}L(G) = \{a^n b^n \mid n \geq 1\}. \blacksquare

(b) Derivaciones por la izquierda:

Para abab (n=1n = 1):

SaAbabS \Rightarrow aAb \Rightarrow ab

Para aabbaabb (n=2n = 2):

SaAbaaAbbaabbS \Rightarrow aAb \Rightarrow aaAbb \Rightarrow aabb

Para aaabbbaaabbb (n=3n = 3):

SaAbaaAbbaaaAbbbaaabbbS \Rightarrow aAb \Rightarrow aaAbb \Rightarrow aaaAbbb \Rightarrow aaabbb