Folha Prática Autómatos Finitos 1 Autómatos Finitos Determinísticos (AFD) 1. Determine e implemente computacionalmente um AFD que aceita todas as cadeias de cada uma das seguintes linguagens sobre o alfabeto Σ = { 0, 1 }: a) Conjunto de cadeias que terminam por 00 b) Conjunto de cadeias com exatamente um 1 c) Conjunto de cadeias com pelo menos um 1 d) Conjunto de cadeias sem qualquer 1 e) Conjunto de cadeias com um número ímpar de 1 s f) Conjunto de cadeias que possuem uma subcadeia formada por três 0's g) Conjunto de cadeias em que todas as posições ímpares têm um 1 h) Conjunto de cadeias com pelo menos três símbolos, sendo que o terceiro é um 0 i) Conjunto de cadeias em que todas as subcadeias de cinco símbolos têm, pelo menos, um 0 2. Considere o alfabeto de entrada Σ = { 0, 1 }. a) Determine um AFD que aceite a linguagem formada pelo conjunto de cadeias que possuem a subcadeia 1001 e terminam com 0 b) Implemente computacionalmente este AFD c) Verifique se a cadeia 1010011010 é aceite pelo AFD. Justifique através da apresentação da sequência de estados atingidos e certifique-se através da implementação elaborada. 3. Considere o alfabeto S = { F, T }. a) Determine um AFD que aceite a linguagem, sobre S, formada por todas as cadeias que se iniciam com a subcadeia TFFT, depois do sexto símbolo (inclusive) contenham a subcadeia TTF e terminem com o símbolo F b) Implemente computacionalmente este AFD c) Verifique se a cadeia TFFTFTTFTF é aceite pelo AFD construído em a). Justifique apresentando a sequência de estados atingidos e certifique-se com a implementação. 4. Considere o alfabeto S = { 0, 1, 2 }. a) Determine um AFD que aceite a linguagem, sobre S, formada por todas as cadeias que se iniciam com a subcadeia 012, contenham a subcadeia 21021 e terminem com 1 b) Implemente computacionalmente este AFD c) Verifique se das cadeias seguintes são aceites pelo AFD construído em a) (apresente a sequência de estados atingidos por cada uma das cadeias): i) 012021021021 ii) 0121021
Folha Prática Autómatos Finitos 2 5. Determine implemente computacionalmente um AFD que aceite todas as cadeias de cada uma das seguintes linguagens sobre o alfabeto S = { 0, 1 }: a) Todas as cadeias são da forma w 1 01w 2, com w 1 e w 2 { 0, 1 }* b) Todas as cadeias têm o símbolo inicial e final diferentes c) Todas as cadeias são da forma vwv, com v = 2 e v, w { 0, 1 }* d) Todas as cadeias que, quando interpretadas como um número binário, resultam num número x > 0, tal que x mod 5 = 0 (x é múltiplo de 5) e) Todas as cadeias têm pelo menos dois 1's consecutivos mas não dois 0's consecutivos 6. Determine e implemente computacionalmente um AFD que aceite todas as cadeias de cada uma das seguintes linguagens do alfabeto S = { 0, 1 }. Indique uma propriedade que caraterize as cadeias aceites pelo autómato. a) { 0 }* b) { 0 }* { 1 }* c) { 0 }* { 1 }* d) { 01, 00 } { 0, 1 }* e) { 0, 1 }* { 101, 111 } f) { 0, 1 }* { 11, 00 } { 0, 1 }* g) { 0, 1 }* \ { 0 }* h) { 000, 1 }* { 00, 1 }* 7. Determine e implemente computacionalmente um AFD que aceite as cadeias de cada uma das seguintes linguagens sobre o alfabeto S = { a, b }: a) { x : x termina em b mas não em bb } b) { x : x tem comprimento maior ou igual a três } c) { x : x tem comprimento inferior a três } d) { x : x não tem três b's consecutivos } e) { x : o número de b's em x é múltiplo de quatro } f) { x : o número de b's consecutivos em x não excede três e x não tem a's consecutivos } g) { x : x tem prefixo bbaab } h) { x : x não tem sufixo aab } i) { x : x tem aab e baa como subcadeias } 8. Usando AFD's, implemente programas que leia as palavras contidas no ficheiro TheoryComputation.txt e mostre no monitor: a) as palavras que contêm a subpalavra at b) as palavras que se iniciam por a e terminam por e c) as palavras que contêm a subpalavra at, mas que não se iniciem por at ou não terminem por at
Folha Prática Autómatos Finitos 3 d) as palavras que contêm a subpalavra at, mas que não se iniciam por t nem terminem por k e) as palavras que se iniciam e terminam por uma vogal f) as palavras que contêm a letra a numa posição par da palavra. 9. Usando um AF implemente um programa que verifique se uma dada expressão matemática contendo apenas símbolos de alfabeto S = { a, +, -, *, / } está no formato normal (ex: a + 3 * 5). 10. Descreva informalmente a linguagem sobre o alfabeto S = { a, b } que é aceite por cada um dos seguintes AFD's. Implemente computacionalmente cada um deles. a) b) c) d) e) f)
Folha Prática Autómatos Finitos 4 11. Determine a linguagem aceite por cada um dos seguintes AFD e indique características (simples) de cada linguagem determinada. Implemente computacionalmente cada um deles. a) b) c) 12. Implemente no JFLAP os seguintes autómatos e caracterize a linguagem por eles aceites. Pode usar as diferentes funcionalidades do JFLAP para o ajudar na tarefa. a) b)
Folha Prática Autómatos Finitos 5 13. Considere um alfabeto de entrada Σ = { 0, 1 }. Implemente no JFLAP um AFD que aceite todas as cadeias de S* que não contêm sequências de 0's ou 1's de comprimento inferior a 3. 14. Implemente no JFLAP um AFD que aceite a linguagem composta por todas as cadeias sobre o alfabeto Σ = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } tais que a soma dos símbolos (algarismos) da cadeia é divisível por 7 (por exemplo λ, 7, 07, 86, 16). 15. Implemente no JFLAP um autómato finito determinista que aceite a cadeia TELA com tolerância de um símbolo (isto é, também aceita as cadeias *ELA, T*LA, TE*A, TEL*, em que * significa dizer qualquer símbolo do alfabeto Σ = { A, B,..., Z }). Sugestão: Para evitar trabalho repetitivo, poderá considerar um alfabeto mais reduzido. 16. Seja L uma linguagem num alfabeto Σ e seja a um símbolo do alfabeto. O quociente L/a de L por a, é linguagem composta por todas as cadeias w de Σ tais que wa L. Por exemplo, para Σ = { 0, 1 }, L = { 0, 01, 10, 001, 100 } e a = 0, L/a = { λ, 1, 10 }. Dado um autómato finito determinista que aceita L, como se poderá obter um para L/a? 17. Pode-se chamar AFD incompleto a um AF em que: - não há transições-λ - a função δ(q, a) contém no máximo um elemento e, portanto, não há escolhas possíveis (δ não é necessariamente uma função total). Considere o AFD incompleto dado na figura que se segue. Transforme este AF num AFD normal quando os alfabetos de entrada são os seguintes: a) S = { a, b } b) S = { a, b, c }
Folha Prática Autómatos Finitos 6 Autómatos Finitos Não Determinísticos (AFND) 18. Determine um AFND sobre o alfabeto Σ = { 0, 1 }, que aceite a seguinte linguagem: Conjunto de cadeias que contém uma subcadeia com dois 1 s, seguida de uma outra subcadeia com dois 0 s (exemplos: 10110001 e 1100). 19. Determine um AFND que aceite cada uma das seguintes linguagens sobre o alfabeto Σ = { a, b }: a) L = { abbab n : n 1 } { aba n b : n 0 } b) L = { abbab n : n 0 } { bba n : n 0 } 20. Seja L a linguagem sobre o alfabeto Σ = { a, b } aceite pelo seguinte AF: Determine um AFND que aceite a seguinte linguagem sobre o alfabeto Σ = { a, b }: L { a 2n 1, n > 0 } 21. Converter num AFD e implemente-o computacionalmente o seguinte AFND sobre S = { 0, 1 }: 22. Converter num AFD e implemente-o computacionalmente, o seguinte AFND sobre S = { a, b }: 23. Determine um AFD equivalente ao AFND sobre o alfabeto Σ = { 0, 1 } que aceita a seguinte linguagem (problema 1) e implemente-o computacionalmente: Conjunto de cadeias que contém uma subcadeia com dois 1 s, seguida de uma outra subcadeia com dois 0 s (exemplos: 10110001 e 1100).
Folha Prática Autómatos Finitos 7 24. Considere o seguinte AFND: a) Qual a linguagem que aceita este AFND? b) Determine um AFD equivalente e implemente-o computacionalmente. 25. Determine um AFND que aceite a seguinte linguagem sobre o alfabeto S = { a, b }: Conjunto de todas as cadeias de S* que contêm pelo menos um par de a s separados por uma subcadeia de comprimento múltiplo de 3 (exemplo: abbababbababb). 26. Determine um AFND sobre o alfabeto S = { a, b } que aceite cada uma das seguintes linguagens: a) L = L(a*b*c*) b) L = { a n b m c p, n, m, p 0 } c) L = { a n b n c n, n 0 } 27. Determine um AFD equivalente ao AFND sobre o alfabeto Σ = { a, b } que aceita a seguinte linguagem (problema 10.a)) e implemente-o computacionalmente: L = L(a*b*c*) 28. Seja M = (Q, S, d, q 0, F) um AFND, em que Q = { q 0, q 1, q 2, q 3, q 4 }; S = { a, b }; F = { q 3, q 4 } d é a função de transição definida de Q x S Q da seguinte forma: d(q 0, a) = { q 1 } d(q 2, a) = { } d(q 4, a) = { q 1, q 3 } d(q 0, b) = { q 2 } d(q 2, b) = { q 4 } d(q 4, b) = { q 4 } d(q 1, a) = { q 1, q 2 } d(q 3, a) = { q 3 } d(q 1, b) = { q 2, q 3 } d(q 3, b) = { } a) Represente o diagrama de transição de estados do AFND dado b) Prove que: i) qualquer cadeia de L(a(abba)*ba + aa*b) pertence a L(M) ii) existem cadeias de L(M) que não pertencem a L(a(abba)*ba + aa*b) iii) nenhuma cadeia que comece por ba pertence a L(M) c) Determine o estado em que o autómato M fica após consumir as seguintes cadeias: i) baaaba ii) baab iii) baaabaaab iv) bbbaab d) Aplicando o método para transformação de um AFND num AFD equivalente, determine um AFD equivalente a M e implemente-o computacionalmente.
Folha Prática Autómatos Finitos 8 29. Determine um AFD representado por um quíntuplo (Q, S, d, q 0, F), indicando o conjunto de transições d(q, a) para cada par (q, a) Q x S, sabendo que S = { 0, 1, 2 }, para cada um dos seguintes autómatos e implemente-o computacionalmente: a) c) b) d) 30. Por aplicação de métodos de transformação, determine um AFD que aceite a linguagem S*\L(A (i.e., a complementar de L(A)) para cada um dos autómatos A indicados no problema anterior.