Exercícios Associados à Aula 02 (14/08/2013) Os exercícios da disciplina devem ser feitos pelos alunos à medida que as aulas vão sendo dadas. Dúvidas devem ser dirigidas à professora, por email ou em sala de aula. Os exercícios são parte da matéria. Recursos para estes exercícios Livro Texto Adotado Linguagens Formais. Teoria, Modelagem e Implementação Marcus Vinicius Medina Ramos, João José Neto e Ítalo Santiago Vega Editora Bookman (Porto Alegre). 2009 http://www.univasf.edu.br/~marcus.ramos/livro-lfa/index.html Capítulo 1: Recapitulação de Matemática Discreta pp. 31-42 Capítulo 2: Conceitos Básicos de Linguagens pp.77-81 JFLAP 7.0 Pode ser baixado de http://www.jflap.org/ ou http://www.jflap.org/jflaptmp/ Há uma versão leve (JFLAPthin.jar) no segundo endereço; pode ser usada também, apesar de ter recursos gráficos mais restritos que a completa (JFLAP.jar). Exercícios 1. Utilizando o JFLAP, explore passo-a-passo o comportamento dos seguintes autômatos ao receberem (input>step by state ou input>fast run) as seguintes entradas (sem aspas): inf1626 ; inf16 ; inf162 ; inf16262 ; inf16262626 ; e inf16262. inf1626(1) inf1626(2) inf1626(3)
2. Abra simultaneamente os três autômatos acima no JFLAP. Explore a equivalência entre eles, através do menu test>compare equivalence, para todas as duplas possíveis. O que você descobriu? A partir destes resultados, como você definira intuitivamente (em suas próprias palavras) o que são autômatos equivalentes? 3. Para cada um dos autômatos, examine o que acontece se você escolhe a opção de marcar não-determinismo usando o menu test>highlight nondeterminism. O que você descobriu? A partir destes resultados, como você definira intuitivamente (em suas próprias palavras) o que é não determinismo? 4. O que você tem a comentar pensando em custos de computação sobre as diferenças entre os dois autômatos equivalentes utilizados neste exercício? 5. A cadeia inf1626 é aceita (processada com sucesso) por todos os três autômatos. Imaginando que os três sejam abstrações de três programas diferentes, feitos tãosomente para reconhecer a cadeia inf1626, o que você tem a comentar sobre o autômato inf1626(1).jff comparativamente aos outros dois? Ele é melhor ou pior do que os demais? Por quê e/ou em que situações específicas? Os autômatos (com extensão.jff ) podem ser baixados conjuntamente no pacote inf1626-automatos.zip, pelo site da disciplina. 6. Vamos agora estender o nosso poder de reconhecer cadeias e considerar que queremos fazer a especificação abstrata (i.e. construir um autômato) para um pequeno programa capaz de reconhecer todos e somente os códigos possíveis para as disciplinas regulares de graduação de um departamento de Informática. Estes códigos são sempre iniciados pelo prefixo inf, seguido do dígito 1, seguidos por uma sequência de três dígitos pertencentes ao conjunto {0,1,2,3,4,5,6,7,8,9}. Construa este autômato no JFLAP, monte uma lista de códigos corretos e outra de códigos incorretos e confira o comportamento do seu autômato submetendo sua lista através do menu input>multiple run. O mais prático é colocar sua lista em um arquivo txt e carregá lo clicando no botão Load Inputs que aparece na parte inferior da janela que se abre para você informar as múltiplas cadeias de entrada que você quer processar. 7. Os estados finais dos processadores significam algo importante. Quando ao processar uma cadeia um autômato chega a um estado final e não há mais símbolo algum para ser processado na cadeia de entrada, isto significa que a cadeia foi reconhecida com sucesso e portanto pertence ao conjunto de cadeias válidas da linguagem ou sistema de codificação que aquele autômato pode processar (e assim especifica formalmente). Voltando à questão dos códigos de disciplinas, abordada no exercício anterior, considere agora que o departamento de Informática do exemplo tem, além de disciplinas de graduação, disciplinas de pós-graduação. O código destas últimas é praticamente igual ao do das de graduação, exceto que entre o prefixo inf e os três dígitos que identificam cada disciplina, para a pós-graduação se usa 2 e não 1, como é o caso da graduação.
Autômatos têm de ter apenas UM estado inicial, mas podem ter tantos estados finais quanto se queira. Baseado no autômato que você construiu para o exercício (6), faça agora dois autômatos distintos para processar com sucesso qualquer cadeia de código válido de disciplinas do departamento de Informática, sejam elas de graduação ou pós-graduação. O primeiro autômato que você construir deve ter um único estado final. O segundo deve ter dois estados finais distintos: um que significa o reconhecimento de um código de disciplina de graduação e outro que significa o reconhecimento de um código de disciplina de pós-graduação. Comente o que você acha vantajoso e desvantajoso em cada caso, considerando a eficiência de (a) reconhecer um cadeia que o autômato acabou de processar com sucesso e (b) interpretar uma cadeia que o autômato acabou de processar com sucesso. 8. Aproveite os exemplos dos autômatos pqsystem-[a..e], que ilustraram análises com o JFLAP na aula 02 (14/08/2013), e tente implementá-los em Ruby. Siga as dicas de programação e ilustrações apresentadas em aula. Estes exercícios são apenas para reforçar pontos tratados na aula introdutória da disciplina. Servem para o aluno fazer sozinho o que foi apresentado em sala pela professora, ganhando familiaridade não apenas com o JFLAP, mas também e principalmente com os conceitos que constituem a base da disciplina. A recapitulação de Matemática Discreta visa fixar elementos basicos da teoria de conjuntos que serão necessários para a disciplina.
Para casa da aula 3
Exercícios Associados à Aula 04 (21/08/2013) Os exercícios da disciplina devem ser feitos pelos alunos à medida que as aulas vão sendo dadas. Dúvidas devem ser dirigidas à professora, por email ou em sala de aula. Os exercícios são parte da matéria. Obs: exercícios extraídos do cap.2 do livro-texto da disciplina (Ramos, Neto e Vega) 1. O que significa definir formalmente uma linguagem? Apresente pelo menos dois motivos que justifiquem a importância de se definir linguagens formalmente. 2. O que significa dizer que uma linguagem é definida por enumeração? Por que as enumerações são pouco utilizadas na definição formal de linguagens? Que alternativas se apresentam para contornar a dificuldade no emprego das enumerações? 3. Considere o alfabeto ={a,ab,abc}. Dê os seguintes exemplos sobre : a) Símbolo; b) Cadeia qualquer; c) Cadeia de comprimento 2; d) Cadeia de comprimento 4; e) Linguagem finita; f) Linguagem infinita (descrita de forma finita).
Exercícios Associados à Aula 04 (21/08/2013) Continuação As perguntas do exercício 4, a seguir, se referem ao fechamento reflexivo e transitivo ou ao fechamento transitivo de linguagens definidas sobre um alfabeto. Reproduzimos aqui um trecho do livro de Ramos (pp. 82 e 83) em que o autor define o fechamento reflexivo e transitivo e mostra como podemos definir linguagens através desta operação. 4. Determine os casos em que: a) Uma linguagem L coincide com L*- {ε}; Tomando-se a definição acima, L* é a união de todos os conjuntos que representam as possíveis concatenações de L consigo mesma, zero, uma, duas (L,L), três (L,L,L) até infinitas vezes. A concatenação de L consigo mesma zero vezes gera uma cadeia vazia. Então para L = L*- {ε} L deverá conter de uma a infinitas concatenações consigo mesma, ou seja, deverá ser igual a L + se L não contiver entre suas sentenças a cadeia vazia (veja Ramos, acima).
Uma definição concisa para esta condição é a de que ela ocorre com: Qualquer linguagem tal que L + -L= (que é o mesmo que L= L + ). b) Uma linguagem L não coincide com L*- {ε}; Seguindo o raciocínio acima, uma definição concisa para esta condição é a de que ela ocorre com: Qualquer linguagem para a qual exista um conjunto L tal que L + -L=L. c) Uma linguagem L faz com que L + coincida com L*- {ε}; Isto é verdadeiro para qualquer linguagem L tal que ε L. Se a cadeia vazia pertencesse à linguagem L, a ocorrência de ε corresponderia de fato uma concatenação de n cadeias vazias, para qualquer n 1. Porém, se a cadeia vazia não pertence à linguagem, a expressão L + = L*- {ε} é verdadeira por definição. d) Uma linguagem L faz com que L + não coincida com L*- {ε}; Dada a resposta acima, se a cadeia vazia pertence à linguagem L, a ocorrência de ε corresponde de fato uma concatenação de n cadeias vazias, para qualquer n 1. Portanto o conjunto L*- {ε} exclui mais cadeias do que o conjunto L+. Logo L + não coincide com L*- {ε}. e) Uma linguagem L faz com que L* coincida com L + U {ε}; Sempre, por definição. f) Uma linguagem L faz com que L* não coincida com L + U {ε}; Nunca, por contradição com a definição de L* e L +. 5. Apresente uma linguagem L sobre {a,b} que coincida com L R. L R é a linguagem formada pelas cadeias reversas de R. Ora, para as cadeias de uma linguagem coincidirem com o reverso de si mesmas, estamos falando de palíndromos. A definição de uma linguagem formara por palíndromos sobre o alfabeto {a,b} é, por exemplo, aquela que contém as seguintes produções: S a S b S asa S bsb 6. Seja Σ um alfabeto qualquer. Defina, utilizando operações sobre conjuntos: a) A menor linguagem sobre Σ; L = {} -- uma linguagem vazia b) A maior linguagem sobre Σ; L = Σ* = Σ 0 U Σ 1 U Σ 2 U... U Σ
c) A maior linguagem sobre Σ que não inclua sentenças de comprimento menor ou igual a 3; L = Σ 3 U Σ 4 U Σ 5 U... U Σ d) O conjunto de todas as linguagens que podem ser definidas sobre Σ; O conjunto de todos os subconjuntos possíveis de Σ* é o seu conjunto potência (ou conjunto de todas as partes), representado por 2 Σ*. Ele corresponde também ao conjunto de todas as linguagens (que nada mais são do que conjuntos, elas próprias) que se pode definir sobre Σ. e) O conjunto de todas as linguagens não-vazias que podem ser definidas sobre Σ. Σ + não contém o vazio. Portanto, o conjunto potência de Σ + não conterá o vazio tampouco. Assim, 2 Σ+ representa o conjunto de todas as linguagens não-vazias que se pode definir sobre Σ. 7. Seja Σ um alfabeto, A Σ, B Σ, A B =. Utilizando apenas as operações de fechamento, união e concatenação sobre Σ, A e B, defina as maiores linguagens sobre Σ cujas sentenças α satisfaçam aos seguintes requisitos: a) α contém no mínimo um símbolo do conjunto A; L = Σ*. A +. Σ* b) α contém pelo menos um símbolo de A como prefixo e pelo menos dois símbolos de B como sufixo; L = A +. Σ*.γ.B + γ B + c) α contém exatamente três símbolos de A, porém α pode conter qualquer quantidade de outros símbolos; L = Σ*. γ. Σ*. δ. Σ*. χ. Σ* γ,δ,χ A 1 d) α contém exatamente um símbolo de A e um símbolo de B, sendo o símbolo de B justaposto imediatamente após o símbolo de A. Nenhum outro símbolo de A ou B comparece em α, embora α possa conter um número arbitrário de outros símbolos quaisquer. L = (Σ-(A U B))*.γ.δ.(Σ-(A U B))* γ A 1,δ B 1 8. Conceitue, em termos de linguagens e cadeias, as seguintes representações: a) { }; Uma linguagem vazia b) {ε}; Uma linguagem composta de uma única cadeia, que é a cadeia vazia c) ε ; A cadeia vazia d) "ε"; O símbolo ε (letra grega épsilon) e) ; O conjunto vazio f) { }; Uma linguagem composta de um único símbolo, que é g) " "; O símbolo
h) ""; A ausência de símbolos i) {, {}, "ε", ε, "", { }, {ε}, {"ε"}, " ", {" "} }. Uma linguagem à qual pertencem as cadeias do conjunto indicado (isto é, os elementos separados por vírgula) 9. Demonstre que não existe w {a,b}* tal que aw = wb. Se w for a cadeia vazia, a igualdade é obviamente falsa. Caso contrário: Se aw = wb então w = aab (precisa começar com a e terminar com b). Supondo que a=e, já que a cadeia do meio não importa para a demonstração, a condição para a igualdade seria a de que a.ab = ab.b o que é evidentemente falso. Logo, não há w {a,b}* tal que aw = wb 10. Se w {a,b}* e abw = wab, demonstre que w = (ab) n, n 0. w ora é sufixo, ora prefixo, de ab ; para abw=wab então: ou w = e -- caso n=0 : (ab) 0 ou w = ab -- caso n=1 : (ab) 1 ou w = ab.x.ab -- caso n>1 : (ab) 1. (ab) x. (ab) 1 para x 0 -- Se w=(ab) n para n 0 de fato abw = wab Se w for a cadeia vazia, a igualdade é obviamente verdadeira. Caso contrário: Se abw = wab então as restrições de sufixação de w em abw e de prefixação de w em wab têm de ter alguma interseção. Examinando-as: Para ser um prefixo não nulo válido em wab a restrição sobre w é que w = (ab) + Para ser um sufixo não nulo válido em abw a restrição sobre w é que w = (ab) + Como as restrições nos dois casos acima são idênticas - w = (ab) +. Da mesma forma, como w = (ab) * = (ab) n, n 0 cobre tanto os prefixos e sufixos nulos, quanto os não nulos, então podemos demonstrar o que a questão propõe.