PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ BUSCA DE SOLUÇÕES EM PROLOG Resolução em PROLOG: Unificação e substituição 1
UNIFICAÇÃO EM PROLOG HISTÓRICO 2
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 3
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. 4
INTERPRETAÇÃO PROCEDIMENTAL 5
INTERPRETAÇÃO PROCEDIMENTAL DA LÓGICA 6
NEGAÇÃO POR FALHA 7
CLOSED WORLD ASSUMPTION NEGAÇÃO POR FALHA 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). ex075-00-closed-world-assumption.pl % 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). 8
NEGAÇÃO POR FALHA Operador \+ \+ objetivo é satisfeito quando PROLOG não consegue demonstrar o objetivo negação por falha. ex080-00-negacaoporfalha.pl 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 9
UNIFICAÇÃO 10
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. 11
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 12
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. 13
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. 14
PROCESSO DE UNIFICAÇÃO Exemplo de unificação com functor triângulo(ponto(1, 1), A, ponto(2, 3)) triângulo(x, ponto(4, Y), ponto(2, Z)) 1 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 15
UNIFICAÇÃO: UTILIDADE PROLOG pode ser interpretado declarativa, procedimental e operacionalmente. a utilidade da unificação passa por estes conceitos. 16
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) 17
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) 18
UNIFICAÇÃO: UTILIDADE Exemplo, dadas as cláusulas: 1. temfilho(x, Y) :- progenitor(x, Y). 2. progenitor(joao, maria).?temfilho(joao, Z) objetivo G a ser provado Objetivo G unifica com a cabeça de C1 temfilho(joao, Z) :- progenitor(joao, Z) instância de C1 pela unificação X/joao e Y/Z progenitor(joao, Z) é um novo objetivo Progenitor(joao, maria) unifica com progenitor(joao, Z) pela substituição de Z/maria, logo G é verdadeiro quando Z/Maria 19
UNIFICAÇÃO: UTILIDADE Semântica Operacional 20
BUSCA POR SOLUÇÕES 21
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 22
backtracking base de conhecimentos θ = substituição 1. temfilho(x,y) :- progenitor(x,y). 2. progenitor(joao,maria). 3. progenitor(joao,ana).?temfilho(joao,y). objetivo G1 a ser provado EXEMPLO DE ÁRVORE DE BUSCA?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?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/maria maria é uma substituição que satisfaz G2 e G1. θ=y/ana ana é uma substituição que satisfaz G2 e G1. 23
EXEMPLO DE ÁRVORE DE BUSCA?temFilho(joao,Y). Claus. 1: temfilho(x,y) θ=x/joao Claus. 2: progenitor(joao, maria) θ=y/maria progenitor(joao, Y) Claus. 3: progenitor(joao, maria) θ=y/ana progenitor(joao, maria) progenitor(joao, 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). 24
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 25