Upload
phunglien
View
216
Download
0
Embed Size (px)
Citation preview
Linguagens
Lógicas Alunos: Josiane Novais
Cláudio Moisés
Introdução
• Declarativos em vez de baseados em procedimentos
• Sintaxe diferente das linguagens imperativas e funcionais.
• Semântica é pouco semelhante a linguagem imperativa.
Introdução
• Programar em uma LP lógica consiste em:
• Declarar fatos primitivos sobre um domínio;
• Definir regras que expressam relações entre os fatos de um
domínio;
• Fazer perguntas sobre um domínio.
• O processo de dedução através do qual encontram-se
respostas às perguntas é executado automaticamente pelo
sistema
Lógica Formal
Cálculo de PredicadosRevisão
• A lógica proposicional tem como objetivo modelar o raciocínio humano, partindo de frases declarativas (proposições).
• Uma proposição é toda afirmação que pode ser apenas verdadeiro ou falso:
• Ex: Hoje é segunda-feira.
• Como vai você?
• Ele é um ator.
Operadores Lógicos
NOME SÍMBOLO EXEMPLO SIGNIFICADO
Negação ¬ ¬ A não A
Conjunção ∧ A ∧ B A e B
Disjunção ∨ A ∨ B A ou B
Equivalência ↔
A ↔ B A é equivalente a
B
Implicação →
←
A → B
A←B
A implica B
B implica A
Lógica Proposicional Revisão
• Na lógica de predicados, usamos regras de inferência para
chegarmos a teses a partir das hipóteses.
• Se uma tese tiver sido demonstrada como consequência
de determinada hipótese, então, em uma interpretação na
qual a hipótese seja verdadeira, a tese também será
verdadeira.
Lógica ProposicionalRevisão
• Variáveis • Variáveis podem aparecer em proposições, mas somente quando
introduzidas por símbolos especiais, os quantificadores;
• Dois quantificadores no calculo de predicado:
• Sendo X uma variável e P uma proposição;
• Universal: ∀ X P
• Para todo X, P e verdadeiro;
• Existencial: ∃ X . P
• Existe um valor de X tal que P seja verdadeiro;
• Ponto (.), simplesmente separa a variável da proposição;
Exemplo
• ∀ X . ( mulher( X ) → humano( X ))
• Significa que para qualquer valor de X, se
X for uma mulher, X e humano;
• ∃ X . ( mãe( mary, X ) → homem( X ))
• Significa que existe um valor de X tal que
mary e mãe de X e X e um homem (mary
tem um filho);
Tipos de Cláusulas
• fatos e regras • Fato : declaração de uma verdade incondicional
• Regra: condição que deve ser satisfeita para que um
declaração seja considerada verdadeira
Fatos
• mamifero(baleia). Uma forma de declarar um fato como “uma baleia é um mamífero” é:
• gosta(bruno, ana) Para representar o fato “Bruno gosta de Ana” podemos escrever:
• gosta(ana, bruno) Repare que este fato é diferente de “Ana gosta de Bruno”:
Nas expressões acima gostar é o predicado do fato, representando uma relação entre os argumentos.
Regras
• A declaração de regras (axiomas) em LPs lógicas segue
um padrão conhecido como cláusulas de Horn:
• H←A1,A2,..., An
se todos os Ai são verdadeiros, então H é verdadeiro.
• Na expressão acima, H é denominado a cabeça da
cláusula e A1,A2,..., An é o seu corpo.
• Através de regras pode-se estabelecer relações entre fatos.
Exemplo
• Sem-cabeça: pai (pedro, ana).
• Pedro é pai de Ana.
• Com-cabeça: pai(pedro, ana):-
mãe(maria,ana), casada(maria, pedro).
• Pedro é pai de Ana, se Maria for mãe
de Ana e Maria for casada com Pedro.
Resolução
• Para descobrir novas relações uma LP lógica utiliza um
processo conhecido como resolução.
• O corpo de uma cláusula é equivalente a sua cabeça, e
ambos podem ser substituídos livremente em outras
cláusulas para formar novas regras.
• C←A,B
• D←C
• D←A,B
• Através do processo de resolução uma LP lógica é capaz
de provar a validade de proposições.
Banco de Dados
• O conjunto de fatos e relações contidos em um
programa lógico é denominado banco de dados, e
representa o conhecimento sobre um ou mais
domínios.
• O objetivo de um programa lógico é inferir e
validar novos fatos ou relações a partir do banco
de dados.
História do Prolog
• O nome Prolog para a linguagem concreta foi escolhido
por Philippe Rousseal como uma abreviação de
“Programmation Logique”. Foi criada em meados de
1972 por Alain Colmerauer e Philippe Rousseal, baseados
no conceito de Robert Kowalski da interpretação
procedimental das cláusulas de Horn.
• Ainda hoje é a mais popular e principal LP lógica.
• É bastante utilizada em sistemas especialistas.
Prolog
• Programar em Prolog consiste em:
• Declarar alguns fatos sobre objetos e
suas relações.
• Definir algumas regras sobre objetos e
suas relações.
• Fazer consultas sobre objetos e suas
relações
Fatos em Prolog
• Fatos em Prolog são representados através
de átomos ou estruturas.
• Átomos são strings que começam sempre
com letra minúscula: esta_chovendo.
dinheiro.
joao.
Fatos em Prolog
• Estruturas são átomos seguidos de uma lista de
argumentos entre parênteses:
• pred (arg1, arg2, ..., argN).
• onde:
• pred - nome de um predicado
• arg1, arg2, ...,argN – são os argumentos
• N - número de argumentos
• (.) - final sintático de qualquer cláusula Prolog
Fatos em Prolog
• Os argumentos de uma estrutura podem ser
átomos, estruturas, variáveis e números.
• Exemplos:
caro(diamente).
amigo(joana, patricia).
arvore_bin(valor1, arvore_bin(valor2, valor3)).
quantidade(24).
Variáveis
• Em LPs imperativas variáveis são instanciadas através de
operações explícitas de atribuição.
• Em LPs lógicas variáveis geralmente são instanciadas
implicitamente pelo sistema durante o processo de
resolução.
• São usadas basicamente para extrair informações do
banco de dados, e para expressar relações entre fatos.
• Variáveis em Prolog são representadas por strings que
começam com uma letra maiúscula.
Exemplos
pai(joao,joaquim).
pai(joaquim,manuel).
avo(X,Y):- pai(X,Z),pai(Z,Y).
?-avo(joao,Z).
Z=manuel
?-avo(joao,manuel).
yes.
frio(inverno).
?-frio(X).
x=inverno.
Questões
Questões são representados por fatos precedidos por -?.
• Em Prolog se fornece fatos e regras para uma base de dados; então se executam consultas ou (queries) a essa base de dados. A unidade básica do Prolog é o predicado, que é postulado verdadeiro. Um predicado consiste de uma cabeça e um número de argumentos.
Exemplos
animal (cachorro).
animal (gato).
?-animal(cachorro).
yes
?-animal(X).
X = cachorro;
X = gato.
Unificação
• Para tentar provar um fato Prolog precisa
estabelecer a equivalência entre fatos.
• Dois fatos equivalentes são ditos unificáveis.
• Dois átomos são unificáveis apenas se são
idênticos.
• Duas estruturas são unificáveis se o seu
predicado é idêntico, e se seus argumentos são
unificáveis .
Unificação
• Uma variável é unificável a qualquer coisa.
• Durante o processo de resolução, uma
variável é instanciada com um valor que
permite a sua unificação com um símbolo
correspondente de um outro fato.
• O símbolo = em prolog representa
unificação.
Exemplos
fruta(manga).
?-fruta(X).
X = manga X foi unificada com “manga”
gostar(bruno,ana).
?-gostar(bruno,X).
X = ana X foi unificada com “ana”
?-X=sol.
X=sol X foi unificada com “sol”
?-sol=sol.
Yes “sol” foi unificado com “sol”
Regras em Prolog
• Uma regra é a descrição de um predicado através de uma implicação
Exemplo: “um animal é presa se é comido por outro animal”.
come(Y,X) ^ animal(X) -> presa(X)
em Prolog:
presa(X) :- come(Y,X), animal(X)
Conjunções
• Conjunções permitem a especificação de questões com múltiplas condições que devem ser satisfeitas simultaneamente.
• Conjunções são representadas por uma vírgula ( , ).
• Exemplo:
comida(macarrao).
gostoso(macarrao).
?- localizacao(X,cozinha):- comida(X), gostoso(X).
Existe alguma comida gostosa na cozinha?
X= macarrao.
Disjunção
• Disjunções permitem a especificação de questões com
múltiplas condições na qual ao menos uma delas deve ser
satisfeita.
• Disjunções são representadas por um ponto-e-vírgula ( ; )
• Exemplos:
?-amigos(X,Y); parentes(X,Y).
inverno(X):- nevando(X); gelado(X).
É inverno se está nevando ou está gelado.
Fluxo de Controle
• Prolog possui um fluxo de controle implícito através do
qual busca responder uma questão.
• Este fluxo é determinístico, ou seja segue sempre uma
mesma ordem:
• O banco de dados é percorrido sequencialmente na ordem em
que os fatos\regras foram declarados.
• Para cada predicado correto encontrado, os argumentos são
testados em ordem.
• Para cada regra, as condições são testadas sempre da esquerda
para a direita.
Exemplo
Exemplo
tropical(caribe). (1)
tropical(havai).
praia(havai).
praia(caribe). (2)
bonito(havai).
bonito(caribe). (3)
paraiso_tropical(X):-tropical(X), praia(X), bonito(X).
?-paraiso_tropical(X).
X=caribe;
X=havai;
X=caribe.
Fluxo de Controle
• Variáveis são instanciadas implicitamente com valores
que permitem a unificação da estrutura.
• Assim que uma associação válida for encontrada, os
valores com os quais as variáveis foram instanciadas são
impressos.
• Apenas a primeira associação válida é impressa.
• Para que todas as associações válidas possam ser
encontradas basta teclar ( ; ) e cada resultado será
apresentado por Prolog.
Fluxo de Controle Implícito
• Para provar questões mais complexas Prolog pode ser
obrigado a testar várias vezes a mesma condição,
instanciando uma mesma variável com diferentes valores.
• A sequência com que os fatos e regras são testados
portanto não é necessariamente linear, e segue um
caminho semelhante a uma árvore.
• O processo de retornar para uma condição e testá-la
novamente é denominado backtracking.
Exemplos
surf(vitor).
surf(renan).
surf(teco).
skate(vitor).
skate(teco).
moto(renan).
moto(teco).
radical(X):-surf(X),skate(X),moto(X).
?-radical(X).
X = teco.
Igualdade
• Em Prolog existem quatro operadores que representam
igualdade:
• 1. X == Y - Relação de identidade. É verdadeiro apenas se X
e Y são idênticos (representam a mesma variável ou o mesmo
símbolo).
• 2. X = Y - Unificação. É verdadeiro se X é unificável com Y.
• 3. X =:= Y - Significa “calcule X, calcule Y e teste sua
igualdade”. X e Y devem ser expressões aritméticas.
• 4. X is Y - Significa “calcule Y e unifique X com Y”. Y deve
ser uma expressão aritmética.
Aritmética
• O operador is é o mais utilizado em operações aritméticas, e força a instanciação de variáveis.
• Exemplos ?- X is 1+2 X = 3 ?-1+2 is 4-1 No fib(0,1). fib(1,1). fib(X,R):- A is X-1, B is X-2, fib(A,R1), fib(B,R2), R is R1+R2.
Listas
• Prolog suporta uma notação especial para representar
listas. Uma lista genérica tem a seguinte sintaxe:
[elem1, elem2,..., elemN]
• Para manipular uma lista pode-se utilizar a notação [H|T]
onde H representa o primeiro elemento da lista e T os
demais elementos.
member(X, [X|T]).
member(X, [H|T]):- member (X, T).
last(X,[X]).
last(X, [H|T]):- last (X, T).
Predicados da Linguagem
• asserta(X) - adiciona a cláusula X no início
do banco de dados.
• assertz(X) - adiciona a cláusula X no final
do banco de dados.
• retract(X) - remove a cláusula X do banco
de dados.
• call(X) – tenta satisfazer a cláusula X.
Referências
• Sebesta, Robert W. Conceitos de linguagens de
Programação/ Robert w. Sebesta; trad. José
Carlos Barbosa dos Santos. – 4.ed. - . Porto
Alegre: Bookman, 2000,
• http://www.mct.uminho.pt/disciplinas/fmd_tsi/Lo
gica.pdf
• http://www.4shared.com/get/3UdAU7A7/LGICA
_COMPUTACIONAL_-_Logica_F.html
Dúvidas
Obrigado!!!