Sie sind auf Seite 1von 51

Aula 2 Programao Lgica

Sintaxe Prolog

Profa. Elaine Faria


UFU - 2014

Crditos
O material a seguir consiste de
adaptaes e extenses dos originais
gentilmente cedidos pelo Prof. Alexsandro
Santos Soares
Agradecimento especial ao Prof. Gabriel
Coutinho que auxiliou na confeco do
material

Introduo
Linguagens que utilizam o paradigma lgico so
classificadas com Declarativas
Descrevem o problema e no a soluo
Descrevem O QUE deve ser feito e no COMO deve
ser feito
Conceito de Mundo Fechado
Descreve o problema atravs de FATOS e REGRAS
Realiza-se CONSULTAS que devero ser respondidas pelo
interpretador avaliando-se os fatos e regras descritos
Tudo o que o interpretador no souber ter uma resposta
negativa

Introduo
Principal linguagem de programao do
paradigma de programao lgico
PROLOG
Prolog = Programming in Logic
Linguagem de programao utilizada para resolver
problemas envolvendo objetos e relaes entre
objetos
Ex:Expressar em Prolog o fato Joo gosta de Maria:
objetos: Maria e Joo
relacionamento: gosta de, ou simplificando, gosta.
Em Prolog: gosta(joao,maria).

Aplicaes da Programao Lgica


Sistemas Baseados em Conhecimento
Sistemas que aplicam mecanismos automatizados de raciocnio
para a representao e inferncia de conhecimento

Bancos de Dados Inteligentes


Sistemas que empregam agentes de busca de dados com
base em critrios

Sistemas Especialistas
Sistemas que emulam a especializao humana em algum
domnio especfico.

Processamento da Linguagem Natural


Usada para desenvolvimento de ferramentas para a
comunicao homem-mquina em geral e para a construo de
interfaces

Aplicaes da Programao Lgica


Indstria de aviao, em solues de
planejamento e escalonamento
Coordena 20% do trfego areo do mundo

Instituto Nacional de Meteorologia (INMET)


Previso do tempo

Modelagem ambiental
Modelos matemticos para a simulao do
desenvolvimento de florestas

Aplicaes da Programao Lgica


Logstica
Solues timas em tempo-real para um fluxo
contnuo de ordens de servio

Minerao de dados
Busca automtica em bancos de dados por
padres e relacionamentos significantes

Construo de compilares
Erlang uma linguagem criada pela Ericsson
cuja primeira verso foi feita em Prolog

Idia bsica do Prolog


Descrever a situao de interesse
Fazer uma pergunta
Prolog deduz logicamente novos fatos
sobre a situao que ns descrevemos
Prolog retorna suas dedues como
respostas

Consequncias
Pensar declarativamente, no
procedimentalmente
Desafiador
Requer uma mentalidade diferente

Linguagem de alto nvel


No to eficiente quanto, digamos, C
Bom para prototipagem rpida
til em muitas aplicaes 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
?-

Introduo

O prolog baseado em:


Fatos
Regras
Consultas

Programa Prolog
Fatos
So entendidos como relaes entre objetos
Constituem-se de afirmaes que so feitas
ao Prolog
So verdades nas quais a Prolog ir basearse para responder as consultas solicitadas
Ex: rvore genealgica

Programa Prolog
Fatos cont.

progenitor(maria, jose)

Fonte: Luis, A. M. Palazzo, Introduo Programao


Prolog, Educat, 1997

Programa Prolog
Regras
Especificao de algo que pode ser
verdadeiro se algumas condies forem
satisfeitas
composta de duas partes: Concluso
(esquerda) e condio (direita)
Exemplo: Relao Filho.
filho(X,Y) :- progenitor(Y,X).

Programa Prolog
Consultas
Questionamentos que sero respondidos
avaliando-se os fatos e regras
Joo filho de Jos?
? filho(joo, jos).
Quem o filho de Jos?
?filho(X, jos).
Quem so os filhos de Joo
?filho(X,joo).
X uma varivel que representa um objeto
desconhecido
Variveis so escritas com a primeira letra em maisculo

Base de conhecimento 2
progenitor(maria, jos).
progenitor(joo, jos).
progenitor(joo, ana).
progenitor(jos,jlia).
progenitor(jos, ris).
progenitor(ris,jorge).
filho(X,Y) :- progenitor(Y,X).
cabea

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

Clusulas

feliz(iolanda).
escuta_musica(maria).
escuta_musica(iolanda):- feliz(iolanda).
tocaGuitarra(maria):- escuta_musica(maria).
tocaGuitarra(iolanda):- escuta_musica(iolanda).

Existem cinco clusulas nesta base de conhecimento:


dois fatos e trs regras.
O final de uma clusula 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 trs 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 vrgula ," expressa conjuno em Prolog

Expressando Disjuno

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 Lgica
Prolog tem algo a ver com lgica
Operadores
Implicao : Conjuno ,
Disjuno ;

Uso do modus ponens


Negao

Base do Conhecimento 5
mulher(maria).
mulher(joana).
mulher(iolanda).

ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).

Variveis em Prolog
mulher(maria).
mulher(joana).
mulher(iolanda).

ama(vicente, maria).
ama(marcelo, maria).
ama(abobrinha, coelhinho).
ama(coelhinho, abobrinha).

?- mulher(X).

Instanciao de Variveis
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
Comentrio em Prolog
Linha: %
Bloco: /* ..... */

Referncias
Luis, A. M. Palazzo, Introduo
Programao Prolog, Educat, 1997.