Aula3
-
Upload
martin-spyyd-pridal -
Category
Documents
-
view
212 -
download
0
description
Transcript of Aula3
-
Prolog Aula #3
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
1
-
Programa - Significado
Um programa Prolog pode ser interpretado de duas formas:
Declarativa
Diz respeito apenas definio das relaes de um programa e a qual ser o resultado do mesmo
Procedimental
Diz respeito ao modo como o resultado obtido e a forma como as relao so calculadas pelo motor de inferncia do Prolog
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
2
-
Programa - Significado
A facilidade com que o Prolog resolve automaticamente muitos dos aspectos procedimentais deve ser visto como uma vantagem
Deve encorajar o programador a especificar os seus programas de uma forma declarativa
Infelizmente nem sempre tal possvel
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
3
-
Significado - Exemplo
Considere a clusula
P:- Q,R.
De um ponto de vista declarativo a clusula pode ser lida como:
P verdadeiro se Q e R forem verdadeiros
Q e R implicam P
Do ponto de vista procedimental podemos ler a mesma clusula como:
Para resolver o problema P temos de resolver primeiro o sub-problema O e depois o sub-problema R.
Para satisfazer P temos de, primeiro, satisfazer Q e depois R.
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
4
-
Significado - Exemplo
A diferena entre estas interpretaes reside no facto de na ltima, para alm da definio lgica das relaes entre a cabea e o corpo da clusula, tambm relevante a ordem pela qual as condies so processadas.
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
5
-
Significado - Exemplo Base de Conhecimento
#1
progenitor(marta,maria).
progenitor(maria,jose).
antepassado(X,Y):- progenitor(X,Y).
antepassado(X,Y):- progenitor(X,Z),
antepassado(Z,Y).
Base de Conhecimento
#2
progenitor(marta,maria).
progenitor(maria,jose).
antepassado(X,Y):- progenitor(X,Y).
antepassado(X,Y):- antepassado(Z,Y),
progenitor(X,Z).
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
6
-
Significado - Exemplo ?-antepassado(maria,X).
Resposta BC #1 X=jose;
false.
?-antepassado(maria,X).
Resposta BC #2 X=jose;
(ciclo infinito!)
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
7
-
Significado - Exemplo
Apesar de ambos os programas terem o mesmo significado declarativo, pois a operao de conjuno comutativa, o significado procedimental diferente
O segundo programa perante a mesma questo entra num ciclo infinito!
Para alm da ordem das condies a provar tambm a ordem das clasulas relevante!
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
8
-
Significado - Exemplo
Exerccios
1. Construa a rvore de prova para a BC #2 e comprove.
2. Altere na BC #1 a ordem das clusulas #3 e #4 e repita o exerccio.
E porque no construmos programas esquecendo por completo o seu significado declarativo?
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
9
-
Significado - Exemplo
Porque evoluo em programao sempre evitarmos os detalhes de implementao e focarmo-nos no problema a resolver.
O objectivo procurarmos que seja o sistema, e no o programador, a resolver as questes de implementao.
Concluso: O Prolog ajuda-nos a percorrer esse caminho mas com limitaes!
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
10
-
Representao dum Problema
Um macaco est a porta de uma sala. No centro dessa sala est uma banana pendurada no tecto. O macaco est com fome e quer comer a banana mas no consegue esticar-se o suficiente para agarrar a banana. Junto da janela da sala est uma caixa que o macaco pode usar.
O macaco pode realizar as seguintes aces: andar, subir caixa, empurrar a caixa (se estiver junto dela) e agarrar a banana (se estiver em cima da caixa e por baixo da banana).
Ser que o macaco consegue comer a banana?
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
11
-
O macaco e a banana
Um dos aspectos fundamentais em programao definir uma representao de um problema em termos do paradigma utilizado.
Neste exemplo podemos ver o problema como uma mquina de estados
Cada estado determinado pela posio dos objectos e a transio entre estados definida por um movimento
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
12
-
O macaco e a banana
Analisando a descrio do problema:
O macaco tem uma posio horizontal e outra vertical
A caixa tem uma posio
O macaco pode ou no ter a banana
O estado inicial ser constitudo pelos seguintes factos:
O macaco est no cho
O macaco est junto porta
A caixa est junto da janela
O macaco no tem a banana Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
13
-
O macaco e a banana
Podemos combinar esta situao num functor que agrega estas situaes
estado(posio horizontal, posio vertical,
posio da caixa, tem ou no a banana)
Assim sendo o nosso objectivo atingir o estado
estado(_, _, _, tem)
O estado inicial ser definido por
estado(na_porta, no_chao, na_janela, nao_tem)
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
14
-
O macaco e a banana
Os movimentos possveis sero:
agarrar a banana
subir caixa
empurrar a caixa
andar
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
15
-
O macaco e a banana
Como vimos para transitarmos de um estado para outro temos que utilizar um movimento
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
16
Estado Inicial
#0
Mov #1 Estado #1
Mov #2 Estado #2
Estado Final
#N
-
O macaco e a banana
Cada movimento M pode ser representado pelo functor
mov(Estado1,M,Estado2)
Temos de restringir a transio de estados aos movimentos possveis
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
17
-
O macaco e a banana
O macaco agarra a banana
mov(estado(no_meio, na_caixa, no_meio, nao_tem),
agarra,
estado(no_meio, na_caixa, no_meio, tem)).
O macaco sobe caixa (est junto a ela)
mov(estado(X, no_chao, X, Z),
sobe,
estado(X, na_caixa, X, Z)). Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
18
-
O macaco e a banana
No cho o macaco pode andar livremente
mov(estado(X1,no _chao,Y,Z),
andar(X1,X2),
estado(X2,no_chao,Y,Z)).
Esta clusula representa tambm outras situaes
O macaco empurra a caixa livremente
mov(estado(X1,no _chao,X1,Z),
empurra(X1,X2),
estado(X2,no_chao,X2,Z)). Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
19
-
O macaco e a banana
A questo que o programa deve ser capaz de responder :
Dado um estado inicial E o macaco consegue agarrar a banana?
Esta questo pode ser formulada pelo predicado
consegue(S).
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
20
-
O macaco e a banana
Quando que o macaco termina com a banana (objectivo)?
Quando j a tem no estado inicial (facto)
consegue(estado(_,_,_,tem)).
Quando parte de um estado E1 e existe um movimento M que o transita para o estado E2 e nesse estado o macaco tem a banana
consegue(E1):-mov(E1,M,E2),consegue(E2).
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
21
-
O macaco e a banana
Coloquemos a questo
consegue( estado( na_porta, no_chao, na_janela, nao_tem) ).
Devido ordem das clusulas o Prolog responde true e apenas necessitou de efectuar o retrocesso (backtracking) 1 vez.
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
22
-
O macaco e a banana
A ordem definida determina tambm as preferncias do macaco:
1. Agarrar a banana
2. Subir caixa
3. Deslocar a caixa
4. Passear
Ainda que a troca da ordem das clusulas no interfira com o significado declarativo do programa condiciona a sua execuo procedimental!
Hu
go P
ire
s @
Un
ive
rsid
ade
Lu
sfo
na
do
Po
rto
23