Upload
internet
View
122
Download
2
Embed Size (px)
Citation preview
Introdução a Introdução a Programação em Lógica e PrologProgramação em Lógica e Prolog
Jacques RobinCIn-UFPE
Para a IA: um paradigma de representação do conhecimento e raciocínio automático
Para a engenharia de software: um paradigma de especificação de 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
O que é a Programação em Lógica?O que é a Programação em Lógica?
L1c:Lógica
Clássica dos Predicados
L1ch:Lógica
Clássica deHorn da1a ordem
L1nh:Lógica
não-monótonade Horn da1a ordem
Lógica da Programaçã
oem Lógica
Visão unificadora trans-disciplinar de várias área da computação
Metáfora da programação em lógicaMetá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ógicaAplicaçõ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?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 conhecimentoRepresentação do conhecimento
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
Lógica dos predicados como formalismo Lógica dos predicados como formalismo de representação do conhecimentode 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 L1
C é computacionalmente inviável para grandes bases de conhecimento
West é criminoso?West é criminoso? em lógica dos em lógica dos predicados: variantes sintáticaspredicados: 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 especialistasRegras 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? West é criminoso? Lógica x Regras “intuitivas” de shellLógica x Regras “intuitivas” de shell
Em lógica dos predicados: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 especialistaCom shell de sistema especialista:Base deBase de regras: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 criminalIF W ISA missile AND nono HAS W THEN west sells W TO nonoIF W ISA missile THEN W ISA weaponIF america HAS enemy N THEN N IS hostileBase deBase de fatos iniciaisfatos iniciais:west ISA americannono ISA nationamerica ISA nationamerica HAS enemy nononono HAS m1m1 ISA missile
Engenharia de uma base de Engenharia de uma base de conhecimentoconhecimento
Elicitação do conhecimento
Formalização do conhecimento
Implementaçã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
Nível semi-formal:• Notação textual estruturada padrão (ex, XML) • Notação gráfica padrão (ex, UML)• Validação com especialista
Nível formal:• Notação sem ambigüidade com semântica definida matematicamente (ex, lógica, probabilidades)• Verificação de consistência
Nível da implementação:• Codificação em uma linguagem de programação• Teste de protótipo
• Entrevistas estruturadas com especialista• Preparação de dados
• Linguagens formaisde representação do conhecimento• Aprendizagemde Máquina
• Ontologias• Linguagenssemi-formaisde representaçãodo conhecimento
• Compiladores• Máquinas de inferências• Aprendizagemde Máquina
Problema com regras não baseadas na Problema com regras não baseadas na lógicalógica
fatos fatos
sentenças sentenças
Mundo
Representação
segue-se ??
derivasem
ânti
ca ?
?
sem
ânti
ca ?
?
Formas normais da lógica dos predicadosFormas 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 LProlog puro: Lógica de Horn L11chch
Programa Prolog = formula da Lógica de Horn L1ch
sem predicado de igualdade Formula de L1
ch: • Formula da lógica dos predicados em forma normal
implicativa com clausulas de conclusão únicaconclusão única
• (P11 ... Pi1 C1) ... (Pn1 ... Pk1 Cn)
L1ch L1
h: • 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 Programação em lógica como formalismo de representação do conhecimentode 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çãoUnificaçã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 HornCláusulas Prolog x Cláusulas de Horn
Fatos Prolog:• Cláusulas de Horn com premissa única T implícitapremissa ú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 disjuntivasimplicitamente 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?West é criminoso? em lógica dos em lógica dos predicadospredicados
Requisitos em inglês1. It is crimimal for an American to
sell weapons to an hostile country
2. Nono owns missiles3. Nono acquires all its missiles
from West4. West is American5. Nono is a nation6. Nono is an enemy of the USA0. Is West a crimimal?
Em lógica da 1a ordem1. 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?West é criminoso? em formal normal implicativaem formal normal implicativa
Em lógica da 1a ordem1. 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 normalamerican(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?West é criminoso? em Prolog 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?West é criminoso? busca 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?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso ?West é criminoso ? backtracking 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?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
West é criminoso?West é criminoso? Encadeamento de regras para trásEncadeamento 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)
Algoritmo da máquina de inferência Algoritmo da máquina de inferência PrologProlog
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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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?West é criminoso? Encadeamento de regras para frenteEncadeamento 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)
Prolog, refutação e resoluçãoProlog, 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 entradalinear 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?West é criminoso? Prova Prolog como Prova Prolog como refutação com resolução SLDrefutaçã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 //102. Resolver 10 com 4:weapon(W) nation(N) hostile(N) sells(west,N,W) F //113. Resolver 11 com 7: missile(W) nation(N) hostile(N) sells(west,N,W) F //124. Resolver 12 com 2b unificando W/m1:nation(N) hostile(N) sells(west,N,m1) F //135. Resolver 13 com 5 unificando N/nono:hostile(nono) sells(west,nono,m1) F //146. Resolver 14 com 8 unificando N/nono:enemy(nono,america) sells(west,nono,m1)
F //157. Resolver 15 com 6: sells(west,nono,m1) F //168. Resolver 16 com 3 unificando W/m1:owns(nono,m1) missile(m1) F //179. Resolver 17 com 2a: missile(m1) F //1810. Resolver 18 com 2b: F
Prolog devolve a primeira respostaProlog 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 Forçar o backtracking para obter todas as respostaspara 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 cascatasBacktracking 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: Prolog puro: sem atribuição, nem predicado de sem atribuição, nem predicado de
igualdadeigualdade Em Prolog, = é o operador de unificaçãounificação explícita:
• é uma consulta consulta lógica que retorno verdadeiro ou falso e potencialmente instância variáveis
• nãonão é um operador de atribuiçãoatribuição como na programação imperativa• nãonão é um predicado de declaraçãodeclaraçã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: listasProlog: 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 Programação relacional:relacional: vários usos do mesmo predicadová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 Programação procedimental x programação em lógicax programação em lógica
1. Modelagem estrutural2. Modelagem comportamental3. Codificar estruturas de
dados4. Codificar passo a passopasso a passo
estruturas de controle5. Compilar/interpretar
programa6. Executar programa
A. Declarar o que é verdade (fatos e regras)
B. Compilar/interpretar programa C. Fazer consulta sobre verdade
de um fato
A = 1+3C = 6
Programação declarativadeclarativa: • 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 foraAspectos de Prolog forada Lógica Clássica de Horn da 1da Lógica Clássica de Horn da 1aa ordem 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éticaProlog: 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 1Prolog: 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 = 2B = 1yes> ?- 1 + A =:= B + 2.Error> ?- A = 2, B = 1, 1 + A =:= B +
2.A = 2B = 1yes
> ?- C = 1 + 2.C = 1+2yes> ?- C is 1 + 2.C = 3yes> ?- C is D, D = 1 + 2.Error.> ?- D = 1 + 2, C is D.D=1+2C=3yes> ?- -1+2 = +(-(1),2).no> ?- -1+2 =:= +(-(1),2).yes
Prolog: exemplos de aritmética 2Prolog: 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 = 1yes?- fac(3,X).X = 6yes?- fac(5,X).X = 120yes?
sum([],0).sum([H|T],N) :- sum(T,M), N is H + M.?- sum([2,1,3,1],S).S = 7yes?- sum([2,10,1],S).S = 13yes?
Evitar backtracking inútil: Evitar backtracking inútil: !! (o Cut) (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
Exemplo de Exemplo de CutCut
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=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
Perigos do CutPerigos do Cut
member(X,[X|_]).member(X,[_|Z]) :- member(X,Z).add2set1(E,Si,_) :-
member[E,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
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]).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 tiposProlog: exemplos de teste de tipos
?- var(X).X = _3yes?- var(2).no ?- var(a).no ?- var(p(a,X)).no ?- nonvar(2), nonvar(p(2,X,a)).X = _11yes?- X is 2 + 3, var(X).no ?- var(X), X is 2 + 3.X = 5yes
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 tiposProlog: 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 1Prolog: 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 2Prolog: 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 loopProlog: 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 completudeHipóteses sobre completudeda base de conhecimentoda 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 Hipótese de mundo fechado (BC suposta completa ):
• se B | S e B | S, então Ask(S) = False
• programação em lógica, sistemas de produção e bancos de dados
Hipótese do mundo fechadoHipó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 fechadoHipótese do mundo fechadoe manutenção da verdadee 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 falhaNegaçã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 paraUso da negação por falha pararaciocínio por defaultraciocí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 = piupiuyes?- ;no.?- voa2(X).no.
Perigos do uso ingênuo da negação por Perigos do uso ingênuo da negação por falhafalha
edge(a,b).sink(X) :- not edge(X,Y).?- sink(a)no.?- sink(b)yes.? sink(X)no.
Estilo recomendado para evitarEstilo recomendado para evitarsemântica não intuitiva e loopssemâ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 Semântica declarativa de programas Prolog 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 Uso dual de Prolog para sistema inteligenteinteligente
Como formalismo de representação do conhecimento
Como linguagem de programação
Base de Conhecimento:Fatos e Regras
Prolog
Maquina deInferência:
Compilador/Interpretador
Prolog
Ask
Tell
Retract
Base de Conhecimento:sentenças emformalismo F
Maquina deInferência
implementandoem Prolog
raciocínio Rem formalismo F
Ask
Tell
Retract
Maquina deInferência:
Compilador/Interpretador
Prolog
Implementação Prolog de máquina de Implementação Prolog de máquina de inferência encadeando regrasinferê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 conhecimentoif hallWet and kitchenDry then leakInBathroomif hallWet and bathroonDry then problemInKitchenif windowClosed or noRain then noWaterFromOutsideif problemInKitchen and noWaterFromOutside then leakInKitchen
Exemplos de consulta?- forwardDerive: problemInKitchenDerive: noWaterFromOutsideDerive: leakInKitchenNo more facts
?- is_true(leak_in_kitchen).yes
Implementação Prolog de máquina de Implementação Prolog de máquina de inferência encadeando regrasinferê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 OOProlog 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 PrologVantagens 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 PrologLimitaçõ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 PrologExtensõ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