Informática Teórica Engenharia da Computação Teoria é importante para a prática Ela provê ferramentas conceituais que os praticantes usam em engenharia da computação. Projetando uma nova linguagem de programação para uma aplicacão especializada? O que você aprender sobre gramáticas neste curso irá bem a calhar. Teoria é importante para a prática Lidando com busca por cadeias e casamento de padrões? Lembre-se de autômatos finitos e expressões regulares. Teoria é importante para a prática Lidando com busca por cadeias e casamento de padrões? Lembre-se de autômatos finitos e expressões regulares. Teoria é importante para a prática Confrontado com um problema que parece requerer mais tempo de computador do que você pode suportar? Pense no que você aprendeu sobre NP completude. Teoria é importante para a prática Os melhores projetos e aplicações de computadores são concebidos com elegância em mente. Um curso teórico pode elevar seu sentido estético e ajudá-lo a construir sistemas mais bonitos. Teoria é importante para a prática Finalmente, teoria é bom para você porque estudála expande sua mente. Conhecimento técnico específico, embora útil hoje, fica desatualizado em apenas uns poucos anos. Por outro lado as habilidades de pensar, exprimirse claramente e precisamente, para resolver problemas, e saber quando você não resolveu um problema. Essas habilidades têm valor duradouro. Estudar teoria treina você nessas áreas. Teoria dos Autômatos Lida com as definições e propriedades de modelos matemáticos de computação. Um modelo, chamado autômato finito, é usado em processamento de texto, compiladores, e projeto de hardware. Um outro modelo, chamado gramática livre-docontexto, é usado em linguagens de programação e inteligência artificial. Teoria da Computação Nosso curso Três áreas centrais: autômatos, computabilidade e complexidade. Quais são as habilidades e limitações fundamentais dos computadores? O que faz alguns problemas computacionalmente difíceis e outros fáceis? COMPLEXIDADE Como separar os problemas que possuem solução computacional daqueles que não possuem? COMPUTABILIDADE Teoria da Computação Nosso curso As teorias da complexidade e computabilidade requerem uma definição precisa de um computador. A teoria dos autômatos introduz definições de modelos matemáticos de computação. Daí começamos o nosso curso estudando esses modelos. Teoria da Computação Outros modelos Só para sabermos: Outros modelos de computação também foram propostos. -cálculo (Alonzo Church) Funções recursivas (Kurt Godel, Jacques Herbrand) Lógica combinatória (Moses Schonfinkel, Haskell B. Curry) Teoria da Computação Contexto do que vamos começar a estudar No curso iremos estudar os seguintes modelos de computação: Autômatos finitos 2. Autômatos com pilha 3. Máquinas de Turing 1. 1 e 2 possuem mémória finita ao passo que 3 possui memória ilimitada. FERRAMENTAS MATEMÁTICAS CONJUNTOS Operações Produto cartesiano Conjunto das partes SEQUÊCIAS E UPLAS FERRAMENTAS MATEMÁTICAS FUNÇÕES E RELAÇÕES Domínio, contra-domínio e imagem Argumentos e aridade Função n-ária, unária, binária, etc. Predicado ou propriedade Relação n-ária, binária, etc. Propriedades de uma relação Relações de equivalência GRAFOS FERRAMENTAS MATEMÁTICAS TEOREMAS Métodos de Prova Provas diretas Provas por contradição Provas por contrapositiva Provas por indução matemática FERRAMENTAS MATEMÁTICAS CADEIAS E LINGUAGENS Alfabeto Conjunto finito não vazio de símbolos. Notação: ou Cadeias sobre um alfabeto É uma sequência finita de símbolos daquele alfabeto. * é o conjunto de todas as cadeias sobre o alfabeto FERRAMENTAS MATEMÁTICAS CADEIAS E LINGUAGENS Tamanho de uma cadeia w: |w|. Cadeia vazia (de tamanho zero): Reverso de w: wR. FERRAMENTAS MATEMÁTICAS CADEIAS E LINGUAGENS Operação de concatenação de cadeias. Essa opereção pega duas cadeias x e y e forma uma nova colocando y após x. A cadeia xy é chamada de concatenação de x e y. Em geral xy é diferente de yx FERRAMENTAS MATEMÁTICAS CADEIAS E LINGUAGENS Concatenação de cadeias: algumas propriedades Associativa: (xy)z = x(yz) A cadeia é a identidade: x = x = x |xy| = |x| + |y| FERRAMENTAS MATEMÁTICAS CADEIAS E LINGUAGENS Concatenação de x com si própria: xK. Exemplo: (ab)3 = ababab (ab)0 = Definição recursiva para xk: x0 = xn+1 = xnx Linguagem: conjunto de cadeias Autômatos Finitos É um dos modelos computacionais que estudaremos. Porém com uma quantidade extremamente limitada de memória. O que um computador pode fazer com uma memória tão pequena? Na verdade, interagimos com tais computadores o tempo todo, pois eles residem no coração de vários dispositivos eletromecânicos. Autômatos Finitos O controlador para uma porta automática é um exemplo de tal dispositivo. As lavadoras de louça/roupa, termômetros eletrônicos, relógios digitais, calculadoras e máquinas de venda automática.... Os autômatos também são chamados de máquinas de estados finitos. Autômatos Finitos: exemplo Controlador para uma porta automática de entrada Sinal de entrada Estado Nenhum Frente Atrás Ambos Fechado Fechado Aberto Fechado Fechado Aberto Fechado Aberto Aberto Aberto Esse controlador é um computador com apenas 1 bit de memória, capaz de registrar em quais dos dois estados o controlador está. Autômatos Finitos Controladores para diversos aparelhos domésticos, como lavadora de pratos e termostatos eletrônicos, assim como peças de relógios digitais e calculadoras, são exemplos adicionais de computadores com memória limitada. O projeto requer que se tenha em mente a metodologia e terminologia de autômatos finitos. Autômatos Finitos Ao começar a descrever a teoria matemática de autômatos finitos, fazemos isso no nível abstrato, sem referˆência a qualquer aplicação específica. A seguir vamos ver alguns exemplos usando um diagrama de estados e identificar os conceitos de: estado inicial, estado de aceitação ou final, transição. Autômatos Finitos Uma máquina M1 que recebe cadeias de bits como entrada e aceita somente aquelas que começam com um ou mais zeros seguidos de um ou mais 1’s apenas. Autômatos Finitos O autômato recebe os símbolos da cadeia de entrada um por um da esquerda para a direita. Após ler cada símbolo, M1 move de um estado para outro ao longo da transição que tem aquele símbolo como seu rótulo. Quando ele lê o último símbolo, M1 produz sua saída. A saída é aceite se M1 está agora no estado de aceitação e rejeite se ele não está. Autômatos Finitos Um AF M2 que recebe cadeias de bits e aceita aquelas que possuem 10 como subcadeia Autômatos Finitos 0 q0 M2 1 1 q1 0 q3 0,1 Autômatos Finitos M3 q0 0 1 0 1 L(M3)={w | w termina em 1} q1 Autômatos Finitos M4 1 1 0 q0 q1 0 L(M4)={w | w é a cadeia vazia ou termina em 0} Autômatos Finitos a M5 q0 b a q2 q1 b b a a b q3 q4 b a L(M5)={w | w começa e termina no mesmo símbolo} Autômatos Finitos a q0 b q1 a b q2 a q3 b a,b Os estados q1 e q2 servem para “memorizar’’ o símbolo anterior. Esse AF aceita as cadeias sobre o alfabeto {a,b} que possuem aa ou bb como subcadeias. Autômatos Finitos q0 0 1 q1 1 0 1,0 q3 Esse AF aceita qualquer cadeia binárias que termina com o símbolo 1 ou que termina com um número par de 0s seguindo o último 1.