Elisabete Raposo Freire Departamento de Matemática Universidade dos Açores 21 Abril 2012

Documentos relacionados
Programação em Lógica. UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010

Nelma Moreira. Aula 17

Programa. Raciocínio Lógico Matemático. Livros. Provas

Linguagens Lógicas. Aluno: Victor Rocha

Capítulo 3 Lógica de Primeira Ordem

Lógica para Computação

Inteligência Artificial IA II. LÓGICA DE PREDICADOS PARA REPRESENTAÇÃO DO CONHECIMENTO

Lógica Computacional (CC2003)

A linguagem Prolog. Sintaxe, terminologia e semântica informal: Os objectos de dados em Prolog são chamados termos.

Exercício proposto em Algoritmos do Cotidiano

Lógica Computacional (CC2003)

SCC Capítulo 5 Representação de Conhecimento através do Prolog

Inteligência Artificial. Prolog. Aula 2 Introdução (cont.)

SCC Capítulo 2 Lógica de Predicados

Objetivo PROGRAMAÇÃO EM LÓGICA. Conteúdo. Referências Bibliográficas. Introdução. Introdução. Linguagem Prolog Parte I

Lógica de primeira ordem (Capítulo 8 - Russell) Inteligência Artificial

Introdução. Esse programa recebeu o nome PROLOG (do francês PROgramation et LOGique ).

Conceitos Básicos. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur

Lógica para computação - Linguagem da Lógica de Predicados

Métodos de Verificação

1 Lógica de primeira ordem

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur

Fundamentos. Paradigma de Programação Lógico. Marco A L Barbosa

Descrição do Mundo de Wumpus. Inteligência Artificial

Inteligência Artificial 2016/2017. Grupo 1 Perguntas obrigatórias (15 Minutos)

Linguagens de Programação Princípios e Paradigmas

A linguagem da Lógica de Predicados. (Capítulo 8) LÓGICA APLICADA A COMPUTAÇÃO. Professor: Rosalvo Ferreira de Oliveira Neto

Linguagens Lógicas. Alunos: Josiane Novais Cláudio Moisés

Capítulo 3 Lógica de Primeira Ordem

Ex. 1) Considere que a árvore seguinte corresponde a uma parte do espaço de estados de um jogo de dois agentes: f=7 f=7 f=1 f=2

Fundamentos de Lógica Matemática

Introdução. Introdução. Motivação. Motivação. Solução INTELIGÊNCIA ARTIFICIAL CÁLCULO RELACIONAL (PARTE I)

Paradigmas de Programação. Programação Lógica. Profª Andréa Schwertner Charão DLSC/CT/UFSM

Prolog. MATA56 - Paradigmas de Linguagens de Programação, UFBA, Prof. Rodrigo Rocha Prolog. Iniciando.

Variáveis o nome de uma variável pode ser qualquer sequência de caracteres alfanuméricos que começa com uma letra maiúscula ou com um underscore (_).

Introdução à Programação em Prolog

MD Lógica de Proposições Quantificadas Cálculo de Predicados 1

Lógica e prova de resolução Marco Henrique Terra

Lógica. Cálculo Proposicional. Introdução

Lógica Computacional

Lógica Computacional

Lógica Computacional

1 TEORIA DOS CONJUNTOS

Fundamentos de Lógica Matemática

Paradigma de Programação Lógico. Marco A L Barbosa

Programação Lógica. A Linguagem Prolog. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia

Lógica para computação - Propriedades Semânticas da Lógica Proposicional (parte 2/2) Alfabeto Simplificado e Formas Normais

Lógica. Professor Mauro Cesar Scheer

Fundamentos 1. Lógica de Predicados

Prof. Tiago Semprebom, Dr. Eng. 09 de abril de 2013

Universidade de Aveiro

Conteúdo. Correção de Exercício Quantificadores Rosen (pg 33) Tradução Português Lógica Rosen (pg 42)

01/09/2014. Capítulo 1. A linguagem da Lógica Proposicional

2 AULA. Conectivos e Quantificadores. lógicas. LIVRO. META: Introduzir os conectivos e quantificadores

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Vimos que a todo o argumento corresponde uma estrutura. Por exemplo ao argumento. Se a Lua é cúbica, então os humanos voam.

Lógica Computacional

MATEMÁTICA DISCRETA CONCEITOS PRELIMINARES

Introdução. Programação em Lógica. Resolução na Lógica Proposional. Resolução na Lógica Proposional. Resolução na Lógica Proposional.

Aula 2: Linguagem Proposicional

Lógica Computacional

Unidade III. Essa estruturação por meio de diagramas permite uma codificação posterior praticamente em qualquer linguagem de programação.

Fórmulas Bem Formadas (wff) Prioridade dos Conectivos. Prioridade dos Conectivos. Semântica do CR. Semântica do CR

UNIDADE ACADÊMICA: Faculdade de

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

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

03/04/2016 LÓGICA MATEMÁTICA. Prof. Esp. Fabiano Taguchi. Introdução ao Prolog

Introdução ao Curso. Área de Teoria DCC/UFMG 2019/01. Introdução à Lógica Computacional Introdução ao Curso Área de Teoria DCC/UFMG /01 1 / 22

Algoritmia e Programação APROG. Algoritmia 1. Lógica Proposicional (Noções Básicas) Nelson Freire (ISEP DEI-APROG 2013/14) 1/12

Linguagens Formais e Problemas de Decisão

Lógica. Fernando Fontes. Universidade do Minho. Fernando Fontes (Universidade do Minho) Lógica 1 / 65

Introdução à Programação

Cálculo proposicional

Linguagens de Programação

Métodos para a construção de algoritmo

Apresentação do curso

Relações semânticas entre os conectivos da Lógica Proposicional(Capítulo 5)

NHI Lógica Básica (Lógica Clássica de Primeira Ordem)

Lógica para Computação

2 Lógica Fuzzy. 2 Lógica Fuzzy. Sintaxe da linguagem

Capítulo 3 Lógica de Primeira Ordem

Introdução à Lógica Proposicional Sintaxe

Professor conteudista: Ricardo Holderegger

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Lógica para Programação

Lógica Computacional

A Lógica de Primeira Ordem

BUSCA DE SOLUÇÕES EM PROLOG

Aula 2 Programação Lógica Sintaxe Prolog. Profa. Elaine Faria UFU -2014

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Lógica Computacional

Representação de Conhecimento

Programação Lógica. Programação Lógica PROLOG

Teoria dos Conjuntos MATEMÁTICA DISCRETA CONCEITOS PRELIMINARES. Fundamentos de Lógica Técnicas Elementares de Prova A NOÇÃO DE CONJUNTO

Matemática discreta e Lógica Matemática

Questões de Concursos Aula 02 CEF RACIOCÍNIO LÓGICO. Prof. Fabrício Biazotto

Dedução Natural e Sistema Axiomático Pa(Capítulo 6)

Sistemas Dedutivos Lógica de 1ª. Ordem (LPO)

Prof. A. G. Silva. 24 de agosto de Prof. A. G. Silva Programação em Lógica 24 de agosto de / 1

Transcrição:

Elisabete Raposo Freire Departamento de Matemática Universidade dos Açores 21 Abril 2012

Problema de Einstein (adaptado) Existem 5 casas de 5 cores diferentes. Em cada casa vive uma pessoa de nacionalidade diferente. Cada pessoa bebe um tipo de bebida, come um tipo de chocolate e tem um tipo de animal. Ninguém tem um animal igual ao outro, come a mesma marca de chocolate ou bebe a mesma bebida. A pergunta é: de quem é o peixe? 2

Problema de Einstein (adaptado) Pistas: O inglês mora na casa vermelha O sueco tem um cachorro O dinamarquês bebe chá A casa verde fica a esquerda da casa branca O dono da casa verde bebe café A pessoa que come Mars cria pássaros O dono da casa amarela come Snickers A pessoa que mora na casa mais central bebe leite O norueguês mora na primeira casa A pessoa que come Regina mora ao lado da que cria gatos A pessoa que cria cavalos mora ao lado da que come Snickers A pessoa que come Kinder bebe cerveja O alemão come Milka O norueguês mora ao lado da casa azul A pessoa que come Regina mora ao lado da que 3

Paradigma Lógico (Declarativo) Kowalski: Algorithm = Logic + Control Um programa é um conjunto de afirmações e regras, que descrevem o conhecimento dos objetos e das relações entre eles As respostas (consequências lógicas) às questões são obtidas recorrendo à técnica de pesquisa por retrocesso (backtracking) 4

QUE LÓGICAS? Idealmente, a escolha da lógica é feita consoante o tipo de conhecimento que queremos representar. Mas a definição de processadores lógicos não é trivial... Os sistemas de programação em lógica existentes baseiam-se essencialmente em fragmentos da lógica de primeira ordem PROLOG P e Q cláusulas de Horn execução é uma refutação (construtiva): derivação de uma contradição a partir de P e Q (redução ao absurdo) Mas existem outros sistemas (e.g. lógica modal MOLOG) 5

Exemplo: A empresa DM&Ca foi chamada a desenvolver um sistema para apurar os benefícios resultantes do novo esquema de isenção e redução de propinas. Para tal, socorreu-se da legislação em vigor. 6

P ((rend_agreg(x) X 2200) (rend_capita(y) Y 720)) beneficio(isenção) (rend_agreg(x) 2201 X 2200) (rend_capita(y) 721 Y 960)) beneficio(redução 60%) (rend_agreg(x) 2201 X 2200) (rend_capita(y) 961 Y 1450)) beneficio(redução 30%) (rend_agreg(x) membros(y) Z=X/Y) rend_capita(z) Q rend_agreg(5000) membros(5) Sim P = Q beneficio(redução 30%) 7

Lógica de 1ª ordem LINGUAGEM ALFABETO símbolos de constante: a, b, c, símbolos de função: f, g, h, símbolos de predicado: p, q, r, variáveis: X, Y, Z Cada símbolo de função e de predicado tem associada uma aridade. 8

Lógica de 1ª ordem GRAMÁTICA termos t ::= a X f(t1,,tn), f de aridade n fórmulas 9

Da lógica à programação Uma fórmula diz-se estar sob a forma normal conjuntiva (FNC) se for uma conjunção de disjunções de literais (o símbolo proposicional ou sua negação). Toda a fórmula da lógica proposicional admite uma fórmula na FNC que lhe é logicamente equivalente. Algoritmo: 10

Da lógica à programação Uma cláusula é um conjunto de literais O conjunto denota a disjunção dos literais Exemplo. A cláusula {p2, p1, p3} denota (p2 p1 p3). Notação. É habitual escrever C sob a forma P N onde P é o conjunto dos símbolos não negados e N o conjunto dos símbolos negados. (Lê-se P se N ) Exemplos. p2 p1, p3 denota (p2 p1 p3); p1, p3 denota (p1 p3); p2 denota ( p2). 11

Da lógica à programação Uma cláusula P N também pode ser vista como denotando uma implicação: a conjunção de N implica a disjunção de P Exemplo p1,p2 p3, p4 denota (p3 p4) p1 p2 ou e 12

Da lógica à programação Seja w uma fórmula. A determinação do conjunto C(w) das cláusulas que a representam pode ser feita por aplicação sucessiva das seguintes regras à representação inicial (w ): 13

Da lógica à programação Exemplo Estes são exemplos com lógica proposicional. 14

E para a Lógica de 1ª Ordem? Forma normal prenex (QX1) (QXn) w onde (QX1) (QXn) é uma sequência de quantificadores para variáveis X1,,Xn todas distintas e w é uma fórmula sem quantificadores Exemplos 15

E para a Lógica de 1ª Ordem? Para toda a fórmula existe uma fórmula sob a forma normal prenex que lhe é logicamente equivalente Algoritmo de Conversão Sem perda de generalidade, assume-se que não há variáveis quantificadas por mais de um quantificador 16

E para a Lógica de 1ª Ordem? Uma cláusula é um conjunto de literais que denota o fecho universal da disjunção dos literais Exemplo Questão O que fazer com os quantificadores existenciais? 17

E para a Lógica de 1ª Ordem? Por cada quantificador existencial introduzimos um novo símbolo de função (função de Skolem) Exemplo Representação clausal: 18

E para a Lógica de 1ª Ordem? Algoritmo de conversão Enriquecemos o algoritmo do cálculo proposicional com as seguintes transformações: 19

Da lógica à programação Exemplo "X é um subconjunto de Y se todo o elemento de X pertence a Y": 20

Da lógica à programação Exemplo. "Toda a gente, exceto primeiros-ministros, comete erros". 21

Sintaxe e Semântica dos Programas em Prolog SINTAXE termos termos simples termos compostos constantes variáveis átomos inteiros reais 22

Sintaxe e Semântica dos Programas em Prolog ÁTOMOS Correspondem a nomes próprios em linguagem natural que representam relações, funções ou objectos. Podem ter as seguintes formas sequências de letras do alfabeto latino, dígitos ou _, iniciadas por uma letra minúscula (e.g. gosta, jorge, ana_maria, x, a1); sequências de caracteres especiais ( +, -, *, /, \, :, =, etc.) Ex: :-, >, >=, -->, $$ (Cuidado: algumas sequências têm significado pré-definido como, por exemplo, a sequência :- ); sequências de caracteres entre plicas (e.g. Bom dia, 123 ) 23

Sintaxe e Semântica dos Programas em Prolog INTEIROS E REAIS Exemplos 0, 999, -12, 1.0, -13.8e+8, A amplitude da representação dos inteiros e reais depende da implementação do Prolog. VARIÁVEIS Representam objetos definidos mas não identificados; variáveis no sentido matemático e não no sentido habitual atribuído nas linguagens de programação imperativa. sequências de letras, dígitos ou _, iniciadas por uma letra maiúscula ou por _ Exemplos X, L, Lista, Valor, _3 variáveis anónimas Se uma variável ocorre somente uma vez numa cláusula, não necessita ter um nome e, assim, pode ser nomeada (anonimamente) por _. Exemplo gosta(ana,x):- bonito(x),tem_carro_marca(x,_). 24

Termos Compostos Um termo composto é formado a partir de um functor que define um objecto estruturado (ou estrutura), i.e. um objecto constituído por componentes (termos simples ou compostos) Exemplo A data pode ser representada por uma estrutura constituída por três componentes: dia, mês e ano. data(25,abril,1974) Representação de um functor Um functor é representado por um nome (na sintaxe associada aos átomos) concatenado com uma sequência de termos simples ou compostos, separados por vírgulas, e delimitados à esquerda pelo parêntesis esquerdo e à direita pelo parêntesis direito. O functor caracteriza-se pelo seu nome e a sua aridade. 25

Termos Compostos Exemplo functor argumento maior( sucessor( N ), N ) termo composto termo simples functor principal 1º argumento 2º argumento termo composto Nota Os functores caracterizam-se pelo nome e aridade. Podemos associar o mesmo nome a functores diferentes (de aridade distinta). Exemplo: ponto(x,y) e ponto(x,y,z). 26

Termos Compostos cláusulas como termos compostos Uma cláusula da forma: A :- A1,..., An. é um termo composto constituído pelo functor especial :- aplicado ao termo A, designado por cabeça da claúsula, e à conjunção dos termos A1,...,An, designada por corpo da cláusula. (a especificação de uma cláusula termina sempre com um ponto) 27

Introdução à programação em Prolog PROLOG = PROgramming in LOGic Linguagem baseada num subconjunto da lógica de predicados de 1ª ordem (cláusulas de Horn) programa = conjunto de cláusulas (axiomas) Cláusulas A :- A1,..., An. Regra ou cláusula não unitária A é verdadeiro se A1 e... e An são verdadeiros. Uma forma de resolver A é resolver A1 e... e An A. Facto ou cláusula unitária A é verdadeiro 28

Introdução à programação em Prolog Exemplo de programa P: gosta(jorge, futebol). gosta(jorge, cinema). gosta(maria,x) :- gosta(x, futebol), gosta(x, cinema). Interrogações ou perguntas ( queries ) sobre o programa P:?- gosta(jorge, futebol). (gosta(jorge,futebol) prova-se a partir de P?) yes.?- gosta(jorge, maria). no.?- gosta(jorge,x). (Existe algum valor para X tal que gosta(jorge,x) se prova a partir de P) X = futebol; X = cinema; no. ( ; indica procure outra resposta ) (não há mais respostas) 29

Introdução à programação em Prolog O Prolog é uma linguagem de programação para computação simbólica (não numérica), particularmente, adaptada à resolução de problemas que envolvam objectos e relações entre objectos, num determinado contexto. Definir cada relação através de tuplos de objectos (lista dos argumentos da relação) que satisfazem (i.e. tornam verdadeira) essa relação. Cada argumento da relação pode ser uma constante (objectos concretos num determinado contexto) ou uma variável que denotam um objecto arbitrário num determinado contexto. Questionar o programa acerca das relações definidas, i.e. para cada questão, introduzir uma conjunção de objectivos que devem ser satisfeitos pelo programa. As respostas às questões podem ser positivas (no caso do objectivo ser satisfeito, assim, diz-se que o objectivo é bem sucedido) ou negativas (no caso do objectivo não ser satisfeito, assim, diz-se que o objectivo falhou). 30

SEMÂNTICA DECLARATIVA DE UM PROGRAMA Um objetivo é verdadeiro se unifica com a cabeça de uma claúsula C e se todos os objetivos no corpo da instância de C resultante da unificação são verdadeiros. Exemplo Definição recursiva Não refere a ordem das cláusulas no programa nem a ordem dos objetivos no corpo das cláusulas programa P: significado declarativo de P: descende(x,y) :- descende(x, Z), filho(z,y). X Y Z (descende(x, Z) filho(z,y) descende(x, Y) ) descende(x,y) :- filho(x,y). X Y ( filho(x, Y) descende(x, Y) ) filho(rui, carlos). filho(jorge, rui). filho(rui, carlos) filho(jorge, rui). Segundo a semântica declarativa de P, o objetivo descende(jorge, carlos) é verdadeiro. 31

SEMÂNTICA DECLARATIVA vs SEMÂNTICA OPERACIONAL programa P: descende(x,y) :- descende(x, Z), filho(z,y). descende(x,y) :- filho(x,y). filho(rui, carlos). filho(jorge, rui). programa P modificado: descende(x,y) :- filho(x,y). descende(x,y) :- descende(x, Z), filho(z,y). filho(rui, carlos). filho(jorge, rui). 32

Interpretação declarativa vs procedimental Interpretação Declarativa Incide sobre as relações definidas no programa e, assim, determina qual o output (i.e. a resposta) do programa para um dado input (i.e. para uma dada questão). Interpretação Procedimental Incide sobre como o programa produz um output para um dado input, i.e. como as relações são avaliadas pela implementação do Prolog. A abstração dos detalhes envolvidos na interpretação procedimental dos programas é considerada uma vantagem visto que, assim, permite ao programador concentrar-se essencialmente nos aspetos declarativos da programação. Em programas relativamente grandes, os aspetos procedimentais não podem ser totalmente ignorados por razões de eficiência na execução dos programas. 33

Voltando ao problema de Einstein (adaptado) Existem 5 casas de 5 cores diferentes. Em cada casa vive uma pessoa de nacionalidade diferente. Cada pessoa bebe um tipo de bebida, come um tipo de chocolate e tem um tipo de animal. Ninguém tem um animal igual ao outro, come a mesma marca de chocolate ou bebe a mesma bebida. A pergunta é: de quem é o peixe? 34

Voltando ao problema de Einstein Representação de uma casa casa(cor, nacionalidade, bebida, chocolate, animal) Representação da fila de casas fila(casa1, casa2, casa3, casa4, casa5) 35

Voltando ao problema de Einstein Pistas: O inglês mora na casa vermelha O sueco tem um cachorro O dinamarquês bebe chá A casa verde fica a esquerda da casa branca O dono da casa verde bebe café A pessoa que come Mars cria pássaros O dono da casa amarela come Snickers A pessoa que mora na casa mais central bebe leite O norueguês mora na primeira casa A pessoa que come Regina mora ao lado da que cria gatos A pessoa que cria cavalos mora ao lado da que come Snickers A pessoa que come Kinder bebe cerveja O alemão come Milka O norueguês mora ao lado da casa azul A pessoa que come Regina mora ao lado da que 36

Predicados necessários X pertence à filay existe(x,(x,_,_,_,_)). existe(x,(_,x,_,_,_)). existe(x,(_,_,x,_,_)). existe(x,(_,_,_,x,_)). existe(x,(_,_,_,_,x)). existe(x,y) Na fila Z, a casa X situa-se ao lado da casa Y aolado(x,y,z) aolado(x,y,(x,y,_,_,_)). aolado(x,y,(y,x,_,_,_)). aolado(x,y,(_,x,y,_,_)). aolado(x,y,(_,y,x,_,_)). aolado(x,y,(_,_,x,y,_)). aolado(x,y,(_,_,y,x,_)). aolado(x,y,(_,_,_,x,y)). aolado(x,y,(_,_,_,y,x)). 37

Predicados necessários Na fila Y, a casa X ocupa a posição central meio(x,y) meio(x,(_,_,x,_,_)). Na fila Y, a casa X ocupa a primeira posição primeira(x,y) primeira(x,(x,_,_,_,_)). Nas casas Z, a casa X situa-se à esquerda da casa Y esquerda(x,y,z) esquerda(x,y,(x,y,_,_,_)). esquerda(x,y,(_,x,y,_,_)). esquerda(x,y,(_,_,x,y,_)). esquerda(x,y,(_,_,_,x,y)). 38

Representação das pistas (factos) O inglês mora na casa vermelha existe(casa(vermelha,ingles,_,_,_),fila) O sueco tem um cachorro existe(casa(_,sueco,_,_,cachorro),fila) O dinamarquês bebe chá existe(casa(_,dinamarques,cha,_,_),fila) A casa verde fica a esquerda da casa branca esquerda(casa(verde,_,_,_,_),casa(branca,_,_,_,_),fila) O dono da casa verde bebe café existe(casa(verde,_,cafe,_,_),fila), A pessoa que come Mars cria pássaros existe(casa(_,_,_,mars,passaros),fila) casa(cor, nacionalidade, bebida, chocolate, animal) 39

Representação das pistas (factos) O dono da casa amarela come Snickers existe(casa(amarela,_,_,snickers,_),fila) A pessoa que mora na casa mais central bebe leite meio(casa(_,_,leite,_,_),fila) O norueguês mora na primeira casa primeira(casa(_,noruegues,_,_,_),fila) A pessoa que come Regina mora ao lado da que cria gatos aolado(casa(_,_,_,regina,_),casa(_,_,_,_,gatos),fila) A pessoa que cria cavalos mora ao lado da que come Snickers aolado(casa(_,_,_,_,cavalos),casa(_,_,_,snickers,_),fila) casa(cor, nacionalidade, bebida, chocolate, animal) 40

Representação das pistas (factos) A pessoa que come Kinder bebe cerveja existe(casa(_,_,cerveja,kinder,_),fila) O alemão come Milka existe(casa(_,alemao,_,milka,_),fila) O norueguês mora ao lado da casa azul aolado(casa(_,noruegues,_,_,_),casa(azul,_,_,_,_),fila) A pessoa que come Regina mora ao lado da que bebe água aolado(casa(_,_,_,regina,_),casa(_,_,agua,_,_),fila) EXISTE UMA PESSOA (CASA) QUE CRIA PEIXES existe(casa(_,donopeixe,_,_,peixes),fila), casa(cor, nacionalidade, bebida, chocolate, animal) 41

Representação das pistas (factos) ESCREVER AS CASAS SEGUNDO A SUA ORDEM E AS SUAS CARACTERISTICAS write(fila) DUAS LINHAS EM BRANCO nl,nl, ESCREVE O DONO DOS PEIXES write('o dono dos peixes é o '), write(donopeixe), write('.'). Um predicado para iniciar o processo procurasolucao PROGRAMA 42

Recursos disponíveis online Linguagem da Lógica de Primeira Ordem http://www.ida.liu.se/~ulfni/lpp/ http://wiki.di.uminho.pt/twiki/pub/education/lc/materialapoio/logpo.pdf http://isabelle.math.ist.utl.pt/~lc/caplprim2.pdf (inclui sistemas dedutivos) Tutoriais sobre Prolog http://boklm.eu/prolog/page_0.html http://cs.union.edu/~striegnk/learn-prolog-now/lpnpage.php?pageid=online http://www.swi-prolog.org/publications.html http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html http://classes.soe.ucsc.edu/cmps112/spring03/languages/prolog/prologintro.pdf Compilador/Interpretador de Prolog http://www.swi-prolog.org/ Editor http://www.swi-prolog.org/ide.html instalar o compilador e em seguida o editor tendo o cuidado de selecionar a língua portuguesa 43

Desafio Para depois de estudarem a lição e instalarem o compilador, aqui fica um desafio: Cinco amigos de nomes predestinados, Coelho, Pato, Rola, Pombo e Lebre, regressam de uma caçada. Trazem consigo animais correspondentes aos respetivos nomes. Cada um matou um único animal, que não corresponde, porém, ao seu nome. Cada um falhou um animal diferente do que matou e que não corresponde também ao próprio nome. O coelho foi morto pelo caçador cujo nome é o do animal falhado por Rola. O pato foi morto pelo caçador cujo nome é o do animal falhado por Lebre. Pato, que falhou uma lebre, ficou muito aborrecido por ter morto apenas uma rola. Quais os bichos mortos e falhados por cada um dos caçadores? 44

Elisabete Raposo Freire Departamento de Matemática Universidade dos Açores 21 Abril 2012