Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br Lógica para Computação (IF61B) Resolução e PROLOG Passos para obter a forma clausal de uma fbf: 1. Obter a forma normal prenex da fbf: (Forma normal prenex: Q1x1Q2x2...Qnxn (A) , onde Q1x1Q2x2...Qnxn é o prefixo e (A) é a matriz da fbf); A. Eliminar os conectivos e →; B. Colocar as negações () ao lado dos átomos; C. Distinguir as variáveis, se necessário; D. Deslocar os quantificadores para o início da fbf. 2 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) Resolução e PROLOG Eliminar os quantificadores existenciais (skolemização): 2. A. x((x)) é substituído por então ([x:=f(y1,y2...ym)]) onde f é a função de Skolem e y1,y2...ym são as variáveis quantificadas universalmente () que antecedem x; B. Se não houverem tais variáveis x((x)) é substituído por (a), onde a é a constante de Skolem. 3. Eliminar o prefixo da fbf (todos os quantificadores universais); 4. Passar a forma normal conjuntiva, reordenando os conectivos e de forma conveniente. 3 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) Resolução e PROLOG Relação entre um conjunto de fbf e a forma clausal correspondente: Se F = {A1, A2,...,Ap} é um conjunto de fbf e se C = {C1, C2,...,Cm} é a forma clausal correspondente, então F é inconsistente se e só se C é inconsistente. 4 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) Resolução e PROLOG O princípio da resolução: 1. Para fórmulas concretas (sem variáveis) Dadas as cláusulas A1 A2 ... Ap C e B1 B2 ... Bm C então pode-se deduzir a cláusula resolvente A1 A2 ...Ap B1 B2 ... Bm (este caso é similar ao da lógica proposicional). 5 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) Resolução e PROLOG O princípio da resolução: 2. Para fórmulas em geral: Dadas as cláusulas A1 A2 ... Ap C e B1 B2 ... Bm D tais que C e D são unificáveis pela substituição mgu [s] (isto é, se C[s] = D[s]) então pode-se deduzir a cláusula resolvente (A1 A2 ...Ap)[s] (B1 B2 ... Bm)[s]. 6 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) Resolução e PROLOG Propriedades do princípio da resolução: 1. É uma regra de inferência correta, isto é, a cláusula resolvente é conseqüência lógica das cláusulas iniciais; 2. É completo por refutação, isto é, se C é um conjunto inicial de cláusulas, e se C1,C2,...Cn é uma seqüência de cláusulas distintas tais que Cn é a cláusula vazia e se para i de 1 até n-1 a cláusula Ci pertence a C ou é resolvente de cláusulas anteriores na seqüência, então o conjunto inicial C é inconsistente. 7 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) Resolução e PROLOG Sistemas de refutação por resolução: Para provar a dedução A1,A2...,An |- B procede-se da seguinte forma: 1. Monta-se o conjunto {A1,A2...,An , B}; 2. Obtém-se sua forma clausal C; 3. Se C é inconsistente, a dedução é válida. 8 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG Prolog é uma linguagem de programação que se enquadra no paradigma de Programação em Lógica Matemática. É uma linguagem de uso geral que é especialmente associada com a Inteligência Artificial e com a Linguística Computacional. Consiste numa linguagem puramente lógica, que pode ser chamada de Prolog puro, e numa linguagem concreta, a qual acrescenta o Prolog puro com componentes extra-lógicos. 9 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG Wikipedia: http://pt.wikipedia.org/wiki/Prolog Programming in Prolog – William F. Clocksin & Christopher S. Mellish, Springer Verlag, ISBN: 978-3540-15011-4 (Print) 978-3-642-96873-0 (Online) Programação em Lógica e a Linguagem Prolog Marco A. Casanova, Fernando A.C. Giorno, Antonio L. Furtado, http://www.inf.pucrio.br/~casanova/Publications/Books/1987-PL.pdf Resumo de Sheila McIlraith em http://www.cs.toronto.edu/~sheila/324/w07/slides /csc324w07-prolog1-21_4up.pdf 10 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG Obtendo o Prolog: http://www.swi-prolog.org/ Tutoriais no mesmo site; Prolog NÃO é procedural nem funcional; Separa lógica e controle: O programador declara quais fatos e relações são verdadeiros; O sistema determina como usar estes fatos para resolver problemas – ou provar consultas; O sistema também instancia variáveis para resolver os problemas. 11 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG O “programa” – ou base de dados- é constituído de fatos e regras: Fatos: basicamente predicados definidos sobre constantes; exemplos: gato(tom). rato(jerry). Regras: cláusulas de Horn (um único literal positivo), na forma h:-t1,t2...,tn indicando a inferência (t1^t2...^tn -> h), onde os ti e h são fórmulas atômicas; exemplos: não_gosta(X,Y):-gato(X),rato(Y). “:-” corresponde a uma implicação no sentido inverso, e “,” corresponde a uma conjunção. 12 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG Após se carregar - ou consultar – uma base de dados o interpretador Prolog está apto a “responder consultas”, indicando se um fato é o não consequência lógica dos elementos indicados no programa; O interpretador utiliza prova por unificação, resolução, refutação e backtracking; A negação é tratado apenas por falha finita, o que é um limitante da linguagem. 13 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG male(albert). ? male(albert). female(alice). Yes male(edward). ? female(Person). female(victoria). Person=alice ; parent(albert,edward). Person=victoria; parent(victoria,edward). No parent(albert,alice). ? parent(Person,edward). parent(victoria,alice). Person=albert; Person=victoria; No 14 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG ? parent(Person,edward),female(Person). Person=victoria; No Acrescentando-se: sibling(X,Y):-parent(Z,X),parent(Z,Y). ? sibling(albert,victoria). No ? sibling(edward,S). S=edward; S=alice; S=edward, S=alice; ... No 15 Prof. Celso A A Kaestner 29/07/2014 Lógica para Computação (IF61B) A linguagem PROLOG ... To be continued ! 16 Prof. Celso A A Kaestner 29/07/2014