Final
Transcripción
Final
Autómatas y Lenguajes Formales 3o Ingenierı́a Informática Final Mayo 2010 Normas : La duración de esta parte del examen es de 2h30m. Todos los ejercicios se entregarán en hojas separadas. El examen tipo test cuenta hasta 2 puntos sobre la nota global. Además de obtener un mı́nimo de 5 puntos en el global del examen, para poder aprobar es necesario obtener un mı́nimo de 1,3 puntos entre las dos primeras preguntas y un mı́nimo de 1,4 puntos entre las dos últimas. 1. (1.6 puntos) Obtén, aplicando métodos y algoritmos vistos en clase, un autómata finito determinista que, con el menor número de estados posible, reconozca el lenguaje definido por la gramática siguiente: G = ({S, A, B, C, D}, {a, b}, S, P) P={ S A B C D } ::= ::= ::= ::= ::= aA | bD | λ aA | bB | b | λ aC | bD aD | bA | a aC Solución: En primer lugar, obtendremos un autómata finito no determinista equivalente a partir de la gramática. Este autómata puede ser el siguiente: Agr = ({a, b}, {qS , qA , qB , qC , qD , qF }, fgr , qS , {qF }) fgr → qS qA qB qC qD *qF a {qA } {qA } {qC } {qD ,qF } {qC } b {qD } {qB ,qF } {qD } {qA } λ {qF } {qF } Posteriormente, lo convertiremos en un autómata finito determinista equivalente: Página 1 de 7 Examen Final – Mayo 2010 (cont.) fgrf d →*{qS ,qF } *{qA ,qF } {qD } *{qB ,qF } {qC } {} *{qD ,qF } a {qA ,qF } {qA ,qF } {qC } {qC } {qD ,qF } {} {qC } b {qD } {qB ,qF } {} {qD } {qA ,qF } {} {} Si renombramos, nos queda: Agrf d = ({a, b}, {A, B, C, D, E, F, G}, fgrf d , A, {A, B, D, G}) ferf d →*A *B C *D E F *G a B B E E G F E b C D F C G F F El autómata obtenido ya es conexo debido al algoritmo de conversión aplicado,por lo tanto, lo único que falta es minimizarlo para asegurarnos de que tiene el menor número de estados posible. Q/E0 = {{A, B, D, B}, {C, E, F }} Q/E1 = {{A}, {B}, {D, G}, {C, F }, {E}} Q/E2 = {{A}, {B}, {D, G}, {C}, {F }, {E}} Q/E3 = {{A}, {B}, {D}, {G}, {C}, {F }, {E}} Q/E4 = {{A}, {B}, {D}, {G}, {C}, {F }, {E}} = Q/E3 = Q/E Por lo tanto, el autómata obtenido es el finito determinista equivalente a la gramática del enunciado que tiene el mı́nimo número de estados. 2. (1.6 puntos) Obtén una gramática formal que reconozca el lenguaje siguiente: L = {an b3n c2n | n ≥ 0} Página 2 de 7 Examen Final – Mayo 2010 (cont.) Solución: G1 = ({S, A, B, C, X, F }, {a, b, c}, S, P}) P = {S ::= ABC, A ::= aAX | F, XB ::= bbbBX, Xb ::= bX, Xc ::= cX, XC ::= ccC, F b ::= bF, F B ::= F, F c ::= cF, F C ::= λ 3. (1.6 puntos) Sea L el lenguaje siguiente: L := {hM1 , M2 i | L(M1 ) ∩ L(M2 ) 6= ∅} ⊆ {0, 1}∗ . ¿Es L un lenguaje recursivamente enumerable?. ¿Es recursivo?. Razona la respuesta. Solución: Para reconocer el lenguaje L (y por tanto demostrar que L es recursivamente enumerable) vamos a diseñar una máquina de Turing M que realiza las siguientes acciones: La máquina de Turing M toma como input una palabra x ∈ {1, 0}∗ . En un primer paso, descomponemos x como la concatenación de código de dos máquinas de Turing x = hM1 , M2 i. A continuación, la máquina M construye indeterminı́sticamente mediante un guessing una palabra y. Esta palabra será la candidata a pertenecer a la intersección L(M1 ) ∩ L(M2 ). Usando la máquina universal U, comprobamos si y es aceptado por M1 . En caso afirmativo, y de igual modo, comprobamos a continuación si y es aceptado por M2 . En caso de que la palabra y esté en ambos lenguajes L(M1 ) y L(M2 ), la máquina de Turing M acepta la palabra x. Página 3 de 7 Examen Final – Mayo 2010 (cont.) Con este esquema, es fácil ver que L(M ) = L, y por tanto nuestro lenguaje L es un lenguaje recursivamente enumerable. Veamos ahora que L no es un lenguaje recursivo. Para ello, vamos a construir una reducción desde el problema de parada HP a L. Como sabemos que HP no es recursivo, concluiremos que L no es recursivo. Para ello, a partir de una palabra hM, wi, contruiremos algorı́tmicamente (esto es, mediante una reducción) hM ′ , M ′′ i de la siguiente forma: M ′ será el código de una máquina de Turing tal que acepta todas sus entradas, esto es, L(M ′ ) = {0, 1}∗ . M ′′ será el código de una máquina de Turing que realiza los siguientes pasos: • La máquina de Turing M ′′ ignora su input, y simula, usando la máquina universal U, el comportamiento de M con el input w. • En caso de que la máquina universal acepte dicha entrada, la máquina de Turing M ′′ aceptará. Comprobemos que ésto es una reducción: Si hM, wi ∈ HP , entonces L(M ′ ) = L(M ′′ ) = {0, 1}∗ y por tanto se sigue que L(M ′ ) ∩ L(M ′′ ) 6= ∅ y hM ′ , M ′′ i ∈ L. Si hM, wi 6∈ HP , entonces L(M ′ ) = {0, 1}∗ y L(M ′′ ) = ∅ y por tanto L(M ′ ) ∩ L(M ′′ ) = ∅, y consecuentemente hM ′ , M ′′ i 6∈ L. Con lo cual podemos concluir que hM, wi ∈ HP ⇔ hM ′ , M ′′ i ∈ L, y por tanto L no es un lenguaje recursivo. 4. (1.6 puntos) Sea L el lenguaje siguiente: L := {x ∈ {a, b}∗ | 2na (x) = 3nb (x)} ⊆ {a, b}∗ . ¿Es L un lenguaje independiente del contexto?. Razona la respuesta. Solución: Este lenguaje es un lenguaje independiente del contexto. El autómata a pila (por vaciado de pila) que reconoce el lenguaje L viene dado por la siguiente Página 4 de 7 Examen Final – Mayo 2010 (cont.) representación gráfica: (a, A, AA) (a, B, λ) (a, S, AS) (λ, S, λ) S q0 (b, S, BS) (b, A, λ) (b, B, BB) q1 (a, S, S) (a, A, A) (a, B, B) (b, S, S) (b, S, BS) (b, A, A) (b, A, λ) (b, B, B) (b, B, BB) q3 (a, S, S) (a, A, A) (a, B, B) (a, S, S) (a, A, A) (a, B, B) q2 (b, S, S) (b, S, BS) (b, A, A) (b, A, λ) (b, B, B) (b, B, BB) q4 (a, S, S) (a, A, A) (a, B, B) (b, S, S) (b, A, A) (b, B, B) q5 (a, A, AA) (a, B, λ) (a, S, AS) 5. (1.6 puntos) Sea L el lenguaje siguiente: L := an b2n+m cm(n mod 2) | n ≥ 1, m ≥ 0 ⊆ {a, b, c}∗ . Diseña (explicando el algoritmo subyacente) una máquina de Turing M tal que L(M ) = L. Solución: M = ({a, b, c, A, B, •}, {a, b, c}, •, {q0 , q1 . . . q12 , qf }, q0 , f, {qf }) Donde la función de transición f , se define de la siguiente manera: Página 5 de 7 Examen Final – Mayo 2010 (cont.) (B, B, R) (a, a, R) q0 (a, A, R) q1 q4 q2 (b, B, L) q3 (a, a, L) (B, B, L) (A, A, R) (B, B, L) (A, A, L) (b, B, R) (•, •, R) q5 (A, •, R) q6 (A, •, R) (B, •, R) (B, •, R) (b, •, R) (B, •, R) q7 q8 (•, •, R) (•, •, R) (b, •, R) qf (•, •, R) q12 (B, •, R) (b, b, R) (c, c, R) q9 (•, •, L) (b, •, R) (•, •, R) q11 (c, •, L) q10 (b, b, L) (c, c, L) En esta máquina de Turing nuestra labor es hacer que la máquina se detenga en un estado final en caso de que la palabra que nos ofrezcan en la entrada pertenezca al lenguaje indicado. El funcionamiento del algoritmo implementado es el siguiente: q0 . . . q3 : Por cada caracter “a” que hay en la entrada, deben encontrase dos caracteres “b”. Por lo tanto, marcamos ambos elementos. q4 . . . q6 : Una vez hemos comprobado que hay, por lo menos, el doble de elementos “b” que de elementos “a”, tenemos que comprobar si el número de elementos “a” es par ya que, si es impar, la palabra debe contener tantos caracteres “c” como elementos “b” queden sin marcar (ya que sólo hemos marcado los caracteres “b” correspondientes al doble de aes). q5 , q7 , qf : Como el número de elementos “a” es par, la cadena (que puede Página 6 de 7 Examen Final – Mayo 2010 (cont.) contener algún elemento “b” todavı́a sin marcar) no puede contener elementos “c”. q6 , q8 . . . q12 , qf : El número de elementos “a” es impar, por lo tanto, la cadena debe tener tantos elementos “c” como elementos “b” hayan quedado sin marcar. Página 7 de 7