Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique",...

27
PROLOG CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira

Transcript of Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique",...

Page 1: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

PROLOG

CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS

Elias Melgaço Chaves JúniorJonatas Luiz da Costa

Rafael Gonçalves Barreira

Page 2: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

RoteiroLinguagens de Programação em Lógica: históricoTHIS IS PROLOG!!!!SWI-Prolog e write ('Hello world!!!')TermosFatosConsultaRegrasRecursividadeListas

Page 3: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Linguagens de Programação em lógica: Histórico

Estudos do raciocínio lógico de Boole (1815-1864) e de De Morgan (1806-1871) .Göttlob Frege (1879) cria a primeira versão do calculo de predicados.Em 1930 Kurt Gödel e Jacques Herbrand, em estudos separados, demonstraram que o mecanismo de prova do cálculo de predicados poderia oferecer uma prova formal de toda proposição logicamente verdadeira.Em 1939 a teoria estava O.K., faltava a pratica.

Page 4: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Histórico (Continuação)

Década de 50: cálculo de predicados começou a ser computacionalmente viável; Em 1958, a forma clausal começou a despertar o interesse dos estudiosos do assunto; Em 1960 Dag Prawitz propôs a "Unificação", um novo tipo de operação sobre os objetos do cálculo de predicados; Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille

Page 5: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

E agora o Prolog (continuação)

Implementações mais "praticas" foram desenvolvidas por Battani e Meloni (1973),  Bruynooghe (1976) e, principalmente, David H. D. Warren, Luís Moniz Pereira e outros pesquisadores da Universidade de Edimburgo em 1977.

Page 6: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Pausa para apresentar o programa

Interpratador utilizado: SWI-Prolog

Page 7: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

write('Hello World!!!')

Saída:

Hello World!!!true. 

(WTF???)

Page 8: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Diferenças entre programação convencional e programação em lógica

PROGRAMAS CONVENCIONAIS PROGRAMAS EM LÓGICA

Processamento Numérico Processamento Simbolico

Soluções Algorítmicas  Soluções Heurísticas

Estruturas de Controle e Conhecimento Integradas

Estruturas de Controle e Conhecimento Separadas

Dificil 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 possiveis

Page 9: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

THIS IS PROLOG!!!!!!!!

Prolog é uma linguagem de programação em lógica

Page 10: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Algumas caracteristas do Prolog

Especificação são programasCapacidade dedutivaNão-DeterminismoReversibilidade das relações [ênfase aqui]3 formas de interpretação [muito legal também]Recursividade [mais legal ainda]

Page 11: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

As Interpretações

Declarativa.As Cláusulas* são vistas como descrição do problema

ProcedimentalAs Cláusulas são vistas como entrada  para um método 

Operacional  As Cláusulas são vistas como comandos para um procedimento de prova por refutação

* São as sentenças lógicas, e serão vistas mais adiante.

Page 12: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Termos no Prolog

Todos os objetos no Prolog são denominados termosAlguns termos:

átomoNumeroVariávelFatoRegra

Page 13: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Fatos*

São fatos!!!Representam um sentença verdadeira no PROLOG para o universo do problema em questão.Alguns fatos: Dunha está vivo, João conhece o Mário ....De forma logica porderia ser interpretado como:

Vd (onde: V=vivo e d=dunha)Cjm (onde: C=conhece, j=joão e m=mário)

e no prolog (tem que ser minúsculo mesmo*):vivo(dunha).*conhece(joão,mário).

* exemplo de clásula

Page 14: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Consultas

perguntas ao sistema PROLOGcomeça com "?-" (sem aspas)Infere resultados com base nas cláusulas existentes, verificando se a consulta é valida ou não

Momento alt + tabVariaveis:

Representam objetos genéricos e seu uso alterar a saída do processamento.Começam com a primeira letra maiúscula.

Mais um alt + tab

Page 15: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Regras* (P -> Q)

Relação causa-conseqüência, sendo que o conseqüente é informado antes do antecedente.considerando os fatos sobre paternidade** criar uma regra para a relação "avô"

* outro tipo de cláusula** calma que vai haver parte pratica

Page 16: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Regras (continuação)

Interpretação:"Uma pessoa é avô de outra, se a primeira for pai de um terceira pessoa, e essa terceira pessoa for pai da segunda"

Formalizando:    para todo X e Y        X é avô de Y se            X for pai de Z e            Z for pai de Y.

Page 17: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Regras (episodio 3: o retorno)

E o código em Prolog:

avo(X,Y) :- pai(X,Z), pai(Z,Y).

lá e de volta novamente: outro alt + tab

operadores logico:not() -> negação"," -> conjunção";" -> disjunção

Page 18: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Recursividade

Criar um termo (nome de todos os objetos do Prolog) que use o próprio termo na sua definição.Implementar a relação antepassado usando as definições de paternidade.

Momento alt + tab

"Para se entender a recursividade, tem que se entender a recursividade" #noRT

Page 19: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

"Backtracking"

As consultas são organizadas em arvores de busca.Navegação em pré ordem.

Caminho executado pelo backtracking, um percurso em pré-ordem.

Page 20: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

"Backtracking"

a, b, e, (b), f, g, (f), h, (f), i, (f), (b), (a), c, (a), donde o caminho em backtracking é representado entre parênteses

Page 21: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

"Backtracking"

gosta(joão, jazz).gosta(joão, renata).gosta(joão, lasanha).gosta(renata, joão).gosta(renata, lasanha). Pergunta: ?-gosta(joão, X), gosta(renata, X).X = lasanha.

Page 22: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Listas

[umObjeto,outroObjeto,xis,dabliu]isso acima é uma lista em Prolog, um coleção delimitada por colchetes e separados por vírgula.como todo objeto Prolog é na verdade uma arvore.existe listas vazias representadas por "[]" (sem aspas)e existe listas não vaziasUma lista não vazia é composta de:

cabeça: qualquer objeto Prologcorpo: outra lista

representado por:(cabeça,corpo)

Page 23: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Representação da lista como árvore

Page 24: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Listas: a criação

listas vazias: [ ]lista com os valores: [a,b,c,d]formato cabeça-corpo: [H|B] , onde:

H é um elemento cabeçaB é uma outra lista

Page 25: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Listas: Implementações

Verficar se um objeto é membro de um lista (uso de variavel anonima)

membro(X,L). / X é o elemento e L é a listaConcatenar listas 

concatenar(X,Y,Z). / todos sao listas e Z é resultadoRemover elemento de uma lista

removerInicio(X,L,Z). / Z é a lista L sem XInverter a lista

inverter(X,Y). / Y é a lista X invertidaverificar se uma lista de letras é palíndromo

palindromo(X). / X é uma lista de letras

Page 26: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

Referências bibliograficas

PALAZZO, Luiz A. M. Introdução à programação Prolog. 1997. Disponivel em: <http://www2.comp.ufscar.br/~bruno_katekawa/PLP/Prolog/prolog%20livro.pdf>. Acesso: 17 maio 2010.

Page 27: Prolog - RAREFECUNDO · Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille. E agora

PROLOG

CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS

Elias Melgaço Chaves JúniorJonatas Luiz da Costa

Rafael Gonçalves Barreira