Escolar Documentos
Profissional Documentos
Cultura Documentos
A Mathematical
Introduction to Logic,
Logic
Herbert B. Enderton
Second Edition
Bibliografia
Introduction to
Mathematical Logic,
Elliott Mendelson
Fourth Edition
Lógica
Ló i para Ciência
Ciê i dad
Computação,
J ã Nunes
João N d SSouza
de
Avaliação
• VE : 1 ou 2
• VI : ?
• 1 trabalho
b lh em Prolog
l
• 1 VC
• 1 VF
Programação
g ç em lógica
g
1. Introdução ‐ PROLOG
2. Resolução SLD.
3. Semânticas de Prologg
Cálculo proposicional
1. Consequência semântica (avaliação).
2. Consequência
q lógica
g ((dedução
ç natural).)
Lógica de primeira ordem
1. Consequência semântica (interpretação).
2. Consequência
q lógica
g ((dedução
ç natural).)
Outras formas de derivação (consequência lógica)
1. Sistema axiomático para o cálculo proposicional e a lógica de primeira
ordem.
2. Tableaux semântico para o cálculo proposicional e lógica de primeira
ordem.
3. Resolução para o cálculo proposicional e a lógica de primeira ordem.
Lógica de descrição
Problemas em Prolog
Observação
Prolog
• Prologg é uma linguagem
g g de p
programação
g ç “declarativa” q
que se
enquadra no paradigma de Programação em Lógica
Matemática.
EExemplo:
l
passaro(X) :‐ animal(X), tem_penas(X).
O usuário entraria o trajeto (podendo ser passando por várias cidades) e suas
preferências.
e) Jogo de damas.
Tabuleiro com configuração inicial. Um usuário jogar com o sistema. Colocar
diferentes graus de “inteligência”.
Temas para o trabalho
g) Jogo de dominó com 1 jogador. Colocar diferentes graus de “inteligência”.
h) O problema social do jogador de golfe (Social Golfer Problem)
Consiste agendar g*s jogadores de golfe em g grupos de s de jogadores em w
semanas,, de forma q
que todo jjogador
g jjogue
g no mesmo ggrupo p de outro jogador
j g
exatamente do uma vez.
N
Nesse caso w a melhor
lh solução
l ã encontrada
d (w
( max)) é w=9
9.
Continuação
O exemplo 7‐5‐3 é equivalente ao problema de Thomas Kirkman
Quantos dias são necessários para que 15 alunas formem por dia 5 grupos de 3
meninas, de forma cada menina esteja no mesmo grupo de qualquer outra em
apenas um dia ?
grupo 1 grupo 2 grupo 3 grupo 4 grupo 5
Dia 1 ABC DEF GHI JKL MNO
Dia 2 ADG BEJ CFM HKN ILO
Dia 3 AEN BDO CHL FIK GJM
Dia 4 AIM BGL CDK EHO FJN
Dia 5 AHJ BKM CEI DLN FGO
Dia 6 AFL BIN CJO DHM EGK
Dia 7 AKO BFH CGN DIJ ELM
http://www.maa.org/editorial/mathgames/mathgames_08_14_07.html
http://www.cs.brown.edu/~sello/golf.html
Outros jogos
Outros jogos possíveis que possuem as características desejadas são:
a) Blokus (http://www.blokus.com/)
b) Blokus Trigon (http://www.blokus.com/)
c) Sputnik (Gigamic)
d) Katamino (Gigamic)
e) Ringgz (Gigamic)
f) Gobblet
G bbl (Gigamic)
(Gi i )
g) Quads (Gigamic)
h) Quoridor Kid (Gigamic)
i) Tortuga (Gigamic)
j) Trax (http://www.traxgame.com/)
k) Tantrix (http://www.tantrix.com/)
(http://www tantrix com/) x/automatonwars/)
Outros jogos
l) Cathedral (http://www.cathedral‐game.co.nz/)
m)) D i f t the
Desinfect th Core
C (htt
(http://www.thejab.com/newsite/balm.html)
// th j b / it /b l ht l)
n) Cards Labyrinth (Labirinto Mágico) (Ravensburg)
o) Gipf (Gipf Project)
p) Zertz (Gipf Project)
q) Dvonn (Gipf Project)
r) Yinch (Gipf Project)
s) AutomatonWars (http://juegos.terra.com.m
Outros
O t sites
it
http://www.boardgamegeek.com/ http://www.gigamic.com/
p // gp /
http://www.gipf.com/ http://www.brainbashers.com/
p // /
http://www.mathpuzzle.com/
Prolog – Exemplo 1
pai_mae(ana,carlos).
pai mae(ana,carlos).
pai_mae(paulo,maria).
pai mae(carlos joao).
pai_mae(carlos, joao)
pai_mae(ana,paulo).
pai mae(joao roberto)
pai_mae(joao,roberto).
avo(X,Y) :‐ pai_mae(X,Z), pai_mae(Z,Y).
Consulta ou objetivo
:‐ avo(ana,joao).
:‐ avo(ana,X).
( X)
Exemplo 2
p(ana,carlos).
p(paulo,maria).
p(carlos joao)
p(carlos, joao).
p(ana,paulo).
p(joao roberto)
p(joao,roberto).
anc(X,Y) :‐ p(X,Y).
anc(X Y) ::‐ p(X,Z),
anc(X,Y) p(X Z) anc (Z
(Z,Y).
Y)
Exercícios
Ex1 ) Fazer a arvore de derivação SLD no
exemplo 2 para o goal :‐ anc ( ana,Y).
p.
r.
t :‐ r.
q.
u :‐ p, q, t.
Consulta :‐ u
Arvore de resolução SLD é ......
Resolução SLD
p( , ) :‐ p(
p(X,Y) p(X,Z),
, ), p(
p(Z,Y).
, )
p(X,Y) :‐ m(X,Y).
p(X,Y) :‐ f(X,Y).
f(adam,tom).
f(adam,mary).
f(tom,david).
( )
m(mary,anne).
Consulta :‐ p(adam,Y).
Arvore de resolução SLD é ....
Predicados built‐in
built in
• op
p de unificação
ç =.
• teste e conversão de tipos: atom, integer, real, var, name, etc.
• controle de busca: !, fail, true, repeat
• negação por falha: not
• op aritméticos: is, +, ‐, *, /, rem, mod , ^ , etc.
• op aritméticos de comparação: <, >, =< , >=, =:= , =\=. \
• entrada/saída: read, write, consult, etc.
• meta programação: assert,
meta‐programação: assert retract
retract, call
• Conjuntos is_set(+Set), is_list(+List), list_to_set(+List, ‐
Set),subset(+Subset, +Set), union(+Set1, +Set2, ‐Set3), etc
Operadores não Lógicos
X = Y , X is Y e X =:= Y são diferentes.
:‐ X = 1 + 2. :‐ X is 1 + 2.
resp: X = 1 + 2 resp: X = 3
:‐ X is 3/2, Y is 3 mod 2. :‐ 277 * 37 > 10000.
resp: X=1.5 Y=1 resp: true
:‐ 1+22 =:= 2
2+1. :‐ 1+22 = 2+1.
2
resp: true resp: false
:‐ 1+A = B+2. : ‐ X=2, Y is X+2, X =\= Y , Z = 8
resp: A=2 B=1 resp: X = 2,Y = 4,Z = 8.
:‐ Y =:= 1. :‐ X=2, Y is X+2, X =:= Y.
ERROR: =:=/2:
: /2: resp: false
:‐ N=2, M=1, N =:= M+1. resp: N = 2,M = 1.
Leitura ex. 1
pergunta:‐ repeat,
write('Quer
( um restaurante no centro?'),nl,
)
write('1 ‐ Sim'),nl,
write('2 ‐ Nao'),nl,
write('3 ‐ Sair'),nl,
Sair') nl
read(X),
processa(X),
X==3 ! write('Adeus')
X==3,!,write( Adeus ).
processa(1):‐assert(fact(restaurante_a)),!.
processa(2):‐assert(fact(restaurante_b)),!.
p
processa(3):‐!.
( )
processa(_):‐write('Opcao invalida!'),nl,nl.
: pergunta. 2. 3. :‐fact(X).
Leitura ex. 2
pergunta:‐
p g repeat,
p ,
write('Entre com um nome e sobrenome'),nl,
read(X),
write('entre com a favorita dessa pessoa'),nl,
read(Y),
assert(cor(X,Y)),
( ( ))
write('Entre com s para sair e c para continuar'),nl,
read(Z),
read(Z)
Z== s, !,write('Adeus').
Torre de Hanoi
move(0,
(0 _, _, _)) :‐ !.
!
move(N, A
move(N A, B,
B C) :‐ M is N‐1,
N‐1 move(M
move(M, A,
A CC, B)
B), inform(A,
inform(A B),
B)
move(M, C, B, A).
As consultas em Prolog:
:‐ [X | Y] = [a, b, c]. X=a Y=[b, c]
::‐ [X,
[X Y,
Y Z] = [a,
[a bb, c,
c d].
d] false
:‐ [X | [Y | Z]] = [a, b, c, d]. X=a Y=b Z=[c, d]
::‐ [X , Y | Z ] = [a,
[a bb, c,
c d].
d] X=a Y=b Z=[c,
Z=[c d]
Prolog com Lista
membro(X,[X|
( ,[ |_])
]).
membro(X,[Y|Z]) :‐ membro(X,Z).
Consulta
:‐ membro(b,[a,b,c]) .
‐> sim
: membro(X
:‐ membro(X,[a,b,c])
[a b c]) .
‐> X = a ; X = b ; X = c ; no.
Arvore de resolução SLD é ....
Lista (cont)
Escreva um programa que conte os elementos
de uma lista.
lista(0,[]).
lista(X,[
( ,[_||L])
]) :‐ lista(Y,L),
( , ), X is Y+1 .
Listas (cont)
Predicado alpha
alpha([ ]],Ys)
Ys) .
alpha([X|Xs],[X|Ys]) :‐ alpha(Xs,Ys).
Consulta: :‐ alpha([a,b],[a,b,c,d]). Arvore de resolução SLD é ....
Predicado append1(Xs,Ys,Zs)
append1([ ],Ys,Ys)
] Ys Ys) .
append1([X|Xs],Ys,[X|Zs]) :‐ append1(Xs,Ys,Zs).
Consultas: :‐ append1 ([a,b],[c,d],[a,b,c,d]).
:‐ append1([a,b],[c,d],[a,b,c,d]). :‐ append1([a,b],[c,d],Y).
:‐ append1([a,b],Y,[a,b,c,d]). :‐ append1(Y,[c,d],[a,b,c,d]).
As arvores de resolução SLD são ....
(note a diferença do resultado da terceira e quarta consulta)
Listas (cont)
Notação
ç com _
membro(X,[ _|Y]):‐ membro(X,Y).
Exercício
Verifique se podemos definir o predicado membro como função
do predicado append,
append usando apenas a regra
membro(X,Y):‐ append(_,[X|_],Y).
Listas (cont)
Exercício
rem1(X,[X|L],L).
rem1(X,[Y|L],[Y|L1]) :‐ rem1(X,L,L1).
:‐ rem1(a,[a,b,a],L).
1( [ b ] L) resp: L = [b,
[b a]] ; L = [a,
[ b] ; false.
f l
Exercício
ultimo( X,[ X ]) .
ultimo(X, [ _|Y]) :‐ ultimo(X,Y)
:‐ ultimo(X,[a,b,c,d,a]). X = a ; false.
:‐ ultimo(X,[a,b,c,[d,a]]). X = [d,a] ;false.
::‐ ultimo(X,[a,b,c|[d,a]]).
ultimo(X [a b c|[d a]]) X = a ;false.
;false
Remove (cont)
Exercício
rem2(X,[ ],[ ]).
rem2(X,[X|L],L1) :‐ rem2(X,L,L1).
rem2(X,[Y|L],[Y|L1])
2(X [Y|L] [Y|L1]) :‐ rem2(X,L,L1).
2(X L L1)
:‐ rem2(a,[a,b,c,a],L).
L = [[b,c]
, ] ; L = [[b,c,a]
, , ] ; L = [a,
[ , b,c]
, ] ; L = [[a,, b,, c,, a]] ; false.
Exercício
rem3(X,[],[]).
rem3(X,[X|L],L1) :‐ rem3(X,L,L1).
rem3(X [Y|L] [Y|L1]) ::‐ not(X
rem3(X,[Y|L],[Y|L1]) not(X=Y)
Y), rem3(X,L,L1).
rem3(X L L1)
X =\= Y gera erro (operador aritmético)
Remove (cont) e reverte
Exercício
Qual a diferença entre rem1, rem2 e rem3 ?
Exercício.
Escreva um programa que reverta uma lista.
Cut
Cut (cont)
( )
• A idéia é podar a árvore de prova para evitar ramos
desnecessários e ppodendo tornar o pprograma
g mais eficiente.
• Altera o mecanismo de derivação de Prolog.
• Ob
Obriga
i o programador
d a saber
b como o programa seráá
executado para poder entendê‐lo.
•Comporta‐se
•Comporta se como uma fórmula atômica que é sempre
satisfeita.
É um comando extra lógico . símbolos adicionais comuns: fail,
fail
repeat.
Cut (cont)
• Instrução
ç imperativa
p (procedural)
(p )qque vai contra a filosofia
“declarativa” da programação em lógica.
( Não é uma boa técnica de p
programação)
g ç )
ex: A :‐ B, C, D. C :‐ M, N, !, P, Q. C :‐ R.
impede backtracking P ‐> N,
permite backtracking N ‐> M, Q ‐> P,
R tentado:
– unicamente se M ou N falha
– nunca se P ou Q falha
Cut (Cont)
O comando cut permite indicar ao Prolog quais sub‐objetivos já
satisfeitos não necessitam ser reconsiderados. Ele aborta o
processo de backtracking.
Exemplo
é
é_cravo(cravo).
( )
flor(cravo).
flor(rosa).
flor(orquidea).
gosta(ana,X) :‐ é_cravo(X), ! ,fail.
gosta(ana X) :‐ flor(X) .
gosta(ana,X)
Perguntas :‐ gosta(ana,cravo). :‐ gosta(ana,rosa) :‐ gosta(ana,X).
Observe que gosta(ana,rosa) é true, mas a consulta gosta(ana,X) não
retorma nenhum valor para X. X
Caminho com custo
p(a,b,1).
p( , , )
p(b,c,3).
p(c,d,4).
p(d,e,2)
q(X,Y,W) :‐ p(X,Y,W).
q(X,Z,K)
( ) :‐ p(X,Y,W),q(Y,Z,V),
( ) ( ) K is W+V.
: q(a,X,Y).
:‐ q(a X Y)
• Usa‐se a hipótese
hi ó do
d mundo
d ffechado
h d (close
( l
world assumption).
• NOT significa
g “Eu não p
posso p
provar que
q é
verdadeiro”
Predicado not
p(a,b).
p(b,c).
p(c,d).
q(X,Y)
(X Y) :‐ p(X,Y).
(X Y)
q(X,Z) :‐ p(X,Y),q(Y,Z).
rm(X,Y)
( , ) :‐ q(
q(X,Y),
, ), not(p(X,Y)).
(p( , ))
:‐ rm(a,X).