aula3 sintaxe semantica
TRANSCRIPT
![Page 1: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/1.jpg)
Sintaxe e Semântica Prolog
Elaine Faria e Hiran Nonato
Programação Lógica
UFU - 2012
![Page 2: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/2.jpg)
Créditos
• O material a seguir consiste de adaptações e extensões dos originais gentilmente cedidos pelo Prof. Alexsandro Santos Soares
• Agradecimento especial ao Prof. Gabriel Coutinho que auxiliou na confecção do material
![Page 3: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/3.jpg)
Sintaxe e Semântica
Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.
![Page 4: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/4.jpg)
Sintaxe e semântica
• O tipo de um objeto é reconhecido por meio de sua forma sintática.
• Isso é possível porque a sintaxe do Prolog especifica formas diferentes para cada tipo de objeto.
![Page 5: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/5.jpg)
Sintaxe e Semântica
• Alfabeto do Prolog– Pontuação: () .
– Conectivos:• Conjunção ,
• Disjunção ;
• Implicação :-
– Letras: a,b,c,..,z,A,B,C..,Z
– Dígitos: 0,1,..,9
– Especiais: + - * / <> = _
![Page 6: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/6.jpg)
Sintaxe e Semântica
• Átomos podem ser formados por:1. Cadeia de letras ou dígitos, iniciando
obrigatoriamente com letra minúscula. (podendo conter o símbolo _)� Ex: socrates, joao, x_1
2. Cadeia de caracteres especiais. � Ex: <----> ::=
3. Cadeia de caracteres quaisquer, inclusive espaço em branco, desde que usando o símbolo ‘.� Ex: ‘Prog. Lógico’
![Page 7: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/7.jpg)
Sintaxe e Semântica
• Números– Inteiros �
• Exemplos: 1
1812
-273
– Reais �• Ex: 3.1415
-273.16
![Page 8: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/8.jpg)
Sintaxe e Semântica
• Variáveis:– São cadeias de letras, dígitos ou caractere
sublinhado (_), devendo iniciar com este ou com uma letra maiúscula
– O caractere "_", sozinho, representa uma variável anônima, isto é, sem interesse para um determinado procedimento
– Exemplos de variáveis: X, Resultado, _var, _
![Page 9: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/9.jpg)
Sintaxe e Semântica
Variáveis (cont.)• O escopo léxico de nomes de variáveis é
apenas uma cláusula• Ex: se o nome X25 ocorre em duas cláusulas
diferentes, então ele está representando duas variáveis diferentes; toda ocorrência de X25 dentro da mesma cláusula quer significar a mesma variável
![Page 10: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/10.jpg)
Sintaxe e Semântica
• Variáveis (cont.)– Uma variável pode estar
• Instanciada: quando á variável já referencia algum objeto
• não-instanciada: quando a variável não referencia nenhum objeto, ou seja, quando o objeto a que ela referencia ainda não é conhecido
– Quando uma variável é usada numa pergunta, o Prolog procura todos os fatos tentando encontrar um objeto no qual a variável possa ser instanciada
• Quando uma solução é encontrada, ela é mostrada. Se o usuário estiver satisfeito com a resposta, basta digitar return
• Se desejar mais respostas, usa-se ponto-evírgula “;”
![Page 11: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/11.jpg)
Sintaxe e Semântica
• Variáveis (cont.)
Base de fatos: Qual o resultado das seguintes perguntas?
gosta(joao, peixe). ?- gosta(maria,X).
gosta(joao,maria). ?- gosta(X,livro).
gosta(maria,livro). ?- gosta(Quem,Oque).
gosta(pedro,livro). ?- gosta(X,Y).
gosta(maria,flor). ?- gosta(X,X).
gosta(maria,vinho). ?- gosta(_a,_b).
?- gosta(A,peixe).
![Page 12: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/12.jpg)
Sintaxe e Semântica
• Estruturas– São objetos que possuem vários componentes
– Os próprios componentes podem ser também estruturas
– Ex: Data � estrutura com 3 componentes
Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.
![Page 13: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/13.jpg)
Sintaxe e Semântica
• Estruturas– Ex: data(Dia, março, 1996)
• A variável Dia pode ser instanciada para qualquer objeto
– Todos os objetos em Prolog são denominados termos.
• Toda constante é um termo
• Toda variável é um termo
• Se t1, t2, ..., tn são termos e f é um átomo, então f(t1, t2, ..., tn) também é um termo
![Page 14: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/14.jpg)
Sintaxe e Semântica
• Estruturas– Todos os objetos estruturados podem ser
representados como árvores• A raiz da árvore é o functor
• os ramos que dela partem são os argumentos ou componentes
• Ex: (a + b) * (c - 5)
*(+(a, b), -(c, 5))
![Page 15: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/15.jpg)
Sintaxe e Semântica
• Unificação– É o processo que, dados dois termos como
dados de entrada verifica-se eles se “casam”
– Dados dois termos, diz-se que eles unificam se
• Eles são idênticos ou
• As variáveis de ambos os termos podem ser instanciadas com objetos de maneira que, após a substituição das variáveis por esses objetos, os termos se tornam idênticos
![Page 16: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/16.jpg)
• UnificaçãoIsto significa que:
• maria e maria se unificam
• 42 e 42 se unificam
• mulher(maria) e mulher(maria) se unificam
Isto também significa que:
• vicente e maria não se unificam
• mulher(maria) e mulher(joana) não se unificam
Sintaxe e Semântica
![Page 17: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/17.jpg)
• Unificação
• Os termos abaixo se unificam?• maria e X
Sintaxe e Semântica
![Page 18: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/18.jpg)
• Unificação
• Os termos abaixo se unificam?• maria e X
• mulher(Z) e mulher(maria)
Sintaxe e Semântica
![Page 19: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/19.jpg)
• Unificação
• Os termos abaixo se unificam?• maria e X
• mulher(Z) e mulher(maria)
• ama(maria,X) e ama(X,vicente)
Sintaxe e Semântica
![Page 20: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/20.jpg)
• Unificação
?- X=maria, X=vicente.
Sintaxe e Semântica
![Page 21: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/21.jpg)
Como Prolog responderá?
?- X=maria, X=vicente.
false
?-
Por quê? Após trabalhar na primeira meta, Prolog instanciou a variável X com maria, e assim ele não pode mais unificá-la com vicente. Logo, a segunda meta falha.
![Page 22: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/22.jpg)
• Unificação (cont.)– Se os termos não unificam, dizemos que o
processo falha.
– Se eles unificam, então o processo é bem-sucedido
– Exemplo
data(D, M, 1994) e data(X, março, A) unificam
data(D, M, 1994) e data(X, Y, 94) não unificam
Sintaxe e Semântica
![Page 23: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/23.jpg)
Sintaxe e Semântica
• Unificação (cont.)– Regras que determinam se dois termos S e T unificam
• Se S e T são constantes, então S e T unificam somente se ambos representam o mesmo objeto
• Se S é uma variável e T é qualquer coisa, então S e T unificam com S instanciada com T. Inversamente, se T é uma variável, então T é instanciada com S;
• Se S e T são estruturas, unificam somente se: (1) S e T tem o mesmo functor principal, e (2) todos os seus componentes correspondentes também unificam. A instanciação resultante édeterminada pela unificação dos componentes
Exemplo:
triângulo(ponto(1, 1), A, ponto(2, 3)) e triângulo(X, ponto(4, Y), ponto(2, Z))?
![Page 24: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/24.jpg)
Sintaxe e Semântica
• Seja a base de dados:grande(urso). % Cláusula 1grande(elefante). % Cláusula 2pequeno(gato). % Cláusula 3marrom(urso). % Cláusula 4preto(gato) % Cláusula 5cinza(elefante). % Cláusula 6escuro(Z) :- % Cláusula 7
preto(Z).escuro(Z) :- % Cláusula 8
marrom(Z).
• Qual o resultado da consulta:– ?- escuro(X), grande(X).
X = urso.
![Page 25: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/25.jpg)
Exemplo com termos complexos:
?- k(s(g),Y) = k(X,t(k)).
Sintaxe e Semântica
![Page 26: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/26.jpg)
Exemplo com termos complexos:
?- k(s(g),Y) = k(X,t(k)).
X=s(g)
Y=t(k)
true
?-
Sintaxe e Semântica
![Page 27: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/27.jpg)
Exemplo com termos complexos:
?- k(s(g),t(k)) = k(X,t(Y)).
Sintaxe e Semântica
![Page 28: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/28.jpg)
Exemplo com termos complexos:
?- k(s(g),t(k)) = k(X,t(Y)).
X=s(g)
Y=k
true
?-
Sintaxe e Semântica
![Page 29: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/29.jpg)
Busca pela prova
• Agora que conhecemos a unificação, começaremos a aprender como Prolog busca em base de conhecimento para ver se uma consulta é satisfeita.
• Em outras palavras: nós começaremos a aprender sobre a busca pela prova
![Page 30: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/30.jpg)
Exemplo: árvore de busca
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
Base de dados
Consulta
![Page 31: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/31.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
Exemplo: árvore de busca
![Page 32: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/32.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
Y=X
Exemplo: árvore de busca
![Page 33: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/33.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
X=a
Y=X
Exemplo: árvore de busca
![Page 34: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/34.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
Y=X
Exemplo: árvore de busca
![Page 35: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/35.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
††††
Y=X
Exemplo: árvore de busca
![Page 36: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/36.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
?- g(b), h(b).
X=b
††††
Y=X
Exemplo: árvore de busca
![Page 37: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/37.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
?- g(b), h(b).
X=b
?- h(b).
††††
Y=X
Exemplo: árvore de busca
![Page 38: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/38.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
Y=b
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
?- g(b), h(b).
X=b
?- h(b).
††††
Y=X
Exemplo: árvore de busca
![Page 39: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/39.jpg)
f(a).
f(b).
g(a).
g(b).
h(b).
k(X):- f(X), g(X), h(X).
?- k(Y).
Y=b.
?-
?- k(Y).
?- f(X), g(X), h(X).
?- g(a), h(a).
?- h(a).
X=a
?- g(b), h(b).
X=b
?- h(b).
††††
Y=X
Exemplo: árvore de busca
![Page 40: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/40.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
Outro exemplo: árvore de busca
Base de dados
Consulta
![Page 41: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/41.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
?- tem_ciume(X,Y).
Outro exemplo: árvore de busca
![Page 42: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/42.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
X=A Y=B
Outro exemplo: árvore de busca
![Page 43: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/43.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
?- ama(B,maria).
A=vicente
C=maria
X=A Y=B
Outro exemplo: árvore de busca
![Page 44: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/44.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
X=vicente
Y=vicente
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
?- ama(B,maria).
A=vicente
C=maria
B=vicente
X=A Y=B
Outro exemplo: árvore de busca
![Page 45: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/45.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
X=vicente
Y=vicente;
X=vicente
Y=marcelo
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
?- ama(B,maria).
A=vicente
C=maria
B=vicente
B=marcelo
X=A Y=B
Outro exemplo: árvore de busca
![Page 46: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/46.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
?- tem_ciume(X,Y).
X=vicente
Y=vicente;
X=vicente
Y=marcelo;
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
?- ama(B,maria).
A=vicente
C=maria
?- ama(B,maria).
A=marcelo
C=maria
B=vicente
B=marcelo
X=A Y=B
Outro exemplo: árvore de busca
![Page 47: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/47.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
].
X=vicente
Y=marcelo;
X=marcelo
Y=vicente
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
?- ama(B,maria).
A=vicente
C=maria
?- ama(B,maria).
A=marcelo
C=maria
B=vicente B=vicente
B=marcelo
X=A Y=B
Outro exemplo: árvore de busca
![Page 48: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/48.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
].
X=marcelo
Y=vicente;
X=marcelo
Y=marcelo
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
?- ama(B,maria).
A=vicente
C=maria
?- ama(B,maria).
A=marcelo
C=maria
B=vicente B=vicente
B=marcelo B=marcelo
X=A Y=B
Outro exemplo: árvore de busca
![Page 49: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/49.jpg)
ama(vicente,maria).
ama(marcelo,maria).
tem_ciume(A,B):-
ama(A,C),
ama(B,C).
].
X=marcelo
Y=vicente;
X=marcelo
Y=marcelo.
?- tem_ciume(X,Y).
?- ama(A,C), ama(B,C).
?- ama(B,maria).
A=vicente
C=maria
?- ama(B,maria).
A=marcelo
C=maria
B=vicente B=vicente
B=marcelo B=marcelo
X=A Y=B
Outro exemplo: árvore de busca
![Page 50: Aula3 sintaxe semantica](https://reader030.vdocuments.pub/reader030/viewer/2022020218/559fe11f1a28abfd2d8b45bd/html5/thumbnails/50.jpg)
Referências
• Luis, A. M. Palazzo, Introdução àProgramação Prolog, Educat, 1997.
• Slides da Profa Solange – ICMC-USP –Inteligência Artificial.