50
Sintaxe e Semântica Prolog Elaine Faria e Hiran Nonato Programação Lógica UFU - 2012

Aula3 sintaxe semantica

Embed Size (px)

Citation preview

Page 1: Aula3 sintaxe semantica

Sintaxe e Semântica Prolog

Elaine Faria e Hiran Nonato

Programação Lógica

UFU - 2012

Page 2: Aula3 sintaxe semantica

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

Sintaxe e Semântica

Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997.

Page 4: Aula3 sintaxe semantica

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

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

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

Sintaxe e Semântica

• Números– Inteiros �

• Exemplos: 1

1812

-273

– Reais �• Ex: 3.1415

-273.16

Page 8: Aula3 sintaxe semantica

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

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

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

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

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

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

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

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

• 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

• Unificação

• Os termos abaixo se unificam?• maria e X

Sintaxe e Semântica

Page 18: Aula3 sintaxe semantica

• Unificação

• Os termos abaixo se unificam?• maria e X

• mulher(Z) e mulher(maria)

Sintaxe e Semântica

Page 19: Aula3 sintaxe semantica

• 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

• Unificação

?- X=maria, X=vicente.

Sintaxe e Semântica

Page 21: Aula3 sintaxe semantica

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

• 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

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

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

Exemplo com termos complexos:

?- k(s(g),Y) = k(X,t(k)).

Sintaxe e Semântica

Page 26: Aula3 sintaxe semantica

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

Exemplo com termos complexos:

?- k(s(g),t(k)) = k(X,t(Y)).

Sintaxe e Semântica

Page 28: Aula3 sintaxe semantica

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Referências

• Luis, A. M. Palazzo, Introdução àProgramação Prolog, Educat, 1997.

• Slides da Profa Solange – ICMC-USP –Inteligência Artificial.