Aula 2 – Programação Lógica Sintaxe Prolog Profa. Elaine Faria UFU - 2014 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 Introdução • Linguagens que utilizam o paradigma lógico são classificadas com Declarativas – Descrevem o problema e não a solução – Descrevem O QUE deve ser feito e não COMO deve ser feito – Conceito de Mundo Fechado • Descreve o problema através de FATOS e REGRAS • Realiza-se CONSULTAS que deverão ser respondidas pelo interpretador avaliando-se os fatos e regras descritos • Tudo o que o interpretador não souber terá uma resposta negativa Introdução • Principal linguagem de programação do paradigma de programação lógico PROLOG • Prolog = Programming in Logic – Linguagem de programação utilizada para resolver problemas envolvendo objetos e relações entre objetos – Ex:Expressar em Prolog o fato “João gosta de Maria”: • objetos: “Maria” e “João” • relacionamento: “gosta de”, ou simplificando, “gosta”. • Em Prolog: gosta(joao,maria). Aplicações da Programação Lógica • Sistemas Baseados em Conhecimento – Sistemas que aplicam mecanismos automatizados de raciocínio para a representação e inferência de conhecimento • Bancos de Dados “Inteligentes” – Sistemas que empregam “agentes” de busca de dados com base em critérios • Sistemas Especialistas – Sistemas que emulam a especialização humana em algum domínio específico. • Processamento da Linguagem Natural – Usada para desenvolvimento de ferramentas para a comunicação homem-máquina em geral e para a construção de interfaces Aplicações da Programação Lógica • Indústria de aviação, em soluções de planejamento e escalonamento – Coordena 20% do tráfico aéreo do mundo • Instituto Nacional de Meteorologia (INMET) – Previsão do tempo • Modelagem ambiental – Modelos matemáticos para a simulação do desenvolvimento de florestas Aplicações da Programação Lógica • Logística – Soluções ótimas em tempo-real para um fluxo contínuo de ordens de serviço • Mineração de dados – Busca automática em bancos de dados por padrões e relacionamentos significantes • Construção de compilares – Erlang é uma linguagem criada pela Ericsson cuja primeira versão foi feita em Prolog Idéia básica do Prolog • Descrever a situação de interesse • Fazer uma pergunta • Prolog deduz logicamente novos fatos sobre a situação que nós descrevemos • Prolog retorna suas deduções como respostas Consequências • Pensar declarativamente, não procedimentalmente – Desafiador – Requer uma mentalidade diferente • Linguagem de alto nível – Não tão eficiente quanto, digamos, C – Bom para prototipagem rápida – Útil em muitas aplicações de IA Base de Conhecimento 1 • • • • • ?- mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- mulher(maria). Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- mulher(maria). true ?- Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- mulher(maria). true ?- tocaGuitarra(joana). Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- mulher(maria). true ?- tocaGuitarra(joana). true ?- Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- mulher(maria). true ?- tocaGuitarra(joana). true ?- tocaGuitarra(maria). false Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- tatuada(joana). Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- tatuada(joana). ERROR: predicate tatuada/1 not defined. ?- Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- festa. Base de Conhecimento 1 • • • • • mulher(maria). mulher(joana). mulher(iolanda). tocaGuitarra(joana). festa. ?- festa. true ?- Introdução • O prolog é baseado em: – Fatos – Regras – Consultas Programa Prolog • Fatos – São entendidos como relações entre objetos – Constituem-se de afirmações que são feitas ao Prolog – São verdades nas quais a Prolog irá basearse para responder as consultas solicitadas – Ex: árvore genealógica Programa Prolog • Fatos – cont. progenitor(maria, jose) Fonte: Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997 Programa Prolog • Regras – Especificação de algo que pode ser verdadeiro se algumas condições forem satisfeitas – É composta de duas partes: Conclusão (esquerda) e condição (direita) – Exemplo: Relação Filho. • filho(X,Y) :- progenitor(Y,X). Programa Prolog • Consultas – Questionamentos que serão respondidos avaliando-se os fatos e regras • João é filho de José? ? filho(joão, josé). • Quem é o filho de José? ?filho(X, josé). • Quem são os filhos de João ?filho(X,joão). – X é uma variável que representa um objeto desconhecido – Variáveis são escritas com a primeira letra em maiúsculo Base de conhecimento 2 progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé,júlia). progenitor(josé, íris). progenitor(íris,jorge). filho(X,Y) :- progenitor(Y,X). cabeça corpo fato regra Base de conhecimento 3 • • • • • ?- feliz(iolanda). escuta_musica(maria). escuta_musica(iolanda):- feliz(iolanda). tocaGuitarra(maria):- escuta_musica(maria). tocaGuitarra(iolanda):- escuta_musica(iolanda). Base de conhecimento 3 • • • • • feliz(iolanda). escuta_musica(maria). escuta_musica(iolanda):- feliz(iolanda). tocaGuitarra(maria):- escuta_musica(maria). tocaGuitarra(iolanda):- escuta_musica(iolanda). ?- tocaGuitarra(maria). true ?- Base de conhecimento 3 • • • • • feliz(iolanda). escuta_musica(maria). escuta_musica(iolanda):- feliz(iolanda). tocaGuitarra(maria):- escuta_musica(maria). tocaGuitarra(iolanda):- escuta_musica(iolanda). ?- tocaGuitarra(maria). true ?- tocaGuitarra(iolanda). true Cláusulas • • • • • feliz(iolanda). escuta_musica(maria). escuta_musica(iolanda):- feliz(iolanda). tocaGuitarra(maria):- escuta_musica(maria). tocaGuitarra(iolanda):- escuta_musica(iolanda). Existem cinco cláusulas nesta base de conhecimento: dois fatos e três regras. O final de uma cláusula é marcado com um ponto final. Predicados • • • • • feliz(iolanda). escuta_musica(maria). escuta_musica(iolanda):- feliz(iolanda). tocaGuitarra(maria):- escuta_musica(maria). tocaGuitarra(iolanda):- escuta_musica(iolanda). Existem três predicados nesta base de conhecimento: feliz, escuta_musica e tocaGuitarra Base do Conhecimento 4 • • • • • feliz(vicente). escuta_musica(bruno). tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente). tocaGuitarra(bruno):- feliz(bruno). tocaGuitarra(bruno):- escuta_musica(bruno). Base do Conhecimento 4 • • • • • feliz(vicente). escuta_musica(bruno). tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente). tocaGuitarra(bruno):- feliz(bruno). tocaGuitarra(bruno):- escuta_musica(bruno). A vírgula “," expressa conjunção em Prolog Expressando Disjunção • • • • • feliz(vicente). escuta_musica(bruno). tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente). tocaGuitarra(bruno):- feliz(bruno). tocaGuitarra(bruno):- escuta_musica(bruno). feliz(vicente). escuta_musica(bruno). tocaGuitarra(vicente):- escuta_musica(vicente), feliz(vicente). tocaGuitarra(bruno):- feliz(bruno); escuta_musica(bruno). Prolog e Lógica • Prolog tem algo a ver com lógica • Operadores – Implicação :– Conjunção , – Disjunção ; • Uso do modus ponens • Negação Base do Conhecimento 5 • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). Variáveis em Prolog • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- mulher(X). Instanciação de Variáveis • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- mulher(X). X=maria Solicitando Alternativas • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- mulher(X). X=maria; Solicitando Alternativas • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- mulher(X). X=maria; X=joana Solicitando Alternativas • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- mulher(X). X=maria; X=joana; X=iolanda Solicitando Alternativas • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- mulher(X). X=maria; X=joana; X=iolanda. ? Base do Conhecimento 5 • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- ama(marcelo,X), mulher(X). Base do Conhecimento 5 • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- ama(marcelo,X), mulher(X). X=maria. ?- Base do Conhecimento 5 • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- ama(abobrinha,X), mulher(X). Base do Conhecimento 5 • mulher(maria). • mulher(joana). • mulher(iolanda). • • • • ama(vicente, maria). ama(marcelo, maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). ?- ama(abobrinha,X), mulher(X). false ?- Base do Conhecimento 6 • • • • ama(vicente,maria). ama(marcelo,maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). • tem_ciumes(X,Y):- ama(X,Z), ama(Y,Z). Base do Conhecimento 6 • • • • ama(vicente,maria). ama(marcelo,maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). • tem_ciumes(X,Y):- ama(X,Z), ama(Y,Z). ?- tem_ciumes(marcelo,W). Base do Conhecimento 6 • • • • ama(vicente,maria). ama(marcelo,maria). ama(abobrinha, coelhinho). ama(coelhinho, abobrinha). • tem_ciumes(X,Y):- ama(X,Z), ama(Y,Z). ?- tem_ciumes(marcelo,W). W=vicente; W=marcelo; false. ?- Base do Conhecimento 7 • Base de fatos: gosta(joao, peixe). gosta(joao,maria). gosta(maria,livro). gosta(pedro,livro). gosta(maria,flor). gosta(maria,vinho). Qual o resultado das seguintes perguntas? ?- gosta(maria,X). ?- gosta(X,livro). ?- gosta(Quem,Oque). ?- gosta(X,Y). ?- gosta(X,X). ?- gosta(_a,_b). ?- gosta(A,peixe). Prolog • Comentário em Prolog – Linha: % – Bloco: /* ..... */ Referências • Luis, A. M. Palazzo, Introdução à Programação Prolog, Educat, 1997. • Slides da Profa Solange – ICMC-USP – Inteligência Artificial