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