UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Prof.ª Danielle Casillo
Nome: Teoria da Computação Créditos: 4 60 horas Período: 2010.2 Horário: segundas e quintas das 20:40 às 22:20 Professora: Danielle Simone S. Casillo Página: www.ufersa.edu.br Sigaa: www.sig.ufersa.edu.br Contato: danielle@ufersa.edu.br Teoria da Computação - Aula 01 2
Os alunos serão preparados para o estudo e aprofundamento da semântica e lógica da computação do ponto de vista de computabilidade; observando as linguagens como modelos computacionais e examinando a sua expressividade. Teoria da Computação - Aula 01 3
Serão fornecidos os fundamentos matemáticos de dois importantes paradigmas de programação: lógica e funcional. No aspecto prático, orientar-se-á ao estudante no tratamento de problemas simples e na implementação das soluções com técnicas lógicas e funcionais. Teoria da Computação - Aula 01 4
Ensino: Aulas teóricas, estudos individuais e em grupo, resolução de exercícios. Avaliação: Provas escritas; Trabalhos realizados individualmente e/ou em grupo; Seminários. Data das avaliações: 16/09/2010-1ª avaliação 25/10/2010-2ª avaliação 18 a 25/11/2010 - Seminários 02/12/2010 Reposição 09/12/2010-4ª avaliação Teoria da Computação - Aula 01 5
Primeira Unidade: Introdução e Conceitos Básicos Programas Máquinas Computações e Funções Computadas Equivalência de Programas e Máquinas Verificação da Equivalência Forte de Programas Teoria da Computação - Aula 01 6
Segunda Unidade: Máquinas Universais Codificação de Conjuntos Estruturados Máquina de Registradores NORMA Máquina de Turing Máquina de Post Máquina com Pilhas Autômatos com Duas Pilhas Funções Recursivas Linguagem Lambda Teoria da Computação - Aula 01 7
Terceira Unidade: Seminários Teoria da Computação - Aula 01 8
BÁSICA: Notas de Aula Profª Danielle. Teoria da Computação Máquinas Universais e Computabilidade. Tiarajú Asmuz Diverio e Paulo Blauth Menezes. 2ª Edição. Ed. Bookman. 2008. COMPLEMENTAR: Introdução à Teoria da Computação. Michael Sipser. 2ª Edição. Ed. Thompson. 2007. Teoria da Computação - Aula 01 9
A importância da Teoria para a Prática é imensa! A teoria para esta ciência se faz necessário para iluminar o caminho dos cientistas da computação (práticos), dos engenheiros em computação, dos analistas de sistemas, em fim de todos os profissionais que usem a computação como objeto de estudo ou de trabalho. Mas antes de entender o que seria uma teoria para a ciência da computação vamos entender o que seria Ciência da Computação. Teoria da Computação - Aula 01 10
Computação: tudo o que um computador pode realizar. Mas o que é um computador? Hardware e tecnologia. Ex: calculadora, elevador, máquina de vender refrigerante, CD player, impressora,... A teoria nos fornece conceitos e princípios para nos ajudar entender a natureza geral da Ciência do Computador. Teoria da Computação - Aula 01 11
Definição: é o estudo dos algoritmos, suas aplicações e de sua implementação, na forma de software, bem como das estruturas matemáticas indispensáveis à formulação precisa dos conceitos fundamentais da teoria da computabilidade e da computação aplicada. Teoria da Computação - Aula 01 12
Antes de 1920: computador era um termo associado a pessoas que realizavam cálculos. Após 1920: a expressão máquina computacional começou a ser usada para referir-se a qualquer máquina que realize o trabalho de um profissional computador. O termo máquina computacional acabou perdendo espaço para o termo reduzido computador em 1940. Alan Turing, conhecido como pai da Ciência da Computação, inventou a Máquina de Turing, que posteriormente evoluiu para o computador moderno. Teoria da Computação - Aula 01 13
Ciência da computação tem tanto a ver com o computador como a Astronomia com o telescópio, a Biologia com o microscópio, ou a Química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas. Edsger Dijkstra Teoria da Computação - Aula 01 14
O campo dessa disciplina inclui um vasto leque de tópicos especiais, desde projetos de máquinas até programação. Para estudar os princípios básicos da computação, construiremos modelos abstratos de computadores e computação, estes modelos contém as características importantes que são comuns tanto ao hardware quanto aosoftware. Teoria da Computação - Aula 01 15
Computação pode ser definida como a solução de um problema ou, formalmente, o cálculo de uma função, através de um algoritmo. Teoria da Computação - Aula 01 16
A área de TC (Teoria da Computação) procura fornecer fundamentos matemáticos rigorosos para as diversas áreas da computação. A TC introduz conceitos fundamentais que são desenvolvidos em outras áreas. A abordagem de reconhecimento de linguagens é a base de todo o estudo das Linguagens Formais, Semântica Formal, Compiladores, e todo o conjunto de disciplinas que tratam de Linguagens de programação. Teoria da Computação - Aula 01 17
A teoria da computação, um subcampo da ciência da computação e matemática, busca determinar quais problemas podem ser computados em um dado modelo de computação. Existem 3 áreas centrais da Teoria da Computação: Autômatos Computabilidade Complexidade Teoria da Computação - Aula 01 18
Estas áreas são interligadas pela seguinte questão: Quais são as capacidades e limitações fundamentais dos computadores? Para cada uma das três áreas autômatos, computabilidade e complexidade essa questão é interpretada diferentemente. Iremos definir estas três áreas em ordem reversa porque começando do final você pode entender melhor a razão para o início. Teoria da Computação - Aula 01 19
Teoria da Complexidade: Os problemas computacionais vem em diferentes variedades: alguns são fáceis e outros difíceis. Ex: Problema da ordenação Fácil Criptografia Difícil O que faz alguns problemas computacionalmente difíceis ou fáceis? Entender qual o aspecto do problema é a raiz da dificuldade; Encontrar soluções que se aproximam da solução perfeita; Alguns problemas são difíceis somente na situação do pior caso. Teoria da Computação - Aula 01 20
Teoria da Computabilidade: Classifica os problemas por meio da separação entre os que são solúveis e os que não o são. Ex: determinar se um enunciado matemático é verdadeiro ou falso. As teorias da computabilidade e complexidade estão intimamente relacionadas. Na teoria da complexidade, o objetivo é classificar os problemas como fáceis ou difíceis; Na teoria da computabilidade a classificação é feita por meio da classificação dos que são solúveis ou não. Teoria da Computação - Aula 01 21
Teoria dos Autômatos: Lida com as definições e propriedades de modelos matemáticos de computação. Autômatos finitos: usados em processamento de textos, compiladores e projeto dehardware. Gramática livre-do-contexto: usado em linguagem de programação, inteligência artificial. Teoria da Computação - Aula 01 22
A Teoria da Computação teve início nos primeiros anos do século XX, antes da invenção dos modernos computadores eletrônicos. Naquela época, os matemáticos estavam tentando descobrir quais problemas matemáticos poderiam ser resolvidos por um método simples, e quais não poderiam. O primeiro passo estava em definir o significado de um "método simples" para resolver o problema. Em outras palavras, eles precisavam de um modelo formal da computação. Teoria da Computação - Aula 01 23
Na década de 1920, computador era associado a pessoas que realizavam cálculos; O termo máquina computacional referia-se a qualquer máquina que realize cálculos; Os fundamentos matemáticos da ciência da computação moderna começaram a ser definidos por Gödel com seu Teorema da Incompletude, que mostra que existem limites no que pode ser provado ou desaprovado em um sistema formal. Teoria da Computação - Aula 01 24
Diversos modelos diferentes da computação foram propostos pelos primeiros pesquisadores. Máquina de Turing: propunha a construção de uma máquina universal, executando a programação que lhe for passada; Funções Recursivas: compostas para operar diretamente sobre os números; Cálculo-Lambda: similar às Funções Recursivas. Teoria da Computação - Aula 01 25
Todos estes formalismos são equivalentes em termos de poder computacional, ou seja, qualquer computação que possa ser realizada com um modelo pode ser realizada com qualquer um dos outros modelos. As questões relativas à possibilidade de realizar certos tipos de computação em determinados tipos de máquinas são estudadas pela Teoria da Computabilidade. Teoria da Computação - Aula 01 26
Alan Turing propôs, em 1936 um formalismo para representação de procedimentos efetivos. A intenção do modelo de Turing, denominado Máquina de Turing, foi simular, tanto quanto possível, as atitudes humanas relacionadas à computação. Foi o primeiro trabalho a identificar programas escritos para uma máquina computável. Teoria da Computação - Aula 01 27
Assim, define-se programa como sendo um procedimento efetivo, que permite descrever todos os procedimentos possíveis que podem ser executados em um computador. Teoria da Computação - Aula 01 28
Linguagem: é uma forma precisa de expressar problemas, permitindo um desenvolvimento formal adequado ao estudo da computabilidade. As definições que seguem são construídas usando como base a noção de símbolo ou caractere, que é uma entidade abstrata básica, não sendo definida formalmente. Letras e dígitos são exemplos de símbolos frequentemente usados. Teoria da Computação - Aula 01 29
Definição: Alfabeto É um conjunto finito de símbolos ou caracteres. Um conjunto infinito não é um alfabeto. O conjunto vazio é um alfabeto. Exemplo de alfabetos: {a, b, c}; conjunto vazio. Exemplo de conjuntos que não são alfabetos: Conjunto dos números naturais; {a, b, aa, ab, ba, bb, aaa,...}. Teoria da Computação - Aula 01 30
Cadeia de Símbolos, Palavra. É uma sequência de zero ou mais símbolos (do conjunto) justapostos. Uma Palavra é uma Cadeia de Símbolos Finita. Exemplo: abcb é uma palavra sobre o alfabeto {a, b, c}; Teoria da Computação - Aula 01 31
Uma cadeia sem símbolos é uma palavra válida. ε denota a cadeia vazia ou palavra vazia. O símbolo representa um alfabeto, então: * denota o conjunto de todas as palavras possíveis sobre ; + denota * - {ε} Exemplo: Se = {a, b}, então: + = {a, b, aa, ab, ba, bb, aaa,...} * = {ε, a, b, aa, ab, ba, bb, aaa,...} Teoria da Computação - Aula 01 32
Comprimento ou tamanho de uma palavra w, representado por w, é o número de símbolos que compõem a palavra. Exemplo: abcb = 4 ε = 0; Teoria da Computação - Aula 01 33
Prefixo e Sufixo Um Prefixo (respectivamente, Sufixo) de uma palavra é qualquer sequência inicial (respectivamente, final) de símbolos da palavra. Uma Subpalavra de uma palavra é qualquer sequência de símbolos contígua da palavra. Exemplo: Relativamente à palavra abcb, tem-se que: ε, a, ab, abc, abcb são os prefixos; ε, b, cb, bcb, abcb são os respectivos sufixos. Qualquer prefixo ou sufixo de uma palavra é uma subpalavra. Teoria da Computação - Aula 01 34
Linguagem formal é um conjunto de palavras sobre um alfabeto. Exemplo: Suponha o alfabeto ={a, b}. Então: O conjunto vazio e o conjunto formado pela palavra vazia são linguagens sobre. Obviamente, Ø { ε }. O conjunto de palíndromos (palavras que tem a mesma leitura da esquerda para a direita e viceversa) sobre é um exemplo de linguagem infinita. ε, a, b, aa, bb, aaa, aba, bab, bbb, aaaa,... Teoria da Computação - Aula 01 35
Concatenação de palavras associa a cada par de palavras uma palavra formada pela justaposição da primeira com a segunda. A operação de concatenação satisfaz às seguintes propriedades (suponha v, w, t palavras): Associatividade: v(wt) = (vw)t Elemento neutro à esquerda e à direita:εw = w = wε Teoria da Computação - Aula 01 36
Exemplo de concatenação de palavras: Suponha o alfabeto ={a, b}. Então, para as palavras v = baaaa e w = bb, tem-se que: vw = baaaabb vε = v = baaaa Teoria da Computação - Aula 01 37
A concatenação sucessiva de uma palavra é representada na forma de um expoente. w n em que n é o número de concatenações sucessivas Exemplo: Sejam w uma palavra e a um símbolo, então: w 3 = www w 1 = w a 5 = aaaaa a n = aaa...a (o símbolo a repetido n vezes) Teoria da Computação - Aula 01 38
Sequências e uplas Uma sequência de objetos é uma lista desses objetos na mesma ordem. Ex: (7, 21, 57) Em um conjunto a ordem não importa, mas em uma sequência sim. Portanto, (7, 21, 57) não é o mesmo que (57, 7, 21). Como os conjuntos, sequências podem ser finitas ou infinitas. As sequências finitas são chamadas de uplas. Ex: (7, 21, 57) é uma 3-upla (tripla). Uma 2-upla (dupla) é também chamada de par. Teoria da Computação - Aula 01 39
Conjuntos: Se A e B são dois conjuntos, o produto cartesiano ou produto cruzado de A e B, descrito como A x B, é o conjunto de todos os pares nos quais o primeiro elemento é um membro de A e o segundo é um membro de B. Ex: Se A = {1, 2} e B = {x, y, z} A x B = {(1, x), (1, y), (1, z), (2, x), (2, y), (2, z)} Se temos o produto cartesiano de um conjunto com si próprio, usamos a abreviação. Ex: Teoria da Computação - Aula 01 40
Funções e Relações Função: é um objeto que estabelece um relacionamento de entrada-saída. Ex: f ( a ) = b f é uma função cujo valor de saída é b quando o valor de entrada é a. O conjunto de entradas possíveis para uma função é chamado seu domínio e as saídas contradomínio. Ex: f : D C Teoria da Computação - Aula 01 41
1. Marque os conjuntos que são alfabetos: a) Conjunto dos números naturais [ ] b) Conjuntos dos números primos [ ] c) Conjunto das letras do alfabeto brasileiro [ ] d) Conjunto dos algarismos romanos [ ] e) Conjunto {a, b, c, d} [ ] f) Conjunto das partes de {a, b, c} [ ] g) Conjunto das vogais [ ] h) Conjunto das letras gregas [ ] Teoria da Computação - Aula 01 42
2. Dê os possíveis prefixos e sufixos de cada uma das seguintes palavras: a) teoria b) aaa c) AbccBa d) UFERSA e) abcabc Teoria da Computação - Aula 01 43