Aspectos Formais da Computação CCO 410 Prof. Dr. Sérgio Donizetti Zorzo UFSCar –2006 Aspectos Formais da Computação Objetivos - Apresentar aos alunos modelos computacionais e respectivas classes de conjuntos que podem ser tratados. Capacitar o aluno a identificar num dado conjunto as suas características computacionais e construir o modelo computacional apropriado, ajustando-o para um modelo computacional eficiente, com o rigor matemático necessário. Ementa / Plano de Aula Autômatos: os Métodos e a loucura Autômatos Finitos Expressões Regulares e Linguagens Propriedades das Linguagens Regulares Gramáticas e Linguagens Livre de Contexto Autômatos de Pilha Propriedades de linguagens livres de contexto Introdução às Máquinas de Turing Indecidibilidade Problemas Intratáveis Outras classes de problemas Aspectos Formais da Computação Avaliação - Exercícios semanais – média aritmética, descartando 2 piores notas. - Provas Formais - 05/05/2006 e 28/06/2006 Nota Final = (P1 + P2 + Exercicios) / 3 Prova de Suficiência 22/março/2006 - 4a. Feira – 8h / Sala de Seminários – DC Bibliografia Hopcroft, J. E.; Ullman, J.D. & Motwani, R. - Introdução à Teoria de Autômatos, Linguagens e Computação. Editora Campus, 2003. 560p. Aspectos Formais da Computação Teoria dos Autômatos - Estudo dos dispositivos de computação abstratos, ou “máquinas”. década de 30 – Alan Turing estudo de uma máquina abstrata que tinha todas as características dos computadores atuais, pelo menos no que se refere ao que eles poderiam calcular. Objetivo - descrever com exatidão o que podia ou não podia fazer - aplicável até hoje. década de 40 e 50 – máquinas de Turing mais simples = “autômatos finitos” Objetivo - modelar funções do cérebro, estudo de gramáticas formais (Chomsky) em 1969 – Cook estendeu o estudo de Turing a respeito da computabilidade dos problemas - problemas que podem ser resolvidos de forma eficiente e - problemas intratáveis que em princípio podem ser resolvidos mas que, na prática, levam tanto tempo que os computadores são inúteis para solucionar todas as instâncias (NP-difícies) Aspectos Formais da Computação Teoria dos Autômatos - Estudos teóricos dessa área tem relação direta com o que fazemos hoje..... Autômatos finitos e certas classes de gramáticas formais .......... tem relação direta com a construção de componentes de software. Máquinas de Turing .......... o que esperar de nosso software. Teoria de Problemas Intratáveis ........... nos permite detectar a situação e encontrar soluções aproximadas, por alguma heurística ou método para limitar o período de tempo da computação. e o que os computadores podem fazer ???? problemas decidíveis / indecidíveis os computadores podem computar de forma eficiente ???? problemas tratáveis / intratáveis Aspectos Formais da Computação Representações de Conjuntos - Para cada classe de conjunto (de acordo com a Hierarquia de Chomsky) há uma maneira finita de representá-los. Para os conjuntos regulares, temos : Autômatos finitos .......... Conjunto finito de estados, onde cada estado “memoriza” alguma informação, e ações que podem representar influências externas e que faz com o estado “atual” seja atualizado por um novo estado. Gramáticas .......... São sistemas de reescrita onde cada cadeia de símbolos pode ser definida em termos de novas cadeias de símbolos. Expressões Regulares ........... São expressões (finitas) que, utilizando um número fínito de metasímbolos, permitem representar conjuntos regulares. Aspectos Formais da Computação Provas Formais É útil ? Onde ? ...... testes de programas – como? dedução, TIPOS DE PROVAS FORMAIS: - Provas Dedutivas ...... uma sequência de etapas justificadas - Provas por Contradição, Contra-Exemplo, e sobre Conjuntos ........ uso de resultados de teoria já estabelecida, exemplos absurdos - Provas por indução ........ provas recursivas de uma afirmação parametrizada Aspectos Formais da Computação 1- Provas Dedutivas Sequência de afirmações cuja verdade nos leva de alguma afirmação inicial, chamada de hipótese ou declaração dada, a uma afirmação de conclusão. Cada etapa da prova deve se seguir, por algum princípio lógico aceito, dos fatos dados, de algumas afirmações anteriores na prova dedutiva, ou de uma combinação desses elementos. O teorema que é provado quando vamos de uma hipótese H até uma conclusão C é a afirmação “Se H então C” - dizemos que C é deduzido de H. Teorema 1: Se x ≥ 4, então 2x ≥ x2 - Informalmente é fácil convencermos que o Teorema 1 é verdadeiro - a hipótese “x ≥ 4” tem o parâmetro x – não é verdade nem falsa/ depende de x - A conclusão “2x ≥ x2” tem o parâmetro x , e substituindo x vamos achar que a conclusão é verdadeira Mas temos infinitos valores de x, e não poderemos testar todos.... Essa é uma prova informal, pois utilizamos nossa intuição apenas. Aspectos Formais da Computação Maneiras distintas de dizer “Se H então C” H implica C H somente se C C se H Sempre que H é verdadeira, segue-se C no exemplo Teorema 1 - Se x ≥ 4, então 2x ≥ x2 teríamos... 2x ≥ x2 implica x ≥ 4 USO DE 2x ≥ x2 somente se x ≥ 4 2x ≥ x2 se x ≥ 4 Sempre que x ≥ 4, segue-se que 2x ≥ x2 → PARA INDICAR ENTÃO Aspectos Formais da Computação Afirmações com quantificadores para todo existe A ordem em que esses quantificadores aparecem afeta o significado da afirmação. para cada combinação de para-todo / existe Para-todo - deve considerar todas as opções possíveis existe - só tem que escolher um valor (que pode depender dos valores anteriores) Conjunto Infinito “O conjunto S é infinito se e somente se, para todo inteiro n, existe um subconjunto T de S com exatamente n elementos”. (OK) “O conjunto S é infinito se e somente se, existe um subconjunto T de S tal que para todo inteiro n, o conjunto T tem exatamente n elementos”. (INCORRETO) Aspectos Formais da Computação Afirmações se-e-somente-se “A se e somente se B” “A iff B “( iff - if and only if / notação matemática) “A é equivalente a B” “A exatamente quando B” Querem dizer........ “se A então B” e “se B então A” 1- a parte se: “se B então A” 2- a parte somente-se “se A então B”, que pode ser enunciada por “A somente se B “ (forma equivalente) ...... As provas podem ser apresentadas em qualquer ordem. Aspectos Formais da Computação Afirmações se-e-somente-se Seja a notação 1. └x┘- piso do número real x – é o maior inteiro igual ou menor que x 2. ┌x┐- teto do número real x – é o menor inteiro igual ou maior que x Teorema 3 – Seja x um número real. Então └x┘ = ┌x┐ se e somente se x é um inteiro Prova 1- (somente-se) Suponha que └x┘=┌x┐e tentaremos mostrar que x é um inteiro. Usando as definições de de piso e teto, notamos que └x┘ ≤ x e ┌x┐≥ x. Porém foi dado que └x┘=┌x┐e assim podemos substituir o teto pelo piso na primeira igualdade para concluir que ┌x┐ ≤ x. Tendo em vista que ┌x┐≤ x e ┌x┐≥ x são válidas, podemos concluir pelas propriedades das desigualdades aritméticas que ┌x┐= x. Como ┌x┐ sempre é um inteiro, x também que que ser um inteiro nesse caso. 2- (parte se) Suponha que x é um inteiro e tentamos provar que └x┘=┌x┐. Isso é fácil, pois pelas definições de teto e piso, quando x é um inteiro temos que └x┘e ┌x┐são iguais a x, e portanto, são iguais entre si. Aspectos Formais da Computação Teoremas que parecem não ter hipótese As vezes a hipótese está subentendida como no exemplo de trigonometria que admite que se θ é um ângulo e que o significado de sen e cos são os de seno e cosseno da trigonometria, então Teorema 4 – sen2 θ + cos2 θ = 1 ......ou “Se θ é um ângulo então sen2 θ + cos2 θ = 1” Aspectos Formais da Computação 2- Provas sobre conjuntos Provas por contradição Provas por contra-exemplo Provas sobre conjuntos usar a correspondência com a teoria de conjuntos e todos os resultados dessa teoria. A igualdade E = F consiste em 1- se x está em E, então x está em F 2- se x está em F, então x está em E Teorema 5: R U ( S Π T ) = ( R U S) Π ( R U T ) Nesse caso E = R U ( S Π T ) e F = ( R U S) Π ( R U T ) Aspectos Formais da Computação Teorema 5: R U ( S Π T ) = ( R U S) Π ( R U T ) 1) (Parte se ) Afirmação Justificativa 1. x está em R U ( S Π T ) dado 2. x está em R ou x está em ( S Π T ) 1) e definição de união 3. x está em R ou x está em S e T 2) e definição de intersecção 4. x está em R ou S 3) e definição de união 5. x está em R ou T 3) e definição de união 6. x está em ( R U S) Π ( R U T ) 4) e 5) e definição de intersecção 2) (parte somente-se) Afirmação Justificativa 1. x está em ( R U S) Π ( R U T ) dado 2. x está em ( R U S) 1) e definição de intersecção 3. x está em ( R U T) 1) e definição de intersecção 4. x está em R ou x está em S e T 2) e 3) e raciocínio sobre uniões 5. x está em R ou x está em ( S Π T ) 4) e definição de intersecção 6. x está em R U ( S Π T ) 5) e definição de união Aspectos Formais da Computação 2- Provas sobre conjuntos Provas por contradição Provas por contra-exemplo Provas por contradição ou contrapositiva Toda afirmação se-então tem uma forma equivalente que, em algumas circunstâncias, é mais fácil de provar. A contrapositiva da afirmação “se H então C” é “se não C então não H” => Uma afirmação e sua antítese são ambas verdadeiras ou ambas falsas, e assim podemos provar qualquer uma delas para provar a outra. Há 4 casos a considerar: 1) H e C são verdadeiros 2) H é verdadeiro e C é falso => a afirmação “Se H então C” é falsa 3) H é falso e C é verdadeiro 4) H e C são falsos Aspectos Formais da Computação A contrapositiva da afirmação “se H então C” é “se não C então não H” Há 4 casos a considerar para a afirmação contrapositiva “se não C então não H”: 1) H e C são verdadeiros 2) H é verdadeiro e C é falso => a afirmação “Se não C então não H ” é falsa 3) H é falso e C é verdadeiro 4) H e C são falsos Exemplo: A igualdade E = F consiste em 1- se x está em E, então x está em F 2- se x está em F, então x está em E Ou (usando a contrapositiva) A igualdade E = F consiste em 1- se x não está em E, então x não está em F 2- se x não está em F, então x não está em E Aspectos Formais da Computação 2- Provas sobre conjuntos Provas por contradição Provas por contra-exemplo Outra forma de provar uma afirmação da forma “Se H então C” é provar a afirmação “H e não C implica falsidade” Aspectos Formais da Computação 2- Provas sobre conjuntos Provas por contradição Provas por contra-exemplo Servem para provar que determinada afirmação não é um teorema Suposto Teorema: “Todos os primos são impares” (ou, se o inteiro x é um número primo, então x é impar) O número 2 é primo, mas é par Suposto Teorema: “Não existe par de inteiros a e b tais que a mod b = b mod a” Se acharmos a= b = 2 o teorema funciona Teorema 6: “a mod b = b mod a se e somente se a = b ” Aspectos Formais da Computação 3- Provas Indutivas induções sobre inteiros formas mais gerais de induções sobre inteiros induções estruturais induções mútuas induções sobre inteiros Suponha que temos que provar a afirmação S(n) sobre um inteiro n 1- (base) mostramos que S(i) é verdade para um inteiro i específico . Em geral i=0 ou i=1 2- (etapa indutiva) Supondo n>i, onde i é o inteiro da base, mostramos que “se S(n) então S(n+1)” Aspectos Formais da Computação induções sobre inteiros Suponha que temos que provar a afirmação S(n) sobre um inteiro n 1- (base) mostramos que S(i) é verdade para um inteiro i específico . Em geral i=0 ou i=1 2- (etapa indutiva) Supondo n>i, onde i é o inteiro da base, mostramos que “se S(n) então S(n+1)” Teorema 7: “ Σi2 = n ( n+1) (2n+1) / 6, para i variando de 1 a n” Prova: 1 (base) 2 (etapa de indução) Aspectos Formais da Computação Teorema 7: “Σi2 = n ( n+1) (2n+1) / 6, para i variando de 1 a n” Prova: 1 (base) provar que S(0) é verdadeiro 0 = 0. (0+1).(2.0+1) 0=0 OK (provado) 2 2 (etapa de indução ) Supondo que S(n) é verdadeiro, temos que provar que S(n+1) também é verdadeiro Aspectos Formais da Computação 3- Provas Indutivas induções sobre inteiros formas mais gerais de induções sobre inteiros induções estruturais induções mútuas formas mais gerais de induções sobre inteiros 1- (base) pode-se usar vários casos de base. Isto é, provamos S(i), S(i+1), ... S(j), para algum j>i 2- (etapa indutiva) Supondo n>i, onde i é o inteiro da base, mostramos que “se S(n) então S(n+1)” Na prova de S(n+1) pode-se usar a verdade de todas as afirmações S(i), S(i+1), ... , S(j) em vez de usar apenas S(n) Aspectos Formais da Computação 3- Provas Indutivas induções sobre inteiros formas mais gerais de induções sobre inteiros induções estruturais induções mútuas induções estruturais Usada na teoria de autômatos em caso de árvores e sub-árvores e expressões,que possuem definição recursiva. Aspectos Formais da Computação 3- Provas Indutivas induções sobre inteiros formas mais gerais de induções sobre inteiros induções estruturais induções mútuas As vezes temos que provar um grupo de afirmações S1(n), S2(n) S3(n) .... Sk(n) e tais afirmações devem ser induzidas em n no seu conjunto. Aspectos Formais da Computação Conceitos Centrais da Teoria de Autômatos Alfabeto Conjunto de símbolos finito e não vazio. Convencionalmente, usamos o símbolo Σ para um alfabeto Σ1 = { 0, 1 } alfabeto binário Σ2 = { a,b,c,d,e } alfabeto das cinco primeiros letras do alfabeto latino Strings – palavra – cadeia Sequência finita de símbolos de um alfabeto 0110 é uma cadeia do alfabeto Σ1 = { 0, 1 } Cadeia Vazia – cadeia formada por zero símbolos e representada por ε Comprimento de uma cadeia é o número de símbolos do alfabeto que a cadeia contém. A cadeia 0110 do alfabeto Σ1 = { 0, 1 } tem comprimento 4 , pois contém 4 símbolos |0110| = 4 A cadeia 010101 do alfabeto Σ2 = { 01, 02 } tem comprimento 3, ou seja |010101| =3 |ε| = 0 Aspectos Formais da Computação Potência de um Alfabeto Conjunto de todas as cadeias de certo comprimento. Convencionalmente, Σk denota todas as cadeias de comprimento k do alfabeto Σ Se Σ = { 0, 1 } Σ0 = {ε } Σ1 = Σ = { 0,1 } Σ2 = { 00,01,10,11} Σ3 = {000,001,010,011,100,101,110,111} Conjunto de todas as cadeias sobre um alfabeto Σ ( FECHO - Σ* ) Σ* = Σ0 U Σ1 U Σ2 U ..... (Fecho de Σ) Σ+ = Σ1 U Σ2 U ..... (Fecho Positivo de Σ) Concatenação de Cadeias – Justaposição de seus símbolos – Sejam x e y denotando cadeias sobre um alfabeto Σ então xy denota a concatenação, e representa a cadeia formada pelos símbolos da cadeia x seguido (justapostos) pelos símbolos da cadeia y. x= 0101 do alfabeto Σ = { 0, 1 } e y = 1111 do Σ = { 0, 1 } . xy = 01011111 Observar que |xy| = |x| + |y| Aspectos Formais da Computação Linguagens Conjunto de cadeias de um determinado alfabeto L C Σ* Exemplos de linguagem sobre o alfabeto Σ = { 0, 1 } : A linguagem de todas as cadeias que consistem de n 0’s seguidos de n 1’s, ou seja, L = {ε, 01,0011, 000111, .....} A linguagem descrita pelo conjunto de cadeias de 0’s e 1’s com nu número igual de cada um deles, ou seja, L = {ε, 01,10, 0011, 0101, 1001,1010, .....} A linguagem dos números binários, cujo valor é um número primo L = { 1, 10, 11, 101, 111, 1011, .....} A linguagem vazia, ou seja, sem nenhuma cadeia L={} A linguagem de cadeias vazias, ou seja cadeias sem símbolos L = {ε } A linguagem de todas as cadeias do alfabeto L = Σ* Aspectos Formais da Computação Problemas Na teoria de autômatos, um problema é decidir se uma dada cadeia é elemento de alguma linguagem específica Dado uma cadeia w em Σ* (formado por símbolos de Σ), definir se w está ou não em L C Σ* Exemplos de problemas sobre o alfabeto Σ = { 0, 1 } : Dado um cadeia, verificar se está na linguagem dos números binários, cujo valor é um número primo L = { 1, 10, 11, 101, 111, 1011, .....} Aspectos Formais da Computação Descrição dos conjuntos { w | algo sobre w } Exemplos de conjuntos : L = { w | w consiste de igual número de 0’s e 1’s} L = { w | w é um número inteiro binário primo} L = { w | w é um programa em C sintaticamente correto} Outros conjuntos L = { 0n1n | n ≥ 1 } L = { 0i1j | 0 ≤ i ≤n j } Linguagem ou Problema ? é a mesma coisa......