Title: Introdu
1Introdução a Programação em Lógica e Prolog
2O 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 - PL unifica
- Engenharia de Software (especificação formal,
linguagens de programação) - Inteligência Artificial (IA) (raciocínio com
Formalismos de Representação do Conhecimento
(FRCs)) - Banco de Dados -- Dedutivos (BDDs)
- Teoria Lógica (TL) das provas
3Metáfora da programação em lógica
- Teoria Lógica Programa BD dedutivo Base de
Conhecimento (BC) - Programar apenas declarar axiomas e regras
- Axiomas da TL
- fatos da BC
- parte extensional do BDD
- dados explícitos de um BD tradicional
- Regras da TL (e da BC)
- parte intencional do BDD
- Teoremas da TL
- deduzidos a partir dos axiomas e das regras
- dados implícitos do BDD
4Aplicações da programação em lógica
- Inteligência Artificial
- Representação do conhecimento
- Sistemas especialistas
- Provadores de teoremas
- Aprendizagem de máquina
- Processamento de linguagem natural
- Sistemas multi-agentes
- Robótica
- 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
5Programação procedimental x programação
declarativa
- 1. Escolher linguagem de especificação formal
(LE) - 2. Especificar formalmente os requisitos na LE
- 3. Escolher linguagem de programação (LP)
- 4. Codificar estruturas de dados na LP
- 5. Codificar passo a passo estruturas de
controle na LP - 6. Escolher/escrever compilador da LP
- 7. Executar programa
- Escolher FRC (1,3)
- Declarar estruturas de conhecimento no FRC (2,4)
- Escolher/escrever motor de inferência para FRC
(6) - Consultar base de conhecimento sobre verdade de
um fato (7) - foi declarado?
- pode ser deduzido?
- reposta
- "booleana (L0, L1)
- instanciação de variáveis (L1)
6Revisão de L1 sintaxe
- Fórmula Fórmula-Atômica
- (Fórmula)
- ù Fórmula
- Quantificador Variável, ... Fórmula,
- Fórmula Conectivo Fórmula
- Fórmula-Atômica Predicado(Termo,...) Termo
Termo - Termo Função(termo,...)
- Constante
- Variável
- Conectivo Ú Ù Þ Û
- Quantificador " !
- Constante Wumpus Agente Flecha ...
- Variável x y wumpus agente ...
- Predicado Adjacente Vivo ...
- Função Em Brisa ...
7Revisão de L1 mecanismo de inferência completo
(para verificação)
Fórmula da lógica de 1a. ordem
Fórmula na forma normal
Refutação aplicação repetitiva da regra de
resolução Problema a cada passo, como escolher o
par de fórmulas a resolver?
8Revisão de L1 forma normal e cláusulas de Horn
- Def
- Thm
- Cláusula de Horn é uma formula de L1
- em forma normal implicativa, com uma conclusão
única e positiva - ie, da forma P1 ? ... ? Pn ? C
- Muitas mas nem todas as formulas de L1 tem
conjunto equivalente de cláusulas de Horn, cex - Lógica de Horn
9Revisão de L1 refutação, unificação e
substituição
- Motivação de provas por refutação
- KB Þ P Û ØØ(KB Þ P)
- Û ØØ(ØKB Ú P)
- Û Ø(KB Ù Ø P)
- Û Ø(KB Ù Ø P) Ú False
- Û (KB Ù Ø P) Þ False
- Substituição de variáveis de uma formula f
- conjunto de pares Var/const ou Var1/Var2
- Unificação de 2 formulas f e g
- substituição S das variáveis de f e g tal que
S(f)S(g) - 2 resultados
- S
- rS(f)s(g)
-
-
10Revisão de L1 unificação posicional
- 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
11Revisão de L1 regra de resolução
12Cláusulas Prolog e Cláusulas de Horn
- Fatos Prolog
- cláusulas de Horn com premissa única T implícita
- ex C. ltgt T gt C
- Regras Prolog
- outras cláusulas de Horn
- ex C - P1, ... ,Pn. ltgt P1 ... Pn gt C
- Premissas de cláusulas com a mesma conclusão são
implicitamente disjuntivas - ex C - P1, ... ,Pn., C - Q1, ... ,Qm
- ltgt (P1 ... Pn) v (Q1 ... Qm) gt C
- Escopo das variáveis uma cláusula
13West é criminoso? em L1
- Requisitos em inglês
- 1. It is crimimal for an American to sell weapons
to an hostile country - 2. Nono owns missiles
- 3. Nono acquires all its missiles from West
- 4. West is American
- 5. Nono is a nation
- 6. Nono is an enemy of the USA
- 0. Is West a crimimal?
- ????
- Em lógica da 1a ordem
- 1. ? P,W,N american(P) ? weapon(W) ? nation(N) ?
hostile(N) ? sells(P,N,W) ? criminal(P) - 2. ? W owns(nono,W) ? missile(W)
- 3. ? W owns(nono,W) ? missile(W) ?
sells(west,nono,W) - 7. ? X missile(W) ? weapon(W)
- 8. ? X enemy(N,america) ? hostile(N)
- 4. american(west)
- 5. nation(nono)
- 6. enemy(nono,america)
- 9. nation(america)
14West é criminoso? em formal normal
- Em lógica da 1a ordem
- 1. ? P,W,N american(P) ? weapon(W) ? nation(N) ?
hostile(N) ? sells(P,N,W) ? criminal(P) - 2. ? W owns(nono,W) ? missile(W)
- 3. ? W owns(nono,W) ? missile(W) ?
sells(west,nono,W) - 7. ? X missile(W) ? weapon(W)
- 8. ? X enemy(N,america) ? hostile(N)
- 4. american(west)
- 5. nation(nono)
- 6. enemy(nono,america)
- 9. nation(america)
- Em formal normal
- american(P) ? weapon(W) ? nation(N) ?
hostile(N) ? sells(P,N,W) ? criminal(P) - owns(nono,m1)
- missile(m1)
- owns(nono,W) ? missile(W) ? sells(west,nono,W)
- missile(W) ? weapon(W)
- enemy(N,america) ? hostile(N)
- american(west)
- nation(nono)
- enemy(nono,america)
- nation(america)
15West é criminoso? em Prolog
- Em Lógica de Horn
- american(P) ? weapon(W) ? nation(N) ?
hostile(N) ? sells(P,N,W) gt 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).
16West é criminoso? busca
- criminal(P) - american(P), weapon(W), nation(N),
hostile(N), sells(P,N,W). - owns(nono,m1).
- missile(m1).
- sells(west,nono,W) - owns(nono,W), missile(W).
- weapon(W) - missile(W).
- hostile(N) - enemy(N,america).
- american(west).
- nation(nono).
- enemy(nono,america).
- nation(america).
- criminal(west)? lt- yes.
- american(west)? -gt yes.
- weapon(W)? lt- W m1.
- missile(W)? -gt W m1.
- nation(N)? -gt N nono.
- hostile(nono)? lt- yes.
- enemy(nono,america)? -gt yes.
- sells(west,nono,m1)? lt- yes.
- owns(nono,m1)? -gt yes.
- missile(m1)? -gt yes.
17West é criminoso? backtracking
- criminal(P) - american(P), weapon(W), nation(N),
hostile(N), sells(P,N,W). - owns(nono,m1).
- missile(m1).
- sells(west,nono,W) - owns(nono,W), missile(W).
- weapon(W) - missile(W).
- hostile(N) - enemy(N,america).
- american(west).
- nation(america).
- enemy(nono,america).
- nation(nono).
- criminal(west)? lt- yes.
- american(west)? -gt yes.
- weapon(W)? lt- W m1.
- missile(W)? -gt W m1.
- nation(N)? -gt N america.
- hostile(america)? lt- no.
- enemy(america,america)? -gt no.
- backtrack nation(N),
- N \ america? -gt N nono.
- hostile(nono)? lt- yes.
- enemy(nono,america)? -gt yes.
- sells(west,nono,m1)? lt- yes.
- owns(nono,m1)? -gt yes.
- missile(nono,m1)? -gt yes.
18Interpretador Prolog controle e busca
- Aplica regra de resolução
- com estratégia linear (sempre tenta unificar
ultimo fato a provar com a conclusão de uma
cláusula do programa), - na ordem de escritura das cláusulas no programa,
- com encadeamento de regras para trás,
- busca em profundidade e
- da esquerda para direita das premissas das
cláusulas, - e com backtracking sistemático e linear quando a
unificação falha, - e sem occur-check na unificação.
- Estratégia eficiente mas incompleta.
19Prolog 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.
-
20Forçar o backtracking para obter todas as
respostas
- g1(a).
- g21(a).
- g3(a).
- g4(a).
- g1(b).
- g21(b).
- g22(b).
- g3(b).
- g(X) - g1(X), g2(X).
- g(X) - g3(X), g4(X).
- g2(X) - g21(X), g22(X).
- g(U)? lt- U b.
- g1(U)? -gt U a.
- g2(a)? lt- no.
- g21(a)? -gt yes.
- g22(a)? -gt no.
- g1(U), U \ a? -gt U b.
- g2(b)? lt- yes.
- g21(b)? -gt yes.
- g22(b)? -gt yes.
-
- g1(U), U \ a,b ? -gt no.
21Backtracking 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? lt- U a.
- g3(U)? -gt U a.
- g4(a)? -gt yes.
-
- g3(U), U \ a? -gt U b.
- g4(b)? -gt no.
- g3(U), U \ a,b? -gt no.
- g(U), g \ g1,g2 g3,g4? -gt no.
22Prolog sintaxe 1
- fato -gt fa. (abrev. para Formula Atômica)
- regra -gt fa0 - fa1, ... , faN.
- consulta -gt fa1, ... , faN.
- fa -gt pred(termo1, ... , termoN) preop termo1
termo2 - termo1 inop termo2 termo1 termo2
postop - termo -gt constante variável fa
- constante -gt átomos numeros
- pred -gt átomo
- Ao invés de L1
- nenhuma distinção entre predicados e funções
- ausência da igualdade semântica
23Prolog sintaxe 2
- variável ex G, Glr, geber-ramalho, 1geber, _glr,
_ - átomo ex g, glr, gt, geber_ramalho, geber1,
geber ramalho - número ex 23
- termos, fatos, regras e consultas sem variáveis
- instanciados (ground)
- ex. person(bob,40,cs).
- termos, fatos e regras com variáveis
- universais
- ex. pai(X,adao).
- ancestral(X,A) - pai(X,P),
ancestral(P,A). - consultas com variáveis
- existenciais
- ex. ? pai(F,P).
24Igualdade x unificação exemplos
- ?- geber senior -gt no.
- ?- prof(X,disc(Y,dept(di,ufpe)))
prof(geber,disc(ia,Z)). - -gt X geber, Y ia, Z dept(di,ufpe).
- ?- prof(X,disc(Y,dept(di,ufpe)))
prof(geber,disc(ia,Z). -gt no. - ?- prof(X,disc(Y,dept(di,ufpe)))
prof(U,disc(V,dept(di,ufpe))). -gt no. - ?- prof(X,disc(Y,dept(di,ufpe)))
prof(X,disc(Y,dept(di,ufpe))). -gt yes. - prof(ia,di,ufpe,geber).
- musico(senior).
- ?- geber senior, prof(ia,di,ufpe,X),
musico(X). -gt 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). -gt X
pessoa(geber,senior).
25Prolog 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) HeadTail
- Head a, Tail b,X,p(Y,C)
- ?- p(X),a,q(b,c) HT1T2
- H p(X), T1 a, T2 q(b,c)
- member(X,X_).
- member(X,YZ) - member(X,Z).
- ?- member(b,a,b,c) -gt yes.
- ?- member(X,a,b,c) -gt X a X b X
c no.
26Evitar backtracking inútil ! (o cut)
- op built-in de pruning, logicalmente 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 -gt N
- permite backtracking N -gt M, Q -gt P,
- D -gt (R xor Q), (P xor R) -gt B
- R tentado
- unicamente se M ou N falha
- nunca se P ou Q falha
27Cut exemplo
- f1(X,0) - X lt 3.
- f1(X,2) - 3 lt X, X lt 6.
- f1(X,4) - 6 lt X.
- f1(1,Y), 2 lt Y? lt- no
- f1(1,Y)? -gt X 1, Y 0
- 1 lt 3? -gt yes
- 2 lt 0? -gt no
- f1(1,Y)? -gt X 1, Y 2
- 3 lt 1? -gt no
- f1(1,Y)? -gt X 1, Y 4
- 6 lt 1? -gt no
- f2(X,0) - X lt 3, !.
- f2(X,2) - 3 lt X, X lt 6, !.
- f2(X,4) - 6 lt X, !.
- f2(1,Y), 2 lt Y? lt- no
- f2(1,Y)? -gt X 1, Y 0
- 1 lt 3? -gt yes
- 2 lt 0? -gt no
28Cut exemplo (cont.)
- f3(X,0) - X lt 3, !.
- f3(X,2) - X lt 6, !.
- f3(X,4).
- ?- f3(1,Y).
- Y 0
- ?-
- no.
- ?-
- Esses cuts modificam até a semântica declarativa
do programa
- f4(X,0) - X lt 3.
- f4(X,2) - X lt 6.
- f4(X,4).
- ?- f4(1,Y).
- Y 0
- ?-
- Y 2.
- ?-
29Hipótese do mundo fechado
- Ao invés de L1, Prolog não permite nem fatos, nem
conclusões de regras negativos, cex - animal_lover(geber).
- kill(X,Y) - animal_lover(X), animal(Y).
- Princípio de economia
- declarar e deduzir apenas o que é verdadeiro,
- supor que tudo que não é mencionado nem deduzível
é falso (hipótese do mundo fechado) - Operador de negação por falha em premissas
- not p(X) verificado sse p(X) falha
- / de p(X) verificado sse p(X) no BDE ou na
conclusão de uma regra com premissas verificadas
30Negação por Falha (NF) 1
- Permite raciocínio não monótono, ex
- ave(piupiu).
- papa_leguas(bipbip).
- ave(X) - papa_leguas(X).
- voa1(X) - ave(X), not papa_leguas(X).
- voa1(X)? -gt X piupiu no.
- Sem semântica declarativa em L1
- Depende da ordem, ex
- voa2(X) - not papa_leguas(X), ave(X).
- voa2(X)? -gt no.
31Negação por Falha 2
- NF pode ser implementado apenas com !, fail
(nunca verificado) e true (sempre verificado),
ex - voa3(X) - papa_leguas(X), !, fail.
- voa3(X) - ave(X).
- não(X) - X, !, fail true.
- NF torna resolução de Prolog (Select Depth-1st
Linearly w/ Negation as Failure (SDLNF))
inconsistente - ex edge(a,b).
- sink(X) - not edge(X,Y).
- sink(a)? -gt no.
- sink(b)? -gt yes.
- sink(X)? -gt no.
32Prolog aritmética
- 3 tipos de operadores built-in aritméticos
- calculadores (n-ários infixos) , -, , /, mod
- comparadores (binários infixos) , \, lt, gt,
lt, gt - 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
33Prolog exemplos de aritmética 1
- gt ?- 1 1 lt 1 2.
- yes
- gt ?- 1 3 2 2.
- yes
- gt ?- 1 3 2 2.
- no
- gt ?- 1 A B 2.
- A 2
- B 1
- gt ?- 1 A B 2.
- Error
- gt ?- A 2, B 1, 1 A B 2.
- A 2
- B 1
- gt ?- C 1 2.
- C 12
- gt ?- C 1 2.
- no
- gt ?- C is 1 2.
- C 3
- gt ?- C is D, D 1 2.
- Error.
- gt ?- D 1 2, C is D.
- D12
- C3
- gt ?- -12 (-(1),2).
- no
- gt ?- -12 (-(1),2).
- yes
34Prolog exemplos de aritmética 2
- fac(0,1) - !.
- fac(I,O) - I1 is I - 1,
- fac(I1,O1), O is I O1.
- ?- fac(1,X).
- X 1
- ?- fac(3,X).
- X 6
- ?- fac(5,X).
- X 120
- sum(,0).
- sum(HT,N) - sum(T,M),
- N is H M.
- ?- sum(2,1,3,1,S).
- S 7
- ?- sum(2,10,1,S).
- S 13
35Prolog exemplos de teste de tipos
- ?- var(X).
- X _3
- ?- var(2).
- no
- ?- var(a).
- no
- ?- var(p(a,X)).
- no
- ?- nonvar(2), nonvar(p(2,X,a)).
- X _11
- ?- X is 2 3, var(X).
- no
- ?- var(X), X is 2 3.
- X 5
- ?-
- numberp(Term) - integer(Term).
- numberp(Term) - real(Term).
- structp(Term) - nonvar(Term),
- not atomic(Term).
- listp(Term) - nonvar(Term),
- listp1(term).
- listp1().
- listp1(HT) - listp1(T).
- factp(Term) - strucp(Term),
- not listp(Term).
36Prolog 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
-
37Prolog 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
38Prolog 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
- ?
39Prolog 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.
40Prolog x sistemas de produção controle
- Raciocino dirigido pelo objetivo (e não pelos
dados) - Regras encadeada para trás (e não para frente)
- Busca em de cima para baixo e em profundidade na
árvore de prova (e não de baixo para cima e em
largura) - Sempre dispara 1a regra aplicável encontrada (ie,
sem resolução de conflitos) - Backtracking quando 1a regra leva a uma falha
41Prolog x sistemas de produçãopoder expressivo
- Fatos universais (e não apenas instanciados)
- ex ancestral(X,adão).
- Unificação (e não apenas matching)
- bidirecional
- variáveis lógicas podem ser instanciadas com
termos compostos (e não apenas atómicos) - ex ?- prof(X,disc(ia,dept(di,ufpe)))
- prof(pessoa(geber,Y),disc(ia,Z))
- -gt X pessoa(geber,Y), Z
dept(di,ufpe).
42Prolog x programação imperativa 1
- Interativo
- compilação transparente integrada na
interpretação - rodar programa consultar um BD
- Gerenciamento automático da memória
- Mecanismo único de manipulação de dados --
unificação de termos lógicos -- implementando - atribuição de valor
- passagem de parâmetros
- alocação de estruturas
- leitura e escritura em campos de estruturas
43Prolog x programação imperativa 2
- Estrutura de dados única termo Prolog
- variáveis lógicas sem tipo estático
- Controle implícito built-in na estrategia de
resolução, ex Em programação imperativa - procedure c(E)
- const e0tipoE0
- var EtipoE, S0tipoS0, l1tipo-I1, S1tipoS1
- do if E e0 then do S0 call p0(e0) return
S0 end - else do I1 call p1(E) S1 call
p2(E,l1) return S1 end - end
- Em Prolog
- c(e0,S0) - p0(e0,S0).
- c(E,S1) - p1(E,I1), p2(E,I1,S1).
44Prolog x programação funcional 1
- Matematicamente, predicado relação
- não-determinismo
- respostas múltiplas (disponíveis por
backtracking), - unificação e busca built-in,
- livra o programador da implementação do controle
- bi-direcionalidade
- cada argumento pode ser entrada ou saída,
dependendo do contexto de chamada, - única definição para usos diferentes
verificador, instanciador, resolvedor de
restrições, enumerador. - integração imediata com BD relacional
45Prolog x programação funcional 2
- Append em Haskell
- append L L
- append HT L H append T L
- ?- append(a,b,c,d)
- a,b,c,d
- Append em Prolog
- append(,L,L).
- append(HT1,L,HT2) - append(T1,L,T2).
- ?- append(a,b,c,d,R).
- R a,b,c,d.
- Append relacional codifica 8 funções
46Vários usos do mesmo predicado
- verificador
- ?- append(a,b,c,a,b,c). -gt yes.
- ?- append(a,b,c,a). -gt no.
- instanciador
- ?- append(a,b,c,R). -gt R a,b,c.
- ?- append(H,c,a,b,c). -gt H a,b.
- resolvedor de restrições
- ?- append(X,Y,a,b,c). -gt X , Y a,b,c
- -gt X a,
Y b,c ... - enumerador
- ?- append(X,Y,Z). -gt X , Y , Z
- -gt X _, Y ,
Z _ ...
47Prolog x programação OO
- Funcionalidades built-in
- unificação e busca
- - tipos, herânça e encapsulação
- 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
48Prolog x programação OO exemplo
- Em OO
- ptsubclass_of planobj
- attrsX inst_of int, Y inst_of int
- metsright(Pt inst_of pt) return self.X gt
Pt.X - pt1inst_of pt attrsX 0, Y 0
- pt2inst_of pt attrsX 1, Y 1
- ?- pt1.right(pt2) -gt no.
- Em Prolog
- pt(0,0).
- pt(1,1).
- planobj(pt(_,_)).
- right(pt(X1,_),pt(X2,_) - X1 gt X2.
- ?- right(pt(0,0),pt(1,1)). -gt no.
49Programação em Lógica Disciplina Eletiva de
Graduação e Pós-Graduação
- Prolog aprofundado
- Programação por resolução de restrições a base
lógica (Constraint Logic Programming) - extensão de Prolog com resoluções de inequações e
equações - restrições quantitativas (N, Z, R, C) ou
qualitativas (tipos, ontologias) - Escalonamento, raciocínio espacial, otimização,
automação industrial, CAD/CAM, música
computacional - Programação em lógica funcional
- Programação em lógica orientada a objetos
- Programação multiparadigma a base lógica
- lógica restrições funcional OO
- todo a IA e mais !
50Programação em Lógica Disciplina Eletiva de
Graduação e Pós-Graduação
- Programação em lógica para engenharia de software
- especificação formal ? prototipágem rápido
- aceleração do modelo de desenvolvimento em
espiral - Programação em lógica probabilista e bayesiana
- raciocínio com incerteza
- Programação em lógica indutiva
- aprendizagem de máquina, agentes adaptativos,
mineração de dados, descoberta de conhecimento
em BD,programação automática, bio-informática - Programação em lógica multiagentes
- sistemas inteligentes distribuídos
- comercio eletrônico
- jogos, competição de futebol de robôs
51Programação em Lógica Disciplina Eletiva de
Graduação e Pós-Graduação
- Bancos de dados dedutivos
- descoberta de conhecimento em BD, sistemas
especialistas de grande porte, servidores de
conhecimento ontológico - Bancos de dados dedutivos orientada a objetos
- Bancos de dados dedutivos temporais
- Bancos de dados de restrições
- GIS, BD espaciais, BD espaço-temporais,
integração de dados e interoperablidade - Bancos de dados de restrições orientada a objetos
- toda a IA de grande escala e mais !
- Bancos de dados probabilistas
- BD de sensores, data warehousing, integração de
dados com fontes não confiáveis ou mutualmente
inconsistentes,
52Programação em Lógica Disciplina Eletiva de
Graduação e Pós-Graduação
- Gramáticas lógicas
- Parser e gerador de linguagem built-in em Prolog
- Basta desenvolver gramática (i.e., como com lex e
yacc) - Mineração da web, extração de informação na
Internet, compilação - tradução automática, geração automática de
resumos, chatterbots - APIs Prolog/Java e Prolog/XML
- sistemas de informação inteligentes distribuídos
e heterogêneos a infra-estrutura web - integração de dados, interoperabilidade entre
sistemas, mediadores, data warehousing - comercio eletrônico
- agentes inteligentes de recuperação,
classificação, extração e notificação de
informação na web, na Internet, em Intranet - inteligência na computação pervasiva
- toda a IA embutida e mais !
53Programação em Lógica Disciplina Eletiva de
Graduação e Pós-Graduação
- Aplicação fio condutor para ilustração dos
conceitos
54Programação em Lógica Disciplina Eletiva de
Graduação e Pós-Graduação
55Exercícios
- A terrível novela
- em lógica da 1a ordem
- em Prolog
- O banco de dados acadêmico
- em Prolog
- em lógica da 1a ordem
- A curiosidade matou o gato? em Prolog
- Coloração de mapa em Prolog
56A terrível novela requisitos em inglês
- 1. A soap opera is a TV show whose characters
include a husband, a wife and a mailman such
that - 2. the wife and the mailman blackmail each other
- 3. everybody is either alcoholic, drug addict or
gay - 4. Dick is gay, Jane is alcoholic and Harry is a
drug addict - 5. the wife is always an alcoholic and the
long-lost sister of her husband - 6. the husband is always called Dick and the
lover of the mailman - 7. the long-lost sister of any gay is called
either Jane or Cleopatra - 8. Harry is the lover of every gay
- 9. Jane blackmails every drug addicted lover of
Dick - 10. soap operas are invariably terrible!
- 0. Who are the characters of a terrible TV show?
57O BD acadêmico requisitos em inglês
- 1. Bob is 40 and the manager of the CS
department. - 2. His assistants are John and Sally.
- 3. Marys highest degree is an MS and she works
at the CS department. - 4. She co-authored with her boss and her
friends, John and Sally, a paper published in the
Journal of the ACM. - 5. Phil is a faculty, who published a paper on
F-Logic at a Conference of the ACM, jointly with
Mary and Bob. - 6. Every faculty is a midaged person who writes
article, makes in the average 50,000 a year and
owns a degree of some kind, typically a PhD. - 7. One is considered midage if one is between 30
and 50 years old. - 8. A facultys boss is both a faculty and a
manager. - 9. Friends and children of a person are also
persons.
- 10. Every department has a manager who is an
employee and assistants who are both employees
and students - 11. A boss is an employee who is the manager of
another employee of the same department. - 12. A joint work is a paper that is written by
two faculties - 13. There are three types of papers technical
reports, journal papers and conference papers - 0a Who are the midaged employees of the CS
department and who are their boss? - 0b Who published jointly with Mary in the
Journal of the ACM? - 0c Where did Mary published joint work with
Phil?
58A curiosidade matou o gato?
- Requisitos em inglês
- 1. Jack owns a dog.
- 2. Every dog owner is an animal lover.
- 3. No animal lover kills an animal.
- 4. Either Jack or curiosity killed Tuna
- 5. Tuna is a cat
- 0. Did curiosity kill the cat?
- Em L1
- 1. x Dog(x) Ù Owns(Jack,x)
- 2. "x (y Dog(y) Ù Owns(x,y)) Þ AnimalLover(x)
- 3. "x AnimalLover(x) Þ "y Animal(y) Þ ØKills(x,y)
- 4. Kills(Jack, Tuna) Ú Kills(Curiosity, Tuna)
- 5. Cat(Tuna)
- 6. "x Cat(x) Þ Animal(x)
- 0. Kills(Curiosity,Tuna)
59Coloração de mapa
- Colorir mapa tal que
- países adjacentes
- de cores diferentes
- Instância de problema de resolução de restrições
B
A
B
A
C
C
D
D
F
E
F
E