SlideShare uma empresa Scribd logo
1 de 23
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
►...

Mais conteúdo relacionado

Mais procurados

Linguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio RufinoLinguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio RufinoAntonio Rufino
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaLeinylson Fontinele
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em PrologNatã Melo
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamenteRodrigo Amaral
 
Introducao ao python - Luciana Mota
Introducao ao python - Luciana MotaIntroducao ao python - Luciana Mota
Introducao ao python - Luciana Motalucianacmota
 
ordenacao shellsort quicksort em C
ordenacao shellsort quicksort em Cordenacao shellsort quicksort em C
ordenacao shellsort quicksort em CAlessandro Trevisan
 
Desenvolvimento de Software
Desenvolvimento de SoftwareDesenvolvimento de Software
Desenvolvimento de SoftwareVagner Santana
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonFlávio Ribeiro
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação PythonCarlos Schults
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Programação Concorrente - Aula 04
Programação Concorrente - Aula 04Programação Concorrente - Aula 04
Programação Concorrente - Aula 04thomasdacosta
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05thomasdacosta
 

Mais procurados (20)

Linguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio RufinoLinguagem Prolog - Antonio Rufino
Linguagem Prolog - Antonio Rufino
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. Costa
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em Prolog
 
01
0101
01
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Introducao ao python - Luciana Mota
Introducao ao python - Luciana MotaIntroducao ao python - Luciana Mota
Introducao ao python - Luciana Mota
 
IA Prolog
IA PrologIA Prolog
IA Prolog
 
ordenacao shellsort quicksort em C
ordenacao shellsort quicksort em Cordenacao shellsort quicksort em C
ordenacao shellsort quicksort em C
 
Desenvolvimento de Software
Desenvolvimento de SoftwareDesenvolvimento de Software
Desenvolvimento de Software
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
 
Apostila C ANSI
Apostila C ANSIApostila C ANSI
Apostila C ANSI
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação Python
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Programação Concorrente - Aula 04
Programação Concorrente - Aula 04Programação Concorrente - Aula 04
Programação Concorrente - Aula 04
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05
 

Destaque

Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - IFabio Moura Pereira
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - IntroduçãoFabio Moura Pereira
 
Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Fabio Moura Pereira
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioFabio Moura Pereira
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoFabio Moura Pereira
 
Aula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosAula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosFabio Moura Pereira
 

Destaque (20)

Aula de Prolog 06 - Recursão
Aula de Prolog 06 - RecursãoAula de Prolog 06 - Recursão
Aula de Prolog 06 - Recursão
 
Prolog 04 - Regras
Prolog 04 - RegrasProlog 04 - Regras
Prolog 04 - Regras
 
Aula Persistência 01 (Java)
Aula Persistência 01 (Java)Aula Persistência 01 (Java)
Aula Persistência 01 (Java)
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - Introdução
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do Usuário
 
Aula Java Swing
Aula Java SwingAula Java Swing
Aula Java Swing
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - Unificação
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Aula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosAula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de Dados
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 

Semelhante a Aula Prolog 01

Noções de programação lógica
Noções de programação lógicaNoções de programação lógica
Noções de programação lógicaDemis Gomes
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafaelhugodrocha
 
Introdução à Lógica de Programação
Introdução à Lógica de ProgramaçãoIntrodução à Lógica de Programação
Introdução à Lógica de ProgramaçãoAndré Agostinho
 
Apostila de algoritimo super básica
Apostila de algoritimo super básicaApostila de algoritimo super básica
Apostila de algoritimo super básicaPablo Verlly Moreira
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em ElixirAdolfo Neto
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à ProgramaçãoMario Sergio
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5Fabio Spanhol
 
Algoritmo Logica de programação básico
Algoritmo Logica de programação básicoAlgoritmo Logica de programação básico
Algoritmo Logica de programação básicoFelipe Figueiredo
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Ismar Silveira
 

Semelhante a Aula Prolog 01 (20)

Noções de programação lógica
Noções de programação lógicaNoções de programação lógica
Noções de programação lógica
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Apostila
ApostilaApostila
Apostila
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
prolog
prologprolog
prolog
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafael
 
Introdução à Lógica de Programação
Introdução à Lógica de ProgramaçãoIntrodução à Lógica de Programação
Introdução à Lógica de Programação
 
Apostila de algoritimo super básica
Apostila de algoritimo super básicaApostila de algoritimo super básica
Apostila de algoritimo super básica
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à Programação
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5
 
Algoritmo Logica de programação básico
Algoritmo Logica de programação básicoAlgoritmo Logica de programação básico
Algoritmo Logica de programação básico
 
Algoritmia Tutorial
Algoritmia TutorialAlgoritmia Tutorial
Algoritmia Tutorial
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Trabalho Lost171 (Atualizado)
Trabalho Lost171 (Atualizado)Trabalho Lost171 (Atualizado)
Trabalho Lost171 (Atualizado)
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1
 

Mais de Fabio Moura Pereira

Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaFabio Moura Pereira
 
Aula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoAula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoFabio Moura Pereira
 
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Fabio Moura Pereira
 
Desenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignFabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Fabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Fabio Moura Pereira
 

Mais de Fabio Moura Pereira (10)

Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 
Aula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoAula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de Interação
 
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
Desenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game Design
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 

Aula Prolog 01

  • 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
  • 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/ )
  • 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 ►...