Programação em Lógica

Propaganda
Programação em Lógica
UCPEL/CPOLI/BCC
Lógica para Ciência da Computação
Luiz A M Palazzo
Maio de 2010
Roteiro
• Introdução
• Conceitos Básicos
• Linguagens Lógicas
• Semântica de Modelos
• Semântica de Prova
• Programação em Lógica
• Prolog
Programação em Lógica - ICC 2010
2
Introdução
• Sistemas Simbólicos
• Linguagens Formais
• Sintaxe e Semântica
• Teoria de Primeira Ordem
Programação em Lógica - ICC 2010
3
Sistemas Simbólicos
• São sistemas construídos a partir de símbolos.
• Organizam-se em quatro níveis bem definidos:
•
•
•
•
Léxico
Sintático
Semântico
Pragmático
• Sistemas simbólicos típicos são as linguagens:
• Naturais
• Formais
Programação em Lógica - ICC 2010
4
Linguagens Formais
• Conjuntos finitos de expressões formais:
– Fórmulas
– Fórmulas bem formadas (fbf)
– Sentenças
• Construídas a partir de:
– Um Alfabeto  conjunto finito de símbolos
– Uma Gramática  gera as expressões válidas da linguagem
• Classificação de Chomsky:
–
–
–
–
Programação em Lógica - ICC 2010.1
Linguagens
Linguagens
Linguagens
Linguagens
Regulares
Livres de Contexto
Sensíveis ao Contexto
Enumeráveis Recursivamente
5
Sintaxe e Semântica
• Sintaxe: fórmulas bem formadas (fbf)
Regida por uma gramática
• Semântica: atribuição de significado às fbfs
Regida por uma interpretação
Programação em Lógica - ICC 2010.1
6
Teoria de Primeira Ordem [1]
• Uma Teoria de Primeira Ordem (TPO) consiste em:
– uma linguagem de primeira ordem, definida sobre um
alfabeto de primeira ordem,
– um conjunto de axiomas, e
– um conjunto de regras de inferência.
• A linguagem de primeira ordem consiste nas fbfs
da teoria.
• Os axiomas e regras de inferência são utilizados
para a derivação dos teoremas da teoria.
Programação em Lógica - ICC 2010.1
7
Conceitos Básicos
•
•
•
•
•
Programação em Lógica - ICC 2010.1
Alfabeto de Primeira Ordem
Termo
Fórmula Bem Formada
Linguagem de Primeira Ordem
Quantificadores
8
Alfabeto de Primeira Ordem [2]
• Um Alfabeto de Primeira Ordem (APO) é
constituído por sete classes de símbolos:
(i)
Variáveis Individuais,
(ii)
Constantes Individuais,
(iii)
Constantes Funcionais,
(iv)
Constantes Predicativas,
(v)
Conetivos,
(vi)
Quantificadores, e
(vii)
Símbolos de Pontuação.
Programação em Lógica - ICC 2010.1
Símbolos não lógicos
Símbolos lógicos
9
Detalhes dos APOs
• As classes (v) a (vii) são as mesmas para todos os
alfabetos, sendo denominadas símbolos lógicos.
• As classes (i) a (iv) podem variar de alfabeto para
alfabeto e são denominadas símbolos não-lógicos.
• Para qualquer alfabeto de primeira ordem, somente
as classes (ii) e (iii) podem ser vazias.
Programação em Lógica - ICC 2010.1
10
Convenções de Notação
• As constantes individuais são denotadas por cadeias de
símbolos iniciando com letra minúscula (a,b, ..., z).
• As variáveis individuais serão denotadas por cadeias de
símbolos iniciando com letra maiúscula (A, B, ..., Z).
• Os conetivos são: ¬, , , , , e 
• Os quantificadores são  e  .
• Os símbolos de pontuação são “(”, “)” e “,”.
• A hierarquia para a precedência entre conetivos e
quantificadores, em ordem decrescente é:
» (1) ¬,  e 
» (2)  e 
» (3) ,  e 
Programação em Lógica - ICC 2010.1
11
Exemplo
• Definição de um APO para o jogo Escoteirinho
• Variáveis individuais: {X, Y}
• Constantes individuais: {pedra, tesoura, papel}
• Constantes funcionais: { }
• Constantes predicativas: {ganha, perde, empata}
• Conetivos: {¬, , , , , }.
• Quantificadores: {,  }
• Símbolos de pontuação: {(, ), ,}.
Programação em Lógica - ICC 2010.1
12
O Jogo: uma TPO
• Assume-se variáveis universalmente quantificadas.
• ganha(X, Y)  X=pedra  Y=tesoura.
ganha(X, Y)  X=papel  Y=pedra.
ganha(X, Y)  X=tesoura  Y=papel.
Predicado ganha/2
• perde(X, Y)  X=tesoura  Y=pedra.
perde(X, Y)  X=pedra  Y=papel.
perde(X, Y)  X=papel  Y=tesoura.
Predicado perde/2
• empata(X,Y)  ¬ganha(X, Y)  ¬perde(X, Y).
Programação em Lógica - ICC 2010.1
Predicado empata/2
13
Outra Versão do Jogo
• Assume-se variáveis universalmente quantificadas.
• ganha(pedra, tesoura).
ganha(papel, pedra).
ganha(tesoura, papel).
Predicado ganha/2
• perde(tesoura, pedra).
perde(pedra, papel).
perde(papel, pedra).
Predicado perde/2
• empata(X, X).
Programação em Lógica - ICC 2010.1
Predicado empata/2
14
Termos [3]
Um termo é definido indutivamente da seguinte
maneira:
• (i) Uma variável individual é um termo;
• (ii) Uma constante individual é um termo;
• (iii) Se f é uma função n-ária e t1, t2, ..., tn são
termos, então f(t1,t2,...,tn) é um termo.
Noção Fundamental
Programação em Lógica - ICC 2010.1
15
Fórmula Bem Formada [4]
• Uma fórmula bem-formada (fbf) é definida
indutivamente da seguinte maneira:
1.
Se p é uma constante predicativa e t1, t2, ..., tn são termos,
então, p(t1, t2, ..., tn) é uma fórmula bem formada denominada
fórmula atômica ou simplesmente átomo;
2.
Se f e g são fórmulas bem formadas, então (¬f), (fg), (fg),
(fg) e (fg) são fórmulas bem formadas;
3.
Se f é uma fórmula bem formada e X é uma variável, então
(Xf) e (Xf) são fórmulas bem formadas.
Programação em Lógica - ICC 2010.1
16
Exemplos de fbfs
• X (p(X, g(X))  q(X)¬r(X))
Para todo X, se q(X) é verdadeiro e r(X) é falso,
então p(X, g(X)) é verdadeiro.
• X Y(¬p(X)¬g(X)  p(Y))
Para todo X existe um Y tal que: se p(X) é falso e
g(X) é falso, então p(Y) é verdadeiro.
Programação em Lógica - ICC 2010.1
17
Linguagem de Primeira Ordem [5]
• Uma linguagem de primeira ordem
(LPO) sobre um alfabeto de primeira
ordem é o conjunto de todas as
fórmulas bem formadas construídas a
partir dos símbolos deste alfabeto.
Noção Fundamental
Programação em Lógica - ICC 2010.1
18
Quantificadores [6]
• O escopo de X em Xf e de X em Xf é f.
• Uma ocorrência ligada de uma variável em uma
fórmula é uma ocorrência que imediatamente
segue o quantificador e qualquer ocorrência
dessa mesma variável no escopo desse
quantificador.
• Qualquer outra ocorrência de variável é dita ser
livre.
Programação em Lógica - ICC 2010.1
19
Fórmula Fechada [7]
• Uma fórmula é dita ser fechada
quando não contém nenhuma
ocorrência de variáveis livres.
Programação em Lógica - ICC 2010.1
20
Fecho Universal e Existencial [8]
• Se f é uma fórmula, então (f) denota o fecho
universal de f, que é a fórmula fechada obtida
pela imposição de um quantificador universal a
todas as variáveis que ocorrem livremente em f.
• Da mesma forma, (f) denota o fecho
existencial de f, obtido pela imposição de um
quantificador existencial a todas as variáveis que
ocorrem livremente em f.
Programação em Lógica - ICC 2010.1
21
Literal [9]
• Um literal é um átomo ou a
negação de um átomo. Um
literal positivo é um átomo,
enquanto que um literal negativo
é a negação de um átomo.
Importante
Programação em Lógica - ICC 2010.1
22
Linguagens Lógicas
•
•
•
•
•
•
•
•
Programação em Lógica - ICC 2010.1
Cláusula
Cláusula de Programa
Cláusula Unitária
Programa em Lógica
Predicado
Cláusula Objetivo
Cláusula Vazia
Cláusula de Horn
23
Cláusula [10]
Uma cláusula é uma fórmula do tipo:
X1 ... Xs (l1 ...  lm)
onde cada li é um literal e
X1, ..., Xs são todas as variáveis em l1, ..., lm.
Isto é:
“uma cláusula é o fecho universal de uma disjunção de literais”
Noção Fundamental
Programação em Lógica - ICC 2010.1
24
Exemplos de Cláusulas
• XYZ (p(X,Z)  ¬q(X,Y)  ¬r(Y,Z))
• XY (¬p(X,Y)  q(f(X),Y,Z)
• ABC (p(A)  q(A,f(B))  r(g(C),a,b)  ¬s(A))
Programação em Lógica - ICC 2010.1
25
Notação Clausal
• Assume-se todas as variáveis universalmente quantificadas.
• A disjunção dos literais positivos é implicada pela conjunção dos
literais negativos.
Noção Fundamental
• Isto é:
X1 ... Xs (a1  a2 ...  ak  ¬b1  ¬b2 ...  ¬ bm)
pode ser escrito como:
a1  a2 ...  ak  b1  b2 ...  bm
e finalmente:
a1 , a2 , ..., ak  b1 , b2 , ..., bm  Notação Clausal
Disjunção dos
Literais Positivos
Programação em Lógica - ICC 2010.1
Conjunção dos
Literais Negativos
26
Na Tabela Verdade
p
q
¬q
p¬q
qp
pq
V
V
F
V
V
V
V
F
V
V
V
V
F
V
F
F
F
F
F
F
V
V
V
V
Cláusula
Programação em Lógica - ICC 2010.1
Mesmos Valores
Verdade
Notação Clausal
27
Cláusula de Programa [11]
• Uma cláusula de programa é uma cláusula do
tipo a  b1, ..., bn , que contém exatamente
um literal positivo. O literal positivo, a, é
denominado a cabeça da cláusula, enquanto
que a conjunção de literais b1, ..., bn é o corpo
da mesma.
Programação em Lógica - ICC 2010.1
28
Cláusula Unitária [12]
• Uma cláusula unitária, ou um fato, é uma
cláusula do tipo a. Isto é, uma cláusula
de programa com o corpo vazio.
• Em um programa em lógica, a cláusula
unitária ou fato é incondicionalmente
(sempre) verdadeira
Importante
Programação em Lógica - ICC 2010.1
29
Importante
Regras e Fatos
• A semântica informal de a  b1, ..., bn é:
• “para todas as possíveis atribuições de cada uma das
variáveis presentes na cláusula, se b1, ..., bn são todos
verdadeiros, então a é verdadeiro".
• Assim, se n>0, uma cláusula de programa é
condicional (regra). Por outro lado, a cláusula unitária
é incondicional (fato). Sua semântica informal é:
• “para todas as possíveis atribuições de cada uma das
variáveis presentes em a, a é verdadeiro".
Programação em Lógica - ICC 2010.1
30
Programa em Lógica [13]
• Um programa em lógica é um
conjunto finito de cláusulas de
programa.
Noção Fundamental
Programação em Lógica - ICC 2010.1
31
Definição de um Predicado [14]
• Caracterização de um predicado: nome e
aridade (número de argumentos).
• Em um programa em lógica, o conjunto
de todas as cláusulas de programa que
possuem o mesmo predicado p na cabeça
é denominado a definição do predicado p.
•
Noção Fundamental
Programação em Lógica - ICC 2010.1
32
Cláusula Objetivo [15]
• Uma cláusula objetivo é uma cláusula do tipo
b1, ..., bn, isto é, uma cláusula que possui o
consequente vazio. Cada bi (i = 1, ..., n) é
denominado um sub-objetivo da cláusula.
Programação em Lógica - ICC 2010.1
33
Cláusula Vazia [16]
• A cláusula vazia, denotada por  (aqui é um
quadradinho mesmo ), é a cláusula que possui
tanto o antecedente quanto o consequente
vazios. Tal cláusula deve ser interpretada como
uma contradição.
Noção Fundamental
Programação em Lógica - ICC 2010.1
34
Cláusula de Horn [17]
Uma cláusula de Horn é uma cláusula de programa,
uma cláusula objetivo ou a cláusula vazia.
Cláusulas de Horn
Significado
a  b1, ..., bn
Regra: verdade condicional
a
Fato: verdade incondicional
 b1, ..., bn
Objetivo: consulta ao programa

Vazia: contradição
Programação em Lógica - ICC 2010.1
35
Supercontextos das Cláusulas de Horn
Lógica Matemática
Cálculo de Predicados de Primeira Ordem
Forma Clausal
Cláusulas de Horn
Todos os contextos tem a mesma expressividade, isto
é, tudo que é possível expressar em lógica matemática,
pode ser expresso com Cláusulas de Horn!
Importante
Programação em Lógica - ICC 2010.1
36
A Seguir, em Lógica para CC
• Exemplos, exercícios, debates e reflexão para o
perfeito entendimento desta fundamentação.
• Programação PROLOG Básica
Programação em Lógica - ICC 2010.1
37
Download