Aula 2 – Programação Lógica
Sintaxe Prolog
Profa. Elaine Faria
UFU - 2014
Créditos
• O material a seguir consiste de
adaptações e extensões dos originais
gentilmente cedidos pelo Prof. Alexsandro
Santos Soares
• Agradecimento especial ao Prof. Gabriel
Coutinho que auxiliou na confecção do
material
Introdução
• Linguagens que utilizam o paradigma lógico são
classificadas com Declarativas
– Descrevem o problema e não a solução
– Descrevem O QUE deve ser feito e não COMO deve
ser feito
– Conceito de Mundo Fechado
• Descreve o problema através de FATOS e REGRAS
• Realiza-se CONSULTAS que deverão ser respondidas pelo
interpretador avaliando-se os fatos e regras descritos
• Tudo o que o interpretador não souber terá uma resposta
negativa
Introdução
• Principal linguagem de programação do
paradigma de programação lógico
PROLOG
• Prolog = Programming in Logic
– Linguagem de programação utilizada para resolver
problemas envolvendo objetos e relações entre
objetos
– Ex:Expressar em Prolog o fato “João gosta de Maria”:
• objetos: “Maria” e “João”
• relacionamento: “gosta de”, ou simplificando, “gosta”.
• Em Prolog: gosta(joao,maria).
Aplicações da Programação Lógica
• Sistemas Baseados em Conhecimento
– Sistemas que aplicam mecanismos automatizados de raciocínio
para a representação e inferência de conhecimento
• Bancos de Dados “Inteligentes”
– Sistemas que empregam “agentes” de busca de dados com
base em critérios
• Sistemas Especialistas
– Sistemas que emulam a especialização humana em algum
domínio específico.
• Processamento da Linguagem Natural
– Usada para desenvolvimento de ferramentas para a
comunicação homem-máquina em geral e para a construção de
interfaces
Aplicações da Programação Lógica
• Indústria de aviação, em soluções de
planejamento e escalonamento
– Coordena 20% do tráfico aéreo do mundo
• Instituto Nacional de Meteorologia (INMET)
– Previsão do tempo
• Modelagem ambiental
– Modelos matemáticos para a simulação do
desenvolvimento de florestas
Aplicações da Programação Lógica
• Logística
– Soluções ótimas em tempo-real para um fluxo
contínuo de ordens de serviço
• Mineração de dados
– Busca automática em bancos de dados por
padrões e relacionamentos significantes
• Construção de compilares
– Erlang é uma linguagem criada pela Ericsson
cuja primeira versão foi feita em Prolog
Idéia básica do Prolog
• Descrever a situação de interesse
• Fazer uma pergunta
• Prolog deduz logicamente novos fatos
sobre a situação que nós descrevemos
• Prolog retorna suas deduções como
respostas
Consequências
• Pensar declarativamente, não
procedimentalmente
– Desafiador
– Requer uma mentalidade diferente
• Linguagem de alto nível
– Não tão eficiente quanto, digamos, C
– Bom para prototipagem rápida
– Útil em muitas aplicações de IA
Base de Conhecimento 1
•
•
•
•
•
?-
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- mulher(maria).
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- mulher(maria).
true
?-
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- mulher(maria).
true
?- tocaGuitarra(joana).
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- mulher(maria).
true
?- tocaGuitarra(joana).
true
?-
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- mulher(maria).
true
?- tocaGuitarra(joana).
true
?- tocaGuitarra(maria).
false
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- tatuada(joana).
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- tatuada(joana).
ERROR: predicate tatuada/1 not defined.
?-
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- festa.
Base de Conhecimento 1
•
•
•
•
•
mulher(maria).
mulher(joana).
mulher(iolanda).
tocaGuitarra(joana).
festa.
?- festa.
true
?-
Introdução
• O prolog é baseado em:
– Fatos
– Regras
– Consultas
Programa Prolog
• Fatos
– São entendidos como relações entre objetos
– Constituem-se de afirmações que são feitas
ao Prolog
– São verdades nas quais a Prolog irá basearse para responder as consultas solicitadas
– Ex: árvore genealógica
Programa Prolog
• Fatos – cont.
progenitor(maria, jose)
Fonte: Luis, A. M. Palazzo, Introdução à Programação
Prolog, Educat, 1997
Programa Prolog
• Regras
– Especificação de algo que pode ser
verdadeiro se algumas condições forem
satisfeitas
– É composta de duas partes: Conclusão
(esquerda) e condição (direita)
– Exemplo: Relação Filho.
• filho(X,Y) :- progenitor(Y,X).
Programa Prolog
• Consultas
– Questionamentos que serão respondidos
avaliando-se os fatos e regras
• João é filho de José?
? filho(joão, josé).
• Quem é o filho de José?
?filho(X, josé).
• Quem são os filhos de João
?filho(X,joão).
– X é uma variável que representa um objeto
desconhecido
– Variáveis são escritas com a primeira letra em maiúsculo
Base de conhecimento 2
progenitor(maria, josé).
progenitor(joão, josé).
progenitor(joão, ana).
progenitor(josé,júlia).
progenitor(josé, íris).
progenitor(íris,jorge).
filho(X,Y) :- progenitor(Y,X).
cabeça
corpo
fato
regra
Base de conhecimento 3
•
•
•
•
•
?-
feliz(iolanda).
escuta_musica(maria).
escuta_musica(iolanda):- feliz(iolanda).
tocaGuitarra(maria):- escuta_musica(maria).
tocaGuitarra(iolanda):- escuta_musica(iolanda).
Base de conhecimento 3
•
•
•
•
•
feliz(iolanda).
escuta_musica(maria).
escuta_musica(iolanda):- feliz(iolanda).
tocaGuitarra(maria):- escuta_musica(maria).
tocaGuitarra(iolanda):- escuta_musica(iolanda).
?- tocaGuitarra(maria).
true
?-
Base de conhecimento 3
•
•
•
•
•
feliz(iolanda).
escuta_musica(maria).
escuta_musica(iolanda):- feliz(iolanda).
tocaGuitarra(maria):- escuta_musica(maria).
tocaGuitarra(iolanda):- escuta_musica(iolanda).
?- tocaGuitarra(maria).
true
?- tocaGuitarra(iolanda).
true
Cláusulas
•
•
•
•
•
feliz(iolanda).
escuta_musica(maria).
escuta_musica(iolanda):- feliz(iolanda).
tocaGuitarra(maria):- escuta_musica(maria).
tocaGuitarra(iolanda):- escuta_musica(iolanda).
Existem cinco cláusulas nesta base de conhecimento:
dois fatos e três regras.
O final de uma cláusula é marcado com um ponto final.
Predicados
•
•
•
•
•
feliz(iolanda).
escuta_musica(maria).
escuta_musica(iolanda):- feliz(iolanda).
tocaGuitarra(maria):- escuta_musica(maria).
tocaGuitarra(iolanda):- escuta_musica(iolanda).
Existem três predicados nesta base de
conhecimento:
feliz, escuta_musica e tocaGuitarra
Base do Conhecimento 4
•
•
•
•
•
feliz(vicente).
escuta_musica(bruno).
tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente).
tocaGuitarra(bruno):- feliz(bruno).
tocaGuitarra(bruno):- escuta_musica(bruno).
Base do Conhecimento 4
•
•
•
•
•
feliz(vicente).
escuta_musica(bruno).
tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente).
tocaGuitarra(bruno):- feliz(bruno).
tocaGuitarra(bruno):- escuta_musica(bruno).
A vírgula “," expressa conjunção em Prolog
Expressando Disjunção
•
•
•
•
•
feliz(vicente).
escuta_musica(bruno).
tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente).
tocaGuitarra(bruno):- feliz(bruno).
tocaGuitarra(bruno):- escuta_musica(bruno).
feliz(vicente).
escuta_musica(bruno).
tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente).
tocaGuitarra(bruno):- feliz(bruno); escuta_musica(bruno).
Prolog e Lógica
• Prolog tem algo a ver com lógica
• Operadores
– Implicação :– Conjunção ,
– Disjunção ;
• Uso do modus ponens
• Negação
Base do Conhecimento 5
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
Variáveis em Prolog
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- mulher(X).
Instanciação de Variáveis
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- mulher(X).
X=maria
Solicitando Alternativas
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- mulher(X).
X=maria;
Solicitando Alternativas
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- mulher(X).
X=maria;
X=joana
Solicitando Alternativas
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- mulher(X).
X=maria;
X=joana;
X=iolanda
Solicitando Alternativas
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- mulher(X).
X=maria;
X=joana;
X=iolanda.
?
Base do Conhecimento 5
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- ama(marcelo,X), mulher(X).
Base do Conhecimento 5
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- ama(marcelo,X), mulher(X).
X=maria.
?-
Base do Conhecimento 5
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- ama(abobrinha,X), mulher(X).
Base do Conhecimento 5
• mulher(maria).
• mulher(joana).
• mulher(iolanda).
•
•
•
•
ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
?- ama(abobrinha,X), mulher(X).
false
?-
Base do Conhecimento 6
•
•
•
•
ama(vicente,maria).
ama(marcelo,maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
• tem_ciumes(X,Y):- ama(X,Z), ama(Y,Z).
Base do Conhecimento 6
•
•
•
•
ama(vicente,maria).
ama(marcelo,maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
• tem_ciumes(X,Y):- ama(X,Z), ama(Y,Z).
?- tem_ciumes(marcelo,W).
Base do Conhecimento 6
•
•
•
•
ama(vicente,maria).
ama(marcelo,maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).
• tem_ciumes(X,Y):- ama(X,Z), ama(Y,Z).
?- tem_ciumes(marcelo,W).
W=vicente;
W=marcelo;
false.
?-
Base do Conhecimento 7
•
Base de fatos:
gosta(joao, peixe).
gosta(joao,maria).
gosta(maria,livro).
gosta(pedro,livro).
gosta(maria,flor).
gosta(maria,vinho).
Qual o resultado das seguintes
perguntas?
?- gosta(maria,X).
?- gosta(X,livro).
?- gosta(Quem,Oque).
?- gosta(X,Y).
?- gosta(X,X).
?- gosta(_a,_b).
?- gosta(A,peixe).
Prolog
• Comentário em Prolog
– Linha: %
– Bloco: /* ..... */
Referências
• Luis, A. M. Palazzo, Introdução à
Programação Prolog, Educat, 1997.
• Slides da Profa Solange – ICMC-USP –
Inteligência Artificial
Download

Aula 2 – Programação Lógica Sintaxe Prolog