A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE.

Apresentações semelhantes


Apresentação em tema: "Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE."— Transcrição da apresentação:

1 Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE

2 O que é programação em lógica? Para Bancos de Dados: Linguagem de definição de dados Linguagem de consulta com inferência embutida Tamborete de dados dedutivo 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 Inteligência Artificial: Uma linguagem de representação do conhecimento Uma máquina de inferência dedutiva Para Ciência da Computação: Paradigma unificador trazendo insight entre áreas Para Engenharia de Software: Uma linguagem de especificação formal Uma linguagem de programação de propósito geral

3 Aplicações da programação em lógica  Inteligência Artificial  Representação do conhecimento  Sistemas especialistas  Planejamento  Aprendizagem de máquina  Processamento de linguagem natural  Sistemas multi-agente  Robótica  Matemática computacional simbólica  Sistemas Distribuídos e Internet  Comércio eletrônico  Recuperação, filtragem e extração de informação  Engenharia de Software  Prototipagem rápida de software complexos  Especificações formais executáveis  Programação por resolução de restrições  Programação multi-paradigma de alto-nível  Banco de Dados  BD dedutivos e dedutivos OO  Mineração de Dados e Descoberta de Conhecimento  Integração de Dados e Interoperabilidade

4 O que é Prolog?  Primeira e mais divulgada linguagem do paradigma da Programação em Lógica (PL)  Operacionalização simples, prática e eficiente da metáfora da PL, embora teoricamente impura  Padrão ISO  Maioria das outras linguagens de PL:  São extensões de Prolog  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  No entanto pouco divulgado e usado na indústria

5 Uso dual de Prolog para sistema inteligente  Como formalismo de representação do conhecimento  Como linguagem de programação Base de Conhecimento: Fatos e Regras Prolog Maquina de Inferência: Compilador/ Interpretador Prolog Ask Tell Retract Base de Conhecimento: sentenças em formalismo F Maquina de Inferência implementando em Prolog raciocínio R em formalismo F Ask Tell Retract Maquina de Inferência: Compilador/ Interpretador Prolog

6 Revisão da Lógica de Horn  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,...) ...   p n (...,X n j,...) ...  c m (...,X m l,...)  Lógica de Horn: sub-conjunto da lógica da 1 a ordem restrita a conjunções de cláusulas de Horn  Cláusula de Horn: disjunção de literais com ao máximo um literal positivo  Dividas em 3 sub- categorias:   Fatos: cláusulas de Horn com zero literal negativo c(...,X k,...) Em forma normal implicativa: T  c(...,X k,...)    Regras definidas: cláusulas de Horn com exatamente um literal negativo e pelo menos um literal positivo:  p 1 (...,X 1 i,...) ...   p n (...,X n j,...)  c m (...,X m l,...) Em forma normal implicativa: p 1 (...,X 1 i,...) ...  p n (...,X n j,...)  c m (...,X m l,...)    Restrições de integridade: cláusulas de Horn com zero literal positivo  p 1 (...,X 1 i,...) ...   p n (...,X n j,...) Em forma normal implicativa: p 1 (...,X 1 i,...) ...  p n (...,X n j,...)  F

7 Prolog como linguagem de representação do conhecimento para IA  Sentenças da base de conhecimento Prolog:  Cláusula de Horn da 1 a ordem excluindo:  Restrições de integridade  Predicado de igualdade  Apenas:  Fatos que representam o conhecimento em extensão  Regras definidas que representam o conhecimento em intenção

8 Representação do conhecimento simbólico Regras Regras + Lógica Lógica Regras + Procedimentos Classes/Objetos Classes/Objetos + Procedimentos Classes/Objetos + Lógica Regras + Classes/Objetos + Procedimentos Regras + Classes/Objetos + Lógica Procedimentos Provadores de Teoremas Shells de Sistemas Especialistas Sistemas de Produção Programação Imperativa Programação OO Lógicas descritivas Programação em lógica Sistemas de Produção OO Programação em lógica OO Redes Semânticas Frames

9 Prolog como máquina de inferência para IA  Provador de teorema para a sub-conjunto da Implementa: dirigido pelo objetivo  Raciocínio dedutivo dirigido pelo objetivo  Não monotôniconegação por falha  Não monotônico quando BC inclui regras usando com negação por falha nas premissas  Usa: mundo fechado  Hipótese do mundo fechado unicidade do nome  Hipótese da unicidade do nome sem occur-check  Unificação sem occur-check para trás  Encadeamento de regras para trás sistemático e cronológico  Com backtracking sistemático e cronológico cima para baixoem profundidade primeira  Criação da árvore de prova de cima para baixo em profundidade primeira

10 Hipóteses do mundo aberto x fechado  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  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 hipótese sobre a completude da informação na BC feita pela máquina de inferência  Hipótese de mundo aberto (BC suposta incompleta ):  se B |  S e B |   S, então Ask(S) = unknown  utilizada pela lógica clássica (de qualquer ordem) e as lógicas descritivas  Hipótese de mundo fechado (BC suposta completa ):  se B |  S e B |   S, então Ask(S) = False  utilizada pela programação em lógica, os sistemas de produção e os bancos de dados

11 Hipótese do mundo fechado  Concluir Ask(S) = False apenas a partir de B |  S não é uma inferência dedutivamente correta  Epistemologicamente:  Ask(S) = False concluído a partir de B |  S,  é mais fraco do que Ask(S) = False derivado a partir de B |   S  É uma forma limitada de:  Abdução  Raciocínio por default  Raciocínio não monótono  Maioria da máquinas de inferência que utilizam a hipótese do mundo fechado:  Não armazenam fatos negativos nas suas BC, i.e., não há ações Tell(  S)  Nem são capaz de deduções da forma B |   S, apenas B |  S

12 Hipótese da unicidade do nome  Consulta SQL no BD do lado retorna?  Consulta SQL count * from Curso no BD do lado retorna? 4444  Tradução em lógica clássica 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?  Lógica clássica usa a hipótese do mundo aberto, mas não usa a hipótese da unicidade do nome  Então como a tradução acima não contém:        (CS = EE)   (101 = 102)   (101 = 106)   (102 = 106)  tradução acima não exclui que a conjunção se reduz a um único literal  Tradução correta:    c,n (c,n) course(c,n)  [d,n]  {[CS,101],[CS,102],[CS,106],[EE,101]} Tabela Curso ÁreaNúmero cs101 cs102 cs106 ee101

13 Prolog: sintaxe  Igual a lógica da 1 a ordem exceto:  Constantes: começam com letras minúsculas, ou quota ´  Variáveis:  começam com letras maiúsculas, _, ou números  na BC, todas universalmente quantificadas e de escopo local a uma cláusula  nas consultas, todas existencialmente quantificadas .  Fatos da Lógica de Horn T  C(...,x k,...) se escrevam c(...,X k,...). em Prolog   Regras definidas da Lógica 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,...).

14 West é criminoso? em Prolog  Em Lógica 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).

15 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.

16 West é criminoso? Encadeamento de regras para trás 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)

17 West é criminoso? Encadeamento de regras para trás 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)

18 West é criminoso? Encadeamento de regras para trás 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)

19 West é criminoso? Encadeamento de regras para trás 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)

20 West é criminoso? Encadeamento de regras para trás 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)

21 West é criminoso? Encadeamento de regras para trás 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)

22 West é criminoso? Encadeamento de regras para trás 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)

23 West é criminoso? Encadeamento de regras para trás 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)

24 West é criminoso? Encadeamento de regras para trás 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)

25 West é criminoso? Encadeamento de regras para trás 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)

26 West é criminoso? Encadeamento de regras para trás 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)

27 West é criminoso? Encadeamento de regras para trás 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)

28 West é criminoso? Encadeamento de regras para trás 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)

29 West é criminoso? Encadeamento de regras para trás 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)

30 West é criminoso? Encadeamento de regras para trás 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)

31 West é criminoso? Encadeamento de regras para trás 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)

32 West é criminoso? Encadeamento de regras para trás 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)

33 West é criminoso? Encadeamento de regras para trás 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)

34 West é criminoso? Encadeamento de regras para trás 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)

35 West é criminoso? Encadeamento de regras para trás 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)

36 West é criminoso? Encadeamento de regras para trás 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)

37 West é criminoso? Encadeamento de regras para trás 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)

38 West é criminoso? Encadeamento de regras para trás 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)

39 West é criminoso? Encadeamento de regras para trás 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)

40 West é criminoso? Encadeamento de regras para trás 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)

41 West é criminoso? Encadeamento de regras para trás 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)

42 West é criminoso? Encadeamento de regras para trás 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)

43 West é criminoso? Encadeamento de regras para trás 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)

44 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.

45 West é criminoso? Encadeamento de regras para trás 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)

46 West é criminoso? Encadeamento de regras para trás 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)

47 West é criminoso? Encadeamento de regras para trás 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)

48 West é criminoso? Encadeamento de regras para trás 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)

49 West é criminoso? Encadeamento de regras para trás 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)

50 West é criminoso? Encadeamento de regras para trás 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)

51 West é criminoso? Encadeamento de regras para trás 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

52 West é criminoso? Encadeamento de regras para trás 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

53 West é criminoso? Encadeamento de regras para trás 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

54 West é criminoso? Encadeamento de regras para trás 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)

55 West é criminoso? Encadeamento de regras para trás 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)

56 West é criminoso? Encadeamento de regras para trás 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)

57 Algoritmo da máquina de inferência Prolog  Tentar unificar termo do objetivo O i corrente com as cabeças das claúsulas da BC, na ordem de escritura  Seja C a 1 a cabeça a se unificar com O i via subsituição  :  se C for um fato, devolve: T e  como resultado  se C for conclusão da regra C :- P 1,..., P n, então:  o novo objetivo corrente O i+1 =  P 1  se  P 1 for verdade, então recursivamente tentar provar  P 2,...,  P n  Se nenhuma cabeça das claúsulas 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

58 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)

59 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)

60 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)

61 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)

62 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)

63 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)

64 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)

65 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)

66 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)

67 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)

68 Encadeamento de regras para trás e resolução  Encadeamento para trás de Prolog é um caso particular de refutação por resolução para Lógica de Horn  Com estratégia de resolução SLD:  D: para cláusulas Definidas (fatos e regras definidas)  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  S: com Função de seleção escolhendo:  Escolhendo cláusulas iniciais na ordem de escritura de cima para baixo  Escolhendo os literais de cada cláusula na ordem de escritura da esquerda para direta  A resolução é correta e completa para refutação  Prolog então é uma máquina de inferência correta e completa para a Lógica de Horn?

69 West é criminoso? Prova Prolog como refutação com resolução SLD (american(P)  weapon(W)  (american(P)  weapon(W)  nation(N)  hostile(N)  nation(N)  hostile(N)  sells(P,N,W)  criminal(P)) //1 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 // Resolver 18 com 2b: F

70 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. $

71 Forçar 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.

72 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.

73 Prolog puro: sem atribuição explícita, nem predicado de igualdade  Em Prolog, = é o operador de unificação explícita: consulta  é uma consulta lógica que retorno verdadeiro ou falso e potencialmente instância variáveis  nãoatribuição  não é um operador de atribuição como na programação imperativa  nãodeclaração  não é um predicado de declaração de igualdade como na lógica 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(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). prof(ia,di,ufpe,geber). musico(senior). ?- geber = senior, prof(ia,di,ufpe,X), musico(X). -> no. e não: X = geber = 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,pessoa(geber,_). musico(pessoa(_,senior)). pessoa(geber, senior). ?- prof(ia,di,ufpe,X), musico(X). -> X = pessoa(geber,senior). ?- prof(ia,di,ufpe,X), musico(X). -> X = pessoa(geber,senior).

74 Prolog para engenharia de software  Linguagem de especificação formal com semântica declarativa lógica  Linguagem de programação de propósito geral em duas camadas: 1.Prolog puro: 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: 2.Predicados extra-lógicos: introduzidos por razões de conveniência  Funcionam com efeitos colaterais como na programação imperativa  Não são bem integrados com o paradigma lógico de Prolog puro  Linguagem de scripting não tipado

75 Aspectos de Prolog fora da Lógica Clássica de Horn da 1 a ordem  Acrescentados por necessidades práticas de programação  Semântica imperativa, funcional, de lógicas não clássicas ou clássicas de ordem superior not  Negação por falha: not ! (cut), repeat,  Controle e poda da busca: ! (cut), repeat,... read, write,...  Entrada/saída: read, write,... is, +, -, *, /, =>,, <=,... assert, retract  Modificação dinâmica da base de conhecimento: assert, retract var, =.., name, list  Meta-programação: var, =.., name, list  Maioria das extensões de Prolog, os substituem por predicados lógicos  No entanto, não existe padrão para essas extensões

76 Prolog para engenharia de software  Permite integrar duas filosofias tradicionalmente opostas de engenharia de software: Verify  Métodos formais, SPIV (Specify Prove Implement Verify)  Prototipagem rápido  Code first, think after  Extreme programming  RUDE (Run Understand Debug Edit)  Via especificação formal executável  Em Prolog: Implement é feito via Prove

77 Prolog para engenharia de software  Metáfora da programação em lógica para engenharia de software:  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  É um exemplo de paradigma de programação declarativa  Outros paradigmas declarativos:  Programação funcional, ex Haskell  Programação por resolução de restrições, ex Eclipse  Programação por re-escritura, ex XSLT  Programador especifica apenas o que fazer  Como fazê-lo é problema do interpretador ou compilador

78 Programação procedimental x programação em lógica 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  Não há necessidade de 2 e 4 !  Estrutura de controle única (dedução automática) embutida no compilador/interpretador usada para todos os problemas !

79 Prolog: listas  [ e ]: início e fim de lista, separação entre eltos, separação entre eltos |: separação entre 1o elto e resto da lista |: separação entre 1o 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,[])))  ?- [a,b,X,p(Y,C)] = [Head|Tail] Head = a, Tail = [b,X,p(Y,C)] Head = a, Tail = [b,X,p(Y,C)] ?- [[p(X),[a]],q([b,c])] = [[H|T1]|T2] ?- [[p(X),[a]],q([b,c])] = [[H|T1]|T2] H = p(X), T1 = [[a]], T2 = [q([b,c])] H = p(X), T1 = [[a]], T2 = [q([b,c])]  member(X,[X|_]). member(X,[_|Z]) :- member(X,Z). member(X,[_|Z]) :- member(X,Z). ?- member(b,[a,b,c]) -> yes. ?- member(b,[a,b,c]) -> yes. ?- member(X,[a,b,c]) -> X = a ; X = b ; X = c ; no. ?- member(X,[a,b,c]) -> X = a ; X = b ; X = c ; no.

80 Programação relacional: vários usos do mesmo predicado  Definiçaõ ú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 restrições: ?- 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 métodos imperativos!

81 Prolog: aritmética  3 tipos de operadores built-in aritméticos:  calculadores (n-ários infixos): +, -, *, /, mod  comparadores (binários infixos): =:=, =\=,, =  o atribuídor is: Variável is ExpressãoAritmética  Expressão aritmética:  fórmula atômica contendo apenas números e calculadores aritméticos  todos os argumentos dos calculadores e comparadores devem ser instanciados com expressões aritméticas

82 Prolog: exemplos de aritmética 1 > ? ? < yes > ? =:= yes > ? = 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 = C = 1+2 > ?- C == no > ?- C is C = 3 > ?- C is D, D = Error. > ?- D = 1 + 2, C is D. D=1+2C=3 > ? = +(-(1),2). no > ? =:= +(-(1),2). yes

83 Prolog: exemplos de aritmética 2 fac(0,1) :- !. fac(I,O) :- I1 is I - 1, fac(I1,O1), O is I * O1. 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. N is H + M. ?- sum([2,1,3,1],S). S = 7 ?- sum([2,10,1],S). S = 13

84 Evitar backtracking inútil: ! (o Cut)  Operador built-in de poda da árvore de prova  Logicamente sempre verificado  Com efeito colateral de impedir backtracking:  na sua esquerda na cláusula que ocorre  em outras cláusulas com a mesma conclusão  ex: A :- B, C, D. C :- M, N, !, P, Q. C :- M, N, !, P, Q. C :- R. 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

85 Exemplo de Cut sign(X,-1) :- X<0, !. sign(X,0) :- X=0, !. sign(X,1) :- X>0. ?- sign(-2,Y). Y=-1yes ?- sign(0,Y). Y=0yes sign(-2,Y) -2 < 0, ! ! Y=-1 yes Y=0Y=1 -2=0, !-2 > 0 fail Sub-árvore podada sign(0,Y) 0 < 0, ! Y=-1Y=0Y=1 0=0, !0 > 0 fail Sub-árvore podada fail ! yes

86 Prolog: entrada/saída 1  Ler/escrever estrutura de dados dificilmente pode ser visto como resultando de uma dedução:  E/S não se integre naturalmente no paradigma de PL  requer predicados extra-lógicos sem semântica declarativa em L1  Predicados built-in de Prolog para E/S:  sempre verificados  cumprem sua tarefa por efeitos colaterais  não podem ser re-satisfeitos por backtracking

87 Prolog: entrada/saída 2  Ler e escrever termos: read, write, display.  Ler e escrever caracteres: get, get0, put.  Formatar a saída legívelmente: 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) X = 2, Z = 3; no X = 2, Z = 3; no ?

88 Prolog para bancos de dados  Datalog:  Sub-conjunto de Prolog excluindo símbolos de funções, e assim garante decidabilidade da inferência da 1 a ordem  Estende modelo de dados relacional com visões recursivas  Fatos datalog de um determinado predicado:  tabelas de um BD relacional  parte extensionais de um BD dedutivo  Regras definidas datalog:  visões de um BD relacional  parte intencional de um BD dedutivo  Mais compacto (e lento) do que BD inteiramente extensionais:  Armazena apenas fatos primitivos e freqüentemente requisitados vistos como axiomas lógicos  Consulta a outros são teoremas a provar

89 Prolog para bancos de dados  Máquina de inferência datalog:  Estende processador de consulta com poder da dedução da 1 a ordem  É um tamborete de dados dedutivo não persistente  Consulta ao BD: perguntar verdade de um teorema  BD dedutivo:  Integra serviço de inferência da 1a ordem  Com serviços tradicionais de BD: persistência, gerenciamento de memória secundária, concorrência e segurança  Vários sistemas acadêmico  Nenhum comercial depois de 25 anos de pesquisa

90 Vantagens de Prolog  Como formalismo de representação do conhecimento  Intuitividade das regras com rigor formal da lógica  Teoria muito completa sobre semântica, corretude e completude da inferência, limites de expressividade, complexidade etc.  Compiladores muito eficientes  Versátil, serve de base para grande maioria dos mecanismos de inferência da IA  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  Computacionalmente completo  Versátil, serve como linguagem de programação, de script e de definição e consulta de dados

91 Prolog como máquina de inferência para IA  Limitações:  Unificação sem occur-check:  Torna a unificação linear no lugar de quadrática em tempo   Faz com que Prolog pode entrar em loop com algumas regras recursivas pela direta com funções  Busca em profundidade primeira  Torna inferência econômica em memória  Faz com que Prolog pode entrar em loop com regras recursivas pela esquerda  Juntos:  Inferência sem garantia de completude nem corretude no caso geral  Balanço:  Imperfeita mas muito eficiente em tempo e memória (competitivo com C sobre vários benchmark)  Maiorias da imperfeições facilmente contornáveis com um pouco de experiencia em engenharia do conhecimento em Prolog

92 Limitações de Prolog  Como formalismo de representação do conhecimento  Objetos compostos com restrições complexas  Raciocínio com hipótese do mundo aberto  Conhecimento procedimental e numérico  Tratamento da incerteza  Atualização da base de conhecimento (Tell e Retract) com semântica declarativa  Especificação declarativa de estratégia de busca  Como linguagem de programação  Recursos muito limitados para:  Estruturação de objetos complexos  Programação de larga escala  Sem recursos para interfaces gráfica, programação concorrente e distribuída  Baixa integração com metodologias e ferramentas de desenvolvimento de larga divulgação  UML, RUP, Java, XML,.net, web services, BD O-R, etc.

93 Extensões 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 restrições, ex, Eclipse  PL concorrente, ex, BinProlog  PL distribuída, ex, Jinni  BD dedutivos, ex, Transaction Logic  Disciplinas:  Paradigmas de linguagens computacionais  Programação declarativa e banco de dados inteligentes  PL com negação explícita  PL com disjunções  PL abdutiva  PL indutiva  PL probabilista  Disciplinas:  Agentes autônomos e sistemas multiagentes  Engenharia do conhecimento e sistemas especialistas  Aprendizagem de máquina


Carregar ppt "Introdução a Programação em Lógica e Prolog Jacques Robin CIn-UFPE."

Apresentações semelhantes


Anúncios Google