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
PrologProlog
►Introdução
►Exemplos
►Jargão
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
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
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
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
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
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
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
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/ )
Iniciando ...Iniciando ...
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
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
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).
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
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
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.
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.
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)
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
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
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
O que vem a seguir?O que vem a seguir?
►Fatos
►Consultas Simples
►...

Aula Prolog 01

  • 1.
    Programação em LógicaProgramaçãoem Lógica MatemáticaMatemática PrologProlog – 01 –– 01 – Inteligência ArtificialInteligência Artificial Fábio M. Pereira Baseado em Amzi! inc. – www.amzi.com
  • 2.
  • 3.
    Lógica e ProgramaçãoLógicae 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) ►Requerum 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 EMLÓ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 familiarcom  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
  • 10.
    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/ )
  • 11.
  • 12.
    Tipos de CódigoExemploTipos 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çãoLó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çãoLó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çãoLó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)ExemploIlustrativo (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)ExemploIlustrativo (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) ►Cadapredicado é 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) ►Emnosso 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) ►Cadapredicado 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 vema seguir?O que vem a seguir? ►Fatos ►Consultas Simples ►...