Exercícios preparatórios para a Prova 2 -...

20
1 I I N NF F1 16 62 26 6 L Li i n ng gu ua ag ge en ns s F Fo or r m ma ai i s s e e A Au ut tô ôm ma at to os s ( ( 2 20 01 13 3- - 2 2) ) Informática PUC-Rio Exercícios preparatórios para a Prova 2 Estes exercícios foram selecionados do Cap. 3 do livro-texto da disciplina (Ramos, 2009), e têm como objetivo auxiliar na preparação para a Prova 2, programada para o dia 09/10/2013. 1. (ex.3) Considere o alfabeto Σ e uma partição A, B, C de Σ. Utilizando exclusivamente esses conjuntos, e operações sobre os mesmos, defina formalmente a linguagem: { w Σ* | w = α, (α∈ A*C ou α C*A) e |α| 4, ou w = β, (β BB e β ε), ou w = γ, (γ∉ A e γ C, |γ| = 1), ou w = δ, |δ| > 3 } L = L α L β L γ L δ , onde: L α = (A * C C * A) (Σ 0 Σ 1 Σ 2 Σ 3 Σ 4 ) L β = Σ + – BB L γ = Σ 1 – (A C) L δ = Σ + – (Σ 1 Σ 2 Σ 3 ) 2. (ex.4) Considere a expressão (a|b)*(c|ε)(a|b)* sobre o alfabeto {a,b,c}. (a) Ela é regular ? Justifique sua resposta. Ela é regular pois, por definição, temos: ε é uma expressão regular cada símbolo do alfabeto {a,b,c} é uma ER se x e y são ER, então x|y também é uma ER se x e y são ER, então xy também é uma ER se x é uma ER, então (x) também é uma ER se x é uma ER, então x* também é uma ER Portanto, como a expressão acima é uma composição desses elementos, ela é uma expressão regular bem formada. (b) Dê cinco exemplos de cadeias geradas por essa expressão. c, ε, ac, cb, aacbb (c) Caso seja regular, apresente uma gramática linear à direita que gere essa linguagem. S aS | bS | ε | cX | aX | bX X ε | aX | bX Padrão de cadeias: (a|b)*(c|ε)(a|b)* prefixo (a|b)* é uma cadeia tão longa quanto se queira (inclusive nula) contendo a’s e b’s em qualquer ordem (regras para a presença do prefixo: S aS | bS) parte principal é uma cadeia nula ou que contenha uma única instância de c (regras para a parte principal: S ε | cX e X ε; estas regras dão conta da ausência de prefixo e de sufixo)

Transcript of Exercícios preparatórios para a Prova 2 -...

1

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Exercícios preparatórios para a Prova 2 Estes exercícios foram selecionados do Cap. 3 do livro-texto da disciplina (Ramos, 2009), e têm como objetivo auxiliar na preparação para a Prova 2, programada para o dia 09/10/2013. 1. (ex.3) Considere o alfabeto Σ e uma partição A, B, C de Σ. Utilizando exclusivamente

esses conjuntos, e operações sobre os mesmos, defina formalmente a linguagem: { w ∈ Σ* | w = α, (α∈ A*C ou α ∈ C*A) e |α| ≤ 4, ou

w = β, (β ∉ BB e β ≠ ε), ou w = γ, (γ∉ A e γ ∉ C, |γ| = 1), ou w = δ, |δ| > 3 }

L = Lα ∪ Lβ ∪ Lγ ∪ Lδ, onde: Lα = (A*C ∪ C*A) ∩ (Σ0 ∪ Σ1 ∪ Σ2 ∪ Σ3 ∪ Σ4) Lβ = Σ+ – BB Lγ = Σ1 – (A ∪ C) Lδ = Σ+ – (Σ1 ∪ Σ2 ∪ Σ3)

2. (ex.4) Considere a expressão (a|b)*(c|ε)(a|b)* sobre o alfabeto {a,b,c}.

(a) Ela é regular ? Justifique sua resposta. Ela é regular pois, por definição, temos: • ε é uma expressão regular • cada símbolo do alfabeto {a,b,c} é uma ER • se x e y são ER, então x|y também é uma ER • se x e y são ER, então xy também é uma ER • se x é uma ER, então (x) também é uma ER • se x é uma ER, então x* também é uma ER Portanto, como a expressão acima é uma composição desses elementos, ela é uma expressão regular bem formada.

(b) Dê cinco exemplos de cadeias geradas por essa expressão.

c, ε, ac, cb, aacbb

(c) Caso seja regular, apresente uma gramática linear à direita que gere essa linguagem. S � aS | bS | ε | cX | aX | bX X � ε | aX | bX Padrão de cadeias: (a|b)*(c|ε)(a|b)* prefixo (a|b)* é uma cadeia tão longa quanto se queira (inclusive nula) contendo a’s e b’s em qualquer ordem (regras para a presença do prefixo: S � aS | bS) parte principal é uma cadeia nula ou que contenha uma única instância de c (regras para a parte principal: S � ε | cX e X � ε; estas regras dão conta da ausência de prefixo e de sufixo)

2

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

sufixo (a|b)* é uma cadeia tão longa quanto se queira (inclusive nula) contendo a’s e b’s em qualquer ordem (regras para a presença do sufixo: S � aX | bX e X � ε | aX | bX)

3. (ex.5) Construa expressões regulares sobre o alfabeto {a,b,c,d} que representem as

seguintes linguagens: (a) Todas as cadeias que contenham entre dois (inclusive) e quatro (inclusive)

símbolos a, e somente essas cadeias; (b|c|d)* a (b|c|d)* a (b|c|d)* (a|ε) (b|c|d)* (a|ε) (b|c|d)*

(b) Todas as cadeias que contenham uma quantidade ímpar, porém maior ou igual a três, de símbolos a, e somente essas cadeias. (b|c|d)* a ( (b|c|d)* a (b|c|d)* a (b|c|d)* ) +

4. (ex.18) Construa, para a gramática linear à direita apresentada a seguir:

S � aX | bY | cZ X � bS | cX | d Y � bZ | aY | cS Z � cY | aZ | ε (a) As expressões regulares que representam a linguagem definida por cada um de

seus símbolos não-terminais; Para converter a GRD acima para uma expressão regular, vamos convertê-la primeiro para um autômato equivalente:

Em seguida, podemos aplicar o utilitário de conversão do JFLAP para nos auxiliar nessa tarefa de converter o autômato na expressão regular equivalente. O algoritmo iterativo consiste, basicamente, nos seguintes passos:

• selecionar um estado qk que não seja inicial ou final para ser eliminado • para cada dupla de estados (qi,qj), i,j ≠ k, avaliar todas as possibilidades

de transições entre i e j diretas ou que passam por qk, e construir a expressão regular equivalente a essas possibilidades.

3

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

• reconstruir o autômato sem o estado qk, e completar com as novas transições que têm como rótulo as expressões regulares criadas no passo anterior.

• repetir esses passos até que todos os estados não iniciais e não finais tenham sido eliminados.

Para o autômato em questão, na primeira iteração poderíamos eliminar q1, analisando todas as transições possíveis entre os demais estados que passariam por q1, ou diretas entre eles: De Para Expressão q0 q0 ba*c q0 q2 a q0 q3 c|ba*b q0 q4 ∅ q2 q0 b q2 q2 c q2 q3 ∅ q2 q4 d q3 q0 ca*c .... .... .... Ao final, devem sobrar apenas os estados q0 e q4 (inicial e final), com a seguinte configuração:

Os rótulos da configuração final podem ser traduzidos na expressão abaixo:

(ba*c+ac*b+(c+ba*b)(a+ca*b)*ca*c)*(ac*d+(c+ba*b)(a+ca*b)*) ou, substituindo o + por | na notação: (ba*c | ac*b | (c | ba*b)(a | ca*b)*ca*c)*(ac*d | (c | ba*b)(a | ca*b)*)

(b) Uma gramática linear à esquerda equivalente. Neste item, o objetivo é encontrar a GRDrev, ou seja, a gramática linear à direita que gera a linguagem reversa da linguagem em questão. A partir dela, podemos aplicar as regras de transformação de uma GRD em GRE para, ao final, obter a GRE da linguagem da questão.

4

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Uma abordagem poderia ser inverter a expressão regular obtida no item anterior, para obter a expressão referente a Lrev: ((ba*c+a)*(ba*b+c)+dc*a)(ca*c(ba*c+a)*(ba*b+c)+bc*a+ca*b)* A partir dela, construir o autômato Arev, para ao final gerar a gramática GDRrev.

5. (ex.21) Considere Σ = {a,b,c} e Li, i=1,2,3, as linguagens formadas por todas as

cadeias passíveis de serem construídas sobre Σ, de tal forma que as seguintes regras sejam observadas respectivamente:

(a) L1: as sentenças começam com a, terminam com dois c's consecutivos e

apresentam um número par de símbolos b; a ((a|c)* b (a|c)* b (a|c)*) * cc

(b) L2: as sentenças começam com b e apresentam um número total de símbolos que é ímpar; b ((a|b|c) (a|b|c)) *

(c) L3: as sentenças apresentam qualquer quantidade de símbolos, mas não contêm dois (ou mais) símbolos c adjacentes. ((a|b) (c|ε) (a|b)) *

Construa expressões regulares que representem cada uma dessas linguagens.

6. (ex.37) Considere as linguagens definidas pelas expressões regulares abaixo:

(a) (ab*c*)* | (a*b*c)+ (b) aaa(b|c)* | (b|c)*aaa (c) a*b | ab* Para cada uma dessas linguagens, obtenha: (a) Um autômato finito qualquer que a reconheça; (b) Um autômato finito que a reconheça e que não contenha não-determinismos,

transições em vazio, estados inacessíveis nem estados inúteis. (a) (ab*c*)* | (a*b*c)+ Vamos construir o autômato finito para a primeira parte da expressão - (ab*c*)* :

Agora, para a segunda parte da expressão - (a*b*c)+ :

5

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Juntando as duas partes num só autômato, temos:

Eliminando transições vazias:

Eliminando o não-determinismo: Q = {q0,qa1,qa2,qa3,qb0,qb1qb2}

6

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

F = {q0,qa1,qa2,qa3,qb2} Delta: q0,a,{qa1,qb0} q0,b,qb1 q0,c,qb2 qa1,a,qa1 qa1,b,qa2 qa1,c,qa3 qa2,a,qa1 qa2,b,qa2 qa3,a,qa1 qa3,c,qa3 qb0,a,qb0 qb0,b,qb1 qb0,c,qb2 qb1,b,qb1 qb1,c,qb2 qb2,a,qb0 qb2,b,qb1 qb2,c,qb2 Fazendo qn1 = {qa1,qb0}, substituímos suas ocorrências e atualizamos as transições: Q = {q0,qa1,qa2,qa3,qb0,qb1qb2,qn1} F = {q0,qa1,qa2,qa3,qb2,qn1} Delta: q0,a,qn1 q0,b,qb1 q0,c,qb2 qa1,a,qa1 qa1,b,qa2 qa1,c,qa3 qa2,a,qa1 qa2,b,qa2 qa3,a,qa1 qa3,c,qa3 qb0,a,qb0 qb0,b,qb1 qb0,c,qb2 qb1,b,qb1 qb1,c,qb2 qb2,a,qb0 qb2,b,qb1 qb2,c,qb2 qn1,a,qn1 qn1,b,{qa2 qb1} qn1,c,{qa3 qb2}

7

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Fazendo qn2 = {qa2 qb1}, substituímos suas ocorrências e atualizamos as transições: Q = {q0,qa1,qa2,qa3,qb0,qb1qb2,qn1} F = {q0,qa1,qa2,qa3,qb2,qn1,qn2} Delta: q0,a,qn1 q0,b,qb1 q0,c,qb2 qa1,a,qa1 qa1,b,qa2 qa1,c,qa3 qa2,a,qa1 qa2,b,qa2 qa3,a,qa1 qa3,c,qa3 qb0,a,qb0 qb0,b,qb1 qb0,c,qb2 qb1,b,qb1 qb1,c,qb2 qb2,a,qb0 qb2,b,qb1 qb2,c,qb2 qn1,a,qn1 qn1,b,qn2 qn1,c,{qa3 qb2} qn2,a,qa1 qn2,b,qn2 qn2,c, qb2 Fazendo qn3 = {qa3 qb2}, substituímos suas ocorrências e atualizamos as transições: Q = {q0,qa1,qa2,qa3,qb0,qb1qb2,qn1,qn2,qn3} F = {q0,qa1,qa2,qa3,qb2,qn1,qn2,qn3} Delta: q0,a,qn1 q0,b,qb1 q0,c,qb2 qa1,a,qa1 qa1,b,qa2 qa1,c,qa3 qa2,a,qa1 qa2,b,qa2 qa3,a,qa1 qa3,c,qa3 qb0,a,qb0

8

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

qb0,b,qb1 qb0,c,qb2 qb1,b,qb1 qb1,c,qb2 qb2,a,qb0 qb2,b,qb1 qb2,c,qb2 qn1,a,qn1 qn1,b,qn2 qn1,c,qn3 qn2,a,qa1 qn2,b,qn2 qn2,c, qb2 qn3,a,qn1 qn3,b,qb1 qn3,c,qn3 Representação do DFA:

7. (ex.38) Construa um autômato finito determinístico equivalente ao autômato cuja

função de transição é:

9

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

δ(q0,a) = {q1,q2}, δ(q1,b) = {q1q3}, δ(q2,b) = {q1}, δ(q2,c) = {q3}, δ(q3,d) = {q3}, com F = {q3}. Passo 1: copiar as transições originais q0, a, [q1 q2] -> novo estado qn1 = [q1 q2] q1, b, [q1 q3] q2, b, q1 q2, c, q3 q3, d, q3 Passo 2: substituir as ocorrências de [q1 q2] por qn1 e, para cada estado de qn1, calculando as novas transições: q0, a, qn1 q1, b, [q1 q3] q2, b, q1 q2, c, q3 q3, d, q3 qn1, b, [q1 q3] qn1, c, q3 (não há transições com a ou d, pois não havia nenhuma a partir de q1 ou q2) Passo 3: é possível eliminar q2, pois não é destino de nenhuma transição q0, a, qn1 q1, b, [q1 q3] q3, d, q3 qn1, b, [q1 q3] qn1, c, q3 Passo 4: substituir [q1 q3] por qn2, e incluir as transições correspondentes a q1 e q3. Como q3 é final, qn2 também deve ser final. Além disso, posso eliminar q1: q0, a, qn1 q1, b, qn2 q3, d, q3 qn1, b, qn2 qn1, c, q3 qn2, b, qn2 qn2, d, q3 Configuração final do autômato:

8. (ex.39) Construa um autômato finito determinístico e sem transições em vazio que

seja equivalente ao autômato cuja função de transição é:

10

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

δ(q0,a) = {q0}, δ(q0, ε) = {q1}, δ(q1, b) = {q1}, δ(q1, ε) = {q2}, δ(q2, a) = {q2}, δ(q2, b) = {q2}, δ(q2, ε) = {q3}, com F={q3}. Autômato inicial:

Eliminação de transições-ε:

Eliminação de não-determinismo: Q = {q0, q1, q2} F = {q0,q1,q2} Delta: q0,a,[q0 q2] q0,b,[q1 q2] q1,a,q2 q1,b,q1 q2,q,q2 q2,b,q2 Fazendo qn1=[q0 q2]: F={q0,q1,q2,qn1} q0,a,qn1 q0,b,[q1 q2] q1,a,q2 q1,b,q1 q2,a,q2 q2,b,q2 qn1,a,qn1 qn1,b,[q1 q2] Fazendo qn2=[q1 q2]: F={q0,q1,q2,qn1,qn2} q0,a,qn1 q0,b,qn2

11

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

q1,a,q2 q1,b,q1 q2,a,q2 q2,b,q2 qn1,a,qn1 qn1,b,qn2 qn2,a,q2 qn2,b,qn2 q1 pode ser eliminado: F={q0,q1,q2,qn1,qn2} q0,a,qn1 q0,b,qn2 q2,a,q2 q2,b,q2 qn1,a,qn1 qn1,b,qn2 qn2,a,q2 an2,b,qn2 Resultado para o DFA:

9. (ex.41) Obtenha autômatos finitos determinísticos e isentos de transições em vazio

que reconheçam cada uma das seguintes linguagens:

(a) (a*b*(a | ac*))*

Exemplo de autômato:

12

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Eliminação de transições-ε:

Eliminação de transições não-determinísticas: q0,a,[q0q2] q0,b,q1 q1,a,q2 q1,b,q1 q2,a,[q0q2] q2,b,q1 q2,c,q2 Fazendo qn1=[q0q2] q0,a,qn1 q0,b,q1, q1,a,q2 q1,b,q1 q2,a,qn1 q2,b,q1 q2,c,q2 qn1,a,qn1 qn1,b,q1 qn1,c,q2 F={q0,q2,qn1} DFA:

13

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

(b) a*b* | b*a* 10. (ex.56) Considere a linguagem (0*11*(2|3))+, sobre o alfabeto Σ = {0,1,2,3}:

(a) Construa um autômato finito qualquer que reconheça essa linguagem.

Exemplo de autômato:

(b) Mostre a sequência de movimentações que conduzem esse autômato finito à aceitação da cadeia 01200113.

(q0,01200113) � (q0, 1200113) � (q1, 200113) � (q2, 00113) � (q0, 00113) � (q0, 0113) � (q0, 113) � (q1, 13) � (q1, 3) � (q2, )

11. (ex.84) Sejam M1, M2 e M3 autômatos finitos que reconhecem, respectivamente, os

conjuntos regulares α, β e γ. Indique, cuidadosamente, todos os passos que devem ser seguidos a fim de se obter um novo autômato M4, que reconheça o conjunto (α | βγ)*.

• Criar um estado inicial q0 para M4 • Copiar todos os estados e transições de M1, M2 e M3 para M4 • Todos os estados copiados dos 3 autômatos perdem seu status de iniciais ou finais • Criar uma transição com ε de q0 para o estado inicial de M1 e outra análoga para

o estado inicial de M2 • Criar uma transição com ε de todos os estados que eram finais em M2 para o

antigo estado inicial de M3 • Criar um estado final qf para M4 • Criar uma transição com ε para qf a partir de todos os estados que eram finais de

M1 e M3 • Criar uma transição com ε de qf para q0

12. (ex.87) Considere a linguagem L ⊆ {a,b,c}* tal que w ∈ L se e somente se w contém

as subcadeias aaa e bbb:

14

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

(a) Obtenha uma gramática que gere essa linguagem; (b) Obtenha uma expressão regular que gere essa linguagem; (c) Obtenha um autômato finito que reconheça essa linguagem.

Invertendo um pouco a ordem do exercício para facilitar a sua elaboração : (b) Devemos considerar dois caso: o caso em que aaa vem antes de bbb, e vice-versa. (a|b|c)* ((aaa (a|b|c)* bbb) | (bbb (a|b|c)* aaa)) (a|b|c)*

(c) autômato finito:

(a) Supondo que os não terminais da gramática sejam Qx, para ficar fácil de associarmos as regras abaixo com o desenho do autômato:

Q0 � aQ1 | bQ7 | cQ0 Q1 � aQ2| bQ7 | cQ0 Q2 � aQ3 | bQ7 | cQ0 Q3 � aQ3 | bQ4 | cQ3 .....

13. (ex.89) Construa um autômato finito mínimo que aceite a linguagem gerada pela

expressão regular ab*abb*abbb* | (a* | b*a)bbb*, definida sobre o alfabeto {a,b}. 14. (ex.105) Existe algum autômato finito com 3 estados que aceite a linguagem

(aa)*a(aaa)* ? Prove a sua resposta.

Possível autômato para a linguagem:

15

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Eliminação de não-determinismo: Q = {q0,q1,q2,q3,q4,q5,q6} F = {q3,q6} Delta: q0,a,[q1q3] q1,a,q2 q2,a,[q1q3] q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 Criando estado qn1=[q1q3] para eliminar o não determinismo: Q = {q0,q1,q2,q3,q4,q5,q6,qn1} F = {q3,q6,qn1} Delta: q0,a,qn1 q1,a,q2 q2,a, qn1 q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 qn1,a,[q2 q4] Fazendo qn2=[q2 q4]: Q = {q0,q1,q2,q3,q4,q5,q6,qn1,qn2} F = {q3,q6,qn1} Delta: q0,a,qn1 q1,a,q2 q2,a,qn1 q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 qn1,a,qn2 qn2,a,[q1 q3 q5] (expandir qn1 para seus componentes) Fazendo qn3=[q1 q3 q5]: Q = {q0,q1,q2,q3,q4,q5,q6,qn1,qn2,qn3} F = {q3,q6,qn1,qn3} Delta: q0,a,qn1

16

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

q1,a,q2 q2,a,qn1 q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 qn1,a,qn2 qn2,a,qn3 qn3,a,[q2 q4 q6] Fazendo qn4=[q2 q4 q6]: Q = {q0,q1,q2,q3,q4,q5,q6,qn1,qn2,qn3,qn4} F = {q3,q6,qn1,qn3,qn4} Delta: q0,a,qn1 q1,a,q2 q2,a,qn1 q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 qn1,a,qn2 qn2,a,qn3 qn3,a,qn4 qn4,a,[q1 q3 q4 q5] Fazendo qn5=[q1 q3 q4 q5]: Q = {q0,q1,q2,q3,q4,q5,q6,qn1,qn2,qn3,qn4,qn5} F = {q3,q6,qn1,qn3,qn4,qn5} Delta: q0,a,qn1 q1,a,q2 q2,a,qn1 q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 qn1,a,qn2 qn2,a,qn3 qn3,a,qn4 qn4,a,qn5 qn5,a,[q2 q4 q5 q6] Fazendo qn6=[q2 q4 q5 q6]: Q = {q0,q1,q2,q3,q4,q5,q6,qn1,qn2,qn3,qn4,qn5,qn6} F = {q3,q6,qn1,qn3, qn4,qn5,qn6}

17

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Delta: q0,a,qn1 q1,a,q2 q2,a,qn1 q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 qn1,a,qn2 qn2,a,qn3 qn3,a,qn4 qn4,a,qn5 qn5,a,qn6 qn6,a,[q1 q3 q4 q5 q6] Fazendo qn7=[q1 q3 q4 q5 q6]: Q = {q0,q1,q2,q3,q4,q5,q6,qn1,qn2,qn3,qn4,qn5,qn6,qn7} F = {q3,q6,qn1,qn3, qn4,qn5,qn6,qn7} Delta: q0,a,qn1 q1,a,q2 q2,a,qn1 q3,a,q4 q4,a,q5 q5,a,q6 q6,a,q4 qn1,a,qn2 qn2,a,qn3 qn3,a,qn4 qn4,a,qn5 qn5,a,qn6 qn6,a,qn7 qn7,a,[q2 q4 q5 q6] = qn6 Analisando a função de transição final, podemos facilmente verificar que os estados q1,q2,q3,q4,q5 e q6 não são acessíveis a partir de q0. Portanto, podem ser eliminados: Q = {q0, qn1,qn2,qn3,qn4,qn5,qn6,qn7} F = {qn1,qn3, qn4,qn5,qn6,qn7} Delta: q0,a,qn1 qn1,a,qn2 qn2,a,qn3 qn3,a,qn4 qn4,a,qn5 qn5,a,qn6 qn6,a,qn7

18

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

qn7,a, qn6 Minimizando o autômato: Estados não-finais Finais (0,2) (1,3,4,5,6,7) Expandindo (0,2) com o terminal a, o grupo se mantém o mesmo, sem divisões. Expandindo o grupo (1,3,4,5,6,7), temos a subdivisão em dois grupos (1) (3,4,5,6,7) . Agora, o grupo (0,2) pode ser dividido em (0)(2). Portanto, renomeando os estados temos: q0 = (0) q1 = (1) q2 = (2) q3 = (3,4,5,6,7) Q = {q0,q1,q2,q3} F = {q1,q3} Delta: q0,a,q1 q1,a,q2 q2,a,q3 q3,a,q3 Autômato final minimizado:

Portanto, a resposta é: NÃO existe um autômato de 3 estados que aceite a linguagem.

15. (ex.128) Por que o "Pumping Lemma" das linguagens regulares não é

necessariamente válido para cadeias de comprimento menor que n, onde n é o número de estados do autômato finito mínimo que aceita essa linguagem ?

Seja L uma linguagem regular, e w uma cadeia ∈ L tal que |w| ≤ n (n = número de estados do autômato que reconhece L). Para as cadeias w com tamanho menor que n, não é possível afirmar que a cadeia está associada a um ciclo no autômato, pois é possível que o reconhecimento de w ocorra sem ciclos (pois não usou todos os estados do autômato). Com isso, o lema do bombeamento não vale para este tipo de cadeia. 16. (ex.135) Considere a linguagem gerada pela gramática ( {S,a,b}, {a,b}, {S�aSbb | aaSb | ε}, S ) :

19

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

(a) Descreva de maneira informal, porém clara e precisa, a linguagem gerada por essa

gramática; Seja L a linguagem gerada por essa gramática. L é composta pela cadeia vazia e cadeias do tipo apbq onde p/2 <= q <= 2p, com (p+q) múltiplo de 3.

(b) Prove que essa linguagem não é regular.

Supondo que L seja regular, seja n o número de estados do autômato hipotético que a reconhece. Para provar que o lema do bombeamento não vale para L, temos que mostrar que existe pelo menos uma cadeia w (w ∈ L, |w| ≥ n) tal que, para toda maneira de dividir w em 3 subcadeias xyz, |xy| ≤ n, e |y| ≥ 1, existe pelo menos um i ≥ 0 tal que xyiz ∉ L. Portanto, seja w = anb2n . Temos que w ∈ L (3n é multiplo de 3, e q=2p), e |w|≥ n. Ao dividir w em xyz de forma que |xy| ≤ n e |y| ≥ 1, temos que xy é formada apenas por a's. Para qualquer tamanho de y entre 1 e n, sempre será possível escolher um i tal que xyiz forme uma cadeia com uma quantidade de a's muito superior a 2q, o que contraria a regra descrita no item a. Portanto, L não é regular.

17. (ex.136) Prove que a linguagem {w ∈ {a,b,c,d}*, tais que |w|a + |w|b = |w|c + |w|d }

não é regular. Supondo que essa linguagem L seja regular, seja n o número de estados do AFD que a reconhece. Seja a cadeia w = an/2 b n/2 c n/2 d n/2 . Pela definição da linguagem, w ∈ L. Além disso, |w| > n. Para dividirmos w em três partes xyz de modo que |xy| ≤ n e |y| ≥ 1, xy irá conter apenas a's e b's. Dessa forma, para qualquer escolha de xyz que atenda a esses requisitos, o bombeamento da subcadeia y irá alterar a quantidade de a's e b's na cadeia resultante, enquanto a quantidade de c's e d's se mantém constante. Com isso, a igualdade do enunciado não poderá ser mantida. Assim, não vale xyiz ∈ L, para todo i ≥ 0. Portanto, a cadeia escolhida é um contra-exemplo que demonstra que o lema do bombeamento não se aplica e, portanto, L não é regular. 18. (ex.140) O autômato M = ({q0,q1,q2}, { a,b,c}, {(q 0,a) �q0, (q0,b) �q1, (q1,c) �q2,

(q2,c) �q2, (q2,a) �q0}, q0, {q0,q2}) reconhece uma linguagem infinita e é tal que a ∈ L(M). Essa sentença pode ser dividida em três partes x=ε, y=a, z=ε, de forma que as cadeias xyiz, i≥0, também pertencem a L. Justifique esse fato, uma vez que a sentença escolhida possui comprimento (|a|=1) inferior ao mínimo exigido pelo Pumping Lemma para as linguagens regulares (no caso do autômato apresentado, n=3).

Autômato do enunciado:

20

IIIIIIIINNNNNNNNFFFFFFFF11111111666666662222222266666666 LLLLLLLLiiiiiiiinnnnnnnngggggggguuuuuuuuaaaaaaaaggggggggeeeeeeeennnnnnnnssssssss FFFFFFFFoooooooorrrrrrrrmmmmmmmmaaaaaaaaiiiiiiiissssssss eeeeeeee AAAAAAAAuuuuuuuuttttttttôôôôôôôômmmmmmmmaaaaaaaattttttttoooooooossssssss ((((((((22222222000000001111111133333333--------22222222)))))))) Informática

PUC-Rio

Esse fato ocorre porque o loop que permite o bombeamento ocorre logo no estado inicial, que também é final. Portanto, como a* ∈ L, a cadeia 'a' pode ser bombeada, mesmo tendo um comprimento menor que a quantidade de estados do autômato.