Jacques Robin CIn-UFPE O que programao em lgica? Para Bancos de Dados: Linguagem de definio de dados Linguagem de consulta com inferncia embutida Tamborete de dados dedutivo Para Teoria da Computao: Super conjunto no monotnico de um sub-conjunto da lgica dos predicados da 1 a ordem
Para Inteligncia Artificial: Uma linguagem de representao do conhecimento Uma mquina de inferncia dedutiva Para Cincia da Computao: Paradigma unificador trazendo insight entre reas
Para Engenharia de Software: Uma linguagem de especificao formal Uma linguagem de programao de propsito geral
Aplicaes da programao em lgica Inteligncia Artificial Representao do conhecimento Sistemas especialistas Planejamento Aprendizagem de mquina Processamento de linguagem natural Sistemas multi-agente Robtica Matemtica computacional simblica Sistemas Distribudos e Internet Comrcio eletrnico Recuperao, filtragem e extrao de informao Engenharia de Software Prototipagem rpida de software complexos Especificaes formais executveis Programao por resoluo de restries Programao multi-paradigma de alto-nvel Banco de Dados BD dedutivos e dedutivos OO Minerao de Dados e Descoberta de Conhecimento Integrao de Dados e Interoperabilidade O que Prolog? Primeira e mais divulgada linguagem do paradigma da Programao em Lgica (PL) Operacionalizao simples, prtica e eficiente da metfora da PL, embora teoricamente impura Padro ISO Maioria das outras linguagens de PL: So extenses de Prolog Que superam as limitaes de Prolog Surgiu na dcada de 70 Na moda na dcada de 80 (o Java da poca ) Permanece a mquina de inferncia dedutiva mais usada em IA Serve de base a vrias outras mquinas de inferncia: abdutiva, indutiva, resoluo de restries No entanto pouco divulgado e usado na indstria Uso dual de Prolog para sistema inteligente Como formalismo de representao do conhecimento Como linguagem de programao Base de Conhecimento: Fatos e Regras Prolog Maquina de Inferncia: Compilador/ Interpretador Prolog Ask Tell Retract Base de Conhecimento: sentenas em formalismo F Maquina de Inferncia implementando em Prolog raciocnio R em formalismo F Ask Tell Retract Maquina de Inferncia: Compilador/ Interpretador Prolog Reviso da Lgica de Horn Para qualquer frmula da lgica da 1 a ordem, existe uma formula logicamente equivalente em forma normal conjuntiva: p 1 (...,X 1 i ,...) v...v c 1 (...,X 1 k ,...) ..... p n (...,X n j ,...) v... v c m (...,X m l ,...) Lgica de Horn: sub-conjunto da lgica da 1 a ordem restrita a conjunes de clusulas de Horn Clusula de Horn: disjuno de literais com ao mximo um literal positivo Dividas em 3 sub-categorias: Fatos: clusulas de Horn com zero literal negativo c(...,X k ,...) Em forma normal implicativa: T c(...,X k ,...) Regras definidas: clusulas de Horn com exatamente um literal negativo e pelo menos um literal positivo: p 1 (...,X 1 i ,...) v...v p n (...,X n j ,...) v c m (...,X m l ,...) Em forma normal implicativa: p 1 (...,X 1 i ,...) ..... p n (...,X n j ,...) c m (...,X m l ,...) Restries de integridade: clusulas de Horn com zero literal positivo p 1 (...,X 1 i ,...) v...v p n (...,X n j ,...) Em forma normal implicativa: p 1 (...,X 1 i ,...) ..... p n (...,X n j ,...) F Prolog como linguagem de representao do conhecimento para IA Sentenas da base de conhecimento Prolog: Clusula de Horn da 1 a ordem excluindo: Restries de integridade Predicado de igualdade Apenas: Fatos que representam o conhecimento em extenso Regras definidas que representam o conhecimento em inteno
Representao do conhecimento simblico Regras Regras + Lgica Lgica Regras + Procedimentos Classes/Objetos Classes/Objetos + Procedimentos Classes/Objetos + Lgica Regras + Classes/Objetos + Procedimentos Regras + Classes/Objetos + Lgica Procedimentos Provadores de Teoremas Shells de Sistemas Especialistas Sistemas de Produo Programao Imperativa Programao OO Lgicas descritivas Programao em lgica Sistemas de Produo OO Programao em lgica OO Redes Semnticas Frames Prolog como mquina de inferncia para IA Provador de teorema para a sub-conjunto da Implementa: Raciocnio dedutivo dirigido pelo objetivo No monotnico quando BC inclui regras usando com negao por falha nas premissas Usa: Hiptese do mundo fechado Hiptese da unicidade do nome Unificao sem occur-check Encadeamento de regras para trs Com backtracking sistemtico e cronolgico Criao da rvore de prova de cima para baixo em profundidade primeira Hipteses do mundo aberto x fechado Dado uma base de conhecimento lgica B, existem sentenas lgicas S (consultas Ask) tal que nem S, nem S conseqncia lgica de B Exemplo: B = {nibusPara(garanhuns,10:00), nibusPara(salgueiro,12:00)} S = nibusPara(garanhuns,12:00) B |= S e B |= S Resposta a tal consulta depende da hiptese sobre a completude da informao na BC feita pela mquina de inferncia Hiptese de mundo aberto (BC suposta incompleta ): se B |= S e B |= S, ento Ask(S) = unknown utilizada pela lgica clssica (de qualquer ordem) e as lgicas descritivas Hiptese de mundo fechado (BC suposta completa ): se B |= S e B |= S, ento Ask(S) = False utilizada pela programao em lgica, os sistemas de produo e os bancos de dados Hiptese do mundo fechado Concluir Ask(S) = False apenas a partir de B |= S no uma inferncia dedutivamente correta Epistemologicamente: Ask(S) = False concludo a partir de B |= S, mais fraco do que Ask(S) = False derivado a partir de B |= S uma forma limitada de: Abduo Raciocnio por default Raciocnio no montono Maioria da mquinas de inferncia que utilizam a hiptese do mundo fechado: No armazenam fatos negativos nas suas BC, i.e., no h aes Tell(S) Nem so capaz de dedues da forma B |= S, apenas B |= S Hiptese da unicidade do nome Consulta SQL count * from Curso no BD do lado retorna? 4 Traduo em lgica clssica do conhecimento contido na tabela: course(CS,101) . course(CS,102) . course(CS,106) . course(EE,101) ? Quantas respostas retornaria um provador de teorema a consulta Ask(area,number) ? Entre 1 e + ! Porque? Lgica clssica usa a hiptese do mundo aberto, mas no usa a hiptese da unicidade do nome Ento como a traduo acima no contm: (CS = EE) . (101 = 102) . (101 = 106) . (102 = 106) traduo acima no exclui que a conjuno se reduz a um nico literal Traduo correta: c,n (c,n) course(c,n) [d,n] e {[CS,101],[CS,102],[CS,106],[EE,101]} Tabela Curso rea Nmero cs 101 cs 102 cs 106 ee 101 Prolog: sintaxe Igual a lgica da 1 a ordem exceto: Constantes: comeam com letras minsculas, ou quota Variveis: comeam com letras maisculas, _, ou nmeros na BC, todas universalmente quantificadas e de escopo local a uma clusula nas consultas, todas existencialmente quantificadas Fatos da Lgica de Horn T C(...,x k ,...) se escrevam c(...,X k ,...). em Prolog Regras definidas da Lgica de Horn: P 1 (...,x 1 i ,...) ..... P n (...,x n j ,...) C m (...,x m l ,...) se escrevam c(...,X m l ,...) :- p 1 (...,X 1 i ,...), ...,p n (...,X n j ,...). West criminoso? em Prolog Em Lgica de Horn: american(P) . weapon(W) . nation(N) . hostile(N) . sells(P,N,W) criminal(P) owns(nono,m1) missile(m1) 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) Em Prolog: criminal(P) :- american(P), weapon(W), nation(N), hostile(N), sells(P,N,W). owns(nono,m1). missile(m1). 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,m1). missile(m1). 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. american(west)? -> yes. weapon(W)? <- W = m1. missile(W)? -> W = m1. nation(N)? -> N = nono. hostile(nono)? <- yes. enemy(nono,america)? -> yes. sells(west,nono,m1)? <- yes. owns(nono,m1)? -> yes. missile(m1)? -> yes. West criminoso? Encadeamento de regras para trs criminal(P) american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(W) nation(N) hostile(N) sells(west,N,W) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,W) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? yes missile(m1) enemy(nono,america) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso ? backtracking criminal(P) :- american(P), weapon(W), nation(N), hostile(N), sells(P,N,W). owns(nono,m1). missile(m1). 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. american(west)? -> yes. weapon(W)? <- W = m1. missile(W)? -> W = m1. nation(N)? -> N = america. hostile(america)? <- no. enemy(america,america)? -> no. backtrack: nation(N), N \ {america}? -> N = nono. hostile(nono)? <- yes. enemy(nono,america)? -> yes. sells(west,nono,m1)? <- yes. owns(nono,m1)? -> yes. missile(nono,m1)? -> yes. West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(america) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(america) hostile(america) sells(west,america,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(america) hostile(america) sells(west,america,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(america) hostile(america) sells(west,america,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(america) hostile(america) sells(west,america,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) fail West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(america) hostile(america) sells(west,america,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) fail backtrack West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) backtrack West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(N) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(N) sells(west,N,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para trs criminal(west) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) Algoritmo da mquina de inferncia Prolog Tentar unificar termo do objetivo O i corrente com as cabeas das clasulas da BC, na ordem de escritura Seja C a 1 a cabea a se unificar com O i via subsituio u: se C for um fato, devolve: T e u como resultado se C for concluso da regra C :- P 1 , ..., P n , ento: o novo objetivo corrente O i+1 = uP 1
se uP 1 for verdade, ento recursivamente tentar provar uP 2 , ..., uP n
Se nenhuma cabea das clasulas da BC se unifica com O i : devolver F como resultado, e retroceder, buscando uma prova alternativa para O i-1 , o ltimo objetivo provado antes de O i West criminoso? Encadeamento de regras para frente criminal(P) american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(west)? missile(W) enemy(N,america) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para frente criminal(P) american(P) weapon(W) nation(N) hostile(N) sells(P,N,W) criminal(west)? missile(m1) enemy(nono,N) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para frente criminal(P) american(P) weapon(m1) nation(N) hostile(N) sells(P,N,W) criminal(west)? missile(W) enemy(nono,N) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para frente criminal(P) american(P) weapon(m1) nation(N) hostile(N) sells(P,N,W) criminal(west)? missile(m1) enemy(nono,N) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para frente criminal(P) american(P) weapon(m1) nation(N) hostile(nono) sells(P,N,W) criminal(west)? missile(W) owns(nono,W) missile(m1) american(west) nation(nono) nation(america) enemy(nono,N) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para frente criminal(P) american(P) weapon(m1) nation(N) hostile(nono) sells(P,N,W) criminal(west)? missile(m1) owns(nono,m1) missile(m1) american(west) nation(nono) nation(america) enemy(nono,america) owns(nono,m1) sells(west,nono,W) West criminoso? Encadeamento de regras para frente criminal(P) american(P) weapon(m1) nation(N) hostile(nono) sells(P,N,W) criminal(west)? missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para frente criminal(P) american(west) weapon(m1) nation(nono) hostile(nono) sells(west,nono,m1) criminal(west)? missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para frente criminal(west) weapon(m1) hostile(nono) criminal(west)? missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) West criminoso? Encadeamento de regras para frente criminal(west) weapon(m1) hostile(nono) criminal(west)? yes missile(m1) american(west) nation(nono) nation(america) enermy(nono,america) owns(nono,m1) sells(west,nono,m1) Encadeamento de regras para trs e resoluo Encadeamento para trs de Prolog um caso particular de refutao por resoluo para Lgica de Horn Com estratgia de resoluo SLD: D: para clusulas Definidas (fatos e regras definidas) L: Linear de entrada , i.e., a cada passo, resolve (1) uma das clausulas iniciais (base de conhecimento e negao da consulta) com (2) clusula derivada no ltimo passo S: com Funo de seleo escolhendo: Escolhendo clusulas iniciais na ordem de escritura de cima para baixo Escolhendo os literais de cada clusula na ordem de escritura da esquerda para direta A resoluo correta e completa para refutao Prolog ento uma mquina de inferncia correta e completa para a Lgica de Horn? West criminoso? Prova Prolog como refutao com resoluo SLD (american(P) . weapon(W) . nation(N) . hostile(N) . sells(P,N,W) criminal(P)) //1 . (T owns(nono,m1)) //2a . (T missile(m1)) //2b . (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 //10 2. Resolver 10 com 4: weapon(W) . nation(N) . hostile(N) . sells(west,N,W) F //11 3. Resolver 11 com 7: missile(W) . nation(N) . hostile(N) . sells(west,N,W) F //12 4. Resolver 12 com 2b unificando W/m1: nation(N) . hostile(N) . sells(west,N,m1) F //13 5. Resolver 13 com 5 unificando N/nono: hostile(nono) . sells(west,nono,m1) F //14 6. Resolver 14 com 8 unificando N/nono: enemy(nono,america) . sells(west,nono,m1) F //15 7. Resolver 15 com 6: sells(west,nono,m1) F //16 8. Resolver 16 com 3 unificando W/m1: owns(nono,m1) . missile(m1) F //17 9. Resolver 17 com 2a: missile(m1) F //18 10. Resolver 18 com 2b: F Prolog devolve a primeira resposta g1(a). g21(a). g3(a). g4(a). g1(b). g21(b). g22(b). g3(b). g(X) :- g1(X), g2(X). g(X) :- g3(X), g4(X). g2(X) :- g21(X), g22(X). $ prolog ?- consult(g.pl). yes ?- g(U). U = b ?- ; U = a ?- ; no ?- halt. $
Forar o backtracking para obter todas as respostas g1(a). g21(a). g3(a). g4(a). g1(b). g21(b). g22(b). g3(b). g(X) :- g1(X), g2(X). g(X) :- g3(X), g4(X). g2(X) :- g21(X), g22(X). g(U)? <- U = b. g1(U)? -> U = a. g2(a)? <- no. g21(a)? -> yes. g22(a)? -> no. g1(U), U \ {a}? -> U = b. g2(b)? <- yes. g21(b)? -> yes. g22(b)? -> yes. ; g1(U), U \ {a,b} ? -> no. Backtracking em cascatas g1(a). g21(a). g3(a). g4(a). g1(b). g21(b). g22(b). g3(b). g(X) :- g1(X), g2(X). g(X) :- g3(X), g4(X). g2(X) :- g21(X), g22(X). g(U), g \ {g1,g2}? <- U = a. g3(U)? -> U = a. g4(a)? -> yes. ; g3(U), U \ {a}? -> U = b. g4(b)? -> no. g3(U), U \ {a,b}? -> no. g(U), g \ {g1,g2 ; g3,g4}? -> no. Prolog puro: sem atribuio explcita, nem predicado de igualdade Em Prolog, = o operador de unificao explcita: uma consulta lgica que retorno verdadeiro ou falso e potencialmente instncia variveis no um operador de atribuio como na programao imperativa no um predicado de declarao de igualdade como na lgica dos predicados
?- 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 no: 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 Linguagem de especificao formal com semntica declarativa lgica Linguagem de programao de propsito geral em duas camadas: 1. Prolog puro: a semntica formal de cada linha do programa dada pela formula correspondente em lgica da 1 a ordem 2. Predicados extra-lgicos: introduzidos por razes de convenincia Funcionam com efeitos colaterais como na programao imperativa No so bem integrados com o paradigma lgico de Prolog puro Linguagem de scripting no tipado Aspectos de Prolog fora da Lgica Clssica de Horn da 1 a ordem Acrescentados por necessidades prticas de programao Semntica imperativa, funcional, de lgicas no clssicas ou clssicas de ordem superior Negao por falha: not Controle e poda da busca: ! (cut), repeat, ... Entrada/sada: read, write, ... Aritmtica: is, +, -, *, /, =>, <=, ... Modificao dinmica da base de conhecimento: assert, retract Meta-programao: var, =.., name, list Maioria das extenses de Prolog, os substituem por predicados lgicos No entanto, no existe padro para essas extenses Prolog para engenharia de software Permite integrar duas filosofias tradicionalmente opostas de engenharia de software: Mtodos formais, SPIV (Specify Prove Implement Verify) Prototipagem rpido Code first, think after Extreme programming RUDE (Run Understand Debug Edit) Via especificao formal executvel Em Prolog: Implement feito via Prove Prolog para engenharia de software Metfora da programao em lgica para engenharia de software: Programar = apenas declarar axiomas e regras Execuo do programa = construo de prova de teorema Compilador/interpretador = provador de teorema Estrutura de controle (nica) = mecanismo de deduo automtica Disparar execuo do programa = perguntar verdade de um teorema um exemplo de paradigma de programao declarativa Outros paradigmas declarativos: Programao funcional, ex Haskell Programao por resoluo de restries, ex Eclipse Programao por re-escritura, ex XSLT Programador especifica apenas o que fazer Como faz-lo problema do interpretador ou compilador Programao procedimental x programao em lgica 1. Modelagem estrutural 2. Modelagem comportamental 3. Codificar estruturas de dados 4. 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
No h necessidade de 2 e 4 ! Estrutura de controle nica (deduo automtica) embutida no compilador/interpretador usada para todos os problemas !
Prolog: listas [ e ]: incio e fim de lista , separao entre eltos |: separao entre 1o elto e resto da lista acar sinttico para predicado .(Head,Tail) ex.: [a,[b,c],d] acar sinttico para .(a,.(.(b,.(c,[])),.(d,[]))) ?- [a,b,X,p(Y,C)] = [Head|Tail] Head = a, Tail = [b,X,p(Y,C)] ?- [[p(X),[a]],q([b,c])] = [[H|T1]|T2] H = p(X), T1 = [[a]], T2 = [q([b,c])] 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. Programao relacional: vrios usos do mesmo predicado Definia nica: append([],L,L). append([H|T1],L,[H|T2]) :- append(T1,L,T2). Uso como verificador: ?- append([a,b],[c],[a,b,c]). -> yes. ?- append([a,b],[c],[a]). -> no. Uso como instanciador: ?- append([a,b],[c],R). -> R = [a,b,c]. ?- append(H,[c],[a,b,c]). -> H = [a,b]. Uso como resolvedor de restries: ?- append(X,Y,[a,b,c]). -> X = [], Y = [a,b,c] ; -> X = [a], Y = [b,c] ... Uso como enumerador: ?- append(X,Y,Z). -> X = [], Y =[], Z = [] ; -> X = [_], Y = [], Z = [_] ...
Implementa sozinha funcionalidades de 8 mtodos imperativos! Prolog: aritmtica
3 tipos de operadores built-in aritmticos: calculadores (n-rios infixos): +, -, *, /, mod comparadores (binrios infixos): =:=, =\=, <, >, =<, > o atribudor is: Varivel is ExpressoAritmtica Expresso aritmtica: frmula atmica contendo apenas nmeros e calculadores aritmticos todos os argumentos dos calculadores e comparadores devem ser instanciados com expresses aritmticas
Prolog: exemplos de aritmtica 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 aritmtica 2
fac(0,1) :- !. fac(I,O) :- I1 is I - 1, fac(I1,O1), O is I * O1. ?- 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 intil: ! (o Cut) Operador built-in de poda da rvore de prova Logicamente sempre verificado Com efeito colateral de impedir backtracking: na sua esquerda na clusula que ocorre em outras clusulas com a mesma concluso ex: A :- B, C, D. C :- M, N, !, P, Q. C :- R. impede backtracking P -> N permite backtracking N -> M, Q -> P, D -> (R xor Q), (P xor R) -> B R tentado: unicamente se M ou N falha nunca se P ou Q falha Exemplo de Cut sign(X,-1) :- X<0, !. sign(X,0) :- X=0, !. sign(X,1) :- X>0.
Ler/escrever estrutura de dados dificilmente pode ser visto como resultando de uma deduo: E/S no se integre naturalmente no paradigma de PL requer predicados extra-lgicos sem semntica declarativa em L1 Predicados built-in de Prolog para E/S: sempre verificados cumprem sua tarefa por efeitos colaterais no podem ser re-satisfeitos por backtracking
Prolog: entrada/sada 2
Ler e escrever termos: read, write, display. Ler e escrever caracteres: get, get0, put. Formatar a sada legvelmente: nl, tab. Ligar um canal de E/S com a tela ou com arquivos: tell, telling, told, see, seeing, seen . Carregar arquivo fonte no ambiente do interpretador: consult, reconsult ex.: ?- read(X), Z is X + 1, write(Z). 2. 3 X = 2, Z = 3; no ? Prolog para bancos de dados Datalog: Sub-conjunto de Prolog excluindo smbolos de funes, e assim garante decidabilidade da inferncia da 1 a ordem Estende modelo de dados relacional com vises recursivas Fatos datalog de um determinado predicado: tabelas de um BD relacional parte extensionais de um BD dedutivo Regras definidas datalog: vises de um BD relacional parte intencional de um BD dedutivo Mais compacto (e lento) do que BD inteiramente extensionais: Armazena apenas fatos primitivos e freqentemente requisitados vistos como axiomas lgicos Consulta a outros so teoremas a provar Prolog para bancos de dados Mquina de inferncia datalog: Estende processador de consulta com poder da deduo da 1 a ordem um tamborete de dados dedutivo no persistente Consulta ao BD: perguntar verdade de um teorema BD dedutivo: Integra servio de inferncia da 1a ordem Com servios tradicionais de BD: persistncia, gerenciamento de memria secundria, concorrncia e segurana Vrios sistemas acadmico Nenhum comercial depois de 25 anos de pesquisa Vantagens de Prolog Como formalismo de representao do conhecimento Intuitividade das regras com rigor formal da lgica Teoria muito completa sobre semntica, corretude e completude da inferncia, limites de expressividade, complexidade etc. Compiladores muito eficientes Verstil, serve de base para grande maioria dos mecanismos de inferncia da IA Como linguagem de programao Declarativo com semntica formal Conciso Eficiente De nvel suficientemente alto para implementao rpida e concisa de mquinas de inferncia Computacionalmente completo Verstil, serve como linguagem de programao, de script e de definio e consulta de dados Prolog como mquina de inferncia para IA Limitaes: Unificao sem occur-check: Torna a unificao linear no lugar de quadrtica em tempo Faz com que Prolog pode entrar em loop com algumas regras recursivas pela direta com funes Busca em profundidade primeira Torna inferncia econmica em memria Faz com que Prolog pode entrar em loop com regras recursivas pela esquerda Juntos: Inferncia sem garantia de completude nem corretude no caso geral Balano: Imperfeita mas muito eficiente em tempo e memria (competitivo com C sobre vrios benchmark) Maiorias da imperfeies facilmente contornveis com um pouco de experiencia em engenharia do conhecimento em Prolog Limitaes de Prolog Como formalismo de representao do conhecimento Objetos compostos com restries complexas Raciocnio com hiptese do mundo aberto Conhecimento procedimental e numrico Tratamento da incerteza Atualizao da base de conhecimento (Tell e Retract) com semntica declarativa Especificao declarativa de estratgia de busca Como linguagem de programao Recursos muito limitados para: Estruturao de objetos complexos Programao de larga escala Sem recursos para interfaces grfica, programao concorrente e distribuda Baixa integrao com metodologias e ferramentas de desenvolvimento de larga divulgao UML, RUP, Java, XML, .net, web services, BD O-R, etc.
Extenses de Prolog 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 restries, ex, Eclipse PL concorrente, ex, BinProlog PL distribuda, ex, Jinni BD dedutivos, ex, Transaction Logic
Disciplinas: Paradigmas de linguagens computacionais Programao declarativa e banco de dados inteligentes PL com negao explcita PL com disjunes PL abdutiva PL indutiva PL probabilista
Disciplinas: Agentes autnomos e sistemas multiagentes Engenharia do conhecimento e sistemas especialistas Aprendizagem de mquina