unificaÇÃo em prolog
TRANSCRIPT
1 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
BUSCA DE SOLUÇÕES EM PROLOG
Resolução em PROLOG: Unificação e substituição
2 PROF. CESAR A. TACLA UTFPR/CURITIBA
HISTÓRICO
UNIFICAÇÃO EM PROLOG
3 PROF. CESAR A. TACLA UTFPR/CURITIBA
HISTÓRIA A PARTIR DE 1950
1958
forma clausal: simplificação do cálculo de predicados
emprega ‘cláusulas’ que são disjunções de literais
pode haver cláusula vazia
1960
Dag Prawitz propôs um novo tipo de operação sobre objetos que,mais
tarde, veio a ser conhecida por unificação
1965
a programação em lógica se torna possível com o desenvolvimento do
Princípio da Resolução por J.A. Robison (utilizado em PROLOG).
1969
Cordell Green – princípio da resolução + programação de
computadores: mecanismo de extração de respostas
4 PROF. CESAR A. TACLA UTFPR/CURITIBA
HISTÓRIA A PARTIR DE 1950
1972
primeiro interpretador experimental num grupo liderado por Alain
Colmerauer na Universidade de Aix-Marseille (PROLOG –
Programmation en Logique)
1974
Robert Kowalski deu uma interpretação procedimental da lógica
estabelecendo as condições que nos permitem entendê-la como uma
linguagem de programação
1977
PROLOG de Edimburgo (linguagem de referência): David H. D.
Warren, Luís Moniz Pereira e outros pesquisadores da
Universidade de Edimburgo
Fonte: PALAZZO, L.A.M. Introdução a Programação PROLOG, 2006.
5 PROF. CESAR A. TACLA UTFPR/CURITIBA
INTERPRETAÇÃO PROCEDIMENTAL
6 PROF. CESAR A. TACLA UTFPR/CURITIBA
INTERPRETAÇÃO PROCEDIMENTAL DA LÓGICA
7 PROF. CESAR A. TACLA UTFPR/CURITIBA
NEGAÇÃO POR FALHA
8 PROF. CESAR A. TACLA UTFPR/CURITIBA
NEGAÇÃO POR FALHA
CLOSED WORLD ASSUMPTION
tudo que não está declarado na base de conhecimentos ou que não é
derivável é considerado falso por PROLOG.
Esta falsidade deve ser lida como
Assume-se que tubarão não é mamífero porque PROLOG não conseguiu
demonstrar (nem sempre é correto – ex. mamifero(raposa).
% Ao fazer a query
% ?- mamifero(tubarao).
% false
%
% porque no mundo fechado deste programa, PROLOG nao
% consegue demonstrar que raposa é mamífero.
mamifero(gato).
mamifero(cao).
mamifero(baleia).
ex075-00-closed-world-assumption.pl
9 PROF. CESAR A. TACLA UTFPR/CURITIBA
NEGAÇÃO POR FALHA
Operador \+
\+ objetivo é satisfeito quando PROLOG não consegue demonstrar o
objetivo – negação por falha.
casado(pedro, maria).
casado(joao, ana).
casado(marcelo, raimunda).
solteiro(X) :-
\+ casado(X, _),
\+ casado(_, X).
?- solteiro(juca) responde true
?- solteiro(X) responde false; não
consegue dar nenhum exemplo de solteiro
ex080-00-negacaoPorFalha.pl
10 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO
11 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO: CONCEITO
Unificação
Operação que ocorre entre dois termos PROLOG e que tenta torná-los
idênticos por meio da instanciação
Termo
Sintaticamente todos os objetos são considerados termos. Assim, o
menor conjunto de elementos que satisfaz:
Toda constante é um termo
Toda variável é um termo
Se t1, t2, ..., tn são termos e f é um átomo, então f(t1, t2, ..., tn) também é um
termo (f é um símbolo funcional n-ário ou um termo funcional
*termos a partir daqui designam qualquer tipo de elemento (inclusive compostos como functors e
listas) – isto é diferente do que foi visto na definição da sintaxe de LPO, porém, note que a
definição acima é compatível com o que foi visto anteriormente.
12 PROF. CESAR A. TACLA UTFPR/CURITIBA
OPERAÇÃO DE UNIFICAÇÃO
Dois termos unificam
se são idênticos ou
se após a substituição de suas variáveis por objetos, se tornam
idênticos
Exemplo
data(D, M, 1994) e data(X, março, A) unificam se
D = X
M = março
1994 = A
Contra-exemplos
data(D, M, 1994) e data(X, Y, 94) não unificam 1994 <> 94
data(X, Y, Z) e ponto(X, Y, Z) data <> ponto
13 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO MAIS GERAL
?-data(D, M, 1994) = data(X, março, A)
Há várias unificações possíveis...
D=X, M=março, 1994=A (menos comprometida)
D=1, X=1, M=março, 1994=A
D=primeiro, X=primeiro, março, 1994=A
Instanciações mais gerais são menos comprometidas
Facilitam unificações posteriores!
PROLOG utiliza instanciações deste tipo.
14 PROF. CESAR A. TACLA UTFPR/CURITIBA
REGRAS DE UNIFICAÇÃO
Se S e T são constantes
então S e T unificam somente se ambos representam o mesmo objeto;
Se S é uma variável e T é qualquer coisa,
então S e T unificam com S instanciada com T;
Se S e T são estruturas, unificam somente se:
(1) S e T tem o mesmo functor principal, e
(2) todos os seus componentes correspondentes também unificam.
15 PROF. CESAR A. TACLA UTFPR/CURITIBA
PROCESSO DE UNIFICAÇÃO
Exemplo de unificação com functor
Os termos unificam pois – NESTA ORDEM:
1. triângulo = triângulo
2. ponto(1,1) = X
3. A = ponto(4, Y)
4. ponto(2, 3) = ponto(2, Z)
5. 3 = Z
1
triângulo(ponto(1, 1), A, ponto(2, 3)) triângulo(X, ponto(4, Y), ponto(2, Z))
16 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO: UTILIDADE
PROLOG
pode ser interpretado
declarativa,
procedimental e
operacionalmente.
a utilidade da unificação passa por estes conceitos.
17 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO: UTILIDADE
Semântica declarativa de uma cláusula
P :- Q, R
a leitura declarativa é: P segue de Q e R
Semântica procedimental de uma cláusula
Para solucionar o problema P (ou atingir o objetivo P)
primeiramente solucione o subproblema Q (ou sub-objetivo Q)
depois solucione o subproblema R (ou sub-objetivo R)
18 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO: UTILIDADE
A semântica declarativa diz que um objetivo G é
verdadeiro sse:
há uma cláusula C no programa e
há uma instância I da cláusula C tal que
a cabeça de I é idêntica a G
todos os objetivos no corpo de I são verdadeiros (satisfazíveis)
19 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO: UTILIDADE
progenitor(joao, Z) é um novo objetivo
Exemplo, dadas as cláusulas:
1. temFilho(X, Y) :- progenitor(X, Y).
2. progenitor(joao, maria).
?temFilho(joao, Z)
objetivo G a ser provado
temFilho(joao, Z) :- progenitor(joao, Z)
instância de C1 pela unificação X/joao e Y/Z
Progenitor(joao, maria) unifica com progenitor(joao, Z)
pela substituição de Z/maria , logo G é verdadeiro quando Z/Maria
Objetivo G unifica com a cabeça de C1
20 PROF. CESAR A. TACLA UTFPR/CURITIBA
UNIFICAÇÃO: UTILIDADE
Semântica Operacional
21 PROF. CESAR A. TACLA UTFPR/CURITIBA
BUSCA POR SOLUÇÕES
22 PROF. CESAR A. TACLA UTFPR/CURITIBA
BUSCA POR SOLUÇÕES EM PROLOG
Na busca de solução aos problemas
PROLOG utiliza uma árvore de busca (search tree) explorando o corpo
das cláusulas em profundidade.
Dado um objetivo G
procura uma cláusula cuja cabeça unifique com G por uma substituição θ
As partes do corpo da cláusula passam a ser novos objetivos
para a primeira subcláusula do corpo, procura uma cláusula...
Por isto, a estratégia de busca é DEPTH-FIRST
23 PROF. CESAR A. TACLA UTFPR/CURITIBA
EXEMPLO DE ÁRVORE DE BUSCA
1. temFilho(X,Y) :- progenitor(X,Y).
2. progenitor(joao,maria).
3. progenitor(joao,ana).
base de conhecimentos
?temFilho(joao,Y).
objetivo G1 a ser provado
?temFilho(joao,Y) unifica com cláus. 1
θ=X/joao
temFilho(joao, Y) :- progenitor(joao, Y)
novo G2 a ser provado
?progeniror(joao, Y) unifica com cláus. 2
θ=Y/maria
progenitor(joao, maria)
Como é um fato, para a busca – G2 foi provado
θ=Y/maria
maria é uma substituição que satisfaz G2 e G1.
?progenitor(joao, Y) unifica com cláus. 3
θ=Y/ana
progenitor(joao, ana)
Como é um fato, para a busca – G2 foi provado
com uma solução alternativa
θ=Y/ana
ana é uma substituição que satisfaz G2 e G1.
θ = substituição
backtr
ackin
g
24 PROF. CESAR A. TACLA UTFPR/CURITIBA
EXEMPLO DE ÁRVORE DE BUSCA
?temFilho(joao,Y).
progenitor(joao, Y)
progenitor(joao, maria) progenitor(joao, ana)
Claus. 1: temFilho(X,Y)
θ=X/joao
Claus. 2: progenitor(joao,
maria)
θ=Y/maria
Claus. 3: progenitor(joao,
maria)
θ=Y/ana
backtracking
Exercício: implemente a KB do slide anterior em PROLOG, ligue o trace e
compare com a árvore de busca acima. Explique cada passo mostrado no trace
(ex140-00-arvoreDeBusca.pl).
25 PROF. CESAR A. TACLA UTFPR/CURITIBA
ESTRATÉGIA DE BUSCA DE SOLUÇÃO
Assuma que o objetivo a provar (goal) é:
? G1, G2, ..., Gn
O motor de inferência pesquisa a base de conhecimento (de cima para
baixo) até encontrar uma regra cuja cabeça unifique com G1. Essa
unificação produz uma substituição (o unificador mais geral ) θ
Se C :- P1, ..., Pm é a cláusula encontrada. θ é tal que C θ = G1 θ .
O novo objetivo a provar é agora ? P1θ, ..., Pmθ, G2θ, ..., Gnθ
Se a cláusula encontrada é um fato F. θ é tal que F θ = G1 θ .
O novo objectivo a provar é agora ? G2θ, ..., Gnθ
A prova termina quando já não há mais nada a provar (o goal é vazio).
O interpretador responde à questão inicial indicando a substituição a
que têm que ser sujeitas as variáveis presentes na questão inicial, para
produzir
seção extraída de Maria J. Frade, Univ. do Minho