Introdução a Teoria da Computação Solução da Terceira Lista de Exercı́cios Profa. Carmem Hara Exercı́cio 1: Considere a gramática G abaixo: S ⇒ ASB | ǫ A ⇒ aAb | ǫ B ⇒ bBa | ba a. Mostre uma derivação mais a esquerda da palavra aabbba. S ⇒ ASB ⇒ aAbSB ⇒ aaAbbSB ⇒ aabbSB ⇒ aabbB ⇒ aabbba b. Quantos passos de derivação tem o item (a). Resp: 6 c. Mostre uma derivação mais a direita da palavra abaabbbabbaa. S ⇒ ASB ⇒ ASbBa ⇒ ASbbaa ⇒ AASBbbaa ⇒ AASbabbaa ⇒ AAbabbaa ⇒ AaAbbabbaa ⇒ AaaAbbbabbaa ⇒ Aaabbbabbaa ⇒ aAbaabbbabbaa ⇒ abaabbbabbaa d. Construa a árvore de derivação dos itens (a) e (c). S A S S a A b a A b ε B b A a a A ε ε S B b A a A b a A b (a) S ε B b b a B b a a (c) ε e. Qual a linguagem definida pela gramática (L(G)) ? Ln1 .Ln2 , onde n ≥ 0, L1 = {ai bi | i ≥ 0} e L2 = {bj aj | j > 0} Exercı́cio 2: Construa uma gramática linear a direita que defina as linguagens abaixo. a. (0 + 1)∗ Resp: S ⇒ ǫ | 0S | 1S b. (0 + 1)(00 + 1)∗ Resp: S ⇒ 0A | 1A A ⇒ 0B | 1A | ǫ B ⇒ 0A Exercı́cio 3: Considere a gramática G abaixo. S ⇒ aSA | ǫ A ⇒ bA | ǫ a. Construa uma expressão regular que defina L(G). Resp: (ǫ + aa∗ b∗ ) b. Mostre que G é ambı́gua. Resp: basta mostrar duas árvores de derivação distintas para a mesma palavra (no exemplo, aab). c. Construa uma gramática não ambı́gua equivalente a G. S ⇒ aAB | ǫ A ⇒ aA | ǫ B ⇒ bB | ǫ 1 S S a S A a S A ε b ε a S A a S A ε ε A b A ε ε Exercı́cio 4: Mostre que todos os sı́mbolos da gramática G abaixo são úteis. Construa uma gramática equivalente Gc sem transições em cadeia. Mostre que Gc contém sı́mbolos inúteis. G: S → A | CB A → C |D B → bB | b C → cC | c D → dD | d Sı́mbolos que geram palavras (seqêencis de terminais): V ′ = {B, C, D} ∪ {S, A} = {S, A, B, C, D} Sı́mbolos que podem ser gerados a partir de S em uma derivação: V ′′ = {S, A, C, B} ∪ {D} = {S, A, B, C, D} Eliminação de regras em cadeia: encS = {S, A, C, D} encA = {A, C, D} encB = {B} encC = {C} encD = {D} S → cC | c | dD | d | CB A → cC | c | dD | d B → bB | b C → cC | c D → dD | d Sı́mbolos que geram palavras (seqêencis de terminais): V ′ = {B, C, D} ∪ {S, A} = {S, A, B, C, D} Sı́mbolos que podem ser gerados a partir de S em uma derivação: V ′′ = {S, C, D, B} Sı́mbolos inúteis = {A} Exercı́cio 5: A gramática G = ({S, A, B, C, D}, {a, b, c, d, e}, P, S), com as produções P listadas abaixo, possui transições epsilon. Escreva uma gramática equivalente sem transições epsilon. S → AB S → bB A → DA A→a A→ǫ B B B C C → CA →b →C →c →ǫ D → dS D → BaC D → eb Resp: E0 = {A, C} S E1 = {A, C} {B} = {A, B, C} 2 S E2 = {A, B, C} {S, B} = {S, A, B, C} E3 = {S, A, B, C} S → ǫ | AB | A | B | bB | b A → DA | D | a B → CA | C | A | b C→c D → dS | d | BaC | aC | Ba | a | eb Exercı́cio 6: Considere a gramática G abaixo. E→E∨T T→T∧F F→a E→T T→F F → (E) onde Σ = {∨, ∧, (, ), a}. Construa a árvore sintática para as palavras a ∧ a ∨ a e a ∧ (a ∨ a). a^ava a ^ (a v a) E E v T T F ^ F E T T F T a F ^ F ( E ) a a E v T a T F F a a Construa uma gramática equivalente G′ sem produções em cadeia. IE,0 = {T } S IE,1 = {T } {F S } = {T, F } IE,2 = {T, F } {F } = {T, F } IT,0 = {F } E → E ∨ T | T ∧ F | a | (E) T → T ∧ F | a | (E) F → a | (E) Exercı́cio 7: Considere a gramática G = ({S}, {p, q, ∼, [, ], ⊃}, P, S) com as produções P listadas abaixo. Construa uma gramática equivalente na forma normal de Chomsky. S →∼ S | [S ⊃ S] | p | q Resp: S → N S | XF | p | q N →∼ A→[ F →] I →⊃ X →YS 3 Y → ZI Z → AS Exercı́cio 8: Construa uma gramática na forma normal de Greibach que seja equivalente a gramática abaixo. S → AA | 0 A → SS | 1 Resp: 1. Suponha que sejam dados os números 0 para S e 1 para A. Eliminar produções que possuem o primeiro sı́mbolo do lado direito com número menor que o número do sı́mbolo do lado esquerdo. S → AA | 0 A → AAS | 0S | 1 2. eliminar recursão a esquerda S → AA | 0 A → 0SX | 1X | 0S | 1 X → ASX | AS 3. substituir lado direito de A em S e X S → 0 | 0SXA | 1XA | 0SA | 1A A → 0SX | 1X | 0S | 1 X → 0SXSX | 1XSX | 0SSX | 1SX | 0SXS | 1XS | 0SS | 1S Exercı́cio 9: Construa um autômato de pilha para cada uma das linguagens abaixo: Resp: aceitação por estado final e pilha vazia a. b. c. d. e. (0 + 1)∗ (0 + 1)(00 + 1)∗ {an bn |n ≥ 0} {am bn |1 ≤ m S ≤ n ≤ 2m} {an bn |n ≥ 1} {an b2n |n ≥ 1} 1,E/E 0, E/E 1, E/E q0 q0 a, E/A 0,E/E 0, E/E q1 1, E/E q2 q0 b,A/E b, A/E q1 0, E/E (a) (c) (b) a, E/A a, E/A q0 a,E/A q1 b, A/E b, A/E b, A/E q0 b, E/E q2 a, E/A b, A/E q1 q2 q3 a, E/AA b, A/E b, A/E q3 a, E/AA (d) (e) Exercı́cio 10: Seja L a linguagem {w ∈ {a, b}∗ | w tem um prefixo contendo mais b’s que a’s}. Por exemplo, baa, abba, abbaaa são palavras em L, mas aab, e aabbab não pertencem a L. 1. construa um autômato de pilha que aceita L por estado final. 2. construa um autômato de pilha que aceita L por pilha vazia. 4 a, Z/AZ a, A/AA b, A/E q1 a, E/AZ q2 a, E/E b, E/E a, E/AZ q1 q2 b, E/E b, E/E q3 a, Z/AZ a, A/AA b, A/E b, Z/E b, Z/E q3 a, E/E b, E/E (2) (1) Resp: Exercı́cio 11: Diga se é possı́vel construir um autômato de pilha determinı́stico para as linguagens abaixo. Se afirmativo, construa o autômato determinı́stico, caso contrário, justifique informalmente por que não é possı́vel que ele seja determinı́stico. 1. {a2i b3i | i ≥ 0} Resp: a, E/E q1 q2 b, B/E a, E/BBB q3 b, B/E 2. {ai bj ck | i = j ou j = k} Resp: não é possı́vel construir um autômato determinı́stico porque não é possivel comparar i com j e j com k ao mesmo tempo. Portanto, se a palavra comeca com a, temos que optar por contar a quantidade de a’s ou simplesmente ignorá-los. a, E/A a, E/A q1 ... aibic k q0 a, E/E q2 ... ajbic i a, E/E Exercı́cio 12: Utilizando o algoritmo de transformação apresentado em sala de aula, construa o autômato de pilha que reconhece a linguagem gerada pela gramática abaixo: S → aABA | aBB | ǫ A → bA | b B → cB | c Resp: q0 a, E/ABA a, E/BB E, E/E 5 q1 b, A/A b, A/E c, B/B c, B/E Exercı́cio 13: Considere o autômato com pilha M abaixo. q0 b, A/E q1 b, E/E q2 b, A/E a, E/A a. Qual a linguagem aceita por M ? Resp: {an b2n | n > 0} a. Utilizando o algoritmo de transformação apresentado em sala de aula, construa a gramática que gera a linguagem por M . Resp: q0 b, A/E q1 b, A/A b, E/E b, A/E a, E/A a. A/AA S → [q0, ǫ, q2] δ(q0, a, ǫ) = {(q0, A)} [q0, ǫ, q0] → a[q0, A, q0] [q0, ǫ, q1] → a[q0, A, q1] [q0, ǫ, q2] → a[q0, A, q2] δ(q0, a, A) = {(q0, AA)} [q0, A, q0] →a[q0, A, q0][q0, A, q0] | a[q0, A, q1][q1, A, q0] | a[q0, A, q2][q2, A, q0] [q0, A, q1] → a[q0, A, q0][q0, A, q1] | a[q0, A, q1][q1, A, q1] | a[q0, A, q2][q2, A, q1] [q0, A, q2] → a[q0, A, q0][q0, A, q2] | a[q0, A, q1][q1, A, q2] | a[q0, A, q2][q2, A, q2] δ(q0, b, A) = {(q1, ǫ)} [q0, A, q0] → b[q1, ǫ, q0] [q0, A, q1] → b[q1, ǫ, q1] [q0, A, q2] → b[q1, ǫ, q2] δ(q1, b, A) = {(q2, A)} [q1, A, q0] → b[q2, A, q0] [q1, A, q1] → b[q2, A, q1] [q1, A, q2] → b[q2, A, q2] δ(q1, b, ǫ) = {(q2, ǫ)} [q1, ǫ, q0] → b[q2, ǫ, q0] [q1, ǫ, q1] → b[q2, ǫ, q1] [q1, ǫ, q2] → b[q2, ǫ, q2] δ(q2, b, A) = {(q1, ǫ)} [q2, A, q0] → b[q1, ǫ, q0] 6 q2 [q2, A, q1] → b[q1, ǫ, q1] [q2, A, q2] → b[q1, ǫ, q2] [q0, ǫ, q0] → ǫ [q1, ǫ, q1] → ǫ [q2, ǫ, q2] → ǫ Após a eliminação dos sı́mbolos inúteis a gramática resultante é: S → [q0, ǫ, q2] [q0, ǫ, q2] → a[q0, A, q2] [q0, A, q1] → a[q0, A, q1][[q1, A, q1] | a[q0, A, q2][q2, A, q1] | b[q1, ǫ, q1] [q0, A, q2] → a[q0, A, q1][q1, A, q2] | a[q0, A, q2][q2, A, q2] | b[q1, ǫ, q2] [q1, A, q1] → b[q2, A, q1] [q1, A, q2] → b[q2, A, q2] [q1, ǫ, q2] → b[q2, ǫ, q2] [q2, A, q1] → b[q1, ǫ, q1] [q2, A, q2] → b[q1, ǫ, q2] [q0, ǫ, q0] → ǫ [q1, ǫ, q1] → ǫ [q2, ǫ, q2] → ǫ Exercı́cio 14: Use o pumping lemma para linguagens livres de contexto para provar que a linguagem {ai bj ci dj | i, j ≥ 0} não é livre de contexto. Resp: Seja L = {ai bj ci dj | i, j ≥ 0}. Suponha que L seja livre de contexto. Considere a palavra z = ak bk ck dk , onde k é a constante do Pumping Lemma. Particione z em uvwxy, tal que as condições do lema sejam satisfeitas. Como |vwx| ≤ k não é possı́vel que vx contenha duas letras não consecutivas (por exemplo, a’s e c’s ou a’s e d’s) porque elas estão k + 1 posições distantes uma da outra. Se v e x contiverem apenas a’s, então z ′ = uv 0 wx0 y tem k b’s, k c’s, k d’s, mas menos a’s, uma vez que |vx| ≥ 1. Portanto z ′ 6∈ L, uma contradição. Os casos em que vx contém apenas b’s, c’s, e d’s é semilar. Se vx contiver a’s e b’s então z ′ = uv 0 wx0 y contém menos a’s e b’s que c’s e d’s e portanto z ′ 6∈ L. No caso de vx conter b’s e c’s ou c’s e d’s encontramos uma contradição da mesma forma. Como em todos os particionamento possı́veis encontramos uma contradição, podemos concluir que L não é livre de contexto. Exercı́cio 15: Prove que a linguagem {an bk cl dm | n + l = k + m} é livre de contexto. Resp: Construir um autômato com pilha que reconheça a linguagem. Idéia: 1. ler n a’s e empilhas n A’s. 2. ler k b’s, desempilhar k A’s e se k > n, empilhar k − n B’s. 3. ler c’s, desempilhar todos os B’s e empilhar os C’s restantes. 4. ler d’s, desempilhar A’s e C’s - rejeitar a palavra se encontrar B’s na pilha. 5. se a palavra pertence a L, a pilha deve estar vazia. 7