Aula Prolog 03

13
Programação em Lógica Programação em Lógica Matemática Matemática Prolog Prolog – 03 – – 03 – Inteligência Artificial Inteligência Artificial Fábio M. Pereira Fábio M. Pereira Baseado em Baseado em Amzi! inc. – www.amzi.com Amzi! inc. – www.amzi.com

Transcript of Aula Prolog 03

Page 1: Aula Prolog 03

Programação em Lógica Programação em Lógica MatemáticaMatemática

PrologProlog– 03 –– 03 –

Inteligência ArtificialInteligência ArtificialFábio M. PereiraFábio M. Pereira

Baseado emBaseado emAmzi! inc. – www.amzi.comAmzi! inc. – www.amzi.com

Page 2: Aula Prolog 03

PrologProlog►Consultas CombinadasConsultas Combinadas►Predicados InternosPredicados Internos►ExercíciosExercícios

Page 3: Aula Prolog 03

Consultas Combinadas (1)Consultas Combinadas (1)► Consultas simples podem ser combinadas Consultas simples podem ser combinadas

para formar consultas complexaspara formar consultas complexas► Exemplo:Exemplo:

Quais objetos comestíveis estão na cozinha?Quais objetos comestíveis estão na cozinha??- ?- local(X, cozinha), comestivel(X).local(X, cozinha), comestivel(X).

► Uma consulta combinada possui uma Uma consulta combinada possui uma conjunçãoconjunção de objetivos de objetivos A vírgula separando os objetivos é lida como “e”A vírgula separando os objetivos é lida como “e” Existe um X, tal que X esteja localizado na cozinha Existe um X, tal que X esteja localizado na cozinha

ee X é comestível? X é comestível?► Se uma mesma variável aparece mais de Se uma mesma variável aparece mais de

uma vez em um consulta, ela deve ter o uma vez em um consulta, ela deve ter o mesmo valor em todos os locais em que mesmo valor em todos os locais em que apareceaparece

Page 4: Aula Prolog 03

Consultas Combinadas (2)Consultas Combinadas (2)► O nome de uma variável não possui nenhum O nome de uma variável não possui nenhum

significado em qualquer outra consulta, ou significado em qualquer outra consulta, ou cláusula do banco de dadoscláusula do banco de dados Se X aparece em outras consultas ou cláusulas, a Se X aparece em outras consultas ou cláusulas, a

consulta ou cláusula possui a sua própria cópia da consulta ou cláusula possui a sua própria cópia da variávelvariável

Dizemos que o Dizemos que o escopoescopo de uma variável lógica é uma de uma variável lógica é uma consultaconsulta

► Ordem de execuçãoOrdem de execução Uma consulta combinada inicia chamando o primeiro Uma consulta combinada inicia chamando o primeiro

objetivo a esquerdaobjetivo a esquerda Se bem sucedido, o próximo objetivo é chamado com Se bem sucedido, o próximo objetivo é chamado com

as variáveis ligadas como um conjunto do objetivo as variáveis ligadas como um conjunto do objetivo prévioprévio

Se a consulta termina via porta Se a consulta termina via porta exitexit do objetivo mais a do objetivo mais a direita, ela é bem sucedida e Prolog imprime os valores direita, ela é bem sucedida e Prolog imprime os valores da tabela de variáveisda tabela de variáveis

Page 5: Aula Prolog 03

Consultas Combinadas (3)Consultas Combinadas (3)► Ordem de execução (cont.)Ordem de execução (cont.)

Se um usuário digita um ponto e vírgula (;) Se um usuário digita um ponto e vírgula (;) após uma resposta, a consulta é retomada na após uma resposta, a consulta é retomada na porta porta redoredo do objetivo mais a direitado objetivo mais a direita

Somente as variáveis ligadas deste conjunto Somente as variáveis ligadas deste conjunto são desfeitassão desfeitas

Se a consulta termina via porta Se a consulta termina via porta failfail do objetivo do objetivo mais a esquerda, a consulta falhamais a esquerda, a consulta falha

Utilize o debug para acompanhar o processoUtilize o debug para acompanhar o processovariablesquery out

no ;Goal 1 Goal 2

Page 6: Aula Prolog 03

ExemploExemplo►?- ?- local(X, cozinha), comestivel(X).local(X, cozinha), comestivel(X).[debug] ?- local(X, cozinha), comestivel(X). Call: (7) local(_G283, cozinha) ? creep Exit: (7) local(maçã, cozinha) ? creep Call: (7) comestivel(maçã) ? creep Exit: (7) comestivel(maçã) ? creep

X = maçã ; Fail: (7) comestivel(maçã) ? creep Redo: (7) local(_G283, cozinha) ? creep Exit: (7) local(brócolis, cozinha) ? creep Call: (7) comestivel(brócolis) ? creep Fail: (7) comestivel(brócolis) ? creep

Redo: (7) local(_G283, cozinha) ? creep Exit: (7) local(biscoito, cozinha) ? creep Call: (7) comestivel(biscoito) ? creep Exit: (7) comestivel(biscoito) ? creep

X = biscoito ; Fail: (7) comestivel(biscoito) ? creep Redo: (7) local(_G283, cozinha) ? creep Fail: (7) local(_G283, cozinha) ? creep

No

Page 7: Aula Prolog 03

Exemplo com Duas VariáveisExemplo com Duas Variáveis►Liste todos os objetos localizados em Liste todos os objetos localizados em

salas adjacentes à cozinha salas adjacentes à cozinha ►Em termos lógicos:Em termos lógicos:

Encontre T e R de modo que exista uma Encontre T e R de modo que exista uma porta da cozinha para R e T está localizado porta da cozinha para R e T está localizado em Rem R

?- porta(cozinha, R), local(T,R).R = escritórioT = escrivaninha;

R = escritórioT = computador;

R = porãoT = ‘máquina de lavar’;

No

Page 8: Aula Prolog 03

Predicados Internos (1)Predicados Internos (1)► Até este ponto vimos qual o formato utilizado Até este ponto vimos qual o formato utilizado

por Prolog para nos responder às consultaspor Prolog para nos responder às consultas► A partir de agora veremos como gerar consultas A partir de agora veremos como gerar consultas

personalizadas de acordo com nossas personalizadas de acordo com nossas necessidadesnecessidades

► Características de Predicados InternosCaracterísticas de Predicados Internos Não existem cláusulas no banco de dados para Não existem cláusulas no banco de dados para

predicados internospredicados internos Um predicado interno é predefinido por PrologUm predicado interno é predefinido por Prolog São normalmente escritos na linguagem usada para São normalmente escritos na linguagem usada para

implementar o Prologimplementar o Prolog Podem realizar funções não relacionadas com o Podem realizar funções não relacionadas com o

teorema de prova lógicateorema de prova lógica São chamados as vezes de predicados extra-lógicosSão chamados as vezes de predicados extra-lógicos

Page 9: Aula Prolog 03

Predicados Internos (2)Predicados Internos (2)►Veremos os predicados internos à Veremos os predicados internos à

medida que precisemos delesmedida que precisemos deles►Predicados de entrada/saída usados Predicados de entrada/saída usados

para imprimir uma consultapara imprimir uma consulta write/1write/1 – imprime o seu argumento na tela, – imprime o seu argumento na tela,

sempre falha em um backtrackingsempre falha em um backtracking nl/0nl/0 – inicia uma nova linha – inicia uma nova linha tab/1tab/1 – espera um inteiro como argumento – espera um inteiro como argumento

e tabula o número de espaçose tabula o número de espaços fail/0fail/0 – provoca uma falha, ou seja, passa o – provoca uma falha, ou seja, passa o

controle imediatamente para uma porta controle imediatamente para uma porta redoredo

Page 10: Aula Prolog 03

ExemplosExemplos►Listar todos os objetos que estão na Listar todos os objetos que estão na

cozinhacozinha?- ?- local(X, cozinha), write(X), nl, fail.local(X, cozinha), write(X), nl, fail.maçãmaçãbrócolisbrócolisbiscoitobiscoitoNoNo

?- ?- local(X, cozinha), write(X), tab(8), fail.local(X, cozinha), write(X), tab(8), fail.maçã brócolis biscoitomaçã brócolis biscoito

Page 11: Aula Prolog 03

Exercícios (1)Exercícios (1)► Considere o banco de dados PrologConsidere o banco de dados Prolog

► Quais os resultados das seguintes consultas?Quais os resultados das seguintes consultas? ?- ?- gizmo(a,X), easy(X).gizmo(a,X), easy(X). ?- ?- gizmo(c,X), easy(X).gizmo(c,X), easy(X). ?- ?- gizmo(d,Z), easy(Z).gizmo(d,Z), easy(Z). ?- ?- easy(Y), gizmo(X,Y).easy(Y), gizmo(X,Y). ?- ?- write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2), write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2),

write(M), fail.write(M), fail. ?- ?- write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2),

write(Z), fail.write(Z), fail. ?- ?- easy(X), harder(Y, X).easy(X), harder(Y, X).

easy(1).easy(2).easy(3).

gizmo(a,1).gizmo(b,3).gizmo(a,2).gizmo(d,5).

gizmo(c,3).gizmo(a,3).gizmo(c,4).

harder(a,1).harder(c,X).harder(b,4).harder(d,2).

Page 12: Aula Prolog 03

Exercícios (2)Exercícios (2)► Qual o resultado da consulta?Qual o resultado da consulta?

?- ?- porta(cozinha, R), write(R), nl, local(T, R), tab(3), porta(cozinha, R), write(R), nl, local(T, R), tab(3), write(T), nl, fail.write(T), nl, fail.

► Banco de Dados GenealógicoBanco de Dados Genealógico Encontre alguém que seja mãeEncontre alguém que seja mãe

?- ?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X). Escreva consultas similares para pai, filho e filhaEscreva consultas similares para pai, filho e filha Rastreie a execução e compare:Rastreie a execução e compare:

?- ?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X).?- ?- mulher(X), pais(X, Alguem).mulher(X), pais(X, Alguem).

Elas possuem as mesmas respostas?Elas possuem as mesmas respostas? Escreva consultas para encontrar avós, avôs e Escreva consultas para encontrar avós, avôs e

bisavôsbisavôs

Page 13: Aula Prolog 03

O que vem a seguir?O que vem a seguir?

►RegrasRegras►AritméticaAritmética► ......