Introduo a Programao em Lgica e Prolog Jacques














































































![Prolog: listas E [ e ]: início e fim de lista , separação entre Prolog: listas E [ e ]: início e fim de lista , separação entre](https://slidetodoc.com/presentation_image_h/d9ee6f8e1494484b788d53efeb36da9b/image-79.jpg)
![Programação relacional: vários usos do mesmo predicado E Definiçaõ única: append([], L, L). append([H|T Programação relacional: vários usos do mesmo predicado E Definiçaõ única: append([], L, L). append([H|T](https://slidetodoc.com/presentation_image_h/d9ee6f8e1494484b788d53efeb36da9b/image-80.jpg)













- Slides: 93
Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE
O que é programação em lógica? Para Inteligência Artificial: • Uma linguagem de representação do conhecimento • Uma máquina de inferência dedutiva Para Teoria da Computação: • Super conjunto não monotônico de um sub-conjunto da lógica dos predicados da 1 a ordem Para Ciência da Computação: • Paradigma unificador trazendo insight entre áreas Para Bancos de Dados: • Linguagem de definição de dados • Linguagem de consulta com inferência embutida • Tamborete de dados dedutivo Para Engenharia de Software: • Uma linguagem de especificação formal • Uma linguagem de programação de propósito geral
Aplicações da programação em lógica E Inteligência Artificial Representação do conhecimento Sistemas especialistas Planejamento Aprendizagem de máquina Processamento de linguagem natural E Sistemas multi-agente E Robótica E Matemática computacional simbólica E E E Sistemas Distribuídos e Internet E Comércio eletrônico E Recuperação, filtragem e extração de informação E Engenharia de Software E Prototipagem rápida de software complexos E Especificações formais executáveis E Programação por resolução de restrições E Programação multi-paradigma de alto-nível E Banco de Dados E BD dedutivos e dedutivos OO E Mineração de Dados e Descoberta de Conhecimento E Integração de Dados e Interoperabilidade
O que é Prolog? E Primeira e mais divulgada linguagem do paradigma da Programação em Lógica (PL) E Operacionalização simples, prática e eficiente da metáfora da PL, embora teoricamente impura E Padrão ISO E Maioria das outras linguagens de PL: E São extensões de Prolog E Que superam as limitações de Prolog Surgiu na década de 70 Na moda na década de 80 (o Java da época ) Permanece a máquina de inferência dedutiva mais usada em IA Serve de base a várias outras máquinas de inferência: abdutiva, indutiva, resolução de restrições E No entanto pouco divulgado e usado na indústria E E
Uso dual de Prolog para sistema inteligente E Como formalismo de representação do conhecimento Maquina de Ask Base de Inferência: Conhecimento: Compilador/ Tell Fatos e Regras Interpretador Prolog Retract Prolog E Como linguagem de programação Maquina de Ask Inferência Base de implementando Conhecimento: em Prolog Tell sentenças em raciocínio R formalismo F Retract em formalismo F Maquina de Inferência: Compilador/ Interpretador Prolog
Revisão da Lógica de Horn E Para qualquer fórmula da lógica da 1 a ordem, existe uma formula logicamente equivalente em forma normal conjuntiva: p 1(. . . , X 1 i, . . . ) . . . c 1(. . . , X 1 k, . . . ) . . . pn(. . . , Xnj, . . . ) . . . cm(. . . , Xml, . . . ) E Lógica de Horn: sub-conjunto da lógica da 1 a ordem restrita a conjunções de cláusulas de Horn E Cláusula de Horn: disjunção de literais com ao máximo um literal positivo E Dividas em 3 sub-categorias: E Fatos: cláusulas de Horn com zero literal negativo c(. . . , Xk, . . . ) Em forma normal implicativa: T c(. . . , Xk, . . . ) E Regras definidas: cláusulas de Horn com exatamente um literal negativo e pelo menos um literal positivo: p 1(. . . , X 1 i, . . . ) . . . pn(. . . , Xnj, . . . ) cm(. . . , Xml, . . . ) Em forma normal implicativa: p 1(. . . , X 1 i, . . . ) . . . pn(. . . , Xnj, . . . ) cm(. . . , Xml, . . . ) E Restrições de integridade: cláusulas de Horn com zero literal positivo p 1(. . . , X 1 i, . . . ) . . . pn(. . . , Xnj, . . . ) Em forma normal implicativa: p 1(. . . , X 1 i, . . . ) . . . pn(. . . , Xnj, . . . ) F
Prolog como linguagem de representação do conhecimento para IA E Sentenças da base de conhecimento Prolog: E Cláusula de Horn da 1 a ordem excluindo: E Restrições de integridade E Predicado de igualdade E Apenas: E Fatos que representam o conhecimento em extensão E Regras definidas que representam o conhecimento em intenção
Representação do conhecimento simbólico Procedimentos Programação Imperativa Lógica Provadores de Teoremas Regras Shells de Sistemas Especialistas Classes/Objetos Redes Semânticas Classes/Objetos + Procedimentos Programação OO Frames Classes/Objetos + Lógicas descritivas Regras + Procedimentos Sistemas de Produção Regras + Classes/Objetos + Procedimentos Sistemas de Produção OO Regras + Lógica Programação em lógica Regras + Classes/Objetos + Lógica Programação em lógica OO
Prolog como máquina de inferência para IA E Provador de teorema para a sub-conjunto da Implementa: E Raciocínio dedutivo dirigido pelo objetivo E Não monotônico quando BC inclui regras usando com negação por falha nas premissas E Usa: E E E Hipótese do mundo fechado Hipótese da unicidade do nome Unificação sem occur-check Encadeamento de regras para trás Com backtracking sistemático e cronológico Criação da árvore de prova de cima para baixo em profundidade primeira
Hipóteses do mundo aberto x fechado E Dado uma base de conhecimento lógica B, existem sentenças lógicas S (consultas Ask) tal que nem S, nem S é conseqüência lógica de B E Exemplo: B = {ônibus. Para(garanhuns, 10: 00), ônibus. Para(salgueiro, 12: 00)} S = ônibus. Para(garanhuns, 12: 00) B | S e B | S E Resposta a tal consulta depende da hipótese sobre a completude da informação na BC feita pela máquina de inferência E Hipótese de mundo aberto (BC suposta incompleta ): E se B | S e B | S, então Ask(S) = unknown E utilizada pela lógica clássica (de qualquer ordem) e as lógicas descritivas E Hipótese de mundo fechado (BC suposta completa ): E se B | S e B | S, então Ask(S) = False E utilizada pela programação em lógica, os sistemas de produção e os bancos de dados
Hipótese do mundo fechado E Concluir Ask(S) = False apenas a partir de B | S não é uma inferência dedutivamente correta E Epistemologicamente: E Ask(S) = False concluído a partir de B | S, E é mais fraco do que Ask(S) = False derivado a partir de B | S E É uma forma limitada de: E Abdução E Raciocínio por default E Raciocínio não monótono E Maioria da máquinas de inferência que utilizam a hipótese do mundo fechado: E Não armazenam fatos negativos nas suas BC, i. e. , não há ações Tell( S) E Nem são capaz de deduções da forma B | S, apenas B | S
Hipótese da unicidade do nome E Consulta SQL count * from Curso no BD do lado retorna? E 4 E Tradução em lógica clássica do conhecimento contido na tabela: Tabela Curso Área Número cs 101 cs 102 cs 106 ee 101 E course(CS, 101) course(CS, 102) course(CS, 106) course(EE, 101) ? E Quantas respostas retornaria um provador de teorema a consulta Ask(area, number) ? E Entre 1 e + ! Porque? E Lógica clássica usa a hipótese do mundo aberto, mas não usa a hipótese da unicidade do nome E Então como a tradução acima não contém: E (CS = EE) (101 = 102) (101 = 106) (102 = 106) E tradução acima não exclui que a conjunção se reduz a um único literal E Tradução correta: E c, n (c, n) course(c, n) [d, n] {[CS, 101], [CS, 102], [CS, 106], [EE, 101]}
Prolog: sintaxe E Igual a lógica da 1 a ordem exceto: E Constantes: começam com letras minúsculas, ou quota ´ E Variáveis: E começam com letras maiúsculas, _, ou números E na BC, todas universalmente quantificadas e de escopo local a uma cláusula E nas consultas, todas existencialmente quantificadas E Fatos da Lógica de Horn T C(. . . , xk, . . . ) se escrevam c(. . . , Xk, . . . ). em Prolog E Regras definidas da Lógica de Horn: P 1(. . . , x 1 i, . . . ) . . . Pn(. . . , xnj, . . . ) Cm(. . . , xml, . . . ) se escrevam c(. . . , Xml, . . . ) : - p 1(. . . , X 1 i, . . . ), . . . , pn(. . . , Xnj, . . . ).
West é criminoso? em Prolog E Em Lógica de Horn: american(P) weapon(W) nation(N) hostile(N) sells(P, N, W) criminal(P) owns(nono, m 1) missile(m 1) owns(nono, W) missile(W) sells(west, nono, W) missile(W) weapon(W) enemy(N, america) hostile(N) american(west) nation(nono) enemy(nono, america) nation(america) E Em Prolog: criminal(P) : - american(P), weapon(W), nation(N), hostile(N), sells(P, N, W). owns(nono, m 1). missile(m 1). sells(west, nono, W) : - owns(nono, W), missile(W). weapon(W) : - missile(W). hostile(N) : - enemy(N, america). american(west). nation(nono). enemy(nono, america). nation(america).
West é criminoso? busca criminal(P) : - american(P), weapon(W), nation(N), hostile(N), sells(P, N, W). owns(nono, m 1). missile(m 1). sells(west, nono, W) : - owns(nono, W), missile(W). weapon(W) : - missile(W). hostile(N) : - enemy(N, america). american(west). nation(nono). enemy(nono, america). nation(america). criminal(west)? <- yes. Eamerican(west)? -> yes. Eweapon(W)? <- W = m 1. Emissile(W)? -> W = m 1. Enation(N)? -> N = nono. Ehostile(nono)? <- yes. Eenemy(nono, america)? -> yes. Esells(west, nono, m 1)? <- yes. Eowns(nono, m 1)? -> yes. Emissile(m 1)? -> yes.
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(P) american(P) weapon(W) nation(N) hostile(N) sells(P, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(P) weapon(W) nation(N) hostile(N) sells(P, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west, N, W) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) hostile(N) sells(west, N, W) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) nation(america) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) nation(america) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? yes criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, america) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso ? backtracking criminal(P) : - american(P), weapon(W), nation(N), hostile(N), sells(P, N, W). owns(nono, m 1). missile(m 1). sells(west, nono, W) : - owns(nono, W), missile(W). weapon(W) : - missile(W). hostile(N) : - enemy(N, america). american(west). nation(america). enemy(nono, america). nation(nono). criminal(west)? <- yes. Eamerican(west)? -> yes. Eweapon(W)? <- W = m 1. Emissile(W)? -> W = m 1. Enation(N)? -> N = america. Ehostile(america)? <- no. Eenemy(america, america)? -> no. Ebacktrack: nation(N), N {america}? -> N = nono. Ehostile(nono)? <- yes. Eenemy(nono, america)? -> yes. Esells(west, nono, m 1)? <- yes. Eowns(nono, m 1)? -> yes. Emissile(nono, m 1)? -> yes.
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(america) nation(nono) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(america) nation(nono) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(america) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(america) nation(nono) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(america) hostile(america) sells(west, america, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(america) hostile(america) sells(west, america, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(america) hostile(america) sells(west, america, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(america) hostile(america) sells(west, america, m 1) sells(west, nono, W) missile(m 1) enemy(N, america) owns(nono, W) fail american(west) missile(m 1) nation(america) nation(nono) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(america) hostile(america) sells(west, america, m 1) sells(west, nono, W) backtrack missile(m 1) enemy(N, america) owns(nono, W) fail american(west) missile(m 1) nation(america) nation(nono) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) backtrack hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(N) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(N) sells(west, N, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) enermy(nono, america) owns(nono, W) owns(nono, m 1)
West é criminoso? Encadeamento de regras para trás criminal(west)? criminal(west) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) sells(west, nono, W) missile(m 1) american(west) missile(m 1) enemy(N, america) nation(nono) enermy(nono, america) owns(nono, W) owns(nono, m 1)
Algoritmo da máquina de inferência Prolog E Tentar unificar termo do objetivo Oi corrente com as cabeças das claúsulas da BC, na ordem de escritura E Seja C a 1 a cabeça a se unificar com Oi via subsituição : E se C for um fato, devolve: T e como resultado E se C for conclusão da regra C : - P 1, . . . , Pn, então: E o novo objetivo corrente Oi+1 = P 1 E se P 1 for verdade, então recursivamente tentar provar P 2, . . . , Pn E Se nenhuma cabeça das claúsulas da BC se unifica com Oi: E devolver F como resultado, e E retroceder, buscando uma prova alternativa para Oi-1, o último objetivo provado antes de Oi
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(P) weapon(W) nation(N) hostile(N) sells(P, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(N, america) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(P) weapon(W) nation(N) hostile(N) sells(P, N, W) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, N) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(P) weapon(m 1) nation(N) hostile(N) sells(P, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, N) owns(nono, W) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(P) weapon(m 1) nation(N) hostile(N) sells(P, N, W) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) enemy(nono, N) owns(nono, m 1) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(P) weapon(m 1) nation(N) hostile(nono) sells(P, N, W) sells(west, nono, W) missile(W) american(west) missile(m 1) nation(nono) nation(america) owns(nono, W) enemy(nono, N) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(P) weapon(m 1) nation(N) hostile(nono) sells(P, N, W) sells(west, nono, W) missile(m 1) american(west) missile(m 1) nation(nono) nation(america) owns(nono, m 1) enemy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(P) weapon(m 1) nation(N) hostile(nono) sells(P, N, W) sells(west, nono, m 1) american(west) missile(m 1) nation(nono) nation(america) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(P) american(west) weapon(m 1) nation(nono) hostile(nono) sells(west, nono, m 1) american(west) missile(m 1) nation(nono) nation(america) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? criminal(west) weapon(m 1) hostile(nono) sells(west, nono, m 1) american(west) missile(m 1) nation(nono) nation(america) enermy(nono, america) owns(nono, m 1)
West é criminoso? Encadeamento de regras para frente criminal(west)? yes criminal(west) weapon(m 1) hostile(nono) sells(west, nono, m 1) american(west) missile(m 1) nation(nono) nation(america) enermy(nono, america) owns(nono, m 1)
Encadeamento de regras para trás e resolução E Encadeamento para trás de Prolog é um caso particular de refutação por resolução para Lógica de Horn E Com estratégia de resolução SLD: E D: para cláusulas Definidas (fatos e regras definidas) E L: Linear de entrada , i. e. , a cada passo, resolve (1) uma das clausulas iniciais (base de conhecimento e negação da consulta) com (2) cláusula derivada no último passo E S: com Função de seleção escolhendo: E Escolhendo cláusulas iniciais na ordem de escritura de cima para baixo E Escolhendo os literais de cada cláusula na ordem de escritura da esquerda para direta E A resolução é correta e completa para refutação E Prolog então é uma máquina de inferência correta e completa para a Lógica de Horn?
West é criminoso? Prova Prolog como refutação com resolução SLD (american(P) weapon(W) nation(N) hostile(N) sells(P, N, W) criminal(P)) //1 (T owns(nono, m 1)) //2 a (T missile(m 1)) //2 b (owns(nono, W) missile(W) sells(west, nono, W)) //3 (T american(west)) //4 (T nation(nono)) //5 (T enemy(nono, america)) //6 (missile(W) weapon(W)) //7 (enemy(N, america) hostile(N)) //8 (T nation(america)) //9 (criminal(west) F) //0 1. Resolver 0 com 1 unificando P/west: american(west) weapon(W) nation(N) hostile(N) sells(west, N, W) F 2. Resolver 10 com 4: weapon(W) nation(N) hostile(N) sells(west, N, W) F 3. Resolver 11 com 7: missile(W) nation(N) hostile(N) sells(west, N, W) F 4. Resolver 12 com 2 b unificando W/m 1: nation(N) hostile(N) sells(west, N, m 1) F 5. Resolver 13 com 5 unificando N/nono: hostile(nono) sells(west, nono, m 1) F 6. Resolver 14 com 8 unificando N/nono: enemy(nono, america) sells(west, nono, m 1) F 7. Resolver 15 com 6: sells(west, nono, m 1) F 8. Resolver 16 com 3 unificando W/m 1: owns(nono, m 1) missile(m 1) F 9. Resolver 17 com 2 a: missile(m 1) F 10. Resolver 18 com 2 b: F //10 //11 //12 //13 //14 //15 //16 //17 //18
Prolog devolve a primeira resposta g 1(a). g 21(a). g 3(a). g 4(a). g 1(b). g 22(b). g 3(b). g(X) : - g 1(X), g 2(X). g(X) : - g 3(X), g 4(X). g 2(X) : - g 21(X), g 22(X). $ prolog ? - consult(“g. pl”). yes ? - g(U). U=b ? - ; U=a ? - ; no ? - halt. $
Forçar o backtracking para obter todas as respostas g 1(a). g 21(a). g 3(a). g 4(a). g 1(b). g 22(b). g 3(b). g(X) : - g 1(X), g 2(X). g(X) : - g 3(X), g 4(X). g 2(X) : - g 21(X), g 22(X). g(U)? <- U = b. E g 1(U)? -> U = a. E g 2(a)? <- no. E g 21(a)? -> yes. E g 22(a)? -> no. E g 1(U), U {a}? -> U = b. E g 2(b)? <- yes. E g 21(b)? -> yes. E g 22(b)? -> yes. ; E g 1(U), U {a, b} ? -> no.
Backtracking em cascatas g 1(a). g 21(a). g 3(a). g 4(a). g 1(b). g 22(b). g 3(b). g(X) : - g 1(X), g 2(X). g(X) : - g 3(X), g 4(X). g 2(X) : - g 21(X), g 22(X). g(U), g {g 1, g 2}? <- U = a. E g 3(U)? -> U = a. E g 4(a)? -> yes. ; E g 3(U), U {a}? -> U = b. E g 4(b)? -> no. E g 3(U), U {a, b}? -> no. g(U), g {g 1, g 2 ; g 3, g 4}? -> no.
Prolog puro: sem atribuição explícita, nem predicado de igualdade E Em Prolog, = é o operador de unificação explícita: E é uma consulta lógica que retorno verdadeiro ou falso e potencialmente instância variáveis E não é um operador de atribuição como na programação imperativa E não é um predicado de declaração de igualdade como na lógica dos predicados E ? - geber = senior -> no. ? - prof(X, disc(Y, dept(di, ufpe))) = prof(geber, disc(ia, Z)). -> X = geber, Y = ia, Z = dept(di, ufpe). prof(ia, di, ufpe, geber). musico(senior). ? - geber = senior, prof(ia, di, ufpe, X), musico(X). -> no. e não: X = geber = senior. prof(ia, di, ufpe, pessoa(geber, _). musico(pessoa(_, senior)). pessoa(geber, senior). ? - prof(ia, di, ufpe, X), musico(X). -> X = pessoa(geber, senior).
Prolog para engenharia de software E Linguagem de especificação formal com semântica declarativa lógica E Linguagem de programação de propósito geral em duas camadas: 1. Prolog puro: a semântica formal de cada linha do programa é dada pela formula correspondente em lógica da 1 a ordem 2. Predicados extra-lógicos: introduzidos por razões de conveniência E Funcionam com efeitos colaterais como na programação imperativa E Não são bem integrados com o paradigma lógico de Prolog puro E Linguagem de scripting não tipado
Aspectos de Prolog fora da Lógica Clássica de Horn da 1 a ordem E Acrescentados por necessidades práticas de programação E Semântica imperativa, funcional, de lógicas não clássicas ou clássicas de ordem superior E E E Negação por falha: not Controle e poda da busca: ! (cut), repeat, . . . Entrada/saída: read, write, . . . Aritmética: is, +, -, *, /, =>, <=, . . . Modificação dinâmica da base de conhecimento: assert, retract Meta-programação: var, =. . , name, list E Maioria das extensões de Prolog, os substituem por predicados lógicos E No entanto, não existe padrão para essas extensões
Prolog para engenharia de software E Permite integrar duas filosofias tradicionalmente opostas de engenharia de software: E Métodos formais, SPIV (Specify Prove Implement Verify) Verify E Prototipagem rápido E Code first, think after E Extreme programming E RUDE (Run Understand Debug Edit) E Via especificação formal executável E Em Prolog: Implement é feito via Prove
Prolog para engenharia de software E Metáfora da programação em lógica para engenharia de software: E E E Programar = apenas declarar axiomas e regras Execução do programa = construção de prova de teorema Compilador/interpretador = provador de teorema Estrutura de controle (única) = mecanismo de dedução automática Disparar execução do programa = perguntar verdade de um teorema E É um exemplo de paradigma de programação declarativa E Outros paradigmas declarativos: E Programação funcional, ex Haskell E Programação por resolução de restrições, ex Eclipse E Programação por re-escritura, ex XSLT E Programador especifica apenas o que fazer E Como fazê-lo é problema do interpretador ou compilador
Programação procedimental x programação em lógica 1. 2. 3. 4. Modelagem estrutural Modelagem comportamental Codificar estruturas de dados Codificar passo a passo estruturas de controle 5. Compilar/interpretar programa 6. Executar programa A. Declarar o que é verdade (fatos e regras) B. Compilar/interpretar programa C. Fazer consulta sobre verdade de um fato A = 1+3 C=6 E Não há necessidade de 2 e 4 ! E Estrutura de controle única (dedução automática) embutida no compilador/interpretador usada para todos os problemas !
Prolog: listas E [ e ]: início e fim de lista , separação entre eltos |: separação entre 1 o elto e resto da lista açúcar sintático para predicado. (Head, Tail) ex. : [a, [b, c], d] açúcar sintático para. (a, . (. (b, . (c, [])), . (d, []))) E ? - [a, b, X, p(Y, C)] = [Head|Tail] Head = a, Tail = [b, X, p(Y, C)] ? - [[p(X), [a]], q([b, c])] = [[H|T 1]|T 2] H = p(X), T 1 = [[a]], T 2 = [q([b, c])] E member(X, [X|_]). member(X, [_|Z]) : - member(X, Z). ? - member(b, [a, b, c]) -> yes. ? - member(X, [a, b, c]) -> X = a ; X = b ; X = c ; no.
Programação relacional: vários usos do mesmo predicado E Definiçaõ única: append([], L, L). append([H|T 1], L, [H|T 2]) : - append(T 1, L, T 2). E Uso como verificador: ? - append([a, b], [c], [a, b, c]). -> yes. ? - append([a, b], [c], [a]). -> no. E Uso como instanciador: ? - append([a, b], [c], R). -> R = [a, b, c]. ? - append(H, [c], [a, b, c]). -> H = [a, b]. E Uso como resolvedor de restrições: ? - append(X, Y, [a, b, c]). -> X = [], Y = [a, b, c] ; -> X = [a], Y = [b, c]. . . E Uso como enumerador: ? - append(X, Y, Z). -> X = [], Y =[], Z = [] ; -> X = [_], Y = [], Z = [_]. . . E Implementa sozinha funcionalidades de 8 métodos imperativos!
Prolog: aritmética E 3 tipos de operadores built-in aritméticos: E calculadores (n-ários infixos): +, -, *, /, mod E comparadores (binários infixos): =: =, ==, <, >, =<, > E o atribuídor is: Variável is Expressão. Aritmética E Expressão aritmética: E fórmula atômica contendo apenas números e calculadores aritméticos E todos os argumentos dos calculadores e comparadores devem ser instanciados com expressões aritméticas
Prolog: exemplos de aritmética 1 > ? - 1 + 1 < 1 + 2. yes > ? - 1 + 3 =: = 2 + 2. yes > ? - 1 + 3 = 2 + 2. no > ? - 1 + A = B + 2. A=2 B=1 > ? - 1 + A =: = B + 2. Error > ? - A = 2, B = 1, 1 + A =: = B + 2. A=2 B=1 > ? - C = 1 + 2. C = 1+2 > ? - C == 1 + 2. no > ? - C is 1 + 2. C=3 > ? - C is D, D = 1 + 2. Error. > ? - D = 1 + 2, C is D. D=1+2 C=3 > ? - -1+2 = +(-(1), 2). no > ? - -1+2 =: = +(-(1), 2). yes
Prolog: exemplos de aritmética 2 fac(0, 1) : - !. fac(I, O) : - I 1 is I - 1, fac(I 1, O 1), O is I * O 1. ? - fac(1, X). X=1 ? - fac(3, X). X=6 ? - fac(5, X). X = 120 sum([], 0). sum([H|T], N) : - sum(T, M), N is H + M. ? - sum([2, 1, 3, 1], S). S=7 ? - sum([2, 10, 1], S). S = 13
Evitar backtracking inútil: ! (o Cut) E Operador built-in de poda da árvore de prova E Logicamente sempre verificado E Com efeito colateral de impedir backtracking: E na sua esquerda na cláusula que ocorre E em outras cláusulas com a mesma conclusão E ex: A : - B, C, D. C : - M, N, !, P, Q. C : - R. E impede backtracking P -> N E permite backtracking N -> M, Q -> P, D -> (R xor Q), (P xor R) -> B E R tentado: E unicamente se M ou N falha E nunca se P ou Q falha
Exemplo de Cut sign(-2, Y) Y=-1 Y=1 -2 < 0, ! -2=0, ! -2 > 0 ! fail sign(X, -1) : - X<0, !. sign(X, 0) : - X=0, !. sign(X, 1) : - X>0. ? - sign(-2, Y). Y=-1 yes ? - sign(0, Y). Y=0 yes Sub-árvore podada sign(0, Y) Y=-1 Y=0 Y=1 0 < 0, ! 0=0, ! 0>0 fail ! fail yes Sub-árvore podada
Prolog: entrada/saída 1 E Ler/escrever estrutura de dados dificilmente pode ser visto como resultando de uma dedução: E E/S não se integre naturalmente no paradigma de PL E requer predicados extra-lógicos semântica declarativa em L 1 E Predicados built-in de Prolog para E/S: E sempre verificados E cumprem sua tarefa por efeitos colaterais E não podem ser re-satisfeitos por backtracking
Prolog: entrada/saída 2 Ler e escrever termos: read, write, display. Ler e escrever caracteres: get, get 0, put. Formatar a saída legívelmente: nl, tab. Ligar um canal de E/S com a tela ou com arquivos: tell, telling, told, seeing, seen. E Carregar arquivo fonte no ambiente do interpretador: consult, reconsult E ex. : ? - read(X), Z is X + 1, write(Z). E E 2. 3 X = 2, Z = 3; no ?
Prolog para bancos de dados E Datalog: E Sub-conjunto de Prolog excluindo símbolos de funções, e assim garante decidabilidade da inferência da 1 a ordem E Estende modelo de dados relacional com visões recursivas E Fatos datalog de um determinado predicado: E tabelas de um BD relacional E parte extensionais de um BD dedutivo E Regras definidas datalog: E visões de um BD relacional E parte intencional de um BD dedutivo E Mais compacto (e lento) do que BD inteiramente extensionais: E Armazena apenas fatos primitivos e freqüentemente requisitados vistos como axiomas lógicos E Consulta a outros são teoremas a provar
Prolog para bancos de dados E Máquina de inferência datalog: E Estende processador de consulta com poder da dedução da 1 a ordem E É um tamborete de dados dedutivo não persistente E Consulta ao BD: perguntar verdade de um teorema E BD dedutivo: E Integra serviço de inferência da 1 a ordem E Com serviços tradicionais de BD: persistência, gerenciamento de memória secundária, concorrência e segurança E Vários sistemas acadêmico E Nenhum comercial depois de 25 anos de pesquisa
Vantagens de Prolog E Como formalismo de representação do conhecimento E Intuitividade das regras com rigor formal da lógica E Teoria muito completa sobre semântica, corretude e completude da inferência, limites de expressividade, complexidade etc. E Compiladores muito eficientes E Versátil, serve de base para grande maioria dos mecanismos de inferência da IA E Como linguagem de programação Declarativo com semântica formal Conciso Eficiente De nível suficientemente alto para implementação rápida e concisa de máquinas de inferência E Computacionalmente completo E Versátil, serve como linguagem de programação, de script e de definição e consulta de dados E E
Prolog como máquina de inferência para IA E Limitações: E Unificação sem occur-check: E Torna a unificação linear no lugar de quadrática em tempo E Faz com que Prolog pode entrar em loop com algumas regras recursivas pela direta com funções E Busca em profundidade primeira E Torna inferência econômica em memória E Faz com que Prolog pode entrar em loop com regras recursivas pela esquerda E Juntos: E Inferência sem garantia de completude nem corretude no caso geral E Balanço: E Imperfeita mas muito eficiente em tempo e memória (competitivo com C sobre vários benchmark) E Maiorias da imperfeições facilmente contornáveis com um pouco de experiencia em engenharia do conhecimento em Prolog
Limitações de Prolog E Como formalismo de representação do conhecimento E Objetos compostos com restrições complexas E Raciocínio com hipótese do mundo aberto E Conhecimento procedimental e numérico E Tratamento da incerteza E Atualização da base de conhecimento (Tell e Retract) com semântica declarativa E Especificação declarativa de estratégia de busca E Como linguagem de programação E Recursos muito limitados para: E Estruturação de objetos complexos E Programação de larga escala E Sem recursos para interfaces gráfica, programação concorrente e distribuída E Baixa integração com metodologias e ferramentas de desenvolvimento de larga divulgação E UML, RUP, Java, XML, . net, web services, BD O-R, etc.
Extensões de Prolog E E E E E PL tabelada, ex, XSB PL tipada, ex, Mercury PL funcional, ex, -Prolog PL de ordem superior, ex, Hilog PL orientada a objetos, ex, F-Logic PL multi-paradigma, ex, LIFE PL com restrições, ex, Eclipse PL concorrente, ex, Bin. Prolog PL distribuída, ex, Jinni BD dedutivos, ex, Transaction Logic E Disciplinas: E Paradigmas de linguagens computacionais E Programação declarativa e banco de dados inteligentes E E E PL com negação explícita PL com disjunções PL abdutiva PL indutiva PL probabilista E Disciplinas: E Agentes autônomos e sistemas multiagentes E Engenharia do conhecimento e sistemas especialistas E Aprendizagem de máquina





























































































