Conceitos Básicos Lógica para Programação 1 Lógica A lógica é usada em Informática para desenvolver linguagens que modelam situações e que fornecem mecanismos para raciocinar sobre essas situações de modo a que se possa garantir que os resultados obtidos estão correctos. Definição de lógica no contexto desta cadeira: ramo do conhecimento que aborda a analise de argumentos, ou a analise dos métodos para distinguir argumentos validos de argumentos inválidos. Lógica para Programação 2 Proposições Frases declarativas que fazem afirmações sobre algo Exemplos Sócrates é homem. Todas as aves têm penas. Todos os homens são mortais. 2 e 3 são divisores de 6. Contra-exemplos O que é um dinossauro? Diga qual é o seu nome. Could you please pass me the salt? Lógica para Programação 3 Premissas e conclusões Objectivo da lógica: geração de raciocínio correcto. Input = premissas: conjunto de frases declarativas que se assume serem verdadeiras. Output = conclusões: conjunto de outras frases, geradas a partir das premissas, que são verdadeiras nessa situação. Argumento - é um par (premissas,conclusão) também representado por (,). Inferência - é o processo de geração de conclusões a partir de premissas. Lógica para Programação 4 Argumentos Representação de um argumento: Em linguagem corrente as premissas e a conclusão são relacionadas com palavras como então portanto logo Em lógica podem ser usadas duas representações alterativas: ({todos os Homens são mortais, Sócrates é um homem}, Sócrates é mortal) todos os Homens são mortais Sócrates é um homem Sócrates é mortal Lógica para Programação 5 Argumentos válidos e inválidos Diz-se que Um argumento (,) é valido ou que implica logicamente ou, ainda, que é uma consequência lógica de sse for logicamente impossível ter todas as premissas verdadeiras e a conclusão falsa. Caso contrario o argumento é inválido. Lógica para Programação 6 Validade/Invalidade vs Verdade/Falsidade Validade/Invalidade são atributos de argumentos Verdade/Falsidade são atributos de proposições Validade/Invalidade de um argumento é independente dos conteúdos das proposições Validade/Invalidade de um argumento depende apenas da existência de uma relação entre os valores lógicos (verdadeiros ou falsos) das premissas e da conclusão Lógica para Programação 7 Validade/Invalidade vs Verdade/Falsidade (cont.) Valores lógicos (,) Argumento válido (Verdadeiro,Verdadeiro) todos os homens são mortais Sócrates é um homem Sócrates é mortal (Verdadeiro,Falso) todas as aves são humanos (Falso,Verdadeiro) todos os humanos têm penas todas as aves têm penas todos os cães são felinos (Falso,Falso) todos os felinos têm penas todos os cães têm penas Lógica para Programação Argumento inválido todos as pessoas são humanos todos os homens são pessoas todos os cães são animais todos os animais são cães todos os animais são cães todos os cães são animais todos os gatos são cães todos os cães são gatos 8 Princípio da irrelevância do valor lógico Princípio da irrelevância do valor lógico: Excepto no caso em que as premissas são todas verdadeiras e a conclusão e falsa, a verdade/falsidade das proposicões que constituem um argumento não é relevante para determinar a validade/invalidade do argumento. Lógica para Programação 9 Forma dos argumentos A forma de um argumento é estudada independentemente do domínio: as partes das proposicões são substituídas por símbolos associados à categoria gramatical (nome proprio, substantivo, adjectivo). Por exemplo o argumento: Bobi é um animal todos os cães são animais Bobi não é cão nem todos os animais são cães tem a forma: A é um B todo o C é B A não é C nem todos os B são C em que A é um nome próprio e B e C são substantivos Lógica para Programação 10 Forma dos argumentos (cont.) Por exemplo os dois argumentos: Piupiu é uma ave TESTE é um nome em Java nenhuma ave tem barbatanas Piupiu não tem barbatanas nenhum nome em Java contém o caracter % TESTE não contém o caracter % têm a mesma forma: A é um B nenhum B tem C A não tem C em que A e um nome próprio e B e C são substantivos Princípio da forma: se dois argumentos têm a mesma forma então são ambos válidos ou ambos inválidos. Lógica para Programação 11 Sistema Formal A lógica é um sistema formal porque estuda argumentos do ponto de vista da forma. A lógica utiliza símbolos para descrever em termos lógicos os objectos que são comuns a formas de argumentos. Por exemplo a forma: A é um B nenhum B tem C A não tem C pode ser apresentada de um modo mais compacto como: B(A) x [B(x) C(x)] C(A) em que todos é representado por , implica por e não por Lógica para Programação 12 Metodologia para determinar validade/invalidade Lógica para Programação 13 Metodologia para determinar validade/invalidade (cont.) Embora um argumento seja sempre válido ou inválido, a sua validade ou invalidade pode ser desconhecida. Por exemplo o último teorema de Fermat foi formulado no sec. XVII mas só foi provado em 1993. ({axiomas da aritmética}, para n > 2, não existem inteiros x, y e z tais que zn = xn + yn) Lógica para Programação 14 Componentes de uma lógica A linguagem de uma lógica é definida através de um conjunto de regras de formação que especificam as frases possíveis da lógica, denominadas formulas bem formadas (fbfs). Seja L a linguagem que corresponde às fbfs. Logo, um argumento é um par (,) no qual L e L. Podemos manipular as frases da linguagem a dois níveis diferentes: A nível simbólico - sistema dedutivo: realização de operações de manipulação de símbolos que dão origem a sequências de frases que começam pelas premissas e tentam obter uma conclusão. A nível do significado - sistema semântico: atribuição de significado/valor lógico às proposições de um argumento com o objectivo de avaliar validade/invalidade de um argumento. Lógica para Programação 15 Sistema dedutivo Composto por um conjunto de regras para a manipulação de símbolos chamadas regras de inferência. Estas regras especificam como formar novas fbfs a partir das fbfs existentes. Prova de um argumento (,): sequência finita de fbfs geradas a partir de de modo a obter , tal que cada fbf ou é uma premissa ou é o resultado da aplicação de uma regra de inferência a uma ou mais fbfs anteriores da prova. Axioma: fbf que é aceite sem demonstração. Lógica para Programação 16 Derivação, demonstração e teoremas Dado um argumento (,), é derivável a partir de , ou seja, sse existir uma sequência de regras de inferência que aplicadas às fbfs de (e às fbfs geradas a partir de ) produz . Por outras palavras, é derivável a partir de se existe uma prova de a partir de . Se então o argumento (,) e demonstrável. O conjunto de todas as fbfs deriváveis a partir de L corresponde à teoria gerada a partir de , ou seja, aos teoremas de (Th()). Lógica para Programação 17 Sistema semântico Especifica as condições sob as quais as proposições são verdadeiras ou falsas Uma interpretação permite determinar os valores lógicos das proposições Dado um argumento (,), se não existe nenhuma interpretação que torna todas as proposições em verdadeiras e falso, então diz-se que implica logicamente ou que é uma implicação lógica de , ou seja, . Se então o argumento (,) é válido. Lógica para Programação 18 Sistema dedutivo e sistema semântico Solidez (ou coerência) de uma lógica: qualquer argumento demonstrável (pelo sistema dedutivo) é válido (de acordo com a semântica). Completude de uma lógica: qualquer argumento válido (de acordo com a semântica) e demonstrável (pelo sistema dedutivo). Os conceitos de solidez e completude estabelecem uma relação entre o sistema dedutivo e a semântica. Numa lógica sólida e completa os conceitos de derivabilidade e validade são equivalentes. Lógica para Programação 19