Você está na página 1de 93

Introduo a

Programao em Lgica e Prolog


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.

?- sign(-2,Y).
Y=-1
yes
?- sign(0,Y).
Y=0
yes
sign(-2,Y)
-2 < 0, !
!
Y=-1
yes
Y=0 Y=1
-2=0, ! -2 > 0
fail fail
Sub-rvore podada
sign(0,Y)
0 < 0, !
Y=-1 Y=0 Y=1
0=0, ! 0 > 0
fail
Sub-rvore
podada
fail
!
yes
Prolog: entrada/sada 1

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

Você também pode gostar