Você está na página 1de 10

PROLOG PROgramming in LOGic

Linguagem de Programao Baseada no Clculo de Predicado de Primeira


Ordem

Programao Lgica Apropriada :


processamento simblico, no numrico
resoluo de problemas que envolvam objetos e relaes entre objetos
Mecanismos Bsicos:
casamento de padro
Profa. Heloisa de Arruda Camargo estruturas de listas
1. Sem. 2014 Retrocesso (backtracking) automtico

HAC IA2014 1 HAC IA2014 2

Objetos de Dados Objetos de Dados

tomos - cadeias de letras maisculas, letras minsculas, dgitos e


objetos caracteres especiais construdas como:

cadeias de letras, dgitos e o caracter_ (underscore), comeando


objetos simples objetos estruturados
com letra minscula
cadeia de caracteres especiais: ::=, <-->, etc.
constantes variveis cadeia de caracteres entre apstrofes

Ex: maria, a, x, elemento, a1, cubo_1, ponto_a


tomos nmeros

HAC IA2014 3 HAC IA2014 4


Objetos de Dados Objetos de Dados

Estruturas ou Objetos Estruturados - so objetos de


dados que tem vrios componentes, podendo cada um
Nmeros - sintaxe usual deles, por sua vez ser uma estrutura.
Exemplos:
inteiros: 1, -25, 4851, -9556 A combinao dos componentes feita atravs do funtor,
ponto flutuante: 1.55, -0.55, 84.756, 4.1 que d um nome para a estrutura:

data(1, setembro, 1999)


Variveis - cadeias de letras, dgitos e caracter _ , comeando com
par(primeiro,segundo)
letra maiscula ou com o caracter _
semana(seg,ter,qua,qui,sex,sab,dom)
semana(util(seg,ter,qua,qui,sex), fim-de(sab,dom))
Ex: X, X1, Lista1, _abc, YZW, A123 autor(Russel & Norvig)
livro(titulo(Inteligencia Artificial), autor(G. Bittencourt))

HAC IA2014 5 HAC IA2014 6

Relaes ou Predicados Relaes ou Predicados

Componente principal das construes do Prolog Predicado X Estrutura


Descrevem algum tipo de ligao entre objetos
Estruturas so formalmente idnticas aos predicados
pai_de(joao,pedro)
Todo predicado uma estrutura
bonita(maria)
gosta_de(ana,vinho) Nem toda estrutura um predicado
maior(5,4,3,2,1) Um predicado uma estrutura que declara coisas que podem ser
pequeno(gato)
verdadeiras ou falsas
sobre(cubo_a, cubo_b)
soma(5,2,7) Estruturas que nomeiam objetos no fazem declaraes e no podem ser
verdadeiras ou falsas

HAC IA2014 7 HAC IA2014 8


Programa Fatos

Um fato uma declarao de que uma determinada relao existe


Um Programa Prolog consiste de: entre certos objetos.

pai_de(joao, pedro).
Fatos bonita(maria).
gosta_de(ana, vinho).
maior(5, 4, 3, 2, 1).
Regras gosta(X, vinho). (fatos universais)
vezes(0, X, 0).
Consultas
Base de Dados: conjunto de fatos

HAC IA2014 9 HAC IA2014 10

Exemplo 1: FAMLIA REAL


% base de dados
pai_de(henrique_pai, henrique). %1 Consultas
pai_de(henrique_pai, maria). %2
pai_de(henrique, elizabeth2). %3
pai_de(henrique, eduardo). %4 So o meio de recuperar informao em um programa lgico. Podem ser
de dois tipos:
homem(henrique_pai). %5
homem(henrique). %6 Confirmao
homem(eduardo). %7 Recuperao
mulher(catarina). %8
mulher(elizabeth1). %9
mulher(maria). %10 1) Confirmao - a busca realizada at encontrar uma resposta, confirmando ou
mulher(elizabeth2). %11 negando o que foi perguntado.
mulher(ana). %12
mulher(jane). %13 | ?- pai_de(henrique,eduardo).
mae_de(catarina, maria). %14 yes
mae_de(ana, elizabeth2). %15
mae_de(jane, eduardo). %16
mae_de(elizabeth1, henrique). %17
HAC IA2014 11 HAC IA2014 12
Consultas
2) Recuperao - todos os valores que satisfazem a consulta so
recuperados | ?- mae_de(catarina,X). | ?-mae_de(X,Y).
| ?- pai_de(X,eduardo). X = maria X = catarina ,
| ?- pai_de(X,maria).
Y = maria ;
X = henrique
X = henrique_pai ; | ?- mae_de(X,catarina). X = ana ,
no Y = elizabeth2 ;
no | ?- mae_de(X,henrique).
X = jane ,
| ?- pai_de(henrique,X). X = elizabeth1 Y = eduardo ;
| ?- mae_de(X,maria). X = elizabeth1 ,
X = elizabeth2 ; Y = henrique
X = catarina;
X = eduardo
no

HAC IA2014 13 HAC IA2014 14

Consultas Compostas
| ?- pai_de(X,eduardo),pai_de(Y,X).
So interpretadas como conjuno.
(Quem o av de eduardo?)
X = henrique ,
Y = henrique_pai ;
| ?- pai_de(X,elizabeth2),pai_de(X,eduardo). no
(Existe um valor para X que torne as duas partes da consulta verdadeiras
ao mesmo tempo?) | ?- pai_de(henrique_pai,X),pai_de(X,Y).
X = henrique ; (Quem so os netos de henrique_pai?)
no X = henrique ,
Y = elizabeth2 ;
X = henrique ,
Y = eduardo ;
no

HAC IA2014 15 HAC IA2014 16


Unificao Unificao
Dois termos unificam se:
Termo 1 : data(D1,abril, A)
1) so idnticos, ou Termo 2 : data(D2,M,1900)
2) as variveis em ambos os termos podem ser instanciadas em objetos Resultado : D1 = D2
de tal forma que aps a substituies das variveis por esse objetos M = abril
os termos se tornam idnticos.
A = 1900

Exemplos:
Termo 1: pai_de(henrique, filhos(eduardo,elizabeth2))
Termo 2: pai_de(henrique,X)
Termo 1 : data(25,maio, Ano)
Termo 2 : data(D,maio,1983) Resultado: X = filhos(eduardo,elizabeth2)
Resultado : D = 25
Ano = 1983

HAC IA2014 17 HAC IA2014 18

Unificao
Regras para decidir se dois termos unificam:
T erm o 1 T erm o 2 R e s u lt a d o d a
U n if ic a o
1) Se S e T so constantes ento S e T unificam se e s se so o mesmo h e n r iq u e h e n r iq u e u n if ic a m
e d u a rd o h e n r iq u e n o u n if ic a m
objeto;
X p a r ( a ,b ) X = p a r ( a ,b )
2 .3 5 Y Y = 2 .3 5
2) se S uma varivel e T qualquer termo, ento unificam e S d a ta ( 2 5 ,m a io ,A n o ) d a ta ( D ,m a io ,1 9 8 3 ) D = 15
instanciada com T; vice-versa com a varivel T instanciada com S; A no = 1983
d a ta ( D 1 ,a b r il,A ) d a ta ( D 2 ,M ,1 9 0 0 ) D1 = D2
M = a b r il
3) se S e T so estruturas, elas unificam se e s se S e T tem o mesmo A = 1900
funtor principal e todos os elementos correspondentes unificam. d a ta ( 1 7 ,m a r c o ,2 0 0 0 ) d a te ( 1 7 ,M ,2 0 0 0 ) n o u n if ic a m
p a i_ d e ( X ,e d u a r d o ) p a i_ d e ( h e n r iq u e ,Y ) X = h e n r iq u e
Y = e d u a rd o

HAC IA2014 19 HAC IA2014 20


Regras Regras
Permitem definir novas relaes em termos das j existentes. Forma Geral:
A :- B1, B2, ....., Bn.
Definir as relaes de filho e filha:
corpo
cabea
filho_de(Y,X) :- pai_de(X,Y), homem(Y).
A - objetivo, meta
filha_de(Y,X) :- pai_de(X,Y), mulher(X).
Bi - sub-objetivos, condies
Para provar A provamos B1, B2,...., Bn
Definir a relao de av:
Base de Conhecimento:
conjunto de regras
avo_de(X,Z) :- pai_de(X,Y), pai_de(Y,Z).

HAC IA2014 21 HAC IA2014 22

Exemplo 1: FAMLIA REAL


% base de dados
Clusulas pai_de(henrique_pai, henrique). %1
pai_de(henrique_pai, maria). %2
Regras, pai_de(henrique, elizabeth2). %3
pai_de(henrique, eduardo). %4
Fatos e homem(henrique_pai). %5
homem(henrique). %6
Consultas
homem(eduardo). %7
mulher(catarina). %8
mulher(elizabeth1). %9
so chamadas Clusulas de Horn, ou mulher(maria). %10
somente Clusulas mulher(elizabeth2). %11
mulher(ana). %12
mulher(jane). %13
mae_de(catarina, maria). %14
mae_de(ana, elizabeth2). %15
mae_de(jane, eduardo). %16
HAC IA2014 23 HAC mae_de(elizabeth1,
IA2014 henrique). %17 24
Como o programa Prolog usa as regras:

%base de conhecimento Colocada a consulta:


| ?- filho_de(eduardo,henrique).
filho_de(Y,X) :- pai_de(X,Y), homem(Y). %18
pai_ou_mae(X,Y) :- pai_de(X,Y). %19 No h no programa fatos sobre a relao filho_de.
pai_ou_mae(X,Y) :- mae_de(X,Y). %20 necessrio usar as regras
predecessor(X,Y) :- pai_de(X,Y). %21 A consulta comparada com a cabea das regras que definem a
predecessor(X,Y) :- pai_de(X,Z), relao filho_de, na seqncia.
predecessor(Z,Y). %22 Ocorre uma unificao entre a consulta e a cabea da regras %18,
com as instanciaes:
Y = eduardo
X = henrique

HAC IA2014 25 HAC IA2014 26

Mais de uma regra sobre a mesma relao:

A regra fica:
filho_de(eduardo,henrique):- Duas ou mais regras sobre a mesma relao indicam formas
alternativas de provar um objetivo, portanto correspondem ao
pai_de(henrique,eduardo), homem(eduardo)
operador ou.

O objetivo substitudo pelos sub-objetivos:


pai_ou_mae(X,Y) :- pai_de(X,Y). %19
pai_de(henrique,eduardo), homem(eduardo)
pai_ou_mae(X,Y) :- mae_de(X,Y). %20

que devem ser verdadeiros ao mesmo tempo.


| ?- pai_ou_mae(X,elizabeth2).
X = henrique ;
Os sub-objetivos so provados, pois so fatos no programa.
X = ana ;
Logo, o objetivo tambm verdadeiro e a resposta :
yes. no

HAC IA2014 27 HAC IA2014 28


Mais de uma regra sobre a mesma relao: Regras Recursivas

| ?- pai_ou_mae(X,eduardo). Recurso: operao em que um objeto usado em sua prpria


X = henrique ; definio.
X = jane ;
no Regras recursivas: definidas em termos delas mesmas.

| ?- pai_ou_mae(jane,X). Exemplo: Definir a relao de predecessor


X = eduardo Considerar a base Famlia Real

| ?- pai_ou_mae(henrique,Y). predecessor(X,Y) :- pai_de(X,Y). %21


Y = elizabeth2 ; predecessor(X,Y) :- pai_de(X,Z),
Y = eduardo ; predecessor(Z,Y). %22
no

HAC IA2014 29 HAC IA2014 30

Observao 1:
| ?- predecessor(henrique_pai,X).
X = henrique ; Variveis DIFERENTES em uma mesma clusula PODEM assumir o mesmo
X = maria ;
valor
X = elizabeth2 ;
X = eduardo ;
no Exemplo: Definir a relao de irm
pai_ou_mae(tom,bob).
| ?- predecessor(X,henrique). X = henrique_pai ; pai_ou_mae(tom,liz).
X = elizabeth1 ;
pai_ou_mae(bob,ana).
no
pai_ou_mae(bob,pat).
| ?- predecessor(X,eduardo). pai_ou_mae(pat,jim).]
X = henrique ; mulher(ana).
X = jane ; mulher(pat).
X = henrique_pai ;
irma(X,Y) :- pai_ou_mae(Z,X),
X = elizabeth1 ;
no pai_ou_mae(Z,Y),
mulher(Y).
HAC IA2014 31 HAC IA2014 32
Observao 2:
Consulta:
Escopo de Variveis:

| ?- irma(pat,X). O escopo de todas as variveis limitado a uma nica clusula.


X = ana ;
X = pat ; No existem variveis globais.
no

A segunda resposta significa Pat irm dela mesma.

O Prolog inclui essa resposta porque no h restrio de que X e Y devam


ser diferentes.

HAC IA2014 33 HAC IA2014 34

Backtracking
pai_ou_mae(tom,bob). irma(X,Y) :- pai_ou_mae(Z,X), Tcnica de busca que consiste em sistematicamente testar todos os
pai_ou_mae(Z,Y), caminhos alternativos que levam a uma soluo
pai_ou_mae(tom,liz).
pai_ou_mae(bob,ana). mulher(Y).
pai_ou_mae(bob,pat). irmao(X,Y) :-
pai_ou_mae(Z,X), rvore AND/OR (E/OU)
pai_ou_mae(bob,joe).
pai_ou_mae(Z,Y),
pai_ou_mae(pat,jim). homem(Y).
mulher(ana). sobrinho(X,Y) :- irma(X,Z), Ns AND - representam conjunes
mulher(pat). pai_ou_mae(Z,Y). Ns OR - representam disjunes (caminhos alternativos)
homem(joe). sobrinho(X,Y) :- irmao(X,Z),
homem(bob). pai_ou_mae(Z,Y).

HAC IA2014 35 HAC IA2014 36


rvore de Execuo
A rvore AND/OR de um programa Prolog representa todos os
caminhos que levam a uma soluo, isto , permitem provar o
objetivo. rvore que representa o processo de execuo de uma consulta
A :- B1, B2.
A :- B3. Ns representam objetivos (simples ou compostos)
A
B1 :- C.
Arcos representam substituies de um objetivo por sub-objetivos pela
B2 :- D. B1
B2 B3 unificao de objetivos com fatos ou regras
B2 :- E.
C D E F G
B3 :- F, G.
D :- H, I. I Usada para acompanhar a execuo de uma consulta passo a
H
passo.
No a rvore AND/OR

HAC IA2014 37 HAC IA2014 38

Você também pode gostar