1. Programação em LógicaProgramação em Lógica
MatemáticaMatemática
PrologProlog
– 01 –– 01 –
Inteligência ArtificialInteligência Artificial
Fábio M. Pereira
Baseado em
Amzi! inc. – www.amzi.com
3. 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
4. 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
5. 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
6. 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
7. Características (3)Características (3)
PROGRAMAS
CONVENCIONAIS
PROGRAMAS
EM LÓGICA
Processamento Numérico Processamento Simbólico
Soluções Algorítmicas Soluções Heurísticas
Estruturas de Controle e
Conhecimento Integradas
Estruturas de Controle e
Conhecimento Separadas
Difícil Modificação Fácil Modificação
Somente Respostas Totalmente
Corretas
Incluem Respostas
Parcialmente Corretas
Somente a Melhor Solução
Possível
Incluem Todas as Soluções
Possíveis
8. 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
9. 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
12. 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
13. 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 linha
pessoa(platao).
► Testando ...
?- mortal(platao).
Yes
► Mais um teste ...
?- write(‘Hello World’).
Hello World
Yes
14. 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
pessoa
mortal(X) :- pessoa(X).
Similarmente, podemos afirmar o fato simples de
que Sócrates é uma pessoa
pessoa(socrates).
A partir dessas afirmações lógicas, Prolog pode
agora informar se Sócrates é ou não mortal
?- mortal(socrates).
15. 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 resposta
X = socrates
► Este estilo de programação declarativo é uma das
maiores forças de Prolog
Código fácil de escrever e manter
16. 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
17. 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.
18. Exemplo Ilustrativo (2)Exemplo Ilustrativo (2)
►Carregue o programa e teste
?- mortal_report.
Mortais conhecidos:
socrates
platao
zenao
aristoteles
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.
19. 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)
20. 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
21. 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
22. 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
23. O que vem a seguir?O que vem a seguir?
►Fatos
►Consultas Simples
►...