Introdução a
Programação em Lógica e Prolog
Jacques Robin
CIn-UFPE
O que é a Programação em Lógica?

Para a IA: um paradigma de representação do conhecimento e

Para a engenharia de software: um paradigma de especificação de


raciocínio automático
software e de programação
Para os bancos de dados: um modelo conceitual de dados
Para a teoria da computação: um conjunto de lógicas
c:Lógica
L1
Clássica dos
Predicados

L1ch:Lógica
Clássica de
Horn da
1a ordem
L1nh:Lógica
não-monótona
de Horn da
1a ordem
Lógica da
Programação
em Lógica
Visão unificadora trans-disciplinar de várias área da computação
Metáfora da programação em lógica

Teoria lógica = Base de Conhecimento (BC)
• Axiomas e regras da teoria lógica = BC estática
• Teoremas da teoria lógica = BC dinâmica

deduzidos a partir dos axiomas e das regras
• Máquina de inferência = provador de teorema

Teoria lógica = modelo de software = implementação 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
Teoria lógica = Banco de Dados (BD)
• Definir dados = declarar axiomas e regras
• Consultar BD = perguntar verdade de um teorema
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-agentes
• 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 DOO
• Mineração de Dados e
Descoberta de Conhecimento
• Integração de Dados e
Interoperabilidade
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
 Surgiu na década de 70
 Na moda na década de 80 (o Java da época )
 Hoje permanece pouco divulgado e usado na indústria

Representação do conhecimento
Procedimentos
Programação Imperativa
Lógica
Provadores de Teoremas
Regras
Shells de Sistemas Especialistas
Classes/Objetos
Redes Semânticas
Classes/Objetos + Procedimentos
Programação OO Frames
Classes/Objetos + Lógica
Lógicas descritivas
Regras + Procedimentos
Sistemas de Produção
Regras + Classes/Objetos + Procedimentos
Sistemas de Produção OO
Regras + Lógica
Programação em lógica
Regras + Classes/Objetos + Lógica
Programação em lógica OO
Lógica dos predicados como formalismo de
representação do conhecimento

Vantagens:
• Muito versátil e expressivo
• Com semântica declarativa bem definida
• Com grande número de mecanismos de inferência dedutivos com
propriedades formais e custos computacionais muito bem conhecidos

Porque então L1C não vingou como FRC padrão?
• De fato vingou a nível teórico, já que cada novo FRC proposto acaba ser
re-estudado em termos lógicos
• Desvantagens práticos:



Não é intuitiva para especialistas do domínio de aplicação do sistema
inteligente (médico, advogado, lingüista, engenheiro, etc.)
Oferece variedade de modelagens excessiva (muita fórmulas sintaticamente
diferentes porém semanticamente equivalentes)
Prova de teoremas em L1C é computacionalmente inviável para grandes bases
de conhecimento
West é criminoso? em lógica dos predicados:
variantes sintáticas
( P,W,N american(P) 
weapon(W)  nation(N) 
hostile(N)  sells(P,N,W)
 criminal(P))
 ( W owns(nono,W)  missile(W))
 ( W owns(nono,W)  missile(W)
 sells(west,nono,W))
 american(west)
 nation(nono)
 enemy(nono,america)
 ( W missile(W)  weapon(W))
 ( N enemy(N,america)
 hostile(N))
 nation(america)
( ( P,W,N criminal(P)  american(P) 
weapon(W)  nation(N)  hostile(N))
 ( W owns(nono,W)  missile(W1))
 ( W sells(west,nono,W) 
owns(nono,W)  missile(W))
 ( P american(P)  P = west)
 ( N nation(N)  N = nono)
 ( W weapon(W))  missile(W))
 ( N1,N2 N1=nono  N2=america 
emeny(N1,N2))
 ( N  hostile(N) 
enemy(N,america))
 ( N nation(N)  N = america))
Regras de shell de sistemas especialistas

IF premissa THEN conclusão
• Premissas e conclusão em linguagem pseudo-natural com
conectivas genécias IF_THEN, AND, OR, ISA, HAS e outras
dependente do domínio ligando nomes de entidades (classes) e
propriedades (atributos) do domínio

Vantagens:
• Intuitivas para especialista do domínio de aplicação
• Variedade mais restrita de modelagens

Desvantagens:
• Atalha nível da formalização no processo de engenharia de
conhecimento
• Semântica declarativa ambígua
• Mecanismo de dedução ad-hoc com propriedades e formais e
custos computacionais mal conhecidos
West é criminoso?
Lógica x Regras “intuitivas” de shell
Em lógica dos predicados:
( P,W,N american(P) 
weapon(W)  nation(N) 
hostile(N)  sells(P,N,W)
 criminal(P))
 ( W owns(nono,W) 
missile(W))
 ( W owns(nono,W) 
missile(W)
 sells(west,nono,W))
 american(west)
 nation(nono)
 enemy(nono,america)
( X missile(W) 
weapon(W))
 ( X enemy(N,america)
 hostile(N))
 nation(america)


Com shell de sistema especialista:
Base de regras:
IF P ISA american AND W ISA weapon AND
N ISA nation AND N IS hostile AND
P sells W TO N
THEN P IS criminal
IF W ISA missile AND nono HAS W
THEN west sells W TO nono
IF W ISA missile THEN W ISA weapon
IF america HAS enemy N THEN N IS hostile
Base de fatos iniciais:
west ISA american
nono ISA nation
america ISA nation
america HAS enemy nono
nono HAS m1
m1 ISA missile
Engenharia de uma base de conhecimento
• Entrevistas
estruturadas
com especialista
• Preparação de dados
• Ontologias
• Linguagens
semi-formais
de representação
do conhecimento
Elicitação do conhecimento
Nível do conhecimento:
• Nos termos do especialista do domínio de aplicação
• Linguagem natural, Notações gráficas ad-hoc
Formalização do conhecimento
Nível formal:
Nível semi-formal:
• Notação textual estruturada padrão (ex, XML)
• Notação gráfica padrão (ex, UML)
• Validação com especialista
• Compiladores
• Máquinas de
inferências
• Aprendizagem
de Máquina
formais
de representação
do conhecimento
• Aprendizagem
de Máquina
• Notação sem ambigüidade com
semântica definida matematicamente
(ex, lógica, probabilidades)
• Verificação de consistência
Implementação do conhecimento
Nível da implementação:
• Linguagens
• Codificação em uma linguagem de programação
• Teste de protótipo
Problema com regras não baseadas na lógica
Mundo
Representação
fatos
sentenças
segue-se ??
deriva
fatos
sentenças
Formas normais da lógica dos predicados

Forma normal conjuntiva:
• Conjunção de cláusulas disjuntiva, i.e., de disjunção de formulas atômicas
positivas ou negadas
• (P11  ...  Pi1  C11  ...  Ci1)  ...  (Pn1  ...  Pk1  Cn1  ...  Ck1)
• Dispensa conectivas ,  e , torna  implícito

Formal norma implicativa:
• conjunção de cláusulas implicativas, i.e., de implicações de conjunção de
formulas atômicas positivas para disjunção de formulas atômicas positivas
• (P11  ...  Pi1  C11  ...  Ci1)  ...  (Pn1  ...  Pk1  Cn1  ...  Ck1)
• Dispensa conectivas ,  e , torna  implícito

São equivalentes pela definição da implicação: (P  C)  (P  C)
(P11  ...  Pi1  C11  ...  Ci1)  ...  (Pn1  ...  Pk1  Cn1  ...  Ck1)
 ((P11  ...  Pi1)  (C11  ...  Ci1))  ...  ((Pn1  ...  Pk1)  (Cn1  ...  Ck1))
 (P11  ...  Pi1  C11  ...  Ci1)  ...  (Pn1  ...  Pk1  Cn1  ...  Ck1)
Prolog puro: Lógica de Horn L1ch
Programa Prolog = formula da Lógica de Horn L1ch sem
predicado de igualdade
 Formula de L1ch:

• Formula da lógica dos predicados em forma normal implicativa
com clausulas de conclusão única
• (P11  ...  Pi1  C1)  ...  (Pn1  ...  Pk1  Cn)

L1ch  L1h:
• Algumas formulas da lógica dos predicados não tem formula de
Horn equivalente
• ex, animalLover(X)  animal(Y)  kills(X,Y).
Programação em lógica como formalismo de
representação do conhecimento


Meio termo entre lógica dos predicados e regras “intuitivas” de shell
Vantagens para aquisição de conhecimento:
• Formula da lógica de Horn tem mapeamento direto com de bases fatos e
de regras intuitivas de shell de sistemas especialistas
• Representação mais simples e intuitiva do que lógica sem atalhar nível da
formalização
• Reduz consideravelmente número de paráfrases sintáticas

Vantagens para máquina de inferência:
• Raciocínio dedutivo correto e semi-completo: a refutação por resolução
• Espaço de busca da refutação por resolução muito menor em lógica de
Horn do que é lógica dos predicados (eficiência)

Perda de expressividade em comparação da lógica dos predicados:
• Facilmente contornável para maioria das aplicações de IA
• Uso prático principal dos provadores de teoremas da lógica dos
predicados: engenharia de software formal e matemática computacional,
não IA
Unificação

Exemplos:
• unif(conhece(joao,X),conhece(Y,leandro)) =
{X/Leandro,Y/joao}
• unif(conhece(joao,X),conhece(X,leandro) = fail
• unif(conhece(joao,X),conhece(Y,mae(Y)) =
{Y/joao, X/mae(joao)}
• unif(conhece(joão,X),conhece(Y,Z)) = {Y/João, X/Z}, ou
{Y/joão, X/Z, W/zelda} ou {Y/joão, X/joão, Z/joão} ...


Unificador mais geral: com menor número de variáveis
instanciadas
Substituição mínima: com menor número de pares Var/const
Cláusulas Prolog x Cláusulas de Horn

Fatos Prolog:
• Cláusulas de Horn com premissa única T implícita
• Escritos C. Com semântica: T  C

Regras Prolog:
• Outras cláusulas de Horn
• Escrita C :- P1, ... ,Pn. Com semântica: P1  ...  Pn  C
• Escopo das variáveis = uma cláusula

Premissas de várias cláusulas com a mesma conclusão são
implicitamente disjuntivas
• Semântica de: C :- P1, ... ,Pn. C :- Q1, ... ,Qm, é:
(P1  ...  Pn  C)  (Q1  ...  Qm  C)
 ((P1  ...  Pn )  C)  ((Q1  ...  Qm ))  C) (p+c).(q+c)
 ((P1  ...  Pn )  (Q1  ...  Qm ))  C
pq + c
 ((P1  ...  Pn )  (Q1  ...  Qm ))  C
 ((P1  ...  Pn )  (Q1  ...  Qm ))  C
West é criminoso? em lógica dos predicados

Requisitos em inglês
1. It is crimimal for an American to
sell weapons to an hostile country
2. Nono owns missiles
3. Nono acquires all its missiles from
West
4. West is American
5. Nono is a nation
6. Nono is an enemy of the USA
0. Is West a crimimal?

Em lógica da 1a ordem
1.  P,W,N american(P)  weapon(W) 
nation(N)  hostile(N) 
sells(P,N,W)  criminal(P)
2.  W owns(nono,W)  missile(W)
3.  W owns(nono,W)  missile(W) 
sells(west,nono,W)
7.  X missile(W)  weapon(W)
8.  X enemy(N,america)  hostile(N)
4. american(west)
5. nation(nono)
6. enemy(nono,america)
9. nation(america)
West é criminoso?
em formal normal implicativa

Em lógica da 1a ordem
1.  P,W,N american(P)  weapon(W)
 nation(N)  hostile(N) 
sells(P,N,W)  criminal(P)
2.  W owns(nono,W)  missile(W)
3.  W owns(nono,W)  missile(W) 
sells(west,nono,W)
7.  X missile(W)  weapon(W)
8.  X enemy(N,america) 
hostile(N)
4. american(west)
5. nation(nono)
6. enemy(nono,america)
9. nation(america)

Em formal normal
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)
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).
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 trás
criminal(west)?
criminal(P)
american(P)
weapon(W)
nation(N)
hostile(N)
sells(P,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(P)
weapon(W)
nation(N)
hostile(N)
sells(P,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(W)
nation(N)
hostile(N)
sells(west,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(W)
nation(N)
hostile(N)
sells(west,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(W)
nation(N)
hostile(N)
sells(west,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(W)
nation(N)
hostile(N)
sells(west,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(W)
nation(N)
hostile(N)
sells(west,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(W)
nation(N)
hostile(N)
sells(west,N,W)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
hostile(N)
sells(west,N,W)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(nono)
nation(america)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(nono)
nation(america)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)? yes
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,america)
owns(nono,m1)
enermy(nono,america)
owns(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 trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(america)
nation(nono)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(america)
nation(nono)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(america)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(america)
nation(nono)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(america)
hostile(america)
sells(west,america,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(america)
hostile(america)
sells(west,america,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(america)
hostile(america)
sells(west,america,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(america)
hostile(america)
sells(west,america,m1)
sells(west,nono,W)
missile(m1)
enemy(N,america)
owns(nono,W)
fail
american(west)
missile(m1)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(america)
hostile(america)
sells(west,america,m1)
sells(west,nono,W)
backtrack
missile(m1)
enemy(N,america)
owns(nono,W)
fail
american(west)
missile(m1)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
backtrack
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(N)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(N)
sells(west,N,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para trás
criminal(west)?
criminal(west)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
enemy(N,america)
nation(america)
nation(nono)
enermy(nono,america)
owns(nono,W)
owns(nono,m1)
Algoritmo da máquina de inferência Prolog
Tentar unificar termo do objetivo Oi corrente com as
cabeças das claúsulas da BC, na ordem de escritura
 Seja C a 1a cabeça a se unificar com Oi via subsituição :

• se C for um fato, devolve: T e  como resultado
• se C for conclusão da regra C :- P1, ..., Pn, então:



o novo objetivo corrente Oi+1 = P1
se P1 for verdade, então recursivamente tentar provar P2, ..., Pn
Se nenhuma cabeça das claúsulas da BC se unifica com Oi:
• devolver F como resultado, e
• retroceder, buscando uma prova alternativa para Oi-1, o último
objetivo provado antes de Oi
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(P)
weapon(W)
nation(N)
hostile(N)
sells(P,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(N,america)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(P)
weapon(W)
nation(N)
hostile(N)
sells(P,N,W)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,N)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(P)
weapon(m1)
nation(N)
hostile(N)
sells(P,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,N)
owns(nono,W)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(P)
weapon(m1)
nation(N)
hostile(N)
sells(P,N,W)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enemy(nono,N)
owns(nono,m1)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(P)
weapon(m1)
nation(N)
hostile(nono)
sells(P,N,W)
sells(west,nono,W)
missile(W)
american(west)
missile(m1)
nation(nono)
nation(america)
owns(nono,W)
enemy(nono,N)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(P)
weapon(m1)
nation(N)
hostile(nono)
sells(P,N,W)
sells(west,nono,W)
missile(m1)
american(west)
missile(m1)
nation(nono)
nation(america)
owns(nono,m1)
enemy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(P)
weapon(m1)
nation(N)
hostile(nono)
sells(P,N,W)
sells(west,nono,m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(P)
american(west)
weapon(m1)
nation(nono)
hostile(nono)
sells(west,nono,m1)
sells(west,nono,m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)?
criminal(west)
weapon(m1)
hostile(nono)
sells(west,nono,m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enermy(nono,america)
owns(nono,m1)
West é criminoso?
Encadeamento de regras para frente
criminal(west)? yes
criminal(west)
weapon(m1)
hostile(nono)
sells(west,nono,m1)
american(west)
missile(m1)
nation(nono)
nation(america)
enermy(nono,america)
owns(nono,m1)
Prolog, refutação e resolução

Mecanismo de inferência de Prolog:
• forma particular de refutação por resolução
• com estratégia de resolução linear de entrada, i.e., a cada passo sempre
resolvendo uma das clausulas iniciais (base de conhecimento e negação da
consulta), varrendo as candidatas na ordem de escritura do programa de
cima para baixo
• com outra clausula sendo a última a ter sido derivada
• escolhendo os literais na ordem de escritura das premissas de esquerda
para direita





Estratégia com bom compromisso simplicidade/eficiência
Criar a árvore de prova por meio de cima para baixo em
profundidade primeira
Em caso de falha, efetua um retrocesso linear e sistemático
Encadeia as regras para trás
É dirigido pelos objetivos
West é criminoso? Prova Prolog como
refutação com resolução SLD
(american(P)  weapon(W) 
nation(N)  hostile(N) 
sells(P,N,W)  criminal(P))
//1
 (T  owns(nono,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
2. Resolver 10 com 4:
weapon(W)  nation(N)  hostile(N) 
sells(west,N,W)  F
3. Resolver 11 com 7:
missile(W)  nation(N)  hostile(N) 
sells(west,N,W)  F
4. Resolver 12 com 2b unificando W/m1:
nation(N)  hostile(N)  sells(west,N,m1)  F
5. Resolver 13 com 5 unificando N/nono:
hostile(nono)  sells(west,nono,m1)  F
6. Resolver 14 com 8 unificando N/nono:
enemy(nono,america)  sells(west,nono,m1)  F
7. Resolver 15 com 6: sells(west,nono,m1)  F
8. Resolver 16 com 3 unificando W/m1:
owns(nono,m1)  missile(m1)  F
9. Resolver 17 com 2a: missile(m1)  F
10. Resolver 18 com 2b: F
//10
//11
//12
//13
//14
//15
//16
//17
//18
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.
$
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.
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 atribuição, nem predicado de igualdade

Em Prolog, = é o operador de unificação explícita:
•
•
•

é uma consulta lógica que retorno verdadeiro ou falso e potencialmente instância
variáveis
não é um operador de atribuição como na programação imperativa
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(ia,di,ufpe,geber). musico(senior).
?- geber = senior, prof(ia,di,ufpe,X), musico(X). -> no.
e não: X = geber = senior.
prof(ia,di,ufpe,pessoa(geber,_). musico(pessoa(_,senior)).
pessoa(geber, senior).
?- prof(ia,di,ufpe,X), musico(X). -> X = pessoa(geber,senior).
Prolog: listas



[ e ]: início e fim de lista
, separação entre eltos
|: 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)]
?- [[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.
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!
Programação procedimental
x programação em lógica
1.
2.
3.
4.
Modelagem estrutural
Modelagem comportamental
Codificar estruturas de dados
Codificar passo a passo
estruturas de controle
5. Compilar/interpretar programa
6. Executar programa
A. Declarar o que é verdade
(fatos e regras)
B. Compilar/interpretar programa
C. Fazer consulta sobre verdade
de um fato
A = 1+3
C=6
Programação declarativa:
• 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 !
Aspectos de Prolog fora
da Lógica Clássica de Horn da 1a ordem
Acrescentados por necessidades práticas de
programação
 Semântica imperativa ou funcional, de lógicas não
clássicas ou clássicas de ordem superior
 Negação por falha: not
 Controle e poda da busca: ! (cut), repeat, ...
 Entrada/saída: read, write, ...
 Atribuição aritmética: is
 Modificação dinâmica da base de conhecimento: assert,

retract

Meta-programação: var, =.., name, list
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
Prolog: exemplos de aritmética 1
> ?- 1 + 1 < 1 + 2.
yes
> ?- 1 + 3 =:= 2 + 2.
yes
> ?- 1 + 3 = 2 + 2.
no
> ?- 1 + A = B + 2.
A=2
B=1
yes
> ?- 1 + A =:= B + 2.
Error
> ?- A = 2, B = 1, 1 + A =:= B + 2.
A=2
B=1
yes
> ?- C = 1 + 2.
C = 1+2
yes
> ?- C is 1 + 2.
C=3
yes
> ?- C is D, D = 1 + 2.
Error.
> ?- D = 1 + 2, C is D.
D=1+2
C=3
yes
> ?- -1+2 = +(-(1),2).
no
> ?- -1+2 =:= +(-(1),2).
yes
Prolog: exemplos de aritmética 2
fac(0,1) :- !.
fac(I,O) :- I1 is I - 1,
fac(I1,O1), O is I * O1.
?- fac(1,X).
X=1
yes
?- fac(3,X).
X=6
yes
?- fac(5,X).
X = 120
yes
?
sum([],0).
sum([H|T],N) :- sum(T,M),
N is H + M.
?- sum([2,1,3,1],S).
S=7
yes
?- sum([2,10,1],S).
S = 13
yes
?
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 :- 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
sign(-2,Y)
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
Y=-1
Y=0
Y=1
-2 < 0, !
-2=0, !
-2 > 0
!
fail
fail
yes
Sub-árvore podada
sign(0,Y)
Y=-1
Y=0
Y=1
0 < 0, !
0=0, !
0>0
fail
!
fail
yes
Sub-árvore
podada
Perigos do Cut
member(X,[X|_]).
member(X,[_|Z]) :- member(X,Z).
add2set1(E,Si,_) :- member[E,Si], !.
add2set1(E,Si,[E|Si]).
member(X,[X|_]).
member(X,[_|Z]) :- member(X,Z).
add2set1(E,Si,So) :- member[E,Si], !, So=Si.
add2set1(E,Si,[E|Si]).
?- add2set1(a,[a,b],So).
yes, So=[a,b]
?- add2set1(c,[a,b],So).
yes, So=[c,a,b]
?- add2set1(a,[a],[a,a]).
yes
?- add2set1(a,[a,b],So).
yes, So=[a,b]
?- add2set1(c,[a,b],So).
yes, So=[c,a,b]
?- add2set1(a,[a],[a,a]).
no
• Programas com cuts não possuem semântica declarativa em lógica de Horn.
• Apenas uma semântica procedimental, como um programa imperativo.
Prolog: exemplos de teste de tipos
?- var(X).
X = _3
yes
?- var(2).
no
?- var(a).
no
?- var(p(a,X)).
no
?- nonvar(2), nonvar(p(2,X,a)).
X = _11
yes
?- X is 2 + 3, var(X).
no
?- var(X), X is 2 + 3.
X=5
yes
numberp(Term) :- integer(Term).
numberp(Term) :- real(Term).
structp(Term) :- nonvar(Term),
not atomic(Term).
listp(Term) :- nonvar(Term),
listp1(term).
listp1([]).
listp1([H|T]) :- listp1(T).
factp(Term) :- strucp(Term),
not listp(Term).
Prolog: conversão de tipos
name(Átomo,Caracteres):
 conversão bi-direcional entre
átomo e cadeia de caracteres
que constitui o seu nome
list(CódigosAscii,Caracteres):
 conversão bi-direcional entre
um lista de inteiros vistos
como códigos ascii e cadeia de
caracteres correspondente
Fato =.. Lista:
 conversão bi-direcional entre
fato e lista, funtor sendo
cabeça e argumentos sendo
resto
?- name(A,"blabla").
A = blabla
?- name(blabla,S).
S = "blabla"
?- list(X,"bla").
X = [98,108,97]
?- list([98,108,97],Y).
Y = "bla”
?- p(a,X,c) =.. Y.
X = _5, Y = [p,a,_5,c]
?- Y =.. [p,a,X,c].
Y = p(a,_20,c), X = _20
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
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).
2.
3
X = 2, Z = 3; no
?
Prolog: failure-driven loop
Loop gerada por backtracking forçado com fail e repeat.
 repeat sempre verificado e re-verificado no backtracking
(true sempre verificado mas falha no backtracking)

consult(File) :- see(File), consult-loop, seen.
consult-loop :- repeat, read(Clause), process(Clause), !.
process(X) :- end_of_file(X), !.
process(Clause) :- assert(Clause), fail.
Hipóteses sobre completude
da base de conhecimento


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
provadores de teorema em cálculo dos predicados e pelas lógicas descritivas
•
se B | S e B | S, então Ask(S) = False
Hipótese de mundo fechado (BC suposta completa ):
• programação em lógica, sistemas de produção e bancos de dados
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
Hipótese do mundo fechado
e manutenção da verdade

Manutenção da verdade:
• Manter consistência de B depois de Tell(S,t)
• Requer Retract(S´,t+1), S´, S foi utilizada na prova de S´

Ask(S,t) = False porque B(t) | S:
• é apenas uma hipótese por default
• pode ser revisada na luz de nova evidência
• ex, no caso de Tell(S´,t+1) com B(t+1) = B(t)  {S´} | S

Ask(S,t) False porque B(t) | S:
• é uma dedução provada
• não pode ser revisada na luz de novos fatos
• ex, Tell(S´,t+1) com B(t+1) = B(t)  {S´} | S
é contraditório com B(t) | S
Negação por falha
Prolog permite uso da negação for falha (operador not )
em consultas e em premissas de regras
 Não permite negação por falha em fatos ou conclusão de
regras
 not L = T concluído a partir de P | L
 Diferente de L = T concluído a partir de P | L
 Quando encontra objetivo not L, Prolog tenta provar L

• se conseguir, conclui not L = fail
• se não conseguir, conclui not L = true
Uso da negação por falha para
raciocínio por default
ave(piupiu).
papa_leguas(bipbip).
ave(X) :- papa_leguas(X).
voa1(X) :- ave(X), not papa_leguas(X).
voa2(X) :- not papa_leguas(X), ave(X).
?- voa1(X).
X = piupiu
yes
?- ;
no.
?- voa2(X).
no.
Perigos do uso ingênuo da negação por falha
edge(a,b).
sink(X) :- not edge(X,Y).
?- sink(a)
no.
?- sink(b)
yes.
? sink(X)
no.
Estilo recomendado para evitar
semântica não intuitiva e loops
Evitar:
 Regras universais (non ground) antes de fatos instanciados (ground)
 Regras recursivas antes da regra de caso base
 Premissas recursivas antes das premissas não recursivas
 Premissas negadas antes ou sem premissas positivas compartilhando
as mesmas variáveis (floundering)
 Recursão através da negação (stratificação)
 Conclusão com variável X de profundidade p junto com premissa com
variável X de profundidade q  p antes de outra premissa com
variável X de profundidade r  p (occur-check)
 Cuts em casos não excludentes
Semântica declarativa de programas Prolog





Semântica de
P1: {ônibusPara(garanhuns,10:00). ônibusPara(salgueiro,12:00)}.
Com hipótese do mundo aberto seria:
X,Y ((X=garanhuns  Y=10:00)  (X=salgueiro  Y=12:00))
 ônibusPara(X,Y))
Mas com a hipótese do mundo fechado de Prolog, é de fato:
X,Y ((X=garanhuns  Y=10:00) (X=salgueiro  Y=12:00))
 ônibusPara(X,Y))
Semântica de P2:
{prof(geber). prof(jacques). aluno(Y) :- not prof(Y).}
X (prof(X)  X=geber  X=jacques)
 X (aluno(X)  Y (X=Y  prof(Y))
Uso dual de Prolog para sistema inteligente

Como formalismo de
representação do conhecimento
Maquina de
Ask
Base de
Inferência:
Conhecimento:
Compilador/
Tell
Fatos e Regras
Interpretador
Prolog
Retract
Prolog

Como linguagem de
programação
Ask
Base de
Conhecimento:
Tell
sentenças em
formalismo F Retract
Maquina de
Inferência
implementando
em Prolog
raciocínio R
em formalismo F
Maquina de
Inferência:
Compilador/
Interpretador
Prolog
Implementação Prolog de máquina de
inferência encadeando regras
Codificação da base de fatos
•
fact(TermoProlog).
Codificação da base de regras
•
•
•
if P1 conj ... conj Pn then C onde
P1 ... Pn e C são termos Prolog
conj é and ou or
Codificação das consultas
•
forward deriva todos os fatos
Exemplo de base de conhecimento
if hallWet and kitchenDry then leakInBathroom
if hallWet and bathroonDry then problemInKitchen
if windowClosed or noRain then noWaterFromOutside
if problemInKitchen and noWaterFromOutside
then leakInKitchen
Exemplos de consulta
?- forward
Derive: problemInKitchen
Derive: noWaterFromOutside
Derive: leakInKitchen
No more facts
?- is_true(leak_in_kitchen).
yes
Implementação Prolog de máquina de
inferência encadeando regras
Para frente:
::::-
op( 800, fx, if).
op( 700, xfx, then).
op( 300, xfy, or).
op( 200, xfy, and).
forward :- new_derived_fact(P), !,
write('Derived: '), write(P), nl, assert(fact(P)),
forward ; write('No more facts').
new_derived_fact(Concl) :- if Cond then Concl,
not fact(Concl), composed_fact(Cond).
composed_fact(Cond) :- fact(Cond).
composed_fact(Cond1 and Cond2) :composed_fact(Cond1), composed_fact(Cond2).
composed_fact(Cond1 or Cond2) :composed_fact(Cond1) ; composed_fact(Cond2).
Pata trás:
::::-
op( 800, fx, if).
op( 700, xfx, then).
op( 300, xfy, or).
op( 200, xfy, and).
is_true( P) :- fact( P).
is_true( P) :- if Condition then P,
is_true( Condition).
is_true( P1 and P2) :- is_true( P1), is_true( P2).
is_true( P1 or P2) :- is_true( P1) ; is_true( P2).
Prolog x Programação OO

Funcionalidades built-in:
• + unificação e busca
• - tipos, herança e encapsulamento

Ontologicalmente:
• Entidade Atómica (EA): em OO, valor de tipo built-in
em Prolog, átomo (argumento ou predicado)
• Entidade Composta (EC): em OO, objeto
em Prolog, fato
• Relação simples entre EC e EA: em OO, atributo de tipo built-in
em Prolog, posição em um predicado
• Relação simples entre ECs: em OO, atributo de tipo objeto
em Prolog, predicado
• Relação complexa entre entidades: em OO, método
em Prolog, conjunto de regras
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
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.
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
Download

to get the file