Raciocínio Automatizado

Documentos relacionados
Prof. Dr. Silvio do Lago Pereira

Raciocínio Automatizado

Lógica, Raciocínio Automatizado e Prolog

Fundamentos de Lógica Matemática

Conferência Árvores de resolução SLD

SCC Capítulo 5 Representação de Conhecimento através do Prolog

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur

Lógica Computacional

2. Linguagem de Programação Prolog

Lógica de Primeira Ordem. Capítulo 9

Lógica Proposicional. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Fórmulas da lógica proposicional

Figura: Capa do Livro Russell, S., Norvig, P. Artificial Intelligence A Modern Approach, Prentice-Hall.

SCC Capítulo 2 Lógica de Predicados

UNIDADE ACADÊMICA: Faculdade de

Conhecimento e Raciocínio Agente Lógicos Capítulo 7. Leliane Nunes de Barros

Lógica Computacional

Lógica Proposicional. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Programação Lógica. Programação Lógica PROLOG

Lógica para Computação Primeiro Semestre, Aula 10: Resolução. Prof. Ricardo Dutra da Silva

Aula 8: Tableaux Analíticos

Lógica Computacional (CC2003)

CEFET/RJ Disciplina: Inteligência Artificial Professor: Eduardo Bezerra Lista de exercícios 02

2.5 FORMAS NORMAIS. Forma normal da negação

CEFET/RJ Disciplina: Inteligência Artificial Professor: Eduardo Bezerra Lista de exercícios 01

Descrição do Mundo de Wumpus. Inteligência Artificial

Lógica de Predicados

Inteligência Artificial. Prolog. Aula 2 Introdução (cont.)

INF 1771 Inteligência Artificial

INF 1771 Inteligência Artificial

CURRÍCULO DO CURSO TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO (noturno) [Campus Araranguá] 20171

Inteligência Artificial. Prof. Tiago A. E. Ferreira Aula 15 Agentes que Raciocinam Logicamente

impossível conclusão falso premissas verdadeiro

BUSCA DE SOLUÇÕES EM PROLOG

Indução Matemática. George Darmiton da Cunha Cavalcanti CIn - UFPE

Fundamentos de Lógica Matemática

Lógica de primeira ordem (Capítulo 8 - Russell) Inteligência Artificial

Linguagens de Programação Programação Lógica (Prolog)

Método de Diferenças Finitas

Inteligência Artificial. Sistemas Baseados em Conhecimento. Representação de Conhecimento (continuação)

Fundamentos e prática de Prolog

INF 1771 Inteligência Artificial

Lógica Computacional DCC/FCUP 2017/18

MD Lógica de Proposições Quantificadas Cálculo de Predicados 1

Linguagem Prolog. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Análise I Solução da 1ª Lista de Exercícios

Mecanismos de Raciocínio em Regras de Produção e Algoritmo RETE

Retrocesso e corte. Paradigma de Programação Lógico. Marco A L Barbosa

LÓGICA PARA COMPUTAÇÃO

DIM Resolução e método tableaux DIM / 37

Inteligência Artificial

Lógica Proposicional

Lógica Computacional. Nelma Moreira. Departamento de Ciência de Computadores Faculdade de Ciências, Universidade do Porto

CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG. Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira

Programação em Lógica

Algoritmia e Programação APROG. Algoritmia 1. Lógica Proposicional (Noções Básicas) Nelson Freire (ISEP DEI-APROG 2013/14) 1/12

Programação Lógica. Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel

NHI Lógica Básica (Lógica Clássica de Primeira Ordem)

Inteligência Artificial IA IV. RACIOCÍNIO BASEADO EM REGRAS

Resolver equações: como e para quê? (reflexões e reminiscências)

4 AULA. Regras de Inferência e Regras de Equivalência LIVRO. META: Introduzir algumas regras de inferência e algumas regras de equivalência.

Fórmulas Bem Formadas (wff) Prioridade dos Conectivos. Prioridade dos Conectivos. Semântica do CR. Semântica do CR

Cálculo proposicional

Introdução à Programação em Prolog

Transcrição:

Raciocínio Automatizado Prof. Dr. Silvio do Lago Pereira slago@ime.usp.br 1 Introdução Raciocínio automatizado é uma sub-área da IA que estuda formas de simular racicínio lógico por meio de métodos computacionais. Um dos principais algoritmos para raciocínio dedutivo automatizado, denominado Sld-resolução [3], usa refutação e apresenta as seguintes características: restringe-se à uma classe de fórmulas denominada cláusulas de Horn; emprega resolução e unificação como regras de inferência; adota uma estratégia de busca em profundidade para controlar as inferências; introduz o conceito de predicado computável; introduz o conceito de negação por falha finita. 2 Claúsulas de Horn Cláusulas de Horn [1] são fórmulas da forma φ φ 1,..., φ n, sendo n 0, onde o literal φ é uma conclusão e os literais φ i são premissas. Se n = 0, a cláusula é denominada fato e se n > 0, a cláusula é denominada regra. Uma fórmula da forma φ 1, φ 2,..., φ n é denominada consulta. A cláusula é denominada vazia e denota uma contradição. 2.1 Inferência com cláusulas de Horn Inferências com cláusulas de Horn são realizadas sempre entre uma consulta e um fato ou entre uma consulta e uma regra, sendo que o resultado da inferência, denominado resolvente, é sempre uma consulta ou a clásula vazia. 1 0 caso: se o fato α 0 unifica-se com o primeiro literal da consulta β 1, β 2,..., β n, sob o conjunto de substituições σ, então a resolvente será a consulta β 2,..., β n, onde β i é uma instância de β i, sob a substituição σ; 2 0 caso: se a conclusão da regra α 0 α 1,..., α m unifica-se com o primeiro literal da consulta β 1, β 2,..., β n, sob o conjunto de substituições σ, então a resolvente será a consulta α 1,..., α m, β 2,..., β n, onde α i é uma instância de α i e β i é uma instância de β i, sob a substituição σ. A função unifica(α, β, γ) tenta unificar a cláusula α com a consulta β, resultando na nova consulta γ (que pode ser a cláusula vazia). Caso a unificação seja bem sucedida, essa função devolve verdade; caso contrário, devolve falso.

2 S. L. Pereira 2.2 O algoritmo de busca Sld-Resolução O algoritmo Sld-Resolução [1,2] controla a aplicação da regra de inferência, realizando uma busca em profundidade. Ao derivar a cláusula vazia, o algoritmo apresenta como solução a composição das substituições efetuadas no caminho percorrido até a cláusula vazia e sinaliza. Ao atingir um ponto onde a consulta não pode ser unificada com nenhuma cláusula do programa, o algoritmo sinaliza e tenta retroceder na busca fazendo novas escolhas. Sejam um conjunto de cláusulas de Horn (programa lógico) e β uma consulta. O algoritmo a seguir responde à consulta β com base em : Sld-Resolução(, β) 1 se β é a cláusula vazia ent~ao 2 exiba a composição das substituições efetuadas 3 devolva 4 para cada cláusula α (de cima para baixo) faça 5 se unif ica(α, β, γ) e Sld-Resolução(, γ) = ent~ao 6 devolva 7 devolva Para mostrar como esse algoritmo funciona, apresentamos dois exemplos. Exemplo 1 Seja o programa lógico composto pelas cláusulas a seguir: (1) bebe(ze, pinga) (2) bebe(mane, agua) (3) vivo(mane) (4) saudavel(x) bebe(y, X), vivo(y ) A cláusula (4) de estabelece que uma bebida é saudavel se alguém que a bebe está vivo. Suponha que desejamos descobrir, de acordo com o conhecimento expresso em, quais são as bebidas saudáveis. Para tanto, chamamos o algoritmo Sld-Resolução com a consulta saudavel(r). O algoritmo começa tentando eliminar saudavel(r) da consulta. Ele procura em uma cláusula cuja conclusão possa ser unificada com saudavel(r), encontrando a cláusula (4). Então, aplicando a substituição {X = R} a essa cláusula, o algoritmo obtém a instância saudavel(r) bebe(y, R), vivo(y ) que, combinada com a consulta saudavel(r), produz a resolvente bebe(y, R), vivo(y ). Em seguida, o algoritmo precisa eliminar bebe(y, R) e, para isso, pode usar as cláusulas (1) ou (2) do programa : usando a cláusula (1) sob a substituição {Y = ze, R = pinga}, a consulta é reduzida para vivo(ze); porém, como não há em uma cláusula que possa ser resolvida com essa nova consulta, o algoritmo retrocede na sua escolha e tenta a outra alternativa;

Raciocínio Automatizado 3 saudavel(r) (4)/{X = R} bebe(y, R), vivo(y ) (1)/{Y = ze, R = pinga} vivo(ze) (2)/{Y = mane, R = agua} vivo(mane) (3)/{} Figura 1. Árvore de refutação para a consulta saudavel(r) usando a cláusula (2) sob a substituição {Y = mane, R = agua}, a consulta é reduzida para vivo(mane) que, combinada com a cláusula (3), resulta numa contradição, representada pela cláusula vazia. Quando a cláusula vazia é derivada, o algoritmo apresenta o resultado das unificações realizadas no caminho que levaram a ela (ou seja, R = agua) e finaliza a busca. Esse processo pode ser visualizado na Figura 1, onde a linha tracejada indica o caminho percorrido pelo algoritmo na árvore de refutação para a consulta saudavel(r). Exemplo 2 Seja o programa lógico composto pelas cláusulas a seguir: (1) nasceu(ana, brasil) (2) nasceu(yves, f rance) (3) idioma(brasil, portugues) (4) idioma(f ranca, f rances) (5) estudou(ana, f rances) (6) fala(a, C) nasceu(a, B), idioma(b, C) (7) fala(d, E) estudou(d, E) Para descobrir que idiomas Ana fala, chamamos Sld-Resolução com a consulta fala(ana, R), que pode ser resolvida com as cláusulas (6) e (7): Usando a cláusula (6), sob a substituição {A = ana, C = R}, obtemos a consulta nasceu(ana, B), idioma(b, R). Resolvendo essa nova consulta com a

4 S. L. Pereira cláusula (1), sob a substituição {B = brasil}, obtemos idioma(brasil, R). Finalmente, resolvendo essa última consulta com a cláusula (3), sob a substituição {R = portugues}, obtemos a cláusula vazia. Nesse ponto, o algoritmo apresenta a primeira resposta possível (R = portugues) e retrocede na busca, na tentativa de encontrar uma resposta alternativa. Usando a cláusula (7), sob a substituição {D = ana, E = R}, obtemos a consulta estudou(ana, R). Resolvendo essa nova consulta com a cláusula (5), sob a substituição {R = f rances}, obtemos a cláusula vazia. Nesse ponto, o algoritmo apresenta a segunda resposta possível (R = f rances) e, como não há mais ramos em aberto na árvore de refutação, a busca termina. Para essa consulta, o algoritmo é bem sucedido nos dois ramos explorados na árvore, apresentando R = portugues e R = frances como respostas. Veja como isso faz sentido: declaramos no programa lógico que uma pessoa fala um idioma se ela nasce num país onde se fala esse idioma ou se ela estuda esse idioma. Então, como Ana nasceu no Brasil, o algoritmo conclui que Ana fala português. Além disso, como Ana estudou francês, o algoritmo também conclui que Ana fala francês. Esse processo pode ser visto na Figura 2, onde a linha tracejada indica o caminho percorrido pelo algoritmo na árvore de refutação para a consulta fala(ana, R). (6)/{A = ana, C = R} fala(ana, R) (7)/{D = ana, E = R} nasceu(ana, B), idioma(b, R) estudou(ana, R) (1)/{B = brasil} (5)/{R = frances} (3)/{R = portugues} idioma(brasil, R) Figura 2. Árvore de refutação para a consulta fala(ana, R) O funcionamento de Sld-Resolução para a consulta f ala(yves, R) é apresentado na Figura 3. Como Yves não estudou nenhum idioma, é claro que ele fala apenas francês, que é a sua língua nativa. Portanto, o algoritmo encontra apenas uma resposta para essa consulta (R = f rances).

Raciocínio Automatizado 5 (6)/{A = yves, C = R} fala(yves, R) (7)/{D = yves, E = R} nasceu(yves, B), idioma(b, R) (2)/{B = franca} estudou(yves, R) idioma(franca, R) (4)/{R = frances} Figura 3. Árvore de refutação para a consulta fala(yves, R) Exercício 1 Considere o programa lógico a seguir: (1) gosta(ary, eva) (2) gosta(ivo, ana) (3) gosta(ivo, eva) (4) gosta(eva, ary) (5) gosta(ana, ary) (6) namora(a, B) gosta(a, B), gosta(b, A) Mostre como o algoritmo Sld-Resolução responde às seguintes consultas: Eva namora com Ary? Ivo namora com Ana? Ary namora com quem? Exercício 2 Considere o programa lógico a seguir: (1) pai(adao, cain) (2) pai(adao, abel) (3) pai(adao, seth) (4) pai(seth, enos) (5) avo(x, Z) pai(x, Y ), pai(y, Z) Mostre como o algoritmo Sld-Resolução responde às seguintes consultas: Quem é avô de Enos? Seth é avô de alguém?

6 S. L. Pereira Exercício 3 Mostre que, com base no programa a seguir, o algoritmo Sld- Resolução encontra três respostas para consulta irmao(cain, R). (1) pai(adao, cain) (2) pai(adao, abel) (3) pai(adao, seth) (4) pai(seth, enos) (5) irmao(x, Y ) pai(z, X), pai(z, Y ) 2.3 Predicados computáveis Predicados computáveis [5] são predicados que podem ser avaliados diretamente pelo algoritmo de refutação, sem que haja necessidade de serem definidos no programa lógico. Por exemplo, operadores aritméticos (+,,, /) e relacionais (=,, <,, >, ) são predicados computáveis. Quando um predicado computável é encontrado durante uma refutação, o algoritmo Sld-Resolução sinaliza apenas se a avaliação desse predicado resultar em falso. Exemplo 3 Considere o programa lógico a seguir (que usa o predicado ): (1) pai(adao, cain) (2) pai(adao, abel) (3) pai(adao, seth) (4) irmao(x, Y ) pai(z, X), pai(z, Y ), X Y A árvore de refutação construída para responder à consulta irmao(cain, R), com base em nesse programa, pode ser vista na Figura 4. Observe que o Sld- Resolução sinaliza apenas quando a avaliação do predicado resulta em falso; em todos os outros casos, o algoritmo sinaliza. Exercício 4 Com base no programa lógico a seguir, mostre como o algoritmo Sld-Resolução responde à consulta inf iel(r). gosta(ary, eva) gosta(ivo, eva) gosta(ary, bia) gosta(eva, ary) namora(a, B) gosta(a, B), gosta(b, A) infiel(c) namora(c, D), gosta(c, E), D E 3 Negação por falha finita Para tratar a negação, uma pequena modificação é necessária no algoritmo de refutação: quando o algoritmo encontra um literal negado, ele dispara uma refutação do literal complementar. Se essa refutação sucede, o algoritmo sinaliza ; caso contrário, o algoritmo prossegue com a busca [4].

Raciocínio Automatizado 7 irmao(cain, R) (4)/{X = cain, Y = R} pai(z, cain), pai(z, R), cain R (1)/{Z = adao} (1)/{R = cain} pai(adao, R), cain R (2)/{R = abel} (3)/{R = seth} cain cain cain abel cain seth Figura 4. Árvore de refutação para a consulta irmao(cain, abel) Exemplo 4 A árvore de refutação para responder à consulta voa(r), com base no programa a seguir, é apresentada na Figura 5. (1) ave(fred) (2) ave(bob) (3) pinguim(f red) (4) voa(x) ave(x), pinguim(x) Nessa árvore, retângulos pontilhados representam sub-refutações. Para mostrar que Fred não é um pingüim, o algoritmo tenta mostrar justamente o oposto, ou seja, que Fred é um pingüim. Então, como essa sub-refutação é bem sucedida (devido à cláusula (3) do programa), a refutação inicial fracassa. Por outro lado, quando tenta mostrar que Bob não é um pingüim, a sub-refutação fracassa e, portanto, a refutação inicial é bem sucedida.

8 S. L. Pereira voa(r) (4)/{X = R} (1)/{R = fred} ave(r), pinguim(r) (2)/{R = bob} pinguim(fred) pinguim(bob) pinguim(fred) (3)/{} pinguim(bob) Figura 5. Árvore de refutação para a consulta voa(r) Exercício 5 Um fato interessante é que o predicado computável pode ser implementado através de negação por falha, conforme especificado a seguir: igual(x, X) diferente(x, Y ) igual(x, Y ) Com base nessa especificação, mostre como o algoritmo Sld-Resolução responde às consultas a seguir: (a) dif erente(bola, bola) (b) dif erente(bola, bala). Referências 1. Amble, T. Logic Programming and Knowledge Engineering, Addison-Wesley, 1987. 2. Bratko, I. Prolog - Programming for Artificial Intelligence, Addison-Wesley, 1990. 3. Genesereth, M. R. and Nilsson, N. J. Logical Fundations of Artificial Intelligence, Morgan Kaufmann Publishers, 1988. 4. Reiter, R. On Closed Word Data Bases, In H. Gallaire and J. Minker, Logic and Data Bases, pages 55-76, Plenum Press, NY, 1978. 5. Rich, E. and Knight, K. Inteligência Artificial, 2 a ed., Makron Books, 1995.