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

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

Embed Size (px)

Citation preview

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

Introdução a Introdução a Programação em Lógica e PrologProgramação em Lógica e Prolog

Jacques RobinCIn-UFPE

Page 2: Introdução a Programação em Lógica e Prolog Jacques Robin CIn-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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ?

?

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

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)

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

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

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

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

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

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

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

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

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

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)

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

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)

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

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

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

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.

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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.

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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

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

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

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

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

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

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)

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

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)

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

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)

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

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

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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)

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

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

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

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

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

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

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

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.

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

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.

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

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

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

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.

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

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!

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

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 !

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

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

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

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

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

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

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

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?

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

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

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

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

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

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.

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

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

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

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

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

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

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

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 ?

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

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.

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

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

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

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

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

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

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

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

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

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.

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

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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