Aula Prolog 01

23
Programação em Lógica Programação em Lógica Matemática Matemática Prolog Prolog – 01 – – 01 – Inteligência Inteligência Artificial Artificial Fábio M. Pereira Baseado em

Transcript of Aula Prolog 01

Page 1: Aula Prolog 01

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

PrologProlog– 01 –– 01 –

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

Baseado emAmzi! inc. – www.amzi.com

Page 2: Aula Prolog 01

PrologProlog►Introdução►Exemplos►Jargão

Page 3: Aula Prolog 01

Lógica e ProgramaçãoLógica e Programação►Lógica - ciência do pensamento

“correto”►Uso da lógica na representação dos

processos de raciocínio Boole (1815-1864) De Morgan (1806-1871) Frege no seu "Begriffsschrift" ("Notação de conceito", ideografia,

1879)► Programação em lógica - tem suas raízes no

cálculo de predicados, proposto por Frege em 1879

Page 4: Aula Prolog 01

PROLOGPROLOG► PROLOG = PROgramming in LOGic► Desenvolvida a partir do teorema lógico e

originalmente usada para pesquisa em processamento de linguagem natural

► Primeira implementação - Alain Colmerauer e sua equipe, na Universidade de Aix-Marseille em 1972

► Popular na comunidade de IA Sistemas Especialistas Linguagem Natural Bancos de Dados Inteligentes

► Também é útil em aplicações convencionais

Page 5: Aula Prolog 01

Características (1)Características (1)► Permite desenvolvimento e prototipação mais

rápido que a maioria das linguagens convencionais Semanticamente próxima à especificação lógica

de um programa► Uma das principais idéias - um algoritmo é

constituído por dois elementos disjuntos: a lógica e o controle Componente lógico - corresponde à definição do

que deve ser solucionado Componente de controle - estabelece como a

solução pode ser obtida

Page 6: Aula Prolog 01

Características (2)Características (2)►Requer um reajuste da maneira como

pensamos um programa Relacionamentos lógicos são definidos Prolog é usada para determinar quando

uma instrução é ou não verdadeira E se uma instrução é verdadeira, quais

ligações entre as variáveis a tornam verdadeira

Estilo de programação declarativo

Page 7: Aula Prolog 01

Características (3)Características (3)PROGRAMAS

CONVENCIONAISPROGRAMAS EM LÓGICA

Processamento Numérico Processamento SimbólicoSoluções Algorítmicas Soluções HeurísticasEstruturas de Controle e Conhecimento Integradas

Estruturas de Controle e Conhecimento Separadas

Difícil Modificação Fácil ModificaçãoSomente Respostas Totalmente Corretas

Incluem Respostas Parcialmente Corretas

Somente a Melhor Solução Possível

Incluem Todas as Soluções Possíveis

Page 8: Aula Prolog 01

PrologProlog► Prolog dá suporte ao desenvolvimento de

programas tanto a partir da perspectiva bottom up como da perspectiva top down ou inside out

► Um programa Prolog existe como uma coleção de pequenas unidades modulares, chamadas predicados Similares a subrotinas em linguagens

convencionais, mas em menor escala Podem ser adicionados e testados separadamente

em um programa, tornando possível o desenvolvimento incremental de uma aplicação

Page 9: Aula Prolog 01

ObjetivosObjetivos► Torná-lo familiar com

O banco de dados de fatos e regras de Prolog O provador de teoremas interno que permite a

Prolog responder questões sobre o banco de dados (busca backtracking)

Como variáveis lógicas são utilizadas►Diferente da maioria das linguagens

Unificação►Casamento de padrões interno

Características extra-lógicas►Tornam a linguagem prática

Como Prolog controla o seu comportamento de execução

Page 10: Aula Prolog 01

ImplementaçõesImplementações► SWI Prolog (http://www.swi-prolog.org)► LPA Prolog (http://www.lpa.co.uk/)► Visual Prolog (http://visual-prolog.com/)► Strawberry Prolog (http://www.dobrev.com/)► Open Prolog (http://www.cs.tcd.ie/open-prolog/)► Ciao Prolog (http://www.clip.dia.fi.upm.es/Software/Ciao)► GNU Prolog (http://www.gprolog.org)► YAP Prolog (http://www.ncc.up.pt/~vsc/Yap)► SICStus Prolog (http://www.sics.se/sicstus/)► Amzi! Prolog (http://www.amzi.com/)► B-Prolog (http://www.probp.com/)► tuProlog (http://tuprolog.sourceforge.net/) - Código Aberto integrável ao Java► XSB (http://xsb.sourceforge.net/)► Trinc Prolog (http://www.trinc-prolog.com)► hProlog ( http://www.cs.kuleuven.ac.be/~bmd/hProlog/ )► ilProlog ( http://www.pharmadm.com/dmax.asp )► CxProlog ( http://ctp.di.fct.unl.pt/~amd/cxprolog/ )► NanoProlog ( http://ctp.di.fct.unl.pt/~amd/cxprolog/ )

Page 11: Aula Prolog 01

Iniciando ...Iniciando ...

Page 12: Aula Prolog 01

Tipos de Código ExemploTipos de Código Exemplo► Interação com o usuário

Presença do prompt (?-)► Arquivo de código fonte

mortal(X) :- pessoa(X).pessoa(socrates).

► Selecione File/New no menu do SWI-Prolog e salve o arquivo com o nome ‘mortal.pl’

► Para carregar o código fonte, selecione o arquivo ‘mortal.pl’ a partir do menu File/Consult, ou no prompt?- consult(mortal).Yes

Page 13: Aula Prolog 01

Algumas ConsultasAlgumas Consultas► Após carregar o programa, tente as seguintes

consultas?- mortal(socrates).Yes?- mortal(X).X = socrates

► Modifique o programa e acrescente a linhapessoa(platao).

► Testando ...?- mortal(platao).Yes

► Mais um teste ...?- write(‘Hello World’).Hello WorldYes

Page 14: Aula Prolog 01

Programação Lógica (1)Programação Lógica (1)►Olhando para o exemplo com mais detalhe:

Na lógica clássica: “Todas as pessoas são mortais”

Em Prolog: “Para todo X, X é mortal se X é uma pessoamortal(X) :- pessoa(X).

Similarmente, podemos afirmar o fato simples de que Sócrates é uma pessoapessoa(socrates).

A partir dessas afirmações lógicas, Prolog pode agora informar se Sócrates é ou não mortal?- mortal(socrates).

Page 15: Aula Prolog 01

Programação Lógica (2)Programação Lógica (2)► Olhando para o exemplo com mais detalhe

(cont.): Prolog responde

Yes Também podemos perguntar “Quem é mortal?”

como a seguir:?- mortal(X).

E obter como respostaX = socrates

► Este estilo de programação declarativo é uma das maiores forças de Prolog Código fácil de escrever e manter

Page 16: Aula Prolog 01

Programação Lógica (3)Programação Lógica (3)► Na maioria das vezes, o programador fica livre

de se preocupar com estruturas de controle e mecanismos de transferência de controle Isto é feito automaticamente por Prolog

► Por outro lado, entretanto, um provador de teoremas lógicos não é uma ferramenta de programação prática Um programa precisa fazer coisas que não têm nada

relacionado com lógica, como ler e escrever termos Um programador precisa manipular estruturas de

controle internas de Prolog para que o programa execute como desejado

Page 17: Aula Prolog 01

Exemplo Ilustrativo (1)Exemplo Ilustrativo (1)► Primeiro, adicione mais alguns filósofos ao

código de ‘mortal’, para tornar o relatório mais interessante:

pessoa(zenao).pessoa(aristoteles).

► A seguir adicione o código para impressão do relatório Tenha cuidado com pontuação, caixa alta e baixa

mortal_report :-write(‘Mortais conhecidos:’),nl,mortal(X),write(X),nl,fail.

Page 18: Aula Prolog 01

Exemplo Ilustrativo (2)Exemplo Ilustrativo (2)►Carregue o programa e teste

?- mortal_report.Mortais conhecidos:socratesplataozenaoaristoteles

No

% Esta é a sintaxe para comentários.% MORTAL – O primeiro programa Prolog

mortal(X) :- pessoa(X).

pessoa(socrates).pessoa(platao).pessoa(zenao).pessoa(aristoteles).

mortal_report :- write('Mortais conhecidos:'),nl, mortal(X), write(X),nl, fail.

Page 19: Aula Prolog 01

Jargão (1)Jargão (1)► Como em qualquer campo de conhecimento, os

conceitos críticos são embutidos em suas definições de termos técnicos.

► Quando você entender termos como predicado, cláusula, backtracking e unificação terá uma boa compreensão de Prolog

► O jargão de Prolog é uma mistura de termos de programação, banco de dados e lógicos

► Um programa Prolog é um banco de dados Prolog

► O programa Prolog é composto de predicados (procedimentos, tipos de registros, relações)

Page 20: Aula Prolog 01

Jargão (2)Jargão (2)►Cada predicado é composto por seu

nome e um número chamado aridade A aridade é o número fixo de argumentos

(atributos, campos) que o predicado possui Dois predicados com o mesmo nome e

aridades diferentes são considerados predicados diferentes

Page 21: Aula Prolog 01

Jargão (3)Jargão (3)►Em nosso exemplo

pessoa/1►Se parece com múltiplos registros de dados,

cada um com um campo mortal_report/0

►Se parece com um procedimento sem argumentos

mortal/1►Uma afirmação lógica ou regra►Alguma coisa entre dado e procedimento

Page 22: Aula Prolog 01

Jargão (4)Jargão (4)►Cada predicado em um programa é

definido pela existência de uma ou mais cláusulas no banco de dados No exemplo, o predicado pessoa/1 possui

quatro cláusulas O outro predicado possui apenas uma cláusula

►Uma cláusula pode ser um fato ou uma regra As quatro cláusulas do predicado pessoa/1 são

todos fatos As cláusulas únicas de mortal_report/0 e

mortal/1 são regras

Page 23: Aula Prolog 01

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

►Fatos►Consultas Simples►...