Conceitos Preliminares

Tamanho: px
Começar a partir da página:

Download "Conceitos Preliminares"

Transcrição

1 Capítulo 1 Conceitos Preliminares Inicialmente, na Seção 1.1, será abordado o problema fundamental relativo ao uso dos computadores, ou seja, o da representação, com o intuito de fazer transparecer a importância dos conceitos matemáticos a serem introduzidos, tanto no nível de modelagem quanto no de representação propriamente dito. O conceito de linguagem formal, a partir do qual será desenvolvido todo o material do restante do texto, será mostrado na Seção 1.2. Em seguida, será dada a noção de gramática, um dos formalismos mais utilizados para a definição de linguagens formais. Nessas duas seções, os conceitos de linguagem formal e de gramática serão vistos de modo sucinto, nas suas formas mais gerais; nos capítulos seguintes, eles serão retomados em conexão com classes específicas de linguagens. Para finalizar o capítulo, será apresentada a noção de problemas de decisão. 1.1 Representação Quando se pretende resolver um problema por computador, uma tarefa importante é representar as entidades envolvidas, sejam elas concretas ou não. A representação de umaentidade nas formasdeumprograma, deentradaparaumprogramaou desaídade um programa é, muitas vezes, constituída por sequências de símbolos. 1 Considere, por exemplo, uma aplicação referente à folha de pagamento de uma empresa. A entidade correspondente ao processo de cálculo da folha de pagamento é representada por uma sequência de símbolos em uma linguagem de programação, denominada programa; a entrada para tal programa é constituída de sequências de símbolos representando vários tipos de entidades, como o mês em questão, o ano, os nomes dos empregados, o número de horas trabalhadas para cada empregado etc.; a saída do programa é constituída por sequências de símbolos representando os empregados, o total de horas trabalhadas, a remuneração etc. No exemplo do parágrafo anterior, os símbolos utilizados nas representações das 1 Embora cada vez mais estejam sendo usados recursos gráficos bi e tridimensionais, som etc. De qualquer maneira, em algum nível, mesmo tais entidades são representadas mediante sequências de símbolos. 1

2 2 Editora Thomson Introdução aos fundamentos da computação Entidade Modelo Matemático Representação Mês Número inteiro no Um dos caracteres 1, 2, 3, 4, 5, intervalo [1,12] 6, 7, 8, 9, 0, A ou B Remuneração Número real positivo Número real na base 10 Presença Vetor de números, um Sequência de números reais na para cada dia do mês base 10 FP Relação Tabela em que cada linha tem o nome, cargo, salário etc. Cálculo de FP Algoritmo Programa Figura 1.1 A matemática entre a entidade e a representação. diversas entidades mencionadas são normalmente os caracteres (letras, dígitos e/ou caracteres especiais). No entanto, aqui o que pode ser considerado símbolo ficará em aberto, de forma que não se tenha, de partida, uma restrição desnecessária quando se pretenda conceber alguma linguagem para representação de alguma coisa. Assim, por exemplo, podem ser usados como símbolos sequências específicas de alguns caracteres específicos. Podem ser usados como símbolos alguns desenhos inventados especificamente para a aplicação em questão. E assim por diante. Muitas vezes, é útil considerar, entre uma entidade representada e a sequência de símbolos que a representa, a existência de um terceiro elemento: o modelo matemático correspondente à entidade representada. A Figura 1.1 mostra alguns exemplos (FP refere-se à abreviação de folha de pagamento). Veja que a representação do mês não é lá muito convencional (outubro representado por 0, novembro por A e dezembro por B). Por outro lado, as descrições de algumas representações estão um pouco vagas, não especificando precisamente (por enquanto) quais são as sequências realmente permitidas; por exemplo, não é explicitada qual é a linguagem de programação específica do programa que representa o cálculo da folha de pagamento. Na coluna representação, da Figura 1.1, o elemento fundamental é a sequência de símbolos. Ela é utilizada na representação de qualquer tipo de entidade, de maneira a propiciar a comunicação entre humanos, entre humanos e computadores e entre computadores, além do processamento computacional que a envolve. Por outro lado, as próprias sequências de símbolos podem ser estudadas matematicamente, ou seja, há um modelo matemático especialmente desenvolvido para tratar das mesmas. Em tal modelagem, em geral, os símbolos e as sequências de símbolos são consideradas como componentes do que se denomina linguagens formais. Exemplo 1 Seja o (sub)problema de representar o mês em algum tipo de aplicação. Os meses do ano, de janeiro a dezembro, são as entidades a serem representadas. Na Figura 1.1 tais entidades são modeladas como o conjunto dos números 1 a 12. Sendo um pouco mais abstratos, basta considerar como modelo um conjunto de 12 elementos; considerar tais elementos como números é absolutamente dispensável. Por outro lado, existem inúmeras representações possíveis, além daquela exibida na Figura 1.1. Por

3 Newton José Vieira Capítulo 1: Conceitos preliminares 3 exemplo: As palavras janeiro, fevereiro,..., dezembro. Símbolos usados: letras a, b,..., z. Numerais na base decimal. Símbolos usados: os dígitos 0 a 9. Numerais na base binária. Símbolos usados: os dígitos 0 e 1. Numerais em algarismos romanos. Símbolos usados: as letras I, V e X. Sequências de um a doze 0s. Símbolos usados: apenas o dígito 0. A linguagem formal usada para representar os meses é, assim, constituída de sequências de alguns símbolos escolhidos. Em nível matemático, uma linguagem formal será definida, na Seção 1.2, justamente como um conjunto de sequências de símbolos, sendo o conjunto dos símbolos escolhidos denominado o alfabeto da linguagem. Um exemplo importante de linguagem formal é uma linguagem de programação. Cada programa escrito em uma certa linguagem de programação é uma sequência de símbolos. No caso, pode-se convencionar que os símbolos são os caracteres que podem aparecer nos programas. Mas, alternativamente, pode-se convencionar que os símbolos são certas sequências específicas de caracteres. Por exemplo, a palavra while, presente em muitas linguagens de programação, pode ser considerada como uma sequência de 5 símbolos, se se considerar cada caractere como um símbolo, ou como um único símbolo. Cada uma dessas duas visões pode ser a mais conveniente dependendo da aplicação. De qualquer forma, considerando um programa como uma sequência de símbolos, a linguagem de programação pode ser considerada como o conjunto de tais sequências. Uma boa parte deste texto versará sobre linguagens formais. Isso será importante tanto para introduzir técnicas bem fundamentadas para a construção de algoritmos, visando amplo espectro de aplicações, quanto para caracterizar o conceito de computabilidade. Nesse último aspecto, será visto, por exemplo, que existe uma infinidade de funções que não são computáveis; em particular, serão vistos problemas com enunciados bastante simples para os quais não existe algoritmo e, portanto, não há programa em nenhuma linguagem de programação. Exemplo 2 SejaJ o conjunto dos programas em Java. Tal conjunto serávisto nestelivro como a linguagem Java. Neste caso, o problema de determinar, dada uma sequência de símbolos (no caso, caracteres) x qualquer, se ela pertence ao conjunto J, é computável. Ele é o problema da análise sintática: 2 se x J, então x é (um programa) sintaticamente correto; se x J, x é incorreto. Um exemplo de problema para o qual não existe algoritmo é o de, dado um programa qualquer em Java, determinar se ele emitirá algum sinal sonoro, isto é, dada uma sequência de símbolos x, determinar se ela pertence ao conjunto {x J x, ao ser executado, emite um sinal sonoro}. Para fazer o estudo das linguagens formais, assim como para considerar modelos alternativos para o conceito de computabilidade, são necessários alguns elementos de 2 A expressão x A denota que o elemento x pertence ao conjunto A, e x A denota que x não pertence a A. Elementos de teoria dos conjuntos serão apresentados na Seção A.2.

4 4 Editora Thomson Introdução aos fundamentos da computação matemática, que estão revisados no Apêndice A. Esses elementos também são úteis na etapa intermediária de modelagem ilustrada na Figura 1.1. Em tal apêndice, cada assunto é revisado de forma bastante concisa, mas suficiente para dar suporte ao aprendizado do que vem a seguir. Na próxima seção, o conceito de linguagem formal introduzido anteriormente será um pouco mais elaborado, de forma a dar suporte ao conteúdo dos capítulos restantes. Exercícios 1. Encontre uma maneira de representar, por meio de uma sequência dos símbolos x e o: a) qualquer número inteiro positivo; b) qualquer vetor de números inteiros positivos; c) qualquer matriz de números inteiros positivos. 2. Uma versão do problema da parada, problema este a ser abordado no Capítulo 5, é: dado um programa (sem entrada), determinar se ele para. Lá no Capítulo 5, será visto que não existe algoritmo que, recebendo como entrada um (texto de) programa qualquer em Java (ou em outra linguagem de programação), determine se ele para ou não. Em outras palavras, o problema da parada não é computável. Sabendo disto, argumente que o problema enunciado no Exemplo 2, dado um programa qualquer em Java, determinar se ele emitirá algum sinal sonoro, também não é computável. 1.2 Linguagens Formais Uma linguagem formal, ao contrário de uma linguagem natural, é tal que: a) tem uma sintaxe bem definida, de forma que, dada uma sentença, seja sempre possível saber se ela pertence ou não à linguagem; e b) tem uma semântica precisa, de modo que não contenha sentenças sem significado ou ambíguas. As linguagens formais são úteis, não só na matemática, mas também nas áreas que utilizam a matemática como ferramenta, como as engenharias, a física, a química e a computação. No caso da computação, as linguagens formais têm uma importância ímpar, pois a maioria dos profissionais da área lida diretamente com uma ou mais no dia-a-dia. Exemplos de linguagens formais, ou concretizações diretas das mesmas, são as linguagens Java, C, Pascal, HTML etc. Em princípio, se um programador ou analista projeta um programa ou sistema que envolve um diálogo com o usuário, ele tem o problema de projetar a linguagem (formal) de comunicação. Desde o nível de instruções de máquina até os níveis mais altos da programação de um computador, as linguagens formais são uma presença constante.

5 Newton José Vieira Capítulo 1: Conceitos preliminares 5 Nesta seção, será vista uma definição de linguagem formal bastante geral, sem tocar na parte de semântica. À primeira vista isso pode parecer uma limitação, mas o fato é que uma abordagem puramente sintática é suficiente para a caracterização do conceito de computabilidade, um dos objetivos deste texto, assim como para servir de base para ampla gama de aplicações, como ficará claro no decorrer do livro. Além disso, a especificação e o processamento da sintaxe de linguagens formais já envolve um material bastante extenso, que pode anteceder um estudo posterior de semântica. No entanto, muitas vezes consegue-se uma estrutura sintática rica o suficiente para capturar todos os aspectos relevantes da linguagem, não havendo a necessidade de considerar uma semântica à parte. Toda linguagem 3 tem um alfabeto associado. Um alfabeto é um conjunto finito não vazio de elementos que serão referidos como símbolos. Uma palavra 4 sobre um alfabeto Σ é uma sequência finita de símbolos de Σ. 5 O tamanho de uma palavra x, x, é o número de símbolos que a compõem. Em particular, existe a palavra vazia, constituída de zero símbolos; tal palavra será designada por λ. Assim, λ = 0. Exemplo 3 Dois exemplos de alfabetos particularmente importantes são: Σ = {1} e Γ = {0,1}. São palavras sobre Γ: λ, 0, 1, 00, 01, 10, 11, 000 etc. Com esse alfabeto, pode-se representar qualquer número. Uma possibilidade é utilizar a codificação na base 2: 0 é representado por uma infinidade de palavras: 0, 00 etc.; 1 é representado por uma infinidade de palavras: 1, 01 etc.; apenas λ não representa nenhum número. São palavras sobre Σ: λ, 1, 11, 111 etc. Observe que, com esse alfabeto, também se consegue representar qualquer número natural! Por exemplo, basta representar o número n por uma palavra de tamanho n. Nesse caso, cada palavra x representaria o número x. Comparando a representação do parágrafo anterior com a deste, note que a menor palavra x usada para representar um número n na base 2 tem tamanho log 2 n +1, e a palavra y usada para representar o mesmo número n na base 1 possui tamanho n. Dessa forma, nessa segunda representação a palavra usada é exponencialmente maior. Seja a um símbolo qualquer. A notação a n, em que n N, será utilizada para designar a palavra constituída de n as em sequência. Assim, por exemplo, dado o alfabeto {0,1}, são exemplos de palavras sobre tal alfabeto: 1 0 = λ, 0 4 = 0000, = etc. Umalinguagem sobreumalfabeto Σéumconjuntodepalavras sobreσ. Denotando o conjunto de todas as palavras sobre Σ por Σ, diz-se, então, que uma linguagem sobre Σ é qualquer subconjunto de Σ. 3 Daqui para a frente, quando se disser linguagem, quer-se dizer linguagem formal, a menos que se diga o contrário. 4 Em inglês, são utilizados os termos string ou word. 5 Formalmente, uma sequência é uma função f : {1,2,3,...,n} Σ. Ela é representada normalmente por f(1)f(2)f(3) f(n). Por exemplo, a sequência f : {1,2,3} {0,1} tal que f(1) = 1, f(2) = 0 e f(3) = 1 é representada por 101.

6 6 Editora Thomson Introdução aos fundamentos da computação Exemplo 4 Seja o alfabeto Σ = {0,1}. O conjunto de todas as palavras sobre Σ é Σ = {λ,0,1,00,01,10,11,000,...}. São exemplos de linguagens sobre Σ:. é a linguagem mais simples que existe; não contém palavras; {λ}. Contém uma única palavra: a palavra vazia; {0}. Contém uma única palavra: 0; {λ,0}. Contém duas palavras: λ e 0; {w Σ 1 w 5}. Contém 5 i=1 2i palavras; {0 n n é um número primo}. Esta linguagem é infinita, já que existe uma infinidade de números primos; {0 n 1 n n N}. Linguagem constituída de toda palavra de tamanho par cuja primeira metade só contém 0s e cuja segunda metade só 1s; Σ. Contém todas as palavras sobre o alfabeto Σ. Assim como as três últimas linguagens do Exemplo 4, a maioria das linguagens de interesse é infinita. Como fazer para especificar tais linguagens, se não dá para listar explicitamente todas as suas palavras? Na verdade, como será visto oportunamente, existem muitas opções para isso, cada uma delas possuindo contextos em que é mais apropriada. Como uma linguagem é um conjunto, pode-se lançar mão das operações sobre conjuntos, definidas na Seção A.2. Assim, por exemplo, se L 1 e L 2 são linguagens sobre alfabetos Σ 1 e Σ 2, respectivamente, também são linguagens: L 1 L 2, uma linguagem sobre Σ 1 Σ 2 ; L 1 L 2, uma linguagem sobre Σ 1 Σ 2 ; L 1 L 2, uma linguagem sobre Σ 1. L 1 = Σ 1 L 1, uma linguagem sobre Σ 1. Note que, por definição, o complemento de uma linguagem é constituído das palavras no alfabeto da própria linguagem, excetuadas as palavras da mesma. Além dessas, levandose em consideração que os elementos que constituem as linguagens são as palavras, existem outras operações, tanto sobre palavras quanto sobre linguagens, que podem auxiliar na especificação de uma linguagem. Veja ainda que: P(L 1 ) é um conjunto de linguagens sobre Σ 1 ; P(Σ 1 ) é o conjunto de todas as linguagens sobre Σ 1. A concatenação de duas palavras x = a 1 a 2...a m e y = b 1 b 2...b n é a palavra xy = a 1 a 2...a m b 1 b 2...b n. Em particular, note que λw = wλ = w para qualquer palavra w. Tal definição implica que a concatenação é uma operação associativa: x(yz) = (xy)z para quaisquer palavras x, y e z. Desse modo, uma sequência de concatenações poderá ser escrita sem parênteses. E para expressar a concatenação de uma palavra w com ela mesma n 1 vezes, pode-se escrever w n ; em particular, define-se que w 0 = λ para qualquer palavra w.

7 Newton José Vieira Capítulo 1: Conceitos preliminares 7 Exemplo 5 Sejam x = aab e y = cc. Então yx = ccaab, x 2 = xx = aabaab, xy 2 = aab(cc) 2 = aabcccc, axbbyc = aaabbbccc = a 3 b 3 c 3, λ(aa) 3 λλy 3 λ = a 6 c 6. Uma palavra x é dita ser um prefixo de uma palavra w se w = xy para alguma palavra y; é dita ser um sufixo de w se w = yx para alguma palavra y; e é dita ser uma subpalavra de w se w = yxz para algum par de palavras y e z. As três partes, x, y e z, podem ser λ ou não. Observe que, em particular, λ e w são prefixos, sufixos e subpalavras de qualquer palavra w, e também que prefixos e sufixos são subpalavras. Exemplo 6 Considere a palavra abc. Seus prefixos são: λ, a, ab e abc. Seus sufixos: λ, c, bc eabc. As subpalavras deabcsão: λ, a, b, c, ab, bceabc. Apenas a subpalavra b não é prefixo nem sufixo de abc. O reverso de uma palavra w = a 1 a 2...a n, w R, é a sequência dos símbolos de w na ordem reversa, isto é, w R = a n a n 1...a 1. Uma palavra w tal que w = w R é um palíndromo. Veja que todo palídromo de tamanho par é da forma xx R, e que os palíndromos de tamanho ímpar são da forma xax R, em que a é um símbolo do alfabeto em questão. Exemplo 7 Alguns reversos de palavras: λ R = λ; a R = a; (c 5 ) R = c 5, (abcaabb) R = bbaacba. Alguns palíndromos: λ, a, bb, ccc, aba, baab, abcacba. A concatenação de duas linguagens L 1 el 2 é dada por: L 1 L 2 = {xy x L 1 e y L 2 }. Em particular, L = L = e {λ}l = L{λ} = L, para qualquer linguagem L. Exemplo 8 Sejam as linguagens L 1 = {w {0,1} w = 5} e a linguagem L 2 = {0y y {0,1} }. Então: L 1 L 1 = {w {0,1} w = 10}; L 1 L 2 = {w {0,1} o sexto símbolo de w é 0}; L 2 L 1 = {w {0,1} w começa com 0 e w 6}; L 2 L 2 = {0y y {0,1} e y contém no mínimo um 0}. SejaLumalinguagem. AnotaçãoL n seráutilizadaparadesignarll...l(n vezes). Recursivamente: a) L 0 = {λ}; b) L n = L n 1 L para n 1. L 0 = {λ} porque, segundo o item b desta definição, tem-se que (para n = 1) L 1 = L 0 L, e para que L 1 seja igual a L é preciso que L 0 seja {λ}. Exemplo 9 {0,1} 2 = {00,01,10,11}. Generalizando, {0,1} n = {w {0,1} w = n}paraqualquern 0. {λ,0,1} 2 = {λ,0,1,00,01,10,11}. Generalizando, {λ,0,1} n = {w {0,1} w n} para qualquer n 0. {0,01} 2 = {00,001,010,0101}.

8 8 Editora Thomson Introdução aos fundamentos da computação A operação fecho de Kleene de uma linguagem L, L, pode ser definida recursivamente assim: a) λ L ; b) se x L e y L, então xy L. A partir desta e da definição de concatenação de linguagens, pode-se verificar que: L = n NL n. Ou seja, L = L 0 L 1 L 2 = {λ} L LL. Define-se também o fecho positivo de Kleene de L: L + = LL. Pode-se verificar que: L + = n N {0} Segue diretamente dessas definições que L = L + {λ}. Pode-se mostrar também que L + = LL = L L. Exemplo 10 A seguir, são apresentadas algumas linguagens e seus fechos de Kleene: = {λ}, e + = ; {λ} = {λ} + = {λ}; {0} = {0 n n N} e {0} + = {0 n n 1}; L n. {λ,00,11} = {λ,00,11} + = {λ} {00,11} +. Com as operações definidas nesta seção, pode-se expressar (ou definir) de forma precisa algumas linguagens, como exemplificado a seguir. Exemplo 11 Seguem descrições informais, em português, para algumas linguagens sobre {0, 1}, bem como descrições mais formais utilizando as operações definidas nesta seção: a) o conjunto das palavras que começam com 0: {0}{0,1} ; b) o conjunto das palavras que contêm 00 ou 11: {0,1} {00,11}{0,1} ; c) o conjunto das palavras que terminam com 0 seguido de um número ímpar de 1s consecutivos: {0,1} {01}{11} ; d) oconjuntodaspalavras quecomeçam outerminamcom0: {0}{0,1} {0,1} {0}; e) o conjunto das palavras de tamanho par que começam ou terminam com 0: ({0,1}{0,1}) [{0}{0,1} {0,1} {0}]; f) o conjunto do item (e): [{0}{0,1}({0,1}{0,1}) ] [{0,1}({0,1}{0,1}) {0}];

9 Newton José Vieira Capítulo 1: Conceitos preliminares 9 g) o conjunto das palavras com um prefixo de um ou mais 0s seguido(imediatamente) de um sufixo de 1s de mesmo tamanho: {0 n 1 n n 1}; h) o conjunto das palavras formadas por concatenações de palavras da forma 0 n 1 n para n 1: k 1 {0 n 1 n n 1} k. Um aspecto muito importante é que as seis primeiras linguagens do exemplo anterior são linguagens definidas a partir de conjuntos finitos de palavras usando apenas as operações sobre conjuntos e as de concatenação e fecho de Kleene. O tratamento computacional de uma linguagem (verificar se uma palavra pertence ou não à mesma) que possa ser descrita dessa forma pode ser feito de forma extremamente eficiente. O Capítulo 2 irá tratar justamente desse tipo de linguagem e do respectivo tratamento computacional. Já as duas últimas linguagens do exemplo não podem ser descritas por meio daquelas operações a partir de conjuntos finitos, e seu tratamento computacional não pode ser feito de forma tão eficiente. Elas serão consideradas em capítulos posteriores. Como uma linguagem sobre um alfabeto Σ é sempre um conjunto contável, pois é um subconjunto de Σ, que é enumerável, existe a possibilidade de fazer uma definição recursiva, da forma mostrada na Seção A.6. Mas a verdade é que, na prática, as linguagens raramente são definidas dessa forma. Existe um formalismo, que permite o uso de recursão, porém foi especialmente projetado para a definição de linguagens: a gramática. Na próxima seção será apresentada uma breve introdução às gramáticas. Em capítulos posteriores, elas serão mais bem estudadas e exploradas pouco a pouco. Exercícios 1. Qual é o númerodeprefixos, sufixosesubpalavras deumapalavra de tamanho n? 2. Seja Σ = {0,1,#}. Sejam k e n números naturais tais que k n. a) Quantas palavras há na linguagem Σ k? b) Quantas palavras há na linguagem (Σ {λ}) k? c) Quantas palavras de n símbolos contêm exatamente k ocorrências de #? d) Quantas palavras de n símbolos contêm no máximo k ocorrências de #? 3. Seja Σ um alfabeto. Prove que se x,y,w Σ e xw = yw, então x = y. 4. Sejam A = {00,11}, B = {01,10} e C = {λ,1}. Calcule: a) AA; b) AC; c) CC; d) (AB)C; e) A(BC); f) A(B C);

10 10 Editora Thomson Introdução aos fundamentos da computação g) AB AC. 5. Sejam Σ = {0,1}, A = Σ {0} e B = {1}Σ. Descreva, em português, as linguagens a seguir. Não é necessário dizer que as palavras são de 0s e 1s. Por exemplo, A é o conjunto das palavras que terminam com 0. a) A B; b) A B; c) A B; d) B A; e) A; f) AB; g) BA. 6. Seja L = {λ,0,1}. a) Que linguagem é L 0? b) Que linguagem é L 2? c) Que linguagem é L n para n 0? d) Quantas palavras tem L n para n 0? 7. Sejam A = {0} e B = {1}. Determine A n B, AB n e (AB) n. 8. Sejam A = {λ,a} e B = {a,b}. Determine A n B, AB n e A n B n. Quantos elementos tem cada um desses conjuntos? 9. Encontre linguagens A, B e C tais que A(B C) AB BC. 10. Que linguagens são subconjuntos de quais outras? a) {a} ; b) {a} {b} ; c) {a} {b} ; d) {a,b} ; e) ({a} {b} ). 11. Sejam A = {a} e B = {bb}. Quantas palavras de n símbolos, para cada n 0, há em: a) A B? b) AB? c) A B? 12. Descreva mais formalmente as seguintes linguagens sobre o alfabeto {0, 1}: a) o conjunto das palavras com, no mínimo, um 0; b) o conjunto das palavras com, no máximo, um 0;

11 Newton José Vieira Capítulo 1: Conceitos preliminares 11 c) o conjunto das palavras de tamanho ímpar; d) o conjunto das palavras com um prefixo de um ou mais 0s seguido (imediatamente) de um sufixo de zero ou mais 1s; e) o conjunto dos palíndromos que não tenham símbolos consecutivos idênticos; f) o conjunto das palavras de tamanho par cuja primeira metade é idêntica à segunda. Procure ser bem preciso e conciso. 13. Sejam Σ = {0,1}, A = Σ 5 e B = {0}Σ. Para cada uma das linguagens a seguir, dê uma propriedade necessária e suficiente para que uma palavra pertença à mesma. Não é preciso dizer que a palavra contém apenas os símbolos 0 e 1. a) A ; b) B + ; c) A B; d) AB; e) A B. 14. Descreva, em português, as seguintes linguagens sobre o alfabeto {0, 1}: a) {0,1} {1}{0,1}; b) {0}{0,1} {0,1} {1}; c) {0,1} {01}{11}; d) {01,1}. e) {1,λ}({0}{0} {1}) {0} ; f) {0} {1}({0} {1}{0} {1}). 15. Seja Σ o conjunto de todas as 26 letras do alfabeto e C o conjunto das 21 consoantes. Seja D o conjunto de todas as palavras de um dicionário da lingua portuguesa, e, para cada letra l Σ, seja P l = {w D w contém a letra l}. A partir de tais conjuntos, usando operações sobre conjuntos, concatenações e fechos de Kleene, descreva o conjunto das palavras: a) que contêm pelo menos uma das letras A, B ou C; b) que contêm as letras A e B, mas não C; c) que não contêm A nem B; d) que começam com a letra A; e) que começam com a letra A e contêm pelo menos uma consoante; f) que contêm a subpalavra RR. 16. Expresse as linguagens a seguir utilizando as operações sobre conjuntos finitos de palavras de {0,1}. Considere o alfabeto como sendo {0,1}. a) o conjunto das palavras de 10 símbolos; b) o conjunto das palavras que têm de 1 a 200 símbolos;

12 12 Editora Thomson Introdução aos fundamentos da computação c) o conjunto das palavras que começam e terminam com o mesmo símbolo; d) o conjunto das palavras que contêm pelo menos um 0 e um 1; e) o conjunto das palavras que começam com 0 e contêm 00; f) o conjunto das palavras que não têm 00 como prefixo, mas têm 00 como sufixo; g) o conjunto das palavras que começam com 00 ou 11 e terminam com 01 ou 10; h) o conjunto das palavras em que todo 0 é seguido de dois 1s consecutivos; exemplos: λ, 1, , ; i) {01 n 0 n é ímpar}; j) o conjunto das palavras de {0} {1} de tamanho par; k) o conjunto das palavras com número par de 0s ou ímpar de 1s (ou ambos); l) o conjunto das palavras que contêm um ou dois 1s, cujo tamanho é múltiplo de 3; m) o conjunto das palavras com número par de 0s e ímpar de 1s. 17. Sejam A, B e C linguagens sobre um alfabeto Σ. Mostre que: a) A(B C) = (AB) (AC); b) nem sempre A(B C) = (AB) (AC). 18. Mostre que, se λ L, então L + = L e, se λ L, então L + = L {λ}. 19. Quando L é finita? 20. Prove que (w R ) n = (w n ) R para toda palavra w e todo n N. 21. Prove que não existe x {0,1} tal que 0x = x Sejam L 1 e L 2 linguagens sobre um alfabeto Σ tais que L 1 L 2. Prove que L 1 L Apresente um exemplo em que L 1 L 2 = (L 1 L 2 ), mas L 1 L 2 e L 2 L Mostre que os conjuntos a seguir são enumeráveis: a) {0} ; b) {0} {1}. 25. Seja a seguinte definição recursiva da linguagem L sobre o alfabeto {0, 1}: a) λ L; b) se x L, então 0x L e x1 L; c) nada mais pertence a L. Que linguagem é L? 26. Seja a linguagem X, de alfabeto {a, b}, definida assim:

13 Newton José Vieira Capítulo 1: Conceitos preliminares 13 a) λ X; b) se x X então ax X e axbx X; c) x X somente se pode ser obtido como especificado em (a) e (b). Sejamn a (x) en b (x) onumerodeasedebs, respectivamente, napalavra x. Prove, por indução, que n a (x) n b (x). 27. Dê definições recursivas para as seguintes linguagens: a) {0 n 1 n n N}; b) {w {0,1} w contém 00}; c) {w {0,1} w é palíndromo}; d) {xx x {0,1} }; e) { n 1 n N}. 1.3 Gramáticas As gramáticas são um formalismo originalmente projetado para a definição de linguagens. Nesta seção, será apenas definido o conceito de gramática e apresentados alguns poucos exemplos. Nos próximos capítulos, o estudo de gramáticas, associado a classes específicas de linguagens, será retomado e serão apresentados muitos outros exemplos. Antes de dar uma definição precisa de gramática, serão apresentados os conceitos envolvidos de maneira informal. Como foi dito na Seção A.6, uma definição recursiva provê um meio de construir (ou gerar) os elementos de um conjunto (enumerável). Similarmente, uma gramática mostra como gerar as palavras de uma linguagem. O elemento fundamental das gramáticas é a regra. 6 Uma regra é um par ordenado (u,v), tradicionalmente escrito na forma u v, em que u e v são palavras que podem conter símbolos de dois alfabetos disjuntos, um com símbolos denominados variáveis, ou não terminais, e outro com símbolos chamados terminais. As variáveis são símbolos auxiliares para a geração das palavras da linguagem, enquanto o conjunto de terminais nada mais é que o alfabeto da linguagem definida. Nos exemplos a seguir, serão usadas letras maiúsculas para as variáveis e minúsculas para os terminais. Segue um exemplo de regra: aab baa Essa regra especifica que: dada uma palavra que contenha a subpalavra aab, tal subpalavra pode ser substituída por baa. Assim, a partir da palavra aabbaab, aplicando-se a regra mencionada, pode-se obter, diz-se derivar: baabaab, substituindo a primeira ocorrência de aab; ou aabbbaa, substituindo a segunda ocorrência de aab. A relação de derivação é denotada por. Por exemplo, a cadeia de derivações 6 Também chamada regra de produção, ou produção, simplesmente.

14 14 Editora Thomson Introdução aos fundamentos da computação aabbaab baabaab (aplicando-se a regra aab baa) bbaaaab (aplicando-se a regra aab baa) bbaabaa (aplicando-se a regra aab baa) mostra uma derivação de bbaabaa a partir de aabbaab. Uma gramática consta de um conjunto de regras e da indicação de uma variável especial denominada variável de partida. Qualquer derivação deve começar com a palavra constituída apenas pela variável de partida. As palavras de variáveis e/ou terminais geradas a partir da variável de partida são chamadas formas sentenciais da gramática. Assim, uma regra pode ser aplicada a uma forma sentencial para gerar uma outra forma sentencial. Uma forma sentencial sem variáveis é conhecida como sentença. A linguagem definida pela gramática, também dita gerada pela gramática, é o conjunto de sentenças geradas pela gramática. Para uma gramática G, a linguagem gerada por ela é denotada por L(G). A seguir, os conceitos introduzidos anteriormente são exemplificados. Exemplo 12 Agora define-se uma gramática G que tem duas variáveis, P e X, sendo P a variável de partida, e dois terminais, 0 e 1. Suas regras são: 1. P 0P 2. P 1X 3. X 1X 4. X λ Toda derivação deve começar com a forma sentencial constituída pela variável de partida P. Um exemplo de derivação é: P 0P (regra 1) 01X (regra 2) 01 (regra 4) Como01 é umasentença, tal palavra pertenceal(g). Um outro exemplo dederivação: P 0P (regra 1) 00P (regra 1) 001X (regra 2) 0011X (regra 3) 0011 (regra 4) Logo, 0011 L(G). Pode-se notar que qualquer derivação de sentença, ou seja, forma sentencial sem variáveis, envolve: aplicar n 0 vezes a regra 1, produzindo uma forma sentencial da forma 0 n P; em seguida,

15 Newton José Vieira Capítulo 1: Conceitos preliminares 15 aplicar uma única vez a regra 2, produzindo 0 n 1X; depois, aplicar k 0 vezes a regra 3, produzindo 0 n 11 k X; e, finalmente, aplicar uma única vez a regra 4, produzindo 0 n 11 k. Logo, a linguagem gerada por G é L(G) = {0} {1} +. Agora, define-se formalmente o que é gramática. Uma gramática é uma quádrupla (V,Σ,R,P), em que: a) V é um conjunto finito de elementos denominados variáveis; b) Σ é um alfabeto; V Σ = ; c) R (V Σ) + (V Σ) é um conjunto finito de pares ordenados chamados regras; e d) P V é uma variável conhecida como variável de partida. Observequeoladoesquerdodeumaregranãopodeserλ. Opróximoexemploapresenta uma gramática mais elaborada. Exemplo 13 Seja a gramática H = ({P,B},{a,b,c},R,P) em que R é constituído das regras: 1. P apbc 2. P abc 3. cb Bc 4. bb bb Toda derivação de H deve começar com a forma sentencial constituída pela variável de partida P. Um exemplo de derivação de sentença: P abc (regra 2) Logo, abc L(H). Outro exemplo de derivação: P apbc (regra 1) aap BcBc (regra 1) aaabcbcbc (regra 2) aaabbccbc (regra 3) aaabbccbc (regra 4) aaabbcbcc (regra 3) aaabbbccc (regra 3) aaabbbccc (regra 4) Logo, a 3 b 3 c 3 L(H). Na verdade, pode-se mostrar que L(H) = {a n b n c n n 1}.

16 16 Editora Thomson Introdução aos fundamentos da computação Émuitocomum umagramática ter duasou maisregras com omesmoladoesquerdo. Por exemplo, a gramática do Exemplo 12 tem as regras 1 e 2 com o mesmo lado esquerdo, assim como as regras 3 e 4. Nesse caso, pode-se abreviar colocando-se apenas um lado esquerdo e os lados direitos das várias regras separados por. Desta forma, as regras do Exemplo 12 seriam substituídas por: P 0P 1X X 1X λ De forma análoga, as regras 1 e 2 da gramática do Exemplo 13 podem ser substituídas por: P apbc abc Seja uma gramática G = (V,Σ,R,P). Diz-se que x y em G, em que x,y (V Σ), se há uma regra u v R tal que u ocorre em x e y é o resultado de substituir uma ocorrência de u em x por v. A relação n é definida recursivamente assim, utilizando-se : a) x 0 x para todo x (V Σ) ; b) se w n xuy e u v R, então w n+1 xvy para todo w,x,y (V Σ), n 0. Quando x n y, diz-se que de x deriva-se y em n passos, ou então que há uma derivação de tamanho n de y a partir de x. Diz-se ainda que de x deriva-se y em zero ou mais passos, x y, se existe n 0 tal que x n y. 7 E de x deriva-se y em um ou mais passos, x + y, se existe n 1 tal que x n y. 8 Com isso, pode-se definir o que é a linguagem gerada pela gramática G: L(G) = {w Σ P w}. Exemplo 14 Seja a gramática I = ({X,B},{a,b},R,X), em que R consta das regras: 1 e 2. P apb Bb 3 e 4. B Bb λ O seguinte esquema de derivação mostra como toda palavra da forma a n b n+1+k, para n 0 e k 0 podem ser geradas : P n a n Pb n (regra 1 n vezes, n 0) a n Bb n+1 (regra 2) k a n Bb n+1+k (regra 3 k vezes, k 0) a n b n+1+k (regra 4) 7 Usando a terminologia da Seção A.3, x y é o fecho transitivo e reflexivo da relação. 8 x + y é o fecho transitivo da relação.

17 Newton José Vieira Capítulo 1: Conceitos preliminares 17 Logo, pode-sederivar qualquer palavra a n b n+1+k, para n,k 0, em n+k+2 passos, ou seja, qualquer palavra a n b m tal que n < m, ou ainda, observando-se que m = n+1+k, então P m+1 = a n b m. E como não é possível gerar outras palavras, conclui-se que L(I) = {a n b m n < m}. No exemplo anterior foi introduzido o conceito de esquema de derivação. No exemplo, qualquer sentença que possa ser gerada obedece ao esquema, no sentido de que uma derivação da sentença pode ser obtida introduzindo-se valores específicos para as variáveis que aparecem no esquema. Por exemplo, uma derivação da sentença aabbbb seria obtida instanciando-se n com 2 e k com 1: P 2 a 2 Pb 2 (regra 1 duas vezes) a 2 Bb 3 (regra 2) 1 a 2 Bb 4 (regra 3 uma vez) a 2 b 4 (regra 4) Em geral, um esquema de derivação para uma gramática G mostra apenas como um conjunto A (das sentenças geradas segundo o esquema) está contido na linguagem gerada por G, ou seja, A L(G). Diferentes esquemas podem ser usados para mostrar que outros subconjuntos de L(G) são deriváveis. Por outro lado, deve-se provar também que as únicas palavras geradas por G são as deriváveis pelo(s) esquema(s) apresentado(s). No caso particular do Exemplo 14, como não existem outros esquemas para quaisquer sentenças deriváveis na gramática, pode-se dizer que o esquema lá apresentado mostra como derivar todas as palavras de L(G). Exemplo 15 Seja a gramática H do Exemplo 13. As duas derivações demonstram que P 1 abc e P 8 a 3 b 3 c 3. É fácil mostrar que todas as palavras da forma a n b n c n, para n 1, são geradas por H. Para isso, basta notar que tais palavras podem ser geradas por derivações da forma: P k a k P(Bc) k (regra 1 k vezes, k 0) a k+1 bc(bc) k (regra 2) 1 a k+1 bbcc(bc) k 1 (regra 3 uma vez) 2 a k+1 bbbccc(bc) k 2 (regra 3 duas vezes). k a k+1 bb k c k+1 k a k+1 b k+1 c k+1 (regra 3 k vezes) (regra 4 k vezes) Isso mostra que se pode derivar palavras da forma a k+1 b k+1 c k+1, para k 0, em k+1+(1+2+ +k)+k = (2k+1)+k(k+1)/2 = k(k+5)/2+1 passos. Tem-se, então, que: P (n 1)(n+4)/2+1 = a n b n c n para n 1. Logo, conclui-se que {a n b n c n n 1} L(H).

18 18 Editora Thomson Introdução aos fundamentos da computação Para a gramática H do Exemplo 13, analisando-se as alternativas possíveis ao esquema de derivação apresentado no Exemplo 15, pode-se notar que, qualquer que seja a ordem de aplicação das regras 3 e 4, não se consegue gerar outras sentenças que não sejam as da forma a n b n c n para n 1. Logo, L(H) = {a n b n c n n 1} A mesma linguagem pode ser gerada por inúmeras gramáticas. Duas gramáticas G e G são ditas equivalentes quando L(G) = L(G ). O problema de modificar uma gramática de forma que ela atenda a certos requisitos, mas sem alterar a linguagem gerada pela mesma, é importante em determinados contextos, por exemplo, na construção de analisadores sintáticos de linguagens. Algumas técnicas de manipulação de gramáticas serão abordadas na Seção Na gramática a seguir, assim como nas dos Exemplos 12 e 14, as regras têm a característica de que os seus lados esquerdos contêm apenas e tão-somente uma variável. Esse tipo de gramática, muito importante em termos práticos, será estudado na Seção 3.4. Exemplo 16 Seja a gramática G = (V,Σ,R,E), em que: V = {E,T,N,D}; Σ = {+,,(,),0,1,2,3,4,5,6,7,8,9}; R contém as regras: E E +T E T T T (E) N N DN D D A gramática G gera expressões aritméticas contendo números naturais na base decimal, operadores de soma e subtração e parênteses. Por meio das três regras com E do lado esquerdo, pode-se gerar uma sequência de somas e/ou subtrações de T s (termos); por exemplo: E E +T (regra E E +T) E T +T (regra E E T) E T T +T (regra E E T) T T T +T (regra E T) Observe como as regras são recursivas à esquerda, levando à produção de uma sequência da direita para a esquerda. Entretanto, as regras responsáveis pela produção dos números das expressões são recursivas à direita, redundando na produção de números da esquerda para a direita. Por exemplo, para gerar um número de quatro dígitos, pode-se derivar: N DN (regra N DN) DDN (regra N DN) DDDN (regra N DN) DDDD (regra N D)

19 Newton José Vieira Capítulo 1: Conceitos preliminares 19 e, em seguida, derivar os quatro dígitos usando-se as regras com D do lado esquerdo. Observe também que a geração de parênteses se dá por recursão (no caso, indireta), a qual não pode ser classificada como recursão à esquerda nem à direita. Por exemplo, na derivação: E E +T (regra E E +T) T +T (regra E T) (E)+T (regra T (E)) a variável E aparece (recursivamente) na forma sentencial entre ( e ). Exercícios 1. Seja a gramática ({A,B},{0,1},R,A), em que R tem as três regras: A BB B 0B1 λ Dê todas as derivações das seguintes palavras: a) λ; b) 01; c) 0101; d) Que linguagem é gerada? 2. Seja a gramática G = ({A,B},{a,b},R,A) em que R é constituído pelas quatro regras: A aa B B bb λ Apresente um esquema de derivação que mostre como derivar qualquer palavra de L(G). Expresse o que é L(G) de forma bem concisa utilizando a notação introduzida na Seção Seja a gramática H = ({P,A,B},{a,b},R,P) em que R tem as regras: P AB A aa λ B bb λ Mostre que H gera a linguagem do Exercício anterior. 4. Construa gramáticas para as seguintes linguagens:

20 20 Editora Thomson Introdução aos fundamentos da computação a) {0}{0,1} {11}; b) {λ,0}{11} {λ,0}; c) {w {a,b} o número de as em w é par}; d) {a n b n n N}; e) {w {a,b} w = w R }; f) {w {a,b} w = w R e w não contém símbolos consecutivos idênticos}; g) {a n b n c n d n n N}. 5. Para as gramáticas dos itens (d) e (e) do exercício anterior, determine o número de passos necessário para gerar uma palavra de tamanho n. 6. Considere as gramáticas desenvolvidas no Exercício 4. A partir delas, construa gramáticas que gerem: a) A concatenação das linguagens dos itens (c) e (d); b) A união das linguagens dos itens (d) e (e); c) O fecho de Kleene da linguagem do item (f). 7. Diga que linguagens são geradas pelas gramáticas: a) G 1 = ({A},{0,1},R 1,A), sendo R 1 constituído de: A 0A A0 1 b) G 2 = ({B},{0,1},R 2,B), sendo R 2 constituído de: B 0B00 1 c) G 3 = ({S,A,B},{0,1},R 3,S), sendo R 3 constituído de: S AA B A 0A A0 1 B 0B Identifique as linguagens geradas pelas gramáticas: a) G 1 = ({P,X},{a,b},R 1,P). R 1 : P ax bp λ X ap b) G 2 = ({P,A},{a,b},R 2,P). R 2 : P apa A A ba b c) G 3 = ({A,B},{0,1},R 3,A). R 3 : A 0A B B B1 01 d) G 4 = ({P,X},{a,b},R 4,P). R 4 : P ap Xb λ

21 Newton José Vieira Capítulo 1: Conceitos preliminares 21 X ap e) G 5 = ({P,X},{a,b},R 5,P). R 5 : P aap Xb λ X ap f) G 6 = ({A,B},{0,1},R 6,A). R 6 : A 0A0 B1 B 1B1 λ g) G 7 = ({P},{0,1},R 7,P). R 7 : P 0P1 1P0 λ h) G 8 = ({A,X},{0,1},R 8,A). R 8 : A XA X X 0X1 λ i) G 9 = ({X,B},{a,b,c},R 9,X). R 9 : X abx abc Ba ab Bb bb Bc bcc j) G 10 = ({X,A,#},{a,b},R 10,X). R 10 : X aax # Aa aa Ab ba A# b#a # λ 1.4 Problemas de Decisão Ao longo deste texto serão tratados vários problemas cujas respostas são do tipo sim ou não. Nesta seção, é apresentada uma introdução genérica e informal a esse tipo de problema. Um problema de decisão (PD) é uma questão que faz referência a um conjunto finito de parâmetros e que, para valores específicos dos parâmetros, tem como resposta sim ou não. Seguem alguns exemplos. Exemplo 17 São exemplos de problemas de decisão: a) determinar se o número é um número primo; b) determinar se um número natural n é um número primo; c) determinar se existe um ciclo em um grafo G; d) determinar se uma palavra w é gerada por uma gramática G.

22 22 Editora Thomson Introdução aos fundamentos da computação O primeiro PD não tem parâmetros, o segundo e o terceiro possuem um parâmetro cada um, um número natural n e um grafo G, e o quarto tem dois parâmetros, uma palavra w e uma gramática G. A questão referente a um PD pode ser vista como representando um conjunto de questões, uma para cada combinação possível dos valores que os parâmetros podem assumir. Cada questão obtida dando aos parâmetros valores específicos, ou seja, instanciando-se os parâmetros, é dita ser uma instância do PD. Em particular, um PD sem parâmetros contém uma única instância. Exemplo 18 O PD (b) do Exemplo 17, determinar se um número natural n é um número primo, é constituído pelo seguinte conjunto infinito de questões: determinar se 0 é um número primo; determinar se 1 é um número primo; determinar se 2 é um número primo; e assim por diante. O PD determinar se é um número primo é constituído por uma única instância, a qual é instância também do PD determinar se um número natural n é um número primo. Para cada instância de um PD, existe uma resposta correta, sim ou não. Uma solução para um PD, denominada procedimento de decisão, é um algoritmo que, para qualquer instância do PD, determina a resposta correta. Informalmente, um algoritmo é uma sequência finita de instruções, cada uma executável por uma máquina em tempo finito, e cada uma produzindo o mesmo resultado para os mesmos dados. Adiante, será apresentada uma proposta de formalização do conceito de algoritmo mediante a chamada hipótese de Church-Turing. Até lá, fica-se com esta definição informal. Um PD que tem solução é dito ser decidível, e um PD que não tem solução, indecidível. Pelo exposto anteriormente, se um PD tem um conjunto finito de instâncias, então ele é decidível: pode-se construir um algoritmo que simplesmente consulte uma tabela de respostas pré-computadas. Assim, o estudo de PDs torna-se mais interessante para PDs com uma infinidade de instâncias. Observe que uma solução para o PD mais geral determinar se um número natural n é um número primo serve também para solucionar o PD mais restrito determinar se é um número primo. Mas, mesmo que não existisse solução para o primeiro PD, haveria solução para o segundo! Mesmo que não se soubesse a resposta! Para ressaltar esse ponto, observe a famosa conjectura de Fermat, que só foi provada recentemente, 350 anos após enunciada: Para qualquer número natural n 3 não existem números naturais a, b e c tais que a n +b n = c n.

23 Newton José Vieira Capítulo 1: Conceitos preliminares 23 O problema de determinar se esta conjectura está correta é um PD que tem solução, pois é um PD sem parâmetros e, portanto, constituído por uma única instância. Mesmo na época em que a conjectura não tinha sido provada, o PD respectivo já tinha solução, embora desconhecida... Considere os dois algoritmos: retorne sim e retorne não ; um deles é a solução. Um PD obtido de outro, P, restringindo-se o conjunto de valores possíveis de um ou mais parâmetros de P, é dito ser uma restrição de P. Assim, por exemplo o PD determinar se é um número primo é uma restrição de determinar se um número natural n é um número primo. É evidente que, se um PD tem solução, então suas restrições também têm. No entanto, pode acontecer de uma ou mais restrições de um PD terem soluções e o PD não ter. Por exemplo, a restrição do PD determinar se uma palavra w é gerada por uma gramática G : determinar se uma palavra w é gerada por G 0, em que G 0 é uma gramática na qual o lado esquerdo de cada regra é constituído por uma variável, 9 tem solução, mas, como será mostrado à frente, o PD original não tem solução. Existe uma relação estreita entre problemas de decisão e linguagens. Em primeiro lugar, uma solução de um PD, sendo um algoritmo, deve poder ser expressa em alguma linguagem. Esta, tipicamente é uma linguagem de programação, mas, em princípio, pode ser qualquer linguagem projetada para se expressar algoritmos para uma certa noção específica de algoritmo. Por outro lado, há um outro tipo de linguagem que terá sua importância quando for abordado o problema da decidibilidade. Para que as instâncias de um problema sejam submetidas a um algoritmo elas devem ser expressas por meio de palavras em uma linguagem. Sendo Σ o alfabeto de tal linguagem, ela seria então L P = {w Σ w representa uma instância de P} (nada impede que uma mesma instância seja representada por várias palavras da linguagem). Para cada palavra de L P, a resposta pode ser sim ou não para a instância respectiva. Uma outra linguagem, subconjunto de L P, também importante, como se verá depois, é aquela constituída apenas das palavras que representem instâncias para as quais a resposta é sim : L s P = {w L P a resposta para a instância representada por w é sim }. Note que a resposta para a instância representada por w é sim se e somente se w L s P. Logo determinar se o PD P tem solução é equivalente a determinar se o seguinte PD tem solução: dada uma palavra w L P, determinar se w L s P. Segue um exemplo. Exemplo 19 Seja PP o problema de determinar se n N é primo. Representando-se cada instância por uma palavra w {0,1} +, de forma que w seja uma das representações em binário de um número natural, aqui referido por η(w), tem-se: L PP = {0,1} + ; L s PP = {w {0,1}+ η(w) é primo}. Com isto, n é primo se e somente se w L s PP, em que w é tal que η(w) = n. 9 Esse tipo de gramática será definido na Seção 3.4 como uma gramática livre do contexto.

24 24 Editora Thomson Introdução aos fundamentos da computação Exercício 1. Sejam os PDs: a) determinar se um número natural n, para 1 n 200, é um número primo; b) dada uma equação do segundo grau de coeficientes a, b e c, determinar se suas raízes são ambas reais, se cada um dos coeficientes é um númeronatural entre 10 e 20 (exclusive); c) dada uma equação do segundo grau de coeficientes a, b e c, determinar se suas raízes são ambas reais, se seus coeficientes podem ser números reais quaisquer; d) dada uma fórmula da lógica de predicados, determinar se ela é válida; e) dados dois conjuntos finitos, determinar se eles são disjuntos; f) determinar se uma árvore A tem altura menor ou igual a n; g) determinar se uma palavra w é palíndromo, se w {0,1}. Dizer quantos parâmetros e quantas instâncias tem cada um. 2. Dentre os PDs a seguir, quais são decidíveis? a) Determinar se existe vida extraterrestre. b) Determinar se para todo número natural n existe um par de números primos gêmeos maior que n. (m e n são primos gêmeos sse são ambos primos e m n = 2. Atualmente não se sabe se o conjunto dos primos gêmeos é finito ou não.) c) Dado um número natural n, determinar se existe um par de números primos gêmeos maior que n. (Primos gêmeos são como definidos na questão anterior.) d) Dado um conjunto finito de números naturais, determinar se ele contém algum número primo. e) Dado um programa em C (sem entrada) que tenha no máximo 1GB, determinar se ele para. f) dada uma equação do segundo grau de coeficientes a, b e c, determinar se suas raízes são ambas reais, se cada um dos coeficientes é um númeronatural entre 10 e 20 (exclusive); g) dada uma equação do segundo grau de coeficientes a, b e c, determinar se suas raízes são ambas reais, se seus coeficientes podem ser números reais quaisquer; h) Dados dois conjuntos finitos, determinar se eles são disjuntos. 3. Diz-se que um PD P é redutível a um PD Q, se existe um algoritmo R que, recebendo x como entrada, produz um resultado y tal que a resposta a P para a

25 Newton José Vieira Capítulo 1: Conceitos preliminares 25 entrada x é idêntica ou complementar 10 à resposta a Q para a entrada y, qualquer que seja a entrada x. Diz-se, com isso, que o algoritmo R pode ser usado para reduzir o problema P ao problema Q. Seja D um PD decidível e I um PD indecidível. O que se pode dizer de um PD X, com relação à sua decidibilidade, se: a) D é redutível a X? b) X é redutível a D? c) I é redutível a X? d) X é redutível a I? 4. Considere o problema de redução de um problema de decisão a outro, como descrito no exercício anterior. a) Dê um exemplo de redução de um problema decidível a um problema indecidível. b) Explique porque um problema indecidível não pode ser reduzido a um problema decidível. 1.5 Exercícios Adicionais 1. Seja um alfabeto qualquer Σ. Prove que Σ é enumerável. Prove que P(Σ ) não é enumerável. Ou seja, qualquer linguagem é enumerável, mas o conjunto de todas as linguagens não! Consequência: como o conjunto dos compiladores é enumerável, existem linguagens para as quais não há compiladores. 2. Faça uma definição recursiva da função v : {0,1} N tal que v(w) é o número natural representado por w na base 2. Por exemplo, v(01) = 1, v(101) = 5, v(0010) = 2 etc. 3. Seja o alfabeto Σ = {a,(,),+, }. Segue uma definição recursiva de uma linguagem E, de expressões aritméticas: a) a E; b) se x,y E então (x+y) E e (x y) E; c) só pertencem a E as palavras especificadas por (a) e (b). Prove que nenhuma palavra de E contém a subpalavra )(. 4. Seja a seguinte definição recursiva da linguagem L sobre o alfabeto {0, 1}: a) λ L; b) se x L, então 0x L e x1 L; c) nada mais pertence a L. Que linguagem é L? Prove sua resposta. 10 A resposta complementar a sim é não, e a não é sim.

Conceitos Preliminares

Conceitos Preliminares Capítulo 1 Conceitos Preliminares Inicialmente, na Seção 1.1, será abordado o problema fundamental relativo ao uso dos computadores, ou seja, o da representação, com o intuito de fazer transparecer a importância

Leia mais

Teoria de Linguagens 2 o semestre de 2017 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 19/9/2017 Valor: 10 pontos

Teoria de Linguagens 2 o semestre de 2017 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 19/9/2017 Valor: 10 pontos Departamento de Ciência da Computação ICEx/UFMG Teoria de Linguagens o semestre de 7 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 9/9/7 Valor: pontos. Uma versão do problema

Leia mais

Teoria de Linguagens 1 o semestre de 2018 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 17/4/2018 Valor: 10 pontos

Teoria de Linguagens 1 o semestre de 2018 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 17/4/2018 Valor: 10 pontos Departamento de Ciência da Computação ICEx/UFMG Teoria de Linguagens o semestre de 8 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 7/4/8 Valor: pontos. Uma versão do problema

Leia mais

Teoria de Linguagens 2 o semestre de 2015 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 15/9.

Teoria de Linguagens 2 o semestre de 2015 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 15/9. Pós-Graduação em Ciência da Computação DCC/ICEx/UFMG Teoria de Linguagens 2 o semestre de 2015 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 15/9. Observações: Pontos

Leia mais

Linguagens Formais e Problemas de Decisão

Linguagens Formais e Problemas de Decisão Linguagens Formais e Problemas de Decisão Mário S. Alvim (msalvim@dcc.ufmg.br) Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Formais e Problemas

Leia mais

BCC244. Alfabeto, String, Linguagem, Gramática. Registro aqui o agradecimento à Profa. Lucília por ceder slides que fazem parte deste materal.

BCC244. Alfabeto, String, Linguagem, Gramática. Registro aqui o agradecimento à Profa. Lucília por ceder slides que fazem parte deste materal. BCC244 Alfabeto, String, Linguagem, Gramática Registro aqui o agradecimento à Profa. Lucília por ceder slides que fazem parte deste materal. Exemplo: Máquina de Venda A máquina de venda retorna uma cocacola

Leia mais

Universidade Federal de Alfenas

Universidade Federal de Alfenas Universidade Federal de Alfenas Linguagens Formais e Autômatos Aula 04 Linguagens Formais humberto@bcc.unifal-mg.edu.br Última aula... Relação da teoria dos conjuntos com LFA; Relação dos grafos com LFA.

Leia mais

Fundamentos da Teoria da Computação

Fundamentos da Teoria da Computação Fundamentos da Teoria da Computação Primeira Lista de Exercícios - Aula sobre dúvidas da lista Sérgio Mariano Dias 1 1 UFMG/ICEx/DCC Entrega da 1 a lista: 31/03/2009 Sérgio Mariano Dias (UFMG) Fundamentos

Leia mais

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação - P. Blauth Menezes

Leia mais

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ. Linguagens O conceito de linguagem engloba uma variedade de categorias distintas de linguagens: linguagens naturais, linguagens de programação, linguagens matemáticas, etc. Uma definição geral de linguagem

Leia mais

Fundamentos da Teoria da Computação

Fundamentos da Teoria da Computação Fundamentos da Teoria da Computação Primeira Lista de Exercícios - Aula sobre dúvidas Sérgio Mariano Dias 1 1 Doutorando em Ciência da Computação Estagiário em docência II Departamento de Ciência da Computação

Leia mais

1 INTRODUÇÃO E CONCEITOS BÁSICOS

1 INTRODUÇÃO E CONCEITOS BÁSICOS 1 INTRODUÇÃO E CONCEITOS BÁSICOS Inicia com uma breve história do surgimento e do desenvolvimento dos conceitos, resultados e formalismos nos quais a Teoria da Computação é baseada. Formalização dos conceitos

Leia mais

Linguagens Formais - Preliminares

Linguagens Formais - Preliminares Linguagens Formais - Preliminares Regivan H. N. Santiago DIMAp-UFRN 25 de fevereiro de 2007 Regivan H. N. Santiago (DIMAp-UFRN) Linguagens Formais - Preliminares 25 de fevereiro de 2007 1 / 26 Algumas

Leia mais

IBM1088 Linguagens Formais e Teoria da

IBM1088 Linguagens Formais e Teoria da IBM1088 Linguagens Formais e Teoria da Computação Linguagens e Gramáticas Evandro Eduardo Seron Ruiz evandro@usp.br Universidade de São Paulo E.E.S. Ruiz (USP) LFA 1 / 47 Frase do dia Sofremos muito com

Leia mais

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 27 de Fevereiro de 2018

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 27 de Fevereiro de 2018 27 de Fevereiro de 2018 Definição: Concatenação Sejam u, v Σ. A concatenação de u e v, denotado por uv é a operação binária sobre Σ assim definida (i) BASE: Se tamanho(v) = 0 então v = λ e uv = u. (ii)

Leia mais

I.2 Introdução a Teoria da Computação

I.2 Introdução a Teoria da Computação I.2 Introdução a Teoria da Computação O que é? Fundamento da Ciência da Computação Tratamento Matemático da Ciência da Computação Estudo Matemático da Transformação da Informação Qual sua importância?

Leia mais

Teoria da Computação Aula 02 Introdução

Teoria da Computação Aula 02 Introdução Teoria da Computação Aula 02 Introdução Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Alfabeto Um alfabeto é um conjunto finito de símbolos ou caracteres, representado pela letra sigma ( ). Portanto:

Leia mais

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática Linguagens Formais Aula 01 - Conceitos Básicos Prof. Othon Batista Mestre em Informática Sumário Introdução à Linguagem Alfabeto Cadeias de Símbolos, Palavras Tamanho de Palavra Prefixo, Sufixo ou Subpalavra

Leia mais

Introdução Definição Conceitos Básicos de Linguagem

Introdução Definição Conceitos Básicos de Linguagem Introdução Definição Conceitos Básicos de Linguagem Introdução Desenvolvida originalmente em 1950 Objetivo: Desenvolver teorias relacionadas com a Linguagem natural Logo verificou-se a importância para

Leia mais

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação bas eado em material produzido pelo prof Olinto Jos é Varela Furtado Ricardo Azambuja Silveira INE-CTC-UFSC E-Mail: silveira@inf.ufsc.br

Leia mais

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior. LFA Aula 02 Linguagens regulares - introdução 28/09/2015 Celso Olivete Júnior olivete@fct.unesp.br 1 Na aula passada... Visão geral Linguagens regulares expressões regulares autômatos finitos gramáticas

Leia mais

Definições Exemplos de gramáticas

Definições Exemplos de gramáticas Definições Exemplos de gramáticas 1 Gramáticas Conceito introduzido pela lingüística Objetivo de ensinar o inglês pelo computador e conseguir um tradutor de línguas Fracasso da tradução por volta dos anos

Leia mais

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar

Leia mais

Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem

Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem Conceitos Básicos Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem Alfabeto ou Vocabulário: Conjunto finito não vazio de símbolos. Símbolo é um elemento qualquer de um alfabeto.

Leia mais

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas INE5317 Linguagens Formais e Compiladores AULA 4: Gramáticas bas eado em material produzido pelo prof Olinto Jos é Varela Furtado Ricardo Azambuja Silveira INE-CTC-UFSC E-Mail: silveira@inf.ufsc.br URL:

Leia mais

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/30 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)

Leia mais

Capítulo 2: Procedimentos e algoritmos

Capítulo 2: Procedimentos e algoritmos Capítulo 2: Procedimentos e algoritmos Para estudar o processo de computação de um ponto de vista teórico, com a finalidade de caracterizar o que é ou não é computável, é necessário introduzir um modelo

Leia mais

Apostila 01 Fundamentação da Teoria da Computação e Linguagens Formais

Apostila 01 Fundamentação da Teoria da Computação e Linguagens Formais Cursos: Bacharelado em Ciência da Computação e Bacharelado em Sistemas de Informação Disciplinas: (1493A) Teoria da Computação e Linguagens Formais, (4623A) Teoria da Computação e Linguagens Formais e

Leia mais

Alfabeto, Cadeias, Operações e Linguagens

Alfabeto, Cadeias, Operações e Linguagens Linguagens de Programação e Compiladores - Aula 3 1 Alfabeto, Cadeias, Operações e Linguagens 1.Conjuntos Para representar um determinado conjunto é necessário buscar uma notação para representá-lo e ter

Leia mais

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais UNIVERSIDADE FEDERAL DO PARÁ INSTITUTO DE CIÊNCIAS EXATAS E NATURAIS FACULDADE DE COMPUTAÇÃO CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof.

Leia mais

Problema A Codificação Símbolos Dado um inteiro n, n é N representação de inteiros 0,1,...,b - 1 numa base b Dado um grafo G, G é conexo?

Problema A Codificação Símbolos Dado um inteiro n, n é N representação de inteiros 0,1,...,b - 1 numa base b Dado um grafo G, G é conexo? 2 Linguagens Uma linguagem de programação, ou uma língua natural como o Português ou o Inglês, pode ser vista como um conjunto de sequências de símbolos, pertencentes a um conjunto finito. Em Português

Leia mais

Modelos de Computação

Modelos de Computação Modelos de Computação 2.ano LCC e LERSI URL: http://www.ncc.up.pt/~nam/aulas/0405/mc Escolaridade: 3.5T e 1P Frequência:Semanalmente serão propostos trabalhos aos alunos, que serão entregues nas caixas

Leia mais

Linguagens, Reconhecedores e Gramáticas

Linguagens, Reconhecedores e Gramáticas Linguagens, Reconhecedores e Gramáticas Já vimos que Linguagem é um conjunto de cadeias de símbolos sobre um alfabeto/vocabulário, V. É um subconjunto específico de V*. Estas cadeias são denominadas sentenças

Leia mais

Conceitos básicos de Teoria da Computação

Conceitos básicos de Teoria da Computação Folha Prática Conceitos básicos de 1 Conceitos básicos de Métodos de Prova 1. Provar por indução matemática que para todo o número natural n: a) 1 + 2 + 2 2 + + 2 n = 2 n+1 1, para n 0 b) 1 2 + 2 2 + 3

Leia mais

Histórico e motivação

Histórico e motivação Expressões regulares 1. Histórico e motivação 2. Definição a) Sintaxe b) Semântica c) Precedência dos operadores 3. Exemplos 4. Leis algébricas 5. Dialetos 6. Aplicações 7. Exercícios Pré-requisito: básico

Leia mais

LINGUAGENS FORMAIS E AUTÔMATOS

LINGUAGENS FORMAIS E AUTÔMATOS LINGUGENS FORMIS E UTÔMTOS Introdução reve Histórico Em 1936, lan Turing (matemático) propôs a possibilidade de se construir um computador digital através da formalização de um procedimento em tempo finito.

Leia mais

Linguagens Formais e Autômatos Decidibilidade

Linguagens Formais e Autômatos Decidibilidade Linguagens Formais e Autômatos Decidibilidade Andrei Rimsa Álvares Sumário Introdução A tese de Church-Turing Máquinas de Turing e problemas de decisão Máquina de Turing Universal O problema da parada

Leia mais

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Prof. Yandre Maldonado - 2 Mecanismo gerador que permite definir formalmente uma linguagem; Através de uma gramática

Leia mais

Gramática. Gramática. Gramática

Gramática. Gramática. Gramática Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Prof. Yandre Maldonado - 2 Mecanismo gerador que permite definir formalmente uma linguagem; Através de uma gramática

Leia mais

Teoria da Computação. Computabilidade e complexidade computacional

Teoria da Computação. Computabilidade e complexidade computacional Teoria da Computação Computabilidade e complexidade computacional 1 Computabilidade e Complexidade Computabilidade: verifica a existência de algoritmos que resolva uma classe de linguagens trata a possibilidade

Leia mais

Apostila 05 Assunto: Linguagens dos tipos 0 e 1

Apostila 05 Assunto: Linguagens dos tipos 0 e 1 Cursos: Bacharelado em Ciência da Computação e Bacharelado em Sistemas de Informação Disciplinas: (1493A) Teoria da Computação e Linguagens Formais, (4623A) Teoria da Computação e Linguagens Formais e

Leia mais

Matemática Discreta para Ciência da Computação

Matemática Discreta para Ciência da Computação Matemática Discreta para Ciência da Computação P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação

Leia mais

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO 2. Linguagens Livres-do-Contexto Referência: SIPSER, M. Introdução à Teoria da Computação. 2ª edição, Ed. Thomson Prof. Marcelo S. Lauretto marcelolauretto@usp.br

Leia mais

Gramáticas Livres de Contexto

Gramáticas Livres de Contexto Gramáticas Livres de Contexto IBM1088 Linguagens Formais e Teoria da Computação Evandro Eduardo Seron Ruiz evandro@usp.br Universidade de São Paulo E.E.S. Ruiz (USP) LFA 1 / 42 Frase do dia Quando vires

Leia mais

Gramática regular. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Universidade de São Paulo

Gramática regular. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Universidade de São Paulo Gramática regular IBM1088 Linguagens Formais e Teoria da Computação Evandro Eduardo Seron Ruiz evandro@usp.br Universidade de São Paulo E.E.S. Ruiz (USP) LFA 1 / 41 Frase do dia Através de três métodos

Leia mais

Gramá3ca Livre de Contexto (GLC)

Gramá3ca Livre de Contexto (GLC) Linguagens Formais e Autômatos Gramá3ca Livre de Contexto (GLC) Andrei Rimsa Álvares Material extraído do livro e slides do Prof. Newton Vieira (hep://dcc.ufmg.br/~nvieira) Sumário Gramá4cas livres de

Leia mais

SCC Capítulo 1 Linguagens Regulares e Autômatos Finitos

SCC Capítulo 1 Linguagens Regulares e Autômatos Finitos SCC-505 - Capítulo 1 Linguagens Regulares e Autômatos Finitos João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo

Leia mais

Seja S = {2, 5, 17, 27}. Quais da sentenças a seguir são verdadeiras? 3. Quantos conjuntos diferentes são descritos abaixo? Quais são eles?

Seja S = {2, 5, 17, 27}. Quais da sentenças a seguir são verdadeiras? 3. Quantos conjuntos diferentes são descritos abaixo? Quais são eles? Seção 3.1 Conjuntos 113 Existem identidades básicas (em pares duais) e elas podem ser usadas para provarem identidades de conjuntos; uma vez que uma identidade seja provada desta maneira, sua dual também

Leia mais

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO LINGUAGEM LIVRE DE CONTEXTO As Linguagens Livres de Contexto é um reconhecedor de linguagens, capaz de aceitar palavras corretas (cadeia, sentenças) da linguagem. Por exemplo, os autômatos. Um gerador

Leia mais

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos Linguagens Formais e Autômatos Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa Introdução Problema: definir um conjunto de cadeias de símbolos; Prof. Yandre Maldonado - 2 Exemplo: conjunto

Leia mais

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos Linguagens Formais e Autômatos Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa Problema: definir um conjunto de cadeias de símbolos; Prof. Yandre Maldonado - 2 Exemplo: conjunto M dos

Leia mais

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior. LFA Aula 09 Gramáticas e Linguagens Livres de Contexto (Hopcroft, 2002) 18/01/2016 Celso Olivete Júnior olivete@fct.unesp.br www.fct.unesp.br/docentes/dmec/olivete/lfa 1 Classes Gramaticais Linguagens

Leia mais

Teoria das Linguagens. Linguagens Formais e Autómatos (Linguagens)

Teoria das Linguagens. Linguagens Formais e Autómatos (Linguagens) Teoria das Lic. em Ciências da Computação Formais e Autómatos () Carla Mendes Dep. Matemática e Aplicações Universidade do Minho 2010/2011 Teoria das - LCC - 2010/2011 Dep. Matemática e Aplicações - Univ.

Leia mais

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Revisão Linguagens formais Parte 02 Prof. geovanegriesang@unisc.br Legenda: = sigma (somatório) = delta ε = epsilon λ =

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 02 Introdução à Teoria da Computação Prof.ª Danielle Casillo Linguagem: é uma forma precisa de expressar

Leia mais

SCC Capítulo 3 Linguagens Sensíveis ao Contexto e Autômatos Limitados Linearmente

SCC Capítulo 3 Linguagens Sensíveis ao Contexto e Autômatos Limitados Linearmente SCC-505 - Capítulo 3 Linguagens Sensíveis ao Contexto e João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação - Universidade de São Paulo http://www.icmc.usp.br/~joaoluis

Leia mais

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Linguagens Formais e Autômatos - P. Blauth Menezes 1 Linguagens

Leia mais

Gramáticas e Linguagens Independentes de Contexto

Gramáticas e Linguagens Independentes de Contexto Gramáticas e Linguagens Independentes de Contexto 6.1 Responde às uestões seguintes considerando a gramática independente de contexto G = (V, {a, b}, P, R), onde o conjunto de regras P é: R XRX S S at

Leia mais

Expressões Regulares. Tiago Alves de Oliveira

Expressões Regulares. Tiago Alves de Oliveira Expressões Regulares Tiago Alves de Oliveira Introdução As expressões regulares consistem em uma maneira de representar um padrão de caracteres. Expressão Regular descreve um conjunto de cadeias de caracteres,

Leia mais

Linguagens Formais e Autômatos P. Blauth Menezes

Linguagens Formais e Autômatos P. Blauth Menezes Linguagens Formais e Autômatos P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Linguagens Formais e Autômatos - P. Blauth Menezes 1 Linguagens

Leia mais

Construção de Compiladores

Construção de Compiladores Construção de Compiladores Parte 1 Introdução Linguagens e Gramáticas F.A. Vanini IC Unicamp Klais Soluções Motivação Porque compiladores? São ferramentas fundamentais no processo de desenvolvimento de

Leia mais

Linguagens Livres de Contexto

Linguagens Livres de Contexto Linguagens Livres de Contexto 1 Roteiro Gramáticas livres de contexto Representação de linguagens livres de contexto Formas normais para gramáticas livres de contexto Gramáticas ambíguas Autômatos de Pilha

Leia mais

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 22 de Fevereiro de 2018

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 22 de Fevereiro de 2018 22 de Fevereiro de 2018 Motivação O que é um computador? O que é um algoritmo? Para que serve um algoritmo? Quando um algoritmo é bom? A análise de um algoritmo depende do computador? Motivação Em teoria

Leia mais

Gramáticas Livres de Contexto Parte 1

Gramáticas Livres de Contexto Parte 1 Universidade Estadual de Feira de Santana Engenharia de Computação Gramáticas Livres de Contexto Parte 1 EXA 817 Compiladores Prof. Matheus Giovanni Pires O papel do Analisador Sintático É responsável

Leia mais

Teoria da Computação

Teoria da Computação Introdução Março - 2009 1 Noções e Terminologia Matemática Conjuntos Um conjunto é um grupo de objetos, chamados elementos ou membros, representado como uma unidade. O conjunto { 3, 41, 57} possui os elementos

Leia mais

COMPILADORES. Revisão Linguagens formais Parte 01. Geovane Griesang

COMPILADORES. Revisão Linguagens formais Parte 01. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Revisão Linguagens formais Parte 01 geovanegriesang@unisc.br Legenda: = sigma (somatório) = delta ε = épsilon λ = lambda

Leia mais

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO 2. Linguagens Livres-do-Contexto Referência: SIPSER, M. Introdução à Teoria da Computação. 2ª edição, Ed. Thomson Prof. Marcelo S. Lauretto marcelolauretto@usp.br

Leia mais

Gramáticas e Linguagens independentes de contexto

Gramáticas e Linguagens independentes de contexto Capítulo 6 Gramáticas e Linguagens independentes de contexto 6.1 Gramáticas Nesta secção vamos introduzir gramáticas formais para caracterização das linguagens, estudando fundamentalmente as gramáticas

Leia mais

Linguagens Regulares. Prof. Daniel Oliveira

Linguagens Regulares. Prof. Daniel Oliveira Linguagens Regulares Prof. Daniel Oliveira Linguagens Regulares Linguagens Regulares ou Tipo 3 Hierarquia de Chomsky Linguagens Regulares Aborda-se os seguintes formalismos: Autômatos Finitos Expressões

Leia mais

Definições Hierarquia de Chomsky Exemplos de gramáticas. Gramáticas. Objetivo de ensinar o inglês pelo computador e conseguir um tradutor de línguas

Definições Hierarquia de Chomsky Exemplos de gramáticas. Gramáticas. Objetivo de ensinar o inglês pelo computador e conseguir um tradutor de línguas Definições Hierarquia de Chomsky Exemplos de gramáticas 1 Gramáticas Conceito introduzido pela lingüística Objetivo de ensinar o inglês pelo computador e conseguir um tradutor de línguas Fracasso da tradução

Leia mais

LFA. Aula 04. Sintaxe e Semântica. Conceitos Básicos Alfabeto Palavra Linguagem

LFA. Aula 04. Sintaxe e Semântica. Conceitos Básicos Alfabeto Palavra Linguagem LFA Aula 04 Sintaxe e Semântica. Conceitos Básicos Alfabeto Palavra Linguagem Linguagens Formais Linguagens formais se preocupam com os problemas sintáticos das linguagens. Sintaxe e Semântica Sintaxe

Leia mais

Aula 8: Gramáticas Livres de Contexto

Aula 8: Gramáticas Livres de Contexto Teoria da Computação Primeiro Semestre, 2015 Aula 8: Gramáticas Livres de Contexto DAINF-UTFPR Prof. Ricardo Dutra da Silva Veremos agora maneira de gerar as strings de um tipo específico de linguagem,

Leia mais

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior. LFA Aula 01 Apresentação 24/10/2016 Celso Olivete Júnior olivete@fct.unesp.br 1 Professor Celso Olivete Júnior Bacharelado em Ciência da Computação (Unoeste-2002) Mestrado e Doutorado em Engenharia Elétrica

Leia mais

Compiladores Aula 4. Celso Olivete Júnior.

Compiladores Aula 4. Celso Olivete Júnior. Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula de hoje... Revisão: gramáticas Relações em uma gramática: Cabeça, Último, Primeiro (First) e Seguinte (Follow) Capítulo 4 (seção 4.4.2) do livro

Leia mais

Curso de Engenharia de Computação - UTFPR Teoria da Computação - Prof. Celso Kaestner Lista de exercícios

Curso de Engenharia de Computação - UTFPR Teoria da Computação - Prof. Celso Kaestner Lista de exercícios Curso de Engenharia de Computação - UTFPR Teoria da Computação - Prof. Celso Kaestner Lista de exercícios 1. Escreva a expressão regular para as seguintes linguagens sobre o alfabeto {0, 1}: strings começando

Leia mais

Marcos Castilho. DInf/UFPR. 21 de março de 2019

Marcos Castilho. DInf/UFPR. 21 de março de 2019 21 de março de 2019 Análise sintática: introdução Dada uma gramática G e uma palavra w Σ, como saber se w L(G)? Isto é, como saber se S = G w? Derivações à esquerda e ambiguidade w L(G) se S = G w; Sabemos

Leia mais

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

Marcos Castilho. DInf/UFPR. 16 de maio de 2019 16 de maio de 2019 Motivação Quais são os limites da computação? O que é um Problema de decisão? Um problema de decisão é um conjunto de perguntas, cada uma das quais tem um SIM ou um NÃO como resposta.

Leia mais

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam Linguagens Naturais LINGUAGENS FORMAIS Definições Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam São muito ricas, mas também ambíguas e imprecisas. Ex.: João

Leia mais

LINGUAGENS FORMAIS E AUTÔMATOS

LINGUAGENS FORMAIS E AUTÔMATOS LINGUAGENS FORMAIS E AUTÔMATOS O objetivo deste curso é formalizar a idéia de linguagem e definir os tipos de sintaxe e semântica. Para cada sintaxe, analisamos autômatos, ue são abstrações de algoritmos.

Leia mais

Gramáticas Sensíveis ao Contexto (GSC) Linguagens Sensíveis ao Contexto (LSC) Autômatos Linearmente Limitados (ALL)

Gramáticas Sensíveis ao Contexto (GSC) Linguagens Sensíveis ao Contexto (LSC) Autômatos Linearmente Limitados (ALL) Gramáticas Sensíveis ao Contexto (GSC) Linguagens Sensíveis ao Contexto (LSC) Autômatos Linearmente Limitados (ALL) 1 Gramática Sensível ao Contexto Definição: Uma gramática G é sensível ao contexto se

Leia mais

Máquinas de Turing - Computabilidade

Máquinas de Turing - Computabilidade BCC244-Teoria da Computação Prof. Lucília Figueiredo Lista de Exercícios 03 DECOM ICEB - UFOP Máquinas de Turing - Computabilidade 1. Seja L uma linguagem não livre de contexto. Mostre que: (a) Se X uma

Leia mais

Gramáticas ( [HMU00], Cap. 5.1)

Gramáticas ( [HMU00], Cap. 5.1) Gramáticas ( [HMU00], Cap. 5.1) Vimos que a seguinte linguagem não é regular L = {0 n 1 n n 0} Contudo podemos fácilmente dar uma definição indutiva das suas palavras: 1. ɛ L 2. Se x L então 0x1 L L é

Leia mais

Resolução Exe 2.12 Monolítico Recursivo

Resolução Exe 2.12 Monolítico Recursivo Resolução Exe 2.12 Monolítico Recursivo Recursivo P R é R 1 onde R 1 def (se T1 então R 2 senão R 3 ) R 2 def F; R 3 R 3 def (se T2 então R 4 senão R 7 ) R 4 def G; R 5 R 5 def (se T1 então R 7 senão R

Leia mais

Construção de Compiladores Aula 16 - Análise Sintática

Construção de Compiladores Aula 16 - Análise Sintática Construção de Compiladores Aula 16 - Análise Sintática Bruno Müller Junior Departamento de Informática UFPR 25 de Setembro de 2014 1 Introdução Hierarquia de Chomsky Reconhecedores Linguagens Livres de

Leia mais

Capítulo 1: Alfabetos, cadeias, linguagens

Capítulo 1: Alfabetos, cadeias, linguagens Capítulo 1: Alfabetos, cadeias, linguagens Símbolos e alfabetos. Um alfabeto é, para os nossos fins, um conjunto finito não vazio cujos elementos são chamados de símbolos. Dessa maneira, os conceitos de

Leia mais

Lista de Exercícios CT-200 Primeiro Bimestre Carlos Henrique Quartucci Forster Estagiário: Wesley Telles. Revisão de Teoria de Conjuntos

Lista de Exercícios CT-200 Primeiro Bimestre Carlos Henrique Quartucci Forster Estagiário: Wesley Telles. Revisão de Teoria de Conjuntos Lista de Exercícios CT-200 Primeiro Bimestre 2010 Carlos Henrique Quartucci Forster Estagiário: Wesley Telles Revisão de Teoria de Conjuntos 1. Sejam A = {1,2 } e B = { x, y, z}. Quais os elementos dos

Leia mais

Conceitos Preliminares

Conceitos Preliminares Linguagens Formais e Autômatos Conceitos Preliminares Andrei Rimsa Álvares Material extraído do livro e slides do Prof. Newton Vieira (hap://dcc.ufmg.br/~nvieira) Sumário Representação Prova de Teoremas

Leia mais

1 introdução. capítulo. O que é uma solução computável? Quais são os limites do que pode ser computado? Existem problemas sem solução computacional?

1 introdução. capítulo. O que é uma solução computável? Quais são os limites do que pode ser computado? Existem problemas sem solução computacional? capítulo 1 introdução A ciência da computação é o conhecimento sistematizado da computação. Sua origem é milenar, tendo se desenvolvido em diferentes regiões e épocas. A teoria da computação é a base fundamental

Leia mais

Linguagens Livres do Contexto. Adaptado de H. Brandão

Linguagens Livres do Contexto. Adaptado de H. Brandão Linguagens Livres do Contexto Adaptado de H. Brandão Linguagens Livres do Contexto Para as LLC, temos as Gramáticas Livres do Contexto; Linguagens Livres do Contexto Para as LLC, temos as Gramáticas Livres

Leia mais

Modelos de Computação Folha de trabalho n. 8

Modelos de Computação Folha de trabalho n. 8 Modelos de Computação Folha de trabalho n. 8 Nota: Os exercícios obrigatórios marcados de A a D constituem os problemas que devem ser resolvidos individualmente. A resolução em papel deverá ser depositada

Leia mais

Matemática Discreta - 01

Matemática Discreta - 01 Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Matemática Discreta - 01 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav

Leia mais

Teoria Elementar dos Conjuntos

Teoria Elementar dos Conjuntos Teoria Elementar dos Conjuntos Este capítulo visa oferecer uma breve revisão sobre teoria elementar dos conjuntos. Além de conceitos básicos importantes em matemática, a sua imprtância reside no fato da

Leia mais

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador Estrutura de um compilador programa fonte Compiladores Análise lexical () Expressões Regulares analisador léxico analisador sintático analisador semântico análise gerador de código intermediário otimizador

Leia mais

O que é Linguagem Regular. Um teorema sobre linguagens regulares. Uma aplicação do Lema do Bombeamento. Exemplo de uso do lema do bombeamento

O que é Linguagem Regular. Um teorema sobre linguagens regulares. Uma aplicação do Lema do Bombeamento. Exemplo de uso do lema do bombeamento O que é Linguagem Regular Um teorema sobre linguagens regulares Linguagem regular Uma linguagem é dita ser uma linguagem regular se existe um autômato finito que a reconhece. Dada uma linguagem L: É possível

Leia mais

Prof. Jorge Cavalcanti

Prof. Jorge Cavalcanti Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Matemática Discreta - 01 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav

Leia mais

Aulas 10 e 11 / 18 e 20 de abril

Aulas 10 e 11 / 18 e 20 de abril 1 Conjuntos Aulas 10 e 11 / 18 e 20 de abril Um conjunto é uma coleção de objetos. Estes objetos são chamados de elementos do conjunto. A única restrição é que em geral um mesmo elemento não pode contar

Leia mais

Noção de Computabilidade

Noção de Computabilidade Noção de Computabilidade 1 Procedimento X Algoritmo Procedimento: sequência finita de instruções, que são operações claramente descritas, e que podem ser executadas mecanicamente, em tempo finito. claramente

Leia mais

Teoria Elementar dos Conjuntos

Teoria Elementar dos Conjuntos Teoria Elementar dos Conjuntos Última revisão em 27 de fevereiro de 2009 Este texto é uma breve revisão sobre teoria elementar dos conjuntos. Em particular, importam-nos os aspectos algébricos no estudo

Leia mais

Exercícios Associados à Aula 28 (27/11/2013) Feitos em sala e em equipes

Exercícios Associados à Aula 28 (27/11/2013) Feitos em sala e em equipes Exercícios Associados à Aula 28 (27/11/2013) Feitos em sala e em equipes Questões do POSCOMP 2011 A resposta certa está assinalada em vermelho. Por que é correta e por que as demais alternativas são incorretas?

Leia mais