Buscar

Programação em Lógica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação em Lógica 
Prof. Marco Túlio de Oliveira Valente 
Prof. César Francisco de Moura Couto 
Prof. Pedro Felipe 
 
2 
Programação em Lógica 
§  Paradigma Imperativo: 
§  Programas: mapeamento de entradas em saídas 
§  Modelo computacional: von Neumann (variáveis, 
atribuição, comando de repetição etc)‏ 
§  Estilo procedimental (“como fazer”)‏ 
§  Paradigma Lógico: 
§  Programas especificam conhecimento a respeito de um 
problema e não uma seqüência de passos 
§  Modelo computacional: lógica matemática 
§  Estilo declarativo (“o que fazer”)‏ 
§  Programação simbólica (não-numérica)‏ 
§  Computação: verificar se uma consulta pode ser 
deduzida a partir das relações do programa. 
3 
Programação em Lógica: Exemplo 
§  Programa: 
avo(X, Y) :- pai(X, Z), pai(Z, Y). 
avo(X, Y) :- pai(X, Z), mae(Z, Y). 
pai(carlos, joao). 
pai(joao, jose). 
§  Computação: resposta a consultas 
§  avo(carlos, jose) - avo(carlos, joao) 
§  yes no 
§  avo(X,jose) - avo(manoel,carlos)‏ 
§  X= carlos no 
4 
PROLOG 
§  Origem: 
§  Universidade de Marseille e Edinburgh (década 70) ‏ 
§  Objetivo: ferramenta para experimentos em IA e para 
definição de gramáticas. 
§  Valores: 
§  Constantes. Exemplos: maria, 125 
§  Estruturas (tuplas rotuladas). Exemplos: ponto (5,6), 
data(01,01,2000) ‏ 
§  Listas. Exemplos: [1,2,3], [maria, jose, joao] 
§  Variáveis (identificadores que iniciam por uma letra 
maiúscula). Exemplos: X, Y, Estudante 
5 
Cláusulas de Horn 
§  Programa: uma coleção de Cláusulas de Horn 
§  Cláusulas de Horn: 
§  Subconjunto das cláusulas da lógica de predicados 
§  Forma geral: B :- A1, A2, ..., An. 
 onde cada Ai é uma relação da forma Ri (.....)‏ 
§  Interpretação: se as condições A1, A2, ... e An forem 
verdadeiras, então a conclusão B é verdadeira 
§  Se fosse procedimental: if condições then conclusão 
§  Se n = 0, a cláusula é chamada de fato 
§  Se n > 0, a cláusula é chamada de regra 
§  Toda cláusula termina com um “.” 
 
6 
Exemplo 1 
estrela(sol). 
estrela(sirius). 
orbita(venus, sol). 
orbita(terra, sol). 
orbita(marte, sol). 
orbita(lua, terra). 
orbita(phobos, marte). 
orbita(deimos, marte). 
planeta(B) :- orbita(B, sol). 
satélite(B) :- orbita(B, P), planeta(P). 
Consultas: 
orbita(venus, sol) ? 
Yes 
orbita(B, marte) ? 
B= phobos, B = deimos 
orbita(B, venus) ? 
No 
planeta(mercúrio) ? 
No 
planeta(X) ? 
X = venus, X = terra, X = marte 
satélite(X) ? 
X = lua, X = phobos, 
X = deimos 
 
7 
Exemplo 2 
§  Programa: 
gosta(maria, peixe). 
gosta(pedro, vinho). 
gosta(maria, vinho). 
gosta(pedro, maria). 
§  Consultas: 
§  Quem gosta de peixe ? 
gosta (X, peixe) ‏ 
§  Pedro e Maria se gostam ? 
gosta (pedro, maria), gosta (maria, pedro)‏ 
§  Existe algo que Pedro e Maria (ambos) gostem ? 
gosta (pedro, X), gosta (maria, X)‏ 
8 
Unificação 
§  Algoritmo utilizado em Prolog para determinar se existe 
uma maneira de instanciar as variáveis de dois predicados 
de modo a torná-los iguais. 
§  Exemplos: 
§  p (X, Y) e q (X, Y) ⇒ No 
§  p (X, Y) e p (joao, jose) ⇒ X= joao; Y=jose 
§  p (X, Y) e p (joao, Z) ⇒ X= joao; Y=Z 
§  p (X, X) e p (1, 1) ⇒ X = 1 
§  p (X, X) e p (1, W) ⇒ X = 1; W = 1 
§  p (X, X) e p (1, 2) ⇒ No 
§  p (X, X, 2) e p (1, W, W) ⇒ No 
§  p (G, jose) e p (X, Y) ⇒ X = G, Y = jose 
9 
Algoritmo de Resolução 
§  Busca em profundidade em uma árvore de pesquisa 
§  Resolução de um objetivo: 
§  Lista de cláusulas é pesquisada de cima para baixo 
§  Se unificação com lado esquerdo de uma cláusula for 
bem sucedida então: 
§  Passa-se a tentar resolver os sub-objetivos do lado 
direito desta cláusula (da esquerda para a direita)‏ 
§  Resolução inclui retrocesso (backtracking) para pesquisa 
de outras respostas (resultantes de unificações 
alternativas)‏ 
§  Resolução falha se todas as alternativas forem exploradas 
sem sucesso. 
§  Resolução é sujeita à ordem em que as cláusulas foram 
escritas 
10 
Resolução: Exemplo 1 
§  Programa: 
homem(francisco). 
mae(joao, roberta). 
pai(joao, paulo). 
mae(francisco, roberta). 
pai(francisco, paulo). 
pais(X, M, P) :- mae(X, M), pai(X, P). 
irmao(X, Y) :- homem(Y), pais(X, M, P), pais(Y,M, P). 
§  Consulta: 
?- irmao (joao, francisco)‏ 
11 
Resolução: Exemplo 1 
irmao(joao,francisco)
homem(francisco) pais(joao,M,P) pais(francisco,M,P)
mae(joao,M) pai(joao,P)
mae(joao,roberta) pai(joao,paulo)
mae(francisco,roberta) pai(francisco,paulo)
X= joao, Y= francisco
M= roberta P= paulo
12 
Resolução: Exemplo 2 
§  Programa: 
gosta(maria, peixe). gosta(maria, vinho). 
gosta(pedro, vinho). gosta(pedro, maria). 
§  Consulta: gosta (maria, X), gosta(pedro,X)‏ 
 
gosta(maria,X),gosta(pedro,X)
gosta(maria,peixe)
X=peixe
gosta(pedro,peixe)
falha (backtracking)
gosta(maria,X),gosta(pedro,X)
gosta(maria,vinho)
X=vinho
gosta(pedro,vinho)
13 
Cláusulas Recursivas 
§  Exemplo: 
pai(carlos,madalena). 
mae(madalena,manoel). 
pai(manoel,felipe). 
pais(X,Y) :- pai(X,Y). 
pais(X,Y) :- mae(X,Y). 
descendente(X,Y):- pais(Y,X). % caso base da recursao 
descendente(X,Y):- % passo recursivo 
 pais(Z,X), descendente(Z,Y). 
 
 
14 
Variáveis Anônimas 
§  Variável Anônima (“_”): variável cujo valor não é importante 
§  Exemplo: Caso pretenda-se saber apenas se Paulo tem 
filhos 
?- pai(paulo,_)‏ 
 yes 
?- pai(paulo,X)‏ 
 X=pedro; X=maria; X=simao 
 
15 
Listas 
§  Notação: 
[1, 2, 3, 4] 
[1, [2 , 3], 4] % lista com elementos lista 
[] % lista vazia 
 [ H | T ] % lista com cabeça H e cauda T 
§  Exemplos de unificação envolvendo listas: 
?- [X | Y] = [a, b, c]. ⇒ X=a Y=[b, c] 
?- [X | [Y | Z]] = [a, b, c, d]. ⇒ X=a; Y=b; Z=[c, d] 
?- [X | Y ] = [a] ⇒ X= a; Y= [] 
?- [X,Y | Z] = [a, b, c,d] ⇒ X= a; Y=b; Z= [c,d] 
16 
Listas: Exemplos 
§  Exemplo 1: Verificar se elemento pertence a uma lista 
pertence(X, [ X | _ ] ). 
pertence(X, [ _ | L ] ) :- pertence(X, L). 
§  Exemplo 2: Concatenação de duas listas 
concatena( [], L, L). 
concatena( [ X | L1 ], L2, [ X | L3 ]) :- concatena (L1, L2, 
L3). 
§  Exemplo 3: Verificar se duas listas são iguais 
 igual([],[]). 
 igual([ X | L1], [X | L2] ) :- igual(L1, L2). 
§  Exemplo 4: Remoção de elemento de uma lista 
 remove (X, [X | L], L). 
 remove (X, [ Y | L1 ], [ Y | L2 ] ) :- remove (X, L1, L2). 
17 
Expressões Aritméticas 
§  Exemplo 1: Operador “is” 
densidade(X,Y) :- populacao(X,P), area(X,A), Y is P/A. 
§  Exemplo 2: MDC (Algoritmo de Euclides)‏ 
mdc(X,X,X). 
mdc(X,Y,Z):- X > Y, W is X-Y, mdc(W,Y,Z). 
mdc(X,Y,Z):- Y > X, W is Y-X, mdc(X,W,Z). 
§  Exemplo 3: Fatorial 
fatorial(0, 1). 
fatorial(X, Y) :- X1 is X-1, fatorial(X1, Y1), Y is X*Y1. 
§  Exemplo 4: Soma dos elementos de uma lista 
soma ([],0). 
soma ([X | L], S) :- soma (L, S1), S is S1+X. 
18 
 
Gramática da Língua Inglesa 
§  A gramática abaixo gera um subconjunto de palavras da 
língua inglesa 
 <sentence> ::= <noun phrase> <verb phrase> . 
 <noun phrase> ::= <determiner> <noun> | <determiner> <adjective> <noun> 
 <verb phrase> ::= <verb> | <verb> <noun phrase> 
 <determiner> ::= a | the 
 <noun> ::= boy | cat 
 <adjective> ::= big | lazy 
 <verb> ::= saw | ate 
19 
 
Parser em Prolog 
sentence(S,[]):- nounphrase(S,S1), verbphrase(S1,S2), dot(S2, []). 
 
nounphrase(NP,X):- determiner(NP,S1), noun(S1,X). 
nounphrase(NP,X):- determiner(NP,S1), adjective(S1,S2), noun(S2,X). 
verbphrase(VP,X):-verb(VP,S1), nounphrase(S1,X). 
 
dot(['.'|X], X). 
 
noun([boy|X],X). 
noun([cat|X],X). 
 
verb([ate|X],X). 
verb([saw|X],X). 
 
adjective([big|X],X). 
adjective([lazy|X],X). 
 
determiner([the|X],X). 
determiner([a|X],X). 
20 
 
Regras da gramática em Prolog 
§  Usando o operador de definição de gramática, --> 
sentence --> nounphrase, verbphrase, ['.']. 
nounphrase --> determiner, noun. 
nounphrase --> determiner, adjective, noun. 
verbphrase --> verb, nounphrase. 
noun --> [boy]. 
noun --> [cat]. 
verb --> [ate]. 
verb --> [saw]. 
adjective -->[big]. 
adjective -->[lazy]. 
determiner --> [a]. 
determiner --> [the].

Outros materiais