logica« para programac üao÷ - técnico lisboa · este livro n÷ao p o de ser repro duzido, no to...

370
L ´ OGICA PARA PROGRAMAC ¸ ˜ AO Jo˜ ao Pav˜ ao Martins Departamento de Engenharia Inform´ atica Instituto Superior T´ ecnico Universidade T´ ecnica de Lisboa

Upload: ledien

Post on 09-Dec-2018

251 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

LOGICA PARA PROGRAMACAO

Joao Pavao Martins

Departamento de Engenharia InformaticaInstituto Superior TecnicoUniversidade Tecnica de Lisboa

Page 2: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

ii

Copyright c!2009 Joao Pavao Martins

Este livro nao pode ser reproduzido, no todo ou em parte, sob qualquer forma ou meio, electronico

ou mecanico, incluindo fotocopia, gravacao, ou qualquer sistema de registo de informacao, sem

autorizacao previa e escrita do autor:

Joao Pavao Martins

Grupo de Inteligencia Artificial

Departamento de Engenharia Informatica

Instituto Superior Tecnico

Av. Rovisco Pais

1096 Lisboa CODEX

Portugal

[email protected]

Page 3: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Indice

Glossario de notacoes v

Prefacio ix

1 Conceitos Basicos 11.1 Proposicoes e argumentos . . . . . . . . . . . . . . . . . . . . 21.2 Sımbolos logicos . . . . . . . . . . . . . . . . . . . . . . . . . 111.3 Componentes de uma logica . . . . . . . . . . . . . . . . . . . 17

1.3.1 O sistema dedutivo . . . . . . . . . . . . . . . . . . . . 191.3.2 O sistema semantico . . . . . . . . . . . . . . . . . . . 211.3.3 O sistema dedutivo e o sistema semantico . . . . . . . 21

1.4 O desenvolvimento de uma logica . . . . . . . . . . . . . . . . 231.5 Notas bibliograficas . . . . . . . . . . . . . . . . . . . . . . . . 251.6 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2 Logica Proposicional 272.1 A linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.2 O sistema dedutivo . . . . . . . . . . . . . . . . . . . . . . . . 31

2.2.1 Abordagem da deducao natural . . . . . . . . . . . . . 322.2.2 Como construir provas . . . . . . . . . . . . . . . . . . 492.2.3 Abordagem axiomatica . . . . . . . . . . . . . . . . . 532.2.4 Propriedades do sistema dedutivo . . . . . . . . . . . . 562.2.5 Resolucao . . . . . . . . . . . . . . . . . . . . . . . . . 61

Forma clausal . . . . . . . . . . . . . . . . . . . . . . . 62O princıpio da resolucao . . . . . . . . . . . . . . . . . 65Demonstracao por resolucao . . . . . . . . . . . . . . . 68Estrategias em resolucao . . . . . . . . . . . . . . . . . 71

2.3 O sistema semantico . . . . . . . . . . . . . . . . . . . . . . . 752.3.1 Valoracao, interpretacao e tabelas de verdade . . . . . 76

i

Page 4: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

ii INDICE

2.3.2 Diagramas de decisao binarios (BDDs) . . . . . . . . . 812.3.3 Diagramas de decisao binarios ordenados (OBDDs) . . 94

2.4 Solidez e completude da logica proposicional . . . . . . . . . . 1142.5 Notas bibliograficas . . . . . . . . . . . . . . . . . . . . . . . . 1242.6 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

3 Logica de Primeira Ordem 1313.1 A linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323.2 O sistema dedutivo . . . . . . . . . . . . . . . . . . . . . . . . 149

3.2.1 Deducao natural . . . . . . . . . . . . . . . . . . . . . 1493.2.2 Resolucao . . . . . . . . . . . . . . . . . . . . . . . . . 1543.2.3 Propriedades do sistema dedutivo . . . . . . . . . . . . 169

3.3 O sistema semantico . . . . . . . . . . . . . . . . . . . . . . . 1693.3.1 A semantica da logica de primeira ordem . . . . . . . 1693.3.2 O metodo de Herbrand . . . . . . . . . . . . . . . . . 177

3.4 Solidez e completude . . . . . . . . . . . . . . . . . . . . . . . 1893.5 Notas bibliograficas . . . . . . . . . . . . . . . . . . . . . . . . 1903.6 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

4 Programacao em Logica 1994.1 Clausulas de Horn . . . . . . . . . . . . . . . . . . . . . . . . 2004.2 Programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2034.3 Resolucao SLD . . . . . . . . . . . . . . . . . . . . . . . . . . 2054.4 Arvores SLD . . . . . . . . . . . . . . . . . . . . . . . . . . . 2114.5 Semantica da programacao em logica . . . . . . . . . . . . . . 214

4.5.1 Semantica declarativa . . . . . . . . . . . . . . . . . . 2144.5.2 Semantica procedimental . . . . . . . . . . . . . . . . 215

4.6 Adequacao computacional . . . . . . . . . . . . . . . . . . . . 2154.7 Notas bibliograficas . . . . . . . . . . . . . . . . . . . . . . . . 2164.8 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

5 Prolog 2195.1 Componentes basicos . . . . . . . . . . . . . . . . . . . . . . . 220

5.1.1 Termos . . . . . . . . . . . . . . . . . . . . . . . . . . 2205.1.2 Literais . . . . . . . . . . . . . . . . . . . . . . . . . . 2235.1.3 Programas . . . . . . . . . . . . . . . . . . . . . . . . 2245.1.4 Clausulas . . . . . . . . . . . . . . . . . . . . . . . . . 2255.1.5 Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . 227

5.2 A semantica do prolog . . . . . . . . . . . . . . . . . . . . 2275.3 Exemplos iniciais . . . . . . . . . . . . . . . . . . . . . . . . . 233

Page 5: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

INDICE iii

5.4 Unificacao de termos . . . . . . . . . . . . . . . . . . . . . . . 2465.5 Comparacao de termos . . . . . . . . . . . . . . . . . . . . . . 2485.6 A utilizacao de predicados pre-definidos . . . . . . . . . . . . 2495.7 Aritmetica em prolog . . . . . . . . . . . . . . . . . . . . . 2505.8 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2565.9 Instrucoes de leitura e de escrita . . . . . . . . . . . . . . . . 2615.10 Estruturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2675.11 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2715.12 O operador de corte . . . . . . . . . . . . . . . . . . . . . . . 2895.13 O falhanco forcado . . . . . . . . . . . . . . . . . . . . . . . . 3025.14 A operacao condicional . . . . . . . . . . . . . . . . . . . . . . 3025.15 A negacao em prolog . . . . . . . . . . . . . . . . . . . . . 3045.16 Execucao forcada . . . . . . . . . . . . . . . . . . . . . . . . . 3065.17 Definicao de novos operadores . . . . . . . . . . . . . . . . . . 3065.18 Comparacao com outras linguagens . . . . . . . . . . . . . . . 3105.19 Notas bibliograficas . . . . . . . . . . . . . . . . . . . . . . . . 3105.20 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

Apendices 318

A Sumario da Regras de Inferencia 319

B Manual de Sobrevivencia em Prolog 323B.1 Obtencao do Prolog . . . . . . . . . . . . . . . . . . . . . . . 323B.2 Inıcio de uma sessao . . . . . . . . . . . . . . . . . . . . . . . 325B.3 Criacao a alteracao de programas . . . . . . . . . . . . . . . . 325B.4 Carregamento e utilizacao de programas . . . . . . . . . . . . 327B.5 Informacao sobre predicados . . . . . . . . . . . . . . . . . . . 328B.6 Rastreio de predicados . . . . . . . . . . . . . . . . . . . . . . 328B.7 Informacao de ajuda . . . . . . . . . . . . . . . . . . . . . . . 335

C Solucoes de Exercıcios Seleccionados 337C.1 Exercıcios do Capıtulo 1 . . . . . . . . . . . . . . . . . . . . . 337C.2 Exercıcios do Capıtulo 2 . . . . . . . . . . . . . . . . . . . . . 337C.3 Exercıcios do Capıtulo 3 . . . . . . . . . . . . . . . . . . . . . 341C.4 Exercıcios do Capıtulo 4 . . . . . . . . . . . . . . . . . . . . . 342C.5 Exercıcios do Capıtulo 5 . . . . . . . . . . . . . . . . . . . . . 344

Bibliografia 349

Glossario 355

Page 6: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

iv INDICE

Page 7: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Glossario de notacoes

Notacao Descricao Pagina! Fim de definicao 2! Entao, portanto 4` Fim de exemplo 11! Conjuncao 12, 29" Disjuncao 14, 29¬ Negacao 15, 29# Implicacao 16, 29

(!, !) Argumento 18$ Subconjunto 18% Pertence 18& Derivabilidade 20, 38

Th(!) Teoria gerada a partir de ! 20{x : y} Conjunto de todos os elementos x

que satisfazem a propriedade y 20|= Consequencia logica 21, 80P Conjunto de todos os predicados da logica

proposicional 29Pi Sımbolo de predicado 29' Uniao de conjuntos 30

LLP Linguagem da logica proposicional 30Prem Regra de premissa 32Rep Regra de repeticao 33I! Regra de introducao da conjuncao 34E! Regra de eliminacao da conjuncao 34Hip Regra de hipotese 35Reit Regra de re-iteracao 36& ! Teorema 38& ! Teorema 38

Conjunto vazio 38I# Regra da introducao da implicacao 37E# Regra da eliminacao da implicacao 38I¬ Regra da introducao da negacao 40E¬ Regra da eliminacao da negacao 41

Page 8: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

vi GLOSSARIO DE NOTACOES

Notacao Descricao PaginaI" Regra da introducao da disjuncao 42E" Regra da eliminacao da disjuncao 42Teo Teorema (regra de inferencia derivada) 45" Q.E.D. (fim de demonstracao) 214

E#" Regra derivada da eliminacao da implicacao 46MT Modus tollens 47I¬¬ Regra derivada da introducao da dupla negacao 46def= Por definicao 48( Equivalencia 48I( Regra da introducao da equivalencia 48E( Regra da eliminacao da equivalencia 48Res Aplicacao da resolucao 67v Funcao de valoracao 76)# Mapeamento 76V Verdadeiro 76F Falso 76V Folha correspondente a verdadeiro 82F Folha correspondente a falso 82* Arco de um grafo dirigido 83

[P1, . . . , Pn] Sequencia 84, 95+ Relacao de ordem total 94

[P1, . . . , Pn]# Ordenacao introduzida por + 95, Produto carteziano 97N0 Inteiros positivos 100- Indefinido 101. Disjuncao exclusiva 14, 109:= Operador de atribuicao 110/ Quantificacao universal 1350 Quantificacao existencial 136fn

i Sımbolo de funcao (com n argumentos) 136Pn

i Sımbolo de predicado (com n argumentos) 136xi Variavel individual 136ti Termo 136

LLPO Linguagem da logica de primeira ordem 138Pn

i (t1, t2, . . . , tn) Fbf atomica 138{t1/x1, . . . , tn/xn} Substituicao 141

Page 9: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

GLOSSARIO DE NOTACOES vii

Notacao Descricao Pagina" Substituicao vazia 141· Aplicacao de substituicao 142I/ Regra da introducao da quantificacao universal 150E/ Regra da eliminacao da quantificacao universal 150I0 Regra da introducao da quantificacao existencial 152E0 Regra da eliminacao da quantificacao existencial 1521 Composicao de substituicoes 159

(D,F, R) Conceptualizacao 171D Universo de discurso 171F Conjunto de funcoes 171R Conjunto de relacoes 172I Funcao de interpretacao 173

|=I ! ! e verdadeira sugundo a interpretacao I 1762 Implicacao em clausulas Horn 201" Clausula vazia em notacao de clausulas Horn 201

s |{x1,...,xm} Restricao de s ao conjunto de variaveis {x1, . . . , xm} 204v(!) Variaveis da clausula ! 204S Funcao de seleccao 205

U! Universo de Herbrand para ! 180"! Base de Herbrand para ! 181P Estrategia de procura 210

Page 10: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

viii GLOSSARIO DE NOTACOES

Page 11: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Prefacio

Logic is invincible because in order tocombat logic it is necessary to use logicPierre Boutroux [Kline 72]

xxx

Agradecimentos

Joao Pedro Mendes Aires, Joana Alemao Alves, Ana Cardoso Cachopo,Luısa Coheur, Diogo Correia, Joao P. Costa, Maria dos Remedios Cravo,Diogo Cunha, Joao Dias, David Gaspar, Carlos Lage, Jose Lourenco, InesLynce, Leonor Martins, Filipa Morgado, Ricardo Nobre, Ana Santos, DanielSantos, Hugo Tavares, Andreia Sofia Monteiro Teixeira.

Page 12: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

x PREFACIO

Page 13: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Capıtulo 1

Conceitos Basicos

The ideal reasoner would when he hasonce been shown a single fact in all itsbearing, deduce from it not only all thechain of events which led up to it, butalso all the results which would followfrom it.Sherlock Holmes, The Five OrangePips

Uma das caracterısticas de agentes racionais e o interesse em justificar aquiloem que acreditam e em compreender o modo como os outros agentes justifi-cam aquilo em que acreditam. Um dos principais objectivos da Logica e de,a partir de uma situacao descrita por frases que se assumem serem verda-deiras, determinar que outras frases tem que ser verdadeiras nessa situacao— a logica estuda os conceitos de consequencia dedutiva e de consistencia.

Embora nao seja facil definir em poucas palavras o que e a logica, pois estaaborda um grande leque de problemas e nao possui fronteiras perfeitamentedefinidas, tocando num dos seus extremos na matematica e no outro nafilosofia, podemos dizer que, no que diz respeito a este livro, a Logica e oramo do conhecimento que aborda a analise sistematica de argumentos, oua analise dos metodos para distinguir os argumentos validos dos argumentosinvalidos.

Page 14: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2 CAPITULO 1. CONCEITOS BASICOS

1.1 Proposicoes e argumentos

Neste livro consideramos que a finalidade da Logica e a analise sistematicado raciocınio correcto, ou seja, partindo de uma situacao descrita por umcerto numero de frases declarativas, as quais se assumem serem verdadei-ras, o raciocınio correcto pretende determinar que outras frases tem queser verdadeiras nessa situacao. As frases de onde partimos sao chamadas aspremissas e as frases geradas a partir delas sao chamadas as conclusoes. Uti-lizando raciocınio correcto, a partir de premissas verdadeiras nunca seremosconduzidos a conclusoes falsas.

Antes de mais, convem reflectir sobre o que sao frases declarativas. Umafrase e qualquer veıculo linguıstico capaz de transmitir uma ideia. As frasesnao correspondem aos sımbolos linguısticos que contem, mas sim a ideiatransmitida pela frase. Neste sentido, “o Socrates e um homem” e “Socratesis a man” correspondem a mesma frase; “o Joao esta a dar a aula” e “a aulaesta a ser dada pelo Joao” tambem correspondem a mesma frase. Nestadescricao, e em todo este livro, distinguimos entre a mencao a uma entidade,colocando-a entre aspas, e o uso da mesma entidade, o qual e feito sem orecurso a aspas. Esta distincao entre uso e mencao e muito importante emlogica. Podemos dizer que “Socrates” e uma palavra com 8 letras, mas naopoderemos dizer que “Socrates” e um homem; podemos dizer que “Socratese um homem”, mas nao podemos dizer que “uma palavra com 8 letras e umhomem”.

As frases podem-se classificar em declarativas, imperativas, interrogativas eexclamativas.

As frases declarativas utilizam-se para enunciar como as coisas sao ou pode-riam ter sido. Em relacao a estas frases, faz sentido dizer que sao verdadeirasou que sao falsas. Por exemplo, “a Lua e uma estrela” e “a disciplina deLogica para Programacao e uma disciplina obrigatoria do primeiro ciclo daLEIC” sao frases declarativas que sao, respectivamente, falsa e verdadeira.

As frases imperativas prescrevem que as coisas sejam de certa maneira; asfrases interrogativas perguntam como sao as coisas; e as frases exclamativastransmitem uma exclamacao. As frases “forneca uma resposta ao exercıcio4”, “o que e a Logica?” e “cuidado!” sao exemplos, respectivamente, defrases imperativas, interrogativas e exclamativas. Em relacao a este tipo defrases, nao faz sentido dizer que sao verdadeiras ou que sao falsas.

Page 15: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.1. PROPOSICOES E ARGUMENTOS 3

Definicao 1.1.1 (Proposicao) Uma proposicao e uma frase declarativa,ou seja, e uma frase que faz uma afirmacao sobre qualquer coisa. !

Uma das caracterısticas das proposicoes e a de ser possıvel atribuir-lhes umvalor logico, um dos valores verdadeiro ou falso. Qualquer proposicao ou everdadeira ou e falsa, no entanto nem todas as proposicoes tem um valorlogico conhecido. Consideremos, por exemplo, a proposicao “no dia emque embarcou para a India, o Vasco da Gama entrou na sua nau com o pedireito”. Esta proposicao ou e verdadeira ou e falsa. No entanto, duvidamosque alguem seja capaz de avaliar o seu valor logico.

Devemos tambem notar que o valor logico de uma proposicao nao e absolutoe independente do tempo mas depende do contexto da sua interpretacao. Porexemplo, a proposicao “a relva e verde” pode ser verdadeira no contextode um campo de golfe bem tratado mas pode ser falsa para um relvadoalentejano no pico do Verao.

Na nossa vida quotidiana, argumentamos produzindo um conjunto de fra-ses declarativas, as quais apoiam uma dada frase declarativa que tentamostransmitir como a conclusao da nossa argumentacao. Ao conjunto de frasesdeclarativas que suportam o nosso argumento da-se o nome de premissas,as quais sao usadas para justificar a conclusao obtida a partir delas. Es-tas sequencias de frases, contendo premissas e conclusao, sao usadas, querpara justificar as coisas em que acreditamos, quer para justificar as nossasaccoes. Em linguagem comum e habitual separar as premissas da conclusaopor palavras tais como “entao”, “portanto” ou “consequentemente”.

O seguinte exemplo classico corresponde a um argumento:

todos os homens sao mortaiso Socrates e um homemportanto, o Socrates e mortal

Outro exemplo classico corresponde ao argumento:

o Jose teve negativa no exameportanto, o Jose nao obtem aprovacao na disciplina

Este segundo exemplo, apresenta um aspecto que e comum na nossa ar-gumentacao quotidiana e que corresponde a supressao de uma premissa.Na realidade, dado que a frase “quem tem negativa no exame nao obtemaprovacao na disciplina” faz parte do conhecimento partilhado nos meios

Page 16: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4 CAPITULO 1. CONCEITOS BASICOS

academicos, pode ser aborrecido formula-la explicitamente. Formular expli-citamente premissas que fazem parte do conhecimento comum e uma formade pedantismo. Em nome do rigor, praticaremos neste livro um certo graude pedantismo.

Definicao 1.1.2 (Argumento) Um argumento1 e um par constituıdo porum conjunto finito de proposicoes, as premissas, e por uma unica proposicao,a conclusao. !

Nos nossos argumentos, utilizaremos o sımbolo “!” para separar as premis-sas da conclusao. Assim, o argumento relativo a mortalidade de Socratessera escrito da seguinte forma:

todos os homens sao mortaiso Socrates e um homem! o Socrates e mortal

Como dissemos no inıcio deste capıtulo, o objectivo da logica e o estudo sis-tematico dos argumentos, ou seja, o seu objectivo e distinguir os argumentosque “sao bons” dos argumentos que “nao prestam”. Em termos logicos, umargumento pode ser valido ou ser invalido.

Definicao 1.1.3 (Validade) Diz-se que um argumento e valido (poden-do tambem dizer-se que as premissas implicam logicamente a conclusao,ou que a conclusao e uma consequencia logica das premissas) quando forlogicamente impossıvel ter todas as premissas verdadeiras e a conclusao falsa.O argumento diz-se invalido em caso contrario.!

Qualquer argumento e valido ou e invalido. No entanto, tal como acontecepara os valores logicos das proposicoes, para certos argumentos pode nao sesaber se estes sao validos ou se sao invalidos.

Um argumento valido apresenta uma propriedade interessante: se as pre-missas forem todas verdadeiras, entao a conclusao tambem e verdadeira.

Devemos, desde ja, ser cuidadosos ao distinguir os conceitos de validade einvalidade dos conceitos de verdade e falsidade. A validade e a invalidade saoatributos de argumentos ao passo que a verdade e a falsidade sao atributosde proposicoes.

1Tambem conhecido como argumento premissa-conclusao.

Page 17: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.1. PROPOSICOES E ARGUMENTOS 5

Exemplo 1.1.1 Consideremos o seguinte argumento:

a neve e brancao ceu e azul! a neve e branca

Sera que e logicamente impossıvel ter todas as premissas verdadeiras e a con-clusao falsa? Neste caso a resposta e simples, sim, e logicamente impossıvel.Uma vez que a conclusao e uma das premissas, se as premissas forem todasverdadeiras, entao a conclusao (que e uma destas premissas) tambem seraverdadeira. Este e um exemplo de um argumento valido. `

Exemplo 1.1.2 Consideremos o argumento:

a neve e verdeo ceu e castanho! a neve e verde

Neste caso, as premissas sao todas falsas e a conclusao tambem e falsa. Seraque podemos imaginar uma situacao em que todas as premissas sao verda-deiras? Sem grande esforco, podemos idealizar um filme de animacao quese passa num mundo em que a neve e verde e o ceu e castanho. Neste caso,as premissas sao verdadeiras e a conclusao, para este mundo imaginario,tambem e verdadeira. Para este exemplo, e impossıvel imaginar uma si-tuacao em que as premissas sao todas verdadeiras e a conclusao e falsa.Estamos novamente perante um argumento valido. `

Exemplo 1.1.3 Consideremos o argumento:

o Pedro e um aluno da LEICo Pedro e inteligente! todos os alunos da LEIC sao inteligentes

Neste caso, supondo que o Pedro e um aluno da LEIC e que o Pedro einteligente, podemos imaginar que existe um aluno da LEIC, o Zacarias, que,infelizmente, nao e inteligente. Temos uma situacao em que as premissassao todas verdadeiras e a conclusao e falsa, pelo que o argumento e invalido.`

Como estes exemplos mostram, a validade (ou a invalidade) de um argu-mento parece nao estar directamente relacionada com os valores logicos dasproposicoes que este contem. Um argumento valido pode ter as premissas

Page 18: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

6 CAPITULO 1. CONCEITOS BASICOS

falsas e a conclusao falsa (ver Exemplo 1.1.2), outros exemplos de argu-mentos validos e de argumentos invalidos com premissas e conclusoes comdiferentes valores logicos sao apresentados na Tabela 1.1.2

Valores logicos daspremissas e da Argumento valido Argumento invalido

conclusao

(Verdadeiro, Verdadeiro) todos os homens sao mortais todas as pessoas sao humanosSocrates e um homem ! todos os humanos sao pessoas! Socrates e mortal

(Verdadeiro, Falso) todos os caes sao animais! todos os animais sao caes

(Falso, Verdadeiro) todas as aves sao humanos todos os animais sao caestodos os humanos tem penas ! todos os caes sao animais! todas as aves tem penas

(Falso, Falso) todos os caes sao felinos todos os gatos sao caestodos os felinos tem penas ! todos os caes sao gatos! todos os caes tem penas

Tabela 1.1: Exemplos do princıpio da irrelevancia do valor logico.

A unica relacao entre a validade e a invalidade de um argumento e a verdadee a falsidade das proposicoes que o constituem e a seguinte: um argumentocujas premissas sao todas verdadeiras e a conclusao e falsa e um argumentoinvalido. Na realidade, considerando, de novo, a Tabela 1.1, nao consegui-mos encontrar nenhum argumento valido em que todas as premissas saoverdadeiras e a conclusao e falsa pois isto colide com a propria definicao deargumento valido.

Esta constatacao da “quase” independencia entre a validade e a invalidadede um argumento e a verdade e a falsidade das proposicoes que o constitueme traduzida pelo chamado princıpio da irrelevancia do valor logico.

2Agradeco a John Corcoran, a Bill Rapaport e a Ana Cardoso Cachopo a sugestao dealguns destes argumentos.

Page 19: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.1. PROPOSICOES E ARGUMENTOS 7

Proposicao 1.1.1 (Princıpio da irrelevancia do valor logico) Comexcepcao do caso em que as premissas sao todas verdadeiras e a conclusao efalsa, a verdade ou a falsidade das proposicoes que constituem um argumentonao e relevante para determinar a validade ou a invalidade do argumento.!

Este princıpio significa que a validade (ou a invalidade) de um argumento naoe uma funcao dos valores logicos das suas proposicoes. Tentando saber deque depende a validade ou a invalidade de um argumento, obtemos a resposta(que nao nos ajuda nada, por enquanto): e uma funcao da existencia ou naoda relacao de consequencia logica entre as premissas e a conclusao.

Consideremos agora os seguintes argumentos:

A1: o Piupiu e uma avenenhuma ave tem barbatanas! o Piupiu nao tem barbatanas

A2: o Bobi e um animaltodos os caes sao animaiso Bobi nao e um cao! nem todos os animais sao caes

A3: “factorial” e um nome em Schemenenhum nome em Scheme contem o caracter branco! “factorial” nao contem o caracter branco

A4: todas as pessoas sao humanos! todos os humanos sao pessoas

Como podemos dizer se estes sao validos ou sao invalidos? Sabemos que alogica tenta definir metodos para distinguir argumentos validos de argumen-tos invalidos. Esta distincao deve ser feita independentemente do assuntosobre o qual os argumentos tratam, pois no caso contrario nao existiria umadisciplina independente chamada logica. Para isso, em logica, consideram-seclasses constituıdas por argumentos os quais sao estruturalmente semelhan-tes excepto no que respeita aos termos especıficos do domınio de que oargumento trata. Por exemplo, os argumentos A1 e A3 sao estruturalmentesemelhantes e, no entanto, A1 diz respeito a zoologia ao passo que A3 dizrespeito a informatica. Em logica diz-se que os argumentos A1 e A3 tem amesma forma.

Para avaliar a validade ou a invalidade de um argumento considera-se que

Page 20: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

8 CAPITULO 1. CONCEITOS BASICOS

cada uma das suas proposicoes contem termos logicos (palavras tais como“e”, “ou”, “nao”, “se . . . entao”, “todos”) e termos especıficos do domıniosobre o qual a proposicao trata (nomes proprios, substantivos ou adjectivos).

Definicao 1.1.4 (Forma de um argumento) A forma de um argumentoe um argumento em que os termos especıficos (ou seja, os termos nao logicos)de cada uma das proposicoes constituintes sao substituıdos por um sımboloassociado a sua categoria gramatical. !

Exemplo 1.1.4 A forma dos argumentos A1 e A3 e a seguinte:

F1: A e um Bnenhum B tem C! A nao tem C

em que A e um nome proprio e B e C sao substantivos. `

Exemplo 1.1.5 A forma do argumento A2 e a seguinte:

F2: A e um Btodos os C sao BA nao e C! nem todos os B sao C

em que A e um nome proprio, B e um substantivo e C e um substantivo.`

A forma de um argumento pode ser estudada independentemente do domınioespecıfico de que tratam as proposicoes que o constituem. Na realidade eem virtude da sua forma e nao do seu domınio especıfico que um argumentoe valido ou e invalido. Isto significa que todos os argumentos com a mesmaforma sao ou todos validos ou todos invalidos. Este facto e traduzido peloprincıpio da forma.

Proposicao 1.1.2 (Princıpio da forma) Se dois argumentos tem a mesmaforma entao estes sao ambos validos ou ambos invalidos. !

Um modo alternativo de enunciar o princıpio da forma corresponde a dizerque todo o argumento com a mesma forma de um argumento valido e validoe que todo o argumento com a mesma forma de um argumento invalido einvalido.

Page 21: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.1. PROPOSICOES E ARGUMENTOS 9

Argumento

Palpite

Valido Invalido

Tenteencontrar

umaprova

Sim Nao

Tenteencontrarum contraargumento

Nao Sim

!!

!!!"

##

###$

% %Sabidovalido

Sabidoinvalido

Mude depalpite

(Validade ouinvalidade

desconhecida)

&

'(

Figura 1.1: Metodologia da logica.

Exemplo 1.1.6 Utilizando o princıpio da forma, podemos concluir que oargumento A4 e invalido visto que o seguinte argumento (com a mesmaforma) tem premissas verdadeiras e conclusao falsa:

A5: Todos os caes sao mamıferos! Todos os mamıferos sao caes

`

Esta discussao mostra que a logica estuda argumentos quanto a forma (edaı a razao de ser chamada um sistema formal).

Nesta seccao apresentamos uma primeira abordagem a metodologia paraestudar os argumentos quanto a forma e para decidir quais deles sao validose quais sao invalidos.

Na Figura 1.1, apresentamos as linhas gerais da metodologia para determinarse um dado argumento e valido ou e invalido. De acordo com esta metodo-logia, dado um argumento qualquer, o primeiro passo para determinar a suavalidade ou a sua invalidade corresponde a produzir um “palpite” sobre essavalidade ou invalidade. Este palpite e produzido analisando as premissase a conclusao e tentando determinar intuitivamente se a conclusao e uma

Page 22: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

10 CAPITULO 1. CONCEITOS BASICOS

!A"#$%B

"#$%C

Figura 1.2: Diagrama para mostrar a validade de F1.

consequencia das premissas.

A partir deste “palpite” seguimos uma de duas linhas de raciocınio:

1. Se pensamos que o argumento e valido, teremos que provar que eimpossıvel que as premissas sejam todas verdadeiras e que a conclusaoseja falsa. Se conseguirmos encontrar uma prova entao o argumentopassa a ser sabido valido. Ou seja, o conhecimento sobre a validade deum argumento envolve raciocınio abstracto.

2. Se pensamos que o argumento e invalido, devemos tentar encontrar umargumento com a mesma forma cujas premissas sejam todas verdadei-ras e a conclusao seja falsa. Este e chamado um contra-argumento.Encontrando um contra-argumento, o argumento original passa a sersabido invalido. Ou seja, o conhecimento sobre a invalidade de umargumento, normalmente, envolve conhecimento factual.3

No caso de nao conseguirmos provar a validade ou a invalidade de um argu-mento, podemos mudar a nossa opiniao (o nosso palpite) e tentar provar ocontrario. No caso desta tentativa tambem falhar, a validade ou a invalidadedo argumento e desconhecida.

Exemplo 1.1.7 (Prova para argumento valido) Consideremos o argu-mento A1 e tentemos obter uma prova de que este e valido. Vamos considerara forma deste argumento, F1, e representemos atraves de um diagrama deVenn4 a entidade A, todas as entidades que verificam a propriedade B etodas as entidades que verificam a propriedade C.

3Podemos tambem, se for mais facil, apresentar uma prova formal para a invalidade deum argumento.

4Os diagramas de Venn foram inventados por John Venn (1834–1923) em 1880 e foramrefinados por Clarence Irving Lewis (1883–1964).

Page 23: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.2. SIMBOLOS LOGICOS 11

Uma vez que a primeira premissa afirma que A e um B, a entidade A temque pertencer as entidades que verificam a propriedade B. A segunda pre-missa afirma que as entidades que verificam a propriedade B e as entidadesque verificam a propriedade C sao disjuntas (Figura 1.2). Do diagramaapresentado na figura, podemos concluir que a entidade A nao pode ter apropriedade C. Portanto, o argumento A1 e sabido valido. `

Exemplo 1.1.8 (Contra-argumento de argumento invalido) O argu-mento A4 pode ser mostrado invalido, produzindo o argumento A5 (verExemplo 1.1.6), com a mesma forma e com premissa verdadeira e conclusaofalsa. `

Embora um argumento seja sempre ou valido ou invalido, a sua validade(ou a sua invalidade) pode ser desconhecida. Como exemplo, consideremoso argumento em que as premissas sao os axiomas da aritmetica e cuja con-clusao e a proposicao, “para n > 2, nao existem inteiros x, y e z tais quezn = xn + yn”. Este argumento, conhecido pelo ultimo teorema de Fermat5

manteve-se com validade ou invalidade desconhecida desde a sua formulacaono seculo XVII ate 1993 (o ano em que foi demonstrado valido), apresar dosesforcos de muitos matematicos para o provar ao longo de 300 anos. Esteargumento e valido mas apenas passou a ser conhecido como valido 300 anosapos a sua formulacao.

1.2 Sımbolos logicos

Ao discutir a forma de um argumento, dissemos que as proposicoes conti-nham termos logicos e termos especıficos do domınio sobre o qual a pro-posicao tratava. Entao, mencionamos como termos logicos palavras taiscomo “e”, “ou” e “se . . . entao”. Nesta seccao abordamos a analise de algunsdesses termos logicos, introduzindo o correspondente sımbolo que utilizare-mos para os representar.

O primeiro aspecto que importa discutir e o facto de um termo logico ser umoperador de formacao de proposicoes, ou seja, um termo logico e uma pala-vra, ou uma sequencia de palavras, que quando apropriadamente composta

5Formulado em 1637 pelo matematico Frances Pierre de Fermat (1601–1665) o qualescreveu a margem das suas notas “encontrei uma prova maravilhosa para esta afirmacao,mas a margem destas notas e demasiado pequena para a apresentar”.

Page 24: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

12 CAPITULO 1. CONCEITOS BASICOS

com outras proposicoes da origem a uma nova proposicao. Como exemplosde operadores de formacao de proposicoes, podemos pensar nas palavras“e”, “ou” e “implica” ou nas sequencias de palavras “se ... entao”, “paratodo”, “o Francisco acredita que” e “e possıvel que”.

Na logica devemos escolher quais os operadores de formacao de proposicoesa considerar como sımbolos logicos e analisar qual o significado das frasesobtidas com esses operadores. Nesta seccao, iremos abordar o estudo dequatro desses operadores, correspondentes aos sımbolos logicos conjuncao,disjuncao, negacao e implicacao.

Conjuncao. A conjuncao corresponde a palavra portuguesa “e”, a qual apartir de duas proposicoes cria uma nova proposicao que afirma que ambasse verificam (ou que ambas sao verdadeiras). Por exemplo, partindo dasproposicoes “a neve e branca” e “o ceu e azul”, a proposicao “a neve ebranca e o ceu e azul” afirma simultaneamente que “a neve e branca” e que“o ceu e azul”.

Neste livro, representaremos a palavra “e” pelo sımbolo “!”. Este sımboloe designado por conjuncao. Se ! e # representarem duas proposicoes ar-bitrarias, entao ! ! # representa a conjuncao destas duas proposicoes, aqual e lida “! e #”.

Somos facilmente levados a concluir que uma frase resultante da utilizacaode uma conjuncao sera verdadeira apenas se ambas as frases que esta palavraliga forem verdadeiras.

Continuando com a analise do significado de frases compostas com a palavra“e”, podemos tambem concluir que as frases ! ! # e # ! ! terao o mesmovalor logico.

Devemos, no entanto, notar que esta comutatividade nos componentes deuma conjuncao nem sempre corresponde ao que queremos transmitir coma utilizacao da palavra “e” na nossa linguagem comum. Consideremos afrase “o Joao escorregou e caiu” (sub-entenda-se, “o Joao escorregou e oJoao caiu”). Esta frase e normalmente proferida tendo em atencao umasequencia temporal de acontecimentos, indicando que “o Joao escorregou” eque, depois, “o Joao caiu”, pelo que a frase “o Joao caiu e escorregou” naoe logicamente equivalente a frase inicial.

Deste exemplo, podemos concluir que o sımbolo “!” nao captura exacta-mente o significado da palavra portuguesa “e”. A discussao deste problema

Page 25: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.2. SIMBOLOS LOGICOS 13

esta fora do ambito deste livro, no qual assumimos que !!# e exactamenteo mesmo que # ! !, retirando a ambiguidade que possa estar associada apalavra “e”. Por outras palavras, a conjuncao captura as condicoes mınimasque impomos a palavra portuguesa “e”.

Disjuncao. A disjuncao corresponde a palavra portuguesa “ou”, a quala partir de duas proposicoes cria uma nova proposicao que afirma que aprimeira ou que a segunda e verdadeira (ou que, eventualmente, ambas saoverdadeiras).

Com a palavra “ou”, a ambiguidade a ela associada e muito maior do queno caso da conjuncao. Surge desde logo a questao do que significa “! ou#”?6 Sera que “! ou #” significa que exactamente uma das proposicoes“!” ou “#” e verdadeira? Sera que “! ou #” significa que pelo menos umadas proposicoes “!” ou “#” e verdadeira, mas que ambas tambem podemser verdadeiras? Para responder a esta questao iremos considerar algumassituacoes em que a palavra “ou” e utilizada em portugues.

Suponhamos que num determinado local esta a decorrer uma votacao, exis-tindo, quatro listas candidatas, as listas A, B, C e D. Suponhamos aindaque um dos eleitores, o Joao, apos longa refleccao sobre as listas candidatasafirma “eu vou votar na lista A ou na lista B” (sub-entenda-se, “eu vouvotar na lista A ou eu vou votar na lista B”). Com a frase anterior, o Joaoesta a afirmar que vai votar e que o seu voto apenas ira para uma das lis-tas A ou B, e nao para as duas. Neste caso, a frase composta atraves dapalavra “ou” afirma que exactamente uma das proposicoes constituintes everdadeira.

Suponhamos, por outro lado, que num dia de calor, o Joao afirma “eu voupara a praia ou para a piscina” (sub-entenda-se, “eu vou para a praia ou euvou para a piscina”). Neste caso, nao dirıamos que o Joao tinha mentidose mais tarde tomassemos conhecimento que o Joao tinha passado a manhana praia e a tarde na piscina. Neste segundo caso, a frase composta atravesda palavra “ou” afirma que uma das proposicoes constituintes e verdadeira,podendo ambas ser verdadeiras.

Face a situacoes como estas, em logica, normalmente sao definidos doissımbolos logicos que correspondem aos dois possıveis significados da palavraportuguesa “ou”:

6Estamos a assumir que ! e " representam duas proposicoes arbitrarias.

Page 26: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

14 CAPITULO 1. CONCEITOS BASICOS

• A disjuncao inclusiva, ou simplesmente disjuncao, representada pelosımbolo “"”, corresponde ao caso em que uma frase composta poreste sımbolo e verdadeira se alguma das suas proposicoes constituintesfor verdadeira ou se ambas as proposicoes que a constituem foremverdadeiras (por outras palavras, uma frase utilizando este sımboloe falsa apenas no caso de ambas as proposicoes constituintes seremfalsas).

• A disjuncao exclusiva, representada pelo sımbolo “.”, corresponde aocaso em que uma frase composta por este sımbolo e verdadeira apenasno caso de exactamente uma das suas proposicoes constituintes serverdadeira.

Neste livro, a semelhanca da maioria dos textos de logica, utilizaremos adisjuncao inclusiva. A disjuncao exclusiva sera apresentada apenas pontu-almente. Este aspecto nao tem as consequencias negativas que a primeiravista pode parecer, pois a disjuncao exclusiva pode ser definida a custa deoutros sımbolos logicos utilizados neste livro.

Se ! e # representarem duas proposicoes arbitrarias, entao !"# representaa disjuncao (inclusiva) destas duas proposicoes, a qual e lida “! ou #”.

Convem fazer ainda outra observacao quanto a utilizacao da palavra “ou” nanossa comunicacao quotidiana. Suponhamos que quando o Joao faz a afir-macao “eu vou votar na lista A ou na lista B”, o Joao ja tinha decidido, semsombra de duvida, que iria votar na lista A. Ao termos conhecimento de todaesta informacao, seremos levados a pensar que o Joao nos enganou fazendoa afirmacao “eu vou votar na lista A ou na lista B”. Na realidade, e umpressuposto da nossa comunicacao, que ao transmitirmos uma proposicaofazemos a afirmacao mais forte que estamos em posicao de fazer. A afirmacao“eu vou votar na lista A” e mais forte do que a afirmacao “eu vou votar nalista A ou na lista B” pois a primeira transmite mais informacao do que asegunda.

Apesar desta constatacao, consideramos que o valor logico da frase “! "#” apenas depende dos valores logicos das frases que a constituem, “!” e“#”, sendo verdadeiro sempre que pelo menos um deles seja verdadeiro.Esta e uma decisao semelhante a que tomamos em relacao ao sımbolo logico“!” quando simplificamos a sua utilizacao, ignorando aspectos temporaisnas frases contendo uma conjuncao.

Page 27: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.2. SIMBOLOS LOGICOS 15

Negacao. A negacao corresponde a frase em portugues “nao e verdadeque” ou a qualquer das suas contraccoes que e habitual utilizar na nossalınguagem comum, por exemplo, “eu nao vou votar na lista B”. A negacaotransforma uma proposicao noutra proposicao, a qual apenas e verdadeirase a proposicao de origem for falsa.

A negacao e representada pelo sımbolo “¬”, lido “nao” ou “nao e verdadeque”. Se ! representar uma proposicao arbitraria, entao ¬! representa anegacao da proposicao !.

Implicacao. A implicacao corresponde ao operador de formacao de frasestraduzido pelas palavras portuguesas “se . . . entao”. A frase que se seguea palavra “se” chama-se o antecedente e a frase que se segue a palavra“entao” chama-se o consequente. A implicacao corresponde a um dos ope-radores logicos em relacao aos quais existe mais controversia.

Consideremos a proposicao “se o Pedro tem nota positiva no exame, entaoo Pedro obtem aprovacao na disciplina” e tentemos relacionar os valoreslogicos do antecedente e do consequente com o valor logico da frase. Deveser evidente que se o antecedente e verdadeiro (ou seja, “o Pedro tem notapositiva no exame”) entao o consequente e obrigatoriamente verdadeiro (ouseja, “o Pedro obtem aprovacao na disciplina”). Se alguem vier a saberque “o Pedro teve nota positiva no exame” e que “o Pedro nao obteveaprovacao na disciplina”, tera certamente razoes para afirmar que a frase“se o Pedro tem nota positiva no exame, entao o Pedro obtem aprovacaona disciplina” nao e verdadeira. Assim, poderemos dizer que uma frase daforma “se . . . entao” sera verdadeira se o antecedente for verdadeiro e o con-sequente tambem for verdadeiro e sera falsa se o antecedente for verdadeiroe o consequente for falso.

Suponhamos agora que o antecedente e falso, ou seja “o Pedro nao teve notapositiva no exame”, o que e que podemos concluir juntando esta afirmacao aafirmacao anterior? “O Pedro obtem aprovacao na disciplina” ou “o Pedronao obtem aprovacao na disciplina”? Infelizmente, com esta informacao, naopodemos concluir nada, pois a frase nada nos diz sobre o que acontece nasituacao do antecedente ser falso. Podemos imaginar uma situacao em queuma nota positiva no exame dava dispensa de prova oral e aprovacao ime-diata na disciplina. Pelo que o Pedro podera obter aprovacao na disciplinase prestar uma boa prova oral. Ou podemos imaginar a situacao em que oexame e a unica prova da disciplina, pelo que a nao obtencao de positiva

Page 28: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

16 CAPITULO 1. CONCEITOS BASICOS

no exame origina a nao aprovacao na disciplina. A frase original, contudo,e omissa em relacao a estes casos, pelo que devemos admitir que se o ante-cedente for falso, o consequente podera ser verdadeiro ou ser falso. Assim,poderemos dizer que uma frase da forma “se . . . entao” sera verdadeira se oantecedente for falso, independentemente do valor logico do consequente.

Entusiasmados com esta discussao, podemos ser levados a fazer as seguintesafirmacoes “se o Governo abolir os impostos, entao eu dou 20 valores atodos os meus alunos” e “se o Pedro tem nota positiva no exame, entao oescalao maximo do IVA e 20%”. Olhando apenas para os valores logicosdo antecedente e do consequente destas proposicoes, podemos concluir quecomo o antecedente da primeira proposicao e falso (o Governo nao vai mesmoabolir os impostos), entao eu sou livre para dar as notas justas a cada aluno,em lugar de lhes dar cegamente 20 valores (o que eles muito gostariam);por outro lado, como o consequente da segunda proposicao e verdadeiro (oescalao maximo do IVA e na realidade 20%), a proposicao e verdadeira,independentemente do valor logico do antecedente. No entanto, se qualquerdestas afirmacoes fosse proferida numa conversa entre seres humanos, elasseriam imediatamente rejeitadas por nao existir qualquer relacao entre oantecedente e o consequente.

Estamos pois numa situacao semelhante a encontrada para a disjuncao, ede certo modo para a conjuncao, na qual existe uma divergencia entre autilizacao comum de palavras em portugues e a utilizacao que definimospara a logica.

Vamos adoptar o sımbolo logico “#”, designado por implicacao material, ouapenas por implicacao, para representar o operador de construcao de frasescorrespontende as palavras portuguesas “se . . . entao” e cujo valor logicoapenas depende dos valores logicos das proposicoes que correspondem aoantecedente e ao consequente. Se “!” e “#” corresponderem a proposicoesarbitrarias, a frase “! # #” le-se “se ! entao #” ou “! implica #”. O valorlogico da proposicao “! # #” e falso apenas se o antecedente for verdadeiroe o consequente for falso. Novamente, tal como no caso da conjuncao eda disjuncao, a implicacao (material) captura as condicoes mınimas queimpomos a utilizacao das palavras portuguesas “se . . . entao”.

Existem logicas que adoptam outros tipos de implicacao, por exemplo, osımbolo “*”, designado por implicacao relevante, os quais nao sao merasfuncoes logicas dos valores do antecedente e do consequente, mas dependemda existencia ou nao de uma ligacao de relevancia entre o antecedente o o

Page 29: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.3. COMPONENTES DE UMA LOGICA 17

consequente. Estes outros tipos de implicacao exigem um tratamento formalmuito mais complicado do que o que apresentamos e estao fora do ambitodeste livro.

Outros sımbolos logicos. Para alem dos quatro sımbolos logicos basicosque acabamos de apresentar, conjuncao, disjuncao, negacao e implicacao,e possıvel definir muitos outros. No Capıtulo 3 introduzimos mais doissımbolos logicos, “/” e “0”, correspondentes aos operadores de formacaode frases “para todo” e “existe”. Logicas mais sofisticadas utilizam outrossımbolos, por exemplo, “"”, para representar “e necessario” e “#”, pararepresentar “e possıvel”.

Argumentos em linguagem simbolica. Tal como em matematica existeum conjunto de sımbolos para descrever os objectos de que a matematicatrata, em logica usam-se sımbolos para descrever aqueles objectos que saocomuns a formas de argumentos, os termos logicos. Ja apresentamos ossımbolos “!”, “"”, ‘ “¬” e “#”. Mencionamos outros, por exemplo, “/”.Usando estes sımbolos logicos, e outras convencoes apresentadas neste livro,os argumentos podem ser escritos de forma muito mais rigorosa e compacta.Por exemplo, o argumento com a forma F1 sera escrito de um modo maiscompacto como:

F "1: B(A)/x[B(x) # ¬C(x)]! ¬C(A)

1.3 Componentes de uma logica

A analise que ate agora efectuamos sobre a validade ou a invalidade deargumentos embora seja intuitivamente util para apreender o conceito devalidade e a sua possıvel relacao com o conceito de verdade, nao e praticavelem argumentos complexos como aqueles que vamos querer abordar. Tendotransmitido os conceitos basicos, vamos agora comecar a desenvolver umformalismo para a analise sistematica de argumentos.

Antes de comecar a falar sobre uma logica, precisamos de especificar a lin-guagem a utilizar na descricao dos nossos argumentos. Esta linguagem es-

Page 30: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

18 CAPITULO 1. CONCEITOS BASICOS

tabelece as coisas sobre as quais podemos falar e o nıvel de detalhe comque podemos aborda-las. Por exemplo, podemos convencionar que usare-mos letras para representar as proposicoes e que usaremos apenas os quatrosımbolos logicos que ja mencionamos, a conjuncao, a disjuncao, a negacaoe a implicacao. Se P e Q representarem proposicoes, entao e natural queadmitamos que P "Q, P !(Q"P ) e ¬P tambem representem proposicoes nanossa linguagem, mas poderemos ser levados a rejeitar P ! "Q e !P comopossıveis proposicoes. Em nome do rigor, esta linguagem dever ser definidade um modo claro e nao ambıguo, o que nos leva ao conceito de formulabem formada.

Definicao 1.3.1 (Formula bem formada) A linguagem de uma logica edefinida atraves de um conjunto de regras de formacao que especificam asfrases legais da logica, as chamadas formulas bem formadas (abreviadas porfbfs). !

Exemplos de regras de formacao de frases, para diferentes linguagens, saoapresentados nos capıtulos 2 e 3.

Definicao 1.3.2 (Argumento – versao 2) Sendo L a linguagem que cor-responde as formulas bem formadas, um argumento e um par (!, !), no qual! $ L e ! % L.7 !

Como em qualquer linguagem, sobre as frases de L podemos efectuar doistipos distintos de operacoes:

• Podemos efectuar operacoes de manipulacao de sımbolos, considerandoa linguagem apenas ao nıvel simbolico. Atraves destas operacoes efec-tuamos o que se chama provas, sequencias de frases da linguagem(fbfs), comecando pelas premissas e tentando obter uma dada con-clusao;

• Podemos atribuir um significado aos sımbolos, e atraves deste signifi-cado, podemos atribuir um valor logico, as proposicoes que constituemum argumento. Este sera um dos passos para poder determinar a va-lidade ou a invalidade do argumento. Note-se que, como sabemos, avalidade ou a invalidade de um argumento nao e uma funcao do valorlogico das proposicoes que o constituem, pelo que para determinar a

7Utilizamos letras gregas minusculas (!, ", etc.) para representar proposicoes e letrasgregas maiusculas (!, ", etc.) para representar conjuntos de proposicoes.

Page 31: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.3. COMPONENTES DE UMA LOGICA 19

validade ou a invalidade de um argumento teremos que fazer outrascoisas baseadas no valor logico dos constituintes de um argumento.

Estas operacoes sao efectuadas em diferentes componentes de uma logica,nomeadamente, no sistema dedutivo e no sistema semantico.

1.3.1 O sistema dedutivo

O sistema dedutivo contem um conjunto de regras para a manipulacao dossımbolos existentes na linguagem, as regras de inferencia. Estas regras naofazem parte da linguagem da logica mas falam sobre as entidades existentesna linguagem, ou seja, pertencem a meta-linguagem da logica.

Definicao 1.3.3 (Regra de inferencia) Uma regra de inferencia e umaregra de manipulacao de sımbolos que especifica como gerar novas formulasbem formadas a partir de formulas bem formadas que ja existem. !

As regras de inferencia apenas consideram os sımbolos que existem nas fra-ses da linguagem sem se preocuparem com o significado destes sımbolos.Ou seja, as regras de inferencia permitem-nos escrever novas formulas bemformadas a partir da mera existencia de outras formulas bem formadas. Eevidente que na criacao das regras de inferencia o significado dos sımboloslogicos e tido em consideracao, no entanto, a aplicacao das regras de in-ferencia e feita de uma forma mecanica.

Exemplo 1.3.1 (Utilizacao de regra de inferencia) Com aquilo que jasabemos sobre a conjuncao e natural estabelecer a regra de inferencia queafirma “se ! e # sao duas proposicoes arbitrarias a que temos acesso,8 entaosomos autorizados a escrever ! ! #”. Se P e Q forem duas proposicoes danossa linguagem, a que temos acesso, esta regra de inferencia permite-nosescrever, entre muitas outras, as seguintes proposicoes:

P !Q

P ! P

P ! (P ! P )

Notemos que embora nao saibamos a que proposicoes correspondem P e Q,a regra de inferencia autoriza-nos a escrever novas proposicoes utilizandoexclusivamente manipulacoes sintacticas. `

8Esta expressao “a que temos acesso” sera, naturalmente, definida de um modo formal.

Page 32: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

20 CAPITULO 1. CONCEITOS BASICOS

O sistema dedutivo pode tambem conter um certo numero de fbfs que saoaceites sem demonstracao, aos quais se da o nome de axiomas.

Definicao 1.3.4 (Derivabilidade) Dado um argumento (!, !) se existiruma sequencia de regras de inferencia que aplicadas as fbfs de ! (e as fbfsgeradas a partir de !) produz !, diz-se que ! e derivavel a partir de ! eescreve-se ! & !. !

Definicao 1.3.5 (Argumento demonstravel) Se ! & ! entao diremosque o argumento (!, !) e demonstravel. !

Note-se que o operador “&” e dependente do sistema dedutivo e, portanto,em rigor ele devia ser indexado com uma identificacao do sistema dedutivono qual se utiliza o conceito de derivabilidade. No entanto, para simplificara notacao e sempre que nao haja perigo de confusao, utilizaremos apenas“&”, significando derivabilidade no sistema dedutivo em consideracao.

Exemplo 1.3.2 (Derivabilidade) Tendo em atencao a regra de inferenciaapresentada no Exemplo 1.3.1, podemos concluir que {P,Q} & P ! (P !P ).Contudo, se a regra de inferencia apresentada nesse mesmo exemplo naoexistisse no nosso sistema dedutivo, ja nao terıamos a garantia que P!(P!P )fosse derivavel de {P,Q}. Note-se que dizemos ja nao terıamos a garantiapois a regra que permite essa derivacao directa nao existia, o que nao querdizer que nao existam outras regras de inferencia que permitam atingir omesmo resultado. `

Definicao 1.3.6 (Prova) A sequencia de fbfs gerada a partir de ! de modoa obter ! (incluindo ! e !) e chamada uma prova de ! a partir de !. !

Uma prova e pois uma sequencia finita de fbfs (normalmente escrita emforma de coluna), tal que cada fbf e ou uma premissa ou o resultado daaplicacao de uma regra de inferencia a uma das fbfs anteriores da prova.9

Definicao 1.3.7 (Teoria gerada a partir de um conjunto de fbfs)Dado um conjunto de fbfs, ! $ L, ao conjunto de todas as fbfs derivaveis apartir de ! da-se o nome de teoria gerada a partir de ! e escreve-se Th(!).Formalmente, Th(!) = {! : ! & !}. !

9As linhas de uma prova tambem podem corresponder a axiomas ou a teoremas, masisso nao e relevante por agora.

Page 33: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.3. COMPONENTES DE UMA LOGICA 21

1.3.2 O sistema semantico

O sistema semantico especifica as condicoes sob as quais as proposicoes, asfbfs, sao verdadeiras ou sao falsas. A semantica e baseada no conceito de in-terpretacao, informalmente uma maneira de atribuir significado aos sımbolosque compoem a linguagem.10 Uma interpretacao permite determinar os va-lores logicos das proposicoes.

Definicao 1.3.8 (Consequencia logica) Dado um argumento (!, !), senao existir nenhuma interpretacao que torna todas as proposicoes em !verdadeiras e ! falsa, entao diz-se que ! implica logicamente !, ou ! e umaconsequencia logica de ! e escreve-se ! |= !. !

Da definicao anterior podemos concluir que se ! |= !, entao o argumento(!, !) e valido.

Note-se que a frase “nao existir nenhuma interpretacao que torna todasas proposicoes em ! verdadeiras e ! falsa” corresponde a uma afirmacaomuito forte. Esta frase nao significa que nao somos capazes de encontraruma interpretacao nestas condicoes, mas sim que e impossıvel encontra-la.

1.3.3 O sistema dedutivo e o sistema semantico

No sistema dedutivo nada se diz acerca da validade (o sistema dedutivoapenas involve manipulacao sintactica de fbfs). Por outro lado, o sistemasemantico nada diz sobre derivabilidade (o sistema semantico apenas se pre-ocupa com a atribuicao de significado a fbfs). Estes componentes fornecemdiferentes perspectivas sobre as possıveis relacoes entre as premissas e a con-clusao. Embora o sistema dedutivo e o sistema semantico sejam aspectosdistintos de uma logica, eles devem ser compatıveis para que a logica facasentido.

Definicao 1.3.9 (Solidez) Uma logica e solida (do ingles, “sound”) sequalquer argumento demonstravel (com o seu sistema dedutivo) e validode acordo com a sua semantica (Figura 1.3). !

Informalmente, uma logica ser solida significa que a partir de proposicoesverdadeiras apenas podemos provar proposicoes verdadeiras. Ou seja, par-

10A semantica e especificada de um modo rigoroso nas Seccoes 2.3 e 3.3.

Page 34: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

22 CAPITULO 1. CONCEITOS BASICOS

Linguagem

Derivabilidade$

!!

!!

!!

!!

!!"

##

##

##

###$Validade

|=

Sistema dedutivo Sistema semantico

'Solidez(

Completude

Figura 1.3: Relacao entre o sistema dedutivo e o sistema semantico.

tindo de um conjunto de premissas, o nosso sistema dedutivo nao gera ne-nhuma conclusao errada.

Note-se que o conceito de uma logica ser solida aplica-se a existencia ounao de regras de inferencia erradas. Podemos levar este conceito ao extremodizendo que se nao existirem regras de inferencia no sistema dedutivo, entaonao faremos qualquer erro no nosso raciocınio pois nao podemos provar nada.Temos, neste caso uma logica solida mas sem qualquer interesse.

Definicao 1.3.10 (Completude) Uma logica e completa (do ingles, “com-plete”) se qualquer argumento valido de acordo com a sua semantica e de-monstravel no seu sistema dedutivo (Figura 1.3). !

Informalmente, uma logica ser completa significa que podemos provar todasas proposicoes verdadeiras, tendo em atencao as premissas.

A completude preocupa-se com a questao de ser ou nao possıvel provartudo aquilo que e verdadeiro, tendo em atencao as premissas. Aqui tambempodemos imaginar um caso extremo, pensando num sistema dedutivo quenos permita derivar todas as formulas bem formadas. Neste caso extremo,dado que podemos inferir qualquer coisa, entao podemos provar todas asproposicoes verdadeiras (e tambem todas as proposicoes falsas). Neste casoa logica sera completa, mas nao solida, e tambem sem qualquer interesse.

Os conceitos de solidez e de completude nao sao uma propriedade apenas dosistema dedutivo ou do sistema semantico mas sim uma relacao entre os doissistemas. Numa logica solida e completa as nocoes de demonstrabilidade ede validade sao extensionalmente equivalentes no sentido em que se aplicamexactamente aos mesmos argumentos.

Page 35: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.4. O DESENVOLVIMENTO DE UMA LOGICA 23

1.4 O desenvolvimento de uma logica

Os conceitos de derivabilidade e de validade sao definidos para um sistemaformal e apenas aplicaveis a argumentos formais. No nosso dia a dia trata-mos com argumentos informais e classificamo-los em validos ou em invalidos.Na realidade fazemos mais que isso, consideramos argumentos aceitaveis ounao aceitaveis em que um argumento aceitavel, para alem de ser intuitiva-mente valido apresenta uma ligacao coerente entre as premissas e a con-clusao.

A questao que levantamos nesta seccao diz respeito a relacao entre a nossanocao intuitiva de validade e a nocao formal de validade introduzida poruma logica. Ja vimos que em relacao a quatro dos sımbolos logicos introdu-zimos algumas simplificacoes que fazem com que esses sımbolos logicos nemsempre tenham o mesmo significado que associamos as palavras portuguesasa que estes correspondem. Uma vez que uma logica pretende formalizar osargumentos informais, representando-os numa forma precisa e generalizavel,um sistema logico para ser aceitavel deveria apresentar a seguinte proprie-dade: se um dado argumento informal e traduzido num argumento formal dalogica entao esse argumento formal devera ser valido apenas se o argumentoinformal e intuitivamente valido.

Na realidade, podemos comecar o desenvolvimento de um sistema formalcom base na consideracao de conceitos intuitivos de validade de argumentosinformais. Representamos os argumentos informais atraves de uma notacaosimbolica e criamos regras de inferencia e um sistema para avaliar a verdadeou a falsidade de proposicoes, de modo que a representacao formal de argu-mentos informais considerados validos de origem a argumentos validos nonosso sistema e analogamente para argumentos invalidos.

Utilizando estas regras de inferencia e o sistema semantico, outros argumen-tos formais validos no sistema podem corresponder a argumentos informaisque sao intuitivamente considerados invalidos. Face a esta situacao pode-mos rever as regras do sistema ou, eventualmente, se as regras a rever saoaceitaveis e plausıveis e se a nossa intuicao sobre a invalidade do argumentoinformal nao e particularmente forte, podemos rever a nossa opiniao sobrea validade do argumento informal.

A logica intuitiva que utilizamos quotidianamente para avaliar a validadeou a invalidade de argumentos informais da-se o nome de logica utens, alogica que possuımos. A avaliacao rigorosa de argumentos baseada num

Page 36: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

24 CAPITULO 1. CONCEITOS BASICOS

Logica utens(argumentos informais)

nocao intuitiva de validade

Logica docens(argumentos formais)

nocao formal de validade

'formalizacao

%

avaliacao

%

avaliacao

Figura 1.4: Logica utens e logica docens.

sistema formal da-se o nome de logica docens, a logica que aprendemos.11

Na Figura 1.4 apresentamos a relacao entre estas duas logicas.

Como os argumentos informais contem ambiguidade (recorde-se a discussaoque apresentamos na Seccao 1.2), na passagem de um argumento informalao argumento formal correspondente algo se perde.

O primeiro passo para criar uma logica corresponde a escolha de um con-junto de sımbolos logicos. Estes sımbolos logicos vao determinar quais osargumentos formais admissıveis e tambem o que se perde da passagem doargumento informal para o argumento formal correspondente. Desenvolve-se entao um sistema para decidir a validade de argumentos. Comparam-seos resultados produzidos pelo sistema com as nossas nocoes intuitivas devalidade e de invalidade. No caso de resultados nao concordantes podemosrever o sistema ou rever as nossas intuicoes. Uma vez o sistema “afinado” eletorna-se o elemento de decisao sobre a validade ou a invalidade dos argu-mentos.

11As designacoes “logica utens” e “logica docens” foram introduzidas pelo matematicoamericano Charles Sanders Peirce (1839–1914), que, por sua vez, adoptou esta terminolo-gia dos trabalhos sobre logica da Idade Media.

Page 37: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

1.5. NOTAS BIBLIOGRAFICAS 25

1.5 Notas bibliograficas

A logica e estudada ha mais de 2000 anos. Uma excelente apresentacao dodesenvolvimento historico desta disciplina pode ser consultada em [Knealee Kneale 88].

A metodologia que apresentamos para decidir se um argumento e valido oue invalido foi sugerida por Aristoteles (por volta do ano 350 a.c.) e foire-articulada na sua forma moderna por Alfred Tarski (1901–1983).

Uma boa discussao sobre o conceito de argumento e quanto a determinacaoda forma de um argumento pode ser consultada em [Haack 78, paginas 22a 27].

Os livros sobre logica podem ser considerados em duas grandes categorias, alogica filosofica [Haack 78] e a logica matematica[Church 56], [Fitch 52], [Kle-ene 52], [Lemon 78], [Tarski 65], [Whitehead e Russell 10]. A logica filosoficaestuda os aspectos filosoficos que surgem quando utilizamos ou pensamos so-bre uma logica formal, incluindo referencia, identidade, verdade, negacao,quantificacao, existencia e necessidade, estando concentrada nas entidades– pensamentos, frases ou proposicoes – que podem ser verdadeiras ou falsas.Neste sentido, muitos dos aspectos considerados tem ligacoes a filosofia damente e a filosofia da linguagem. A logica matematica e uma sub-disciplinada logica e da matematica. Esta disciplina aborda o estudo matematico dalogica e a aplicacao deste estudo a outras areas da matematica. A logica ma-tematica tem estreitas relacoes com a informatica e com a logica filosofica.Aspectos comuns na logica matematica incluem o poder expressivo de umalogica e o poder dedutivo de um sistema dedutivo.

1.6 Exercıcios

1. Aplique a metodologia da logica para determinar a validade ou a in-validade dos seguintes argumentos:

(a) Fernando Pessoa e Alberto CaeiroRicardo Reis e Alberto Caeiro! Fernando Pessoa e Ricardo Reis

(b) Fernando Pessoa e humanoRicardo Reis e humano! Fernando Pessoa e Ricardo Reis

Page 38: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

26 CAPITULO 1. CONCEITOS BASICOS

(c) Fernando Pessoa e Alberto CaeiroLuis de Camoes nao e Ricardo Reis! Luis de Camoes nao e Alberto Caeiro

(d) Fernando Pessoa e humanoFernando Pessoa nao e Luis de Camoes! Luis de Camoes nao e humano

(e) Ricardo Reis e Alberto CaeiroRicardo Reis e um poeta! Alberto Caeiro e um poeta

2. Aplicando a metodologia da logica, mostre se os seguintes argumentossao validos ou sao invalidos:

(a) todos os homens sao saudaveisuma mulher e saudavel! todos os homens sao mulheres

(b) o Pedro e um professoros professores sao pessoasas pessoas sao animais! o Pedro e um animal

(c) os homens sao humanoso Silvestre nao e um homem! o Silvestre nao e humano

3. Preencha a Tabela 1.1 com novos argumentos para cada uma das si-tuacoes possıveis.

4. Considere a frase em portugues “o Joao foi despedido e revoltou-se”.Discuta o significado informal desta frase, comparando-o com o signifi-cado atribuıdo pela logica. Em particular, considere a comutatividadeda conjuncao.

Page 39: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Capıtulo 2

Logica Proposicional

On the contrary, Watson, you can seeeverything. You fail, however, to rea-son from what you see. You are tootimid in drawing your inferences.Sherlock Holmes, The Adventure of theBlue Carbuncle

Um dos aspectos envolvidos na definicao de uma logica corresponde a escolhada linguagem a utilizar na representacao de proposicoes. A definicao dalinguagem vai determinar as coisas que podem ser expressas com a linguageme o nıvel de detalhe com que estas coisas podem ser expressas.

A logica proposicional apresenta uma linguagem muito simples. Em logicaproposicional, o nıvel mais elementar que utilizamos na representacao e oconceito de sımbolo de proposicao. Um sımbolo de proposicao correspondea uma proposicao como um todo, ao interior da qual nao podemos aceder.De modo a clarificar esta afirmacao, consideremos a proposicao “Socrates eum homem”. Esta proposicao pode ser representada em logica proposicionalpor um sımbolo de proposicao, digamos P . Este sımbolo de proposicao naonos da nenhuma indicacao sobre as entidades “Socrates”, nem “homem”,nem sobre a relacao que existe entre elas. A proposicao existe apenas comoum unico sımbolo. Definindo o poder expressivo de uma linguagem como ascoisas que e possıvel representar na linguagem, diremos que, em relacao aafirmacao anterior, a logica proposicional nao tem poder expressivo sufici-ente para representar as entidades “Socrates”, nem “homem”, nem a relacao

Page 40: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

28 CAPITULO 2. LOGICA PROPOSICIONAL

que existe entre elas.

Apesar do seu fraco poder expressivo, a grande vantagem da logica propo-sicional, apresentada neste capıtulo, advem da simplicidade com que estapermite apresentar certos conceitos, abrindo a porta para uma boa compre-ensao de logicas mais complexas.

2.1 A linguagem

Sımbolos da linguagem. Ao definir uma linguagem, teremos que comecarpor especificar quais os sımbolos que fazem parte das frases da linguagem.1 Alinguagem da logica proposicional admite tres tipos de sımbolos, os sımbolosde pontuacao, os sımbolos logicos2 e os sımbolos de proposicao.

1Em informatica, estes designam-se por sımbolos terminais.2Tambem conhecidos por conectivas logicas.

Page 41: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.1. A LINGUAGEM 29

1. Sımbolos de pontuacao: ( )

2. Sımbolos logicos: ¬ ! " #

(a) o sımbolo “¬” corresponde a operacao de negacao;(b) o sımbolo “!” corresponde a operacao de conjuncao;(c) o sımbolo “"” corresponde a operacao de disjuncao;(d) o sımbolo “#” corresponde a operacao de implicacao.

3. Sımbolos de proposicao: Pi (para i 3 1)

Um sımbolo de proposicao, ou apenas uma proposicao, corresponde aum sımbolo que representa uma proposicao e que, portanto, pode terum valor logico.

A razao para parametrizar os sımbolos de proposicao, em lugar deutilizar sımbolos individuais para os representar, resulta do facto queatraves desta parametrizacao obtemos uma capacidade ilimitada paradefinir novos sımbolos de proposicao.

Representamos por P o conjunto de todos os sımbolos de proposicaoda logica proposicional, ou seja

P = {P : P e um sımbolo de proposicao }.

Frases da linguagem. Nem todas as combinacoes de sımbolos terminaiscorrespondem a frases da linguagem. As frases legais em logica proposicionalsao designadas por formulas bem formadas (ou apenas por fbfs).

Definicao 2.1.1 (Formula bem formada de LLP ) As formulas bem for-madas (ou fbfs) correspondem ao menor conjunto definido atraves das se-guintes regras de formacao:

1. Os sımbolos de proposicao sao fbfs (chamadas fbfs atomicas);

2. Se ! e uma fbf, entao ¬! e uma fbf;

3. Se ! e # sao fbfs, entao (! ! #), (! " #) e (! # #) sao fbfs. !

Por “menor conjunto” entende-se que as unicas formulas que sao fbfs saoas que o sao em virtude das condicoes 1 a 3 da definicao de formula bemformada.

Page 42: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

30 CAPITULO 2. LOGICA PROPOSICIONAL

A fbf ¬! le-se “nao e verdade que !”; a fbf (!!#) le-se “! e #”; a fbf (!"#)le-se “! ou #” e a fbf (! # #) le-se “! implica #” ou, alternativamente,“se ! entao #”.

A linguagem da logica proposicional, designada por LLP , e composta porfbfs construıdas a partir de sımbolos obtidos do conjunto

{(, )} ' {¬,!,",#} ' P.

Quando nao existir perigo de confusao, utilizaremos letras romanas maius-culas, P , Q, R, etc., sem ındices, para representar sımbolos de proposicao;assim, o conjunto basico de sımbolos da nossa linguagem corresponde, deum modo simplificado, a

{(, )} ' {¬,!,",#} ' {P,Q,R, . . .}.

De acordo com estas definicoes, se P , Q, e R correspondem a sımbolos deproposicao, as seguintes frases sao fbfs:3

¬P

(P !Q)

((P !Q) # R)

((P " ((P !Q) # R)) !R)

Sempre que possıvel, os parenteses redundantes serao omitidos, pelo que astres ultimas fbfs apresentadas serao escritas do seguinte modo:

P !Q

(P !Q) # R

(P " ((P !Q) # R)) !R

As seguintes sequencias de sımbolos nao sao fbfs:4

()

(# (! P Q) R)

(P " # ((P !Q) R)) !R)(

Antes de continuar, apresentaremos alguns exemplos de fbfs em logica pro-posicional e a sua relacao com proposicoes expressas em portugues.

3Como exercıcio, deve mostrar que estas frases sao fbfs.4Como exercıcio, deve mostrar que estas frases nao sao fbfs.

Page 43: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 31

Exemplo 2.1.1 Suponhamos que P representa a proposicao “esta a cho-ver”, Q representa a proposicao “esta vento” e R representa a proposicao“eu fico em casa”. Neste caso, a fbf P ! Q representa a proposicao “esta achover e esta vento”; a fbf (P !Q) # R representa a proposicao “se esta achover e esta vento, entao eu fico em casa”. `

2.2 O sistema dedutivo

O sistema dedutivo especifica as regras de inferencia, regras que permitema introducao de novas fbfs a partir de fbfs existentes.

Como dissemos no capıtulo anterior, as regras de inferencia nao pertencema linguagem da logica, mas falam sobre as entidades da linguagem, ou seja,pertencem a meta-linguagem da logica. As regras de inferencia sao conside-radas como regras de manipulacao simbolica pois especificam que a partir deum certo numero de fbfs com uma certa forma, somos autorizados a escreveruma nova fbf com uma certa forma. Devemos tambem notar que uma vezque as regras de inferencia pertencem a meta-linguagem, elas falam sobrefbfs, e por isso as regras de inferencia utilizam variaveis cujo domınio sao asfbfs.

Por convencao, utilizaremos letras gregas minusculas (!,#, $, etc.) comometa-variaveis cujo domınio sao as fbfs.

Exemplo 2.2.1 A fbf (P !Q) # R, podera ser representada dos seguintesmodos:

• Apenas por !, uma meta-variavel cujo valor e a fbf (P !Q) # R.

• Por ! # # em que ! e uma meta-variavel cujo valor e a fbf P !Q e #e uma meta-variavel cujo valor e a fbf R.

• Por (! ! #) # $, em que ! e uma meta-variavel cujo valor e a fbf P ,# e uma meta-variavel cujo valor e a fbf Q, e $ e uma meta-variavelcujo valor e a fbf R. `

Existem duas abordagens principais ao desenvolvimento de um sistema de-dutivo. Uma delas, chamada deducao natural, apenas contem regras deinferencia. A outra, chamada axiomatica, baseia-se na existencia de um con-junto de axiomas, fbfs que se aceitam sem demonstracao, juntamente com

Page 44: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

32 CAPITULO 2. LOGICA PROPOSICIONAL

um pequeno numero de regras de inferencia. Na proxima seccao apresen-tamos uma abordagem da deducao natural e na Seccao 2.2.3 apresentamosuma abordagem axiomatica.

2.2.1 Abordagem da deducao natural

Em sistemas de deducao natural, existem tipicamente duas regras de in-ferencia para cada sımbolo logico, a regra de introducao que diz como intro-duzir uma fbf que utiliza o sımbolo logico, e a regra de eliminacao que dizcomo usar uma fbf que contem o sımbolo logico.

Antes de apresentar as regras de inferencia, apresentamos de um modo ri-goroso os conceitos de prova e de prova de uma conclusao a partir de umconjunto de premissas.

Definicao 2.2.1 (Prova – versao 2) Uma prova e uma sequencia finitade linhas numeradas, cada uma das quais ou contem uma premissa ou umafbf que e adicionada a prova utilizando as fbfs que existem nas linhas ante-riores e uma das regras de inferencia.

No lado direito de cada linha existe uma justificacao da introducao da linhana prova. !

Definicao 2.2.2 (Prova de ! a partir de !) Uma prova de ! a partirde ! e uma prova cuja cuja ultima linha contem a fbf ! e cujas restanteslinhas contem ou uma fbf em ! ou uma fbf obtida a partir das fbfs daslinhas anteriores atraves da aplicacao de uma regra de inferencia. Se existiruma prova de ! a partir de !, dizemos que ! e derivavel a partir de ! eescrevemos ! & !.

Regra da premissa. Existe uma regra de inferencia que permite a in-troducao de qualquer fbf numa prova, marcando-a como uma premissa. Estaregra, chamada regra da premissa, identificada por “Prem”, afirma que qual-quer fbf pode ser introduzida como uma premissa. Esta regra de inferenciae representada do seguinte modo:

n ! Prem

Na representacao desta regra de inferencia, n corresponde ao numero dalinha em que a fbf e introduzida, ! corresponde a fbf introduzida pela regrada premissa e “Prem” indica a utilizacao da regra da premissa.

Page 45: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 33

Exemplo 2.2.2 Comecaremos com um exemplo simples, tentando provarque {P,Q} & P!Q. Este resultado e obvio, pois a partir das premissas P e Q,devemos ser capazes de inferir que P !Q (recorde-se a discussao apresentadana Seccao 1.2 em relacao ao significado da conjuncao). Comecamos a nossaprova, escrevendo as premissas:

1 P Prem2 Q Prem

Ate aqui, escrevemos duas linhas, a linha 1 contem a fbf P e e justificadacomo uma premissa e a linha 2 contem a fbf Q e tambem e justificada comouma premissa. De modo a continuar a nossa prova precisamos de introduzirmais regras de inferencia. `

Regra da repeticao. Existe uma regra de inferencia que permite a re-peticao numa prova de uma linha que ja existe na prova. Esta regra, cha-mada regra de repeticao, identificada por “Rep”, afirma que qualquer fbfpode ser repetida dentro de uma prova. Esta regra de inferencia e represen-tada do seguinte modo:

n !......

m ! Rep, n

Ou seja, se a fbf ! existe na linha n (sem nos preocuparmos com a razao pelaqual esta existe na linha n), podemos escrever a fbf ! na linha m (m > n),justificando esta nova linha pela aplicacao da regra de repeticao da linha n.

Exemplo 2.2.3 A regra da repeticao permite-nos adicionar uma terceiralinha a prova do Exemplo 2.2.2:

1 P Prem2 Q Prem3 P Rep, 1

A linha 3 desta prova afirma que a fbf P foi introduzida pela repeticao dalinha 1. `

Regras para a conjuncao. Tal como acontece com os outros sımboloslogicos, existem duas regras de inferencia para tratar a conjuncao. Uma des-tas regras diz-nos como introduzir (ou como construir) uma fbf cujo sımbolo

Page 46: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

34 CAPITULO 2. LOGICA PROPOSICIONAL

logico principal e uma conjuncao. Esta regra chama-se introducao da con-juncao, abreviada por “I!”.

A regra da introducao da conjuncao afirma que numa prova em que aparecemas fbfs ! e #, podemos derivar a fbf ! ! #:

n !n + 1 #n + 2 ! ! # I!, (n, n + 1)

A justificacao da linha n + 2, I!, (n, n + 1), indica que esta linha foi obtidaa partir das linhas n e n + 1 usando a regra de introducao da conjuncao.

Exemplo 2.2.4 Usando esta regra de inferencia, podemos adicionar umaterceira linha a prova do Exemplo 2.2.2:

1 P Prem2 Q Prem3 P !Q I!, (1, 2)

Com esta prova, podemos concluir que {P,Q} & P ! Q, uma vez que afbf P !Q foi obtida numa prova partindo das premissas P e Q. `

Exemplo 2.2.5 (Necessidade da repeticao) Por estranho que pareca,a partir das linhas 1 e 2 da prova do Exemplo 2.2.2, nao podemos obterdirectamente Q!P uma vez que esta deducao nao segue o “padrao” especi-ficado na regra de I! – esta regra de inferencia permite-nos introduzir umaconjuncao cujo primeiro elemento e a fbf na linha n e cujo segundo elementoe a fbf na linha n + 1. Contudo, usando a regra da repeticao, seguida daaplicacao da regra da introducao da conjuncao, somos capazes de obter oresultado desejado:

1 P Prem2 Q Prem3 P Rep, 14 Q ! P I!, (2, 3)

`

A segunda regra para a conjuncao diz-nos como utilizar uma fbf cujo sımbolologico principal e uma conjuncao. Esta regra, chamada eliminacao da con-juncao, abreviada por “E!”, afirma que a partir da fbf !!# podemos derivar

Page 47: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 35

!, #, ou ambas.n ! ! #...

...m ! E!, n

oun ! ! #...

...m # E!, n

E importante notar que existem duas formas da regra da eliminacao daconjuncao. A primeira diz-nos que a partir de uma conjuncao podemosobter o primeiro elemento da conjuncao, ao passo que a segunda diz-nos quea partir de uma conjuncao podemos obter o segundo elemento da conjuncao.

Exemplo 2.2.6 Usando as regras associadas a conjuncao, apresentamos aseguinte prova para o argumento ({P !Q,R}, P !R):

1 P !Q Prem2 R Prem3 P E!, 14 R Rep, 25 P !R I!, (3, 4)

`

Regras para provas hipoteticas. Os sistemas de deducao natural uti-lizam o conceito de prova hipotetica, uma prova iniciada com a introducaode uma hipotese. Podemos pensar numa prova hipotetica como um “con-texto” ou um “ambiente” em que, para alem das outras fbfs da prova, consi-deramos a hipotese que iniciou a prova. Em linguagem corrente, uma provahipotetica corresponde a raciocınio originado a partir do uso das palavras“vamos supor que” ou “imaginemos que”.

Uma prova hipotetica e introduzida pela regra da hipotese, abreviada por“Hip”, a qual afirma que em qualquer ponto de uma prova podemos introdu-zir qualquer fbf como uma hipotese, comecando uma nova prova hipotetica.Esta regra e representada do seguinte modo (na qual um traco vertical e de-senhado ao longo de todas as linhas que correspondem a prova hipotetica):

n ! Hip

n + 1 . . .

Page 48: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

36 CAPITULO 2. LOGICA PROPOSICIONAL

Uma vez iniciada uma prova hipotetica, todas as linhas que adicionarmos aprova pertencem a prova hipotetica ate que essa prova seja terminada (o queainda nao sabemos como fazer). Dentro de uma prova hipotetica podemosaplicar qualquer regra de inferencia do mesmo modo que a aplicamos numaprova nao hipotetica.

Exemplo 2.2.7 A seguinte sequencia de linhas corresponde a uma provaque contem uma prova hipotetica:

1 P !Q Prem2 P E!, 1

3 R Hip

4 R Rep, 3

`

Regra da re-iteracao. Existe uma regra de inferencia especial, a qualapenas e aplicavel em provas hipoteticas, e que nos permite repetir, dentrode uma prova hipotetica, qualquer fbf que exista na prova que contem a provahipotetica. Esta chama-se regra da re-iteracao, escrita “Rei”, a qual afirmaque qualquer fbf numa prova pode ser re-iterada (repetida) em qualquerprova hipotetica que exista na prova. Esta regra representa-se do seguintemodo:

n !...

...

m ! Rei, n

Note-se que o converso desta regra nao e regulamentado pelas regras deinferencia. Ou seja, se uma fbf existir dentro de uma prova hipotetica, naosomos autorizados a escrever essa fbf fora da prova hipotetica.

Exemplo 2.2.8 Com a regra da re-iteracao, podemos continuar a prova

Page 49: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 37

apresentada no Exemplo 2.2.7 do seguinte modo:

1 P !Q Prem2 P E!, 1

3 R Hip

4 R Rep, 3

5 P Rei, 2

6 R ! P I!, (4, 5)

`

Neste momento, devemos observar que temos dois tipos de provas. A provaexterior, a qual nao foi iniciada com a introducao de uma hipotese — aqual tem o nome de prova categorica — e as provas hipoteticas, as quais saoiniciadas com a introducao de uma hipotese. As fbfs de uma prova hipoteticasao chamadas contingentes, uma vez que dependem da hipotese que inicioua prova; as fbfs na prova exterior sao chamadas categoricas.

Ate agora, a necessidade de provas hipoteticas nao e clara. Contudo, estanecessidade revela-se ao considerar as regras para a implicacao.

Regras para a implicacao. Antes de apresentar as regras para a im-plicacao, recordemos, da Seccao 1.2, o significado intuitivo de uma pro-posicao contendo uma implicacao. Seja P a proposicao “esta a chover” eseja Q a proposicao “eu fico em casa”. A fbf P # Q le-se “se esta a chover,entao eu fico em casa”. Devemos lembrar que esta afirmacao nao dependedo facto de estar ou nao a chover, ela apenas afirma que no caso de estar achover eu ficarei em casa; se nao estiver a chover, entao eu poderei ou naoficar em casa pois a proposicao nada afirma sobre esta situacao.

No caso de desejarmos provar que P # Q, deveremos considerar um “con-texto” hipotetico no qual assumimos que esta a chover; se dentro deste “con-texto” conseguirmos provar que eu fico em casa, entao a formula esta pro-vada. Deve tambem ser claro que esta prova e independente das condicoesmetereologicas. Este “contexto” hipotetico corresponde a uma prova hi-potetica.

A regra da introducao da implicacao, abreviada por “I#”, afirma que, senuma prova iniciada pela hipotese !, formos capazes de derivar #, entao,

Page 50: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

38 CAPITULO 2. LOGICA PROPOSICIONAL

podemos derivar ! # # na prova que contem a prova hipotetica iniciadapela introducao da hipotese !:

n ! Hip...

...

m #

m + 1 ! # # I#, (n, m)

A justificacao da fbf na linha m + 1, I#(n, m), diz que esta linha foi obtidaa partir da prova iniciada pela hipotese na linha n e a fbf na linha m.

A regra da introducao da implicacao e, por enquanto, a primeira regra quepermite terminar provas hipoteticas.

Exemplo 2.2.9 Consideremos a prova

1 P Hip

2 P Rep, 13 P # P I#, (1, 2)

`

Para alem de ilustrar a utilizacao da regra da introducao da implicacao, aprova do Exemplo 2.2.9, e a nossa primeira prova que nao utiliza premissas.Uma vez que a fbf na linha 3 nao depende de nenhuma premissa, esta provasignifica que & (P # P ).

Definicao 2.2.3 (Teorema) Uma fbf que e obtida numa prova que naocontem premissas e chamada um teorema. Quando & !, ou seja, quando! e um teorema, e usual escrever apenas & !. !

De modo a podermos utilizar uma fbf cujo sımbolo logico principal e umaimplicacao, necessitamos da regra da eliminacao da implicacao, abreviadapor “E#”, e tambem conhecida por modus ponens. Esta regra afirma quenuma prova que contem tanto ! como ! # # podemos derivar #:

n !n + 1 ! # #n + 2 # E#, (n, n + 1)

Page 51: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 39

Exemplo 2.2.10 Consideremos a prova de {P # Q,P} & Q:

1 P # Q Prem2 P Prem3 P # Q Rep, 14 Q E#, (2, 3)

Note-se a utilizacao da regra da repeticao na linha 3 para gerar o “padrao” es-pecificado na regra de inferencia. `

Exemplo 2.2.11 A seguinte prova mostra que (P # (Q # R)) # ((P !Q)# R) e um teorema:

1 P # (Q # R) Hip

2 P !Q Hip

3 P E!, 2

4 P # (Q # R) Rei, 1

5 Q # R E#, (3, 4)

6 Q E!, 2

7 Q # R Rep, 5

8 R E#, (6, 7)

9 (P !Q) # R I#, (2, 8)10 (P # (Q # R)) # ((P !Q) # R) I#, (1, 9)

`

Exemplo 2.2.12 A seguinte prova mostra que (P # (Q # P )) e um teo-rema.

1 P Hip

2 Q Hip

3 P Rei, 1

4 Q # P I#, (2, 3)5 P # (Q # P ) I#, (1, 4)

Page 52: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

40 CAPITULO 2. LOGICA PROPOSICIONAL

Este resultado, & P # (Q # P ), pode chocar-nos a primeira vista. In-formalmente, podemos ler este teorema como “se P , entao, para qualquerproposicao Q, se Q entao P”. Podemos tambem ler esta afirmacao como“qualquer proposicao implica uma proposicao verdadeira”. Este resultado econhecido como um dos paradoxos da implicacao e gerou algumas objeccoesa logica classica.5 Os paradoxos da implicacao sao originados pela decisaoque tomamos em relacao ao significado da implicacao (material) e cuja jus-tificacao apresentamos na Seccao 1.2. `

Regras para a negacao. A regra da introducao da negacao, abreviadapor “I¬”, utiliza o conceito de prova por absurdo: se a partir de uma dadapremissa podemos derivar uma contradicao (uma ocorrencia de uma fbf daforma #!¬#), entao rejeitamos a premissa, ou seja, aceitamos a sua negacao,com base no facto que a premissa leva a uma conclusao absurda. A regrada introducao da negacao afirma que se numa prova iniciada pela hipotese!, podemos derivar uma contradicao (tanto # como ¬#), entao somos auto-rizados a derivar ¬! na prova que contem a prova hipotetica iniciada pelaintroducao da hipotese !:

n ! Hip...

...

m #

m + 1 ¬#

m + 2 ¬! I¬, (n, (m, m + 1))

A justificacao da fbf na linha m + 2, I¬(n, (m, m + 1)), afirma que estalinha foi obtida a partir da prova iniciada com a hipotese na linha n e pelacontradicao entre as linhas m e m + 1.

A regra da introducao da negacao e outra regra de inferencia que terminauma prova hipotetica.

Exemplo 2.2.13 Usando a regra da introducao da negacao, juntamentecom as regras de inferencia anteriores, podemos demonstrar que {P #Q,¬Q} & ¬P :

5Ver Branquinho J., “Implicacao”, em Enciclopedia de Termos Logico-Filosoficos,Branquinho e Murcho (eds), paginas 377–379, Lisboa: Gradiva, 2001 ou [Haack 78, paginas36–37].

Page 53: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 41

1 P # Q Prem2 ¬Q Prem

3 P Hip

4 P # Q Rei, 1

5 Q E#, (3, 4)

6 ¬Q Rei, 27 ¬P I¬, (3, (5, 6))

Esta prova corresponde a um padrao de raciocınio conhecido como modustollens, a partir de ! # # e ¬#, podemos derivar ¬!. `

A regra da eliminacao da negacao, abreviada por “E¬”, afirma que negaruma proposicao duas vezes e o mesmo que afirmar essa proposicao. Porexemplo, se P afirma que esta a chover, entao a fbf ¬¬P afirma que nao e ocaso de nao estar a chover, o que equivale a dizer que esta a chover.

A regra de eliminacao da negacao afirma que se numa prova a fbf ! e negadaduas vezes, entao podemos concluir !:

n ¬¬!n + 1 ! E¬, n

Exemplo 2.2.14 A seguinte prova mostra que uma contradicao implicaqualquer proposicao, o que e traduzido pelo teorema ((P !¬P ) # Q). Esteresultado e outro dos paradoxos da implicacao.6

6Ibid.

Page 54: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

42 CAPITULO 2. LOGICA PROPOSICIONAL

1 P ! ¬P Hip

2 ¬Q Hip

3 P ! ¬P Rei, 1

4 P E!, 3

5 ¬P E!, 3

6 ¬¬Q I¬, (2, (4, 5))

7 Q E¬, 68 (P ! ¬P ) # Q I#, (1, 7)

`

Regras para a disjuncao. O significado intuitivo de uma disjuncao e quepelo menos um dos elementos da disjuncao se verifica, e que, eventualmente,ambos os elementos se podem verificar (recorde-se a discussao apresentadana Seccao 1.2).

A regra da introducao da disjuncao, abreviada por “I"”, utiliza este signi-ficado, afirmando que a partir da fbf !, podemos derivar tanto ! " # como# " ! como ambas, em que # e qualquer fbf:

n !n + 1 ! " # I", n

oun !n + 1 # " ! I", n

A regra da eliminacao da disjuncao, abreviada por “E"”, corresponde a umraciocınio por casos: a partir da fbf ! " # (significando intuitivamente quepelo menos uma das fbfs ! ou # se verifica), se formos capazes de derivaruma terceira fbf, $, independentemente, a partir de cada uma das fbfs ! e#, entao, certamente que $ se verifica.

A regra e formalizada do seguinte modo: se numa prova temos (1) a fbf! " #; (2) uma prova hipotetica, iniciada com a hipotese ! contendo a fbf$; e (3) uma prova hipotetica, iniciada com a hipotese # contendo a fbf $,

Page 55: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 43

entao, nessa prova, podemos derivar a fbf $:

n ! " #

o ! Hip...

...

p $

r # Hip...

...

s $

m $ E", (n, (o, p), (r, s))

A justificacao da fbf na linha m, E"(n, (o, p), (r, s)), afirma que esta linha foiobtida a partir da fbf na linha n, juntamente com duas provas hipoteticas,uma iniciada pela hipotese na linha o e contendo a fbf na linha p, e a outrainiciada pela hipotese na linha r e contendo a fbf na linha s.

Exemplo 2.2.15 Usando a regra da eliminacao da disjuncao, provamos oteorema ((P " Q) ! ¬P ) # Q. Este teorema corresponde a um padrao deraciocınio a que se da o nome de silogismo disjuntivo, e que corresponde ainferencia da logica proposicional que consiste em derivar ! (ou respectiva-mente #) a partir de ! " # e ¬# (ou respectivamente ¬!):

Page 56: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

44 CAPITULO 2. LOGICA PROPOSICIONAL

1 (P "Q) ! ¬P Hip

2 P "Q E!, 1

3 ¬P E!, 1

4 P Hip

5 ¬Q Hip

6 P Rei, 4

7 ¬P Rei, 3

8 ¬¬Q I¬, (5, (6, 7))

9 Q E¬, 8

10 Q Hip

11 Q Rep, 10

12 Q E", (2, (4, 9), (10, 11))13 ((P "Q) ! ¬P ) # Q I#, (1, 12)

`

Teoremas e regras de inferencia derivadas. Como vimos, uma provae uma sequencia de linhas, cada uma das quais contendo uma fbf, cuja in-troducao e justificada por uma regra de inferencia. A medida que vamosfazendo provas, verificamos que existem certos passos que sao sistemati-camente repetidos e sentimos a necessidade de introduzir algum nıvel de“abstraccao” nas nossas provas de modo a facilitar o trabalho, diminuindoo numero de passos que sao necessarios nas provas. Existem duas maneirasde diminuir o numero de linhas das provas, a primeira utiliza o conceito deteorema e a segunda o conceito de regra de inferencia derivada.

Recordemos que um teorema e qualquer fbf que possa ser derivada a partir deum conjunto vazio de premissas. Sempre que nas nossas provas precisarmosde utilizar uma fbf que corresponda a um teorema, podemos introduzir nanossa prova todas as linhas que correspondem a demonstracao do teorema,obtendo a fbf correspondente. E permissıvel a omissao da prova que cor-responde ao teorema, introduzindo apenas a fbf respectiva e justificando-a

Page 57: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 45

como um teorema. Por exemplo, demonstramos na pagina 38 que P # P eum teorema, por esta razao, em provas futuras, somos autorizados a utilizara linha

n P # P Teo

E importante notar ainda que embora tenhamos demonstrado que P # P ,a fbf P poderia ter sido substituıda por qualquer outra fbf; assim, em lugarde um unico teorema, temos um numero infinito de fbfs da forma ! # !correspondentes a teoremas. O conceito associado a esta afirmacao chama-seformula de insercao.

Definicao 2.2.4 (Formula de insercao) Seja ! uma fbf. Uma formulade insercao de ! e qualquer fbf obtida a partir de ! atraves da substituicaode todas as ocorrencias de qualquer dos seus sımbolos de proposicao por umafbf qualquer. !

Exemplo 2.2.16 As seguintes fbfs correspondem a formulas de insercao de(P "Q) # ¬(¬P ! ¬Q):

(R "Q) # ¬(¬R ! ¬Q)

((R # S) "Q) # ¬(¬(R # S) ! ¬Q)

(P " (¬R " ¬S)) # ¬(¬P ! ¬(¬R " ¬S))

`

Exemplo 2.2.17 A seguinte fbf nao corresponde a uma formula de insercaode (P " Q) # ¬(¬P ! ¬Q) pois apenas uma das instancias do sımbolo deproposicao Q e substituıda.

(P "R) # ¬(¬P ! ¬Q)

`

Teorema 2.2.1 (Teorema de insercao) Qualquer formula de insercao deum teorema e um teorema.

Demonstracao: Trivial. "

O Teorema 2.2.1 nao faz parte do nosso sistema de regras de inferencia,representando uma afirmacao do que pode ser feito usando as nossas regras

Page 58: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

46 CAPITULO 2. LOGICA PROPOSICIONAL

de inferencia, este e, pois, um meta-teorema. Este teorema nao nos per-mite provar mais nada que nao pudessemos provar mas facilita-nos muito otrabalho ao realizar provas.

Uma outra maneira de simplificar as nossas provas corresponde a utilizacaode regras de inferencia derivadas.

Definicao 2.2.5 (Regra de inferencia derivada) Uma regra de inferen-cia derivada e qualquer padrao de raciocınio correspondente a aplicacao devarias regras de inferencia. !

Uma regra de inferencia derivada corresponde a uma abstraccao atraves daqual podemos agrupar a aplicacao de varias regras de inferencia num unicopasso.

Exemplo 2.2.18 (Variacao da eliminacao da implicacao) Considere-mos a regra da eliminacao da implicacao. Tendo em atencao a regra da re-peticao, podemos facilmente concluir que a seguinte sequencia de inferenciascorresponde a um padrao correcto de raciocınio:

n ! # #n + 1 !n + 2 # E#", (n, n + 1)

Com efeito,n ! # #n + 1 !n + 2 ! # # Rep, nn + 3 # E#, (n + 1, n + 2)

Deste modo, seremos autorizados a utilizar a regra de E#" nas nossas provas.A regra de E#" corresponde a uma regra de inferencia derivada. `

Exemplo 2.2.19 (Dupla negacao) Uma outra regra de inferencia deri-vada, a introducao da dupla negacao, representada por “I¬¬”, e justificadaatraves da seguinte prova:

1 P Prem

2 ¬P Hip

3 P Rei, 1

4 ¬P Rep, 25 ¬¬P I¬, (2, (3, 4))

Page 59: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 47

Portanto, numa prova que contem ! podemos derivar ¬¬!:

n !n + 1 ¬¬! I¬¬, n

`

Exemplo 2.2.20 (Modus tollens) Na pagina 41, apresentamos um pa-drao de raciocınio chamado modus tollens, outro exemplo de uma regrade inferencia derivada, o qual e formalizado dizendo que numa prova quecontem tanto ¬# como ! # #, podemos derivar ¬!.

n ¬#n + 1 ! # #n + 2 ¬! MT, (n, n + 1)

`

Em resumo, as fbfs numa prova sao ou premissas, ou teoremas ou correspon-dem a aplicacao de regras de inferencia a outras fbfs da prova. As regras deinferencia tanto podem ser regras que sao definidas associadas aos sımboloslogicos (chamadas regras de inferencia de base) como regras de inferenciaderivadas.

Novos sımbolos logicos. Os sımbolos logicos que apresentamos corres-pondem aos sımbolos tradicionais de uma logica. Pode ser demonstradoque apenas dois dos sımbolos que apresentamos, ¬, e um dos sımbolos doconjunto {!,",#}, sao realmente necessarios para exprimir todas as fbfspossıveis em logica proposicional.

Uma das finalidades deste livro e a de definir linguagens para exprimir co-nhecimento e raciocinar com as frases da linguagem. Sob esta perspectiva,e natural que desejemos utilizar linguagens que permitam exprimir de ummodo facil afirmacoes sobre o mundo que estamos a modelar.

Numa logica, somos livres de introduzir novos sımbolos logicos como umacombinacao de sımbolos existentes. As formulas com estes novos sımbolospodem ser consideradas como “acucar sintactico” para formulas mais com-plexas utilizando os sımbolos logicos tradicionais. A introducao de novossımbolos logicos nao aumenta o poder expressivo da nossa linguagem, faci-litando apenas o modo com escrevemos fbfs.

Page 60: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

48 CAPITULO 2. LOGICA PROPOSICIONAL

Nesta seccao ilustramos este aspecto atraves da introducao de um novosımbolo logico chamado equivalencia (tambem conhecido por bi-condicional)e representado por “(”.

A introducao da equivalencia leva-nos a rever as regras de formacao parafbfs apresentadas na pagina 29, com a adicao da regra:

3a. Se ! e # sao fbfs, entao (! ! #), (! " #), (! # #) e (! ( #) sao fbfs.

A fbf ! ( # le-se “! e equivalente a #”, ou, de um modo alternativo, “! see so se #”.

Definimos a fbf contendo o sımbolo logico ( como uma abreviatura daseguinte fbf:7

! ( #def= (! # #) ! (# # !) (2.1)

Usando esta definicao, introduzimos as seguintes regras de inferencia para aequivalencia.

A regra da introducao da equivalencia, escrita “I(”, afirma que numa provacom as fbfs ! # # e # # !, podemos derivar ! ( #:

n ! # #n + 1 # # !n + 2 ! ( # I(, (n, n + 1)

A regra da eliminacao da equivalencia, escrita “E(”, afirma que a partirda fbf ! ( #, podemos derivar ! # #, # # !, ou ambas.

n ! ( #n + 1 ! # # E(, n

oun ! ( #n + 1 # # ! E(, n

Alguns teoremas comuns. Listamos aqui alguns dos teoremas a que ecomum recorrer em logica proposicional e os quais utilizaremos ao longodeste livro. A sua demonstracao e deixada como exercıcio.

7O sımbolodef= , le-se “por definicao”.

Page 61: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 49

1. Lei do terceiro excluıdo (a demonstracao deste teorema e apresentadano Exemplo 2.2.22)

P " ¬P

2. Lei da dupla negacao

¬¬P ( P

3. Primeiras leis de De Morgan8

¬(P "Q) ( (¬P ! ¬Q)

¬(P !Q) ( (¬P " ¬Q)

4. Lei do contrapositivo

(P # Q) ( (¬Q # ¬P )

5. Leis do silogismo

(Q # R) # ((P # Q) # (P # R))

(P # Q) # ((Q # R) # (P # R))

6. Lei do transporte

(P # (Q # R)) ( ((P !Q) # R)

7. Equivalencia entre a implicacao e a disjuncao

(P # Q) ( (¬P "Q)

8. Propriedade distributiva da disjuncao em relacao a conjuncao

(P " (Q !R)) ( ((P "Q) ! (P "R))

9. Propriedade distributiva da conjuncao em relacao a disjuncao

(P ! (Q "R)) ( ((P !Q) " (P !R))

2.2.2 Como construir provas

Uma questao que e pertinente levantar neste ponto corresponde a saber quale a estrategia a seguir para a construcao de uma prova. Para atingir esteobjectivo, deveremos comecar por escrever as premissas (se estas existirem)e tentar obter uma linha com a fbf que desejamos provar.

8Estas equivalencias foram baptizadas em honra do matematico ingles Augustus DeMorgan (1806–1871).

Page 62: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

50 CAPITULO 2. LOGICA PROPOSICIONAL

Embora apresentemos aqui algumas sugestoes gerais para realizar esta ta-refa, estas devem ser consideradas como sugestoes e nao como passos a seguircegamente.

O modo de desenvolver uma prova depende fundamentalmente da estruturada formula que estamos a tentar demonstrar:

• Ao tentar provar uma fbf da forma ! # #, a alternativa mais comum einiciar uma prova hipotetica com a introducao da hipotese ! e, dentrodessa prova, tentar obter a fbf #. Repare-se que ao fazermos isto,mudamos o nosso objectivo do problema de tentar provar ! # # parao problema de tentar obter a fbf #.9

• Ao tentar provar uma fbf da forma ! ! #, deveremos tentar provarseparadamente tanto ! como #. Novamente, mudamos a atencao daprova de ! ! # para duas provas separadas, respectivamente, de ! ede #.

• Ao tentar provar uma fbf da forma !"#, deveremos tentar provar umadas fbfs ! ou #. Novamente, mudamos a atencao da prova de ! " #para outra prova, seja a de ! ou a de #.

• No caso de nenhuma das vias anteriores resultar, podemos tentar se-guir um ou mais dos seguintes caminhos:

– podemos tentar encontrar aplicacoes de regras de inferencia quenos levam a introducao da fbf em questao;

– se nao formos capazes de encontrar uma prova directa, podemostentar uma prova por absurdo, iniciando uma prova hipoteticacom a introducao da negacao da fbf e tentar derivar uma con-tradicao dentro dessa prova hipotetica;10

– se na nossa prova existirem fbfs que correspondam a disjuncoes,poderemos tentar o raciocınio por casos.

Apresentamos agora algumas provas adicionais, explicando o nosso processode raciocınio na sua construcao.

9Como exemplo de uma excepcao a esta sugestao, suponhamos que estavamos a tentarprovar a fbf Q ! R numa prova que continha tanto P como P ! (Q ! R), neste caso anossa sugestao nao e util e devemos ser suficientemente espertos para aplicar a regra daE!.

10Repare-se que esta abordagem e muito semelhante a metodologia da logica apresentadana Figura 1.1.

Page 63: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 51

Exemplo 2.2.21 Comecaremos pela demonstracao do teorema P # (Q #(P !Q)).

Como estamos a demonstrar um teorema nao existem premissas.

Uma vez que desejamos demonstrar uma fbf que corresponde a uma im-plicacao, vamos iniciar uma prova hipotetica, introduzindo a hipotese P etentar provar Q # (P !Q) dentro desta prova.

1 P Hip

Tentemos preencher estas linhas

n Q # (P !Q)

Uma vez que o nosso novo objectivo e provar uma fbf que corresponde auma implicacao, Q # (P ! Q), vamos comecar uma nova prova hipoteticacom a introducao da hipotese Q, tentando provar P !Q dentro desta prova.

1 P Hip

2 Q Hip

Tentemos preencher estas linhas

m P !Q

n Q # (P !Q)

De modo a provar uma fbf correspondente a uma conjuncao, vamos provarseparadamente cada um dos elementos da conjuncao, ou seja, vamos tentarprovar P e vamos tentar provar Q. Estas fbfs podem ser facilmente provadas,pelo que o resto da prova e trivial:

1 P Hip

2 Q Hip

3 P Rei, 1

4 Q Rep, 2

5 P !Q I!, (3, 4)

6 Q # (P !Q) I#, (2, 5)7 P # (Q # (P !Q)) I#, (1, 6)

Page 64: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

52 CAPITULO 2. LOGICA PROPOSICIONAL

`

Exemplo 2.2.22 Neste exemplo provamos o teorema P"¬P . Este teoremae conhecido como a lei do terceiro excluıdo.11

Aqui a situacao e mais complicada. Apesar de estarmos a tentar provaruma disjuncao, nao existe maneira de provar qualquer um dos elementosda disjuncao (como um teorema). Na realidade nao podemos provar umsımbolo de proposicao arbitrario a partir do nada. Vamos tentar recorrer auma prova por absurdo, a partir da hipotese que corresponde a negacao doteorema que queremos provar.

1 ¬(P " ¬P ) Hip

Tentemos preencher estas linhas

n !

n + 1 ¬!

A dificuldade principal nesta prova e determinar qual a contradicao a derivar(qual o valor de ! na prova anterior). Uma vez que negamos P "¬P , a qual,de acordo com a nossa intuicao se deve verificar, tentaremos obter P " ¬P .De modo a derivar esta fbf , comecamos por iniciar uma prova com a hipoteseP . A partir daqui a prova e obvia:

11Uma proposicao ou e verdadeira ou e falsa, nao existindo uma terceira hipotese.

Page 65: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 53

1 ¬(P " ¬P ) Hip

2 P Hip

3 P " ¬P I", 2

4 ¬(P " ¬P ) Rei, 1

5 ¬P I¬, (2, (3, 4))

6 P " ¬P I", 5

7 ¬(P " ¬P ) Rep, 18 ¬¬(P " ¬P ) I¬, (1, (6, 7))9 P " ¬P E¬, 8

`

2.2.3 Abordagem axiomatica

Uma outra abordagem ao desenvolvimento de um sistema dedutivo consisteem utilizar axiomas em vez de um grande numero de regras de inferencia.Para atingir este objectivo, abandonamos todas as regras de inferencia, ex-cepto a regra da eliminacao da implicacao (e, evidentemente, a regra dapremissa).

Um sistema axiomatico ou um sistema de estilo Hilbert12 baseia-se na exis-tencia de um conjunto de axiomas (proposicoes que sao aceites no sistemasem demonstracao) e de um conjunto pequeno de regras de inferencia (nor-malmente apenas com a regra da E#).

Um sistema axiomatico, que corresponde ao sistema dedutivo conhecido porsistema L (de Mendelson),13 contem tres axiomas e uma regra de inferencia,a eliminacao da implicacao, a qual e designada por “modus ponens”.

Os axiomas do sistema L sao os seguintes:

Ax1: P # (Q # P )

Ax2: (P # (Q # R)) # ((P # Q) # (P # R))12Em honra do matematico alemao David Hilbert (1862–1943).13Ver [Mendelson 87, pagina 29].

Page 66: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

54 CAPITULO 2. LOGICA PROPOSICIONAL

Ax3: (¬Q # ¬P ) # ((¬Q # P ) # Q)

O axioma Ax1 corresponde ao facto de uma proposicao verdadeira ser impli-cada por qualquer proposicao; o axioma Ax2 corresponde a distributividadeda implicacao; o axioma Ax3 e a lei da dupla negacao, com efeito, se ¬Qimplica tanto P como ¬P , entao ¬Q tem que ser falso pelo que ¬¬Q, ouseja, Q.

Chamar axioma a uma fbf significa que ela, ou qualquer formula de insercaoque dela resulte, pode ser utilizada como uma linha de uma prova, semdepender de qualquer outra linha. A consideracao de formulas de insercaosignifica que cada um dos axiomas Ax1, Ax2 e Ax3 corresponde a uma co-leccao infinita de fbfs, por exemplo as seguintes fbfs sao formulas de insercaodo axioma Ax1:

((P !Q) # R) # ((S " T ) # ((P !Q) # R))

eP # (P # P ).

Por esta razao os axiomas Ax1, Ax2 e Ax3 sao chamados esquemas de axi-omas.

Note-se que os axiomas Ax1, Ax2 e Ax3 nao tratam nem da conjuncaonem da disjuncao. Estes sımbolos logicos sao tratados como abreviaturassintacticas de combinacoes dos outros sımbolos. Assim, teremos as seguintesdefinicoes:14

! ! #def= ¬(! # ¬#)

! " #def= ¬! # #.

A regra de inferencia do sistema L, modus ponens (abreviada por “MP” nosistema apresentado por Mendelson e por nos abreviada por “E#” por umaquestao de consistencia), e traduzida pela frase “a partir de ! e de ! # #podemos concluir #”.

No sistema L, uma prova tem a mesma definicao que utilizamos no sistemade deducao natural, existindo apenas as regras da premissa, de MP e apossibilidade de adicionar uma formula de insercao de qualquer axioma, aqual e indicada atraves do nome do axioma.

14Convem aqui recordar a observacao feita na pagina 47 relativa a definicao de sımboloslogicos em termos de outros sımbolos logicos.

Page 67: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 55

A tıtulo de exemplo, apresentamos duas provas no sistema L, a prova doteorema P # P e a prova de {(P # (Q # R))} & (Q # (P # R)).

Page 68: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

56 CAPITULO 2. LOGICA PROPOSICIONAL

Exemplo 2.2.23

1 (P # ((P # P ) # P )) #((P # (P # P )) # (P # P )) Ax2

2 P # ((P # P ) # P ) Ax13 (P # (P # P )) # (P # P ) E #, (1, 2)4 P # (P # P ) Ax15 P # P E #, (3, 4)

`Exemplo 2.2.24

1 (P # (Q # R)) Prem2 ((P # (Q # R)) # ((P # Q) # (P # R)) Ax23 (P # Q) # (P # R) E #, (2, 1)4 (((P # Q) # (P # R))# (Q # ((P # Q) # (P # R)))) Ax1

5 Q # ((P # Q) # (P # R)) E #, (3, 4)6 ((Q # ((P # Q) # (P # R)))# ((Q # (P # Q)) # (Q # (P # R)))) Ax2

7 (Q # (P # Q)) # (Q # (P # R)) E #, (5, 6)8 Q # (P # Q) Ax19 Q # (P # R) E #, (7, 8)

`

Demonstra-se que se podem derivar exactamente os mesmos teoremas nosistema de deducao natural que apresentamos na Seccao 2.2.1 e no sistema Lde Mendelson. A complexidade das demonstracoes num sistema axiomaticoe uma das razoes para preferirmos um sistema de deducao natural.

2.2.4 Propriedades do sistema dedutivo

O sistema dedutivo da logica proposicional15 apresenta um certo numerode propriedades, algumas das quais sao descritas nesta seccao. Todos osresultados que aqui apresentamos correspondem a meta-teoremas, pois saoresultados sobre as propriedades do sistema dedutivo.

15Bem como o sistema dedutivo da logica de primeira ordem apresentado no Capıtulo 3.

Page 69: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 57

Teorema 2.2.2 (Teorema da deducao) Se ! e um conjunto de fbfs, ! e# sao fbfs, e se (! ' {!}) & #, entao ! & (! # #).

Demonstracao: Suponhamos que (! ' {!}) & #. Isto significa que existe umaprova iniciada com as premissas em !, juntamente com a premissa corres-pondente a fbf !, cuja ultima linha contem a fbf #. Suponhamos que ! = {%1,. . ., %n}. As primeiras n + 1 linhas desta prova contem as fbfs %1, . . ., %n, ! ea ultima linha desta prova, digamos que e a linha m, contem a fbf #:

1 %1 Prem......

n %n Premn + 1 ! Prem...

...m #

Iniciemos uma nova prova cujas n primeiras linhas sao as premissas %1, . . .,%n. Na linha n + 1 desta nova prova iniciamos uma prova hipotetica quecontem a hipotese !.Utilizando a regra da re-iteracao, introduzimos as linhas n + 1 + 1 (= n + 2)a n + 1 + m, contendo as premissas, ou seja, a linha n + 1 + i (1 4 i 4 m)contem a premisa %i.As restantes linhas desta nova prova sao construıdas, recorrendo a prova ori-ginal, do seguinte modo: para cada linha k (k < n + 1) da prova original,introduza-se uma linha identica na nova prova na qual a justificacao e ob-tida da justificacao da linha k da prova original actualizando cada uma dasreferencias a linhas com a adicao de n + 1.A linha m + n + 1 da nova prova contem a fbf # e esta contida na provahipotetica que foi iniciada pela introducao da hipotese !:

1 %1 Prem......

n %n Premn + 1 ! Hip

......

m + n + 1 #

Usando a regra da introducao da implicacao, podemos adicionar a linha m+

Page 70: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

58 CAPITULO 2. LOGICA PROPOSICIONAL

n+2 a nova prova contendo a fbf ! # # e justificada por I#, (n+1, m+n+1):

1 %1 Prem......

n %n Premn + 1 ! Hip

......

m + n + 1 #

m + n + 2 ! # # I#, (n + 1, m + n + 1)

Esta nova prova mostra que ! & (! # #). "

Corolario 2.2.1 Se ! = {!1, . . . !n} e um conjunto de fbfs, se # e uma fbfe se ! & #, entao & !1 # (. . . (!n # #)).

Demonstracao: A demonstracao deste corolario corresponde a n aplicacoes doTeorema 2.2.2. "

Teorema 2.2.3 Se ! e um conjunto de fbfs, ! e # sao fbfs e se ! & (! # #)entao (! ' {!}) & #.

Demonstracao: A demonstracao utiliza uma linha de raciocınio semelhante autilizada na demonstracao do Teorema 2.2.2. "

Teorema 2.2.4 (Transitividade de &) Se ! e um conjunto de fbfs, !1,. . ., !n sao fbfs, # e uma fbf, se ! & !1, ...,! & !n e {!1, . . . ,!n} & #, entao! & #.

Demonstracao: Suponhamos que ! = {%1, . . ., %m}. Suponhamos tambem quepara 1 4 i 4 n, ! & !i. Isto significa que existem n provas, cada uma delascomecando com as premissas %1, . . ., %m, e tendo a fbf !i na linha ki:

1 %1 Prem......

m %m Prem......

ki !i

Suponhamos que {!1, . . . ,!n} & #. Isto significa que existe uma prova que einiciada com as premissas !1, . . . ,!n e cuja ultima linha, digamos l, contem

Page 71: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 59

a fbf #:1 !1 Prem...

...n !n Prem...

...l #

Iremos construir uma nova prova do seguinte modo: as primeiras m linhascontem as premissas %1 . . . %m; as linhas m + 1 a k1 sao identicas as linhasm + 1 a k1 da prova de ! & !1; para 2 4 j 4 n, temos linhas identicas aslinhas m+1 a kj da prova de ! & !j , excepto que as referencias as aplicacoesdas regras de inferencia sao actualizadas apropriadamente.

1 %1 Prem......

m %m Prem......

k1 !1......

......

m +!n

i=1(ki 5m) !n

Usando a regra da repeticao, podemos introduzir linhas com as fbfs !1 . . .!n:

1 %1 Prem......

m %m Prem......

k1 !1......

......

m +!n

i=1(ki 5m) !n

m +!n

i=1(ki 5m) + 1 !1 Rep......

m +!n

i=1(ki 5m) + n !n Rep

Escrevemos agora as linhas n + 1 a l da prova de {!1, . . . ,!n} & #, actuali-

Page 72: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

60 CAPITULO 2. LOGICA PROPOSICIONAL

zando as referencias respectivas:

1 %1 Prem......

m %m Prem......

k1 !1......

......

m +!n

i=1(ki 5m) !n

m +!n

i=1(ki 5m) + 1 !1 Rep......

m +!n

i=1(ki 5m) + n !n Rep......

m +!n

i=1(ki 5m) + l #

Esta nova prova mostra que ! & #. "

Teorema 2.2.5 (Monotonicidade – versao 1) Se !1 e !2 sao conjun-tos de fbfs, ! e uma fbf, e !1 & !, entao (!1 '!2) & !.

Demonstracao: Seja !1 = {%11, . . . , %1n} e !2 = {%21, . . . , %2m}. Uma vez que!1 & !, existe uma prova iniciada com as premissas %11, . . . , %1n que terminacom a fbf !:

1 %11 Prem......

n %1n Prem......

k !

Iremos construir uma prova que se inicia com as premissas %11, . . . , %1n, %21,. . . , %2m e cujas linhas, apos a linha n+m sao identicas as linhas n+1 a k daprova de !1 & !, actualizando apropriadamente as referencias as aplicacoesdas regras de inferencia:

1 %11 Prem......

n %1n Premn + 1 %21 Prem...

...n + m %2m Prem...

...m + k !

Esta nova prova mostra que (!1 '!2) & !. "

Page 73: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 61

Teorema 2.2.6 Para qualquer conjunto de fbfs !, o conjunto Th(!) einfinito.16

Demonstracao: E facil demonstrar que qualquer que seja !, Th(!) 6= . Defacto, mesmo que ! = , Th( ) contem todos os teoremas. Dada qualquerfbf em Th(!), digamos !, utilizando apenas as regra da I", podemos originarum numero infinito de fbfs, ! " !, ! " ! " !, ..., ! " . . . " !. "

Teorema 2.2.7 (Monotonicidade – versao 2) Se !1 e !2 sao conjun-tos de fbfs e se !1 $ !2, entao Th(!1) $ Th(!2).

Demonstracao: Mostramos que para qualquer fbf ! tal que ! % Th(!1) entao! % Th(!2). Seja !2 = !1 '!0 (isto e uma consequencia directa do factode !1 $ !2).Seja ! qualquer fbf tal que ! % Th(!1). Por definicao, !1 & !. O Teo-rema 2.2.5 garante que (!1 '!0) & !. Portanto, ! % Th(!2). "

Teorema 2.2.8 (Ponto fixo) Se ! e um conjunto de fbfs, entao

Th(!) = Th(Th(!)).

Demonstracao: Mostramos que Th(!) $ Th(Th(!)) e que Th(Th(!)) $ Th(!).

1. Th(!) $ Th(Th(!)).Seja ! % Th(!). Uma vez que {!} & !, podemos concluir que ! %Th(Th(!)).

2. Th(Th(!)) $ Th(!).Suponhamos por absurdo que Th(Th(!)) 6$ Th(!). Isto significa queexiste um ! tal que ! % Th(Th(!)) e ! 6% Th(!).Uma vez que ! % Th(Th(!)) e ! 6% Th(!), a fbf ! e originada numaprova com as premissas #1, . . . ,#n tais que {#1, . . . ,#n} $ Th(!). PeloTeorema 2.2.3, isto significa que ! % Th(!), o que e uma contradicao.Pelo que Th(Th(!)) $ Th(!).

Entao Th(!) = Th(Th(!)) "

2.2.5 Resolucao

Da discussao apresentada na Seccao 2.2.2 deve estar claro que a geracaoautomatica de provas utilizando um sistema de deducao natural nao e facil.

16Recorde-se do Capıtulo 1 que Th(!) = {! : ! " !}.

Page 74: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

62 CAPITULO 2. LOGICA PROPOSICIONAL

Das provas apresentadas na Seccao 2.2.3, podemos concluir que a geracao deprovas num sistema axiomatico e bastante mais difıcil. A criacao de provasexige raciocınio e pratica, existindo algumas regras empıricas, as quais nemsempre funcionam.

E pois natural que se tenham desenvolvido metodos para a automatizacaoda geracao de provas, ou, como por vezes sao conhecidos, metodos para aautomatizacao do raciocınio ou metodos para o raciocınio automatico. Nestaseccao introduzimos um desses metodos, chamado resolucao. A resolucao ebaseada numa unica regra de inferencia, o princıpio da resolucao.

A utilizacao do princıpio da resolucao obriga a transformacao das fbfs parauma forma especial, a forma clausal, a qual corresponde a uma conjuncaode clausulas.

Forma clausal

Antes de apresentar a resolucao precisamos de introduzir algumas definicoese discutir o processo de transformacao de uma fbf arbitraria para a sua formaclausal.

Definicao 2.2.6 (Literal) Uma fbf atomica ou a sua negacao e chamadaum literal. Recorde-se que uma fbf atomica corresponde a um sımbolo deproposicao. Um literal positivo corresponde a uma fbf atomica e um literalnegativo corresponde a negacao de uma fbf atomica. !

Definicao 2.2.7 (Clausula) Uma clausula e ou um literal ou uma dis-juncao de literais. !

Definicao 2.2.8 (Clausula unitaria) Uma clausula constituıda apenaspor um literal chama-se uma clausula unitaria. !

Exemplo 2.2.25 Sendo P e Q sımbolos de proposicao, as fbfs ¬P e Q saoliterais, respectivamente, negativo e positivo. As fbfs P " Q e ¬P " Q saoclausulas. As fbfs P e ¬P sao clausulas unitarias. `

A transformacao de qualquer fbf para a sua representacao em forma clau-sal pode ser realizada mecanicamente atraves da aplicacao da sequencia depassos que apresentamos de seguida. No entanto, antes de apresentar estasequencia de passos (na realidade, um algoritmo) convem fazer duas ob-servacoes:

Page 75: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 63

1. Na transformacao que apresentamos apenas admitimos a utilizacao dossımbolos logicos ¬, ", ! e #. Uma fbf com outros sımbolos logicosdevera ser transformada numa fbf equivalente utilizando apenas osquatro sımbolos logicos que apresentamos.

2. A transformacao que apresentamos e baseada em teoremas que corres-pondem a equivalencias entre fbfs. Sendo ! e # duas fbfs, a fbf ! ( #permite-nos substituir a fbf ! pela fbf # e vice-versa. Note-se quenestes passos estamos a utilizar propriedades da logica e nao a provarresultados com a logica.

Passos para a transformacao de uma fbf arbitraria em forma clausal:

1. Eliminacao do sımbolo #A eliminacao do sımbolo # baseia-se na equivalencia entre a im-plicacao e a disjuncao:

(! # #) ( (¬! " #)

Este passo consiste na substituicao de todas as ocorrencias de ! # #por ¬! " #.

Exemplo 2.2.26 Consideremos a seguinte fbf:

P # ¬(Q " ((R ! S) # P ))

aplicando a regra da eliminacao do sımbolo #, esta fbf sera sucessiva-mente transformada em:

¬P " ¬(Q " ((R ! S) # P ))

¬P " ¬(Q " (¬(R ! S) " P ))

`

2. Reducao do domınio do sımbolo ¬O objectivo deste passo e o de reduzir ao mınimo o domınio de aplicacaodo sımbolo ¬. No final da execucao deste passo, a negacao deve-se ape-nas aplicar a fbfs atomicas.

Este passo e obtido utilizando repetitivamente as seguintes equivalen-cias:

Page 76: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

64 CAPITULO 2. LOGICA PROPOSICIONAL

(a) Lei da dupla negacao¬¬! ( !

(b) Primeiras leis de De Morgan

¬(! " #) ( (¬! ! ¬#)

¬(! ! #) ( (¬! " ¬#)

Exemplo 2.2.27 Aplicando este passo a fbf do Exemplo 2.2.26, ob-temos:

¬P " (¬Q ! ¬(¬(R ! S) " P ))

¬P " (¬Q ! (¬¬(R ! S) ! ¬P ))

¬P " (¬Q ! ((R ! S) ! ¬P ))

`

3. Obtencao da forma conjuntiva normal

O objectivo deste passo e o de transformar a nossa fbf numa conjuncaode disjuncoes (a que se da o nome de forma conjuntiva normal).

Neste passo aplicamos repetitivamente a propriedade distributiva dadisjuncao em relacao a conjuncao:

! " (# ! $) ( (! " #) ! (! " $)

Exemplo 2.2.28 A partir da fbf obtida no Exemplo 2.2.27, obtemosas seguintes transformacoes:

(¬P " ¬Q) ! (¬P " ((R ! S) ! ¬P ))

(¬P " ¬Q) ! (¬P " (R ! S)) ! (¬P " ¬P )

(¬P " ¬Q) ! (¬P "R) ! (¬P " S) ! (¬P " ¬P )

`

4. Eliminacao do sımbolo !Este passo consiste em transformar a fbf num conjunto de clausulas.Uma vez que a fbf gerada no passo anterior e ja constituıda por umaconjuncao de clausulas, este passo corresponde a formacao de um con-junto com tantos elementos quanto o numero de clausulas existentesna fbf.

Page 77: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 65

Exemplo 2.2.29 A partir da fbf do Exemplo 2.2.28, obtemos:

{¬P " ¬Q,¬P "R,¬P " S,¬P " ¬P}

`

5. Eliminacao do sımbolo "Este passo consiste na transformacao de cada clausula num conjuntode literais. Uma vez que o sımbolo logico que liga os literais da clausulae a disjuncao, e esta e comutativa,17 podemos omiti-la. Obtemos assimum conjunto de conjuntos de literais. A partir daqui, passaremos adesignar uma clausula como um conjunto de literais, entendendo-seque este conjunto corresponde a disjuncao dos seus elementos.

Exemplo 2.2.30 A partir do conjunto do Exemplo 2.2.29, obtemos:18

{{¬P,¬Q}, {¬P,R}, {¬P, S}, {¬P}}

`

Definicao 2.2.9 (Clausula – versao 2) Uma clausula e um conjunto deliterais. !

Dado que uma clausula passa a ser representada por um conjunto, utilizamosletras gregas maiusculas para a designar.

O princıpio da resolucao

O princıpio da resolucao corresponde a um padrao de raciocınio que afirmaque a partir de ! " # e de ¬! " $ podemos concluir que # " $. Este padraode raciocınio e justificado pela seguinte prova:19

17Das regras de I# e E# e obvio que (! # ") $ (" # !).18Note-se que a disjuncao {¬P # ¬P} e transformada no conjunto singular {¬P}.19Note-se que esta prova utiliza meta-variaveis que representam fbfs.

Page 78: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

66 CAPITULO 2. LOGICA PROPOSICIONAL

1 ! " # Prem2 ¬! " $ Prem

3 ! Hip

4 ¬! " $ Rei, 2

5 ¬! Hip

6 ¬$ Hip

7 ! Rei, 3

8 ¬! Rei, 5

9 ¬¬$ I¬, (6, (7, 8))

10 $ E¬, 9

11 # " $ I", 10

12 $ Hip

13 # " $ I", 12

14 # " $ I", (4, (5, 11), (12, 13))

15 # Hip

16 # " $ I", 1517 # " $ E", (1, (3, 14), (15, 16))

O princıpio da resolucao e uma regra de inferencia derivada que e aplicavela clausulas, gerando novas clausulas.

Definicao 2.2.10 (Princıpio da resolucao) Sejam # e $ duas clausulase ! uma fbf atomica tal que ! % # e ¬! % $, entao, podemos inferir aclausula (#5 {!})' ($5 {¬!}). A clausula obtida e chamada o resolventedas clausulas # e $, as quais sao designadas por clausulas mae. Em textocorrido, o resolvente e representado por Res(#,$). !

Exemplo 2.2.31 Consideremos as clausulas {P} e {¬P,Q}, as quais cor-respondem, respectivamente, as fbfs de logica proposicional P e P # Q.A aplicacao do princıpio da resolucao a estas duas clausulas da origem aclausula {Q}. Usando resolucao, e vulgar apresentar as inferencias atraves

Page 79: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 67

{P} {¬P, Q}

))

)))

**

***

{Q}

Figura 2.1: Representacao grafica da aplicacao do princıpio da resolucao.

de uma representacao grafica como se mostra na Figura 2.1. Alternativa-mente, esta aplicacao do princıpio da resolucao e representada atraves daseguinte sequencia de linhas:20

1 {P} Prem2 {¬P,Q} Prem3 {Q} Res, (1, 2)

Note-se que esta aplicacao do princıpio da resolucao corresponde a regra deinferencia “modus ponens”. `

Exemplo 2.2.32 Consideremos as clausulas {¬P,Q} e {¬Q,R}, as quaiscorrespondem, respectivamente, as fbfs de logica proposicional P # Q eQ # R. A aplicacao do princıpio da resolucao a estas duas clausulas daorigem a clausula {¬P,R}, a qual corresponde em logica proposicional a fbfP # R. Esta aplicacao pode ser expressa atraves da seguinte sequencia delinhas:

1 {¬P,Q} Prem2 {¬Q,R} Prem3 {¬P,R} Res, (1, 2)

Note-se que esta aplicacao do princıpio da resolucao corresponde ao enca-deamento de fbfs contendo implicacoes. `

Exemplo 2.2.33 Consideremos as clausulas {¬P} e {P}, as quais cor-respondem, respectivamente, as fbfs de logica proposicional ¬P e P . Aaplicacao do princıpio da resolucao a estas duas clausulas da origem aclausula {}, chamada a clausula vazia, a qual corresponde em logica pro-posicional a uma contradicao. `

20Esta sequencia de linhas corresponde a uma prova no sistema de deducao natural comclausulas em lugar de fbfs e utilizando a regra da resolucao, abreviada por “Res”.

Page 80: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

68 CAPITULO 2. LOGICA PROPOSICIONAL

Demonstracao por resolucao

Uma demonstracao por resolucao corresponde a uma prova no sistema dededucao natural com a diferenca que as fbfs sao escritas sob a forma declausulas e apenas utiliza duas regras de inferencia, a regra da premissa e oprincıpio da resolucao.

Definicao 2.2.11 (Demonstracao por resolucao de $ a partir de !)Uma demonstracao por resolucao de uma clausula $ a partir de um conjuntode clausulas ! = {%1, . . . ,%m} e uma sequencia de clausulas &1, . . ., &n, talque:

1. &n = $;

2. Para todo o i (1 4 i 4 n),&i % {%1, . . . ,%m}ou&i = Res(',(), em que ',( % {&1, . . . , &i%1} !

.

Exemplo 2.2.34 Dado o conjunto de clausulas

! = {{¬P,Q}, {¬Q,R}, {¬R,S}, {P}},

a seguinte sequencia e uma demonstracao por resolucao de {S} a partir de!:

1 {¬P,Q} Prem2 {¬Q,R} Prem3 {¬R,S} Prem4 {P} Prem5 {¬P,R} Res, (1, 2)6 {¬P, S} Res, (3, 5)7 {S} Res, (4, 6)

`

Normalmente a resolucao aplica-se a demonstracoes por absurdo, as quais,utilizando resolucao se chamam demonstracoes por refutacao. Nas demons-tracoes por refutacao adiciona-se as premissas a negacao da conclusao egera-se uma contradicao (a clausula vazia).

Definicao 2.2.12 (Demonstracao por refutacao) Uma demonstracaopor refutacao a partir de um conjunto de clausulas ! = {%1, . . . ,%m} e umademonstracao por resolucao de {} a partir de !. !.

Page 81: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 69

{¬P, Q} {¬Q, R}

**

***

))

)))

{¬P, R} {¬R, S}

**

**

*

))

))

)

{¬P , S} {P}

**

**

*

))

))

)

{¬S}{S}

**

**

*

))

))

)

{}

Figura 2.2: Demonstracao por refutacao.

Exemplo 2.2.35 Usando uma demonstracao por refutacao, a demonstracaodo Exemplo 2.2.34 transforma-se na seguinte demonstracao:

1 {¬P,Q} Prem2 {¬Q,R} Prem3 {¬R,S} Prem4 {P} Prem5 {¬S} Prem6 {¬P,R} Res, (1, 2)7 {¬P, S} Res, (3, 6)8 {S} Res, (4, 7)9 {} Res, (5, 8)

Na Figura 2.2 mostramos uma representacao grafica desta demonstracao,sendo as premissas representadas dentro de um rectangulo e os literais quesao utilizados na aplicacao do princıpio da resolucao indicados a sublinhado.`

Page 82: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

70 CAPITULO 2. LOGICA PROPOSICIONAL

Geracao por saturacao de nıveis. Correspondendo a resolucao a umprocesso de inferencia que e facil de automatizar, e natural que se tenhamdesenvolvido estrategias para a geracao sistematica de novas clausulas apartir de clausulas existentes.

Um dos processos de geracao de clausulas utilizado na resolucao, chamadometodo de resolucao por saturacao de nıveis, consiste em separar as clausulasgeradas em varios nıveis, cada um dos quais utiliza pelo menos uma dasclausulas existentes no nıvel anterior.

Usando este metodo, uma demonstracao por resolucao da clausula $ a partirde um conjunto de clausulas ! e uma sequencia de clausulas &1, . . ., &n,agrupadas em conjuntos !1, . . ., !m tais que:

1. &n = $ (&n % !m);

2. !0 = !;

3. Para k > 0

!k = {& : & = Res($,#) ! $ %k%1"

i=0

!i !# % !k%1}.

Exemplo 2.2.36 Na Figura 2.3 apresentamos a demonstracao por refutacaode S a partir de {{¬P,Q}, {¬Q,R}, {¬R,S}, {P}}, utilizando a estrategiade resolucao por nıveis. Note-se que algumas das clausulas do nıvel 2 po-dem ser obtidas por diferentes aplicacoes do princıpio da resolucao, emboraapenas uma delas seja apresentada na figura. `

A utilizacao da resolucao por saturacao de nıveis fornece um algoritmo paraa aplicacao sistematica do princıpio da resolucao a um conjunto de clausulas,que garante encontrar uma solucao, se esta existir, que corresponde ao me-nor numero de aplicacoes do princıpio da resolucao.21 No entanto, como oExemplo 2.2.36 claramente o mostra, a resolucao por saturacao de nıveisorigina muitas clausulas que nao sao uteis para a prova e, alem disso, geraclausulas repetidas. Compare-se, por exemplo, as provas apresentadas naFiguras 2.2 e 2.3, as quais utilizam o mesmo conjunto de premissas.

21Como exercıcio, o leitor devera convencer-se desta afirmacao.

Page 83: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 71

{¬P, Q} {¬Q, R} {¬R, S} {¬S}{P}!0 :

{¬P, R} {¬Q, S} {¬R}{Q}!1 :

+++++

,,

,,

,

+++++

,,

,,

,

+++++

,,

,,

,

+++++

,,

,,

,

{S}

--

--

--

--

,,

,,

,,{¬Q}

.........{¬P}

..........

//

//

//{R}

00000000{¬P, S}

!!

!!

!!

!!!

!2 :

!3 : {}

1111111111111111

222222222222

Figura 2.3: Utilizacao da resolucao por saturacao de nıveis.

Estrategias em resolucao

Para aumentar a eficiencia do processo de demonstracao por resolucao foramdesenvolvidas estrategias que permitem simplificar o processo, dirigindo asinferencias para o objectivo pretendido. Estas estrategias podem ser divi-didas em estrategias de eliminacao de clausulas que permitem a remocaode clausulas redundantes e estrategias de seleccao de clausulas que permi-tem seleccionar as clausulas as quais vai ser aplicado o princıpio da re-solucao. O numero de estrategias aqui apresentadas esta longe de ser exaus-tivo, recomendando-se ao leitor interessado a consulta das referencias bibli-ograficas apresentadas na Seccao 2.5.

Estrategias de eliminacao de clausulas. Uma estrategia de eliminacaode clausulas corresponde a remocao de certas clausulas que nao vao ser uteisnuma demonstracao por resolucao, removendo-as antes de serem utilizadas.

Uma das estrategias de eliminacao, a eliminacao de teoremas, correspondea eliminacao das clausulas que contenham tanto ! como ¬!, em que ! e umsımbolo de proposicao. Para justificar esta estrategia, notemos em primeiro

Page 84: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

72 CAPITULO 2. LOGICA PROPOSICIONAL

lugar que para quaisquer fbfs, ! e #, a fbf (!"¬!)"# e um teorema.22 Sendo& uma fbf correspondente a um teorema, e facil provar que se ! ' {&} & $entao ! & $. Podemos entao concluir que a eliminacao de clausulas quecontenham tanto ! como ¬! nao ira afectar as conclusoes que e possıvelextrair a partir das restantes clausulas.

Outra estrategia de eliminacao, a eliminacao de clausulas nao mınimas, estaassociada ao conceito de subordinacao.

Definicao 2.2.13 (Subordinacao) Uma clausula # subordina a clausula$ (tambem dito que $ e subordinada por #) se # 7 $. !

Dado um conjunto de clausulas, podemos eliminar todas as clausulas su-bordinadas por uma outra clausula existente no conjunto.23 Num conjuntode clausulas, qualquer clausula que seja subordinada por outra clausula doconjunto e chamada clausula nao mınima.

Exemplo 2.2.37 Consideremos as clausulas

{{¬P,¬Q,R}, {¬P,¬Q,Q}, {¬P,¬Q}}.

A eliminacao de teoremas permite-nos eliminar a segunda clausula, dandoorigem a

{{¬P,¬Q,R}, {¬P,¬Q}}

e a eliminacao de clausulas nao mınimas permite-nos reduzir o conjuntoanterior apenas a clausula

{{¬P,¬Q}}.

`

Estrategias de seleccao de clausulas. Uma estrategia de seleccao declausulas corresponde a um processo de controlar as clausulas que sao gera-das numa demonstracao por resolucao, impondo restricoes as clausulas quepodem ser candidatas a aplicacao do princıpio da resolucao. Consideramosaqui apenas duas estrategias de seleccao de clausulas, a resolucao unitaria ea resolucao linear.

22Esta demonstracao deixa-se como exercıcio.23Note-se que para quaisquer fbfs ! e ", ((! # ") % !) $ !.

Page 85: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.2. O SISTEMA DEDUTIVO 73

{Q}{¬P,¬Q}

))

))

)

**

**

*

{P,¬Q}

))

))

)

**

**

*

{¬P} {P}

))

))

)

**

**

*

{}

Figura 2.4: Utilizacao da resolucao unitaria.

Resolucao unitaria A resolucao unitaria baseia-se no facto que ao uti-lizarmos a resolucao tentamos normalmente diminuir o numero de lite-rais existentes nas clausulas produzidas (este aspecto e claramente evidentenas demonstracoes por refutacao). Se uma das clausulas envolvidas numaaplicacao do princıpio da resolucao apenas contiver um literal (se for umaclausula unitaria) entao e garantido que o resolvente tem menos literais doque a clausula mae com maior numero de literais.

A estrategia de resolucao unitaria consiste em aplicar o princıpio da re-solucao utilizando sempre pelo menos uma clausula unitaria.

Exemplo 2.2.38 Consideremos a demonstracao por refutacao de ¬Q a par-tir de {{P,¬Q}, {¬P,¬Q}} utilizando a resolucao unitaria:

1 {P,¬Q} Prem2 {¬P,¬Q} Prem3 {Q} Prem4 {P} Res, (1, 3)5 {¬P} Res, (2, 3)6 {} Res, (4, 5)

A representacao grafica desta prova e apresentada na Figura 2.4. `

Os processos de inferencia baseados apenas na resolucao unitaria nao saocompletos (recorde-se do Capıtulo 1, pagina 22 que numa logica completase podem demonstrar todos os argumentos validos).

Page 86: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

74 CAPITULO 2. LOGICA PROPOSICIONAL

Exemplo 2.2.39 O conjunto de clausulas

{{P,Q}, {¬P,Q}, {P,¬Q}, {¬P,¬Q}}

nao gera qualquer clausula recorrendo ao metodo da resolucao unitaria (poisnao contem clausulas unitarias), embora

{{P,Q}, {¬P,Q}, {P,¬Q}, {¬P,¬Q}} & {}.

`

Resolucao linear Utilizando a estrategia da resolucao linear, comecamospor seleccionar uma clausula entre as premissas, chamada a clausula inicial,obtendo um resolvente entre a clausula inicial e outra clausula qualquerpertencente as premissas. A partir daı, sempre que se aplica o princıpio daresolucao, utiliza-se o ultimo sucessor da clausula inicial. Qualquer sucessorda clausula inicial tem o nome de clausula central.

Definicao 2.2.14 (Demonstracao por resolucao linear) Uma demons-tracao por resolucao linear de uma clausula $, a partir de um conjunto declausulas !, usando a clausula # % ! como clausula inicial e uma sequenciade clausulas &1, . . ., &n em que:

1. &1 = #;

2. &n = $;

3. Para todo o i (1 4 i 4 n5 1), &i+1 = Res(&i,%) em que % % !' {&1,. . . , &i}.

As clausulas &2, . . ., &n correspondem as clausulas centrais. !

Notemos que numa demonstracao por resolucao linear existe um grau de naodeterminismo pois em cada passo podem existir varias clausulas candidatasa aplicacao do princıpio da resolucao. No Capıtulo 4 voltamos a abordareste assunto.

Um outro aspecto a considerar numa demonstracao por resolucao linear cor-responde a escolha da clausula inicial. E habitual escolher como clausulainicial a clausula que corresponde a negacao da clausula que queremos pro-var, utilizando uma demonstracao por refutacao.

Page 87: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 75

{¬R, S}{¬S}

3333333333

{¬R} {¬Q, R}

3333333333

{¬Q} {¬P, Q}

3333333333

{¬P} {P}

3333333333

{}

Figura 2.5: Demonstracao por resolucao linear.

A resolucao linear herda o seu nome da forma linear que a representacaografica das suas derivacoes apresenta.

Exemplo 2.2.40 Suponhamos que desejavamos provar que

{{¬P,Q}, {¬Q,R}, {¬R,S} {P}} & {S}.

Utilizando uma demonstracao por refutacao, esta demonstracao transforma-se em

{{¬P,Q}, {¬Q,R}, {¬R,S} {P}, {¬S}} & {}.Na Figura 2.5 apresentamos a demonstracao por resolucao linear correspon-dente a esta prova. Uma vez que na prova original estamos a tentar provarS, utilizamos {¬S} como clausula inicial. `

2.3 O sistema semantico

No sistema semantico consideramos as fbfs e os sımbolos logicos sob o pontode vista do seu significado. O sistema semantico baseia-se no conceito de

Page 88: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

76 CAPITULO 2. LOGICA PROPOSICIONAL

interpretacao.

2.3.1 Valoracao, interpretacao e tabelas de verdade

Definicao 2.3.1 (Funcao de valoracao) Uma funcao de valoracao e umafuncao, v, dos sımbolos de proposicao para os valores logicos, verdadeiro (V )e falso (F ). Ou seja, v : P )# {V, F}. !

Definicao 2.3.2 (Satisfacao) Dado um sımbolo de proposicao P e umafuncao de valoracao v, dizemos que v satisfaz o sımbolo de proposicao P se eso se v(P ) = V (diz-se tambem que o sımbolo de proposicao P e verdadeirosegundo a funcao de valoracao v); em caso contrario dizemos que a funcao devaloracao nao satisfaz o sımbolo de proposicao P (neste caso, diz-se tambemque o sımbolo de proposicao P e falso segundo a funcao de valoracao v). !

Exemplo 2.3.1 Sejam P e Q dois sımbolos de proposicao. Uma funcao devaloracao corresponde a atribuicao de um valor logico a cada uma destessımbolos de proposicao, por exemplo:

v(P ) = V

v(Q) = F.

De acordo com esta funcao de valoracao, P e verdadeiro e Q e falso. `

Definicao 2.3.3 (Interpretacao) Dada uma fbf ! contendo os sımbolosde proposicao P1, . . ., Pn, uma interpretacao e uma funcao de valoracao emque apenas se consideram os sımbolos de proposicao existentes na fbf. !

Um dos aspectos interessantes da semantica e que o valor logico de umafbf apenas depende dos valores logicos das fbfs que a compoem e dos sımboloslogicos que relacionam esses componentes:

1. No que respeita as fbfs atomicas, a funcao de valoracao e uma asso-ciacao entre os sımbolos de proposicao e os valores logicos V e F .

2. De modo a poder atribuir valores logicos a fbfs que contenham sımboloslogicos, temos que definir o significado dos proprios sımbolos logicos.Definimos este significado atraves de uma funcao booleana,24 uma fun-cao que transforma valores logicos em valores logicos. Uma funcaobooleana de n argumentos e uma funcao de {V, F}n para {V, F}.

24Em honra do matematico ingles George Boole (1815–1864).

Page 89: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 77

A definicao das funcoes booleanas baseia-se nos significados intuitivosdos sımbolos logicos apresentados na Seccao 1.2. Para cada sımbolologico, esta funcao e especificada atraves de uma tabela conhecida portabela de verdade.

(a) Dada uma fbf ! e uma intrepretacao, dizemos que a interpretacaosatisfaz a fbf ¬! se e so se a interpretacao nao satisfaz a fbf !:

! ¬!V FF V

(b) Dadas duas fbfs ! e # e uma intrepretacao, dizemos que a inter-pretacao satisfaz a fbf ! ! # se e so se a interpretacao satisfazambas as fbfs ! e #:

! # ! ! #V V VV F FF V FF F F

(c) Dadas duas fbfs ! e # e uma intrepretacao, dizemos que a inter-pretacao satisfaz a fbf !"# se e so se a interpretacao satisfaz pelomenos uma das fbfs ! ou #:

! # ! " #V V VV F VF V VF F F

(d) Dadas duas fbfs ! e # e uma intrepretacao, dizemos que a in-terpretacao satisfaz a fbf ! # # se e so se a interpretacao naosatisfaz ! ou a interpretacao satisfaz #:

! # ! # #V V VV F FF V VF F V

Os valores logicos de fbfs contendo multiplos sımbolos de proposicao saoobtidos atraves da composicao dos valores logicos das fbfs que estas contem.

Page 90: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

78 CAPITULO 2. LOGICA PROPOSICIONAL

Dizemos que uma fbf e verdadeira (respectivamente, falsa) segundo umainterpretacao se essa interpretacao satisfaz (respectivamente, nao satisfaz)essa fbf.

Exemplo 2.3.2 Dados os sımbolos de proposicao P , Q, e R, se quisermossaber sob que condicoes a fbf (P ! Q) # R e verdadeira, construımos aseguinte tabela de verdade:

P Q P !Q R (P !Q) # RV V V V VV V V F FV F F V VV F F F VF V F V VF V F F VF F F V VF F F F V

Verificamos que a fbf (P ! Q) # R apenas nao e verdadeira no caso deambos os sımbolos de proposicao P e Q serem verdadeiros e o sımbolo deproposicao R ser falso. `

Definicao 2.3.4 (Formula satisfazıvel) Uma fbf diz-se satisfazıvel se eso se existe uma interpretacao na qual a fbf e verdadeira. !

Exemplo 2.3.3 A fbf (P !Q) # R e satisfazıvel (ver Exemplo 2.3.2). `

Definicao 2.3.5 (Formula falsificavel) Uma fbf diz-se falsificavel se e sose existe uma interpretacao na qual a fbf e falsa. !

Exemplo 2.3.4 A fbf (P !Q) # R e falsificavel (ver Exemplo 2.3.2). `

Definicao 2.3.6 (Formula tautologica) Certas fbfs sao verdadeiras paratodas as interpretacoes, fbfs essas que se dizem tautologicas ou tautologias.25

Se ! e uma tautologia escrevemos |= ! ou apenas |= !. !

Exemplo 2.3.5 De acordo com a seguinte tabela de verdade:25Por abuso de linguagem, e comum tambem dizer que estas fbfs sao validas.

Page 91: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 79

Falsa em todasas interpretacoes

Verdadeira em todasas interpretacoes

Tautologica Satisfazıvel Falsificavel Contraditoria

Verdadeira em algumasinterpretacoes e falsa noutras

Figura 2.6: Classificacao das fbfs em LLP .

P Q P # Q P ! (P # Q) (P ! (P # Q)) # QV V V V VV F F F VF V V F VF F V F V

a fbf (P ! (P # Q)) # Q e tautologica. `

Definicao 2.3.7 (Formula contraditoria) Certas fbfs sao falsas para to-das as interpretacoes, fbfs essas que se dizem contraditorias ou nao satisfa-zıveis. !

Exemplo 2.3.6 A fbf P ! ¬P e contraditoria, como o mostra a seguintetabela de verdade:

P ¬P P ! ¬PV F FF V F

`

Na Figura 2.6 apresentamos, graficamente, as relacoes entre fbfs tautologicas,satisfazıveis, falsificaveis e contraditorias.

Teorema 2.3.1 A fbf ! e tautologica se e so se ¬! e contraditoria.

Page 92: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

80 CAPITULO 2. LOGICA PROPOSICIONAL

Demonstracao: Seja ! uma fbf arbitraria e seja v uma funcao de valoracao. Pordefinicao da interpretacao para a negacao v(!) = V se e so se v(¬!) = F(ver pagina 77). Se ! for verdadeira para todas as funcoes de valoracao (!e tautologica), entao ¬! sera falsa para todas as funcoes de valoracao (¬!e contraditoria). Conversamente, se ¬! for falsa para todas as funcoes devaloracao, entao ! sera verdadeira para todas as funcoes de valoracao. "

Teorema 2.3.2 A fbf ! e satisfazıvel se e so se ¬! e falsificavel.

Demonstracao: Seja ! uma fbf arbitraria e seja v uma funcao de valoracao. Pordefinicao da interpretacao para a negacao v(!) = V se e so se v(¬!) = F (verpagina 77). Se existir uma funcao de valoracao na qual ! e verdadeira (! esatisfazıvel) entao para essa funcao de valoracao ¬! e falsa (¬! e falsificavel).Conversamente, se existir uma funcao de valoracao para a qual ¬! e falsa,entao para essa funcao de valoracao ! e verdadeira. "

Definicao 2.3.8 (Conjunto satisfazıvel) Um conjunto de fbfs ! diz-sesatisfazıvel se e so se existe pelo menos uma interpretacao que satisfaz todasas fbfs de !. !

Exemplo 2.3.7 Considerando o Exemplo 2.3.5, o conjunto {P,Q, P # Q}e satisfazıvel pois a interpretacao v(P ) = V e v(Q) = V satisfaz todas asfbfs deste conjunto. `

Definicao 2.3.9 (Conjunto contraditorio) Um conjunto de fbfs ! diz-se contraditorio se e so se nao existe nenhuma interpretacao que satisfaztodas as fbfs de !. !

Exemplo 2.3.8 O conjunto {P,¬P} e contraditorio pois nenhuma inter-pretacao satisfaz todas as fbfs deste conjunto. `

Definicao 2.3.10 (Modelo de um conjunto de formulas) Dado umconjunto de fbfs !, uma interpretacao que satisfaz todas as fbfs de ! diz-seum modelo do conjunto !. !

Usando a semantica podemos agora verificar a validade ou a invalidade deum argumento. Por definicao o argumento (!, !) e valido se nao existirnenhuma interpretacao que torne todas as proposicoes em ! verdadeiras ea conclusao (!) falsa.26 Neste caso escrevemos ! |= !.

26De um modo equivalente podemos dizer que todos os modelos das premissas saomodelos da conclusao.

Page 93: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 81

Exemplo 2.3.9 Dado o argumento ({P !Q, R}, P !R), a seguinte tabelade verdade mostra a sua validade. Note-se que nesta tabela nao existenenhuma linha em que todas as premissas tenham o valor V e a conclusaotenha o valor F .

P Q R P !Q P !RV V V V VV V F V FV F V F VV F F F FF V V F FF V F F FF F V F FF F F F F

`

Dada uma fbf ! contendo n sımbolos de proposicao, P1, P2, . . ., Pn, podemos,em princıpio, construir uma tabela de verdade com 2n linhas, cada uma dasquais corresponde a uma combinacao possıvel dos valores logicos de P1, P2,. . ., Pn. Esta tabela de verdade pode ser utilizada como base para umalgoritmo para determinar, por exemplo, se ! e uma tautologia.

O problema com este algoritmo e que a sua complexidade cresce exponen-cialmente com o numero de sımbolos de proposicao. Estes algoritmos saoimportantes, por exemplo, para o projecto de circuitos electronicos. Noprojecto de um circuito electronico, um pequeno “chip” pode facilmente termais de 100 sımbolos de proposicao, o que exigiria uma tabela de verdadecom mais de 2100 linhas (numero esse que e superior a 1030).

2.3.2 Diagramas de decisao binarios (BDDs)

Para resolver o problema apresentado no final da seccao anterior foram de-senvolvidos metodos que permitem, de um modo mais eficiente, o calculo dospossıveis valores logicos de uma fbf contendo varios sımbolos de proposicao.Um desses metodos, os diagramas de decisao binarios, e apresentado nestaseccao. Para definir um diagrama de decisao binario necessitamos do con-ceito de arvore de decisao.

Page 94: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

82 CAPITULO 2. LOGICA PROPOSICIONAL

Definicao 2.3.11 (Arvore de decisao) Uma arvore de decisao para umafbf e uma arvore binaria em que os nos contem os sımbolos de proposicaoexistentes na fbf e as folhas da arvore sao um dos valores V e F , repre-sentando, respectivamente, verdadeiro e falso.

A cada nıvel de profundidade da arvore, todos os nos correspondem aomesmo sımbolo de proposicao.

Cada um dos nos, com a excepcao das folhas, domina duas arvores de de-cisao, a da esquerda, a qual esta ligado por uma linha a tracejado e a dadireita, a qual esta ligado por uma linha a cheio.

Para uma dada interpretacao, comecando na raiz da arvore, para cadasımbolo de proposicao, tomando o ramo da esquerda (linha a tracejado)se o valor do sımbolo de proposicao for falso e o ramo da direita (linha acheio) se o valor do sımbolo de proposicao for verdadeiro, o valor da fo-lha que se atinge tem o valor logico que surge na ultima coluna da linhacorrespondente da tabela de verdade. !

Uma tabela de verdade pode ser transformada numa arvore de decisao, re-presentando em cada nıvel um dos sımbolos de proposicao, pela ordem emque aparecem nas colunas da tabela de verdade, ligando cada sımbolo a umnıvel ao sımbolo do nıvel seguinte atraves de uma linha a cheio e de uma linhaa tracejado e inserindo as folhas da arvore com os valores correspondentes.

Exemplo 2.3.10 Consideremos a tabela de verdade para a fbf P ! ((Q !R) " (R ! ¬Q)):

P Q R P ! ((Q !R) " (R ! ¬Q))V V V VV V F FV F V VV F F FF V V FF V F FF F V FF F F F

Na Figura 2.7 apresentamos a arvore de decisao construıda a partir destatabela de verdade. Considerando esta arvore de decisao, a interpretacaov(P ) = V , v(Q) = F e v(R) = V , determina o valor logico verdadeiro paraa fbf. `

Page 95: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 83

P

R

F V

Q

R

F V

Q

R R

F F F F

Figura 2.7: Arvore de decisao para a fbf P ! ((Q !R) " (R ! ¬Q)).

Note-se que as arvores de decisao e as tabelas de verdade sao basicamentesemelhantes no que respeita a sua dimensao e ao numero de pontos de de-cisao que e necessario considerar para avaliar uma fbf. No entanto, existeum conjunto de transformacoes que aplicado a arvores de decisao permitetransforma-las em grafos acıclicos dirigidos e rotulados que representam, deum modo compacto, a mesma informacao.

Definicao 2.3.12 (Grafo dirigido) Um grafo dirigido corresponde a umaestrutura (N, A) em que N e um conjunto finito e A e uma relacao binariadefinida sobre N . O conjunto N corresponde aos nos do grafo e o conjuntoA corresponde aos arcos do grafo. !

De acordo com esta definicao, os arcos correspondem a um conjunto de paresem que cada elemento do conjunto, (ni, nj), pertence a N2. Se (ni, nj) % A,diz-se que existe um arco que parte de ni e que termina em nj . Em texto,representamos o arco (ni, nj) por ni * nj .

Dado um grafo dirigido (N, A), um no n para o qual nao existe nenhumarco que nele termina, ou seja nao existe nenhum par em A cujo segundoelemento e n, diz-se um no inicial ou uma raiz; um no n para o qual naoexiste nenhum arco que dele parte, ou seja nao existe nenhum par em Acujo primeiro elemento e n, diz-se um no terminal ou uma folha. Note-seque contrariamente a uma arvore, num grafo podem existir zero ou maisraizes e zero ou mais folhas. Um no que nao seja nem um no inicial nem umno terminal diz-se no nao terminal.

Definicao 2.3.13 (Caminho) Num grafo dirigido define-se um caminho

Page 96: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

84 CAPITULO 2. LOGICA PROPOSICIONAL

n1

n2

n3

n4

n5

Figura 2.8: Exemplo de representacao de um grafo.

como sendo uma sequencia de nos, [n1, n2, . . . , nk], tal que para cada nona sequencia existe um arco para o proximo no da sequencia, ou seja, para1 4 i 4 k 5 1 verifica-se que ni * ni+1. No caminho [n1, n2, . . . , nk], o non1 diz-se o inıcio do caminho e o no nk diz-se o fim do caminho. !

Definicao 2.3.14 (Grafo acıclico) Um grafo dirigido diz-se acıclico senao e possıvel construir nenhum caminho que comeca e termina no mesmono. !

Exemplo 2.3.11 Na Figura 2.8 mostramos a representacao do grafo ({n1,n2, n3, n4, n5}, {(n1, n3), (n2, n1), (n2, n3), (n2, n4), (n3, n3), (n3, n4)}).Esta representacao mostra o arco n * m como uma seta de n para m,no entanto, a seta pode ser substituıda por uma linha se a direccao estiverimplıcita.

Os nos n2 e n5 sao nos iniciais (raizes) e os nos n4 e n5 sao nos terminais(folhas). Note-se que o no n5 nao pertence a nenhum par da relacao, sendo,por isso, simultaneamente um no inicial e um no terminal.

As sequencias [n2, n3, n3, n3, n4], [n2, n1, n3, n4] e [n3, n3] sao exemplos decaminhos neste grafo, pelo que o grafo nao e acıclico. `

Definicao 2.3.15 (Grafo dirigido e rotulado) Um grafo dirigido e ro-tulado corresponde a uma estrutura (N, A) em que N e um conjunto finitoe A e um conjunto de relacoes binarias definidas sobre N . O conjuntoN corresponde aos nos do grafo e o conjunto A corresponde aos arcos do

Page 97: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 85

n1

n2

n3

n4

n5

R1

R2

R1

R2

R1

R2

R1

R1

Figura 2.9: Exemplo de representacao de um grafo dirigido e rotulado.

grafo. Cada relacao em A corresponde a um conjunto de arcos com um dadorotulo.!

Exemplo 2.3.12 Na Figura 2.9 mostramos a representacao do grafo ({n1,n2, n3, n4, n5}, {{(n1, n3), (n2, n1), (n2, n3), (n2, n4), (n3, n4)}, {(n2, n1),(n3, n3), (n3, n4)}}). Esta representacao mostra o arco n * m como umaseta de n para m, seta essa que e rotulada com uma indicacao da relacao,R1 ou R2. `

Note-se que, na representacao grafica, em lugar de rotular os arcos com osnomes das relacoes, podemos ter diferentes tipos de representacoes graficaspara cada uma das relacoes.

Exemplo 2.3.13 O grafo da Figura 2.9 pode ser representado como seindica na Figura 2.10, utilizando uma linha a cheio para os arcos que corres-pondem a relacao R1 e uma linha a tracejado para os arcos que correspondema relacao R2. `

Com a introducao de grafos dirigidos e rotulados, a definicao de caminhodeve ser reformulada, existindo duas possibilidades para esta definicao.

Definicao 2.3.16 (Caminho segundo uma relacao) Num grafo dirigi-do e rotulado define-se um caminho segundo uma relacao como sendo umasequencia de nos, [n1, n2, . . . , nk], tal que existe uma relacao R % A, tal

Page 98: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

86 CAPITULO 2. LOGICA PROPOSICIONAL

n1

n2

n3

n4

n5

Figura 2.10: Representacao alternativa para o grafo da Figura 2.9.

que para cada no na sequencia existe um arco, segundo essa relacao, parao proximo no da sequencia, ou seja, para 1 4 i 4 k 5 1 verifica-se que(ni, ni+1) % R. !

Definicao 2.3.17 (Caminho segundo qualquer relacao) Num grafodirigido e rotulado define-se um caminho segundo qualquer relacao comosendo uma sequencia de nos, [n1, n2, . . . , nk], tal que para cada no na sequen-cia existe um arco, segundo uma relacao em A, para o proximo no da sequen-cia, ou seja, para cada i (1 4 i 4 k 5 1), existe uma relacao Rj % A tal que(ni, ni+1) % Rj . !

Na representacao grafica de um grafo, os nos podem estar associados arotulos, mostrando-se o rotulo e nao o no (o elemento de N). No entantonao se deve confundir um no com o seu rotulo; os nos sao unicos no grafo(correspondem a elementos do conjunto N), ao passo que dois ou mais nospodem ter o mesmo rotulo.

Exemplo 2.3.14 O grafo da Figura 2.9 pode ser representado como se in-dica na Figura 2.11, utilizando os seguintes rotulos para os nos rotulo(n1) =A, rotulo(n2) = B, rotulo(n3) = C, rotulo(n4) = A e rotulo(n5) = C. `

Definicao 2.3.18 (BDD) Um diagrama de decisao binario (do ingles “Bi-nary Decision Diagram”, abreviado por BDD), tambem designado apenaspor BDD, e um grafo acıclico dirigido e rotulado em que os rotulos do nos

Page 99: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 87

A

A

B

C

C

Figura 2.11: Representacao alternativa para o grafo da Figura 2.9.

pertencem ao conjunto P ' { V , F }.27

Num BDD existem duas relacoes, uma representada graficamente por arcosa cheio e a outra representada por arcos a tracejado.

Para alem destas condicoes, e por definicao, um BDD tem um unico noinicial e todos os seus nos terminais tem os rotulos V ou F . Os rotulosdos nos nao terminais correspondem a sımbolos de proposicao.!

O significado das relacoes existentes num BDD e semelhante ao significadodos arcos existentes numa arvore de decisao. Dado qualquer no, n, quenao seja uma folha, seguindo o arco a tracejado (chamado o arco negativo)a partir de n leva-nos para um no no qual se assume que o sımbolo deproposicao que corresponde ao rotulo do no n e falso; seguindo o arco acheio (chamado o arco positivo) a partir de n leva-nos para um no no qualse assume que o sımbolo de proposicao que corresponde ao rotulo do no ne verdadeiro. Por abuso de linguagem, e sempre que nao exista perigo deconfusao, num BDD referimo-nos a um no indicando apenas o seu rotulo.

Na representacao de um BDD omitimos as setas nas extremidades dos arcos,estando implıcito que os arcos correspondem a uma linha dirigida do no maisacima para o no mais abaixo.

Exemplo 2.3.15 Na Figura 2.12 apresentamos um exemplo de um BDD.Neste BDD, o no inicial tem o rotulo P , os nos nao terminais tem os rotulos

27Recorde-se da pagina 29 que P representa o conjunto dos sımbolos de proposicao.

Page 100: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

88 CAPITULO 2. LOGICA PROPOSICIONAL

P

R

Q

R

V

Q

R R

F

Figura 2.12: Exemplo de um BDD.

Q e R. Notemos, mais uma vez, que no grafo sujacente ao BDD cada notem um identificador unico, o qual nao mostramos. `

Definicao 2.3.19 (Profundidade de um no) Num BDD, define-se aprofundidade de um no como o numero de nos que existem num caminhosegundo qualquer relacao entre a raiz e esse no, nao contando com a raiz. Pordefinicao a profundidade da raiz de qualquer BDD e zero. Dado um inteironao negativo, m, e um BDD, os nos ao nıvel m do BDD correspondem aoconjunto de todos os nos do BDD cuja profundidade e m. !

Definicao 2.3.20 (BDD positivo e negativo) Dado um BDD que naoseja uma folha, o BDD que se atinge tomando, a partir do no inicial, o arcoque corresponde a situacao do sımbolo de proposicao associado a este noter o valor falso (o arco negativo) chama-se o BDD negativo; o BDD que seatinge tomando, a partir do no inicial, o arco que corresponde a situacaodo sımbolo de proposicao associado a este no ter o valor verdadeiro (o arcopositivo) chama-se o BDD positivo.!

Exemplo 2.3.16 Considerando o BDD da Figura 2.12, os seus BDDs ne-gativo e positivo estao representados, respectivamente, na Figura 2.13 (a) e(b). `

Transformacoes aplicaveis em BDDs. E importante notar que umaarvore de decisao binaria pode ser considerada um BDD. Com efeito, cadaramo da arvore pode ser considerado como um arco, dirigido (do no mais

Page 101: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 89

R

Q

R

V

Q

R R

F F

(a) (b)

Figura 2.13: BDDs negativo e positivo do BDD da Figura 2.12.

acima para o no mais abaixo) ligando dois nos. Uma arvore de decisaobinaria tem um unico no inicial (a raiz da arvore) e todos os seus nos ter-minais (as folhas) tem os rotulos V ou F . Para alem disso, todos os nosnao terminais correspondem a sımbolos de proposicao.

Existe um conjunto de transformacoes, conhecidas por reducoes, que aplica-das a BDDs permitem transforma-los em BDDs equivalentes (equivalentes,no sentido em que calculam o mesmo valor para a mesma interpretacao)mas com uma representacao mais compacta:

R1 Remocao de folhas duplicadas. Se o BDD tem mais do que uma folhacom o rotulo V ou com o rotulo F , todas as folhas com o mesmorotulo sao unificadas, sendo os arcos associados redireccionados parareflectir esta alteracao.

Exemplo 2.3.17 Usando esta transformacao, a arvore de decisao daFigura 2.7 e transformada no BDD apresentado na Figura 2.12. `

R2 Remocao de testes redundantes. Se ambos os arcos que saem de umno se dirigem ao mesmo no, entao podemos eliminar o no de saıda,redireccionando os arcos do no de entrada.

Exemplo 2.3.18 Na Figura 2.14 mostramos os testes redundantesexistentes no BDD da Figura 2.12. A aplicacao de um passo destatransformacao pode dar origem a outros testes redundantes, pelo queesta transformacao pode ser aplicada mais do que uma vez. Na Fi-

Page 102: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

90 CAPITULO 2. LOGICA PROPOSICIONAL

P

R

Q

R

V

Q

R R

F

Figura 2.14: Indicacao de testes redundantes no BDD da Figura 2.12.

P

R

Q

R

VF

Figura 2.15: Resultado da aplicacao sucessiva da transformacao R2.

gura 2.15 mostra-se o resultado final da aplicacao sucessiva da trans-formacao R2 ao BDD da Figura 2.14.28 `

R3 Remocao de nos redundantes. Se dois nos distintos sao os nos iniciaisde dois sub-BDDs estruturalmente semelhantes,29 entao podemos eli-minar um deles, dirigindo os nos relevantes do outro. Note-se que atransformacao R1 e um caso particular desta transformacao.

28A verificacao deste resultado deixa-se como exercıcio.29Dois BDDs correspondentes a folhas sao estruturalmente semelhantes se tiverem o

mesmo rotulo; dois BDDs que nao sejam folhas sao estruturalmente semelhantes se osnos correspondentes as suas raızes tiverem o mesmo rotulo e se os seus BDDs positivos enegativos forem, respectivamente, estruturalmente semelhantes.

Page 103: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 91

P

R

VF

Figura 2.16: Resultado final da aplicacao das transformacoes.

Exemplo 2.3.19 No BDD da Figura 2.15 os sub-BDDs cuja raiz temo rotulo R sao estruturalmente semelhantes. Novamente, esta trans-formacao pode ter que ser aplicada mais do que uma vez, eventual-mente em conjuncao com as outras transformacoes. Na Figura 2.16apresentamos o resultado final da aplicacao das transformacoes R1,R2 e R3 ao BDD da Figura 2.12.30 `

Definicao 2.3.21 (BDD reduzido) Um BDD ao qual nao e possıvel apli-car nenhuma das transformacoes R1, R2 ou R3 diz-se um BDD em formareduzida ou BDD reduzido. !

Composicao de BDDs. As transformacoes que descrevemos, emborapermitam simplificar a representacao de uma fbf atraves de uma arvore dedecisao binaria, obrigam a construcao da arvore de decisao binaria para afbf em causa, o que por si so, e um problema de complexidade exponencial.

Uma das vantagens da utilizacao de BDDs corresponde a possibilidade deconstruir um BDD para uma fbf directamente a partir dos BDDs que cor-respondem as componentes dessa fbf.

Na descricao que apresentamos apenas consideramos os sımbolos logicos ¬, !e ". As fbfs que contenham outros sımbolos logicos deverao ser transforma-das em fbfs que apenas contenham os sımbolos considerados. Por exemplo,a fbf ! # # devera ser transformada em ¬! " #.

Sejam BDD! e BDD", respectivamente, os BDDs correspondentes as fbfs !e #.31 Entao:

30A verificacao deste resultado deixa-se como exercıcio.31Se uma destas fbfs for um sımbolo de proposicao, o seu BDD tera uma raız cujo rotulo

Page 104: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

92 CAPITULO 2. LOGICA PROPOSICIONAL

P

R

F V

P

F V

Q

R

(a) (b)

Figura 2.17: BDDs correspondentes a (P "Q) ! (P "R) e a ¬P "R.

1. O BDD para a fbf ¬! pode ser criado a partir de BDD! substituindo,simultaneamente o no com o rotulo V por F e o no com o rotuloF por V .

2. O BDD para a fbf !!# pode ser criado a partir de BDD!, substituindoo no com o rotulo V pelo BDD" e aplicando ao BDD resultante astransformacoes R1 a R3.

3. O BDD para a fbf !"# pode ser criado a partir de BDD!, substituindoo no com o rotulo F pelo BDD" e aplicando ao BDD resultante astransformacoes R1 a R3.

Exemplo 2.3.20 Consideremos as fbfs (P "Q)!(P "R) e ¬P "R, as quaiscorrespondem, respectivamente, os BDDs representados na Figura 2.17 (a)e (b). Suponhamos que querıamos construir um BDD para a fbf ((P "Q)!(P " R)) ! (¬P " R). De acordo com as regras enunciadas, obterıamos oBDD da Figura 2.18 (a), o qual, usando as transformacoes R1, R2 e R3,seria transformado no BDD da Figura 2.18 (b). `

e esse sımbolo de proposicao e cujos BDDs positivo e negativo sao, respectivamente, V

e F .

Page 105: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 93

(a) (b)

P

F

Q

R

P

R

F V

P

Q

R

P

R

F V

Figura 2.18: BDD correspondente a ((P "Q) ! (P "R)) ! (¬P "R).

Page 106: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

94 CAPITULO 2. LOGICA PROPOSICIONAL

P

Q

R

F V

Figura 2.19: Outro BDD correspondente a ((P "Q)! (P "R))! (¬P "R).

Note-se, que na definicao de BDD, nada proıbe que um sımbolo de pro-posicao apareca mais do que uma vez num caminho do grafo, tal comoacontece na Figura 2.18 (b). Neste caso, contudo, teremos que considerarapenas caminhos consistentes ao longo do BDD. O caminho que atinge o noV considerando a possibilidade de P ser falso e de P ser verdadeiro, naoe consistente pois ao longo deste caminho o mesmo sımbolo de proposicao(P ) e simultaneamente considerado como verdadeiro e falso.

Note-se tambem, que se construirmos de raiz (ou seja, partindo da arvorede decisao binaria) um BDD para a fbf ((P " Q) ! (P " R)) ! (¬P " R),obtemos o BDD apresentado na Figura 2.19, o qual, para alem de estar maissimplificado, nao apresenta caminhos inconsistentes.

Os problemas encontrados na construcao dos BDDs da Figura 2.18 foramoriginados do facto das fbfs ((P " Q) ! (P " R)) e (¬P " R) partilharemsımbolos de proposicao e o BDD que resulta da composicao dos BDDs destasfbfs nao tomar esse aspecto em consideracao.

Para resolver este problema teremos que introduzir o conceito de diagramade decisao binario ordenado.

2.3.3 Diagramas de decisao binarios ordenados (OBDDs)

Seja {P1, . . . , Pn} um conjunto de sımbolos de proposicao e seja + umarelacao de ordem total definida sobre o conjunto {P1, . . . , Pn}. Note-se quepelo facto de {P1, . . . , Pn} ser um conjunto, esta implıcito que este nao tem

Page 107: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 95

elementos repetidos.

Definicao 2.3.22 (Relacao de ordem total) Uma relacao de ordem to-tal, +, definida sobre {P1, . . . , Pn} e uma relacao binaria, transitiva, anti-reflexiva e anti-simetrica, que permite que todos os elementos do conjunto se-jam comparaveis. Ou seja, dados dois elementos quaisquer de {P1, . . . , Pn},Pi e Pj , exactamente uma das duas relacoes se verifica Pi + Pj ou Pj + Pi.!

Definicao 2.3.23 (Ordenacao introduzida por relacao) Diz-se que arelacao de ordem + introduz uma ordenacao no conjunto {P1, . . . , Pn}, aqual e representada por [P1, . . . , Pn]# (quando nao haja risco de confusao,este sera abreviado para apenas [P1, . . . , Pn]). Na sequencia [P1, . . . , Pn]#,para todo o i (1 4 i 4 n 5 1) verifica-se que Pi + Pi+1. Na sequencia[P1, . . . , Pn]#, P1 e o elemento com maior prioridade e Pn e o elemento commenor prioridade. !

Definicao 2.3.24 (Sequencia satisfaz uma ordem) Dado um subcon-junto de {P1, . . . , Pn}, {Q1, . . . , Qm}, diz-se que a sequencia [Q1, . . . , Qm]satisfaz a ordem + se e so se para todo o i (1 4 i 4 m 5 1) se verifica queQi + Qi+1. !

Definicao 2.3.25 (BDD satisfaz uma ordem) Seja {P1, . . . , Pn} umconjunto de sımbolos de proposicao, seja + uma relacao de ordem totaldefinida sobre {P1, . . . , Pn} e seja D um BDD que apenas contem sımbolosde proposicao pertencentes ao conjunto. Diz-se que D satisfaz a ordem + see so se para qualquer caminho segundo qualquer relacao, n1, n2, . . . , nk emD a sequencia de nos [n1, n2, . . . , nk] satisfizer a ordem +, ou seja para todoo i, 1 4 i 4 k 5 1, ni + ni+1. !

Definicao 2.3.26 (OBDD) Um diagrama de decisao binario ordenado (doingles “Ordered Binary Decision Diagram” ou OBDD), tambem designadoapenas por OBDD, e um BDD que satisfaz alguma relacao de ordem totalpara os sımbolos de proposicao que contem. !

Dadas as propriedades das relacoes de ordem totais, e facil concluir que numOBDD nao podem existir caminhos que contenham mais do que uma vezo mesmo sımbolo de proposicao. Por esta razao, os BDDs apresentados naFigura 2.18 nao sao OBDDs.

Page 108: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

96 CAPITULO 2. LOGICA PROPOSICIONAL

R

Q

V F

P

Q

R

F V

Figura 2.20: Exemplo de OBDDs nao compatıveis.

Definicao 2.3.27 (OBDDs compatıveis) Dados dois OBDDs, OBDD1

e OBDD2 e uma sequencia de sımbolos de proposicao [P1, . . . , Pn] induzidapor uma ordem +, diz-se que OBDD1 e OBDD2 sao compatıveis se e so seambos satisfazem a ordem + aplicada ao conjunto de sımbolos de proposicao{P1, . . . , Pn}. !

Exemplo 2.3.21 Os OBDDS apresentados na Figura 2.17 sao compatıveis;os OBDDS apresentados na Figura 2.20 nao sao compatıveis. `

A importancia dos OBDDs resulta, em parte, dos seguintes resultados:

Teorema 2.3.3 Dada uma fbf ! e uma relacao de ordem total para ossımbolos de proposicao de !, o OBDD reduzido correspondente a ! e unico.

Demonstracao: Ver [Bryant 86]. "

Corolario 2.3.1 A verificacao de se dois OBDDs correspondem a mesmafbf e feita verificando se estes sao estruturalmente semelhantes.

Demonstracao: Ver [Bryant 86]. "

Do Teorema 2.3.3 e do Corolario 2.3.1, podemos extrair um conjunto detestes triviais para verificar propriedades de fbfs:

1. Teste para validade. Uma fbf ! e uma tautologia se e so se o seu OBDDreduzido e V .

Page 109: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 97

2. Teste para satisfazibilidade. Uma fbf ! e satisfazıvel se e so se o seuOBDD reduzido nao e F .

3. Teste para inconsistencia. Uma fbf ! e uma contradicao se e so se oseu OBDD reduzido e F .

4. Teste para equivalencia. Duas fbfs ! e # sao equivalentes se e so se osseus OBDDs sao estruturalmente semelhantes.

E importante notar que a relacao de ordem escolhida tem influencia notamanho do OBDD. Por exemplo, na Figura 2.21 mostram-se os OBDDsreduzidos para a fbf (P1"P2)! (P3"P4)! (P5"P6) usando as ordens totaisP1 + P2 + P3 + P4 + P5 + P6 e P1 + P3 + P5 + P2 + P4 + P6.32

Apesar deste resultado negativo, e possıvel encontrar heurısticas eficientespara determinar a ordem dos sımbolos de proposicao a utilizar num OBDD.

Algoritmos para a manipulacao de OBDDs. Dada a importanciados resultados traduzidos pelos testes de verificacao de propriedades defbfs usando OBDDs, vamos agora concentrar-nos no desenvolvimento dealgoritmos para a manipulacao de OBDDs.

Para facilitar a apresentacao destes algoritmos, consideramos um OBDDcomo um tipo abstracto de informacao, em relacao ao qual sao definidas asoperacoes basicas que descrevemos de seguida. Na definicao destas operacoesassume-se que N e o conjunto de nos do OBDD. Os rotulos dos nos perten-cem ao conjunto P ' {V, F}.

1. Construtores:

• cria folha : {V, F} )# OBDD

cria folha(b) devolve um OBDD correspondente a uma folha cujorotulo e b.

• cria OBDD : P ,OBDD ,OBDD )# OBDD

cria OBDD(r, on, op) tem como valor o OBDD cuja raiz tem orotulo r, cujo OBDD negativo e on e cujo OBDD positivo e op.

2. Selectores:32Exemplo introduzido por [Bryant 86] e adaptado de [Huth and Ryan 04, p. 371].

Page 110: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

98 CAPITULO 2. LOGICA PROPOSICIONAL

F V

P1

P2

P3

P4

P5

P6

P2

P2

P2

P2

P5

P5

P5

P5

P3

P3

P1

P4

P4

V

P6

F

P1

P1P3P5P2P4P6

[ ], , , , ,P1P2P3P4P5P6

[ ], , , , ,

Figura 2.21: OBDDs para a mesma fbf com diferentes ordenacoes.

Page 111: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 99

• raiz : OBDD )# P ' {V, F}raiz(o) recebe um OBDD, o, e tem como valor o rotulo do no quecorresponde a sua raiz.

• neg : OBDD )# OBDD

neg(o) recebe um OBDD, o, e tem como valor o OBDD nega-tivo de o. Se o OBDD corresponder a uma folha, o valor destaoperacao e a propria folha.

• pos : OBDD )# OBDD

pos(o) recebe um OBDD, o, e tem como valor o OBDD positivo deo. Se o OBDD corresponder a uma folha, o valor desta operacaoe a propria folha.

3. Modificadores:

• muda neg! : OBDD ,OBDD )# OBDD

muda neg!(o, on) recebe um OBDD, o, e muda destrutivamenteo seu OBDD negativo para on. Se o for uma folha nada acontece.

• muda pos! : OBDD ,OBDD )# OBDD

muda pos(o, op)! recebe um OBDD, o, e muda destrutivamente oseu OBDD positivo para op. Se o for uma folha nada acontece.

4. Reconhecedores:

• folha? : OBDD )# {V, F}folha?(o) tem o valor V (verdadeiro) se o OBDD o correspondea uma folha e tem o valor F (falso), em caso contrario.

Consideramos tambem que as seguintes operacoes de alto nıvel estao defini-das para OBDDs:

• folhas : OBDD )# 2OBDD

folhas(o) devolve o conjunto de todos os OBDDs que correspondema folhas do OBDD o.

• nıvel : OBDD , N0 )# 2OBDD

nıvel(o, n) devolve o conjunto de todos os OBDDs cujas raızes se en-contram ao nıvel n no OBDD o, ou, simplesmente, os OBDDs do nıveln do OBDD o.

Page 112: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

100 CAPITULO 2. LOGICA PROPOSICIONAL

• profundidade max : OBDD )# N0

profundidade max(o) devolve o valor da maior profundidade a que epossıvel encontrar um no no OBDD o.

Para alem do tipo OBDD, os nossos algoritmos trabalham com conjuntose com listas associativas. Consideramos que as seguintes operacoes estaodefinidas para o tipo conjunto e para o tipo lista associativa.

Conjunto. Nestas operacoes, elem corresponde ao tipo dos elementos doconjunto:

• novo conjunto : {} )# conjunto

novo conjunto() devolve um conjunto vazio.

• escolhe : conjunto )# elem

escolhe(c) devolve um elemento do conjunto c. Este elemento e escol-hido arbitrariamente. Se c for o conjunto vazio, o valor desta operacaoe indefinido.

• junta : elem, conjunto )# conjunto

junta(e, c) devolve o conjunto que se obtem adicionando o elemento ea c. Se e ja pertencer ao conjunto, esta operacao devolve c.

• subtrai : elem, conjunto )# conjunto

subtrai(e, c) devolve o conjunto que se obtem de c removendo o ele-mento e. Se e nao pertencer ao conjunto, esta operacao devolve c.

• vazio? : conjunto )# {V, F}vazio?(c) tem o valor V (verdadeiro) se c corresponde ao conjuntovazio e tem o valor F (falso), em caso contrario.

• card : conjunto )# N0

card(c) tem como valor o numero de elementos (a cardinalidade) doconjunto c.

Lista associativa. Uma lista associativa e uma lista cujos elementos saopares. O primeiro elemento de cada par, a chave, corresponde a um identifi-cador unico na lista. O segundo elemento do par, o conteudo, pode ser qual-quer tipo de informacao. Entre outras, as listas associativas tem as seguintesoperacoes basicas. Nestas operacoes, chave corresponde ao tipo escolhidopara a chave e universal corresponde a qualquer tipo de informacao.

Page 113: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 101

1. Construtores:

• nova lst ass : {} )# lista assoc

nova lst ass() devolve uma nova lista associativa sem elementos.

2. Selectores:

• conteudo : chave, lista assoc )# universal

conteudo(ch, l a) devolve o segundo elemento do par existente eml a cuja chave e ch. Se nao existir nenhum par com essa chave, ovalor desta operacao e indefinido.

3. Modificadores:

• insere lst ass! : chave, universal , lista assoc )# lista assoc

insere lst ass!(ch, cont, l a) modifica destrutivamente a lista as-sociativa l a atraves da introducao do par (ch, cont). Se em l a jaexistir um par com a chave ch, este par e alterado para (ch, cont).

Utilizamos listas associativas cujas chaves correspondem aos identificadoresproduzidos pelo Algoritmo 2.1, inteiros nao negativos, e em que os elementoscorrespondem a OBDDs.

O algoritmo “reduz”. O objectivo do algoritmo reduz (Algoritmo 2.1)e transformar um OBDD, satisfazendo uma ordenacao [P1, . . . , Pn]# numOBDD reduzido, satisfazendo a mesma ordenacao.

Este algoritmo baseia-se no facto de um OBDD satisfazendo a ordenacao[P1, . . . , Pn]# ter no maximo n nıveis. O algoritmo associa, a cada umdos sub-OBDDs do OBDD, um identificador correspondente a um numerointeiro nao negativo. Por esta razao, assumimos as seguintes operacoes paramanipular estes identificadores:

• id : OBDD )# N0

id(o) recebe um OBDD, o, e tem como valor o identificador associadoa esse OBDD.

• id! : OBDD , N0 )# -id!(o, n) recebe um OBDD, o, e um inteiro nao negativo, n, e associao inteiro n como o identificador do OBDD o. Esta operacao tem valorindefinido.

Page 114: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

102 CAPITULO 2. LOGICA PROPOSICIONAL

O algoritmo reduz percorre, por nıveis, o grafo correspondente ao OBDDcomecando nas suas folhas. Ao percorrer o grafo, atribui um identificadora cada OBDD de tal modo que dois OBDDs o1 e o2 representam a mesmafbf se e so se os seus identificadores sao iguais, ou seja, se id(o1) = id(o2).

1. Num primeiro passo, o identificador 0 e atribuıdo a todos os OBDDsfolhas com o rotulo F e o identificador 1 e atribuıdo a todos osOBDDs folhas com o rotulo V . Este passo e realizado pelo algo-ritmo associa id a folhas! (Algoritmo 2.2).

2. A atribuicao de identificadores aos OBDDs do nıvel i e feita assumindoque o algoritmo ja atribuiu identificadores a todos os OBDDs do nıveli + 1.

Dado um OBDD, o:

(a) Se os seus sub-OBDDs positivo e negativo tem o mesmo iden-tificador (id(neg(o)) = id(pos(o))), entao e atribuıdo o mesmoidentificador ao OBDD o (id!(o, id(neg(o)))) pois a raiz de o efec-tua um teste redundante e pode ser removida pela transformacaoR2.

(b) Se, entre os OBDDs que ja tem identificadores, existe um OBDD,oId, tal que o e oId tem raızes com rotulos iguais e os seus OBDDspositivos e negativos tem os mesmos identificadores, ou seja, seas seguintes condicoes sao cumulativamente verificadas

raiz(o) = raiz(oId),

id(neg(o)) = id(neg(oId)) e

id(pos(o)) = id(pos(oId)),

entao o identificador de oId e atribuıdo ao OBDD o (id!(o, id(oId)))pois este OBDD corresponde a um OBDD redundante e pode serremovido pela transformacao R3.

(c) Em caso contrario, e atribuıdo um novo identificador ao OBDDo.

3. Apos a atribuicao de identificadores a todos os sub-OBDDs, o OBDDresultante e compactado recorrendo ao algoritmo compacta! (Algo-ritmo 2.4).

Page 115: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 103

Algoritmo 2.1 reduz(O)l a := nova lst ass()associa id a folhas!(folhas(O), l a)prox id := 2OBDDs com id := folhas(O)for i = profundidade max(O)5 1 to 0 with increment 51 do

N ıvel i := nıvel(O, i)repeat

o1 := escolhe(N ıvel i)if id(pos(o1)) = id(neg(o1)) then

id!(o1, id(neg(o1)))else

redundante? := Fverificados := OBDDs com idwhile ¬vazio?(verificados) and ¬redundante? do

o2 := escolhe(verificados)verificados := subtrai(o2, verificados)if (raiz(o1) = raiz(o2)) and (id(neg(o1)) = id(neg(o2))) and

(id(pos(o1)) = id(pos(o2))) thenredundante? := V

end ifend whileif redundante? then

id!(o1, id(o2))else

associa id!(o1, prox id, l a)prox id := prox id + 1

end ifOBDDs com id := junta(o1, OBDDs com id)

end ifN ıvel i := subtrai(o1, N ıvel i)

until vazio?(N ıvel i)end forreturn compacta!(conteudo(id(o), l a), l a)

Page 116: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

104 CAPITULO 2. LOGICA PROPOSICIONAL

Algoritmo 2.2 associa id a folhas!(F, l a)for all f in F do

if raiz(f) = V thenassocia id!(f, 1, l a)

elseassocia id!(f, 0, l a)

end ifend for

Algoritmo 2.3 associa id!(o, id, l a)id!(o, id)insere lst ass(id, o, l a)

Exemplo 2.3.22 (Algoritmo reduz) Consideremos o OBDD apresentadona Figura 2.22.

• O primeiro passo do algoritmo reduz corresponde a associacao de iden-tificadores aos nos com rotulos F e V . Na Figura 2.23 (a) mostram-se os identificadores associados as folhas correspondentes.

• Consideremos agora os OBDDs cujas raizes sao nos pertencentes aonıvel 2, indicados dentro de uma linha a tracejado na Figura 2.23 (b).Ambos os OBDDs tem uma raiz que corresponde ao sımbolo de pro-posicao R, calculando exactamente a mesma operacao logica, por estarazao, o mesmo identificador e atribuıdo a ambos os OBDDs. Note-seque atraves do Algoritmo 2.1, um destes OBDDs e escolhido arbi-trariamente, sendo-lhe atribuıdo o identificador 2. Quando o segundoOBDD e seleccionado, conclui-se que este OBDD e redundante, sendo-lhe atribuıdo o mesmo identificador.

• Considerando os OBDDs cujas raızes sao os nos ao nıvel 1 (indicadosdentro de uma linha a tracejado na Figura 2.24 (a)), embora as raızesdestes OBDDs correspondam ao mesmo sımbolo de proposicao, Q, oOBDD da direita efectua um teste redundante (ambos os seus arcosligam-se a OBDDs com o mesmo identificador), sendo-lhe atribuıdo oidentificador anterior, o OBDD da esquerda nao efectua nenhum testeredundante, pelo que lhe e atribuıdo um novo identificador.

• Finalmente, ao nıvel 0 apenas temos o OBDD com raiz correspondenteao sımbolo de proposicao P , ao qual e atribuıdo um novo identificador.

Page 117: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 105

P

R

F V

Q

R

F V

Q

Figura 2.22: OBDD antes da aplicacao do algoritmo reduz.

Figura 2.23: Atribuicao de identificadores.

Page 118: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

106 CAPITULO 2. LOGICA PROPOSICIONAL

Figura 2.24: Atribuicao de identificadores (parte 2).

O resultado da aplicacao do Algoritmo 2.1 e apresentado na Figura 2.24 (b).Note-se que como efeito secundario da execucao deste algoritmo, foi criadaa lista associativa apresentada na Figura 2.25. Para cada chave, esta listaassociativa contem o OBDD que deve aparecer no OBDD compactado cor-respondente a essa chave. Na Figura 2.25, as chaves sao apresentadas usandoos identificadores produzidos pelo Algoritmo 2.1 e um triangulo por baixode cada sımbolo de proposicao, que representa esquematicamente o OBDDsituado abaixo desse sımbolo de proposicao.`

O algoritmo “compacta!”. Consideremos agora o algoritmo compacta!(Algoritmo 2.4) que recebe um OBDD com identificadores associados e acorrespondente lista associativa, l a, e substitui cada sub-OBDD cujo iden-tificador e i pelo OBBD que se encontra associado a chave i da lista associ-ativa.

Este algoritmo e invocado pelo Algoritmo 2.1 tendo como argumentos o

Figura 2.25: Lista associativa com OBDDs.

Page 119: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 107

Algoritmo 2.4 compacta!(O, l a)if id(O) = 0 or id(O) = 1 then

return conteudo(id(O), l a)else

muda neg!(O, conteudo(id(neg(O)), l a))muda pos!(O, conteudo(id(pos(O)), l a))compacta!(neg(O), l a)compacta!(pos(O), l a)return O

end if

P

R

F V

Q

R

F V

Q

O1 O2O3 O4

O5 O6

O7O8

O9

Figura 2.26: Nomes dos OBDDs.

OBDD da lista associativa l a na posicao correspondente ao identificadoratribuıdo ao OBDD a reduzir, e a lista associativa l a.

Exemplo 2.3.23 (Algoritmo compacta!) Vamos seguir o funcionamentodo Algoritmo 2.4 com o argumento O correspondente ao OBDD da Fi-gura 2.24 (b) e a lista associativa l a correspondendo a lista representadana Figura 2.25. Na explicacao que se segue, usamos os nomes indicados naFigura 2.26 para nos referirmos aos varios OBDDs. O nome de cada OBDDencontra-se representado a esquerda da raiz de cada OBDD. Usando estesnomes, a lista associativa l a tem o conteudo que se apresenta na Figura 2.27.

A avaliacao de compacta!(O9, l a), origina as duas avaliacoes muda neg!(O9,O8)e muda pos!(O9,O6). Apos estas avaliacoes o OBDD O9 encontra-se como

Page 120: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

108 CAPITULO 2. LOGICA PROPOSICIONAL

24 3 1 0(( ))) ( ) ( ) ( ) (O9 O8 O6 O4 O2

Figura 2.27: Lista associativa com os nomes dos OBDDs.

P

R

F V

R

F V

Q

O1 O2O3 O4

O5 O6

O8

O9

Figura 2.28: Resultado da primeira compactacao.

se mostra na Figura 2.28.

A avaliacao de compacta!(O8, l a), origina a avaliacao de muda neg!(O8,O2) e de muda pos!(O8, O6). Apos estas avaliacoes o OBDD O9 encontra-se como se mostra na Figura 2.29. As restantes avaliacoes

compacta!(O2, l a),compacta!(O4, l a),compacta!(O6, l a),muda neg!(O6, O2),muda pos!(O6, O4),compacta!(O2, l a) ecompacta!(O4, l a)

nao alteram nada, pelo que o resultado final e o OBBD da Figura 2.29. `

O algoritmo “aplica”. Tendo um algoritmo que efectua as transforma-coes R1, R2 e R3 sobre um OBDD, produzindo o OBDD reduzido, vamosconcentrar a nossa atencao no algoritmo que recebe um operador logico, op,

Page 121: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 109

P

F V

R

Q

O2 O4

O6

O8

O9

Figura 2.29: Resultado da segunda compactacao.

e dois OBDDs reduzidos e compatıveis o! e o", correspondentes as fbfs ! e #e que devolve o OBDD reduzido correspondente a fbf (! op #). Note-se queeste aspecto ja foi considerado na pagina 91, tendo nos feito, separadamente,a analise para a operacao ¬ e para as operacoes ! e ".

Por uma questao de generalizacao e de uniformizacao, o algoritmo que apre-sentamos apenas considera operacoes binarias. Para desenvolver este al-goritmo vamos introduzir um novo sımbolo logico, a disjuncao exclusiva,representado por .33 (ver a discussao apresentada na Seccao 1.2), o qual edefinido pela seguinte tabela de verdade:

! # !. #V V FV F VF V VF F F

33Ao introduzir este sımbolo logico, devemos aumentar as nossas regras de formacao defbfs para contemplar a seguinte situacao: se ! e " sao fbfs entao !& " e uma fbf.

Page 122: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

110 CAPITULO 2. LOGICA PROPOSICIONAL

Algoritmo 2.5 aplica(op, o!, o")if folha(o!) and folha(o") then

return cria folha(raiz(o!) op raiz(o"))else

P := max pred(o!, o")if raiz(o!) = P and raiz(o") = P then

return cria OBDD reduzido(P,aplica(op, neg(o!), neg(o")),aplica(op, pos(o!), pos(o")))

else if raiz(o!) = P thenreturn cria OBDD reduzido(P,

aplica(op, neg(o!), o"),aplica(op, pos(o!), o"))

elsereturn cria OBDD reduzido(P,

aplica(op, o!, neg(o")),aplica(op, o!, neg(o")))

end ifend if

A disjuncao exclusiva permite-nos escrever a expressao

(¬!) ( (!. V ) (2.2)

na qual V corresponde ao valor verdadeiro. Note-se que (¬!) ( (!.V ) naoe uma fbf, pois a constante V nao pertence a linguagem LLP . No entanto,para qualquer sımbolo de proposicao P % P a fbf (¬!) ( (! . (P " ¬P ))e uma tautologia. E com base neste facto que introduzimos este abuso delinguagem.

O algoritmo aplica (Algoritmo 2.5) calcula o OBDD que resulta da aplicacaode uma operacao logica a dois OBDDs. A avaliacao de aplica(op, o!, o"),em que op e uma operacao logica binaria, devolve o OBDD correspondentea fbf ! op #. Dado que a aplicacao directa deste algoritmo pode originarOBDDs que nao estao na forma reduzida, definimos a operacao:

cria OBDD reduzido(r, o!, o") = reduz(cria OBDD(r, o!, o")) (2.3)

A intuicao subjacente ao Algoritmo 2.5 e a seguinte:

1. Se ambos os ODBBs corresponderem a folhas, aplica-se a operacao opaos correspondentes valores logicos.

Page 123: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 111

P

R

V F

P

Q

R

F V

(a) (b)

Figura 2.30: OBDDS correspondentes as fbfs ¬P ! ¬R e P " (Q !R).

2. Em caso contrario, escolhe-se o sımbolo de proposicao com maior pri-oridade existente em o! e o" (deixa-se como exercıcio a demonstracaoque este sımbolo de proposicao corresponde a raiz de pelo menos umdos OBDDs), e divide-se o problema em dois subproblemas num dosquais o sımbolo de proposicao e verdadeiro e no outro o sımbolo deproposicao e falso.

(a) Se o sımbolo de proposicao e a raiz de ambos os OBDDs, o OBDDresultante tera esse sımbolo de proposicao como raiz, o seu OBDDnegativo resulta de aplicar recursivamente o algoritmo aos corres-pondentes OBDDs negativos e analogamente para o seu OBDDpositivo.

(b) Em caso contrario, o OBDD resultante tera esse sımbolo de pro-posicao como raiz, o seu OBDD negativo resulta de aplicar recur-sivamente o algoritmo ao OBDD negativo do OBDD que contemo sımbolo de proposicao e o outro OBDD (que nao contem osımbolo de proposicao), e analogamente para o OBDD positivo.

Exemplo 2.3.24 (Algoritmo aplica) Consideremos os OBDDs compatı-veis apresentados na Figura 2.30, correspondentes as fbfs ¬P ! ¬R (Fi-gura 2.30 (a)) e P " (Q ! R) (Figura 2.30 (b)), os quais serao designados,respectivamente, por O¬P&¬R e OP'(Q&R). Estes OBDDs satisfazem a or-dem [P,Q,R].

Page 124: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

112 CAPITULO 2. LOGICA PROPOSICIONAL

P

R

V F

Q

R

F V

F V

Figura 2.31: OBDD com raiz P .

Vamos seguir a execucao de

aplica(!, O¬P&¬R, OP'(Q&R)). (2.4)

O sımbolo de proposicao com maior prioridade e P , sendo a raiz de ambosos OBDDs, pelo que o valor devolvido pelo algoritmo e

cria OBDD reduzido(P,aplica(!, neg(O¬P&¬R), neg(OP'(Q&R))),aplica(!, pos(O¬P&¬R), pos(OP'(Q&R))))

(2.5)O resultado desta aplicacao e um OBDD cuja raiz e P , resultando os seusOBDDs negativo e positivo de invocacoes do algoritmo aplica. Na Fi-gura 2.31 representa-se esquematicamente o resultado desta aplicacao, es-tando as invocacoes ao algoritmo aplica representadas dentro de rectangulos,representando-se a aplicacao do operador atraves de notacao infixa.

O resultado da aplicacao do algoritmo ao OBDD positivo da Figura 2.31 eF , correspondendo a aplicacao do operador as duas folhas.

No que respeita ao OBDD negativo da Figura 2.31, o sımbolo de proposicaocom maior prioridade, Q, apenas aparece num dos OBDDs, pelo que o

Page 125: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.3. O SISTEMA SEMANTICO 113

Q

R

V F

R

F V

F

R

V F

Figura 2.32: OBDD com raiz Q.

OBDD resultante, com raiz Q, esta representado esquematicamente na Fi-gura 2.32, originando duas invocacoes ao algoritmo aplica.

Expandindo o OBDD negativo da Figura 2.32, podemos concluir que tantoo OBDD negativo como o positivo correspondem a F . E importante no-tar que esta conclusao ja poderia ter sido obtida atraves da analise da Fi-gura 2.32. Com efeito, sendo falso o valor absorvente da conjuncao, o resul-tado da conjuncao de qualquer OBDD com F tera F como resultado. Umraciocıno semelhante pode ser feito para o elemento neutro da conjuncao.Portanto, para qualquer OBDD, o, verificam-se as seguintes igualdades:

aplica(!, o, F ) = F (2.6)

aplica(!, o, V ) = o (2.7)

Expandindo o OBDD positivo da Figura 2.32, obtemos um OBDD cujo valore F .

Considerando o OBDD positivo da Figura 2.32, este resultado era expectavelpois este corresponde a conjuncao de duas fbfs em que uma e a negacao daoutra.

Compilando os resultados das avaliacoes parciais, concluımos que o OBDDresultante da aplicacao 2.4 e F , o que significa que a fbf (¬P !¬R)! (P "(Q !R)) e contraditoria. `

Page 126: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

114 CAPITULO 2. LOGICA PROPOSICIONAL

2.4 Solidez e completude da logica proposicional

Nesta seccao apresentamos alguns resultados fundamentais em relacao alogica proposicional, nomeadamente a solidez e a completude do formalismoapresentado ao longo deste capıtulo.

Com a demonstracao da solidez mostramos que as nossas regras de inferenciaestao correctas, no sentido em que se existir uma prova de # a partir de !1,. . ., !k, entao para qualquer interpretacao que torne todas as fbfs !1, . . .,!k verdadeiras, esta interpretacao tambem torna a fbf # verdadeira.

Na prova da solidez utilizamos um processo de demonstracao a que se da onome de inducao matematica (completa). A inducao matematica e utilizadapara demonstrar que uma propriedade P definida no conjunto dos numerosnaturais e verdadeira para todos eles. Na nossa demonstracao, os numerosnaturais que consideramos correspondem ao comprimento de uma prova, ouseja o numero de linhas da prova.

Uma demonstracao por inducao matematica tem duas partes. A primeira,aborda o caso do primeiro numero natural, mostrando que a propriedade severifica para 1. Esta parte e conhecida como base da inducao. A segundaparte tem a forma de uma implicacao na qual no antecedente se assumeque dado um inteiro arbitrario, n, a propriedade P se verifica para todos osinteiros menores ou iguais a n, e o consequente afirma que a propriedade Pse verifica para o inteiro n + 1. Esta parte tem o nome de hipotese indutiva.O resultado da inducao matematica e a afirmacao que a propriedade P severifica para todos os inteiros.

Teorema 2.4.1 (Solidez) A logica proposicional e solida. Para quaisquerfbfs !1, . . ., !k e #, se {!1, . . ., !k} & # entao {!1, . . ., !k} |= #.

Demonstracao: Na nossa demonstracao apenas consideramos as regras de in-ferencia de base (as regras de inferencia apresentadas entre as paginas 32e 44), uma vez que as outras, os teoremas e as regras de inferencia deri-vadas, correspondem a simplificacoes sintacticas da utilizacao das regras deinferencia de base.

1. Base da inducao.Utilizando apenas as regras de inferencia de base, qualquer prova comapenas uma linha deve ter a forma:

1 ! Prem

Page 127: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.4. SOLIDEZ E COMPLETUDE DA LOGICA PROPOSICIONAL 115

Da Definicao 2.2.2 e evidente que {!} & !. Por razoes obvias {!} |= !,pelo que a propriedade da solidez se verifica para qualquer prova apenascom uma linha.

2. Hipotese indutivaSuponhamos, como hipotse indutiva, que para qualquer prova com nou menos linhas, estabelecendo que {!1, . . ., !k} & #, se verifica que{!1, . . ., !k} |= #.Iremos demonstrar, assumindo esta hipotese, que o mesmo resultadose verifica para qualquer prova com, no maximo, n + 1 linhas. Parademonstrar este resultado, iremos considerar exaustivamente as pos-sibilidades de estender uma prova de n linhas para uma prova comn + 1 linhas, considerando, individualmente, cada uma das regras deinferencia.

Prem Suponhamos que estendıamos a prova adicionando a linha con-tendo a premissa !k+1. Esta nova prova mostra que {!1, . . ., !k,!k+1} & !k+1. Dado que !k+1 % {!1, . . ., !k, !k+1}, e impossıvelter todas as premissas verdadeiras e a conclusao falsa, pelo que{!1, . . ., !k, !k+1} |= !k+1.

Rep Para estender a prova {!1, . . ., !k} & #, usando a regra da repeticaoiremos adicionar uma linha contendo uma fbf $ que ja existe naprova. Esta nova prova demonstra que {!1, . . ., !k} & $.Como a fbf $ ja existia na prova inicial, entao {!1, . . ., !k} &$, tendo esta prova no maximo n linhas. Pela hipotese indutiva,podemos concluir que {!1, . . ., !k} |= $.

I! Para estender a prova {!1, . . ., !k} & #, usando a regra da I!teremos que introduzir a fbf $ ! %, a qual obriga a que tanto $como % existam em linhas da prova em consideracao. Isto significaque as provas {!1, . . ., !k} & $ e {!1, . . ., !k} & % estao contidas naprova inicial, tendo cada uma destas provas no maximo n linhas.34Pela hipotese indutiva podemos concluir que {!1, . . ., !k} |= $e que {!1, . . ., !k} |= %. Por definicao de consequencia logica,sempre que {!1, . . ., !k} forem verdadeiras tanto $ como % seraoverdadeiras. Podemos assim concluir que {!1, . . ., !k} |= $ ! %.

E! Para estender a prova {!1, . . ., !k} & #, usando a regra da E!teremos que introduzir uma das fbfs $ ou % a partir da fbf $ ! %.Para isso podemos considerar duas possibilidades:(a) A fbf # e da forma $!%. Adicionando a prova original uma nova

linha contendo a fbf $, obtemos uma prova com no maximon + 1 linhas. Tendo em atencao que {!1, . . ., !k} |= $ ! %(= #), e facil concluir que e impossıvel ter todas as premissas

34Note-se que estas provas poderao ser obtidas com menos premissas, mas isso nao erelevante para a nossa demonstracao.

Page 128: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

116 CAPITULO 2. LOGICA PROPOSICIONAL

!1, . . ., !k verdadeiras e $ falsa, pelo que {!1, . . ., !k} |= $.Um raciocınio analogo pode ser estabelecido em relacao a fbf %.

(b) Uma das linhas da prova {!1 . . . !k} & #, que nao a ultima,e da forma $ ! %. Consideremos a derivacao original ate essalinha. Esta derivacao mostra que {!1, . . ., !k} & $ ! %. Comoesta derivacao tem n ou menos linhas, pela hipotese indutiva, eimpossıvel que as premissas !1, . . ., !k sejam todas verdadeirase a fbf $ ! % seja falsa. Podemos agora aplicar um raciocınioanalogo ao da alınea anterior.

I# Para adicionar uma linha utilizando a regra da I#, na prova {!1,. . ., !k} & # existe uma subprova iniciada com a hipotese ! e cujaultima linha e a fbf $. A regra da I# permite-nos escrever naproxima linha a fbf ! # $.Consideremos uma prova alternativa contendo as hipoteses !1, . . .,!k e !. E obvio que nesta prova podemos derivar a fbf $, tendo estanova prova no maximo n linhas. Pela hipotese indutiva podemosconcluir que {!1, . . ., !k, !} |= $.Consideremos entao a prova {!1, . . ., !k} & ! # $. Suponhamos,por absurdo, que existe uma situacao que torna todas as premissas!1, . . ., !k verdadeiras e a conclusao ! # $ falsa. Se a fbf ! # $ efalsa, entao a fbf ! e verdadeira e a fbf $ e falsa, o que contradiz ahipotese indutiva de que {!1, . . ., !k, !} |= $. Logo, {!1, . . ., !k}|= ! # $

E# Para estender a prova {!1, . . ., !k} & #, utilizando a regra da E#tem que existir nessa prova uma linha contendo a fbf ! # # e umalinha contendo a fbf !. Neste caso, tanto {!1, . . ., !k} & ! # #como {!1, . . ., !k} & !, tendo cada uma destas provas no maximon linhas. Pela hipotese indutiva podemos concluir que tanto {!1,. . ., !k} |= ! # # como {!1, . . ., !k} |= !.Utilizando a regra da E# estabelecemos a prova {!1, . . ., !k} &#. No caso de todas as premissas serem verdadeiras, tanto ! # #com ! sao verdadeiras. Pela definicao de implicacao, tambem #sera verdadeira, pelo que {!1, . . ., !k} |= #.

I¬ Para adicionar uma linha a prova {!1, . . ., !k} & #, recorrendo aregra da I¬, na prova existe uma subprova iniciada com a hipotese! e cujas linhas contem as fbfs $ e ¬$. A regra da I¬ permite-nosescrever na proxima linha a fbf ¬!.Utilizando um raciocınio semelhante ao aplicado no caso da I#,podemos concluir que {!1, . . ., !k, !} |= $ e tambem que {!1, . . .,!k, !} |= ¬$.Consideremos entao a prova {!1, . . ., !k} & ¬!. Sera que e possıvelque todas as fbfs {!1, . . ., !k} sejam verdadeiras e a fbf ¬! sejafalsa? Para isso, todas as fbfs {!1, . . ., !k} terao que ser verda-deiras e a fbf ! tambem sera verdadeira. Nestas condicoes, e pela

Page 129: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.4. SOLIDEZ E COMPLETUDE DA LOGICA PROPOSICIONAL 117

hipotese indutiva, sabemos que tanto $ como ¬$ sao verdadeiras,o que e uma contradicao. Pelo que {!1, . . ., !k} |= ¬!.

E¬ Para adicionar uma linha a prova {!1, . . ., !k} & #, utilizando aregra da E¬, significa que na prova existe uma linha com a fbf ¬¬!.Como esta linha exite na prova podemos concluir que que {!1, . . .,!k} & ¬¬!, tendo esta prova no maximo n linhas. Pela hipoteseindutiva, podemos concluir que {!1, . . ., !k} |= ¬¬!. Pela de-finicao da negacao, podemos tambem concluir que {!1, . . ., !k} |=!.Entao, adicionando a linha com a fbf ! verifica-se que {!1, . . ., !k}& ! o que obriga que {!1, . . ., !k} |= !.

I" Para estender a prova {!1, . . ., !k} & #, usando a regra da I"iremos adicionar uma linha contendo a fbf $ " % em que ou $ ou %ja existem na prova. Consideremos cada um destes casos:(a) Suponhamos que a fbf $ ja existe na prova. Isto significa que

{!1, . . ., !k} & $, tendo esta prova n ou menos linhas. Pelahipotese indutiva {!1, . . ., !k} |= $.Introduzindo a linha com a fbf $ " % obtemos a prova {!1, . . .,!k} & $ " %. Pela hipotese indutiva, sabemos que se todas asfbfs !1, . . ., !k forem verdadeiras entao a fbf $ e verdadeira.Pela definicao da disjuncao, a fbf $"% tambem sera verdadeirapelo que {!1, . . ., !k} |= $ " %.

(b) Suponhamos que a fbf % ja existe na prova. O raciocınio esemelhante ao da alınea anterior.

E" Para estender a prova {!1, . . ., !k} & #, usando a regra da E"iremos adicionar uma linha contendo a fbf $, partindo da existenciade uma linha com a fbf ' " % e de duas subprovas, uma iniciadacom a hipotese ' e tendo $ como ultima linha e a outra iniciadacom a hipotese % e tendo $ como ultima linha.Consideremos as seguintes situacoes:(a) Como a linha contendo a fbf ' " % existe na prova original

podemos concluir que {!1, . . ., !k} & ' " %, tendo esta provan ou menos linhas. Pela hipotese indutiva, {!1, . . ., !k} |=' " %.

(b) Como na prova original existe uma subprova iniciada com ahipotese ' e tendo $ como ultima linha, usando um raciocıniosemelhante ao apresentado para a regra da I# podemos con-cluir que {!1, . . ., !k, '} & $, tendo esta prova n ou menoslinhas. Pela hipotese indutiva entao {!1, . . ., !k, '} |= $.

(c) Usando um raciocınio analogo ao da alınea anterior, podemostambem concluir que {!1, . . ., !k, %} |= $.

Vejamos entao se sera possıvel encontrar uma situacao em que asfbfs !1, . . ., !k sao todas verdadeiras e a fbf $ e falsa. Pela alınea(a), se as fbfs !1, . . ., !k sao todas verdadeiras entao a fbf ' "

Page 130: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

118 CAPITULO 2. LOGICA PROPOSICIONAL

% tambem e verdadeira. Neste caso, pela tabela da verdade dadisjuncao, pelo menos uma das fbfs ' ou % tera que ser verdadeira.Supondo que a fbf ' e verdadeira, a alınea (b) garante-nos que $ everdadeira. Por outro lado, supondo que % e verdadeira, o mesmoresultado e garantido pela alınea (c). Logo $ e verdadeira pelo que{!1, . . ., !k} |= $.

Mostramos que se para qualquer prova com n ou menos linhas de # a partirde !1, . . ., !k se verifica que {!1, . . ., !k} |= #, entao qualquer prova comn+1 linhas corresponde a tambem a um argumento valido. Isto permite-nosconcluir que para qualquer prova {!1, . . ., !k} & # se verifica que {!1, . . .,!k} |= #, ou seja, que a logica e solida. "

Para demonstrar a completude precisamos de introduzir alguns conceitos,ao nıvel do sistema dedutivo, nomeadamente o conceito de conjunto de fbfsmaximamente consistente.

Definicao 2.4.1 (Conjunto consistente) Um conjunto ! de fbfs e con-sistente se e so se para nenhuma fbf ! se verifica que ! & (! ! ¬!).

Definicao 2.4.2 (Conjunto inconsistente) Um conjunto ! de fbfs e in-consistente se e so se para alguma fbf ! se verifica que ! & (! ! ¬!).

Definicao 2.4.3 (Conjunto maximamente consistente) Um conjunto! de fbfs e maximamente consistente se e so se as duas condicoes seguintesse verificam:

1. Para nenhuma fbf ! se verifica que ! & (! ! ¬!);

2. Para qualquer fbf !, ou ! pertence a ! ou (exclusivo) ¬! pertence a!. !

Informalmente, um conjunto maximamente consistente e um conjunto defbfs que e tao grande quanto pode ser, sem ser inconsistente (ou seja semconter simultaneamente as fbfs ! e ¬!). Sendo ! um conjunto maxima-mente consistente, nao lhe podemos adicionar nenhuma fbf sem originar umconjunto inconsistente. Na realidade, suponhamos que tentamos adicionara ! a fbf !. Podemos considerar 2 possibilidades (1) ! % !, neste casoo resultado da adicao e o proprio !; ou (2) ! 6% !, mas neste caso, pelasegunda condicao da Definicao 2.4.3, ¬! % ! pelo que a adicao de ! geraraum conjunto inconsistente.

Page 131: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.4. SOLIDEZ E COMPLETUDE DA LOGICA PROPOSICIONAL 119

Teorema 2.4.2 Qualquer conjunto consistente de fbfs pode ser estendidopara um conjunto maximamente consistente.

Demonstracao: Recordemos da pagina 29 que cada sımbolo de proposicao eindexado por um inteiro positivo. Esta indexacao, juntamente com as regrasde formacao de fbfs apresentadas na pagina 29 permitem definir uma relacaode ordem total sobre todas as fbfs. Designamos a sequencia ordenada detodas as fbfs por [#1, #2. . . .].Seja ! um conjunto consistente de fbfs. Tendo em atencao a relacao deordem total definida sobre as fbfs, definimos a seguinte sequencia infinita deconjuntos de fbfs:

!0 = !

!1 =#

!0 ' {#1} se !0 ' {#1} e consistente!0 ' {¬#1} em caso contrario

...

!n+1 =#

!n ' {#n+1} se !n ' {#n+1} e consistente!n ' {¬#n+1} em caso contrario

...

Como !0 e consistente, por construcao, e se !n for consistente entao !n+1

e consistente, por inducao matematica, podemos concluir que para todo o n,!n e consistente.Seja

!! =!"

i=0

!i.

Demonstramos agora que este conjunto e maximamente consistente, ou seja,(1) para nenhuma fbf ! se verifica que !! & (! ! ¬!) e (2) para qualquerfbf !, ou ! pertence a !! ou ¬! pertence a !!.Suponhamos por absurdo que !! nao e maximamente consistente. Nestecaso, uma das condicoes (1) ou (2) e falsa.

1. Suponhamos que a condicao (1) e falsa. Neste caso existe uma fbf !tal que !! & (! ! ¬!). Consideremos a prova de ! ! ¬! e seja #m

a fbf com o ındice mais alto que e utilizada na prova. Recorde-se daDefinicao 2.2.1 que uma prova e uma sequencia finita de linhas, peloque existira nessa prova um #m. Entao !m & (!!¬!), o que contradiza condicao que cada um dos elementos da sequencia [!0, !1, . . .] econsistente.

2. Suponhamos que a condicao (2) e falsa. Neste caso, existe uma fbf !tal que ! 6% !! e ¬! 6% !!. Seja m o ındice da fbf ! na sequencia[#1, #2. . . .], ou seja, ! = #m. A construcao do conjunto !m obriga aque ou ! ou ¬! pertencam a !m, o que contradiz a nossa hipotese.

Page 132: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

120 CAPITULO 2. LOGICA PROPOSICIONAL

Portanto, !! e maximamente consistente. "

Teorema 2.4.3 Qualquer conjunto maximamente consistente tem um mo-delo, ou seja, existe uma interpretacao que satisfaz todas as fbfs do conjunto.

Demonstracao: Seja ! um conjunto maximamente consistente. Iremos conside-rar uma interpretacao que satisfaz todas as fbfs em !.A prova da existencia desta interpretacao sera realizada por inducao ma-tematica com base no numero de sımbolos logicos que existem numa fbf em!. Mostramos, como base da inducao, que a interpretacao satisfaz todasas fbfs com zero sımbolos logicos, ou seja todas as fbfs correspondentes asımbolos de proposicao. Assumimos como hipotese indutiva que uma fbf !com n ou menos sımbolos logicos e satisfeita pela interpretacao se e so se! % ! e mostramos que daqui resulta que qualquer fbf # com n + 1 sımboloslogicos e verdadeira se e so se # % !.

1. Base da inducao.Seja ! uma fbf com zero sımbolos logicos (! % P). Entao, se ! %!, consideramos a valoracao v(!) = V ; e se ! 6% !, consideramos avaloracao v(!) = F . A interpretacao satisfaz ! se e so se ! % !.

2. Hipotese indutiva.Suponhamos que qualquer fbf ! com n ou menos sımbolos logicos esatisfeita pela interpretacao se e so se ! % !. Consideremos as possibi-lidades para construir uma fbf com n + 1 sımbolos logicos:35

(a) A fbf com n+1 sımbolos logicos e da forma ¬!. Entao a fbf ! temn sımbolos logicos.Queremos mostrar que ¬! e satisfeita pela interpretacao se e sose ¬! % !. Para isso, teremos que mostrar que se ¬! e satisfeitapela interpretacao entao ¬! % ! (esta prova e assinalada com *)e teremos que mostrar que se ¬! % !, entao ¬! e satisfeita pelainterpretacao (esta prova e assinalada com 8).* Se ¬! e satisfeita pela interpretacao entao ¬! % !.

Suponhamos que ¬! e satisfeita pela interpretacao. Pela ta-bela de verdade para a negacao, sabemos que ! nao e satisfeitapela interpretacao, o que significa que ! 6% !. Como ! e ma-ximamente consistente, ¬! % !.

8 Se ¬! % !, entao ¬! e satisfeita pela interpretacao.Suponhamos que ¬! % !. Como ! e maximamente consis-tente, ! 6% !, o que juntamente com a hipotese indutiva nospermite concluir que ! nao e satisfeita pela interpretacao. Pelatabela de verdade da negacao, concluimos que ¬! e satisfeitapela interpretacao, ou seja ¬! e verdadeira.

35Nao estamos a considerar o caso da equivalencia, pois esta e tratada como uma com-binacao dos outros sımbolos logicos.

Page 133: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.4. SOLIDEZ E COMPLETUDE DA LOGICA PROPOSICIONAL 121

Portanto ¬! e verdadeira se e so se ¬! % !.(b) A fbf com n+1 sımbolos logicos e da forma !!#. Podemos garantir

que tanto ! como # tem, no maximo, n sımbolos logicos.Queremos mostrar que !! # e satisfeita pela interpretacao se e sose (! ! #) % !.* Se ! ! # e satisfeita pela interpretacao entao (! ! #) % !.

Suponhamos que ! ! # e satisfeita pela interpretacao. Sabe-mos pela tabela de verdade da conjuncao que ! e verdadeira e# e verdadeira. Uma vez que ! e # tem no maximo n sımboloslogicos, pela hipotese indutiva, ! % ! e # % !. Suponhamospor absurdo que (! ! #) 6% !. Como ! e maximamente con-sistente ¬(!! #) % !, pelo que ! & ¬(!! #). Por outro lado,como ! % !, # % ! e como {!,#} & (! ! #), ! & (! ! #).O que e uma contradicao, pelo que teremos que abandonar ahipotese de (! ! #) 6% !, logo (! ! #) % !.

8 Se (! ! #) % !, entao ! ! # e satisfeita pela interpretacao.Suponhamos que (! ! #) % !. Suponhamos por absurdo que! ! # e falsa. Pela tabela de verdade da conjuncao, sabemosque ! e falsa ou que # e falsa.i Suponhamos que ! e falsa. Pela hipotese indutiva, ! 6% !.

Como (! ! #) % !, sabemos que ! e verdadeira, o quecontradiz a suposicao que ! e falsa.

ii Suponhamos que # e falsa. O raciocınio e analogo ao docaso anterior.

Portanto ! ! # e verdadeira.Portanto ! ! # e verdadeira se e so se (! ! #) % !.

(c) A fbf com n+1 sımbolos logicos e da forma !"#. Podemos garantirque tanto ! como # tem, no maximo, n sımbolos logicos.Queremos mostrar que !" # e satisfeita pela interpretacao se e sose (! " #) % !.* Se ! " # e satisfeita pela interpretacao entao (! " #) % !.

Suponhamos que !"# e satisfeita pela interpretacao. Sabemospela tabela de verdade da disjuncao que ! e verdadeira ou que# e verdadeira.i Suponhamos que ! e verdadeira. Uma vez que ! tem no

maximo n sımbolos logicos, pela hipotese indutiva, ! % !.Suponhamos agora, por absurdo, que (! " #) 6% !. Como! e maximamente consistente, ¬(! " #) % !, pelo que ! &¬(!"#). Como ! % ! e {!} & (!"#), ! & (!"#) o que euma contradicao visto ! ser consistente. Pelo que teremosque abandonar a hipotese de (! " #) 6% ! e concluir que(! " #) % !.

ii Suponhamos que # e verdadeira. Um raciocınio analogo aoda alınea anterior leva-nos a concluir que (! " #) % !.

Page 134: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

122 CAPITULO 2. LOGICA PROPOSICIONAL

Portanto, se !"# e satisfeita pela interpretacao entao (!"#) %!.

8 Se (! " #) % !, entao ! " # e satisfeita pela interpretacao.Suponhamos que (! " #) % !. Suponhamos por absurdo que! " # e falsa. Pela tabela de verdade da disjuncao, sabemosque ! e falsa e que # e falsa. Uma vez que tanto ! como# tem no maximo n sımbolos logicos, pela hipotese indutiva,! 6% ! e # 6% !. Como ! e maximamente consistente ¬! % !e ¬# % !.Dado que {¬!,¬#} & ¬(! " #), tambem ! & ¬(! " #), o quecontradiz o facto de ! ser consistente. Portanto, teremos queabandonar o pressuposto que !"# e falsa e concluir que !"#e verdadeira.Portanto, se (! " #) % !, entao ! " # e satisfeita pela inter-pretacao.

Portanto ! " # e verdadeira se e so se (! " #) % !.(d) A fbf com n + 1 sımbolos logicos e da forma ! # #. Podemos

garantir que tanto ! como # tem, no maximo, n sımbolos logicos.Queremos mostrar que ! # # e satisfeita pela interpretacao se eso se (! # #) % !.* Se ! # # e satisfeita pela interpretacao entao (! # #) % !.

Suponhamos que ! # # e satisfeita pela interpretacao. Sabe-mos pela tabela de verdade da implicacao que ! e falsa ou #e verdadeira. Uma vez que ! e # tem no maximo n sımboloslogicos, pela hipotese indutiva, ! 6% ! ou # % !. Iremosconsiderar duas alternativas:i Suponhamos que ! 6% !. Como ! e maximamente consis-

tente, sabemos que ¬! % !. Sabemos tambem que {¬!} &(! # #).Suponhamos que (! # #) 6% !. Como ! e maximamenteconsistente, sabemos que ¬(! # #) % !, pelo que ! &¬(! # #). Logo ! e inconsistente. Rejeitamos a suposicaoque (! # #) 6% ! e concluımos que (! # #) % !

ii Consideremos que # % !. Como consequencia desta su-posicao, {#} & (! # #).Suponhamos que (! # #) 6% !. Como ! e maximamenteconsistente, sabemos que ¬(! # #) % !, pelo que ! &¬(! # #). Logo ! e inconsistente. Rejeitamos a suposicaoque (! # #) 6% ! e concluımos que (! # #) % !.

Portanto (! # #) % !.8 Se (! # #) % !, entao ! # # e satisfeita pela interpretacao.

Suponhamos que (! # #) % !. Suponhamos por absurdo que! # # e falsa. Pela tabela de verdade da implicacao, sabemosque ! e verdadeira e # e falsa. Uma vez que ! e # tem no

Page 135: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.4. SOLIDEZ E COMPLETUDE DA LOGICA PROPOSICIONAL 123

maximo n sımbolos logicos, pela hipotese indutiva, ! % ! e# 6% !. Uma vez que {!,! # #} & #, podemos concluir que# % !, o que contradiz o facto de ! ser consistente. Portanto,temos que abandonar a hipotese de ! # # ser falsa e concluirque ! # # e verdadeira.

Portanto, ! # # e satisfeita pela interpretacao se e so se (! ##) % !.

"

Teorema 2.4.4 Para qualquer fbf !, se |= ! entao & !.

Demonstracao: Seja % o conjunto de todos os teoremas (% = Th({})). Supo-nhamos por absurdo que existe uma fbf ! que e uma tautologia (|= !) e quenao e um teorema (! 6% %).Uma vez que ! nao e um teorema, o conjunto % ' {¬!} nao e inconsis-tente. Note-se que se % ' {¬!} fosse inconsistente, poderıamos derivar ¬¬!e consequentemente ! o que contradiz o facto de ! nao ser um teorema.Seja %! um conjunto maximamente consistente originado a partir de % '{¬!}. Pelo Teorema 2.4.2, este conjunto existe.Pelo Teorema 2.4.3, existe um modelo para %!. Isto significa que existe umainterpretacao que satisfaz todas as fbfs de %!, incluindo ¬!. Contudo, se¬! for verdadeira, entao ! e falsa, o que contradiz a nossa suposicao que !e uma tautologia. Portanto ! e um teorema. "

Teorema 2.4.5 Se {!1, . . . ,!n%1, !n} |= #, entao {!1, . . . , !n%1} |= (!n ##).

Demonstracao: Suponhamos que {!1, . . . ,!n"1, !n} |= #. Isto significa que setodas as fbfs !1, . . . ,!n"1, !n forem verdadeiras entao a fbf # e verdadeira.Consideremos agora a expressao {!1, . . . , !n"1} |= (!n # #) e vejamosse e possıvel conceber uma situacao em que as premissas sao verdadeiras e!n # # e falsa. Para isso, !n tera que ser verdadeira e # falsa, o que nao epossıvel uma vez que quando todas as fbfs !1, . . . ,!n"1, !n forem verdadeirasa fbf # tambem e verdadeira. Entao {!1, . . . , !n"1} |= (!n # #). "

Teorema 2.4.6 Se {!1, . . . ,!n} |= #, entao |= (!1 # (. . . (!n # #) . . .)).

Demonstracao: Esta prova corresponde a n aplicacoes do Teorema 2.4.5. "

Teorema 2.4.7 (Completude) A logica proposicional e completa. Paraquaisquer fbfs !1 . . . !n, #, se {!1, . . ., !n} |= # entao {!1, . . ., !n} & #.

Page 136: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

124 CAPITULO 2. LOGICA PROPOSICIONAL

Demonstracao: Suponhamos que {!1, . . ., !n} |= #. Pelo Teorema 2.4.6, sabe-mos que |= (!1 # (. . . (!n # #) . . .)). Pelo Teorema 2.4.4, sabemos que& (!1 # (. . . (!n # #) . . .)). Atraves de n aplicacoes do Teorema 2.2.3,podemos concluir que {!1 . . . !n} & #. "

Teorema 2.4.8 (Solidez da resolucao) Se existe uma demonstracao porresolucao da clausula $ a partir das clausulas !, entao ! |= $.

Teorema 2.4.9 (Completude da resolucao) Se ! e um conjunto naosatisfazıvel de clausulas, entao existe uma demonstracao por resolucao de{} a partir de !.

2.5 Notas bibliograficas

O conceito de linguagem formal foi introduzido em 1897 por Gottlob Fregue(1848–1925). Uma re-edicao do artigo original pode ser encontrada em [vanHeijenhoort 67]).

Os sistemas de deducao natural tem as suas origens nos trabalhos de GerhardGentzen (1909–1945) (originalmente publicado em 1934 e re-editado em[Gentzen 69]) e de Stanislaw Jaskowski (1906–1965) [Jaskowski 34]. Umaboa apresentacao de uma alternativa aos sistemas de deducao natural, ossistemas axiomaticos, pode ser consultada em [Mendelson 87].

A semantica da logica proposicional foi introduzida em 1854 por George Bo-ole (1815–1864) [Boole 54]. A metodologia que apresentamos para calcularo valor logico de uma proposicao foi introduzida em 1936 por Alfred Tarski.Uma re-edicao do artigo original de Tarski aparece em [Corcoran 83].

O princıpio da resolucao foi introduzido por John Alan Robinson em 1965[Robinson 65]. Entre os textos que apresentam o princıpio da resolucao,recomendamos a leitura de [Gabbay, Hogger e Robinson 93].

2.6 Exercıcios

1. Usando as regras do sistema de deducao natural, demonstre os seguin-tes teoremas:

(a) Lei da dupla negacao¬¬P ( P

Page 137: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.6. EXERCICIOS 125

(b) Primeiras leis de De Morgan¬(P "Q) ( (¬P ! ¬Q)¬(P !Q) ( (¬P " ¬Q)

(c) Lei do contrapositivo(P # Q) ( (¬Q # ¬P )

(d) Leis do silogismo(Q # R) # ((P # Q) # (P # R))(P # Q) # ((Q # R) # (P # R))

(e) Lei do transporte(P # (Q # R)) ( ((P !Q) # R)

(f) Equivalencia entre a implicacao e a disjuncao(P # Q) ( (¬P "Q)

(g) Propriedade distributiva da disjuncao em relacao a conjuncao(P " (Q !R)) ( ((P "Q) ! (P "R))

(h) Propriedade distributiva da conjuncao em relacao a disjuncao(P ! (Q "R)) ( ((P !Q) " (P !R))

2. Usando as regras do sistema de deducao natural, demonstre os seguin-tes teoremas:

(a) (P # (Q # R)) # ((P # Q) # (P # R))

(b) ((P # Q) ! ¬Q) # ¬P

(c) (P !Q) # ¬(P # ¬Q)

3. Usando o sistema de deducao natural da logica de primeira ordem,prove os seguintes argumentos:

(a) ({}, (¬P " ¬Q) # ¬(P !Q))

(b) ({(P # (P # Q)) ! P}, Q)

(c) ({¬P # ¬Q}, Q # P )

(d) ({(P # Q) ! (Q # R)}, P # R}(e) ({P ! ¬P}, Q)

(f) ({P # ¬P},¬P )

(g) ({P}, Q # (P !Q))

4. Transforme as seguintes fbfs em forma clausal:

Page 138: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

126 CAPITULO 2. LOGICA PROPOSICIONAL

(a) ¬(P !Q ! ¬R)

(b) P # (¬Q ! ¬R)

(c) (P !Q) # ¬(P # ¬Q)

(d) (P # ¬(Q " ((R ! S) # P )))

(e) P ( (¬Q ! ¬R)

5. Utilizando o princıpio da resolucao demonstre:

(a) {(P "Q), ¬P} & Q

(b) {¬P "Q} & ¬(P ! ¬Q)

(c) {¬(P ! ¬Q)} & P # Q

(d) {P "Q} & ¬(¬P ! ¬Q)

(e) {¬(¬P ! ¬Q)} & (P "Q)

6. Utilizando o princıpio da resolucao, demonstre por refutacao os se-guintes argumentos:

(a) ({(P # (P # Q)) ! P}, Q)

(b) ({¬P # ¬Q}, Q # P )

(c) ({(P # Q) ! (Q # R)}, P # R}(d) ({P ! ¬P}, Q)

(e) ({P # ¬P},¬P )

(f) ({P}, Q # (P !Q))

(g) {(P !Q) # R,P # Q} & P # R

7. Produza uma demonstracao por refutacao para os seguintes conjuntosde clausulas:

(a) {{¬P,Q, S}, {¬Q,S, P}, {¬S, R}, {¬S, P}, {Q,¬R}, {¬P,¬Q}}(b) {{P,Q,R}, {P,Q,¬R}, {P,¬Q}, {¬P,¬R}, {¬P,R}}

8. Produza uma demonstracao por refutacao para

{{¬P,Q}, {¬Q,R}, {¬R,S}, {P}} & {S}

usando a estrategia de resolucao linear e {¬S} como clausula central.

Page 139: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.6. EXERCICIOS 127

9. Suponha que se podem produzir as seguintes reaccoes quımicas:36

MgO + H2 # Mg + H2O

C + O2 # CO2

CO2 + H2O # H2CO3.

Utilizando o princıpio da resolucao, mostre que a partir de MgO, H2,C e O2 e possıvel produzir H2CO3.

10. Utilizando o princıpio da resolucao mostre que e possıvel gerar umacontradicao a partir dos seguintes conjuntos:

(a) {¬P "Q"S, P "¬Q"S,¬S"R,¬S"P, P "Q,¬R"Q,¬P "¬Q}(b) {¬P "Q,¬Q "R,¬R " P, P "R,¬P " ¬R}(c) {P "Q "R,P "Q " ¬R,P " ¬Q,¬P " ¬R,¬P "R}

11. Considere as seguntes fbfs

(a) (P # Q) # (P !Q)(b) (P !Q) # (P " ¬Q)

Classifique-as como satisfazıveis, falsificaveis, tautologicas ou contra-ditorias.

12. Considere o seguinte conjunto de fbfs:

{P " (Q "R),¬P # ¬(Q "R), Q # ¬(R " P )}

(a) Defina o que entende por modelo de um conjunto de fbfs e digaquais os modelos do conjunto apresentado.

(b) A fbf P ! ¬Q e consequencia logica do conjunto? Porque?

13. Considere o seguinte conjunto de fbfs:

! = {(P "Q) # R,¬R " S,¬P}.

(a) Mostre, pela via semantica, que a fbf S nao e consequencia logicado conjunto !.

(b) Se acrescentasse a fbf Q ao conjunto !, sera que a fbf S passariaa ser uma das suas consequencias logicas? Justifique.

36Exemplo de [Chang e Lee 73, pagina 21].

Page 140: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

128 CAPITULO 2. LOGICA PROPOSICIONAL

14. (a) Desenhe a arvore de decisao correspondente a seguinte fbf:

P ! (Q " (P !R))

(b) Transforme a arvore de decisao da alınea anterior num BDD re-duzido. Indique os passos seguidos.

15. Considere os seguintes OBDDs:

Q

R

V F

P

Q

R

F V

Utilizando o algoritmo aplica, calcule o OBDD que resulta de dis-juncao das fbfs que correspondem a estes OBDDS. Mostre os passosutilizados.

16. (a) Sendo ! um conjunto de fbfs e ! uma fbf, diga qual o significadode ! |= !.

(b) Diga como pode usar o OBDD de uma fbf para determinar osmodelos dessa fbf.

(c) Aplique a resposta da alınea (b) ao seguinte OBDD:

R

Q

F V

(d) Usando OBDDs, mostre que {P, P # Q} |= Q. Sugestao: Uti-lizando o algoritmo aplica, construa o OBDD para a conjuncaodas premissas e veja o que pode concluir em relacao a conclusaodo argumento.

Page 141: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

2.6. EXERCICIOS 129

17. Dado um OBDD qualquer, o, mostre que os seguintes resultados saoverificados:

(a) aplica(!, o, F ) = F

(b) aplica(!, F , o) = F

(c) aplica(!, o, V ) = o

(d) aplica(!, V , o) = o

(e) aplica(", o, V ) = V

(f) aplica(", V , o) = V

(g) aplica(", o, F ) = o

(h) aplica(", F , o) = o

Page 142: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

130 CAPITULO 2. LOGICA PROPOSICIONAL

Page 143: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Capıtulo 3

Logica de Primeira Ordem

When a fact appears to be opposed to along train of deductions, it invariablyproves to be capable of bearing someother interpretation.Sherlock Holmes, A Study in Scarlet

A logica proposicional que discutimos ate agora apenas nos permite avaliaruma classe muito restrita de argumentos. Embora tenhamos consideradoproposicoes de certo modo complexas, os seus componentes elementares cor-respondem a sımbolos de proposicao, ao interior dos quais nao podemos ace-der. Recorde-se da pagina 27 que, em logica proposicional, a representacaoda proposicao “Socrates e um homem” nao permitia a representacao deSocrates, nem de homem, nem da relacao entre estas duas entidades.

Neste capıtulo, desenvolvemos uma logica cuja linguagem nos permite consi-derar o “interior” das proposicoes. Com esta nova linguagem, as proposicoeselementares deixam de ser um todo, passando a ter uma estrutura na qualpodem existir constantes, variaveis, funcoes e relacoes. A logica resultantechama-se logica de primeira ordem ou logica de predicados. A passagem dalogica proposicional para a logica de primeira ordem obriga a uma refor-mulacao das regras para a formacao de fbfs (contemplando variaveis) e aintroducao de novos sımbolos logicos e de novas regras de inferencia.

Page 144: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

132 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

3.1 A linguagem

A logica de primeira ordem e muito mais rica do que a logica proposicional.Para alem de conter todos os sımbolos da logica proposicional, a logica deprimeira ordem contem dois sımbolos logicos adicionais, os quantificadores,e permite a utilizacao de funcoes e de variaveis. Alem disso, em lugar dossımbolos de proposicao, a logica de primeira ordem introduz predicados, osquais tem uma estrutura no sentido em que correspondem a relacoes comargumentos.

Antes de apresentar a linguagem da logica de primeira ordem, discutimosos conceitos de funcao, de relacao e de variavel.

Funcoes. A palavra “funcao” e usada no sentido lato para representaruma correspondencia (ou uma transformacao) entre duas classes de entida-des. Do ponto de vista da teoria dos conjuntos, uma funcao e um conjunto(potencialmente infinito) contendo os elementos (pares ordenados) que cor-respondem a transformacao. Como exemplos, podemos pensar em funcoesque correspondem a capital de um paıs, ao ano de nascimento de uma pes-soa ou ao sucessor de um numero natural. Os seguintes conjuntos listamparcialmente estas transformacoes:1

{(Portugal, Lisboa), (Franc, a, Paris), (Espanha, Madrid), . . .}

{(Augustus De Morgan, 1806), (Alonzo Church, 1903), . . .}

{(1, 2), (2, 3), (3, 4) . . .}

De um modo mais rigoroso, uma funcao e um conjunto de pares ordenadosque nao contem dois pares distintos com o mesmo primeiro elemento. Oconjunto de todos os primeiros elementos dos pares e chamado o domınio dafuncao e o conjunto de todos os segundos elementos dos pares e chamado ocontradomınio da funcao.

Ao definir uma funcao nao e comum apresentar uma lista exaustiva de todosos pares que pertencem a funcao, em muitos casos isto nao e mesmo possıvel,por exemplo, se o domınio for infinito. De um modo geral, ao definir uma

1Note-se que o primeiro conjunto e finito, o segundo conjunto e muito grande (consi-derando todas as pessoas), mas tambem e finito, e o terceiro conjunto e infinito.

Page 145: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 133

funcao, especificamos qual o seu domınio e fornecemos uma expressao de-signatoria2 que ao receber um elemento do domınio da funcao (chamado oargumento da funcao) calcula o elemento correspondente do contradomınio(chamado o valor da funcao).

Exemplo 3.1.1 As funcoes anteriores podem ser definidas pelas seguintesexpressoes designatorias (partindo do princıpio que o seu domınio ja foiespecificado):

capital(x) = a capital de x

n(x) = o ano de nascimento de x

s(x) = x + 1

`

Para calcular o valor da funcao para um determinado valor do seu domınio,o que tem de ser feito e a susbstituicao da variavel pelo valor correspondentena expressao designatoria que corresponde a definicao da funcao.

Exemplo 3.1.2 Para calcular o valor da funcao s do Exemplo 3.1.1 para ovalor 2, teremos que substituir x por 2 na expressao x + 1, obtendo 3. `

Tendo em atencao que as funcoes correspondem a transformacoes, estas po-dem ser utilizadas para descrever entidades. Por exemplo, usando novamentea funcao s, s(2), representa o numero natural 3.

Embora a nossa discussao apenas tenha considerado funcoes com um argu-mento, podemos facilmente considerar funcoes de n argumentos, ou funcoesde aridade n, (n 3 0) do seguinte modo: uma funcao de n argumentos e umconjunto de (n + 1)-tuplos ordenados que nao contem dois tuplos com osmesmos n primeiros elementos. De acordo com esta definicao, uma funcaocom zero argumentos corresponde a um conjunto singular e e consideradacomo uma constante.

Variaveis. Chamam-se variaveis a certos sımbolos que desempenham opapel de designacoes sem serem propriamente designacoes. Cada variavelpode ter como valor qualquer elemento de um conjunto denominado domınioda variavel.

2Uma expressao que se transforma numa designacao quando as variaveis que estacontem sao substituıdas por constantes.

Page 146: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

134 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

As variaveis correspondem de certo modo a “espacos em branco” de umformulario a preencher, sendo o seu uso regulamentado por duas regras:

1. Se uma variavel figura em mais do que um lugar numa expressao, sopodemos atribuir-lhe de cada vez um mesmo valor, em todos os lugaresque a variavel ocupa na expressao.

2. A variaveis diferentes e lıcito atribuir um mesmo valor, desde que essevalor pertenca ao domınio de ambas as variaveis.

As variaveis, por si so, nao representam entidades, mas podem ser subs-tituıdas por elementos apropriados do seu domınio.

Relacoes. A palavra “relacao” e usada para representar qualquer relacaoentre elementos de conjuntos. Do ponto de vista matematico, uma relacaode n argumentos (tambem dita relacao de aridade n ou relacao n-aria) e umconjunto de n-tuplos ordenados.

Como exemplo, podemos pensar na relacao binaria3 correspondendo ao con-junto dos paıses que partilham uma fronteira terrestre. O seguinte conjuntocontem alguns dos paıses que estao envolvidos nesta relacao:

{(Portugal, Espanha), (Espanha, Portugal), (Espanha, Franc, a), . . .}

Os pares (Espanha, Portugal) e (Espanha, Franc, a) fazem parte destarelacao uma vez que Espanha tem fronteira terrestre tanto com Portu-gal como com a Franca, ao passo que os pares (Portugal, Dinamarca)e (Mexico, Canada) nao pertencem a esta relacao pois os paıses envolvidosnao tem fonteira terrestre. Repare-se que nesta relacao existe mais do queum par com o mesmo primeiro elemento, de facto listamos dois pares nestascondicoes, (Espanha, Portugal) e (Espanha, Franc, a), o que faz com queesta relacao nao seja uma funcao.

Tal como no caso das funcoes, as relacoes tem um domınio e um contra-domınio. Uma relacao e normalmente definida atraves da especificacao dosconjuntos aos quais o primeiro e o segundo elemento dos pares pertencem,juntamente com uma expressao proposicional4 que a partir dos elementos

3Relacao de dois argumentos.4Uma expressao que se transforma numa proposicao quando as variaveis que esta

contem sao substituıdas por constantes.

Page 147: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 135

destes conjuntos faz uma afirmacao sobre a sua relacao. Sob esta perspec-tiva, a relacao anterior pode ser definida do seguinte modo:

Tem fronteira(x, y) = x tem fronteira terrestre com y

Relacoes apenas com um argumento sao normalmente conhecidas por classesou propriedades.

Do ponto de vista matematico, qualquer funcao pode ser considerada comouma relacao, ambas correspondem a conjuntos de pares, mas as funcoescolocam uma restricao adicional sobre os elementos desses conjuntos. Noentanto, a utilizacao de funcoes e de relacoes e bastante diferenciada.

Exemplo 3.1.3 Consideremos a relacao S que relaciona um numero na-tural com o seu sucessor e a funcao s que corresponde ao sucessor de umnumero natural:

S(x, y) = y e o sucessor de x

s(x) = x + 1

A relacao S contem os pares {(1, 2), (2, 3), (3, 4), . . .}. Este conjunto e igualao conjunto que corresponde a funcao s. No entanto, usando uma relacaonao podemos falar sobre o sucessor de um dado numero, como acontececom a utilizacao de uma funcao; recorrendo a uma relacao, apenas podemosafirmar, por exemplo, que o par (3, 4) pertence a relacao S. `

Com a conclusao desta pequena discussao sobre funcoes, variaveis e relacoes,vamo-nos agora concentrar no topico desta seccao, a definicao da linguagemda logica de primeira ordem.

Alfabeto basico. O alfabeto da logica de primeira ordem, para alem dossımbolos de pontuacao e dos sımbolos logicos, tem um numero infinito desımbolos de funcao, um numero infinito de sımbolos de relacao e um numeroinfinito de variaveis individuais.

1. Sımbolos de pontuacao: , ( ) [ ]

2. Sımbolos logicos: ¬ ! " # / 0Para alem dos sımbolos logicos ja utilizados na logica proposicional,existem dois novos sımbolos logicos:

(a) o sımbolo / corresponde a quantificacao universal;

Page 148: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

136 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

(b) o sımbolo 0 corresponde a quantificacao existencial.

3. Letras de funcao com n argumentos (ou funcoes de aridade n), fni

(para n 3 0 e i 3 1).

A razao de indexarmos as letras de funcao em lugar de utilizarmosletras individuais para as designar e o facto de o recurso a um ındice nosfornecer uma capacidade ilimitada para criar novos nomes de funcoes.

As funcoes com aridade zero (ou seja, as funcoes sem argumentos,correspondentes a f0

i ) correspondem a constantes.

Quando nao haja perigo de confusao, as letras de funcao sao designadaspor cadeias de caracteres comecando por uma letra minuscula. Porexemplo, f , g, h, capital e pai.

4. Letras de predicado com aridade n, Pni (para n 3 0 e i 3 1).

Uma letra de predicado com n argumentos representa uma relacaon-aria.

Quando nao haja perigo de confusao, representaremos as letras de pre-dicado por cadeias de caracteres comecando com uma letra maiuscula.Por exemplo, P , Q, R, Humano e Homem.

5. Variaveis individuais, xi (para i 3 1).

Quando nao haja perigo de confusao, representaremos as variaveisindividuais por x, y, z, etc.

Termos. Os termos representam as entidades sobre as quais queremosfalar e correspondem a sintagmas nominais em lıngua natural.

Existem varios tipos de termos, constantes (que correspondem a funcoes dezero argumentos ou de aridade zero), variaveis e aplicacoes de funcoes aonumero apropriado de termos.

Definicao 3.1.1 (Termo) Os termos correspondem ao menor conjunto de-finido recursivamente atraves das seguintes regras de formacao:

1. Cada letra de funcao com aridade zero (letra de constante) e um termo;

2. Cada variavel e um termo;

3. Se t1, t2, ..., tn sao termos, entao fni (t1, t2, . . . , tn) e um termo. !

Page 149: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 137

Exemplo 3.1.4 Suponhamos que Portugal e Augustus De Morgan saoconstantes;5 suponhamos que capital e uma funcao de um argumento, cujovalor e a cidade que e a capital do paıs que e seu argumento, que pai e umafuncao de um argumento cujo valor e o pai da pessoa que corresponde aoseu argumento; suponhamos ainda que x e uma variavel. Entao, de acordocom a definicao anterior, as seguintes expressoes sao termos:

Portugal (3.1)

Augustus De Morgan (3.2)

capital(Portugal) (3.3)

pai(Augustus De Morgan) (3.4)

pai(pai(pai(Augustus De Morgan))) (3.5)

x (3.6)

capital(x) (3.7)

pai(x) (3.8)

Nos termos 3.1 a 3.8 utilizamos uma abordagem que e comum em pro-gramacao. Em lugar de utilizar nomes apenas com uma letra, usamos umacadeia de caracteres que sugere o significado do nome. Note-se, contudo,que nao existe nenhum significado formal correspondente a estes nomes. `

Definicao 3.1.2 (Termo fechado) Um termo que nao contem variaveis echamado um termo fechado ou termo chao (do ingles, “ground term”). !

Exemplo 3.1.5 No Exemplo 3.1.4, os termos 3.1 a 3.5 sao termos fechadose os termos 3.6 a 3.8 nao sao termos fechados. `

5Estamos aqui a violar a nossa convencao de que um termo comeca por uma letraminuscula. No entanto, como e habitual escrever nomes proprios comecando por umaletra maiuscula, adoptaremos essa convencao para nomes proprios.

Page 150: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

138 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Formulas bem formadas. As formulas bem formadas (ou apenas fbfs)sao definidas com base na aplicacao de uma letra de predicado ao numeroapropriado de argumentos e com base na combinacao de fbfs utilizandosımbolos logicos.

A linguagem da logica de primeira ordem, ou seja o conjunto de todas asfbfs, e representada por LLPO.

Definicao 3.1.3 (Formula bem formada de LLPO) As formulas bemformadas (ou fbfs) correspondem ao menor conjunto definido atraves dasseguintes regras de formacao:

1. Se t1, t2, ... tn sao termos, entao Pni (t1, t2, . . . , tn) e uma fbf (esta fbf e

chamada fbf atomica);

2. Se ! e uma fbf , entao (¬!) e uma fbf ;

3. Se ! e # sao fbfs, entao (! ! #), (! " #), e (! # #) sao fbfs;

4. Se ! e uma fbf contendo zero ou mais ocorrencias da variavel x, entao/x[!] e 0x[!] sao fbfs. !

A fbf /x[!] le-se “para todo o x, !” e a fbf 0x[!] le-se “existe um x tal que!”.

Exemplo 3.1.6 Se P for uma letra de predicado com aridade 2, Q for umaletra de predicado com aridade um, R e S forem letras de predicado comaridade zero, f for uma letra de funcao com aridade um, e g for uma letra defuncao com aridade 3, entao, de acordo com a definicao anterior, as seguintesexpressoes sao fbfs:

(¬P (a, g(a, b, c))) (3.9)

(P (a, b) # (¬Q(f(d)))) (3.10)

(R ! S) (3.11)

Sempre que possıvel, os parenteses redundantes serao eliminados, pelo queas fbfs anteriores serao escritas abreviadamente como

¬P (a, g(a, b, c)) (3.12)

P (a, b) # ¬Q(f(d)) (3.13)

R ! S. (3.14)

`

Page 151: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 139

Exemplo 3.1.7 Suponhamos que

• Tem fronteira e V ive em sao letras de predicado com aridade 2,

• Travaram guerra e uma letra de predicado com aridade 3,

• capital e uma letra de funcao com aridade 1,

• Portugal e Espanha sao constantes (letras de funcao com aridadezero).

Entao, as seguintes expressoes sao fbfs:

Tem fronteira(Portugal, Espanha) (3.15)

Tem fronteira(x, y) (3.16)

/x [/y [Tem fronteira(x, y) # 0g [Travaram guerra(g, x, y)]]] (3.17)

V ive em(x, capital(Portugal)) (3.18)

`

Definicao 3.1.4 (Formula cha) Uma fbf que nao contem variaveis diz-seuma formula cha (do ingles, “ground formula”). !

Exemplo 3.1.8 No Exemplo 3.1.7, a fbf 3.15 e uma formula cha. `

Sempre que possıvel, abreviaremos uma sequencia de quantificadores domesmo tipo, por exemplo, /x [/y [. . .]], por uma unica ocorrencia do quan-tificador seguido de uma lista das variaveis correspondentes, por exemplo,/x, y [. . .].

Exemplo 3.1.9 De acordo com esta convencao, a fbf 3.17 sera escrita doseguinte modo:

/x, y [Tem fronteira(x, y) # 0g [Travaram guerra(g, x, y)]] (3.19)

`

Page 152: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

140 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Variaveis livres e variaveis ligadas. A utilizacao de quantificadoresleva a distincao entre dois tipos de ocorrencias de variaveis, as variaveislivres e as variaveis ligadas.

Definicao 3.1.5 (Domınio de um quantificador) Na fbf /x[!] e na fbf0x[!], a fbf ! e chamada o domınio do quantificador (/ ou 0) e diz-se que oquantificador liga (do ingles “binds”) a variavel x. !

Exemplo 3.1.10 Considerando a fbf 3.19, o domınio do quantificador uni-versal e a fbf

Tem fronteira(x, y) # 0g [Travaram guerra(g, x, y)] (3.20)

e o domınio do quantificador existencial e a fbf

Travaram guerra(g, x, y). (3.21)

Na fbf 3.19, o quantificador universal liga as variaveis x e y e o quantificadorexistencial liga a variavel g. `

Note-se que a fbf ! que aparece no domınio de um quantificador que liga avariavel x nao tem necessariamente que conter a variavel x, como acontece,por exemplo, com a fbf

/x [Tem fronteira(Portugal, Espanha)]. (3.22)

Neste caso, tanto /x[!] como 0x[!] tem o mesmo significado que !.

Definicao 3.1.6 (Variavel ligada) Uma ocorrencia da variavel x diz-seligada (do ingles “bound”) numa fbf se esta ocorrencia aparecer dentro dodomınio do quantificador que a introduz. !

Definicao 3.1.7 (Variavel livre) Uma ocorrencia da variavel x diz-se li-vre (do ingles “free”) se esta nao for uma ocorrencia ligada. !

Exemplo 3.1.11 A fbf A(x) contem uma ocorrencia livre de x (o quetambem e referido dizendo que A(x) contem a variavel livre x). `

Exemplo 3.1.12 A fbf /x[A(x)] contem a variavel ligada x. `

Exemplo 3.1.13 A fbf A(x) # 0x[B(x)] contem uma ocorrencia livre dex, em A(x), e uma ocorrencia ligada de x, em B(x). `

Page 153: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 141

Em resumo, uma ocorrencia da variavel x na fbf ! e ligada nas fbfs /x[!] e0x[!].

Definicao 3.1.8 (Formula fechada) Uma fbf sem variaveis livres diz-sefechada. !

Substituicoes. Sabemos que intuitivamente as variaveis correspondema “espacos em branco” para designar entidades. Ao lidar com fbfs comvariaveis, precisamos frequentemente de substituir instancias de variaveispor termos (note-se que os termos correspondem ao domınio destas variaveis).

Definicao 3.1.9 (Substituicao) Uma substituicao e um conjunto finitode pares ordenados {t1/x1, . . . , tn/xn} em que cada xi (1 4 i 4 n) e umavariavel individual e cada ti (1 4 i 4 n) e um termo.

Numa substituicao, todas as variaveis individuais sao diferentes (ou seja,para todo o i e j, 1 4 i 4 n, 1 4 j 4 n se i 6= j entao xi 6= xj) e nenhumadas variaveis individuais e igual ao termo correspondente (ou seja, para todoo i, 1 4 i 4 n xi 6= ti). !

Exemplo 3.1.14 Supondo que a e b sao constantes, x, y e z sao variaveisindividuais e que f , g e h sao funcoes de aridade 1, entao os seguintesconjuntos sao exemplos de substituicoes

{f(x)/x, z/y}

{a/x, g(y)/y, f(g(h(b)))/z}

os seguintes conjuntos nao sao exemplos de substituicoes6

{x/x, z/y}

{a/x, g(y)/y, b/x, f(g(h(b)))/c}

`

Existem dois casos especiais de substituicoes, a substituicao vazia e as subs-tituicoes chas.

Definicao 3.1.10 (Substituicao vazia) A substituicao vazia correspondeao conjunto vazio e e representada por ". !

6Como exercıcio, deve explicar a razao porque estes conjuntos nao sao substituicoes.

Page 154: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

142 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Definicao 3.1.11 (Substituicao cha) Uma substituicao cha (do ingles,“ground substitution”) e uma substituicao na qual nenhum dos termoscontem variaveis. !

A ideia subjacente a uma substituicao e que esta sera utilizada como umguia para substituir certas variaveis numa fbf: cada variavel individual nasubstituicao sera substituıda pelo termo que lhe esta associado. Esta ideiajustifica a razao das restricoes impostas a uma substituicao, nomeadamentea restricao de que todas as variaveis individuais sao diferentes (caso contrarionao saberıamos qual o termo a usar para substituir a variavel) e a restricaode que nenhuma variavel e igual ao termo correspondente (caso contrario asubstituicao seria inutil).

Definicao 3.1.12 (Aplicacao de substituicao) A aplicacao da substitui-cao s = {t1/x1, . . . , tn/xn} a fbf ! (representada por ! · s) e a fbf obtida de! substituindo todas as ocorrencias da variavel livre xi por ti (1 4 i 4 n).!

Exemplo 3.1.15 Dada a fbf

P (x, f(a, y)), (3.23)

a qual contem as variaveis livres x e y, e a substituicao

s = {a/x, f(a, b)/y}, (3.24)

a aplicacao da substituicao s a P (x, f(a, y)) resulta em

P (x, f(a, y)) · {a/x, f(a, b)/y} = P (a, f(a, f(a, b)). (3.25)

O mesmo resultado seria obtido aplicando a substituicao

s" = {a/x, f(a, b)/y, c/z} (3.26)

a P (x, f(a, y)). A aplicacao da substituicao 3.24 a A(x) # 0x[B(x)] resultaem

(A(x) # 0x[B(x)]) · {a/x, f(a, b)/y} = A(a) # 0x[B(x)]. (3.27)

`

Page 155: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 143

Exemplo 3.1.16 Dada a substituicao 3.24 e a fbf

/x[P (x, f(a, y))], (3.28)

temos

/x[P (x, f(a, y))] · {a/x, f(a, b)/y} = /x[P (x, f(a, f(a, b)))]. (3.29)

`

Escreveremos !(x1, . . . , xn) para indicar que a fbf ! tem x1, . . ., xn comovariaveis livres. Note-se que isto nao impede que ! tenha outras variaveislivres. Com esta notacao escreveremos tambem

!(x1, . . . , xn) · {t1/x1, . . . , tn/xn} = !(t1, ..., tn).

Exemplo 3.1.17 Consideremos a substituicao

{a/x, x/y}. (3.30)

A aplicacao desta susbstituicao a fbf 3.28 tem como resultado:

/x[P (x, f(a, y))] · {a/x, x/y} = /x[P (x, f(a, x))]. (3.31)

A aplicacao desta substituicao teve um resultado indesejavel, a variavel xque esta ligada pelo quantificador universal e introduzida como segundoargumento do predicado P . Esta alteracao muda o significado da fbf 3.28,o que nao era o objectivo da aplicacao da substituicao. Para evitar casoscomo este, e necessario introduzir a definicao de um termo ser livre parauma variavel numa fbf. `

Definicao 3.1.13 (Termo livre para uma variavel) Se ! for uma fbf et um termo, dizemos que t e livre para x em ! se nenhuma ocorrencia livrede x em ! ocorrer dentro do domınio do quantificador /x (ou 0x) em que xe uma variavel em t. !

Informalmente, t ser livre para x em ! significa que se todas as ocorrenciasde x forem substituıdas por t nenhuma ocorrencia de uma variavel em tdeixa de ser livre em !(t).

Exemplo 3.1.18 O termo g(y, f(b)) e livre para x na fbf P (x, y) mas naoo e na fbf /y[P (x, y)]. `

Note-se, por definicao, que um termo sem variaveis e sempre livre paraqualquer variavel em qualquer fbf.

Page 156: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

144 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Representacao em logica de primeira ordem. Vamos agora conside-rar a utilizacao da logica de primeira ordem para representar conhecimentosobre um mundo ou uma situacao.

Como em qualquer formalismo de representacao, o primeiro passo a tomare “inventar” um modelo daquilo que estamos a representar. Um modelocorresponde a uma abstraccao do mundo que apenas captura os seus aspec-tos que sao relevantes para um certo problema ou para uma certa tarefa.Nesta representacao devemos definir as entidades do mundo sobre as quaisqueremos falar (o chamado universo de discurso) e as funcoes e as relacoesque iremos utilizar.

As entidades sobre as quais queremos falar correspondem as entidades in-dividuais que sao nomeadas no universo de discurso. Entre estas relacoes ehabitual definir as chamadas classes ou propriedades, relacoes de um argu-mento que circunscrevem tipos de entidades ou que definem as propriedadesque estas possuem.

Ao fazer isto, estamos a definir o vocabulario que e utilizado pelas fbfs danossa representacao. Em relacao as regras de formacao apresentadas napagina 135, estamos a particularizar as letras de funcao e as letras de pre-dicado que vamos considerar.

E boa pratica documentar as decisoes tomadas quanto ao significado intui-tivo das constantes, funcoes e relacoes que vamos utilizar.

Depois de tomadas estas decisoes, a tarefa da representacao consiste em es-crever fbfs que relacionam estas constantes, funcoes e relacoes. Estas fbfs saovulgarmente designadas por axiomas proprios, ou seja proposicoes que acei-tamos sem demonstracao em relacao ao domınio que estamos a representar.

Exemplo 3.1.19 (Os Simpsons) Neste exemplo, apresentamos conceitosrelacionados com relacoes familiares. Para ilustrar o nosso exemplo, usamosuma famılia bem conhecida (Figura 3.1).7

Comecaremos com a definicao do vocabulario, as constantes, as funcoes eas relacoes que iremos utilizar. Juntamente com cada relacao e com cadafuncao fornecemos o seu significado intuitivo. Usamos a expressao “signifi-cado intuitivo” porque o significado formal e definido atraves do tuplos quecorrespondem a relacao ou a funcao (como descrito na Seccao 3.3).

7Esta imagem foi obtida em http://duffzone.co.uk/desktops/tree/. Reproduzidacom a autorizacao de www.duffzone.co.uk.

Page 157: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 145

Figura 3.1: A arvore genealogica dos Simpsons.

Usamos as seguintes constante para representar cada um dos membros destafamılia, Hugo (Hugo Simpson), Bart (Bart J. Simpson), Lisa (Lisa Simp-son), Maggie (Maggie Simpson), Herb (Herb Powers), Homer (Homer J.Simpson), Marge (Marge B. Simpson), Selma (Selma Bouvier), Paty (PatyBouvier), Sra.Y (a pessoa sem nome na zona inferior esquerda da arvore),Abe (Abraham Simpson), Penelope (Penelope Olsen), Jackie (Jackie Bou-vier) e Sr.B (Mr. Bouvier).

Utilizamos duas classes (relacoes de um argumento), Homem e Mulher,com os seguintes significados intuitivos:

Homem(x) = x e um homem

Mulher(x) = x e uma mulher

Uma outra relacao binaria que utilizamos e a de ascendente directo, quecorresponde ao pai ou a mae de uma entidade. A relacao de dois argumentos

Page 158: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

146 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

AD tem o seguinte significado intuitivo:

AD(x, y) = x e um ascendente directo de y

Utilizamos tambem as relacoes de dois argumentos, Pai, Mae, Avo, Avo,A2Linha (um avo ou uma avo), Ant (antepassado), DD (descendente di-recto), Filho, Filha, Irmao, Irma, e ADC (ascendente directo comum)com os seguintes significados intuitivos:

Pai(x, y) = x e o pai de y

Mae(x, y) = x e a mae de y

Avo(x, y) = x e um avo de y

Avo(x, y) = x e uma avo de y

A2Linha(x, y) = x e um ascendente de 2a linha de y

Ant(x, y) = x e um antepassado de y

DD(x, y) = x e um descendente directo de y

F ilho(x, y) = x e um filho de y

F ilha(x, y) = x e uma filha de y

Irmao(x, y) = x e um irmao de y

Irma(x, y) = x e uma irma de y

ADC(x, y) = x e y tem um ascendente directo em comum

Com estas relacoes, e com base na informacao da Figura 3.1, podemos es-crever as seguintes fbfs fechadas:

Homem(Sr.B) (3.32)

Homem(Abe) (3.33)

Homem(Homer) (3.34)

Homem(Herb) (3.35)

Homem(Hugo) (3.36)

Homem(Bart) (3.37)

Mulher(Jackie) (3.38)

Page 159: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.1. A LINGUAGEM 147

Mulher(Penelope) (3.39)

Mulher(Sra.Y ) (3.40)

Mulher(Marge) (3.41)

Mulher(Selma) (3.42)

Mulher(Patty) (3.43)

Mulher(Lisa) (3.44)

Mulher(Maggie) (3.45)

AD(Sr.B, Marge) (3.46)

AD(Jackie,Marge) (3.47)

AD(Sr.B, Selma) (3.48)

AD(Jackie, Selma) (3.49)

AD(Sr.B, Patty) (3.50)

AD(Jackie, Patty) (3.51)

AD(Abe, Homer) (3.52)

AD(Pamela,Homer) (3.53)

AD(Abe, Herb) (3.54)

AD(Sra.Y, Herb) (3.55)

AD(Homer, Hugo) (3.56)

AD(Marge,Hugo) (3.57)

AD(Homer, Bart) (3.58)

AD(Marge,Bart) (3.59)

AD(Homer, Lisa) (3.60)

AD(Marge, Lisa) (3.61)

AD(Homer, Maggie) (3.62)

AD(Marge,Maggie) (3.63)

Usando as relacoes que definimos, podemos escrever as seguintes fbfs quecorrespondem a axiomas proprios do nosso domınio:

/ x, y, z [(AD(x, y) !AD(y, z)) # A2Linha(x, z)] (3.64)

Page 160: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

148 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

/ x, y [AD(x, y) # Ant(x, y)] (3.65)

/ x, y, z [(Ant(x, y) !AD(y, z)) # Ant(x, z)] (3.66)

/ x, y [(AD(x, y) !Homem(x)) ( Pai(x, y)] (3.67)

/ x, y [(AD(x, y) !Mulher(x)) ( Mae(x, y)] (3.68)

/ x, y [(A2Linha(x, y) !Homem(x)) ( Avo(x, y)] (3.69)

/ x, y [(A2Linha(x, y) !Mulher(x)) ( Avo(x, y)] (3.70)

/ x, y [AD(x, y) ( DD(y, x)] (3.71)

/ x, y [(DD(x, y) !Homem(x)) ( Filho(x, y)] (3.72)

/ x, y [(DD(x, y) !Mulher(x)) ( Filha(x, y)] (3.73)

/ x, y [(Irmao(x, y) " Irma(x, y)) # ADC(x, y)] (3.74)

A fbf 3.74 poderia ter sido escrita, alternativamente, como duas fbfs, sepa-radas;

/ x, y [Irmao(x, y) # ADC(x, y)] (3.75)

/ x, y [Irma(x, y) # ADC(x, y)] (3.76)

A decisao de utilizar a fbf 3.74 ou as fbfs 3.75 e 3.76 e fundamentalmenteuma questao de facilidade de expressao.

Algumas destas fbfs utilizam o sımbolo logico correspondente a equivalencia.A utilizacao deste sımbolo significa que a fbf contem as condicoes necessariase suficientes para a definicao do predicado. Por exemplo, a fbf 3.67, definecompletamente o predicado Pai atraves da combinacao dos predicados ADe Homem. Fbfs deste tipo sao vulgarmente designadas por definicoes com-pletas.

Um outro tipo de fbf a que e muito vulgar recorrer, chamada disjuncao,8

afirma que certas combinacoes de uma relacao sao disjuntas. Por exemplo,sabemos que a relacao Ant e anti-reflexiva:

/ x, y [Ant(x, y) # ¬Ant(y, x)] (3.77)

Ao conjunto de todas as constantes, funcoes, relacoes e axiomas propriosdefinidos para um dado domınio da-se o nome de ontologia do domınio.

8Nao confundir esta designacao com o sımbolo logico “disjuncao”.

Page 161: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 149

Considerando a representacao que definimos, podemos pensar em repre-sentar que uma pessoa apenas tem um pai. Repare-se que nada na nossarepresentacao aborda este aspecto. Este facto pode ser representado atravesda seguinte fbf:

/x, y, z[(Pai(x, z) ! Pai(y, z)) # Eq(x, y)]

na qual Eq e a relacao

Eq(x, y) = x e igual a y

A relacao Eq e tao utilizada em logica que frequentemente a expressaoEq(x, y) e abreviada para x = y. E importante mencionar que a decisaosobre a igualdade de dois elementos esta longe de ser um aspecto trivial.Neste exemplo assumimos que esta relacao satisfaz os seguintes axiomas:

/x[x = x]

/x, y[(x = y) # (y = x)]

/x, y, z[((x = y) ! (y = z)) # (x = z)]

Para alem de termos definido a relacao Pai, poderıamos ter tambem es-colhido utilizar a funcao pai. Esta funcao pode ser definida do seguintemodo

pai(x) = o pai de x

Neste caso, podemos escrever a fbf /x[Homem(pai(x))]. `

3.2 O sistema dedutivo

3.2.1 Deducao natural

As provas em logica de primeira ordem sao semelhantes as provas em logicaproposicional, excepto que contem novas regras de inferencia para lidar coma introducao e com a eliminacao de quantificadores. Isto significa que todasas regras de inferencia apresentadas na Seccao 2.2 sao tambem aplicaveis alogica de primeira ordem.

Page 162: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

150 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Regras para a quantificacao universal. Antes de abordarmos as re-gras para a quantificacao universal, consideremos o significado intuitivo dafbf /x[!(x)]. Esta formula afirma que, para qualquer termo t, se substituir-mos x por t, a fbf !(t) verifica-se. A regra de introducao do quantificadoruniversal, escrita “I/”, tera que reflectir este aspecto, ou seja, para intro-duzir a fbf /x[!(x)], teremos que provar !(t) para um termo arbitrario t.De modo a garantir que nao existem restricoes em relacao ao termo t quesatisfaz a propriedade !(t), utilizamos uma tecnica semelhante a utilizadana regra da introducao da implicacao, criamos um novo “contexto” no qualaparece um novo termo (um termo que nunca apareceu antes na prova) e ten-tamos provar que este termo tem a propriedade !. Este raciocınio e obtidocomecando uma nova prova hipotetica, a qual introduz uma nova variavel,x0, que nunca apareceu antes na prova. A nova prova hipotetica estabeleceo domınio da variavel em lugar do domınio da hipotese como acontece naregra da I#.

A regra da introducao da quantificacao universal afirma que se numa provainiciada pela introducao da variavel x0 que nunca tinha aparecido antes naprova, conseguirmos derivar a fbf !(x0),9 entao, podemos escrever /x[!(x)]na prova que contem imediatamente a prova hipotetica iniciada com a in-troducao da variavel x0:

n x0

......

m !(x) · {x0/x}m + 1 /x[!(x)] I/, (n, m)

Na representacao desta regra de inferencia, x0 a esquerda da linha verticalque delimita a prova hipotetica, significa que x0 e uma nova variavel, nuncautilizada anteriormente na prova. Esta nova prova hipotetica inicia-se coma introducao da variavel e termina com a derivacao da fbf que permite in-troduzir uma formula com o quantificador universal.

Antes de apresentar um exemplo, vamos apresentar a regra da eliminacaodo quantificador universal, escrita “E/”, que utiliza uma fbf contendo umquantificador universal. A partir de /x[!(x)], podemos inferir !(x) · {t/x},em que t e qualquer termo (sujeito a condicao obvia que t seja livre para x

9Repare-se que !(x0) = !(x) · {x0/x}.

Page 163: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 151

em !):n /x[!(x)]n + 1 !(x) · {t/x} E/, n

Exemplo 3.2.1 Consideremos a demonstracao do argumento ({/x[P (x) #Q(x)], /x[Q(x) # R(x)]}, /x[P (x) # R(x)]):

Page 164: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

152 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

1 /x[P (x) # Q(x)] Prem2 /x[Q(x) # R(x)] Prem

3 x0 /x[P (x) # Q(x)] Rei, 1

4 /x[Q(x) # R(x)] Rei, 2

5 P (x0) # Q(x0) E/, 3

6 Q(x0) # R(x0) E/, 4

7 P (x0) Hip

8 P (x0) # Q(x0) Rei, 5

9 Q(x0) E#, (7, 8)

10 Q(x0) # R(x0) Rei, 6

11 R(x0) E#, (9, 10)

12 P (x0) # R(x0) I#, (7, 11)13 /x[P (x) # R(x)] I/, (3, 12)

`

Regras para a quantificacao existencial. A regra de introducao doquantificador existencial, escrita “I0”, e muito simples. A partir de !(t), emque t e qualquer termo, podemos inferir 0x[!(x)], em que x e livre em !(x):

n !(t)n + 1 0x[!(x)] I0, n

A regra de eliminacao do quantificador existencial, escrita “E0”, e um poucomais complicada. Note-se que a fbf 0x[!(x)] afirma que existe uma entidadeque satisfaz a propriedade !. Embora saibamos que tal entidade existe, naosabemos qual e a entidade que satisfaz esta propriedade. Suponhamos quet e a entidade tal que !(t). E importante notar que como nao sabemosqual e a entidade t, nao podemos fazer qualquer afirmacao sobre t paraalem de !(t). Na nossa prova, iremos criar um “contexto” em que surgeuma nova entidade que nunca foi mencionada anteriormente. Se, dentrodeste “contexto” formos capazes de derivar a fbf #, a qual nao menciona aentidade t, entao # deve-se verificar, independentemente de t.

Page 165: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 153

A regra da eliminacao da quantificacao existencial usa o conceito de uma sub-prova que combina as provas hipoteticas iniciadas pela introducao de umahipotese e as provas hipoteticas iniciadas pela introducao de uma variavel.Esta regra afirma que, se a partir da fbf 0x[!(x)] e de uma prova iniciadacom a introducao da variavel x0 (que nunca apareceu antes na prova), jun-tamente com a hipotese de que !(x0), formos capazes de derivar a fbf #a qual nao contem a variavel x0, entao, podemos derivar # na prova quecontem imediatamente a prova hipotetica iniciada pela introducao conjuntada variavel x0 e da hipotese !(x0):

n 0x[!(x)]

m x0 !(x) · {x0/x} Hip...

...

k #

k + 1 # E0, (n, (m, k))

Exemplo 3.2.2 Usando as regras de inferencia para os quantificadores,provamos agora um teorema que e parte das segundas leis de De Morgan,0x[P (x)] # ¬/x[¬P (x)]:

1 0x[P (x)] Hip

2 x0 P (x0) Hip

3 /x[¬P (x)] Hip

4 P (x0) Rei, 2

5 ¬P (x0) E/, 3

6 ¬/x[¬P (x)] I¬, (3, (4, 5))

7 ¬/x[¬P (x)] E0, (1, (2, 6))8 0x[P (x)] # ¬/x[¬P (x)] I#, (1, 7)

`

Exemplo 3.2.3 Considerando de novo o Exemplo 3.1.19, podemos utilizaras fbfs 3.32 a 3.74 como premissas para derivar informacao sobre a famılia. Aseguinte prova (que apenas utiliza as premissas relevantes, 3.33, 3.34, 3.37,3.52, 3.58, 3.64, e 3.69) mostra que Abe e avo de Bart:

Page 166: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

154 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

1 Homem(Abe) Prem2 Homem(Homer) Prem3 Homem(Bart) Prem4 AD(Abe, Homer) Prem5 AD(Homer, Bart) Prem6 / x, y, z [(AD(x, y) !AD(y, z)) # A2Linha(x, z)] Prem7 / x, y [(A2Linha(x, y) !Homem(x)) ( Avo(x, y)] Prem8 (AD(Abe, Homer) !

AD(Homer, Bart)) #A2Linha(Abe, Bart) E/, 6

9 AD(Abe, Homer) !AD(Homer, Bart) I!, (4, 5)10 A2Linha(Abe, Bart) E#, (9, 8)11 (A2Linha(Abe, Bart) !Homem(Abe)) (

Avo(Abe, Bart) E/, 712 (A2Linha(Abe, Bart) !Homem(Abe)) #

Avo(Abe, Bart) E(, 1113 A2Linha(Abe, Bart) !Homem(Abe) I!, (10, 1)14 Avo(Abe, Bart) E#, (13, 12)

`

3.2.2 Resolucao

Forma Clausal. Como vimos no Capıtulo 2, a utilizacao da resolucaoobriga a transformacao de fbfs para a forma clausal. No caso da logica deprimeira ordem, as transformacoes que apresentamos na Seccao 2.2.5 teraoque ser revistas a luz dos novos sımbolos e conceitos introduzidos nestalogica.

Nesta seccao, apresentamos as regras de transformacao de uma fbf de LLPO

para a forma clausal. Dado que algumas destas transformacoes sao as mes-mas que em logica proposicional, sempre que isso acontecer, indicamos onome da transformacao e o numero da pagina em que a transformacao eapresentada no Capıtulo 2. As transformacoes sao exemplificadas utilizandoa fbf:10

/x[P (x) # (/y[P (y) # P (f(x, y))] ! ¬/y[Q(x, y) # P (y)])]. (3.78)

A transformacao de uma fbf para forma clausal pode ser realizada mecani-10Exemplo de [Nilsson 71, pagina 165].

Page 167: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 155

camente atraves da aplicacao da seguinte sequencia de passos:11

1. Eliminacao do sımbolo #Esta transformacao e identica a apresentada na pagina 63.

Exemplo 3.2.4 A fbf 3.78 sera transformada, sucessivamente em:

/x[P (x) # (/y[¬P (y) " P (f(x, y))] ! ¬/y[¬Q(x, y) " P (y)])]

/x[¬P (x) " (/y[¬P (y) " P (f(x, y))] ! ¬/y[¬Q(x, y) " P (y)])]

`

2. Reducao do domınio do sımbolo ¬Esta transformacao e identica a apresentada na pagina 63, com aadicao das seguintes transformacoes que lidam com quantificadores:

(c) As segundas leis de De Morgan

/x[!(x)] ( ¬0x[¬!(x)]

0x[!(x)] ( ¬/x[¬!(x)]

Exemplo 3.2.5 Aplicando este passo a fbf do Exemplo 3.2.4, obte-mos:

/x[¬P (x) " (/y[¬P (y) " P (f(x, y))] ! 0y[¬(¬Q(x, y) " P (y))])]

/x[¬P (x) " (/y[¬P (y) " P (f(x, y))] ! 0y[¬¬Q(x, y) ! ¬P (y)])]

/x[¬P (x) " (/y[¬P (y) " P (f(x, y))] ! 0y[Q(x, y) ! ¬P (y)])]

`

3. Normalizacao de variaveis

Este passo baseia-se no facto de que as ocorrencias ligadas de umavariavel (ocorrencias dentro do domınio do quantificador que introduza variavel) correspondem a variaveis mudas.

A normalizacao de variaveis consiste em mudar o nome de algumas dasvariaveis de modo a que cada ocorrencia de um quantificador estejaassociada a um unico nome de variavel.

11Nas transformacoes apresentadas apenas consideramos os sımbolos logicos ¬, #, %,!, ', e (.

Page 168: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

156 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Exemplo 3.2.6 Na fbf obtida no Exemplo 3.2.5, existem dois quan-tificadores associados a variavel y pelo que a sua segunda ocorrencia emudada para z. Assim, a nossa fbf transforma-se em:

/x[¬P (x) " (/y[¬P (y) " P (f(x, y))] ! 0z[Q(x, z) ! ¬P (z)])]

`

4. Eliminacao dos quantificadores existenciais

Neste passo, eliminam-se todas as ocorrencias de quantificadores exis-tenciais.

A eliminacao destes quantificadores baseia-se em dois princıpios:

(a) Eliminacao de um quantificador isoladoRecordemos da pagina 152 que a fbf 0x[!(x)] afirma que existeuma entidade que satisfaz a propriedade ! mas nao afirma quale essa entidade. Esta transformacao permite-nos substituir a fbf0x[!(x)] por !(a) em que “a” e uma nova constante (chamadaconstante de Skolem12).

(b) Dependencias entre quantificadores existenciais e universaisSe um quantificador existencial aparecer dentro do domınio de umquantificador universal, existe a possibilidade do valor da variavelquantificada existencialmente depender do valor da variavel quan-tificada universalmente.

Exemplo 3.2.7 Considerando o domınio dos numeros naturais,sabemos que para qualquer numero natural existe um numeronatural que e maior do que ele. Esta afirmacao traduz-se naseguinte fbf /x[0y[y > x]]. Usando uma constante de Skolem,obtemos a fbf /x[a > x], a qual afirma que existe um numeronatural que e maior do que qualquer outro, o que claramente efalso. `

No Exemplo 3.2.7, o valor de y depende do valor de x, peloque para eliminar o quantificador existencial devemos substituira variavel a ele associada por um termo formado por um novosımbolo de funcao aplicado a variavel quantificada universalmente(esta funcao e chamada funcao de Skolem13). Seja f(x) uma

12Em honra do matemacico Noruegues Thoralf Albert Skolem (1887–1963).13Ibid.

Page 169: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 157

funcao de Skolem, entao eliminando o quantificador existencialna fbf /x[0y[y > x]], obtemos a fbf /x[f(x) > x].Note-se que a alınea (a) e um caso particular desta alınea.

Obtemos assim a seguinte regra: se ! for uma letra de predicado eQ1x1, . . ., Qnxn for a sequencia de quantificadores dentro de cujodomınio se encontra ! e se Qr % {Q1, . . . , Qn} for um quantificadorexistencial, entao:

(a) Se nenhum quantificador universal aparecer antes de Qr escolhe-mos uma nova constante (c), substituımos todas as ocorrencias dexr em ! por c e removemos Qrxr da sequencia Q1x1, . . ., Qnxn.

(b) Se Qu1 , . . . , Qum sao todos os quantificadores universais que apa-recem antes de Qr 1 4 u1 4 . . . 4 um 4 r escolhemos uma novaletra de funcao (f) com “m” argumentos, substituımos xr em !por f(xu1 , . . . , xum) e removemos Qrxr da sequencia.

Exemplo 3.2.8 Na fbf do Exemplo 3.2.6 temos apenas um quantifi-cador existencial (associado a variavel z) o qual se encontra dentro dodomınio de um quantificador universal (associado a variavel x).

Usando esta transformacao, a nossa fbf transforma-se em:

/x[¬P (x) " (/y[¬P (y) " P (f(x, y))] ! (Q(x, g(x)) ! ¬P (g(x))))]

em que g(x) e uma funcao de Skolem. `

5. Conversao para a forma “Prenex” normal (do ingles, “Prenex normalform”)

O objectivo deste passo e o de mover todas as ocorrencias de quanti-ficadores universais para a esquerda da fbf.

Este passo e obtido utilizando o princıpio que diz que se ! nao contivera variavel x entao /x[!] significa o mesmo que !.

Exemplo 3.2.9 Em relacao a fbf do Exemplo 3.2.8, teremos:

/x/y[¬P (x) " ((¬P (y) " P (f(x, y))) ! (Q(x, g(x)) ! ¬P (g(x))))]

`

Page 170: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

158 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

6. Eliminacao da quantificacao universal

Uma vez que a fbf de origem nao tinha variaveis livres, todas asvariaveis existentes na fbf apos o passo 5 sao quantificadas universal-mente, e como a ordem por que aparecem os quantificadores universaisnao e importante, podemos eliminar a ocorrencia explıcita dos quanti-ficadores universais e assumir que todas as variaveis sao quantificadasuniversalmente.

Exemplo 3.2.10 Obtemos assim, a partir do Exemplo 3.2.9,

¬P (x) " ((¬P (y) " P (f(x, y))) ! (Q(x, g(x)) ! ¬P (g(x))))

`

7. Obtencao da forma conjuntiva normal

Esta transformacao e identica a apresentada na pagina 64.

Exemplo 3.2.11 Obtemos assim, a partir da fbf do Exemplo 3.2.10,as seguintes transformacoes:

(¬P (x) " (¬P (y) " P (f(x, y)))) ! (¬P (x) " (Q(x, g(x)) ! ¬P (g(x))))

(¬P (x)"¬P (y)"P (f(x, y)))!(¬P (x)"Q(x, g(x)))!(¬P (x)"¬P (g(x)))

`

8. Eliminacao do sımbolo !Esta transformacao e identica a apresentada na pagina 64.

Exemplo 3.2.12 A partir da fbf do Exemplo 3.2.11, obtemos:

{¬P (x) " ¬P (y) " P (f(x, y)),¬P (x) "Q(x, g(x)),¬P (x) " ¬P (g(x))}

`

9. Eliminacao do sımbolo "Esta transformacao e identica a apresentada na pagina 65.

Exemplo 3.2.13 A partir das clausulas do Exemplo 3.2.12, obtemos:

{{¬P (x),¬P (y), P (f(x, y))}, {¬P (x), Q(x, g(x))}, {¬P (x),¬P (g(x))}}.

`

Page 171: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 159

Unificacao. A unificacao e o processo que permite determinar se duasfbfs atomicas podem ser tornadas iguais atraves de substituicoes apropriadaspara as suas variaveis livres. Ao considerar o problema da unificacao temosque introduzir o conceito de composicao de substituicoes.

Definicao 3.2.1 (Composicao de substituicoes) Sendo s1 e s2 duassubstituicoes, a composicao das substituicoes s1 e s2, representada por s11s2,e a substituicao s tal que para qualquer fbf !, ! · s = (! · s1) · s2. Por outraspalavras, ! · (s1 1 s2) = (! · s1) · s2. !

A composicao das substituicoes s1 = {t1/x1, . . . , tn/xn} e s2 = {u1/y1,. . . , um/ym} obtem-se aplicando s2 aos termos de s1 e adicionando a s1 oselementos de s2 que contem variaveis que nao ocorrem em s1.

Em termos praticos, o calculo de s1 1 s2 e efectuado aplicando s2 aos termosde s1, adicionando s2 a s1, removendo todos os elementos (ti ·s2)/xi tais queti · s2 = xi e removendo todos os elementos uj/yj tais que yj % {x1 . . . xn}.Ou seja,

s1 1 s2 = {(t1 · s2)/x1, . . . , (tn · s2)/xn, u1/y1, . . . , um/ym}55({(ti · s2)/xi : (ti · s2) = xi} ' {uj/yj : yj % {x1, . . . , xm}}).

Exemplo 3.2.14 Sejam s1 e s2 as substituicoes:

s1 = {f(y)/x, z/y}

s2 = {a/x, b/y, y/z}

A composicao das substituicoes, s1 1 s2, e dada por:

s1 1 s2 = {(f(y) · {a/x, b/y, y/z})/x, (z · {a/x, b/y, y/z})/y, a/x, b/y, y/z}5({(z · {a/x, b/y, y/z})/y} ' {a/x, b/y}) =

= {f(b)/x, y/y, a/x, b/y, y/z}5 ({y/y} ' {a/x, b/y}) == {f(b)/x, y/z}.

`

Teorema 3.2.1 (Composicao com a substituicao vazia) Para qualquersubstituicao s, s 1 " = " 1 s = s.

Demonstracao: Trivial. "

Page 172: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

160 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Teorema 3.2.2 (Associatividade) Para quaisquer substituicoes s1, s2 es3, s1 1 (s2 1 s3) = (s1 1 s2) 1 s3.

Demonstracao: Trivial "

Teorema 3.2.3 (Nao comutatividade) A composicao de substituicoesnao e comutativa.

Demonstracao: Consideremos, por exemplo, as substituicoes s1 = {f(x)/x}e s2 = {x/y}. Neste caso temos, s1 1 s2 = {f(x)/x, x/y} e s2 1 s1 ={f(x)/y, f(x)/x}. "

Definicao 3.2.2 (Conjunto unificavel) Um conjunto de fbfs atomicas{!1, . . . , !m} diz-se unificavel se e so se existir uma substituicao s que tornaidenticas todas as fbfs do conjunto, ou seja se e so se existir uma substituicaos tal que !1 ·s = . . . = !m ·s. Neste caso, a substituicao s diz-se o unificadordo conjunto {!1, . . . ,!m}. !

Se s e um unificador do conjunto {!1, . . . ,!m} entao {!1 · s, . . . ,!m · s} ={!1 · s}.

Exemplo 3.2.15 A substituicao {a/x, b/y, c/z} e um unificador do con-junto {P (a, y, z), P (x, b, z)}, dando origem a {P (a, b, c)}. Embora esta subs-tituicao unifique as duas fbfs, ela nao e o unico unificador. Nao temos quesubstituir z por c para as unificar, podemos substituir z por qualquer termoou, eventualmente, podemos nem substituir z. `

Definicao 3.2.3 (Unificador mais geral) Dado um conjunto de fbfs ato-micas {!1, . . . ,!m} define-se o unificador mais geral ou mgu (do ingles,“most general unifier”) do conjunto como sendo um unificador, s, de {!1,. . . , !m}, com a seguinte propriedade: se s1 for um unificador de {!1, . . . ,!m} entao existe uma substituicao s2 tal que s1 = s 1 s2. !

Uma propriedade importante do unificador mais geral e o facto de ser unico(excepto para variantes alfabeticas de variaveis).

Algoritmo de unificacao. O Algoritmo 3.1, a partir de um conjuntode fbfs, ! = {!1, . . . ,!m}, produz o unificador mais geral desse conjuntoou indica insucesso quando este conjunto nao e unificavel. Este algoritmoutiliza o Algoritmo 3.2 com os argumentos ! e a substituicao vazia.

Page 173: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 161

Algoritmo 3.1 mgu(!)return unifica(!, {})

No Algoritmo 3.2:

• card e a funcao que calcula o numero de elementos do conjunto x (vera definicao de card na pagina 100);

• var? e uma funcao booleana que tem o valor verdadeiro apenas se oseu argumento corresponder a uma variavel;

• termo? e uma funcao booleana que tem o valor verdadeiro apenas seo seu argumento corresponder a um termo.

Algoritmo 3.2 unifica(!, s)if card(!) = 1 then

return s {s e o unificador mais geral}else

Cd := conj desacordo(!)if 0 x, t % Cd such that var?(x) and

termo?(t) andx nao ocorre em t

thenunifica(! · {t/x}, s 1 {t/x})

elsestop {Conjunto nao unificavel}

end ifend if

O Algoritmo 3.2 utiliza outro algoritmo, chamado conj desacordo (e que naoapresentamos formalmente), para determinar o conjunto de desacordo de umconjunto de fbfs !. O conjunto de desacordo de ! obtem-se localizando oprimeiro constituinte, a partir da esquerda, que nao e igual em todas asfbfs em ! e extraindo das fbfs em ! todos os componentes que estao nessaposicao.

Exemplo 3.2.16 Sendo

! = {P (x, f(x, y)), P (x, a), P (x, g(h(k(x))))},

Page 174: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

162 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

indicamos a sublinhado os termos que nao sao iguais em todas as fbfs. Asim,o conjunto de desacordo e

{f(x, y), a, g(h(k(x)))}.

`

E importante notar que o Algoritmo 3.2 nao e determinıstico. O teste apli-cado na quinta linha, “0 x, t % Cd such that var?(x) and termo?(t) and xnao ocorre em t”, nao especifica como escolher x e t, mas apenas pretendegarantir que tal variavel e termo existem.

Exemplo 3.2.17 Consideremos as clausulas

{P (a, x, f(y)), P (u, v, w), P (a, r, f(c))} (3.79)

nas quais x, y, u, v, w e r sao variaveis e a e c sao constantes, e sigamos ofuncionamento do Algoritmo 3.1:

mgu({P (a, x, f(y)), P (u, v, w), P (a, r, f(c))}) =

= unifica({P (a, x, f(y)), P (u, v, w), P (a, r, f(c))}, {})

como card({P (a, x, f(y)), P (u, v, w), P (a, r, f(c))}) 6= 1, o conjunto de de-sacordo sera calculado.

Cd := conj desacordo({P (a, x, f(y)), P (u, v, w), P (a, r, f(c))})

Cd := {a, u}

Em Cd existe um termo (a) e uma variavel (u) tal que u nao ocorre em a.Neste caso o valor devolvido sera o resultado de calcular:

unifica({P (a, x, f(y)), P (u, v, w), P (a, r, f(c))} · {a/u}, {} 1 {a/u}) =

= unifica({P (a, x, f(y)), P (a, v, w), P (a, r, f(c))}, {a/u})

Novamente card({P (a, x, f(y)), P (a, v, w), P (a, r, f(c))}) 6= 1 pelo que oconjunto de desacordo sera calculado.

Cd := conj desacordo({P (a, x, f(y)), P (a, v, w), P (a, r, f(c))})

Cd := {x, v, r}

O conjunto de desacordo tem tres elementos, todos eles, neste caso saovariaveis, e consequentemente sao tambem termos. O Algoritmo 3.2 naoespecifica como escolher o termo nem como escolher a variavel a testar no

Page 175: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 163

conjunto de desacordo. Este e pois um algoritmo nao determinıstico. Supo-nhamos que sao escolhidos x e v. Podemos concluir que em Cd existe umtermo (v) e uma variavel (x) tal que x nao ocorre em v. Neste caso o valordevolvido sera o resultado de calcular:14

unifica({P (a, x, f(y)), P (a, v, w), P (a, r, f(c))} · {v/x}, {a/u} 1 {v/x}) =

= unifica({P (a, v, f(y)), P (a, v, w), P (a, r, f(c))}, {a/u, v/x}) =

= unifica({P (a, v, f(y)), P (a, v, w), P (a, r, f(c))} · {v/r},{a/u, v/x} 1 {v/r}) =

= unifica({P (a, v, f(y)), P (a, v, w), P (a, v, f(c))}, {a/u, v/x, v/r})

como card({P (a, v, f(y)), P (a, v, w), P (a, v, f(c))}) 6= 1, o conjunto de de-sacordo sera calculado.

Cd := conj desacordo({P (a, v, f(y)), P (a, v, w), P (a, v, f(c))})

Cd := {f(y), w, f(c)}

Em Cd existe um termo (f(y)) e uma variavel (w) tal que w nao ocorre emf(y). Neste caso o valor devolvido sera o resultado de calcular:

unifica({P (a, v, f(y)), P (a, v, w), P (a, v, f(c))} · {f(y)/w},{a/u, v/x, v/r} 1 {f(y)/w}) =

= unifica({P (a, v, f(y)), P (a, v, f(c))}, {a/u, v/x, v/r, f(y)/w})

Novamente, como card({P (a, v, f(y)), P (a, v, f(c))}) 6= 1, o conjunto de de-sacordo sera calculado.

Cd := conj desacordo({P (a, v, f(y)), P (a, v, f(c))})

Cd := {y, c}

Em Cd existe um termo (c) e uma variavel (y) tal que y nao ocorre em c.Neste caso o valor devolvido sera o resultado de calcular:

unifica({P (a, v, f(y)), P (a, v, f(c))} · {c/y},{a/u, v/x, v/r, f(y)/w} 1 {c/y}) =

= unifica({P (a, v, f(c))}, {a/u, v/x, v/r, f(c)/w, c/y})

Agora, card({P (a, v, f(c)}) = 1 pelo que o resultado do algoritmo de uni-ficacao e a substituicao {a/u, v/x, v/r, f(c)/w, c/y}. `

14Note-se que estamos a aplicar dois passos seguidos do algoritmo por estes serem obvios.

Page 176: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

164 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

{P (f(a), x)} {¬P (y, h(z)), Q(f(y), z)}

{f(a)/y, h(z)/x}

))

)))

**

***

{Q(f(f(a)), x)}

Figura 3.2: Aplicacao do princıpio da resolucao.

Resolucao com clausulas com variaveis. Podemos agora enunciar oprincıpio da resolucao para o caso em que as clausulas contem variaveis.

Definicao 3.2.4 (Princıpio da resolucao – versao 2) Sejam # e $ duasclausulas, ! e # dois literais tais que ! % # e # % $, e ! e ¬# sao unificaveis.Seja s o unificador mais geral de ! e ¬#. Entao, usando o princıpio da re-solucao, podemos inferir a clausula ((#5 {!}) ' ($5 {#})) · s. A clausulaobtida e chamada o resolvente das clausulas # e $. !

Exemplo 3.2.18 Consideremos as clausulas

# = {P (f(a), x)}

e$ = {¬P (y, h(z)), Q(f(y), z)}.

Uma vez que P (f(a), x) % #, ¬P (y, h(z)) % $ e P (f(a), x) e ¬¬P (y, h(z))sao unificaveis com a substituicao {f(a)/y, h(z)/x}, podemos aplicar o prin-cıpio da resolucao inferindo a clausula

{Q(f(y), z)} · {f(a)/y, h(z)/x} = {Q(f(f(a)), x)}.

Esta aplicacao do princıpio da resolucao e apresentada graficamente na Fi-gura 3.2, na qual em cada clausula se sublinham os literais unificados e aolado de uma das linhas correspondentes a aplicacao do princıpio da resolucaose indica o unificador utilizado. `

Com a utilizacao de clausulas com variaveis, a resolucao pode ser utilizadapara responder a dois tipos de questoes, questoes do tipo “verdadeiro oufalso” e questoes do tipo “quem ou qual”.

As questoes do tipo “verdadeiro ou falso” pretendem saber se uma dadaclausula pode ser derivada de um conjunto de clausulas.

Page 177: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 165

{AD(Sr.B, Marge)} {¬AD(x, y), Ant(x, y)}

4444444444{Sr.B/x, Marge/y}

{Ant(Sr.B, Marge)} {¬Ant(x, y),¬AD(y, z), Ant(x, z)}

3333333333{Sr.B/x, Marge/y}

{¬AD(Marge, z), Ant(Sr.B, z)}{AD(Marge, Bart)}

4444444444{Bart/z}

{Ant(Sr.B, Bart)} {¬Ant(Sr.B, Bart)}

3333333333

{}

Figura 3.3: Resolucao com uma questao do tipo “verdadeiro ou falso”.

Exemplo 3.2.19 Consideremos as seguintes afirmacoes, “um ascendentedirecto de uma pessoa e seu antepassado”, “um antepassado de um ascen-dente directo de uma pessoa e um antepassado dessa pessoa”,15 “a Margee um ascendente directo do Bart” e “o Sr.B e um ascendente directo daMarge”:

/x, y[AD(x, y) # Ant(x, y)] (3.80)

/x, y, z[Ant(x, y) !AD(y, z) # Ant(x, z)] (3.81)

AD(Marge,Bart) (3.82)

AD(Sr.B, Marge) (3.83)

Tentemos saber se “o Sr.B e um antepassado do Bart”, ou seja, tentemossaber se as fbfs 3.80 a 3.83 permitem derivar a fbf Ant(Sr.B, Bart).

Usando a resolucao, devemos converter as fbfs 3.80 a 3.83 para a formaclausal, obtendo

{¬AD(x, y), Ant(x, y)} (3.84)15Ver as definicoes das relacoes AD e Ant nas paginas 146 e 146 e as fbfs 3.65 e 3.66.

Page 178: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

166 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

{¬Ant(x, y),¬AD(y, z), Ant(x, z)} (3.85)

{AD(Marge,Bart)} (3.86)

{AD(Sr.B, Marge)} (3.87)

e adicionando a estas clausulas a clausula que corresponde a negacao daconclusao

{¬Ant(Sr.B, Bart)}. (3.88)

Podemos agora realizar a seguinte prova por refutacao. Para facilitar acompreensao das provas, a direita de cada linha, indicamos, em letra maispequena, a substituicao que foi aplicada.

1 {¬AD(x, y), Ant(x, y)} Prem2 {¬Ant(x, y),¬AD(y, z), Ant(x, z)} Prem3 {AD(Marge,Bart)} Prem4 {AD(Sr.B, Marge)} Prem5 {¬Ant(Sr.B, Bart)} Prem6 {Ant(Sr.B, Marge)} Res, (1, 4), {Sr.B/x, Marge/y}

7 {¬AD(Marge, z), Ant(Sr.B, z)} Res, (2, 6), {Sr.B/x, Marge/y}

8 {Ant(Sr.B, Bart)} Res, (3, 7), {Bart/z}

9 {} Res, (5, 8), {}

O processo de resolucao encontra-se representado graficamente na Figura 3.3,na qual as premissas sao representadas dentro de um rectangulo. `

Nas questoes do tipo “quem ou qual” nao estamos interessados em saber seuma dada proposicao e consequencia de um conjunto de clausulas, mas simquais sao as instancias que fazem com que uma fbf que contem variaveislivres seja a consequencia de um conjunto de clausulas.

Exemplo 3.2.20 Consideremos, de novo, as fbfs 3.80 a 3.83, e tentemossaber quem sao os antepassados do Bart. Neste caso, estamos a procura desubstituicoes que tornam a fbf Ant(x,Bart) uma consequencia das premis-sas.

De modo a fornecer uma resposta a esta questao, utilizando resolucao, paraalem de necessitarmos de transformar as premissas em forma clausal, podere-

Page 179: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.2. O SISTEMA DEDUTIVO 167

mos adicionar uma nova fbf que especifica quais sao as respostas desejadas16

/x[Ant(x,Bart) # R(x)] (3.89)

na qual R(x) tem o seguinte significado:

R(x) = x e uma resposta.

Usando a resolucao, podemos construir a seguinte prova:

1 {¬AD(x, y), Ant(x, y)} Prem2 {¬Ant(x, y),¬AD(y, z), Ant(x, z)} Prem3 {AD(Marge,Bart)} Prem4 {AD(Sr.B, Marge)} Prem5 {¬Ant(x,Bart), R(x)} Prem6 {Ant(Marge,Bart)} Res, (1, 3), {Marge/x, Bart/y}

7 {R(Marge)} Res, (5, 6), {Marge/x}

8 {Ant(Sr.B, Marge)} Res, (1, 4), {Sr.B/x, Marge/y}

9 {¬AD(Marge, z), Ant(Sr.B, z)} Res, (2, 8), {Sr.B/x, Marge/y}

10 {Ant(Sr.B, Bart)} Res, (3, 9), {Bart/z}

11 {R(Sr.B)} Res, (5, 10), {Sr.B/x}

Desta prova concluimos que a Marge e o Sr.B sao os antepassados do Bart.Este processo de resolucao encontra-se representado graficamente na Fi-gura 3.4. `

Exemplo 3.2.21 Consideremos as proposicoes que afirmam que “todas aspessoas tem uma mae”, “todas as maes sao mulheres” e que “o Bart e umapessoa”:

/x[Pessoa(x) # 0y[Mae(y, x)]] (3.90)

/x, y[Mae(x, y) # Mulher(x)] (3.91)

Pessoa(Bart) (3.92)

Suponhamos que querıamos saber quais as mulheres que estao envolvidasnestas proposicoes. Estamos novamente numa situacao em que tentamosresponder a uma questao do tipo “quem ou qual”, e para a responder adi-cionaremos as nossas premissas a informacao de que as respostas pretendidascorrespondem aos nomes das mulheres

/x[Mulher(x) # R(x)]. (3.93)16A adicao desta nova fbf nao e obrigatoria pois estamos a procura de formulas chas

que contenham o predicado Ant com Bart como segundo argumento. No entanto, estaabordagem permite explicitar quais sao as entidades que correspondem a respostas.

Page 180: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

168 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

{AD(Sr.B, Marge)} {¬AD(x, y), Ant(x, y)}

55555555555555555555{Sr.B/x,Marge/y}

{Marge/x,Bart/y}

{Ant(Sr.B, Marge)} {¬Ant(x, y),¬AD(y, z), Ant(x, z)}

3333333333{Sr.B/x, Marge/y}

{¬AD(Marge, z), Ant(Sr.B, z)} {AD(Marge, Bart)}

3333333333

4444444444{Bart/z}

{Ant(Sr.B, Bart)} {Ant(Marge, Bart)}{¬Ant(x, Bart), R(x)}

{R(Sr.B)} {R(Marge)}3333333333

4444444444{Sr.B/x} {Marge/x}

Figura 3.4: Resolucao com uma questao do tipo “quem ou qual”.

Page 181: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 169

Transformando as premissas para a forma clausal, obtemos as seguintesclausulas:

{¬Pessoa(x), Mae(m(x), x)} (3.94)

{¬Mae(x, y), Mulher(x)} (3.95)

{Pessoa(Bart)} (3.96)

{¬Mulher(x), R(x)}. (3.97)

Note-se que m e uma funcao de Skolem em que m(x) representa a mae dex.

Usando o princıpio da resolucao podemos obter a seguinte prova:

1 {¬Pessoa(x), Mae(m(x), x)} Prem2 {¬Mae(x, y), Mulher(x)} Prem3 {Pessoa(Bart)} Prem4 {¬Mulher(x), R(x)} Prem5 {Mae(m(Bart), Bart)} Res, (1, 3), {Bart/x}

6 {Mulher(m(Bart))} Res, (2, 5), {m(Bart)/x, Bart/y}

7 {R(m(Bart))} Res, (4, 6), {m(Bart)/x}

Desta prova concluimos que a unica mulher conhecida e a mae do Bart, cujonome nao esta explicitado nas premissas. `

3.2.3 Propriedades do sistema dedutivo

O sistema dedutivo da logica de primeira ordem apresenta as mesmas pro-priedades que enunciamos na Seccao 2.2.4 para a logica proposicional. Asdemonstracoes sao identicas.

3.3 O sistema semantico

3.3.1 A semantica da logica de primeira ordem

O sistema semantico especifica em que condicoes as fbfs da nossa linguagemsao verdadeiras ou falsas. Recorde-se que uma fbf e apenas uma sequencia desımbolos, combinados segundo determinadas regras sintacticas. Assim, paradeterminar a verdade ou falsidade de uma fbf sera necessario, em primeirolugar, “interpretar” cada um dos seus sımbolos constituintes por forma a

Page 182: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

170 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Figura 3.5: Situacao do mundo.

atribuir um significado a fbf. O passo seguinte sera verificar se o significadoatribuıdo a fbf esta de acordo com o mundo ou com a situacao que pretende-mos descrever. Em caso afirmativo diremos que a fbf e verdadeira, em casocontrario diremos que a fbf e falsa.

Exemplo 3.3.1 Suponhamos que desejavamos descrever a situacao repre-sentada na Figura 3.5, usando o seguinte conjunto de fbfs:17

Arvore(a1) (3.98)

Arvore(a2) (3.99)

Casa(c1) (3.100)

Casa(c2) (3.101)

Adjacente(c2, a1) (3.102)

Adjacente(a1, a2) (3.103)

Adjacente(a2, c1) (3.104)

Adjacente(c2, esquerda de(a2)) (3.105)

Juntamente com fbfs que relacionam alguns dos predicados utilizados nasformulas:

/x, y[Adjacente(x, y) # Adjacente(y, x)] (3.106)

/x, y, z[(Adjacente(x, y) !Adjacente(y, z) ! x 6= y) # Entre(x, y, z)](3.107)

17Propositadamente nao apresentamos o significado intuitivo destas relacoes.

Page 183: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 171

A fbf Adjacente(a1, a2) so fara sentido se atribuirmos um significado aossımbolos Adjacente, a1 e a2. Suponhamos que fornecemos um significadopara estes sımbolos, de modo a que a fbf Adjacente(a1, a2) significa “a arvorede copa preta e adjacente a arvore de copa branca”. De acordo com estaintrepretacao, a fbf Adjacente(a1, a2) e verdadeira. `

Este processo para determinar se uma fbf e verdadeira ou falsa vai ser usadonesta seccao, mas precisa de ser formalizado para ter qualquer utilidadenum sistema logico. Com efeito, ha pelo menos dois aspectos que nao saoaceitaveis nos passos que seguimos no Exemplo 3.3.1. Em primeiro lugar,o significado da fbf foi dado por uma frase em lıngua natural, com todasas ambiguidades que daı podem decorrer (por exemplo, o significado darelacao “Adjacente” e ambıguo; sera que a arvore de copa branca tambemseria adjacente a arvore de copa preta se entre estas duas entidades existisseuma casa?). Em segundo lugar, a descricao da situacao em causa foi feitaatraves de uma figura, que nao pode, como e obvio, ser considerada umadescricao formal, embora seja muito util.

Assim, o que faremos e definir formalmente, como determinar se uma fbf everdadeira ou falsa. Comecaremos por ver como descrever um mundo ousituacao. Esta descricao designa-se por conceptualizacao.

Define-se uma conceptualizacao como um triplo (D,F, R) em que:

1. D e o conjunto das entidades que constituem o mundo sobre o qualvamos falar, o chamado universo de discurso. No universo de discursodefinimos todas as entidades que poderemos considerar (note-se queestas entidades correspondem a um subconjunto de todas as entida-des do mundo real; elas correspondem apenas aquelas entidades quenos interessa considerar). Estas poderao ser entidades concretas (porexemplo, o planeta Venus, a cidade de Lisboa, Vasco da Gama ou umconjunto de blocos), abstractos (por exemplo, o conceito de beleza ouo conjunto dos numeros naturais) ou ficcionais (por exemplo, SherlockHolmes ou a Branca de Neve).

2. F e o conjunto das funcoes que podem ser aplicadas as entidades douniverso de discurso. Tal como na explicitacao do universo de discursoem que apenas consideramos um subconjunto de todas as entidadesexistentes (aquele subconjunto de entidades que nos interessa parauma dada aplicacao), aqui, entre todas as possıveis funcoes sobre asentidades do universo de discurso, apenas iremos considerar um sub-

Page 184: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

172 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

conjunto. Por exemplo, se o universo de discurso incluısse os numerosnaturais, uma das funcoes que poderıamos considerar, seria a funcao“sucessor”; se o universo de discurso contivesse as entidades represen-tadas na Figura 3.5, uma das funcoes que poderıamos considerar seriaa funcao “direita de”.Recorde-se que uma funcao de aridade n e representada por um con-junto de (n + 1)-tuplos de entidades do universo de discurso. Porexemplo, se a situacao a descrever fosse a situacao representada naFigura 3.5 em que apenas existiam 4 entidades, , , e , a funcao“direita de” referida atras, seria definida por {( , ), ( , ), ( , )}.Note-se que uma funcao pode ser parcial, ou seja, pode nao estar de-finida para todos os elementos do universo de discurso, como e o casoda funcao “direita de”.

3. R e o conjunto das relacoes ou predicados que podem ser aplicados asentidades do universo de discurso. Novamente, entre todas as relacoespossıveis envolvendo as entidades do universo de discurso, apenas con-sideramos aquelas que consideramos relevantes. Por exemplo, se ouniverso incluısse os numeros naturais, uma das possıveis relacoes se-ria a relacao “Menor”; se o universo de discurso contivesse as enti-dades representadas na Figura 3.5, uma das relacoes que poderıamosconsiderar seria a relacao “Casa”.Recorde-se que uma relacao de aridade n e definida por um conjuntode n-tuplos de entidades do universo de discurso. Por exemplo, se ouniverso de discurso fossem os numeros naturais de 1 a 3, a relacao“Menor” seria definida por {(1, 2), (1, 3), (2, 3)}.

Definicao 3.3.1 (Conceptualizacao) Uma conceptualizacao e um triplo(D,F, R) em que D e o conjunto das entidades que constituem o mundo sobreo qual vamos falar, F e o conjunto das funcoes que podem ser aplicadas asentidades de D, e R e o conjunto das relacoes ou predicados que podem seraplicados as entidades de D. !

Uma conceptualizacao descreve formalmente uma situacao ou um mundo. Eimportante notar que, dada uma situacao, nao existira apenas uma concep-tualizacao que a descreve. A escolha de uma determinada conceptualizacaodependera dos aspectos relevantes para a aplicacao em vista.

Exemplo 3.3.2 Consideremos novamente a situacao representada na Fi-gura 3.5. Podemos criar a seguinte conceptualizacao:

Page 185: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 173

1. Universo de discurso.

D ={ , , , }

2. Conjunto de funcoes. Consideramos apenas duas funcoes:

f1 = {( , ), ( , ), ( , )}

f2 = {( , ), ( , ), ( , )}Por conseguinte:

F = {{( , ), ( , ), ( , )}, {( , ), ( , ), ( , )}}

3. Conjunto de relacoes. Iremos considerar quatro relacoes:

R1 = {( ), ( )}

R2 = {( ), ( )}

R3 = {( , ), ( , ), ( , ), ( , ), ( , ), ( , )}

R4 = {( , , ), ( , , )}Entao:

R = {{( ), ( )}, {( ), ( )},{( , ), ( , ), ( , ), ( , ), ( , ), ( , )},{( , , ), ( , , )}}

`

Uma vez definido o conceito de conceptualizacao, podemos passar a definicaode um conceito fundamental em semantica, o conceito de interpretacao. Umainterpretacao e uma funcao, I, cujo domınio sao as entidades da linguageme o contradomınio sao as entidades da conceptualizacao. O facto de umainterpretacao ser uma funcao das entidades da linguagem para as entida-des da conceptualizacao significa, entre outras coisas, que cada constanteda linguagem e associada apenas a uma entidade da conceptualizacao mastambem que varias constantes da linguagem podem ser associadas a mesmaentidade da conceptualizacao. Sendo ! uma entidade da linguagem, e habi-tual escrever I(!) para representar o resultado da aplicacao da interpretacaoI a entidade !.

Neste capıtulo apenas nos preocupamos em fornecer interpretacoes parafbfs fechadas.18

18Um tratamento de interpretacoes envolvendo variaveis livres pode ser consultado em[Mendelson 87, paginas 46 a 51].

Page 186: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

174 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Definicao 3.3.2 (Interpretacao – versao 2) Dada uma conceptualizacao(D,F, R), uma interpretacao, I, deve obedecer as seguintes condicoes:

1. Cada constante individual f0i e associada com uma entidade do uni-

verso de discurso D;

2. Cada letra de funcao fni e associada a uma funcao de F . Se fn

i euma letra de funcao com aridade n, correspondendo a funcao I(fn

i )da conceptualizacao, e se t1, . . ., tn sao termos, entao fn

i (t1, . . . , tn)corresponde a entidade I(fn

i )(I(t1), . . . , I(tn)) da conceptualizacao;

3. A cada letra de predicado Pni e associada uma relacao de R. !

Exemplo 3.3.3 Considerando os exemplos 3.3.1 e 3.3.2, podemos fornecera seguinte interpretacao:

I(a1) )#

I(a2) )#

I(c1) )#

I(c2) )#

I(esquerda de) )# {( , ), ( , ), ( , )}

I(direita de) )# {( , ), ( , ), ( , )}

I(Arvore) )# {( ), ( )}

I(Casa) )# {( ), ( )}

I(Adjacente) )# {( , ), ( , ), ( , ), ( , ), ( , ), ( , )}

I(Entre) )# {( , , ), ( , , )} `

Definicao 3.3.3 (Satisfacao – versao 2) Dada uma fbf !, e uma inter-pretacao I, diz-se que I satisfaz ! nas seguintes condicoes:

1. Se ! for uma fbf atomica, ou seja, uma fbf da forma Pni (t1, . . . , tn), a

interpretacao I satisfaz ! se e so se o n-tuplo (I(t1), . . . , I(tn)) for umelemento da relacao I(Pn

i ).

2. A interpretacao I satisfaz a fbf ¬! se e so se I nao satisfizer !.

Page 187: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 175

3. A interpretacao I satisfaz a fbf ! ! # se e so se I satisfizer ambas asfbfs, ! e #.

4. A interpretacao I satisfaz a fbf !" # se e so se I satisfizer pelo menosuma das fbfs, ! ou #.

5. A interpretacao I satisfaz a fbf ! # # se e so se I nao satisfizer ! ouI satisfizer #.

6. A interpretacao I satisfaz a fbf /x[!] se e so se, para toda a substituicao{a/x}, em que “a” e qualquer constante individual, I satisfizer ! ·{a/x}.

7. A interpretacao I satisfaz a fbf 0x[!] se e so se existir uma substituicao{a/x}, em que “a” e uma constante individual, tal que I satisfaz ! ·{a/x}. !

Exemplo 3.3.4 Considerando os exemplos 3.3.1 a 3.3.3, a interpretacao Isatisfaz as fbfs

Arvore(a1)

eAdjacente(c2, esquerda de(a2)).

Com efeito,

1. Arvore(a1).

O tuplo (I(a1)) = ( ) pertence a relacao I(Arvore) = {( ), ( )};

2. Adjacente(c2, esquerda de(a2)).

O tuplo

(I(c2), I(esquerda de(a2))) = ( , I(esquerda de)(I(a2))) =

= ( , I(esquerda de)( )) = ( , )

pertence a relacao

I(Adjacente) = {( , ), ( , ), ( , ), ( , ), ( , ), ( , )}.

`

Page 188: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

176 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Definicao 3.3.4 (Formula verdadeira segundo uma interpretacao)Dizemos que a fbf ! e verdadeira segundo a interpretacao I, se e so se I sa-tisfizer !; em caso contrario, diremos que ! e falsa segundo a interpretacaoI (ou que a interpretacao I falsifica a fbf !). !

Se ! for verdadeira segundo a interpretacao I escreveremos |=I !.

Definicao 3.3.5 Analogamente ao que definimos em logica proposicional,dada uma fbf !, dizemos que:

• ! e satisfazıvel se existe uma interpretacao que satisfaz !;

• ! e contraditoria ou nao satisfazıvel se nenhuma interpretacao satisfaz!;

• ! e tautologica se todas as interpretacoes satisfazem !;

• ! e falsificavel se existe uma interpretacao que nao satisfaz !. !

Definicao 3.3.6 (Modelo) Uma interpretacao que satisfaz todas as fbfs deum conjunto de fbfs, chama-se um modelo dessas fbfs. !

Definicao 3.3.7 Caso exista um modelo para um conjunto de fbfs estasdizem-se satisfazıveis. Definem-se analogamente os conceitos de conjunto defbfs nao satisfazıveis (ou contraditorias), tautologicas e falsificaveis. !

Exemplo 3.3.5 Nos exemplos 3.3.1 a 3.3.4, a interpretacao I satisfaz todasas fbfs do seguinte conjunto (expressoes 3.98 a 3.107):

{Arvore(a1), Arvore(a2), Casa(c1), Casa(c2), Adjacente(c2, a1),Adjacente(a1, a2), Adjacente(a2, c1), Adjacente(c2, esquerda de(a2)),/x, y[Adjacente(x, y) # Adjacente(y, x)],/x, y, z[(Adjacente(x, y) !Adjacente(y, z) ! x 6= y) # Entre(x, y, z)]}.

Portanto, esta interpretacao e um modelo destas fbfs. `

Exemplo 3.3.6 Se considerarmos, contudo, a interpretacao J , definida doseguinte modo:

J(a1) )#

J(a2) )#

J(c1) )#

Page 189: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 177

J(c2) )#

J(esquerda de) )# {( , ), ( , ), ( , )}

J(direita de) )# {( , ), ( , ), ( , )}

J(Arvore) )# {( ), ( )}

J(Casa) )# {( ), ( )}

J(Adjacente) )# {( , ), ( , ), ( , ), ( , ), ( , ), ( , )}

J(Entre) )# {( , , ), ( , , )}

As fbfs Adjacente(c2, a1) e Adjacente(a2, c1), por exemplo, tem o valor falsopelo que J nao e um modelo das fbfs anteriores. `

Definicao 3.3.8 (Consequencia logica) Seja ! um conjunto de fbfs fe-chadas e seja ! uma fbf fechada, diz-se que ! e uma consequencia logicade !, escrito ! |= !, se todas as interpretacoes que sejam modelos de !tambem sao modelos de !. !

Teorema 3.3.1 Seja ! um conjunto de fbfs fechadas e seja ! uma fbf fe-chada, entao ! e uma consequencia logica de ! se e so se ! ' {¬!} nao esatisfazıvel.

Demonstracao:

* Se ! e uma consequencia logica de ! entao !'{¬!} nao e satisfazıvel.Suponhamos que ! e uma consequencia logica de !. Seja I um modelode !. Por definicao, I tambem e um modelo de !. Entao I nao e ummodelo de ! ' {¬!}, pelo que este conjunto nao e satisfazıvel.

8 Se !'{¬!} nao e satisfazıvel entao ! e uma consequencia logica de !.Seja I uma interpretacao. Suponhamos que I e um modelo de !. Como!'{¬!} nao e satisfazıvel, I nao pode ser um modelo de {¬!}. Entaoqualquer modelo de ! e tambem um modelo de !.

"

3.3.2 O metodo de Herbrand

Uma das questoes essenciais para a Informatica e conhecida pelo problemada decisao. De uma forma simples, o enunciado geral do problema de decisao

Page 190: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

178 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Frases da linguagem

Frases demonstraveiscomo contradicoes

Frases correspondentesa contradicoes

Frases demonstraveiscomo tautologias

Frases correspondentesa tautologias

Figura 3.6: Representacao do teorema da incompletude de G’odel.

corresponde, a partir de um conjunto infinito de entidades C pertencentes auma linguagem formal, tentar saber se e possıvel escrever um programa (umprocedimento mecanico) que recebe uma frase da linguagem, f , e e capazde decidir, apos um numero finito de passos, se f % C ou se f 6% C . Se talprograma for provado existir o problema diz-se decidıvel, em caso contrario,o problema diz-se indecidıvel. Dentro da classe dos problemas indecidıveis,pode acontecer que seja garantido que existe um procedimento mecanico queapos um numero finito de passos e capaz de decidir se f % C , mas que podenunca terminar se f 6% C . Neste caso, o problema diz-se semi-decidıvel.

Os principais resultados relacionados com a decidibilidade foram demons-trados por Kurt Godel (1906–1978), o qual provou que dentro de determina-dos ramos da matematica, existira sempre um conjunto de afirmacoes quenao podem ser provadas como verdadeiras ou como falsas, usando as re-gras e os axiomas desse ramo das matematicas. Este resultado e conhecidopelo teorema da incompletude de G’odel (Figura 3.6). Uma consequenciadeste resultado e que todas as teorias matematicas com uma complexidadeinteressante sao incompletas, ou seja, cada uma contem mais afirmacoesverdadeiras do que e possıvel provar com as regras da teoria.

Um outro resultado, conhecido pelo teorema da indecidibilidade de G’odel,afirma que em certas classes de teorias matematicas nao existe um algoritmopara decidir se uma frase arbitraria e um teorema da teoria.

A aplicacao de um problema de decisao a logica corresponde a determinarse e possıvel escrever um programa que decide se |= ! se verifica, sendo !uma fbf arbitraria. Para logica proposicional, sabemos do Capıtulo 2 que este

Page 191: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 179

procedimento existe. Infelizmente, um procedimento equivalente nao podeser desenvolvido para a logica de primeira ordem. Este resultado negativo,demonstrado por Alonzo Church em 1936, e traduzido pelo seguinte teoremaque apresentamos sem demonstracao:

Teorema 3.3.2 (Indecidibilidade da logica de primeira ordem)Nao existe um algoritmo para decidir se uma frase arbitraria de LLPO e umatautologia.

Contudo, a logica de primeira ordem e semi-decidıvel, ou seja, existe umalgoritmo que e garantido terminar num numero finito de passos, demons-trando que um conjunto de formulas nao e satisfazıvel, mas que pode nuncaterminar se o conjunto de formulas nao for nao satisfazıvel. Nesta seccaoconsideramos um metodo para determinar se um determinado conjunto declausulas e nao satisfazıvel, ou seja que nao existe nenhum modelo que sa-tisfaca todas as clausulas do conjunto. Os resultados que apresentamos saoconhecidos pelo metodo de Herbrand.19

Recordemos que o objectivo da logica e determinar os argumentos que saovalidos, ou seja, os argumentos (!, !) tais que ! |= !. Do Teorema 3.3.1, sa-bemos que provar que ! |= ! corresponde a provar que o conjunto !'{¬!}nao e satisfazıvel. Ou seja, teremos que provar que nao existe nenhuma in-terpretacao que satisfaz o conjunto, o que parece ser um problema muitocomplicado. No entanto, existe uma classe muito mais simples de inter-pretacoes, as interpretacoes de Herbrand, aplicaveis a conjuntos de clausulas,as quais correspondem a tudo que e necessario investigar para determinar anao satisfazibilidade.

Definicao 3.3.9 (Universo de Herbrand) Seja ! um conjunto de clau-sulas. O universo de Herbrand define-se atraves dos seguintes conjuntos:

1. Seja U0 o conjunto de todas as constantes existentes em !.

Se nao existirem constantes em !, entao U0 sera constituıdo por umaunica constante, por exemplo, U0 = {a}.

2. Para i 3 0, seja Ui+1 a uniao de Ui com o conjunto de todos os termosda forma fn(t1, . . . , tn) para todas as funcoes n-arias (n 4 i) existentesem !, nos quais t1, . . ., tn sao elementos de Ui.

19Em honra do matematico frances Jacques Herbrand (1908–1931), que o inventou.

Page 192: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

180 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Cada um dos conjuntos Ui chama-se o conjunto das constantes de Herbrandde ! ao nıvel i.

O conjunto U! = limi() Ui chama-se o universo de Herbrand para !. !

O universo de Herbrand e o conjunto de todos os termos fechados que epossıvel construir a partir do conjunto de clausulas !. Se ! contem umsımbolo de funcao, por exemplo, a funcao de um argumento f , entao ouniverso de Herbrand e infinito uma vez que f(f(. . . f(a) . . .)) % U!.

Exemplo 3.3.7 Seja ! = {{P (x, a)}, {¬Q(b, y)}}. Entao

U0 = {a, b}

U! = {a, b} `

Exemplo 3.3.8 Seja ! = {{P (a)}, {¬P (x), Q(f(x))}}. Entao

U0 = {a}

U1 = {a, f(a)}

U2 = {a, f(a), f(f(a))}...

U! = {a, f(a), f(f(a)), f(f(f(a))), . . .} `

Exemplo 3.3.9 Seja ! = {{P (f(x), a, g(y), b)}}. Entao

U0 = {a, b}

U1 = {a, b, f(a), f(b), g(a), g(b)}

U2 = {a, b, f(a), f(b), g(a), g(b), f(f(a)), f(f(b)), f(g(a)), f(g(b)), g(f(a)),g(f(b)), g(g(a)), g(g(b))}

...

`

Definicao 3.3.10 (Base de Herbrand) Seja ! um conjunto de clausulas.O conjunto de todas as fbfs atomicas da forma Pn(t1, . . . , tn) para todos ospredicados n-arios, Pn (n 3 0), existentes em !, em que t1, . . . , tn perten-cem ao universo de Herbrand para ! tem o nome de base de Herbrand para

Page 193: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 181

! e e representado por "!.20 !

A base de Herbrand para um conjunto de clausulas ! e o conjunto de to-das as fbfs atomicas fechadas21 que e possıvel construir com as letras depredicado em ! e com os termos em U!.

Notemos que poderıamos ter definido, tanto o universo de Herbrand comoa base de Herbrand para um conjunto arbitrario de fbfs !. No entanto,se ! nao fosse um conjunto de clausulas mas sim um conjunto arbitrariode fbfs, a base de Herbrand nao conteria todos os termos fechados que epossıvel construir a partir de !. Para perceber esta afirmacao, consideremosa fbf P (a) ! 0x[¬P (x)]. Usando a Definicao 3.3.9, o universo de Herbrandapenas continha a constante a, no entanto, sera possıvel construir termos apartir da fbf 0x[¬P (x)]. A transformacao da fbf original em forma clausalorigina as clausulas {{P (a)}, {¬P (b)}}, nas quais b e uma constante deSkolem e o universo de Herbrand sera {a, b}.

Exemplo 3.3.10 Considerando o Exemplo 3.3.7, em que ! = {{P (x, a)},{¬Q(b, y)}}, a base de Herbrand para ! e

"! = {P (a, a), P (a, b), P (b, a), P (b, b), Q(a, a), Q(a, b), Q(b, a), Q(b, b)}.

Note-se a ausencia de literais negativos, resultante directamente da definicaode base de Herbrand. Note-se tambem que para qualquer letra de predicadonao mencionada em !, por exemplo, R, nao e possıvel gerar a partir de !uma clausula que contenha a letra de predicado R, e daı a sua nao inclusaona base de Herbrand para !. `

Exemplo 3.3.11 Considerando o Exemplo 3.3.8, em que ! = {{P (a)},{¬P (x), Q(f(x))}}. Entao, a base de Herbrand para ! e

"! = {P (a), Q(a), P (f(a)), Q(f(a)), P (f(f(a))), Q(f(f(a))), . . .}.

`

Iremos considerar interpretacoes sobre um universo de discurso que corres-ponde ao universo de Herbrand, as interpretacoes de Herbrand. Seja ! umconjunto de clausulas. Uma interpretacao sobre o universo de Herbrand de! e uma atribuicao de constantes e funcoes a U! e de relacoes as entidadesexistentes em !.

20Utilizamos uma letra gregra maiuscula, #, pelo facto da base de Herbrand ser umconjunto de fbfs.

21Note-se que, neste caso, todas as fbfs sao tambem chas.

Page 194: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

182 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Definicao 3.3.11 (Interpretacao de Herbrand) Seja ! um conjunto declausulas, U! o universo de Herbrand de ! e IH uma interpretacao de !sobre U! (ou seja, uma interpretacao cujo universo de discurso e U!).

A interpretacao IH diz-se uma interpretacao de Herbrand de ! se satisfazas seguintes condicoes:

1. A interpretacao IH transforma todas as constantes em si proprias.

/c % U0 IH(c) )# c.

2. Sendo fn uma letra de funcao de aridade n e h1, . . . , hn elementosde U!, a interpretacao IH associa fn a uma funcao que transforma on-tuplo (h1, . . . , hn), um elemento de U!, em fn(h1, . . . , hn), outroelemento de U!.

IH(fn(h1, . . . , hn)) )# fn(IH(h1), . . . , IH(hn)).

3. Nao existem restricoes quanto a associacao de letras de predicado em!. !

Exemplo 3.3.12 Seja ! = {{P (x, a)}, {¬Q(b, y)}}, entao

IH(a) )# a

IH(b) )# b

Sabemos do Exemplo 3.3.10 que a base de Herbrand de ! e

"! = {P (a, a), P (a, b), P (b, a), P (b, b), Q(a, a), Q(a, b), Q(b, a), Q(b, b)}.

Suponhamos queIH(P ) = {(a, a), (b, a)}

e queIH(Q) = { }

Isto significa que tanto P (a, a) como P (b, a) sao satisfeitas por esta inter-pretacao e que tanto Q(b, a) como Q(b, b), por exemplo, nao sao satisfeitaspor esta interpretacao. Ou seja, a interpretacao IH e um modelo do conjunto{P (a, a), P (b, a), ¬Q(b, a),¬Q(b, b)}. `

Page 195: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 183

Seja {P1, P2, . . . , Pn, . . .} a base de Herbrand de !. Uma interpretacao deHerbrand pode ser representada por um conjunto {Q1, Q2, . . . , Qn, . . .}, emque cada um dos Qi e ou Pi ou ¬Pi. O significado desta interpretacao e que,se Qi = Pi, entao Pi tem o valor verdadeiro e se Qi = ¬Pi, entao Pi temo valor falso. Por abuso de linguagem, representamos uma interpretacaode Herbrand por um subconjunto da base de Herbrand correspondente asfbfs que ela satisfaz, ou seja, nao representamos as fbfs que ela nao satisfaz.

Uma vez que numa interpretacao de Herbrand as associacoes as constantese as funcoes de ! sao determinadas a partida, e possıvel identificar umainterpretacao de Herbrand com um subconjunto da base de Herbrand. Paraqualquer interpretacao de Herbrand, o conjunto correspondente da base deHerbrand e o conjunto de todos os literais que sao satisfeitos pela inter-pretacao.

Exemplo 3.3.13 A interpretacao de Herbrand do Exemplo 3.3.12 sera re-presentada por IH = {P (a, a), P (b, a)}. `

Exemplo 3.3.14 Seja

! = {{P (x), Q(x)}, {R(f(y))}}.

O universo de Herbrand de ! e

U! = {a, f(a), f(f(a)), f(f(f(a))), . . .}.

A base de Herbrand e

"! = {P (a), Q(a), R(a), P (f(a)), Q(f(a)), R(f(a)),

P (f(f(a))), Q(f(f(a)))R(f(f(a))),

P (f(f(f(a)))), Q(f(f(f(a)))), R(f(f(f(a)))), . . .}.

Algumas das interpretacoes de Herbrand para este conjunto sao:

IH1 = {P (a), Q(a), R(a), P (f(a)), Q(f(a)), R(f(a)), . . .}.

IH2 = {R(a), R(f(a)), . . .}.

IH3 = {P (a), Q(a), P (f(a)), Q(f(a)), . . .}.

`

Page 196: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

184 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Definicao 3.3.12 (Modelo de Herbrand) Um modelo de Herbrand paraum conjunto de clausulas ! e uma interpretacao de Herbrand, IH , quesatisfaz todas as clausulas de !. !

Definicao 3.3.13 Dada uma interpretacao, I, sobre um universo de dis-curso D, uma interpretacao de Herbrand, IH , correspondente a I e umainterpretacao de Herbrand que satisfaz as seguintes condicoes:

1. Cada elemento hi % U! e transformado num elemento di % D.

2. Se Pn(d1, . . . , dn) e satisfeito (respectivamente, nao satisfeito) pelainterpretacao I, entao Pn(h1, . . . , hn) e tambem satisfeito (respectiva-mente, nao satisfeito) pela interpretacao IH . !

Teorema 3.3.3 Seja ! um conjunto de clausulas. O conjunto ! tem ummodelo se e so se ! tem um modelo de Herbrand.

Demonstracao:

* Se ! tem um modelo, entao ! tem um modelo de Herbrand.Seja I um modelo de !. Seja IH a interpretacao de Herbrand definidado seguinte modo

IH = {Pn(t1, . . . , tn) : (IH(t1), . . . , IH(tn)) % I(Pn)},

em que Pn e um predicado de aridade n pertencente a base de Herbrand.Esta interpretacao de Herbrand contem todas as fbfs atomicas chas quepertencem a base de Herbrand e que sao satisfeitas pela interpretacaoI. Falta-nos mostrar que IH e um modelo de !.Recordemos que um conjunto de clausulas e uma fbf fechada que cor-responde a uma conjuncao de disjuncoes de literais. Esta fbf pode tervariaveis, as quais estao quantificadas universalmente. Para mostrarque IH e um modelo de !, bastara mostrar que para qualquer atri-buicao de elementos do universo de Herbrand as variaveis existentes em!, pelo menos um literal em cada disjuncao pertence ao conjunto IH .Uma vez que I e um modelo do conjunto de clausulas !, a clausula re-sultante de qualquer atribuicao de constantes as variaveis em ! satisfaza interpretacao IH , portanto IH e um modelo de !.

8 Se ! tem um modelo de Herbrand, entao ! tem um modelo.Dado que um modelo de Herbrand e um modelo, esta demonstracao etrivial.

"

Page 197: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 185

. . . . . . . . .. . . . . .. . .. . . . . .

P (b, a) P (b, a)

. . .

P (b, a) P (b, a)

P (a, b) P (a, b)

P (a, a)

Figura 3.7: Arvore de decisao para o conjunto ! = {{P (x, a)}, {¬Q(b, y)}}.

Corolario 3.3.1 Seja ! um conjunto de clausulas. Entao ! e nao satis-fazıvel se e so se ! nao tem nenhum modelo de Herbrand.

Demonstracao: Resulta directamente do Teorema 3.3.3. "

Com o metodo de Herbrand conseguimos transformar o problema de saber seum dado conjunto de clausulas e nao satisfazıvel no problema de determinarque nao existe nenhum modelo de Herbrand que satisfaca esse conjunto declausulas. Esta afirmacao parece nao corresponder a um grande progresso,no entanto, como a base de Herbrand e constituıda por fbfs chas, estamosproximos de uma situacao analoga a da logica proposicional, pois nao temosque lidar com variaveis. Dada uma base de Herbrand, podemos construiruma arvore de decisao binaria para os modelos das clausulas subjacentes aessa base de Herbrand.

Exemplo 3.3.15 Consideremos o Exemplo 3.3.10. Na Figura 3.7 mos-tramos, parcialmente, a arvore de decisao para determinar os modelos de! = {{P (x, a)}, {¬Q(b, y)}}. Esta arvore de decisao tem 8 nıveis, o numerode elementos da base de Herbrand, indicando as suas folhas com rotulo Vas interpretacoes que tornam todas as clausulas do conjunto verdadeiras. `

Quando a base de Herbrand e um conjunto infinito, a arvore de decisaocorrespondente e tambem infinita.

Notemos que, em qualquer no da arvore de decisao, o caminho desde a raiz

Page 198: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

186 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

. . . . . . . . .. . . . . .. . .. . . . . .

P (b, a) P (b, a)

. . .

P (b, a) P (b, a)

P (a, b) P (a, b)

P (a, a)

Figura 3.8: No para o qual se considera uma interpretacao parcial.

ate esse no determina uma interpretacao parcial associada a base de Her-brand, pois determina os valores logicos dos elementos da base de Herbrandate esse no. Esta interpretacao diz-se parcial pois nao estao determinadostodos os valores para as fbfs atomicas.

Exemplo 3.3.16 Consideremos novamente o Exemplo 3.3.15. O no indi-cado dentro de um rectangulo na Figura 3.8 corresponde a uma interpretacaoparcial na qual P (a, a) e verdadeira e P (a, b) e falsa. Neste no, ainda naoforam tomadas decisoes em relacao aos valores logicos dos restantes literaisda base de Herbrand, por exemplo, ainda nada se sabe quanto ao valor logicodo literal P (b, b). `

A importancia das interpretacoes parciais resulta do facto de estas permi-tirem determinar que uma dada interpretacao nao satisfaz um conjunto declausulas.

Definicao 3.3.14 (No falhado) Dada uma arvore de decisao para umconjunto de clausulas !, dizemos que um no desta arvore e um no falhadose a interpretacao parcial correspondente a esse no falsifica alguma clausulaem ! (e consequentemente falsifica !). Um no falhado e representado gra-ficamente por uma cruz. !

Notemos que ao encontrar um no falhado, nao interessa continuar a explorara arvore abaixo desse no, pois ja sabemos que todos os ramos abaixo delenao irao satisfazer o conjunto de clausulas.

Page 199: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.3. O SISTEMA SEMANTICO 187

P (a)

X Q(f(a))

XX

Figura 3.9: Arvore de decisao fechada.

Definicao 3.3.15 (Arvore de decisao fechada) Dada uma arvore de de-cisao para um conjunto de clausulas !, dizemos que esta arvore e fechadase todos os ramos da arvore terminarem em nos falhados. !

Exemplo 3.3.17 Consideremos o conjunto de clausulas

! = {{P (x)}, {¬P (x), Q(f(x))}, {¬Q(f(a))}}.

Para este conjunto de clausulas, temos a seguinte base de Herbrand:

"! = {P (a), Q(a), P (f(a)), Q(f(a)), P (f(f(a))), Q(f(f(a))), . . .}.

Consideremos a arvore de decisao fechada representada na Figura 3.9. Note-mos que o no da esquerda corresponde a interpretacao parcial na qual P (a)e falsa. Esta interpretacao parcial falsifica a clausula {P (x)}, falsificandotodo o conjunto de clausulas. O no Q(f(a)), indicado na figura, correspondea interpretacao parcial na qual P (a) e verdadeira. Neste caso, se Q(f(a))for verdadeira, a clausula {¬Q(f(a))} e falsificada e se Q(f(a)) for falsa, aclausula {¬P (x), Q(f(x))} e falsificada, pelo que ambos os nos abaixo desteno sao nos falhados.

Repare-se que neste caso, apesar da base de Herbrand ser infinita, consegui-mos determinar, num numero finito de passos, que o conjunto de clausulase nao satisfazıvel. Isto e uma consequencia da semi-decidibilidade da logicade primeira ordem. `

O teorema de Herbrand, directamente relacionado com o Corolario 3.3.1,serve de base para grande numero de resultados associados com o raciocınio

Page 200: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

188 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

automatico. O Corolario 3.3.1 afirma que se um conjunto de clausulas ! naotem nenhum modelo de Herbrand (ou seja se nao e satisfeito por nehumainterpretacao de Herbrand) entao podemos concluir que ! e nao satisfazıvel.Uma vez que normalmente existem muitas interpretacoes de Herbrand paraum conjunto de clausulas (possivelmente um numero infinito), devemos ex-plora-las de um modo sistematico. Este modo sistematico pode correspondera uma arvore de decisao.

Teorema 3.3.4 (Teorema de Herbrand) Um conjunto de clausulas !e nao satisfazıvel se e so se um conjunto finito de instancias fechadas declausulas de ! e nao satisfazıvel.

Demonstracao:

* Se conjunto de clausulas ! e nao satisfazıvel entao um conjunto finitode instancias fechadas de clausulas de ! e nao satisfazıvel.Suponhamos que o conjunto de clausulas ! e nao satisfazıvel. Seja Tuma arvore de decisao para !. Para cada ramo, r, de T , seja Ir! oconjunto de todas as fbfs atomicas correspondentes as decisoes tomadasao longo desse ramo. Claramente Ir! corresponde a uma interpretacaopara !. Uma vez que ! e nao satisfazıvel, Ir! deve falsificar umaclausula !# $ !. Uma vez que !# e um conjunto finito, existe um nofalhado no ramo r (situado a uma profundidade finita). Seja T # a arvorede decisao fechada obtida a partir de T considerando os nos falhadosde cada ramo. Seja !## o conjunto de todas as clausulas em ! que saofalsificadas por todos os nos falhados em T #. O conjunto !## e finitouma vez que T # contem um numero finito de nos falhados. Uma vezque todas as clausulas de !## sao falsas em todas as interpretacoes de!##, o conjunto !## e nao satisfazıvel.

8 Se um conjunto finito de instancias fechadas de clausulas de ! e naosatisfazıvel, entao o conjunto de clausulas ! e nao satisfazıvel.Suponhamos que um conjunto finito de instancias fechadas de clausulasde !, !#, e nao satisfazıvel. Uma vez que cada interpretacao I de !contem uma interpretacao I # de !#, se I # falsifica !#, entao I tambemfalsifica !#. Consequentemente !# e falsificado por cada interpretacao,I de !. Portanto ! e nao satisfazıvel.

"

O teorema anterior transforma o problema da nao satisfazibilidade em logicade primeira ordem no problema de encontrar um conjunto apropriado determos fechados e verificar a sua nao satisfazibilidade utilizando a logicaproposicional.

Page 201: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.4. SOLIDEZ E COMPLETUDE 189

Exemplo 3.3.18 Seja

! = {{¬P (x), Q(f(x), x)}, {P (g(b))}, {¬Q(y, z)}}.22

Este conjunto de clausulas e nao satisfazıvel, dado que nao e satisfeito peloseguinte conjunto de instancias de clausulas fechadas:

{{¬P (g(b)), Q(f(g(b)), g(b))}, {P (g(b))}, {¬Q(f(g(b)), g(b)}}.

`

O teorema de Herbrand permite-nos delinear o seguinte procedimento quefornece um processo de decisao para a validade das formulas da logica deprimeira ordem:

1. Negar a fbf;

2. Transformar o resultado em forma clausal;

3. Gerar um conjunto finito de clausulas fechadas;

4. Verificar se esse conjunto de clausulas nao e satisfazıvel.

Note-se que este procedimento e garantido terminar se a fbf corresponde auma tautologia mas que pode nunca terminar se a fbf nao for uma tautologia.

3.4 Solidez e completude

E possıvel provar as seguintes propriedades para a logica de primeira ordem,as propriedades correspondentes as apresentadas na Seccao 2.4 para a logicaproposicional. A sua demonstracao esta fora do ambito deste livro.

Teorema 3.4.1 (Solidez) A logica de primeira ordem e solida. Para quais-quer fbfs !1, . . ., !k e #, se {!1, . . ., !k} & # entao {!1, . . ., !k} |= #.

Teorema 3.4.2 (Completude) A logica de primeira ordem e completa.Para quaisquer fbfs !1, . . ., !n e #, se {!1, . . ., !n} |= # entao {!1, . . ., !n}& #.

22Exemplo de [Chang e Lee 73, pagina 62].

Page 202: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

190 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

3.5 Notas bibliograficas

A metodologia apresentada neste capıtulo para determinar a verdade oufalsidade de fbfs foi proposta por Alfred Tarski em 1936. Uma traducaoinglesa do artigo original pode ser consultada em [Corcoran 83].

A completude da logica de primeira ordem foi demonstrada por Kurt G’odel(1906–1978) [G’odel 30].

A tentativa de encontrar um procedimento para determinar se uma fbf delogica de primeira ordem e tautologica (ou se e inconsistente) foi inicialmenteabordada por Libniz (1646–1716), tendo sido considerada por Giuseppe Pe-ano (1858–1932) e pela escola de David Hilbert (1862–1943). Em 1936,de uma forma independente, tanto Alonzo Church (1903–1995) [Church 36]como Alan Turing (1912–1954) [Turing 36] demonstraram a impossibilidadede escrever tal procedimento. Uma abordagem importante para determi-nar se uma interpretacao pode falsificar uma fbf foi introduzida por JacquesHerbrand em 1930, sendo a base para a materia apresentada na Seccao 3.3.2.

3.6 Exercıcios

1. Seja fni (t1, . . . , tn) um termo. Suponha que este termo e tambem um

termo fechado. Sera que fni (t1, . . . , tn) e um termo chao? Justifique a

sua resposta.

2. Seja Pni (t1, . . . , tn) uma fbf atomica. Suponha que esta fbf e fechada.

Sera que Pni (t1, . . . , tn) e tambem uma fbf cha? Se sim, justifique a

sua resposta, se nao de um contra-exemplo.

3. Usando deducao natural, prove que as seguintes fbfs sao teoremas:

(a) /x [P (x) " ¬P (x)]

(b) P (a) # ¬/x [¬P (x)]

(c) (P (a) !Q(a)) # (0x [P (x)] ! 0y [Q(y)])

(d) /x [P (x)] # 0y [P (y) "Q(y)]

(e) (P (a) ! /x [P (x) # Q(x)]) # Q(a)

(f) (/x [P (x) # R(x)] ! 0y [P (y)]) # 0z [R(z)]

(g) 0x [P (x) ! ¬Q(x)] # ¬/x [P (x) # Q(x)]

Page 203: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.6. EXERCICIOS 191

4. Usando deducao natural, prove que as seguintes fbfs sao teoremas.Estas fbfs correspondem as regras de De Morgan para quantificadores,tambem conhecidas por segundas leis de De Morgan.

(a) /x[P (x)] ( ¬0x[¬P (x)]

(b) 0x[P (x)] ( ¬/x[¬P (x)]

5. Considere os seguintes predicados:

• >(x, y) = x e maior do que y

• =(x, y) = x e igual a y

• N(x) = x e um numero natural.

Considere tambem as seguintes funcoes:

• s(x) = o sucessor do numero natural x

• +(x, y) = a soma de x com y.

Represente em logica de primeira ordem as seguintes proposicoes:

(a) Para qualquer numero natural, existe outro que e maior do queele.

(b) Nao existe nenhum numero de que zero seja o sucessor.

(c) Qualquer numero tem um e apenas um sucessor.

(d) O sucessor de um numero corresponde a soma desse numero comum.

6. Considere os seguintes predicados:

• P (x) = x e um ponto

• R(x) = x e uma recta

• Em(x, y) = o ponto x pertence a recta y

• L(x, y, z) = a recta x passa pelos pontos y e z

• I(x, y) = x e igual a y.

Represente em logica de primeira ordem as seguintes proposicoes:

(a) Dados dois pontos, existe uma recta que passa por esses pontos.

(b) Para qualquer recta, existe pelo menos um ponto que nao lhepertence (a recta nao passa por esse ponto).

Page 204: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

192 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

(c) Dados tres pontos quaisquer, nao e verdade que exista uma rectaque passa por esses pontos.

(d) Dados dois pontos diferentes, existe exactamente uma recta quepassa por esses pontos.

(e) Usando os predicados anteriores, defina um predicado que afirmaque os seus argumentos sao rectas paralelas, ou seja, rectas quenao tem nenhum ponto em comum.

7. Uma das tecnicas para utilizar logica proposicional para lidar comdomınios em mudanca, corresponde a utilizar nos argumentos dos pre-dicados um termo adicional, o identificador de uma situacao, que as-socia cada predicado a uma situacao do mundo.

Assim, sendo Limpo um predicado que indica se um bloco nao temoutro bloco em cima e Sobre um predicado que indica que um blocoesta sobre outro, podemos escrever as seguintes fbfs sobre o seguinteestado do mundo, que designamos por situacao s0:

Limpo(A, s0)

Limpo(D, s0)

Sobre(A, B, s0)

Sobre(B, C, s0)

Número: Pág. 7 de 7

9. (1.0) Uma das técnicas para utilizar lógica proposicional para lidar com domíniosem mudança, corresponde a utilizar nos argumentos dos predicados um termo adi-cional, o identificador de uma situação, que associa cada predicado a uma situaçãodo mundo.

Assim, sendo Limpo um predicado que indica se um bloco não tem outro blocoem cima e Sobre um predicado que indica que um bloco está sobre outro, podemosescrever as seguintes fbfs sobre o seguinte estado do mundo, que designamos porsituação s0:

Limpo(A, s0)

Limpo(D, s0)

Sobre(A, B, s0)

C

B

A

D

T

C

B A

D

T

Situação s0 Situação s1

A evolução do estado do mundo é feita através de sucessivas situações que resul-tam da execução de acções, por exemplo sendo s1 = resultado(move, A, B, D, s0) asituação que resulta de movimentar o bloco A de B para D, partindo da situação s0,podemos escrever as seguintes fbfs:

Limpo(A, resultado(move, A, B, D, s1))

¬Limpo(D, resultado(move, A, B, D, s1))

Sobre(A, D, resultado(move, A, B, D, s1))

Escreva fbfs que traduzem, de um modo genérico, os resultados de mover um ob-jecto de um local para outro. Estas fbfs devem ter a forma de uma implicação doseguinte tipo !x, y, z, s [(<requisitos> "Move(x, y, z, s)) # <resultados>]

Número: Pág. 7 de 7

9. (1.0) Uma das técnicas para utilizar lógica proposicional para lidar com domíniosem mudança, corresponde a utilizar nos argumentos dos predicados um termo adi-cional, o identificador de uma situação, que associa cada predicado a uma situaçãodo mundo.

Assim, sendo Limpo um predicado que indica se um bloco não tem outro blocoem cima e Sobre um predicado que indica que um bloco está sobre outro, podemosescrever as seguintes fbfs sobre o seguinte estado do mundo, que designamos porsituação s0:

Limpo(A, s0)

Limpo(D, s0)

Sobre(A, B, s0)

C

B

A

D

T

C

B A

D

T

Situação s0 Situação s1

A evolução do estado do mundo é feita através de sucessivas situações que resul-tam da execução de acções, por exemplo sendo s1 = resultado(move, A, B, D, s0) asituação que resulta de movimentar o bloco A de B para D, partindo da situação s0,podemos escrever as seguintes fbfs:

Limpo(A, resultado(move, A, B, D, s1))

¬Limpo(D, resultado(move, A, B, D, s1))

Sobre(A, D, resultado(move, A, B, D, s1))

Escreva fbfs que traduzem, de um modo genérico, os resultados de mover um ob-jecto de um local para outro. Estas fbfs devem ter a forma de uma implicação doseguinte tipo !x, y, z, s [(<requisitos> "Move(x, y, z, s)) # <resultados>]

Situacao s0 Situacao s1

A evolucao do estado do mundo e feita atraves de sucessivas situacoesque resultam da execucao de accoes, por exemplo sendo

s1 = resultado(move,A,B, D, s0),

a situacao que resulta de movimentar o bloco A de B para D, partindoda situacao s0, podemos escrever as seguintes fbfs:

Limpo(A, resultado(move,A,B, D, s0))

Page 205: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.6. EXERCICIOS 193

¬Limpo(D, resultado(move,A,B, D, s0))

Sobre(A, D, resultado(move,A,B, D, s0))

Escreva fbfs que traduzem, de um modo generico, os resultados demover um objecto de um local para outro. Estas fbfs devem ter aforma de uma implicacao do seguinte tipo

/x, y, z, s [(< requisitos > ! Move(x, y, z, s)) # < resultado >].

8. Identifique as variaveis livres nas seguintes fbfs:

(a) /x [P (x, y) # /z [Q(z, x)]]

(b) Q(z) # /x, y [P (x, y, a)]

(c) /x [P (x)] # /y [Q(x, y)]

9. Transforme as seguintes fbfs em forma clausal:

(a) /x [P (x)] # 0x [Q(x)]

(b) /x [P (x) # 0y [Q(x, y)]]

(c) 0x [¬(0y [P (x, y) # 0z [Q(z) # R(x)]])]

(d) /x [/y [0z [P (x, y, z) # 0u [Q(x, u) # 0v [Q(y, v)]]]]]

(e) /x [/y [0z [P (x, y, z) # (0u [Q(x, u)] # 0v [Q(y, v)])]]]

10. Sendo s1, s2 e s3 substituicoes, demonstre que:

(a) s1 · " = " · s1 = s1

(b) (s1 1 s2) 1 s3 = s1 1 (s2 1 s3)

11. Seja s = {a/x, b/y, g(x, y)/z} e ! = P (h(x), z). Determine ! · s.

12. Seja s1 = {a/x, f(x)/y, y/z} e s2 = {b/x, z/y, g(x)/z}. Calcule s1 1s2.

13. Siga o funcionamento do Algoritmo 3.1 para calcular o unificador maisgeral das clausulas {¬P (x, y), Q(f(x))} e {¬P (a, b), Q(z)}.

14. Utilize o algoritmo de unificacao para determinar quais dos seguintesconjuntos sao unificaveis, e, no caso de o serem, determine o unificadormais geral.

(a) ! = {Q(a), Q(b)}(b) ! = {Q(a, x), Q(a, a)}

Page 206: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

194 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

x y f(x, y)• • •• 9 99 • 99 9 •

Tabela 3.1: Funcao f .

x P (x)• V9 F

x y Q(x, y)• • F• 9 V9 • F9 9 V

Tabela 3.2: Relacoes P e Q.

(c) ! = {Q(a, x, f(x), Q(a, y, y)}(d) ! = {Q(x, y, z), Q(u, h(v, v), u)}(e) ! = {P (f(a), g(x)), P (y, y)}(f) ! = {P (f(a), g(x)), P (y, g(f(z)))}(g) ! = {P (x1, g(x1), x2, h(x1, x2), x3, k(x1, x2, x3)),

P (y1, y2, e(y2), y3, f(y2, y3), y4)}

15. Considere o conjunto de fbfs ! = {/x[P (x)],/y[¬Q(y, f(y, a))]} e aseguinte conceptualizacao:23

• D = {•,9}• F = {{(•, •, •), (•,9,9), (9, •,9), (9,9, •)}}• R = {{(•)},

{(•,9), (9,9)}}

Justifique que a seguinte interpretacao e um modelo de !.

I(a) )# •I(f) )# {(•, •, •), (•,9,9), (9, •,9), (9,9, •)}I(P ) )# {(•)}

23Para facilitar a compreensao, a funcao e as relacoes envolvidas sao apresentadas nasTabelas 3.1 e 3.2.

Page 207: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.6. EXERCICIOS 195

I(Q) )# {(•,9), (9,9)}

16. Considere a seguinte conceptualizacao:

• Universo de discurso. D = {:,;}• Conjunto de funcoes. F = {{(:,;), (;,:)}}• Conjunto de relacoes. R = {{(:,:), (:,;)}}

Suponha que as seguintes fbfs se referem a uma situacao relativa a estaconceptualizacao:

P (a, f(a)) ! P (b, f(b)) (3.108)

P (a, a) (3.109)

/x[0y[P (x, y)]] (3.110)

/x, y[P (x, y) # P (f(x), f(y))] (3.111)

Diga, justificando, quais das fbfs anteriores sao satisfeitas pela seguinteinterpretacao:

I(a) )# :I(b) )# ;I(f) )# {(:,;), (;,:)}I(P ) )# {(:,:), (:,;)}

17. Considere a situacao representada na Figura 3.10 e a seguinte inter-pretacao:

I(a) )# AI(b) )# BI(c) )# CI(t) )# MI(sob) )# {(A, B), (B, M), (C, M)}I(Limpo) )# {A, C}I(Empilhados) )# {(A, B)}Diga, justificando, quais das seguintes fbfs sao satisfeitas por esta in-terpretacao:

Limpo(a) (3.112)

Limpo(c) (3.113)

¬Limpo(sob(a)) (3.114)

Empilhados(a, b) (3.115)

Page 208: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

196 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

A

B C

M

Figura 3.10: Situacao no mundo dos blocos.

18. Volte a responder a pergunta anterior considerando a interpretacao:

J(a) )# AJ(b) )# BJ(c) )# CJ(t) )# MJ(sob) = {(B, A)}J(Limpo) = {B}J(Empilhados) = {(A, B)}

19. Calcule o universo de Herbrand e a base de Herbrand para os seguintesconjuntos de clausulas:

(a) {{P (a)}, {P (x), P (f(x))}}(b) {{P (x), Q(x)}, {R(y)}, {S(z),¬T (z)}}

20. Considere o conjunto de clausulas:

! = {{P (x)}, {¬P (f(y))}}.

(a) Calcule o universo de Herbrand para !.

(b) Calcule a base de Herbrand para !.

(c) Sera possıvel encontrar uma interpretacao que satisfaz !? Sesim, apresente essa interpretacao, se nao explique a razao da im-possibilidade.

21. Considere o conjunto de clausulas:

! = {{P (x)}, {¬P (x), Q(x, a)}, {¬Q(y, a)}}.

(a) Calcule a base de Herbrand para !.

Page 209: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

3.6. EXERCICIOS 197

(b) Produza uma arvore de decisao para !.

(c) Produza uma arvore de decisao fechada para !.

22. Considere o conjunto de clausulas:

! = {{P (x, a, g(x, b))}, {¬P (f(y), z, g(f(a), b))}}.

Calcule um conjunto nao satisfazıvel de instancias de clausulas em !.

23. Considere o conjunto de clausulas:

! = {{P (x)}, {Q(x, f(x)),¬P (x)}, {¬Q(g(y), z)}}.

Calcule um conjunto nao satisfazıvel de instancias de clausulas em !.

24. Utilizando o teorema de Herbrand, mostre que os seguintes conjuntosde clausulas sao nao satisfazıveis:

(a) {{P (x)}, {¬P (x), P (x, a)}, {¬Q(y, a)}}(b) {{P (x), Q(f(x))}, {¬P (a), R(x, y)}, {¬R(a, x)}, {¬Q(f(a))}}

Page 210: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

198 CAPITULO 3. LOGICA DE PRIMEIRA ORDEM

Page 211: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Capıtulo 4

Fundamentos daProgramacao em Logica

In solving a problem of this sort, thegrand thing is to be able to reasonbackward. That is a very useful accom-plishment, and a very easy one, but pe-ople do not practise it much. In theeveryday a"airs of life it is more usefulto reason forward, and so the other co-mes to be neglected.Sherlock Holmes, A Study in Scarlet

A programacao em logica e um paradigma de programacao no qual umprograma corresponde a especificacao de um problema de uma forma de-clarativa, o que contrasta com os outros paradigmas de programacao emque sao os detalhes correspondendes ao algoritmo que definem a solucao doproblema.

Sob o ponto de vista tradicional, o desenvolvimento de um programa podeser visto como uma sequencia de fases atraves das quais as descricoes deum sistema se tornam progressivamente mais detalhadas. Comecando coma analise do problema que da enfase ao que tem que ser feito, a descricao eprogressivamente refinada para a descricao de como o problema e resolvidode um modo mecanico. Para isso, na fase do desenvolvimento da solucaodescreve-se rigorosamente como o problema vai ser resolvido, sem se entrar,no entanto, nos pormenores inerentes a uma linguagem de programacao. Na

Page 212: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

200 CAPITULO 4. PROGRAMACAO EM LOGICA

fase da programacao da solucao, o algoritmo desenvolvido e escrito recor-rendo a uma linguagem de programacao. Em resumo, durante a sequenciade fases seguida no desenvolvimento de um programa, a caracterizacao de oque tem que ser feito transforma-se progressivamente numa especificacao decomo vai ser feito.

As fases do desenvolvimento de programas que levam dos requisitos iniciaisao desenvolvimento de codigo executavel sao guiadas por metodos adequadose sistematicos que sao estudados na area cientıfica da engenharia do softwareou engenharia da programacao. Contudo, muitas destas fases nao podem serautomatizadas e exigem tecnicas de engenharia e de criatividade por parteda equipa de programadores envolvida no desenvolvimento. A tarefa destaequipa pode ser olhada como a transformacao dos requisitos iniciais emcodigo executavel. Esta transformacao e um processo que consome recursose que esta sujeito a erros.

Um dos modos de evitar estes problemas consiste em tornar as especificacoesdirectamente executaveis, consequentemente evitando os passos de traducaodas especificacoes para a codificacao. A programacao em logica tem esteobjectivo. De um modo simples (e ideal) podemos definir o paradigmada programacao em logica do seguinte modo: o programador descreve aspropriedades logicas que caracterizam o problema a resolver. Esta descricaoe utilizada pelo sistema para encontrar uma solucao do problema a resolver(ou para inferir a solucao para o problema).

4.1 Clausulas de Horn

A designacao programacao em logica refere-se a combinacao de uma re-presentacao de um subconjunto das formulas da logica de primeira ordematraves de clausulas de Horn com uma estrategia de resolucao conhecida porresolucao SLD.

Definicao 4.1.1 (Clausula de Horn) Uma clausula de Horn1 e uma clau-sula que contem, no maximo, um literal positivo. !

Numa clausula de Horn, o literal positivo (se existir) e chamado a cabecada clausula e os literais negativos (se existirem) sao chamados o corpo da

1Em honra do matematico americano Alfred Horn (1918–2001) que descobriu a suaimportancia, a qual e descrita no artigo [Horn 51].

Page 213: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.1. CLAUSULAS DE HORN 201

clausula.

Exemplo 4.1.1 Sendo C, P1 e P2 sımbolos de proposicao,2 as seguintesclausulas sao clausulas de Horn:

{C,¬P1,¬P2} (4.1)

{C} (4.2)

{¬P1,¬P2} (4.3)

{} (4.4)

`

Dada a equivalencia entre ! # # e a clausula de Horn {¬!,#}, e vulgarescrever clausulas de Horn sem as chavetas, escrevendo a cabeca da clausulaem primeiro lugar, separada do corpo da clausula pelo sımbolo “2”. Usandoesta notacao, a clausula vazia e representada pelo sımbolo ".

Exemplo 4.1.2 (Notacao para clausulas de Horn) As clausulas de Horndo exemplo 4.1.1 sao escritas do seguinte modo:

C 2 P1, P2 (4.5)

C 2 (4.6)

2 P1, P2 (4.7)

" (4.8)

`

As clausulas de Horn sao divididas em quatro tipos:

1. Regras ou implicacoes, que correspondem a clausulas em que tanto acabeca como o corpo contem literais, por exemplo, a Clausula 4.5.

2. Afirmacoes ou factos, que correspondem a clausulas em que o corponao contem literais (ou seja, e vazio) mas a cabeca contem um literal,por exemplo, a Clausula 4.6.

2Por uma questao de simplicidade, utilizamos a logica proposicional.

Page 214: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

202 CAPITULO 4. PROGRAMACAO EM LOGICA

3. Objectivos, que correspondem a clausulas em que a cabeca nao contemum literal (ou seja, e vazia) mas o corpo contem pelo menos um literal,por exemplo, a Clausula 4.7. Cada um dos literais que constituem ocorpo de um objectivo tem o nome de sub-objectivo.

4. A clausula vazia.

Definicao 4.1.2 (Clausula determinada) As clausulas do tipo 1 e 2 (ouseja, as regras e as afirmacoes) tem o nome de clausulas determinadas (doingles “definite clauses”). !

Exemplo 4.1.3 Usando a notacao para clausulas de Horn, as clausulas 3.84a 3.88 apresentadas no Capıtulo 3 sao escritas da seguinte forma:

Ant(x, y) 2 AD(x, y) (4.9)

Ant(x, z) 2 Ant(x, y), AD(y, z) (4.10)

AD(Marge,Bart) 2 (4.11)

AD(Sr.B, Marge) 2 (4.12)

2 Ant(Sr.B, Bart) (4.13)

As clausulas 4.9 e 4.10 sao regras, as clausulas 4.11 e 4.12 sao afirmacoes e aClausula 4.13 e um objectivo. Note-se o significado intuitivo das designacoesatribuıdas as clausulas: as clausulas 4.9 e 4.10 sao tipicamente usadas paraproduzir novas clausulas; as clausulas 4.11 e 4.12 fazem afirmacoes sobreentidades do universo de discurso; e a Clausula 4.13 corresponde ao objectivoque desejamos provar. As clausulas 4.9 a 4.12 sao clausulas determinadas.`

Usando a resolucao com clausulas de Horn, um dos resolventes e obriga-toriamente uma clausula determinada (uma regra ou uma afirmacao) poisestas sao as unicas clausulas que contem literais positivos (correspondentesa cabeca da clausula). Assumindo que o literal ! unifica com o literal #i,sendo s o unificador mais geral destes dois literais, o caso geral da aplicacaoda regra da resolucao a clausulas de Horn e o seguinte:

n ! 2 $1, . . . , $m

m % 2 #1, . . . ,#i%1, #i, #i+1, . . . ,#n

m + 1 (% 2 #1, . . . ,#i%1, $1, . . . , $m, #i+1, . . . ,#n) · s Res, (n, m)

Page 215: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.2. PROGRAMAS 203

Exemplo 4.1.4 Utilizando clausulas de Horn, a demonstracao apresentadana pagina 166 do Capıtulo 3 tera a seguinte forma:

1 Ant(x, y) 2 AD(x, y) Prem2 Ant(x, z) 2 Ant(x, y), AD(y, z), Prem3 AD(Marge,Bart) 2 Prem4 AD(Sr.B, Marge) 2 Prem5 2 Ant(Sr.B, Bart) Prem6 Ant(Sr.B, Marge) 2 Res, (1, 4), {Sr.B/x, Marge/y}

7 Ant(Sr.B, z) 2 AD(Marge, z) Res, (2, 6), {Sr.B/x, Marge/y}

8 Ant(Sr.B, Bart) 2 Res, (3, 7), {Bart/z}

9 " Res, (5, 8), !

`

4.2 Programas

Em programacao em logica consideramos que qualquer conjunto de clausulasdeterminadas e um programa e que um objectivo corresponde a uma clausulacujas instancias se pretendem derivar a partir desse programa.

Definicao 4.2.1 (Programa) Um programa e qualquer conjunto finito declausulas determinadas. !

Exemplo 4.2.1 Considerando o Exemplo 4.1.3, o conjunto constituıdo pe-las seguintes clausulas determinadas e um programa.

Ant(x, y) 2 AD(x, y)

Ant(x, z) 2 Ant(x, y), AD(y, z)

AD(Marge,Bart) 2

AD(Sr.B, Marge) 2

`

Definicao 4.2.2 (Definicao de um predicado) Num programa, o con-junto de todas as clausulas cuja cabeca corresponde a um literal contendo aletra de predicado P , diz-se a definicao de P . !

Page 216: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

204 CAPITULO 4. PROGRAMACAO EM LOGICA

Exemplo 4.2.2 No programa do Exemplo 4.2.1, a definicao de Ant e dadapelo conjunto formado pelas clausulas:

Ant(x, y) 2 AD(x, y)

eAnt(x, z) 2 Ant(x, y), AD(y, z).

No mesmo programa, a definicao de AD e dada pelo conjunto:

{AD(Marge,Bart) 2, AD(Sr.B, Marge) 2}.

`

Definicao 4.2.3 (Base de dados) Uma definicao de um predicado quecontenha apenas clausulas fechadas chama-se uma base de dados. !

Exemplo 4.2.3 No programa do Exemplo 4.2.1, o conjunto

{AD(Marge,Bart) 2, AD(Sr.B, Marge) 2}

e uma base de dados para AD. `

Definicao 4.2.4 (Resposta de um programa a um objectivo) Sendo! um programa e ! um objectivo,3 uma resposta de ! ao objectivo ! e umasubstituicao s para as variaveis de !. !

Sendo s uma substituicao e {x1, . . . , xm} um conjunto de variaveis, define-sea restricao de s ao conjunto de variaveis {x1, . . . , xm}, escrita, s |{x1,...,xm},como sendo o conjunto

s |{x1,...,xm}= {ti/xi % s : xi % {x1, . . . , xm}}.

Representando por v a funcao de clausulas para variaveis tal que v(!) cor-responde as variaveis em !, uma resposta de ! a 2 ! e uma substituicaos |v(!).

Definicao 4.2.5 (Resposta correcta de um programa) Uma respostas de ! ao objectivo ! diz-se correcta se ! |= (! · s). !

3Note-se que um programa e um conjunto de clausulas de Horn, que por sua vez saofbfs e que um objectivo e uma unica clausula de Horn, que por sua vez e uma fbf. Poresta razao, utilizamos, respectivamente, letras gregas maiusculas e minusculas, para osrepresentar.

Page 217: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.3. RESOLUCAO SLD 205

E facil verificar que s e uma resposta correcta de ! a ! se ! ' {¬! · s} forcontraditorio.

Exemplo 4.2.4 Dado o programa do Exemplo 4.2.1, a substituicao vazia,", e uma resposta correcta deste programa ao objectivo2 Ant(Sr.B, Bart).`

4.3 Resolucao SLD

Como as clausulas de Horn sao clausulas, podemos aplicar o princıpio daresolucao para derivar novas clausulas a partir de um programa, tal como ofizemos no final da Seccao 4.1.

Sabemos que a utilizacao do princıpio da resolucao origina um processo naodeterminıstico: nao estao definidas quais a clausulas a resolver, nem estaodeterminados quais os literais a resolver depois de escolhidas duas clausulaspara aplicacao do princıpio da resolucao. Sabemos tambem que o algoritmode unificacao (Algoritmo 3.2) nao e determinıstico.

As estrategias de resolucao apresentadas na Seccao 2.2.5 resolvem parcial-mente este problema. Para o resolver na totalidade precisamos de introduziros conceitos de funcao de seleccao (ou regra de computacao) e de regra deprocura.4

Definicao 4.3.1 (Funcao de seleccao) Uma funcao de seleccao, S, e umaregra para escolher um literal numa clausula objectivo como candidato aaplicacao do princıpio da resolucao. Esta e uma funcao do conjunto dos ob-jectivos para o conjunto dos literais, tal que S(2 !1, . . . ,!n) % {!1, . . . ,!n}.!

A resolucao SLD (do ingles, “SLD-resolution” ou “SL-resolution with De-finite clauses” ou, ainda, “Linear resolution with Selection function andDefinite clauses”) e uma estrategia de resolucao linear5 aplicavel a clausulasdeterminadas, conjuntamente com uma funcao de seleccao, a qual, dentrodos possıveis literais aplicaveis com a regra da resolucao escolhe um literalde um modo determinıstico.

4Este aspecto e apresentado mais tarde.5Ver pagina 74 da Seccao 2.2.5.

Page 218: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

206 CAPITULO 4. PROGRAMACAO EM LOGICA

De um modo nao rigoroso, a resolucao SLD encontra a resposta de umprograma a um objectivo, substituindo sucessivamente (com a substituicaoapropriada), cada literal no objectivo pelo corpo de uma clausula cuja cabecaseja unificavel com o objectivo escolhido. Este processo e sucessivamente re-petido ate que nao existam mais sub-objectivos ou quando nenhum dos res-tantes sub-objectivos for unificavel com a cabeca de nenhuma das clausulasdo programa.

Exemplo 4.3.1 Considerando, de novo, o programa do Exemplo 4.2.1 e oobjectivo

2 Ant(Sr.B, Bart),

mostramos na Figura 4.1 uma prova utilizando resolucao linear correspon-dente a este objectivo, seguindo a estrategia informal que apresentamos e afuncao de seleccao que escolhe o ultimo literal no objectivo. Note-se que aresposta calculada e

({Sr.B/x,Bart/z} 1 {Marge/y} 1 {Sr.B/x,Marge/y} 1 ") |{}= ".

`

Definicao 4.3.2 (Prova SLD) Seja ! um programa, ! um objectivo eS uma funcao de seleccao. Uma prova SLD para ! e uma sequencia deobjectivos, [$0, $1, . . .], satisfazendo as seguintes propriedades:

1. $0 = !;

2. Para cada $i da sequencia (i 3 0), se

$i = 2 #1, . . . ,#k%1, #k, #k+1, . . . ,#j ,

#k = S(2 #1, . . . ,#k%1, #k, #k+1, . . . ,#j)

e se existe uma clausula,6 !l 2 %1, . . . , %p, em !, tal que #k e !l saounificaveis, sendo si o seu unificador mais geral, entao

($i+1 = 2 #1, . . . ,#k%1, %1, . . . , %p, #k+1, . . . ,#j) · si

!6Na realidade, numa prova SLD, iremos utilizar variantes de clausulas, clausulas em

que as variaveis sao substituıdas por variavies cujo nome nunca apareceu antes na prova.Esta utilizacao de variantes de clausulas garante que nao existem unificacoes “acidentais”.

Page 219: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.3. RESOLUCAO SLD 207

* Ant(Sr.B, Bart) Ant(x, z) * Ant(x, y), AD(y, z)

3333333333{Sr.B/x, Bart/z}

* Ant(Sr.B, y), AD(y, Bart) AD(Marge, Bart) *

3333333333{Marge/y}

* Ant(Sr.B, Marge) Ant(x, y) * AD(x, y)

3333333333{Sr.B/x, Marge/y}

* AD(Sr.B, Marge) AD(Sr.B, Marge) *

3333333333

!

Figura 4.1: Exemplo de refutacao SLD.

Page 220: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

208 CAPITULO 4. PROGRAMACAO EM LOGICA

* R(a, c) R(x, y) * R(x, z), R(z, y)

3333333333{a/x, c/y}

* R(a, z), R(z, c) R(a, b) *

3333333333{b/z}

* R(b, c) R(b, c) *

3333333333#

!

Figura 4.2: Demonstracao por refutacao SLD para o Exemplo 4.3.2.

Definicao 4.3.3 (Resposta calculada) No caso de uma prova SLD serfinita, [$0, $1, . . . , $n], a composicao das substituicoes s0, s1, . . . , sn%1 res-tringida as variaveis que ocorrem em !, (s0 1 s1 1 . . . 1 sn%1) |v(!), diz-seuma resposta calculada de ! a !. Diz-se tambem que n e o comprimentoda prova SLD. !

Definicao 4.3.4 (Refutacao SLD) Uma prova SLD e uma refutacao SLDse e so se a prova for finita e o seu ultimo elemento $n e tal que $n = ". !

Exemplo 4.3.2 Consideremos o seguinte programa:

R(a, b) 2 (4.14)

R(b, c) 2 (4.15)

R(x, y) 2 R(x, z), R(z, y) (4.16)

Suponhamos que a funcao de seleccao escolhia o primeiro literal no objectivo.A escolha da clausula do programa a utilizar sera feita sem justificacao

Page 221: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.3. RESOLUCAO SLD 209

* R(a, c) R(x, y) * R(x, z), R(z, y)

3333333333{a/x, c/y}

* R(a, z), R(z, c) R(b, c) *

3333333333{b/z}

* R(a, b) R(a, b) *

3333333333#

!

Figura 4.3: Demonstracao por refutacao SLD para o Exemplo 4.3.3.

formal. Na Figura 4.2 apresentamos uma demonstracao por refutacao parao objectivo 2 R(a, c).7

Nesta demonstracao, temos:

$0 = 2 R(a, c)

$1 = 2 R(a, z), R(z, c)

$2 = 2 R(b, c)

$3 = "Em que a resposta calculada e ({a/x, c/y} 1 {b/z} 1 ") |{}= ". `

Exemplo 4.3.3 Suponhamos que a funcao de seleccao escolhia o ultimoliteral no objectivo. Na Figura 4.3 apresentamos uma demonstracao porrefutacao para o objectivo 2 R(a, c).

Nesta demonstracao, temos:

$0 = 2 R(a, c)7Nesta figura e nas seguintes, as substituicoes apresentadas correspondem ao unificador

mais geral das clausulas utilizadas na aplicacao da resolucao.

Page 222: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

210 CAPITULO 4. PROGRAMACAO EM LOGICA

* R(a, c) R(x, y) * R(x, z), R(z, y)

3333333333{a/x, c/y}

* R(a, z), R(z, c) R(x1, y1) * R(x1, z1), R(z1, y1)

3333333333{z/x1, c/y1}

* R(a, z), R(z, z1), R(z1, c) R(x2, y2) * R(x2, z2), R(z2, y2)

3333333333{z/x2, c/y2}

...

Figura 4.4: Exemplo de derivacao SLD infinita.

$1 = 2 R(a, z), R(z, c)

$2 = 2 R(a, b)

$3 = "Em que a resposta calculada e ({a/x, c/y} 1 {b/z} 1 ") |{}= ". `

Exemplo 4.3.4 Suponhamos que a funcao de seleccao escolhia o ultimo li-teral no objectivo e que a estrategia escolhia a clausula definida com maiornumero de literais no corpo. Na Figura 4.4 apresentamos uma prova SLDpara o objectivo 2 R(a, c), usando esta estrategia. Neste caso temos umaderivacao infinita. Note-se que utilizamos, pela primeira vez numa demons-tracao, variantes de clausulas. `

Este exemplo mostra a importancia da escolha da clausula definida paraaplicar o princıpio da resolucao.

Uma regra de procura, P , e uma regra que, dado um literal correspondentea um objectivo, escolhe uma clausula definida num programa para aplicar oprincıpio da resolucao com o objectivo dado.

Page 223: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.4. ARVORES SLD 211

Definicao 4.3.5 (Regra de procura) Uma regra de procura e uma funcaodo conjunto dos literais e do conjunto dos programas para o conjunto dasclausulas definidas, tal que P (!,!) % !. !

4.4 Arvores SLD

Como vimos, mesmo com a mesma funcao de seleccao, existem alternativaspara a construcao de uma refutacao SLD, consoante a clausula do programaescolhida. Uma arvore SLD permite mostrar todas estas alternativas emsimultaneo.

Definicao 4.4.1 (Arvore SLD) Seja ! um programa, ! um objectivo eS uma funcao de seleccao, a arvore SLD de ! via S e uma arvore rotulada,construıda do seguinte modo:

1. O rotulo de cada no e um objectivo;

2. O rotulo da raiz e !;

3. Cada no com rotulo 2 #1, . . . ,#n tem um ramo por cada clausula% 2 $1, . . . , $p % ! cuja cabeca seja unificavel com S(2 #1, . . . ,#n).O rotulo da raiz deste ramo corresponde ao resolvente entre as duasclausulas.

Um ramo cuja folha tem o rotulo " diz-se um no bem sucedido; um ramocuja folha tem um rotulo que nao corresponda a clausula vazia diz-se um nofalhado; os restantes ramos dizem-se ramos infinitos.!

Exemplo 4.4.1 Consideremos o programa

P (x, z) 2 Q(x, y), P (y, z) (4.17)

P (x, x) 2 (4.18)

Q(a, b) 2 (4.19)

e o objectivo2 P (x, b) (4.20)

Seja S1 a funcao de seleccao tal que S1(2 !1, . . . ,!n) = !1.

Page 224: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

212 CAPITULO 4. PROGRAMACAO EM LOGICA

* P (x, b)!

!!

!!

!!!

--

--

--

--

P (x1, z1) * Q(x1, y1), P (y1, z1)

{x/x1, b/z1}

P (x2, x2) *

{b/x2, b/x}

* Q(x, y1), P (y1, b) !

Q(a, b) *

{a/x, b/y1}

* P (b, b)

))

))

))

P (x3, x3) *

{b/x3}! * Q(b, y4), P (y4, b)

P (x4, z4) * Q(x4, y4), P (y4, z4)

{b/x4, b/z4}

Figura 4.5: Arvore SLD correspondente ao Exemplo 4.4.1.

Na Figura 4.5 mostramos a arvore SLD deste programa e objectivo, via afuncao de seleccao S1. Para facilitar a compreensao, apresentamos, comoanotacoes dentro de rectangulos, a clausula com que foi feita a unificacao ea substituicao utilizada:

1. O ramo mais a direita corresponde a uma refutacao SLD com resposta{b/x} pois o objectivo 2 P (x, b) unifica com a afirmacao P (x2, x2) 2(uma variante da clausula P (x, x) 2).

2. O ramo mais a esquerda corresponde a uma refutacao SLD com res-posta {a/x}. Neste ramo, o objectivo2 P (x, b) unifica com a clausuladeterminada P (x1, y1)2 Q(x1, y1), P (y1, z1). A resposta do programae obtida atraves de (({x/x1, b/z1} 1 {a/x, b/y1}) 1 {b/x3}) |x= {a/x}.

3. O no com o rotulo 2 Q(b, y4), P (y4, b) e um no falhado. `

Exemplo 4.4.2 Consideremos o mesmo programa e objectivo do Exem-plo 4.4.1, mas com uma funcao de seleccao S2 tal que S2(2 !1, . . . ,!n) =!n.

Na Figura 4.6 mostramos a arvore SLD deste programa e objectivo, via afuncao de seleccao S2. Novamente, para facilitar a compreensao, apresenta-

Page 225: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.4. ARVORES SLD 213

* P (x, b)

**

**

*

))

))

)

P (x1, z1) * Q(x1, y1), P (y1, z1)

{x/x1, b/z1}

P (x2, x2) *

{b/x2, b/x}

* Q(x, y1), P (y1, b) !*

**

**

))

))

)

P (x3, z3) * Q(x3, y3), P (y3, z3)

{y1/x3, b/z3}

P (x4, x4) *

{b/x4, b/y1}

* Q(x, b)

!

* Q(x, y1), Q(y1, y3), P (y3, b)

**

**

*

))

))

)

P (x5, z5) * Q(x5, y5), P (y5, z5)

{y3/x5, b/z5}

P (x6, x6) *

{b/x6, b/y3}

Q(a, b) *

{a/x}

* Q(x, y1), Q(y1, b)

Q(a, b) *

{a/y1}

* Q(x, a)

* Q(x, y1), Q(y1, y3), Q(y3, y5), P (y5, b)

**

**

*

))

))

)...

...

Figura 4.6: Arvore SLD correspondente ao Exemplo 4.4.2.

mos, como anotacoes, dentro de rectangulos, a clausula com que foi feita aunificacao e a substituicao utilizada:

1. O ramo da direita corresponde a uma refutacao SLD com resposta{b/x}, pela mesma razao do Exemplo 4.4.1.

2. O ramo da esquerda leva-nos ao objectivo 2 Q(x, y1), P (y1, b) talcomo no exemplo anterior. A partir deste no da arvore, a situacaocomeca a diferir do exemplo anterior:

(a) No ramo da direita, a unificacao de P (y1, b) com a afirmacaoP (x4, x4) 2 da origem ao objectivo 2 Q(x, b), para o qual seencontra a resposta {a/x}.

(b) No ramo da esquerda, a unificacao de P (y1, b) com a clausulaP (x3, z3) 2 Q(x3, y3), P (y3, z3) origina o objectivo 2 Q(x, y1),

Page 226: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

214 CAPITULO 4. PROGRAMACAO EM LOGICA

Q(y1, y3), P (y3, b), o qual por sua vez originara um ramo falhado,unificando com 2 P (x6, x6) e ramos infinitos.

Podemos concluir que a arvore tem ramos infinitos e tambem um numeroinfinito de nos falhados. `

Observe-se, no entanto, que o numero de ramos bem sucedidos e o mesmonas duas arvores e que as respostas calculadas sao tambem as mesmas. Estefacto e geral como se estabelece no seguinte teorema:

Teorema 4.4.1 Seja ! um programa e ! um objectivo. Entao, indepen-dentemente da funcao de seleccao, todas as arvores SLD de ! e ! tem omesmo numero (finito ou infinito) de ramos bem sucedidos.

Demonstracao: Ver [Lloyd 87, pagina 52]. "

Em termos computacionais, este resultado afirma que a qualidade de umaimplementacao da resolucao SLD e independente da funcao de seleccao esco-lhida, pelo menos, no que diz respeito as respostas que podem ser calculadas.

4.5 Semantica da programacao em logica

4.5.1 Semantica declarativa

O corolario 3.3.1, que afirma que um conjunto de clausulas ! e nao satis-fazıvel se e so se ! nao tem nenhum modelo de Herbrand, e essencial para seconseguir reduzir o problema de determinar se um programa implica logica-mente um objectivo ao problema da existencia de um modelo de Herbrandpara a uniao do programa com a negacao do objectivo.

Definicao 4.5.1 (Modelo de Herbrand mınimo) O modelo de Her-brand mınimo de um programa !, representado por M! e a interseccao detodos os modelos de Herbrand de !. !

Teorema 4.5.1 Para um programa !

M! = {! % "! : ! |= !}

Page 227: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.6. ADEQUACAO COMPUTACIONAL 215

Teorema 4.5.2 Seja ! um programa, 2 !1, . . . ,!n um objectivo e s umaresposta de ! a 2 !1, . . . ,!n tal que (!1 ! . . . ! !n) · s e uma fbf fechada.Entao as seguintes afirmacoes sao equivalentes:

1. A resposta s e uma resposta correcta de ! a 2 !1, . . . ,!n.

2. Todo o modelo de Herbrand de ! e um modelo de (!1 ! . . . ! !n) · s.

3. M! e um modelo de (!1 ! . . . ! !n) · s.

4.5.2 Semantica procedimental

Nesta seccao descreve-se a semantica procedimental da programacao emlogica. Como o nome sugere, trata-se de uma interpretacao computacional,com a qual e possıvel calcular as respostas de um programa a um objectivo.O processo computacional foi apresentado na Seccao 4.3.

Definicao 4.5.2 (Conjunto de sucessos de !) Seja ! um programa, se-ja "! a base de Herbrand correspondente a ! e seja S uma funcao de se-leccao. O conjunto de sucessos de ! via S e o conjunto dos literais ! % "!

para os quais existe uma refutacao SLD de 2 ! via S. !

Teorema 4.5.3 Sejam ! um programa, ! um objectivo e S uma funcao deseleccao, entao, toda a resposta calculada de ! a ! via S e uma respostacorrecta de ! a !.

Teorema 4.5.4 Sejam ! um programa, ! um objectivo e S uma funcaode seleccao. Se existe uma refutacao SLD de ! a ! via S entao o conjunto! ' {!} e contraditorio.

4.6 Adequacao computacional

Para alem do interesse intrınseco da programacao em logica, demonstra-seque utilizando programacao em logica e possıvel escrever qualquer funcaocomputavel atraves de um algoritmo. Tendo em atencao a hipotese deChurch-Turing, a classe das funcoes parciais recursivas corresponde a classedas funcoes efectivamente computaveis por algum algoritmo.

Demonstra-se que a classe das funcoes parciais recursivas e equivalente aclasse dos programas, tais como definidos neste capıtulo.

Page 228: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

216 CAPITULO 4. PROGRAMACAO EM LOGICA

4.7 Notas bibliograficas

O termo “resolucao SLD” foi introduzido por Maarten van Emden paradesignar uma regra de inferencia proposta por Robert Kowalski [Kowalski74] com base na resolucao SL de [Kowalski e Kuehner 71].

A colectanea de volumes [Gabbay, Hogger e Robinson 93, 94, 98] apresentauma excelente perspectiva do campo da programacao em logica e dos seusfundamentos teoricos.

4.8 Exercıcios

1. Considere o seguinte programa:

P (x) 2 Q(x), R(x)

Q(a) 2R(x) 2 S(x)

S(a) 2Desenhe uma arvore SLD que calcula a resposta deste programa aoobjectivo 2 P (x), usando as seguintes funcoes de seleccao:

(a) S(2 !1, . . . ,!n) = !1.

(b) S(2 !1, . . . ,!n) = !n.

2. Considere o seguinte programa:

P (x, z) 2 P (x, y), P (y, z)

P (x, y) 2 P (y, x)

P (a, b) 2P (c, b) 2Desenhe uma arvore SLD que calcula a resposta deste programa aoobjectivo 2 P (a, c), usando as seguintes funcoes de seleccao:

(a) S(2 !1, . . . ,!n) = !1.

(b) S(2 !1, . . . ,!n) = !n.

3. Considere o seguinte programa:

P (x, y) 2 Q(x), R(y)

Page 229: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

4.8. EXERCICIOS 217

Q(x) 2 S(x)

R(x) 2 T (x)

P (b, a)

Q(b)

Q(a)

T (b)

Usando uma arvore de resolucao SLD e uma funcao de seleccao queescolha para unificar o ultimo literal do objectivo, mostre todas assolucoes para o seguinte objectivo:

2 P (x, y), Q(b).

Pode usar a estrategia de procura que preferir. No final indique expli-citamente todas as solucoes.

4. Considere o seguinte programa:

P (y) 2 Q(x, y), R(y)

P (x) 2 Q(x, x)

Q(x, x) 2 S(x)

R(b)

S(a)

S(b)

Usando uma arvore de resolucao SLD e uma funcao de seleccao queescolha para unificar o primeiro literal do objectivo, mostre todas assolucoes para o seguinte objectivo:

2 P (x).

Pode usar a estrategia de procura que preferir. No final indique expli-citamente todas as solucoes.

Page 230: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

218 CAPITULO 4. PROGRAMACAO EM LOGICA

Page 231: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Capıtulo 5

Prolog: Programacao emLogica em Pratica

It is not really di)cult to construct a series ofinferences, each dependent upon its predeces-sor and each simple in itself. If, after doingso, one simply knocks out all the central infe-rences and presents one’s audience with thestarting point and the conclusion, one mayproduce a startling, though possibly a mere-tricious, e*ect.Sherlock Holmes The Dancing Men

O paradigma da programacao em logica esta muito associado a linguagemprolog (do frances, “programmation en logique”). Esta linguagem nas-ceu associada a resolucao de problemas em Inteligencia Artificial, mas actu-almente apresenta um grande leque de aplicacoes que transcendem a Inte-ligencia Artificial. O prolog tem sido utilizado para a definicao de traduto-res de linguagens, interpretadores e compiladores, bases de dados dedutivase interfaces em lıngua natural, entre outras aplicacoes.

O prolog apenas satisfaz parcialmente a descricao que apresentamos nocapıtulo anterior relativamente a programacao em logica. Para tornar aexecucao dos programas eficientes, foram introduzidos um certo numerode compromissos na linguagem que diluem o aspecto da programacao em

219

Page 232: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

220 CAPITULO 5. PROLOG

logica pura. Isto significa que o programador tem de se preocupar com maisaspectos do que apenas a especificacao daquilo que o programa e supostofazer. Neste sentido, existem aspectos nao declarativos que podem ser vistoscomo indicacoes dadas pelo programador ao mecanismo dedutivo. De ummodo geral, estes aspectos reduzem a clareza das descricoes do programa,pois misturam a descricao do problema com preocupacoes de implementacao.

Um programa em prolog e constituıdo por uma sequencia de frases decla-rativas em logica, juntamente com um conjunto de indicacoes procedimen-tais que controlam a utilizacao dessas frases declarativas. Por esta razao,um programa e considerado como uma combinacao de logica e de controlo,traduzida na conhecida expressao

Programa = Logica + Controlo,

a qual contrasta com a visao imperativa de um programa, traduzida pelaexpressao

Programa = Algoritmo + Dados.

5.1 Componentes basicos

5.1.1 Termos

Dadas as suas raızes em logica de primeira ordem, um dos conceitos impor-tantes em prolog e o conceito de termo. Um termo pode ser uma constante,uma variavel ou um termo composto (correspondente a aplicacao de umafuncao ao numero apropriado de argumentos):

<termo> ::= <constante> <variavel> <termo composto>

Constantes. Uma constante em prolog pode ser um atomo ou um nu-mero:

<constante> ::= <atomo> <numero>

Um atomo e qualquer sequencia de caracteres que comece com uma letraminuscula, ou qualquer cadeia de caracteres (uma sequencia de caracteresdelimitados por plicas) ou ainda um conjunto individualizado de sımbolos,os atomos especiais:

Page 233: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.1. COMPONENTES BASICOS 221

<atomo> ::= <minuscula> <subsequente>*<cadeia de caracteres><atomo especial>

<minuscula> ::= a b c d e f g h i j k l m n op q r s t u v w x y z

<subsequente> ::= <letra> <dıgito> <sımbolo especial>

<letra> ::= A B C D E F G H I J K L M N O P QR S T U V W X Y Z a b c d e f g

h i j k l m n o p q r s t u v w xy z

<dıgito> ::= 1 2 3 4 5 6 7 8 9 0

<sımbolo especial> ::= 1

<cadeia de caracteres> ::= ’<caracteres>’

<caracteres> ::= <caracter> <caracter> <caracteres>

<caracter> ::= !2 <subsequente>

<atomo especial> ::= ! [ ] ; { } + - * / **

Os atomos especiais [ e ], e { e } apenas sao considerados atomos se apa-recerem aos pares, ou seja sob a forma [ <qualquer coisa> ] e { <qualquercoisa> }. Este aspecto nao e capturado por uma gramatica BNF.

Exemplo 5.1.1 Sao exemplos de atomos, ad, ant, factorial, srB, ’sr.b’,’SrB’ e ’atomo com brancos’; nao sao exemplos de atomos, sr.b (contemum ponto) e SrB (comeca por uma maiuscula). `

Numa cadeia de caracteres, os caracteres que se encontram entre plicasdizem-se o nome do atomo.

O conceito de numero depende muito da implementacao do prolog, exis-tindo numeros inteiros em todas as implementacoes, numeros reais (numeroscom parte decimal) na maioria das implementacoes, e algumas implementa-coes apresentam tambem numeros em notacao cientıfica. Neste livro, ape-nas consideramos numeros inteiros, pelo que a definicao de numero utilizadaneste livro sera:

1Existem outros sımbolos especiais que nao sao considerados neste livro. Uma descricaocompleta destes sımbolos pode ser consultada em [Deransart, Ed-Dbali e Cervoni 96].

2O espaco em branco.

Page 234: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

222 CAPITULO 5. PROLOG

<numero> ::= <dıgitos> -<dıgitos>

<dıgitos> ::= <dıgito> <dıgito> <dıgitos>

Variaveis. Em prolog, uma variavel e qualquer sequencia de caracteresque comece com uma letra maiuscula ou que comece com o caracter “ ”:

<variavel> ::= <inıcio var> <subsequente>*

<inıcio var> ::= A B C D E F G H I J K L M N OP Q R S T U V W X Y Z

Exemplo 5.1.2 Sao exemplos de variaveis, X, X menos 1, factorial, A380e . Nao sao exemplos de variaveis, 5a (comeca por um dıgito), factorial(comeca por uma letra minuscula). `

A variavel correspondente ao sımbolo “ ” chama-se variavel anonima. Umavariavel anonima e utilizada sempre que numa expressao (termo, literal ouclausula) o valor da variavel nao tenha interesse. Multiplas ocorrenciasde variaveis anonimas numa mesma expressao sao consideradas variaveisdistintas.

Termos compostos. Um termo composto corresponde a aplicacao de umaletra de funcao (em prolog, designada por um functor) ao numero apro-priado de argumentos. Um functor e representado por um atomo.

<termo composto> ::= <atomo>(<termos>)<termo> <operador> <termo>

<functor> ::= <atomo>

<operador> ::= <atomo>

<termos> ::= <termo> <termo>, <termos>

Note-se que a definicao de termo composto, para alem da utilizacao de le-tras de funcao como estamos habituados a usar em logica, permite a uti-lizacao de um operador em notacao infixa.3 Os operadores sao discutidosna Seccao 5.8.4

3O nome da operacao e escrita entre os operandos.4Existem mais duas possibilidades para a definicao de termos compostos, correspon-

dendo a utilizacao de operadores em posicao prefixa ou em posicao sufixa, as quais saodiscutidas na Seccao 5.8.

Page 235: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.1. COMPONENTES BASICOS 223

Exemplo 5.1.3 Sao exemplos de termos compostos mae(marge), mae( ),mae(mae(marge)), ’o meu functor’(’o meu atomo’, X), +(5, X) e 5 +X. `

Tal como em logica, cada functor tem um certo numero de argumentose deve ser utilizado com o numero apropriado de argumentos. Contudo,o prolog permite que o mesmo atomo correspondente a um functor sejautilizado com diferentes numeros de argumentos, sendo estes tratados comofunctores diferentes.

Notemos tambem que existem certos atomos especiais em prolog que cor-respondem a funcoes funcoes pre-definidas (tambem conhecidas por funcoesde sistema), por exemplo, +, * e /. Na Seccao 5.7 voltamos a abordar esteaspecto.

5.1.2 Literais

Um literal correspondente a aplicacao de um predicado ao numero apropri-ado de termos. Note-se que a aplicacao de um predicado com aridade zerocorresponde a um atomo.5

<literal> ::= <atomo><predicado>(<termos>)<unificacao de termos><comparacao de termos><operacao rel. numerica><avaliacao><operacao condicional>

<predicado> ::= <atomo>

A unificacao de termos e discutida na Seccao 5.4. A comparacao de termose discutida na Seccao 5.5. As operacoes relacionais numericas, que impoema condicao adicional de que os termos a que sao aplicados correspondam anumeros, sao apresentadas na Seccao 5.7. Na Seccao 5.7 tambem e apre-sentada a avaliacao, uma caracterıstica nao pura do prolog. A operacaocondicional e apresentada na Seccao 5.14.

5Existem mais tres possibilidades para a definicao de literais, correspondendo a uti-lizacao de operadores em posicao prefixa, em posicao infixa ou em posicao sufixa, as quaissao discutidas na Seccao 5.8.

Page 236: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

224 CAPITULO 5. PROLOG

Em prolog nao existe diferenca sintactica entre um termo composto e umliteral. Ou seja, em prolog tanto as letras de funcao como as letras depredicado sao representadas por atomos. E da responsabilidade do pro-gramador a separacao entre letras de predicado e letras de funcao e a suautilizacao apropriada. Tal como em logica, cada predicado tem um certonumero de argumentos e deve ser utilizado com o numero apropriado deargumentos.

Exemplo 5.1.4 Sao exemplos de literais, ad(mae(srB), marge), ad(marge,srB), ad(X, Y), ad(srB, ) e pai. `

Tal como acontece com as letras de funcao, o prolog permite que a mesmaletra de predicado seja utilizada com diferentes numeros de argumentos,correspondendo a predicados diferentes.

Exemplo 5.1.5 Podemos utilizar simultaneamente, no mesmo programa, opredicado de um argumento, pai, com o significado “pai(X) especifica queX e pai” e o predicado de dois argumentos, pai, com o significado “pai(X,Y) especifica que X e o pai de Y”. O mecanismo de unificacao permite distin-guir cada um destes casos, tratando-o como o predicado apropriado. Estespredicados sao designados pelo prolog, respectivamente, por pai/1 e porpai/2. De um modo geral, a designacao <pred>/<n>, em que pred e onome de um predicado e n e um inteiro, especifica que o predicado pred temn argumentos. `

5.1.3 Programas

Um programa em prolog e constituıdo por uma sequencia de clausulas de-terminadas, ou seja, afirmacoes e regras. Note-se aqui ja uma diferenca entrea definicao de programa apresentada no Capıtulo 4, a qual correspondia aum conjunto de clausulas determinadas.

<programa> ::= <clausulas>+

<clausulas> ::= <afirmacoes> <clausulas><regras> <clausulas>

<afirmacoes> ::= <afirmacao> <afirmacao> <afirmacoes>

<regras> ::= <regra> <regra> <regras>

Page 237: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.1. COMPONENTES BASICOS 225

5.1.4 Clausulas

Afirmacoes. Uma afirmacao corresponde a uma clausula em que o corponao contem literais (ou seja, e vazio) mas a cabeca contem um literal. Emprolog, as afirmacoes sao tambem designadas por clausulas unitarias oupor factos.

Uma afirmacao e definida sintacticamente do seguinte modo:

<afirmacao> ::= <literal>.

Exemplo 5.1.6 Considerando o Exemplo 4.1.3, as afirmacoes

AD(marge, bart) 2

AD(srB, marge) 2

sao escritas do seguinte modo em prolog:

ad(marge, bart).

ad(srB, marge). `

Regras. Uma regra corresponde a uma clausula em que tanto a cabecacomo o corpo contem literais. Em prolog, as regras sao conhecidas comoclausulas nao unitarias, adoptando-se a terminologia das clausulas de Hornque distingue a cabeca da clausula e o corpo da clausula.

Em prolog, uma regra e definida sintacticamente do seguinte modo:

<regra> ::= <literal> :- <literais>.

<literais> ::= <literal> <literal>, <literais> (<literais>)

A ultima alternativa para a definicao de literais apenas afirma que podemoscolocar parenteses antes e depois de literais.

Exemplo 5.1.7 Considerando o Exemplo 4.1.3, as regras

Ant(x, y) 2 AD(x, y)

Ant(x, z) 2 Ant(x, y), AD(y, z)

sao escritas do seguinte modo em prolog:

Page 238: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

226 CAPITULO 5. PROLOG

ant(X, Y) :- ad(X, Y).

ant(X, Z) :- ant(X, Y), ad(Y, Z). `

Note-se que no Exemplo 5.1.7, a definicao do predicado ant correspondea dizer que ant(X, Y) se ad(X, Y) ou se ant(X, Y) e ad(Y, Z). O pro-log permite fazer esta afirmacao numa unica regra recorrendo ao sımbolologico ou, representado, em prolog, por “;”:

ant(X, Y) :- ad(X, Y); (ant(X, Y), ad(Y, Z)).

No entanto, por uma questao de facilidade de leitura dos programas, a regraanterior deve ser considerada como uma abreviatura sintatica de

ant(X, Y) :- ad(X, Y).

ant(X, Z) :- ant(X, Y), ad(Y, Z).

Por uma questao de estilo de programacao, a utilizacao da disjuncao nocorpo de regras deve ser evitada.

Tendo em atencao a possibilidade de utilizar disjuncoes, a definicao de lite-rais e alterada para:

<literais> ::= <literal><literal>, <literais><literal>; <literais>(<literais>)

Definicao 5.1.1 (Clausula iterativa – versao 1) Uma clausula cujo cor-po apenas contem um literal, usando o mesmo predicado que o utilizado nacabeca da clausula, chama-se uma clausula iterativa.6 !

Exemplo 5.1.8 A seguinte regra corresponde a uma clausula iterativa:

liga(X, Y) :- liga(Y, X). `

6A razao da designacao “clausula iterativa” pode parecer estranha. Poderıamos esperara designacao de clausula recursiva. No entanto, a utilizacao de clausulas iterativas leva-nosa construcao de programas que geram processos iterativos, como se discute na pagina 281,e daı a designacao de clausulas iterativas.

Page 239: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.2. A SEMANTICA DO PROLOG 227

5.1.5 Objectivos

Um objectivo corresponde a uma clausula em que a cabeca nao contem umliteral (ou seja, e vazia) mas o corpo contem pelo menos um literal.

Em prolog, um objectivo e definido sintacticamente do seguinte modo:

<objectivo> ::= ?- <literais>.

Exemplo 5.1.9 Considerando o Exemplo 4.1.3, o objectivo

2 Ant(srB, bart)

e escrito do seguinte modo em prolog:

?- ant(srB, bart). `

O sımbolo “?-” corresponde ao caracter de pronto7 do prolog, pelo quenuma interaccao com o prolog um objectivo nao deve ser antecedido poreste sımbolo (ver Apendice B).

5.2 A semantica do prolog

Em prolog um programa e uma sequencia de clausulas determinadas,sequencia essa que corresponde a ordem pela qual as clausulas aparecemno programa. Note-se, novamente, a diferenca em relacao ao modelo teoricoda programacao em logica em que um programa e um conjunto de clausulasdeterminadas.

Para provar um objectivo (uma sequencia de literais), o prolog recorrea uma refutacao SLD com uma funcao de seleccao que escolhe o primeiroliteral na clausula objectivo e com uma regra de procura que escolhe aprimeira clausula unificavel com o literal seleccionado da clausula objectivona sequencia de clausulas que corresponde ao programa.

Tal como na programacao em logica, podemos considerar dois aspectos nasemantica do prolog, a semantica declarativa e a semantica procedimental.

7Do ingles, “prompt character”.

Page 240: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

228 CAPITULO 5. PROLOG

Semantica declarativa. A semantica declarativa preocupa-se com aquiloque estamos a tentar obter com um programa. Sob esta perspectiva, a regra

ant(X, Z) :- ant(X, Y), ad(Y, Z).

pode ser vista como a afirmacao que diz que “se ant(X, Y) e se ad(Y,Z) se verificarem (ou seja, se forem verdadeiras) para determinada substi-tuicao para as variaveis X, Y e Z entao podemos concluir que ant(X, Z) (everdadeira) para essa substituicao das variaveis X e Z”.

Por outras palavras, em prolog um objectivo e verdadeiro se este unificacom a cabeca de uma variante de uma clausula8 e se cada um dos objectivoscorrespodentes aos literais existentes no corpo dessa clausula for (recursiva-mente) verdadeiro.

Semantica procedimental. A semantica procedimental preocupa-se como modo como provar um objectivo com um determinado programa. Sob estaperspectiva, a regra

ant(X, Z) :- ant(X, Y), ad(Y, Z).

pode ser lida do seguinte modo “para provar uma instancia de ant(X, Z)devemos primeiro provar uma instancia de ant(X, Y) e depois, com as subs-tituicoes adequadas para X, Y e Z, provar uma instancia de ad(Y, Z)”.

Definicao 5.2.1 (Execucao de um objectivo) Em prolog, o processogerado durante a prova de um objectivo e conhecido pela execucao do ob-jectivo. !

Neste livro utilizamos as designacoes “prova de um objectivo” e “execucaode um objectivo” como sinonimos.

Tendo em atencao a funcao de seleccao e a regra de procura utilizadas peloprolog, a semantica procedimental do prolog pode ser definida do se-guinte modo.

Dado um programa P e um objectivo O (no caso geral, O = O1, . . . , Ok),para responder ao objectivo O, o seguinte processo de inferencia e seguido,

8Recorde-se que uma variante de uma clausula corresponde a uma clausula com va-riacoes alfabeticas das variaveis existentes na clausula.

Page 241: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.2. A SEMANTICA DO PROLOG 229

Programa

C1 :- B11, ..., B1n1.

...Ci :- Bi1, ..., Bini

.

...Cm :- Bm1, ..., Bmnm

.

regra de procuraObjectivo

O1, ..., Ok.funcao de seleccao

(Bi1, ..., Bini, ..., Ok) · (1.

1. clausula unificavelencontrada: Ci unificacom O1 com a subs-tituicao $1

2. passo de inferencia:substitui-se O1 pelocorpo da clausula Ci,aplicando-se $1

...

...

Fim da inferencia:• se a clausula " e obtida: Yes, devolve ( = (1 1 . . . 1 (p.• se nao se encontra nenhuma clausula unificavel: No.Pode acontecer que o programa nao termine.

retrocesso: um dosobjectivos posterio-res falhou

Figura 5.1: Diagrama da semantica procedimental do prolog.

comecando com uma substituicao calculada que corresponde a substituicaovazia (este processo esta representado esquematicamente na Figura 5.1):

1. Se o objectivo corresponde a clausula vazia, o processo termina com aresposta Yes, devolvendo-se a substituicao que corresponde a restricaoda substituicao calculada as variaveis existentes em O.

2. Selecciona-se o primeiro sub-objectivo (literal) do objectivo a provar.Seja este sub-objectivo designado por Oc (o objectivo corrente).

3. Procura-se uma clausula unificavel, percorrendo as clausulas do pro-grama P, comecando pela primeira clausula, ate encontrar uma clau-sula, designada por Cc (a clausula corrente), cuja cabeca unifica com

Page 242: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

230 CAPITULO 5. PROLOG

Oc.

4. Encontrada a clausula Cc, aplica-se um passo de inferencia:

(a) Gera-se uma variante da clausula Cc nao contendo nenhuma va-riavel utilizada durante o processo de inferencia, originando aclausula C"c.

(b) Sendo (c o unificador mais geral de Oc e C"c, cria-se um novo ob-jectivo, On (objectivo novo), correspondente a aplicacao da subs-tituicao (c ao objectivo que se obtem de O, substituindo Oc pelocorpo da clausula C"c.

(c) Repete-se o processo de inferencia com o objectivo On e o pro-grama P, utilizando uma nova substituicao calculada que corres-ponde a composicao de (c com a substituicao calculada.

5. Nao se encontrando uma clausula unificavel, diz-se que o objectivofalhou. Neste caso,

(a) Se durante o processo de inferencia foi seleccionada uma clausulaunificavel, volta-se ao ponto em que foi feita a ultima seleccao(passo 3), continuando-se a procura de uma nova clausula uni-ficavel a partir da clausula que corresponde a ultima clausulaseleccionada. A substituicao calculada e reposta no valor corres-pondente ao existente neste ponto da inferencia. Ao processo devoltar a considerar um objectivo anterior, apos atingir um objec-tivo que falhou, chama-se retrocesso.

i. Se uma nova clausula unificavel e encontrada, recomeca-se oprocesso a partir do passo 4.

ii. Atingindo o fim do programa sem se encontrar uma clausulaunificavel, o processo termina com a resposta No.

(b) Se durante o processo de inferencia nao foi feita nenhuma escolhade uma clausula unificavel, o processo termina com a resposta No.

O Algoritmo 5.1 apresenta de um modo formal a estrategia utilizada peloprolog para responder a um objectivo. Neste algoritmo, um objectivo euma sequencia de literais e um programa como uma sequencia de clausulas.A resposta de um programa, P , a um objectivo, O e originada pela invocacaoresposta(O,P ). Este programa recorre a uma variavel global, prog completo,cujo valor corresponde ao programa original. Esta variavel e utilizada para“repor” o programa original, P , no seguimento de um retrocesso.

Page 243: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.2. A SEMANTICA DO PROLOG 231

Algoritmo 5.1 resposta(obj, prog)prog completo := prog { Variavel global contendo o programa original }resposta := resposta aux(obj, prog, {})if resposta = No then

return respostaelse

return filtra vars(resposta, vars de(obj))end if

O procedimento vars de(obj) recebe como argumento um objectivo, obj edevolve um conjunto com as variaveis existentes nesse objectivo.

O procedimento filtra vars(subst, conj vars) recebe como argumentos umasubstituicao, subs, e um conjunto de variaveis, conj vars, e devolve a res-tricao da substituicao subst con conjunto de variaveis conj vars.

Consideramos que as seguintes operacoes estao definidas para sequencias:9

• junta : sequencia, sequencia )# sequencia

junta(seq1, seq2) tem como valor a sequencia que resulta de juntar asequencia seq2 no final da sequencia seq1.

• primeiro : sequencia )# elemento

primeiro(seq) tem como valor o elemento que se encontra na primeiraposicao da sequencia seq. Se a sequencia nao tiver elementos, o valordesta operacao e indefinido.

• resto : sequencia )# sequencia

resto(seq) tem como valor a sequencia que resulta de remover o pri-meiro elemento da sequencia seq. Se a sequencia nao tiver elementos,o valor desta operacao e indefinido.

• subsequencia : elemento, sequencia )# sequencia

subsequencia(el, seq) tem como valor a subsequencia de seq contendotodos os elementos que se encontram apos o elemento el. Se o elementonao pertencer a sequencia, o valor desta operacao e indefinido.

9Estas nao sao todas as operacoes para sequencias, mas apenas aquelas que nos inte-ressam. Nesta descricao, elemento corresponde ao tipo dos elementos da sequencia.

Page 244: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

232 CAPITULO 5. PROLOG

Algoritmo 5.2 resposta aux(obj, prog, subst)if sequencia vazia?(obj) then

return substelse

objectivo escolhido := primeiro(obj)cl a usar := escolhe(objectivo escolhido, prog)if cl a usar := Nenhuma then

return Noelse

cl a usar" := renomeia(cl a usar)s := unifica(objectivo escolhido, cabec, a(cl a usar"))novo obj := aplica subst(junta(corpo(cl a usar"), resto(obj)),

s)nova subst := compoe subst(subst, s)nova resposta := resposta aux(novo obj,

prog completo,nova subst)

if nova resposta 6= No thenreturn nova resposta

else {Verifica-se retrocesso}prog a usar := subsequencia(cl a usar, prog)resposta aux(obj, prog a usar, subst)

end ifend if

end if

• sequencia vazia? : sequencia )# logico

sequencia vazia?(seq) tem o valor verdadeiro se a sequencia seq e asequencia vazia e tem o valor falso em caso contrario.

O Algoritmo 5.2 assume que existem os selectores cabec, a e corpo, definidos,para clausulas, do seguinte modo:10

cabec, a(A 2 B1, . . . , Bn) = A

corpo(A 2 B1, . . . , Bn) = B1, . . . , Bn

Os procedimentos aplica subst e compoe subst utilizados pelo Algoritmo 5.2sao tais que:

10Consideramos que B1, . . . , Bn e uma sequencia.

Page 245: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.3. EXEMPLOS INICIAIS 233

Algoritmo 5.3 escolhe(obj, prog)if sequencia vazia?(prog) then

return Nenhumaelse

if unifica(obj, cabec, a(primeiro(prog))) thenreturn primeiro(prog)

elseescolhe(obj, resto(prog))

end ifend if

• aplica subst(seq, subst) recebe uma sequencia, seq, e uma substituicao,subst, e devolve a sequencia correspondente a aplicar a substituicao acada um dos elementos ds sequencia;

• compoe subst(subst1, subst2) recebe duas substituicoes, subst1 e subst2,e devolve a composicao da substituicao subst1 com a substituicaosubst2.

Finalmente, o procedimento renomeia(cl), recebe como argumento umaclausula e devolve uma variante dessa clausula com todas as suas variaveissubstituıdas por variavies que nunca foram utilizadas antes.

5.3 Exemplos iniciais

Nesta seccao apresentamos alguns exemplos simples que ilustram a semanticaprocedimental do prolog e que permitem mostrar a diferenca desta emrelacao a semantica declarativa.

Exemplo 5.3.1 (Antepassados e ascendentes directos) Consideremoso seguinte programa em prolog:

ad(marge, bart).ad(srB, marge).

ant(X, Y) :- ad(X, Y).

ant(X, Z) :- ant(X, Y), ad(Y, Z).

Page 246: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

234 CAPITULO 5. PROLOG

ant(srB, bart)

ant(X1, Y1) :- ad(X1, Y1)

{srB/X1, bart/Y1}

ad(srB, bart)

X

Figura 5.2: Parte da arvore SLD para o Exemplo 5.3.1.

Com este programa, para provar o objectivo ant(srB, bart), o prolog en-contra a regra ant(X, Y) :- ad(X, Y), a primeira clausula do programacuja cabeca unifica com o objectivo. O prolog vai usar uma variantedesta regra, ant(X1, Y1) :- ad(X1, Y1),11 estabelecendo o novo objec-tivo ad(srB, bart). Este novo objectivo nao unifica com a cabeca de ne-nhuma clausula, por isso, a sua prova falha. Dizemos que este objectivogerou um no falhado.

De acordo com a semantica procedimental, apos atingir o no falhado, oprolog volta ao objectivo ant(srB, bart), tentanto uma nova unificacaopara este objectivo. Este aspecto e ilustrado na Figura 5.2, na qual umacruz e utilizada para representar um no falhado e uma linha a tracejadoindica um retrocesso para um objectivo anterior.

Para facilitar a compreensao deste exemplo, na Figura 5.2 mostramos, dentrode um rectangulo, a variante da clausula encontrada e mostramos tambemdentro de outro rectangulo o unificador utilizado.

Apos o retrocesso, o objectivo ant(srB, bart) unifica com a regra

ant(X, Z) :- ant(X, Y), ad(Y, Z),

dando origem ao novo objectivo:12

11Neste capıtulo, decidimos que as variantes da clausulas usam nomes de variaveisque correspondem aos nomes originais das variaveis nas clausulas mas sao seguidas porum numero inteiro. O prolog utiliza, para variantes de clausulas, variaveis da formaL<inteiro> ou G<inteiro>.

12Note-se que foi utilizada outra variante da regra.

Page 247: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.3. EXEMPLOS INICIAIS 235

ant(srB, bart)

ad(srB, bart)

ant(X2, Z2) :- ant(X2, Y2), ad(Y2, Z2)

{srB/X2, bart/Z2}

ant(srB, Y2), ad(Y2, bart)

ant(X3, Y3) :- ad(X3, Y3)

{srB/X3, Y2/Y3}

X ad(srB, Y2), ad(Y2, bart)

ad(srB, marge)

{marge/Y2}

ad(marge, bart)

ad(marge, bart)

"

Figura 5.3: Arvore SLD para o Exemplo 5.3.1.

ant(srB, Y2), ad(Y2, bart).

Na Figura 5.3 mostra-se a toda arvore de refutacao gerada, para respon-der ao objectivo ant(srB, bart), a qual tem um no sucesso, permitindoresponder afirmativamente ao objectivo solicitado.

Numa interaccao com o prolog, todo este processo e resumido pelas se-guintes duas linhas:

?- ant(srB, bart).Yes `

Exemplo 5.3.2 Considerando o programa do Exemplo 5.3.1, podemos tam-bem obter a seguinte interaccao, utilizando variaveis:

?- ant(srB, X).X = margeYes

?- ant(X, bart).

Page 248: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

236 CAPITULO 5. PROLOG

X = margeYes

?- ant(X, Y).X = marge,Y = bartYes

Note-se que, nesta interaccao, o prolog apenas fornece a primeira respostaao objectivo solicitado.

Finalmente, utilizando variaveis anonimas, obtemos a seguinte interaccao:

?- ant(srB, _).Yes

?- ant(_, bart).Yes

Como exercıcio, o leitor devera construir as arvores SLD correspondentes asrespostas a estes objectivos e verificar as respostas fornecidas pelo prolog.`

A capacidade do prolog poder fornecer varios tipos de interaccao com omesmo predicado, como se apresenta nos Exemplos 5.3.1 e 5.3.2, da-se onome de polimodalidade.

Definicao 5.3.1 (Polimodalidade) A polimodalidade corresponde a ca-pacidade de utilizar multiplos modos de interaccao com um programa. !

Exemplo 5.3.3 (Antepassados e ascendentes directos – versao 2)Consideremos de novo o programa do Exemplo 5.3.1, e suponhamos queperguntavamos se a Eva e um antepassado do Bart. Obtemos a interaccao,

?- ant(eva, bart).ERROR: Out of local stack

Exception: (371,520) ant(eva, _L4086766)

a qual indica que foi gerado um caminho infinito na arvore SLD.

Page 249: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.3. EXEMPLOS INICIAIS 237

ant(eva, bart)

ad(eva, bart) ant(eva, Y2), ad(Y2, bart)

X ant(eva, Y3), ad(Y3, Y2),

ad(Y2, bart)

ad(eva, Y3),

ad(Y3, Y2),

ad(Y2, bart)

...

X

ad(eva, Y2),

ad(Y2, bart)

X

Figura 5.4: Arvore SLD infinita.

Na realidade, a regra ant(X, Z) :- ant(X, Y), ad(Y, Z) sera usada umnumero infinito de vezes, como se mostra na Figura 5.4, na qual ja nao indi-camos a variante da clausula com que e feita a unificacao nem o unificadorutilizado.

Suponhamos agora que o nosso programa era alterado do seguinte modo:13

ad(marge, bart).ad(srB, marge).

ant(X, Y) :- ad(X, Y).

ant(X, Z) :- ad(Y, Z), ant(X, Y).

13Agradeco ao Daniel Santos a sugestao desta alternativa.

Page 250: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

238 CAPITULO 5. PROLOG

ant(eva, bart)

ad(eva, bart) ad(Y2, bart), ant(eva, Y2)

X ant(eva, marge)

ad(eva, marge)

X

Figura 5.5: Arvore SLD corresponente ao novo programa.

A segunda regra tem a mesma semantica declarativa que a regra corres-pondente do programa anterior (pois a conjuncao e comutativa), mas temuma semantica procedimental diferente: “se quisermos saber que X e umantepassado de Z, tentemos primeiro encontrar um ascendente directo de Ze depois tentemos saber se este e um antepassado de X”.

Com este novo programa obtemos a seguinte interaccao (cuja arvore SLD seapresenta na Figura 5.5):

?- ant(srB, bart).Yes

?- ant(eva, bart).No

Convem fazer dois comentarios a este resultado:

1. Evitamos o ciclo infinito, fazendo com que o programa tente primeiroencontrar afirmacoes e so depois recorra a utilizacao de regras. Este

Page 251: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.3. EXEMPLOS INICIAIS 239

exemplo ilustra bem a diferenca entre a semantica declarativa e asemantica procedimental do prolog.

2. Notemos que o prolog nao conseguiu derivar que a Eva e um ante-passado do Bart, tendo respondido “nao” a nossa pergunta em lugarde “nao sei”.

Esta abordagem e chamada hipotese do mundo fechado e corresponde aassumir que todo aquilo que nao e explıcita ou implicitamente afirmadono programa, e falso. Ou seja, corresponde a assumir que tudo oque e verdade sobre o mundo pode ser inferido a partir do no nossoprograma, e daı a designacao de “mundo fechado”. `

Tendo em atencao os resultados apresentados no Exemplo 5.3.3, podemossugerir as seguintes regras empıricas para a escrita de programas em pro-log:

• Devemos evitar a utilizacao de clausulas que originam a recursao noprimeiro literal, a chamada recursao a esquerda.

• Devemos escrever as afirmacoes relativas a um predicado antes dasregras que definem esse predicado.

Exemplo 5.3.4 Consideremos o seguinte programa em prolog:

f(a).f(b).f(c).g(a).g(b).g(c).h(b).h(c).

r(X) :- f(X), g(X), h(X).

Com este programa, pedindo ao prolog para provar o objectivo r(X), ob-temos a interaccao:

?- r(X).X=b

Page 252: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

240 CAPITULO 5. PROLOG

r(X)

f(X), g(X), h(X)

g(a), h(a)

h(a)

X

Figura 5.6: Retrocesso apos o no falhado.

Tal como no Exemplo 5.3.1, verifica-se um retrocesso para o objectivo f(X),g(X), h(X). Na realidade, o primeiro sub-objectivo do objectivo f(X),g(X), h(x) unifica com f(a), dando eventualmente origem a um ramo fa-lhado e ao retrocesso para o objectivo f(X), g(X), h(X) (Figura 5.6).

A segunda unificacao do sub-objectivo f(X), com f(b), da origem a umsucesso e daı a resposta obtida na interaccao anterior. Na Figura 5.7 mos-tramos a arvore SLD para esta interaccao. `

Em prolog existe a possibilidade de solicitar mais do que uma respostaao mesmo objectivo. Para isso, utiliza-se a disjuncao “;”, intoduzida ime-diatamente a seguir a resposta fornecida pelo prolog. A utilizacao dadisjuncao apos uma resposta fornecida pelo prolog origina um no falhadocomo resultado da prova do objectivo anterior.

Exemplo 5.3.5 (Multiplas respostas) Consideremos novamente o pro-grama do Exemplo 5.3.4. Utilizando a disjuncao para obter multiplas res-postas, podemos obter a seguinte interaccao, cuja representacao em arvoreSLD se apresenta na Figura 5.8.

Page 253: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.3. EXEMPLOS INICIAIS 241

r(X)

f(X), g(X), h(X)

g(a), h(a)

h(a)

X

g(b), h(b)

h(b)

"

Figura 5.7: Arvore SLD para o Exemplo 5.3.4.

?- r(X).X = b ;X = c ;No `

Exemplo 5.3.6 (Ligacoes em grafos) Consideremos o grafo apresentadona Figura 5.9. Representaremos os arcos deste grafo atraves do predicadoliga/2. A expressao liga(X, Y) que afirma que existe um arco que ligadirectamente o no X ao no Y.

O seguinte programa em prolog define o conceito de ligacao indirecta en-tre dois nos do grafo (correspondente ao predicado liga ind/2). Nesteprograma apresentamos tambem o modo de escrever comentarios em pro-log. Um comentario e todo o texto que se encontra entre os sımbolos /* e*/.14

14Como alternativa, um comentario pode tambem ser o texto que se encontra entre osımbolo % e o caracter de fim de linha.

Page 254: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

242 CAPITULO 5. PROLOG

r(X)

f(X), g(X), h(X)

g(a), h(a)

h(a)

X

g(b), h(b)

h(b)

"

;

g(c), h(c)

h(c)

"

;

Figura 5.8: Retrocesso apos solicitacao de novas respostas.

/* arcos existentes no grafo */

liga(a, h).liga(a, b).liga(b, c).liga(b, d).liga(d, e).liga(e, f).liga(f, c).liga(h, i).liga(i, g).

/* definic~ao de ligac~ao indirecta */

liga_ind(X, Y) :- liga(X, Y).

Page 255: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.3. EXEMPLOS INICIAIS 243

a

i

b c

d f

g

eh

Figura 5.9: Grafo correspondente a situacao do Exemplo 5.3.6.

liga_ind(X, Z) :- liga(X, Y), liga_ind(Y, Z).

Com este programa podemos obter a seguinte interaccao:

?- liga_ind(a, X).X = h ;X = b ;X = i ;X = g ;X = c ;X = d ;X = e ;X = f ;X = c ;No

Note-se que o prolog apresenta respostas repetidas correspondendo aomesmo resultado obtido atraves de derivacoes diferentes. `

Exemplo 5.3.7 (Inteiros) Consideremos o seguinte programa em pro-log:

Page 256: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

244 CAPITULO 5. PROLOG

inteiro(0).

inteiro(s(X)) :- inteiro(X).

Este programa afirma que zero e um inteiro e que o sucessor de um inteiro(representado pelo functor s/1) e um inteiro. Com este programa obtemos ainteraccao (na Figura 5.10 mostramos parte da arvore SLD gerada por estainteraccao):

?- inteiro(0).Yes

?- inteiro(s(0)).Yes

?- inteiro(X).X = 0 ;X = s(0) ;X = s(s(0)) ;X = s(s(s(0))) ;X = s(s(s(s(0)))) ;X = s(s(s(s(s(0))))) ;X = s(s(s(s(s(s(0)))))) ;X = s(s(s(s(s(s(s(0))))))) ;X = s(s(s(s(s(s(s(s(0)))))))) ;X = s(s(s(s(s(s(s(s(s(0)))))))))Yes

E importante notar que o prolog “nao sabe”, por exemplo, que s(0) e 1,pois nada lhe foi dito sobre isso; no entanto o prolog “sabe” que s(0) eum inteiro. Voltamos a abordar este aspecto na Seccao 5.7. `

Page 257: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.3. EXEMPLOS INICIAIS 245

inteiro(x)

inteiro(0)

"

;

inteiro(s(X))

inteiro(X)

inteiro(0)

"

;

inteiro(s(s(X)))

inteiro(s(X)) ...

inteiro(X)

inteiro(0)

"

;

Figura 5.10: Parte da arvore SLD gerada pelo Exemplo 5.3.7.

Page 258: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

246 CAPITULO 5. PROLOG

Predicado SignificadoO predicado de unificacao.

= O literal <t1> = <t2>, alternativamente =(<t1>, <t2>),tem sucesso apenas se os termos <t1> e <t2> podem serunificados.A negacao do predicado de unificacao.

\= O literal <t1> \= <t2>, alternativamente \=(<t1>, <t2>),tem sucesso apenas se os termos <t1> e <t2> nao podem serunificados.

Tabela 5.1: Predicados de unificacao de termos.

5.4 Unificacao de termos

Em prolog existem predicados pre-definidos para efectuar a unificacao determos. Um predicado pre-definido, ou seja um predicado que ja existequando comecamos a usar o prolog, e tambem conhecido por predicado desistema.

A unificacao de termos corresponde a um literal cuja sintaxe e definida doseguinte modo:

<unificacao de termos> ::= <op. unificacao>(<termo>, <termo>)<termo> <op. unificacao> <termo>

<op. unificacao> ::= = \=

Na definicao de unificacao de termos, o prolog permite a utilizacao daoperacao de unificacao, quer como um predicado normal, quer como umoperador binario escrito em notacao infixa. Neste livro, para a unificacaode termos, utilizamos apenas a notacao infixa. Quando utilizamos um pre-dicado em notacao infixa dizemos que estamos perante a utilizacao de umoperador. Os operadores sao discutidos na Seccao 5.8.

O significado dos predicados de unificacao de termos e apresentado na Ta-bela 5.1.

O predicado de unificacao efectua a unificacao dos termos que sao seus ar-gumentos, reportando, ou que a unificacao nao e possıvel (e consequente-mente, falhando), ou produzindo substituicoes apropriadas para as variaveisque aparecem nos termos.

Page 259: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.4. UNIFICACAO DE TERMOS 247

Exemplo 5.4.1 Consideremos a seguinte interaccao:15

?- a = b.No

?- f(X, a) = f(b, Y).X = b,Y = aYes

?- X = a.X = aYes

?- X = X.Yes?- X = Y.X = YYes

?- f(X, a) = f(b, X).No

?- ant(srB, bart) = ant(X, Y).X = srB,Y = bartYes

?- f(_, X, _) = f(a, b, c).X = bYes

O penultimo objectivo, ant(srB, bart) = ant(X, Y), pode-nos parecerestranho. Na realidade, temos utilizado ant como um predicado e nao comoum functor. No entanto, quer ant(srB, bart), quer ant(X, Y), corres-pondem sintacticamente a termos (e tambem a literais).

O ultimo objectivo mostra que multiplas ocorrencias da variavel anonimanuma mesma expressao sao tratadas como variaveis distintas. `

15Deixamos como exercıcio a explicacao dos resultados obtidos nesta interaccao.

Page 260: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

248 CAPITULO 5. PROLOG

Predicado SignificadoO predicado de identidade.

== O literal <t1> == <t2>, alternativamente ==(<t1>, <t2>),tem sucesso apenas se os termos <t1> e <t2> sao identicos.A negacao do predicado de identidade.

\== O literal <t1> \== <t2>, alternativamente \==(<t1>, <t2>),tem sucesso apenas se os termos <t1> e <t2> nao sao identicos.

Tabela 5.2: Predicados de comparacao de termos.

5.5 Comparacao de termos

Em prolog existem predicados pre-definidos para efectuar a comparacaode termos. A comparacao de termos corresponde a um literal cuja sintaxe edefinida do seguinte modo:

<comparacao de termos> ::= <op. comparacao>(<termo>, <termo>)<termo> <op. comparacao> <termo>

<op. comparacao> ::= == \==

Analogamente as operacoes de unificacao, as operacoes de comparacao determos podem ser utilizadas, quer quer como predicados normais, quer emnotacao infixa, caso em que se dizem operadores. Os operadores sao discu-tidos na Seccao 5.8. Neste livro, em relacao as operacoes de comparacao determos, limitamo-nos a sua utilizacao como operadores, ignorando proposi-tadamente a possibilidade da sua utilizacao como predicados normais.

O significado dos predicados de comparacao de termos e apresentado naTabela 5.2.

O predicado de identidade testa se dois termos sao iguais, nao instanciandovariaveis, e tendo sucesso apenas se os dois termos sao identicos.

Exemplo 5.5.1 Consideremos a seguinte interaccao:

?- a == a.Yes

?- a == ’a’.Yes

Page 261: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.6. A UTILIZACAO DE PREDICADOS PRE-DEFINIDOS 249

?- a == b.No

?- X == Y.No

?- X == a.No

?- X = a, X == a.X = aYes

Em relacao a segunda linha deste exemplo, note-se que o atomo a temo mesmo nome que o atomo ’a’, sendo estes dois atomos consideradosidenticos.

Na ultima linha deste exemplo, notemos que a unificacao da variavel X e feitapelo operador de unificacao, pelo que, quando o operador de comparacao eutilizado, a variavel X ja esta associada com o atomo a. `

5.6 A utilizacao de predicados pre-definidos

Nas seccoes 5.4 e 5.5 apresentamos alguns predicados pre-definidos do pro-log. Os predicados pre-definidos podem ser utilizados como qualquer pre-dicado definido pelo programador, com duas excepcoes:

1. Os predicados pre-definidos nao podem ser usados como predicadosnuma afirmacao.

2. Os predicados pre-definidos nao podem ser utilizados como predicadosna cabeca de uma clausula.

Na realidade, qualquer destas utilizacoes levaria a uma alteracao na definicaode um predicado pre-definido, o que o prolog nao permite fazer.

Page 262: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

250 CAPITULO 5. PROLOG

Operacao Significado+ <t1> + <t2>, alternativamente +(<t1>, <t2>),

corresponde a soma de <t1> com <t2>.- <t1> - <t2>, alternativamente -(<t1>, <t2>),

corresponde ao resultado de subtrair <t2> a <t1>.- -<t> corresponde ao simetrico de <t>.* <t1> * <t2>, alternativamente *(<t1>, <t2>),

corresponde ao produto de <t1> por <t2>./ <t1> / <t2>, alternativamente /(<t1>, <t2>),

corresponde ao resultado de dividir <t1> por <t2>.** <t1> ** <t2>, alternativamente **(<t1>, <t2>),

corresponde a potencia com base <t1> e expoente <t2>.<t1> // <t2>, alternativamente //(<t1>, <t2>),

// corresponde ao resultado da divisao inteira entre <t1>e <t2>.

mod <t1> mod <t2>, alternativamente mod(<t1>, <t2>),corresponde ao resto da divisao inteira entre <t1> e <t2>.

round round(<t>) corresponde ao resultado de arredondar<t> para o inteiro mais proximo.

sqrt sqrt(<t>) corresponde a raiz quadrada de <t>.abs abs(<t>) corresponde ao valor absoluto de <t>.

Tabela 5.3: Algumas operacoes aritmeticas em prolog.

5.7 Aritmetica em prolog

Operacoes aritmeticas. Como em outras linguagens de programacao,em prolog existe um conjunto de operacoes aritmeticas que a partir dedois termos correspondentes a numeros, geram um termo correspondente aaplicacao da operacao sobre esses numeros. Na Tabela 5.3 apresentamosalgumas destas operacoes.16

Algumas das operacoes aritmeticas apresentam duas notacoes, a notacaocorrespondente a aplicacao de um fuctor, e a notacao infixa. A notacaoinfixa, corresponde a uma representacao externa que permite a utilizacao daoperacao tal como o fazemos no dia-a-dia. Quando utilizamos uma letra defuncao em notacao infixa dizemos que estamos perante a utilizacao de umoperador. Os operadores sao discutidos na Seccao 5.8.

16A descricao de todas as operacoes artimeticas existentes em prolog pode ser consul-tada em [Deransart, Ed-Dbali e Cervoni 96].

Page 263: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.7. ARITMETICA EM PROLOG 251

Exemplo 5.7.1 Considerando as operacoes de unificacao de termos (Ta-bela 5.1) e as operacoes aritmeticas apresentadas na Tabela 5.3, podemosgerar as seguintes interacoes:

?- 2 + 3 = +(2, 3).Yes

?- 2 + 3 = +(3, 2).No

Note-se que embora 2 + 3 e +(2, 3) tenham uma representacao externadiferente, estes dois termos correspondem internamente a mesma entidade,+(2, 3), e daı o resultado afirmativo da unificacao. Por outro lado, note-seque os termos 2 + 3 e +(3, 2) nao unificam.

?- X = +(2, 3).X = 2 + 3Yes

Note-se que X unifica com o termo +(2, 3) e nao com o seu valor (5),dado que o predicado “=” efectua a unificacao. O resultado da unificacao eapresentado utilizando a representacao externa para a adicao.

Analogamente, obtemos a seguinte interaccao:

?- 2 + X = Y + 3.X = 3,Y = 2Yes

`

Operacoes relacionais numericas. O prolog possui um conjunto depredicados pre-definidos que relacionam termos correspondentes a expressoesaritmeticas. A utilizacao de operacoes relacionais numericas da origem a li-terais cuja sintaxe e definida do seguinte modo:

<operacao rel. numerica> ::= <op. rel. numerico>(<termo>, <termo>)<termo> <op. rel. numerico> <termo>

Page 264: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

252 CAPITULO 5. PROLOG

Predicado SignificadoO predicado de igualdade aritmetica.

=:= O literal <n1> =:= <n2>, alternativamente =:=(<n1>, <n2>),tem sucesso apenas se <n1> e <n2> correspondem ao mesmointeiro.A negacao do predicado de igualdade aritmetica.

=\= O literal <n1> =\= <n2>, alternativamente =\=(<n1>, <n2>),tem sucesso apenas se <n1> e <n2> nao correspondem aomesmo inteiro.O predicado maior.

> O literal <n1> > <n2>, alternativamente >(<n1>, <n2>),tem sucesso apenas se <n1> e maior que <n2>.O predicado menor.

< O literal <n1> < <n2>, alternativamente <(<n1>, <n2>),tem sucesso apenas se <n1> e menor que <n2>.O predicado menor ou igual.

=< O literal <n1> =< <n2>, alternativamente =<(<n1>, <n2>),tem sucesso apenas se <n1> e menor ou igual a <n2>.O predicado maior ou igual.

>= O literal <n1> >= <n2>, alternativamente >=(<n1>, <n2>),tem sucesso apenas se <n1> e maior ou igual a <n2>.

Tabela 5.4: Predicados relacionais numericos em prolog.

<op. rel. numerico> ::= =:= =\= > < =< >=

Tal como no caso dos outros predicados pre-definidos, as operacoes relaci-onais numericas podem ser utilizadas, quer como um predicado normal emlogica, quer em notacao infixa, caso a que correspondem a um operador.Neste livro restringimo-nos as sua utilizacao como operadores.

As operacoes relacionais numericas, e o seu significado, sao apresentadas naTabela 5.4.

As operacoes relacionais numericas apresentam um comportamento que di-fere do mecanismo de unificacao utilizado ate aqui no prolog. As operacoesrelacionais numericas forcam a avaliacao de cada um dos termos envolvidos,antes da aplicacao da operacao relacional. Por esta razao, estas operacoescorrespondem a um aspecto nao puro do prolog.

Dado que estas operacoes forcam a avaliacao dos seus argumentos, convemdefinir o modo como uma expressao aritmetica e avaliada em prolog. Aavaliacao de um termo correspondente a uma expressao aritmetica e definida

Page 265: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.7. ARITMETICA EM PROLOG 253

do seguinte modo:

1. A avaliacao de um numero produz o proprio numero.

2. A avaliacao de um termo composto cuja operacao principal corres-ponde ao functor f de n argumentos consiste na avaliacao de cadaum dos argumentos do termo (por qualquer ordem) e na aplicacao daoperacao correspondente ao functor f aos valores que correspondemao resultado da avaliacao.

Exemplo 5.7.2 Consideremos a seguinte interaccao:

?- 5 < 7.Yes

?- 3 + 5 > 12.No

?- 3 + 5 >= +(4, +(2, 2)).Yes

?- X > 12.ERROR: >/2: Arguments are not sufficiently instantiated

Note-se que o ultimo objectivo da origem a um erro pois a variavel X naoesta ligada a nenhum valor. `

Avaliacao de uma expressao O prolog fornece o predicado pre-definido,“is”, que permite a avaliacao de uma expressao aritmetica. A utilizacaodeste predicado e definida sintacticamente do seguinte modo:17

<avaliacao> ::= is(<valor>, <expressao>)<valor> is <expressao>

<valor> ::= <variavel> <numero>

<expressao> ::= <termo composto>

O predicado “is” impoe a restricao adicional que o resultado da avaliacaoda expressao tem que ser um numero.

17Novamente, note-se a possibilidade da utilizacao como um predicado normal ou comoum operador.

Page 266: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

254 CAPITULO 5. PROLOG

A avaliacao e considerada um literal (ver Seccao 5.1.2) que tem uma regraespecial de avaliacao: ao avaliar um literal da forma v is exp, se a expressaoexp e avaliada sem erros, produzindo um valor, entao se este valor e unificavelcom v a avaliacao tem sucesso devolvendo a substituicao adequada; em casocontrario, a avaliacao falha.

Exemplo 5.7.3 Usando a avaliacao, podemos gerar a seguinte interaccao:18

?- 45 is 40 + 5.Yes

?- 50 is 40 + 5.No

?- X is 5 + 7 * 4.X = 33Yes

Note-se a diferenca entre a utilizacao da avaliacao e a utilizacao do predicadode unificacao:

?- X = 5 + 7 * 4.X = 5+7*4Yes

`

E tambem importante notar que uma vez que num literal correspondentea uma avaliacao se avalia o termo antes da ligacao do seu valor a variavel,as variaveis que eventualmente existam no termo devem estar instanciadasno momento da sua avaliacao. Isto significa que com a introducao da ava-liacao, perdemos o aspecto da polimodalidade ate aqui existente nos nossosprogramas.

Exemplo 5.7.4 Consideremos o predicado soma 5 e duplica/2. A ex-pressao soma 5 - e duplica(X, Y) afirma que Y e gual a 2 * (X + 5). Estepredicado e definido em prolog do seguinte modo:

18A avaliacao da terceira expressao utiliza as diferentes prioridades entre os operadores,as quais sao discutidas na Seccao 5.8.

Page 267: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.7. ARITMETICA EM PROLOG 255

soma 5 e duplica(X, Y) :- Y is 2 * (X + 5).

Com este predicado, obtemos a interaccao:

?- soma_5_e_duplica(10, Y).Y = 30Yes

?- soma_5_e_duplica(10, 30).Yes

?- soma_5_e_duplica(X, 30).ERROR: is/2: Arguments are not sufficiently instantiated^ Exception: (8) 30 is 2* (_G180+5)

A ultima linha desta interacao ilustra o aspecto que discutimos. Uma vezque a variavel X nao esta instanciada, a avaliacao da expressao 2 * (X +5) origina um erro. `

Exemplo 5.7.5 (Factorial) Com a introducao da avaliacao podemos es-crever um programa para o calculo da funcao factorial:

n! =#

1 se n = 1n.(n5 1)! se n > 1

Seja factorial um predicado de dois argumentos que afirma que o segundoargumento e o factorial do primeiro argumento, ou seja factorial(N, F)significa que N! tem o valor F. Podemos escrever o seguinte programa:

factorial(1,1).

factorial(N,F) :-N > 1,N_menos_1 is N-1,factorial(N_menos_1, F_N_menos_1),F is N * F_N_menos_1.

Note-se que a utilizacao do literal N > 1 bloqueia os calculos para o caso deN ser menor ou igual a zero.

Com este programa podemos obter a seguinte interaccao:

Page 268: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

256 CAPITULO 5. PROLOG

?- factorial(4, X).X = 24Yes

Notemos ainda que devido a utilizacao da avaliacao no programa factorialo objectivo factorial(X, 24) dara origem a um erro. `

5.8 Operadores

O prolog permite-nos escrever expressoes utilizando predicados e functoresnuma notacao que difere da notacao tradicional da logica. Nas expressoesem logica de primeira ordem, tanto as letras de predicado como as letras defuncao sao escritas imediatamente a esquerda da lista dos respectivos argu-mentos. Na nossa utilizacao quotidiana de operacoes aritmeticas utilizamosa notacao infixa, em que o nome da operacao e escrito entre os argumentosdessa operacao. O prolog define o conceito de operador, uma letra de pre-dicado ou uma letra de funcao (um functor), cuja utilizacao pode ser feitarecorrendo a uma notacao infixa, prefixa ou sufixa.

A aplicacao de um operador e sintacticamente definida do seguinte modo:19

<aplicacao de operador> ::= <termo> <operador> <termo><operador> <termo><termo> <operador>

<operador> ::= <atomo>

A primeira linha da definicao de aplicacao de operador define a notacaoinfixa, a segunda, a notacao prefixa e a terceira, a notacao sufixa.

Um operador e simplesmente definido como um atomo, pois este pode cor-responder quer a um functor quer a uma letra de predicado, casos em que aaplicacao do operador corresponde, respectivamente, a um termo ou a umliteral.

A utilizacao de um operador obriga-nos a considerar tres aspectos, a priori-dade, a posicao e a associatividade.

19Esta definicao estende as definicoes de termo composto e de literal, apresentadas,respectivamente, nas paginas 222 e 223.

Page 269: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.8. OPERADORES 257

Prioridade. A prioridade e uma grandeza relativa a precedencia do ope-rador face as precedencias dos outros operadores existentes numa expressao.Em prolog a prioridade e definida atraves de classes de prioridades, asquais estao associadas a valores inteiros. Quanto menor for o inteiro corres-pondente a classe de prioridade de um operador, mais fortemente o operadorse liga aos operandos.

Exemplo 5.8.1 Se a prioridade do operador op1 for menor do que a pri-oridade do operador op2, entao a expressao a op1 b op2 c e interpretadacomo (a op1 b) op2 c. `

Evidentemente, a utilizacao de parenteses pode ser usada para alterar aordem de aplicacao de operadores.

Em prolog, as classes de prioridades correspondem a valores inteiros entre1 e 1200. Cada operador pre-definido esta associado a uma dada classe deprioridades. Na Tabela 5.6 apresentamos as classes de prioridades para osoperadores existentes em prolog.

Exemplo 5.8.2 Consultando a Tabela 5.6, verificamos que o operador *tem a prioridade 400, que o operador + tem a prioridade 500 e que o operadoris tem a prioridade 700. Estas classes de prioridades sao as responsaveispelo resultado obtido na interaccao:

?- X is 3 + 2 * 5.X = 13Yes

Na realidade, o operador de prioridade mais baixa e *, sendo aplicado em pri-meiro lugar, seguido da aplicacao do operador + e, finalmente, da aplicacaodo operador is. `

Posicao. A posicao especifica a representacao externa da utilizacao dooperador, a qual pode ser prefixa, infixa ou sufixa. Numa operacao comrepresentacao prefixa o operador aparece antes do operando, como e o casodo operador numero simetrico, por exemplo, -5; numa operacao com repre-sentacao infixa o operador aparece entre os operandos, que apenas podemser dois, como e o caso do operador de adicao, por exemplo, 5 + 2; e numaoperacao com representacao sufixa o operador aparece depois do operando,como e o caso do operador factorial, por exemplo, 3!.

Page 270: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

258 CAPITULO 5. PROLOG

Em prolog a posicao de um operador e definida atraves do recurso a umconjunto de designacoes, representadas pelos atomos fx, fy, xf, yf, xfx, xfye yfx. Estas designacoes podem ser vistas como padroes em que f designao operador e x e y designam os operandos:

• As designacoes fx e fy especificam que o operador e unario e e escritoem notacao prefixa. A diferenca entre elas refere-se a associatividadeda operacao.

• As designacoes xf e yf especificam que o operador e unario e e escritoem notacao sufixa. A diferenca entre elas refere-se a associatividadeda operacao.

• As designacoes xfx, xfy e yfx especificam que o operador e binario,e e escrito em notacao infixa. A diferenca entre elas refere-se a associ-atividade da operacao.

Associatividade. A associatividade de um operador define como e que ooperador se combina consigo proprio ou com outros operadores com a mesmaclasse de prioridade. A associatividade e importante quando numa expressaoaparecem varias utilizacoes do mesmo operador ou aparecem varias uti-lizacoes de operadores com a mesma classe de prioridade. Consideremos,por exemplo, a expressao 10 5 5 5 2. Qual a ordem da avaliacao desta ex-pressao? Sera que a expressao e equivalente a (1055)52, ou que a expressaoe equivalente a 10 5 (5 5 2)? A resposta a esta questao e dada atraves daassociatividade dos operadores.

A associatividade de um operador e definida atraves da utilizacao dos atomosx ou y juntamente com a especificacao da posicao do operador:

• A utilizacao de um y significa que o operando correspondente podeconter operadores com a mesma classe de prioridade ou com classe deprioridade mais baixa do que a classe de prioridade correspondente aooperador f.

• A utilizacao de um x significa que cada operador existente no operandodeve ter uma prioridade estritamente mais baixa do que a classe deprioridade correspondente ao operador f.

Page 271: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.8. OPERADORES 259

Exemplo 5.8.3 Seja # um operador binario em prolog20 e consideremosa expressao a # b # c. Esta expressao pode ter duas leituras distintas,

• (a # b) # c

ou

• a # (b # c),

nas quais a utilizacao de parenteses forca uma das possıveis leituras.

1. Supondo que o operador # e definido por yfx, entao apenas a primeiraleitura e considerada, pois a designacao yfx nao permite que o segundooperando contenha um operador com a mesma classe de prioridade que#. Ou seja, a designacao yfx forca a associatividade a esquerda.

2. Supondo que o operador # e definido por xfy, entao apenas a segundaleitura e considerada, pois a designacao xfy nao permite que o primeirooperando contenha um operador com a mesma classe de prioridade que#. Ou seja, a designacao xfy forca a associatividade a direita.

3. Supondo que o operador # e definido por xfx, entao nenhuma dasleituras e considerada. Ou seja, a designacao xfx nao permitre aassociatividade. `

Exemplo 5.8.4 Seja $ um operador unario do tipo prefixo em prolog21

e consideremos a expressao $ $ a. Esta expressao estara sintacticamentecorrecta, tendo o significado $($(a)), se o operador $ for definido por fy,mas sera uma expressao ilegal se este operador for definido por fx. `

Na Tabela 5.5 apresentamos um resumo das possıveis especificacoes para aposicao e a associatividade de um operador. Na Tabela 5.6 apresentamosa prioridade e o tipo de todos os operadores pre-definidos existentes emprolog.22

Existe um predicado pre-definido, current op/3, que estabelece a relacaoentre a prioridade, a associatividade e o nome da cada operador existente

20Propositadamente utilizamos um sımbolo que nao corresponde a nenhum operadorexistente em prolog.

21Ibid.22Uma descricao completa do significado dos operadores que nao sao abordados neste

livro pode ser consultada em [Deransart, Ed-Dbali e Cervoni 96].

Page 272: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

260 CAPITULO 5. PROLOG

Especificacao Tipo de Associatividadeoperador

fx prefixo Nao associativofy prefixo Associatividade a direitaxfx infixo Nao associativoxfy infixo Associatividade a direitayfx infixo Associatividade a esquerdaxf sufixo Nao associativoyf sufixo Associatividade a esquerda

Tabela 5.5: Possıveis especificacoes de posicao e de associatividade.

em prolog. A expressao current op(P, A, Op) afirma que o operador Optem prioridade P e associatividade A.

Exemplo 5.8.5 Consideremos a seguinte interaccao:

?- current_op(Prioridade, Associatividade, *).Prioridade = 400,Associatividade = yfxYes

?- current_op(Prioridade, Associatividade, -).Prioridade = 200,Associatividade = fy ;Prioridade = 500,Associatividade = yfx ;No

A interaccao anterior mostra que o operador “-” tem duas possıveis uti-lizacoes, ou em notacao prefixa, com classe de prioridade 200, como naexpressao -5, ou em notacao infixa, com prioridade 500, como na expressao5 - 2.

?- current_op(Prioridade, Associatividade, is).Prioridade = 700,Associatividade = xfx ;No

Page 273: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.9. INSTRUCOES DE LEITURA E DE ESCRITA 261

Prioridade Tipo Operador1200 xfx -->, :-1200 fx :-, ?-1100 xfy ;, |1050 xfy ->, op*->1000 xfy ,954 xfy \900 fy \+900 fx ~700 xfx <, =, =.., =@=, =:=, =<, ==, =\=,

>, >=, @<, @=<, @>, @>=, \=, \==, is600 xfy :500 yfx +, -, /\, \/, xor500 fx +, -, ?, \400 yfx *, /, //, rdiv, <<, >>, mod, rem200 xfx **200 xfy ^

Tabela 5.6: Prioridade dos operadores existentes em prolog.

A interaccao anterior mostra que o operador “is” apenas pode ser utilizadoem notacao infixa. Este aspecto nao invalida que utilizemos o predicado“is” como um predicado normal, como o mostra a seguinte interaccao:

?- is(X, 2 + 3).X = 5Yes

`

5.9 Instrucoes de leitura e de escrita

Como qualquer linguagem de programacao, o prolog apresenta instrucoesde leitura e de escrita. Estas instrucoes correspondem a predicados. Ospredicados de leitura e de escrita correspondem a aspectos nao puros doprolog.

Page 274: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

262 CAPITULO 5. PROLOG

Instrucoes de leitura. O predicado pre-definido, read/1, unifica o termoque e escrito no teclado com o termo que e seu argumento. Se a unificacaotem suceso, o literal tem sucesso, em caso contrario falha. Esta descricaosignifica que ao encontrar o literal read(X) se a variavel X ja estiver instan-ciada e nao unificar com o termo escrito no teclado, o literal falha. Para quea operacao de leitura tenha lugar, o termo que e escrito no teclado deve serterminado com um ponto e ser seguido de “return”.23

Exemplo 5.9.1 A seguinte interaccao mostra a utilizacao do predicadoread:

?- read(X).|: a.X = aYes

Note-se que o caracter de pronto da leitura corresponde a “|:”.

?- read(b).|: a.No?- X=b, read(X).|: a.No

O objectivo read(b) falha pois o termo que e fornecido, a, nao unifica como seu argumento; o objectivo read(X) falha pois a variavel esta instanciadae o valor fornecido nao unifica com a variavel.

?- read(X).|: 3 + 2.X = 3+2Yes

Note-se que a variavel X unifica com o termo 3 + 2.

?- read(X).|: 3 mais 2.ERROR: Stream user_input:0:78 Syntax error: Operator expected

23Note-se que e possivel ler de um ficheiro embora isso nao seja abordado neste livro.

Page 275: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.9. INSTRUCOES DE LEITURA E DE ESCRITA 263

Este objectivo origina um erro pois o prolog nao conhece o operador mais.`

O predicado read apresenta um comportamento especial, no sentido queum objectivo utilizando este predicado apenas pode ser executado uma vez,ou seja um objectivo com o predicado read tem sucesso no maximo umavez, falhando em qualquer tentativa que seja feita posteriormente para osatisfazer.

Exemplo 5.9.2 Considremos o programa em prolog

leitura(Y) :- read(Y).

e consideremos a interaccao

?- leitura(Z).|: a.Z = a ;No

Note-se que ao tentarmos obter uma resposta alternativa, este programafalha, pois essa alternativa envolvia a tentativa de satisfazer o objectivoread(Y) mais do que uma vez. `

Instrucoes de escrita. O predicado pre-definido, write/1, escreve noterminal o valor do termo que e seu argumento. O predicado pre-definido,nl/0, origina um salto para a proxima linha do terminal.24 Os predicadoswrite e nl apresentam um comportamento semelhante ao do predicado readno sentido em que nao podem ser satisfeitos mais do que uma vez.

Exemplo 5.9.3 A seguinte interaccao ilustra o comportamento das ins-trucoes de escrita:

?- write(’a’), write(’b’).abYes

?- write(’a’), nl, write(’b’).

24Note-se que e possivel escrever para um ficheiro embora isso nao seja abordado nestelivro.

Page 276: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

264 CAPITULO 5. PROLOG

abYes

?- X = 3, write(’X = ’), write(X), nl.X = 3X = 3 ;No

?- write(+(2, 3)).2+3Yes

Note-se que o predicado write “conhece” os operadores, mostrando o resul-tado recorrendo a sua definicao. `

Exemplo 5.9.4 (Torre de Hanoi) Apresentamos um programa para asolucao do puzzle chamado a Torre de Hanoi.25 A Torre de Hanoi e cons-tituıda por 3 postes verticais, nos quais podem ser colocados discos dediametros diferentes, furados no centro, variando o numero de discos depuzzle para puzzle. O puzzle inicia-se com todos os discos num dos postes(o poste da esquerda), com o disco menor no topo e com os discos ordena-dos, de cima para baixo, por ordem crescente dos respectivos diametros, ea finalidade e movimentar todos os discos para um outro poste (o poste dadireita), tambem ordenados por ordem crescente dos respectivos diametros,de acordo com as seguintes regras: (1) apenas se pode movimentar um discode cada vez; (2) em cada poste, apenas se pode movimentar o disco de cima;(3) nunca se pode colocar um disco sobre outro de diametro menor.

Na Figura 5.11 apresentamos um exemplo das configuracoes inicial e finalpara a Torre de Hanoi com tres discos.

Suponhamos que pretendıamos escrever um programa para resolver o puzzleda Torre de Hanoi para um numero n de discos (o valor de n sera fornecidoao programa). Para resolvermos o puzzle da Torre de Hanoi com n discos(n > 1), teremos de efectuar basicamente tres passos: (1) movimentar n5 1discos do poste da esquerda para o poste do centro (utilizado como posteauxiliar); (2) movimentar o disco do poste da esquerda para o poste dadireita; (3) movimentar os n5 1 discos do poste do centro para o poste da

25A descricao deste exemplo foi adaptada de [Martins e Cravo 2007], pags. 105–110.

Page 277: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.9. INSTRUCOES DE LEITURA E DE ESCRITA 265

'

Figura 5.11: Torre de Hanoi com tres discos.

'

'

'

Figura 5.12: Solucao da Torre de Hanoi com tres discos.

direita. Estes passos encontram-se representados na Figura 5.12 para o casode n = 3.

Podemos escrever seguinte programa para resolver a torre de Hanoi. Esteprograma utiliza o predicado move/4 para movimentar n discos. Este predi-cado recebe uma indicacao explıcita de quais os postes de origem e destinodos discos, bem como qual o poste que deve ser usado como poste auxiliar (erepresenta o poste da esquerda, d represenra o poste da direita e c representao poste do centro).

hanoi :-write(’Quantos discos quer considerar? ’),

Page 278: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

266 CAPITULO 5. PROLOG

nl,read(N),number(N),inicio(N),move(N, e, d, c).

inicio(N) :-write(’Soluc~ao da Torre de Hanoi para ’),write(N),write(’ discos: ’),nl.

move(1, Origem, Destino, _) :-write(Origem),write(’ -> ’),write(Destino),nl.

move(N, Origem, Destino, Aux) :-N>1,M is N-1,move(M, Origem, Aux, Destino),move(1, Origem, Destino, _),move(M, Aux, Destino, Origem).

Utilizando este programa obtemos a seguinte interaccao:

?- hanoi.Quantos discos quer considerar?|: 3.Soluc~ao da Torre de Hanoi para 3 discos:e -> de -> cd -> ce -> dc -> ec -> de -> dYes

Page 279: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.10. ESTRUTURAS 267

data

A M D

Figura 5.13: Representacao da estrutura “data”.

`

5.10 Estruturas

Ate agora temos trabalhado com afirmacoes, com regras e com objectivosque utilizam tipos de dados elementares. Os tipos de dados utilizados tem-selimitado a atomos, por exemplo, bart ou srB, ou, eventualmente, a numeros.Sabemos que os tipos de dados elementares podem ser combinados paraconstruir tipos de dados estruturados. Em prolog, o conceito de termocomposto e o tipo de informacao basico para a construcao de novos tiposde informacao. Nesta seccao consideramos a criacao de tipos de informacaoestruturados que sao definidos com base em termos compostos. O resultado ea criacao de tipos de dados que sao genericamente designados por estruturas.

Suponhamos que querıamos construir um tipo de informacao correspondentea uma data, agregando um dia, um mes e um ano. Da metodologia dos tiposabstractos de informacao, sabemos que deveremos definir os construtores,os selectores, os reconhecedores e os testes. Seja faz data o construtor parao tipo data, e sejam ano de, mes de e dia de os selectores para este tipo deinformacao.26

Podemos imaginar que uma data e representada em prolog por um termode tres argumentos, correspondente ao functor data e cujos argumentosrepresentam respectivamente o ano, o mes e o dia dessa data. Esta estru-tura pode ser considerada como uma arvore cuja raız contem o nome dofunctor e cujas folhas contem o ano, o mes e o dia da data correspondente(Figura 5.13).

26Deixamos como exercıcio a definicao e a construcao dos reconhecedores e dos testes.

Page 280: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

268 CAPITULO 5. PROLOG

Com base nesta representacao, podemos definir os seguintes predicados:27

1. Construtor:

faz data(A, M, D, data(A, M, D)).

2. Selectores:

ano de(data(A, , ), A).

mes de(data( , M, ), M).

dia de(data( , , D), D).

Suponhamos tambem que desejavamos definir os modificadores muda ano,muda mes e muda dia que, a partir de uma dada data, modificavam, respec-tivamente, o ano, o mes e o dia dessa data. Com base na nossa representacao,podemos definir os seguintes predicados:

3. Modificadores:

muda ano(A, data( , M, D), data(A, M, D)).

muda mes(M, data(A, , D), data(A, M, D)).

muda dia(D, data(A, M, ), data(A, M, D).

Consideremos agora o seguinte programa que a partir de uma data, Hoje,cria a data equivalente do proximo ano, Futuro:

prox_ano(Hoje, Futuro) :-ano_de(Hoje, A),Prox_ano is A + 1,muda_ano(Prox_ano, Hoje, Futuro).

Exemplo 5.10.1 (O problema das tres casas) Consideremos o seguintepuzzle:

“Existe uma rua com tres casas, todas com cores diferentes, uma casa e azul,outra e vermelha e outra e verde. Em cada casa vive uma pessoa com umanacionalidade diferente da das pessoas que vivem nas outras casas. Em cadacasa existe um animal de estimacao e os animais de estimacao sao diferentes

27Note-se que em linguagens funcionais estas operacoes basicas correspondem a funcoese que em prolog estas sao transformadas em literais.

Page 281: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.10. ESTRUTURAS 269

em todas as casas. O ingles vive na casa vermelha. O animal de estimacaodo espanhol e um piriquito. O japones vive na casa a direita da pessoa quetem um peixe. A pessoa que tem um peixe vive a esquerda da casa azul.Quem tem uma tartaruga?”

Antes de resolver este puzzle em prolog comecamos por representar ainformacao envolvida. Para isso, iremos definir duas estruturas, rua edefcasa, do seguinte modo:

• A estrutura rua corresponde a um termo composto de tres argumentos.A expressao rua(C1, C2, C3) representa uma rua na qual existemtres casas, C1, C2 e C3, casas essas que aparecem, na rua, pela ordemem que sao indicadas na estrutura.

Iremos agora definir um predicado, casa, de dois argumentos. O li-teral casa(C, R) afirma que a casa, C, que e seu primeiro argumentopertence a rua, R, que e seu segundo argumento. Se C for uma casa,teremos:

casa(C, rua(C, , )).casa(C, rua( , C, )).casa(C, rua( , , C)).

Definimos tambem um predicado posicao de tres argumentos. O lite-ral posicao(R, C1, C2) afirma que na rua R, a casa C1 esta a esquerdada casa C2, ou, o que e o mesmo, que a casa C2 esta a direita da casaC1. Se E e D forem casas, teremos:

posicao(rua(E, D, ), E, D).posicao(rua( , E, D), E, D).

• A estrutura defcasa corresponde a um termo composto de tres argu-mentos. A expressao defcasa(C, N, A) representa uma casa de corC, habitada pela pessoa com a nacionalidade N e que tem o animal deestimacao A.

Temos agora definir tres predicados de dois argumentos cor, nacio-nalidade e animal cujos significados sao traduzidos pelas seguintesafirmacoes:

cor(defcasa(C, , ), C).nacionalidade(defcasa( , N, ), N).

animal(defcasa( , , A), A).

Page 282: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

270 CAPITULO 5. PROLOG

Consideremos agora a representacao das pistas fornecidas pelo puzzle:

• O ingles vive na casa vermelha:

casa(I, Rua), cor(I, vermelha), nacionalidade(I, ingles).

• O animal de estimacao do espanhol e um piriquito:

casa(E, Rua), animal(E, piriquito), nacionalidade(E, espan-hol).

• O japones vive na casa a direita da pessoa que tem um peixe:

casa(J, Rua), casa(P1, Rua), nacionalidade(J, japones), ani-mal(P1, peixe), posicao(Rua, P1, J).

• A pessoa que tem um peixe vive a esquerda da casa azul:

casa(P1, Rua), casa(P2, Rua), animal(P1, peixe), cor(P2,azul), posicao(Rua, P1, P2).

Pretende-se saber qual a nacionalidade da pessoa que tem uma tartaruga, ouseja, determinar a casa (casa(X, Rua)), cujo animal de estimacao e umatartaruga (animal(X, tartaruga)), e cuja nacionalidade do habitante eNac (nacionalidade(X, Nac)).

O seguinte programa em prolog apresenta uma solucao para este puzzle:

resolve :- pistas(Rua), pergunta(Rua).

pistas(Rua) :-casa(I, Rua),cor(I, vermelha),nacionalidade(I, ingles),casa(E, Rua),animal(E, piriquito),nacionalidade(E, espanhol),casa(J, Rua),casa(P1, Rua),nacionalidade(J, japones),animal(P1, peixe),posicao(Rua, P1, J),casa(P2, Rua),cor(P2, azul),

Page 283: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 271

posicao(Rua, P1, P2).

pergunta(Rua) :-casa(X, Rua),animal(X, tartaruga),nacionalidade(X, Nac),write(’ O ’),write(Nac),write(’ tem a tartaruga.’),nl.

cor(defcasa(C, _, _), C).nacionalidade(defcasa(_, N, _), N).animal(defcasa(_, _, A), A).

posicao(rua(E, D, _), E, D).posicao(rua(_, E, D), E, D).

casa(X, rua(X, _, _)).casa(X, rua(_, X, _)).casa(X, rua(_, _, X)).

Com este programa obtemos a interaccao:

?- resolve.O japones tem a tartaruga.Yes

`

5.11 Listas

O prolog apresenta a lista como um tipo estruturado de informacao pre-definido. Internamente, as listas sao representadas por uma estrutura cujafuncao principal e o ponto (escrito “.”), uma funcao de dois argumentos.Uma estrutura com a funcao “ponto” e semelhante a um par em Scheme e auma celula cons em lisp. A lista sem elementos e representada pelo atomo“[]”. Na Figura 5.14 mostramos a representacao interna da lista com os

Page 284: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

272 CAPITULO 5. PROLOG

. . . []

a b c

Figura 5.14: Representacao interna da lista com os elementos a, b e c.

elementos a, b e c.

A representacao externa das listas em prolog e feita atraves de uma sequenciade elementos, separados por virgulas, e delimitada pelos sımbolos “[” e “]”:

<lista> ::= [] [ <elementos> ]

<elementos> ::= <elemento> <elemento>, <elementos>

<elemento> ::= <termo> <lista>

Uma lista sem elementos chama-se uma lista vazia.

Exemplo 5.11.1 As seguintes entidades sao listas em prolog:

[][a, b, c][[], [a, b], c, d][X, r(a, b, c), 6]

Note-se que a segunda lista deste exemplo corresponde a representacao in-terna apresentada na Figura 5.14. `

Uma lista nao vazia pode ser considerada como constituıda por duas enti-dades, o primeiro elemento da lista e o resto da lista. O prolog fornece umoperador, “|” que permite separar estes dois constituintes da lista. Assim, opadrao [P | R] identifica duas variaveis P e R (de primeiro e de resto), queao ser unificado com uma lista associa a variavel P com o primeiro elementoda lista e a variavel R com o resto da lista.

Exemplo 5.11.2 A seguinte interacao mostra a utilizacao do operador “|”:

Page 285: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 273

?- [a, b] = [X | Y].X = a,Y = [b]Yes

?- [a] = [X | Y].X = a,Y = []Yes

?- [] = [X | Y].No

Note-se que numa lista apenas com um elemento, o resto e a lista vazia eque uma lista vazia nao tem primeiro elemento nem resto. `

Exemplo 5.11.3 (O predicado membro) Suponhamos que queremos es-crever um programa que testa se um dado elemento pertence a uma lista.Vamos assumir que o predicado membro/2 e verdadeiro apenas no caso doseu primeiro argumento pertencer a lista que e seu segundo argumento. Po-demos escrever o seguinte programa:

membro(X, [X | R]).

membro(X, [P | R]) :- membro(X, R).

Este programa e constituıdo por uma afirmacao que diz que um elementoe membro de uma lista cujo primeiro elemento e esse mesmo elemento(membro(X, [X | R])). Para alem disto, este programa contem uma regraque afirma que um elemento e membro de uma lista cujo primeiro elementoe diferente desse elemento, se for membro do resto da lista (membro(X, [P| R]) :- membro(X, R)).

Com este programa obtemos a seguinte interaccao:

?- membro(4, [3, 4, 5]).Yes

?- membro(2, [3, 4, 5]).No

Page 286: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

274 CAPITULO 5. PROLOG

?- membro(4, []).No

?- membro([a, b], [a, [a, b], c]).Yes

A interaccao apresentada corresponde ao que poderıamos esperar de umprograma tradicional que utiliza listas, a decisao sobre se um dado elementopertence ou nao a uma dada lista.

Contudo, devido a polimodalidade apresentada pela programacao em logica,podemos usar variaveis em qualquer dos argumentos de um objectivo queenvolva o predicado membro. A seguinte interaccao mostra os elementos quesao membros de uma lista.

?- membro(X, [a, b, c]).X = a ;X = b ;X = c ;No

A proxima interaccao corresponde ao objectivo de saber quais sao as listasde que um dado elemento e membro.

?- membro(a, X).X = [a | _G252] ;X = [_G251, a | _G258] ;X = [_G251, _G257, a | _G264] ;X = [_G251, _G257, _G263, a | _G270] ;X = [_G251, _G257, _G263, _G269, a | _G276]Yes

A primeira resposta obtida diz-nos que a e membro de uma lista cujo pri-meiro elemento e a e cujo resto e uma variavel (representada por G252).A segunda resposta, diz-nos que a e membro de uma lista cujo primeiroelemento e uma variavel (representada por G251), cujo segundo elemento ea e cujo resto e uma variavel (representada por G258). `

A interaccao final do Exemplo 5.11.3 mostra-nos que, na realidade, o ope-rador “|” faz mais do que separar o primeiro elemento de uma lista do seu

Page 287: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 275

resto. Este operador pode ser utilizado para separar elementos de uma lista.Por exemplo a lista [X, Y | R] corresponde a (unifica com) qualquer listaque tenha um primeiro elemento X, um segundo elemento Y e um resto R.

Exemplo 5.11.4 A seguinte interaccao mostra algumas utilizacoes do ope-rador “|”:

?- [a, b, c] = [_, Y | Z].Y = b,Z = [c]Yes

?- [a, b, c] = [_, _, Y | Z].Y = c,Z = []Yes

`

Note-se ainda que na primeira clausula do programa do Exemplo 5.11.3,a variavel R nao tem qualquer utilidade. Neste caso, poderemos utilizaruma variavel anonima, tomando a clausula a forma membro(X, [X | ]).Analogamente, na segunda clausula do mesmo programa, a variavel P naotem utilidade, pelo que esta pode tambem ser substituıda por uma variavelanonima. Assim, o programa do Exemplo 5.11.3 pode ser escrito do seguintemodo:

membro(X, [X | _]).

membro(X, [_ | R]) :- membro(X, R).

Exemplo 5.11.5 (Juncao de listas) Consideremos que a juncao de duaslistas corresponde a lista que contem todos os elementos da primeira lista(e na mesma ordem) seguidos por todos os elementos da segunda lista (e namesma ordem).

Vamos assumir que o predicado junta/3 e verdadeiro apenas no caso dalista que e seu terceiro argumento corresponder a juncao da lista que e seuprimeiro argumento com a lista que e seu segundo argumento. Ou seja,junta(X, Y, Z) significa que Z e o resultado de juntar X e Y.

Page 288: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

276 CAPITULO 5. PROLOG

junta([c, b], [a], L)junta([P1|R1], L11, [P1|L21]):-junta(R1, L11, L21)

{c/P1, [b]/R1, [a]/L11, [c|L21]/L}

junta([b], [a], L21)

junta([P2|R2], L12, [P2|L22]):-junta(R2, L12, L22)

{b/P2, []/R2, [a]/L12, [b|L22]/L21}

junta([], [a], L22)

junta([], L1, L1)

{[a]/L1, [a]/L22}

"

Figura 5.15: Sequencia de objectivos em junta([c, b], [a], L).

Consideremos o seguinte programa para juntar duas listas:

junta([], L, L).

junta([P | R], L1, [P | L2]) :- junta(R, L1, L2).

Com este programa produzimos a interaccao:

?- junta([], [a, b], L).L = [a, b]Yes

?- junta([c, b], [a], L).L = [c, b, a]Yes

?- junta([a, b], X, [a, b, c, d]).X = [c, d]Yes

?- junta(X, Y, [1, 2, 3]).X = [],

Page 289: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 277

Y = [1, 2, 3] ;X = [1],Y = [2, 3] ;X = [1, 2],Y = [3] ;X = [1, 2, 3],Y = [] ;No?-

Na Figura 5.15 apresentamos a sequencia de objectivos gerados para res-ponder ao objectivo junta([c, b], [a], L). Nesta figura, apresentamosdentro de um rectangulo a variante da clausula utilizada e, dentro de ou-tro rectangulo, a substituicao utilizada. Recorde-se que a resposta a esteobjectivo corresponde a substituicao gerada para a variavel L. `

Exemplo 5.11.6 (Inversao de listas – processo recursivo) Supon-hamos que queremos escrever um programa que inverte a ordem dos elemen-tos de uma lista. Por exemplo, a lista [a, b, c] origina a seguinte listainvertida [c, b, a].

O seguinte predicado, inverte/2, efectua a inversao de listas. Note-se queeste utiliza o predicado junta do Exemplo 5.11.5.

inverte([], []).

inverte([P | R], I) :-inverte(R, I1), junta(I1, [P], I).

Page 290: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

278 CAPITULO 5. PROLOG

inverte([a, b, c], X)

inverte([b, c], X1), junta(X1, [a], X)

inverte([c], X2), junta(X2, [b], X1), junta(X1, [a], X)

inverte([], X3), junta(X3, [c], X2),

junta(X2, [b], X1), junta(X1, [a], X)

junta([], [c], X2), junta(X2, [b], X1), junta(X1, [a], X)

junta([c], [b], X1), junta(X1, [a], X)

junta([c, b], [a], X)

"

Figura 5.16: Sequencia de objectivos em inverte([a, b, c]), X).

Page 291: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 279

Com este programa obtemos a interaccao:

?- inverte([a, b, c], X).X = [c, b, a]Yes

?- inverte(X, [a, b, c]).X = [c, b, a]Yes

Na Figura 5.16 mostramos a sequencia de objectivos gerada pelo objec-tivo inverte([a, b, c]), X), nao expandindo os objectivos gerados porjunta.

Podemos observar que durante a resposta a este objectivo, o calculo dasubstituicao para a variavel X e sucessivamente adiado, devido a existenciade objectivos para os quais ainda nao existe resposta (ou seja, objectivosque estao suspensos). Por esta razao, dizemos que este programa gera umprocesso recursivo. `

Exemplo 5.11.7 (Inversao de listas – processo iterativo)Suponhamos, que desejavamos escrever um programa para inversao de listasutilizando um processo iterativo. Como e facil de retirar o primeiro elementode uma lista e como tambem e facil adicionar um elemento no inıcio de umalista, podemos usar um acumulador que funciona do seguinte modo:

Lista Acumulador[a, b, c] [][b, c] [a][c] [b, a][] [c, b, a]

Utilizando este princıpio de calculo, definimos o predicado inverte 2/3 doseguinte modo:

inverte_2([], I, I).

inverte_2([P | R], Ac, I) :-inverte_2(R, [P | Ac], I).

Page 292: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

280 CAPITULO 5. PROLOG

inverte 2([a, b, c], X)

inverte 2([a, b, c], [], X)

inverte 2([b, c], [a], X)

inverte 2([c], [b, a], X)

inverte 2([], [c, b, a], X)

"

Figura 5.17: Sequencia de objectivos em inverte 2([a, b, c]), X).

Como o predicado inverte 2/3 nos obriga a pensar explicitamente no acu-mulador, podemos definir o predicado inverte 2/2 que “esconde” a uti-lizacao do acumulador:

inverte_2(L, I) :- inverte_2(L, [], I).

Notemos a utilizacao de dois predicados com o mesmo nome, inverte 2/2e inverte 2/3.

Com este predicado, obtemos a interaccao

?- inverte_2([a, b, c], X).X = [c, b, a]Yes

Na Figura 5.17 mostramos a sequencia de objectivos gerada pelo objectivo

Page 293: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 281

inverte 2([a, b, c]), X). Podemos observar que durante a resposta aeste objectivo, nao existem substituicoes adiadas. Cada objectivo contem,por si so, toda a informacao necessaria para responder a pergunta inicial.Por esta razao, este programa gera um processo iterativo. `

Definicao 5.11.1 (Clausula iterativa – versao 2) Na Definicao 5.1.1,dissemos que uma clausula iterativa era uma clausula cujo corpo apenascontinha um literal, usando o mesmo predicado que o utilizado na cabecada clausula. Aqui, estendemos esta definicao autorizando zero ou mais uti-lizacoes de predicados pre-definidos, antes da utilizacao da clausula iterativa.!

Definicao 5.11.2 (Programa iterativo) Um programa em prolog emque todas as clausulas sao ou clausulas unitarias ou clausulas iterativas,diz-se um programa iterativo. !

Exemplo 5.11.8 (Programa iterativo) O seguinte programa e um pro-grama iterativo:

inverte_2([], I, I).

inverte_2([P | R], Ac, I) :-inverte_2(R, [P | Ac], I).

`

Exemplo 5.11.9 (Seleccao de um elemento de uma lista) Considere-mos o predicado escolhe/3 com o seguinte significado: escolhe(L1, E,L2) significa que L2 e a lista que se obtem de L1 retirando-lhe o elemento E.Este predicado pode ser escrito em prolog do seguinte modo:

escolhe([P | R], P, R).

escolhe([P | R], E, [P | S]) :- escolhe(R, E, S).

Com o predicado escolhe, podemos obter a seguinte interaccao:

?- escolhe([a, b, c], a, X).X = [b, c] ;No

Page 294: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

282 CAPITULO 5. PROLOG

?- escolhe([a, b, c], X, Y).X = a,Y = [b, c] ;X = b,Y = [a, c] ;X = c,Y = [a, b] ;No

O predicado escolhe parece nao ser muito interessante, no entanto, a suaimportancia revela-se no Exemplo 5.11.10. `

Exemplo 5.11.10 (Permutacoes de uma lista) O seguinte programaem prolog efectua as permutacoes de uma lista. O predicado perm/2 signi-fica que os seus argumentos correspondem a listas com os mesmos elementosmas com os elementos por ordem diferente.

perm([], []).

perm(L, [P | R]) :- escolhe(L, P, L1), perm(L1, R).

O predicado perm utiliza o predicado escolhe, com o predicado perm pode-mos obter a interaccao:

?- perm([a, b, c], X).X = [a, b, c] ;X = [a, c, b] ;X = [b, a, c] ;X = [b, c, a] ;X = [c, a, b] ;X = [c, b, a] ;No

Note-se o papel do predicado escolhe, associado a semantica procedimentaldo prolog. `

Exemplo 5.11.11 (Problema das 8 rainhas) O problema das oito rai-nhas consiste em dispor 8 rainhas num tabuleiro de xadrez (com 8 linhas e

Page 295: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 283

Figura 5.18: Solucao para o problema das 8 rainhas.

8 colunas) de tal modo que estas nao se ataquem. No jogo de xadrez, asrainhas atacam-se (e movimentam-se) quer na horizontal, quer na vertical,quer ao longo das diagonais. Para resolver o problema das 8 rainhas, devem-se colocar as rainhas no tabuleiro de tal modo que duas rainhas nao podemestar na mesma coluna, nem na mesma linha nem na mesma diagonal. NaFigura 5.1828 mostra-se uma das possıveis solucoes para o problema das 8rainhas.

Consideremos o predicado perm do Exemplo 5.11.10. Uma permutacao deuma lista de n elementos inteiros (entre 1 e n) pode ser considerada comouma representacao da colocacao das rainhas num tabuleiro de n por n, emque se o elemento na posicao k da lista e nk, entao existe uma rainha colocadana posicao (k, nk) do tabuleiro, visto como um referencial cartesiano.

Para resolver o problema das 8 rainhas, nao temos mais do que gerar as per-mutacoes da lista [1, 2, 3, 4, 5, 6, 7, 8] e verificar se a permutacaogerada corresponde a uma colocacao de rainhas sem ataques:

rainhas8(R) :-perm([1, 2, 3, 4, 5, 6, 7, 8], R),sem_ataques(R).

O predicado sem ataques tera que verificar, para cada rainha, se nao existe28Figura obtida de www.stetson.edu/~efriedma/mathmagic/0201.html.

Page 296: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

284 CAPITULO 5. PROLOG

1 2 3 4 5 6 7 8 X

Y

...

Figura 5.19: Argumentos iniciais de sem ataque direita.

nenhuma outra rainha que a ataque. Note-se que como estamos a trabalharcom as permutacoes de uma lista, nao temos que verificar se existem duasrainhas na mesma linha nem na mesma coluna.

O predicado sem ataque direita/2 tem o seguinte significado: a expressaosem ataque direita(X, T), afirma que a rainha que esta colocada na co-luna X nao ataca nenhuma das rainhas colocadas nas colunas a direita dasua coluna, no tabuleiro T.

Na Figura 5.19 mostramos esquematicamente a situacao na execucao do ob-jectivo sem ataque direita(1, P) relativamente a solucao apresentada naFigura 5.18. O primeiro argumento corresponde a indicacao que estamos aconsiderar a coluna 1 e o segundo argumento indica o tabuleiro em consi-deracao, o qual pode ser separado na primeira coluna e no tabuleiro a suadireita. Este literal ira considerar sucessivamente todas as colunas.

O predicado sem ataque individual/4 tem o seguinte significado: a ex-pressao sem - ataque individual(X1, Y1, X2, R), afirma que a rainhaque esta colocada na coluna X1 e na linha Y1, nao ataca nenhuma das rai-nhas colocadas a partir da coluna X2 no tabuleiro R. Para isso, este predicadoverifica individualmente se nao existe ataque, predicado nao se atacam/4,entre a rainha em X1, Y1 e a rainha em cada uma das colunas.

Page 297: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 285

A expressao nao se atacam(X1, Y1, X2, Y2), afirma que a rainha que estacolocada na coluna X1 e na linha Y1 nao ataca a rainha que esta colocadana coluna X2 e na linha Y2. Dadas as circunstancias do nosso problema,para isso, basta verificar que as duas rainhas nao se encontram na mesmadiagonal.

sem_ataques(P) :- sem_ataque_direita(1, P).

sem_ataque_direita(_, []).

sem_ataque_direita(X1, [Y1 | R]) :-X2 is X1 + 1,sem_ataque_individual(X1, Y1, X2, R),sem_ataque_direita(X2, R).

sem_ataque_individual(_, _, _, []).

sem_ataque_individual(X1, Y1, X2, [Y2 | R]) :-nao_se_atacam(X1, Y1, X2, Y2),NovoX2 is X2 + 1,sem_ataque_individual(X1, Y1, NovoX2, R).

nao_se_atacam(X1, Y1, X2, Y2) :-abs(X1 - X2) =\= abs(Y1 - Y2).

Com este programa, obtemos a seguinte interaccao:

?- rainhas8(X).X = [1, 5, 8, 6, 3, 7, 2, 4] ;X = [1, 6, 8, 3, 7, 4, 2, 5] ;X = [1, 7, 4, 6, 8, 2, 5, 3] ;X = [1, 7, 5, 8, 2, 4, 6, 3] ;X = [2, 4, 6, 8, 3, 1, 7, 5] ;X = [2, 5, 7, 1, 3, 8, 6, 4] ;X = [2, 5, 7, 4, 1, 8, 6, 3] ;X = [2, 6, 1, 7, 4, 8, 3, 5] ;X = [2, 6, 8, 3, 1, 4, 7, 5] ;X = [2, 7, 3, 6, 8, 5, 1, 4] ;X = [2, 7, 5, 8, 1, 4, 6, 3] ;...

Page 298: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

286 CAPITULO 5. PROLOG

`

Exemplo 5.11.12 (Caminhos em grafos) Consideremos o grafo repre-sentado na Figura 5.9. Suponhamos que desejavamos escrever um programaque recebia dois nos de um grafo e que calculava os possıveis caminhos entreesses dois nos.

Definimos o predicado caminho/3 com o seguinte significado: caminho(X,Y, C) e verdadeiro se C for um caminho no grafo entre X e Y. Um caminho euma lista de nos, comecando com o no X, terminando no no Y e tal que paraquaisquer dois elementos consecutivos da lista, M e N, existe um arco que osliga (liga(M, N)).

Este problema e resolvido com a seguinte definicao do predicado caminho:

caminho(X, Y, [X, Y]) :- liga(X, Y).

caminho(X, Y, [X | Z]) :-liga(X, W),caminho(W, Y, Z).

Com este programa, e com os dados referentes a Figura 5.9, podemos obtera seguinte interaccao:

?- caminho(a, c, C).C = [a, b, c] ;C = [a, b, d, e, f, c] ;No

`

Exemplo 5.11.13 (Comprimento de uma lista) Suponhamos que que-rıamos escrever um programa para calcular o comprimento de uma lista.Utilizando a operacao de adicao, podemos ser tentados a escrever o seguinteprograma, o qual afirma que o comprimento de uma lista vazia e zero e queo comprimento de uma lista nao vazia sera um mais o comprimento do seuresto.

comprimento([], 0).

comprimento([_ | R], +(C, 1)) :- comprimento(R, C).

Page 299: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.11. LISTAS 287

Com este programa obtemos a interaccao:

?- comprimento([], X).X = 0Yes

?- comprimento([a, b, c], X).X = 0+1+1+1Yes

Este programa apresenta um comportamento semelhante ao do programa doExemplo 5.3.7, ou seja, indica que o comprimento da lista e 0+1+1+1 masnao calcula o resultado desta expressao.

O problema com este exemplo e que o programa funciona exclusivamentecom base na unificacao de predicados, o que corresponde aquilo que podemoschamar de programacao em logica pura. `

Exemplo 5.11.14 (Comprimento de uma lista – versao recursiva)A operacao de avaliacao permite-nos “forcar” a avaliacao de uma expressao,desviando-nos do mecanismo exclusivo de unificacao. Voltemos a consideraro Exemplo 5.11.13, utilizando agora a avaliacao de expressoes. A seguintedefinicao corresponde a uma alternativa para um programa para calcular ocomprimento de uma lista:

comprimento([], 0).

comprimento([_ | R], C) :-comprimento(R, C_sub),C is C_sub+1.

A segunda clausula deste programa tem a seguinte interpretacao procedi-mental “para calcular o comprimento de uma lista nao vazia, calcule-se ocomprimento da sub-lista que corresponde ao resto da lista e adicione-se 1ao resultado”.

Com este programa, obtemos a interaccao:

?- comprimento([a, b, c], X).X = 3Yes

Page 300: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

288 CAPITULO 5. PROLOG

`

Exemplo 5.11.15 (Comprimento de uma lista – versao iterativa)O seguinte programa corresponde a uma versao iterativa para o calculo docomprimento de uma lista:

comprimento(L, C) :- comprimento(L, 0, C).

comprimento([], Ac, Ac).

comprimento([_|R], Ac, C) :-Ac_N is Ac + 1,comprimento(R, Ac_N, C).

Com este programa, obtemos a interaccao:

?- comprimento([a, b, c], X).X = 3Yes

`

Exemplo 5.11.16 (Remocao de elementos repetidos) Suponhamosque querıamos escrever em prolog um predicado de dois elementos cha-mado remove repetidos. A expressao remove repetidos(L1, L2) signi-fica que a lista L2 tem os mesmos elementos, e pela mesma ordem, que alista L1 mas sem elementos repetidos.

Podemos pensar em escrever o seguinte programa

remove_repetidos_errado([], []).

remove_repetidos_errado([P | R], L) :-membro(P, R),remove_repetidos_errado(R, L).

remove_repetidos_errado([P | R], [P | L]) :-remove_repetidos_errado(R, L).

em que membro e o predicado definido no Exemplo 5.11.3.

Com este predicado obtemos a interaccao:

Page 301: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.12. O OPERADOR DE CORTE 289

remove_repetidos_errado([a, c, c, a, b, c], X).X = [a, c, b]Yes

que parece indicar que o nosso programa esta correcto. No entanto, sepedirmos respostas alternativas, obtemos a interaccao:

?- remove_repetidos_errado([a, c, c, a, b, c], X).X = [a, b, c] ;X = [c, a, b, c] ;X = [a, b, c] ;X = [c, a, b, c] ;X = [c, a, b, c] ;X = [c, c, a, b, c] ;X = [a, a, b, c] ;X = [a, c, a, b, c] ;X = [a, a, b, c] ;X = [a, c, a, b, c] ;X = [a, c, a, b, c] ;X = [a, c, c, a, b, c] ;No

Este programa, embora produza a resposta correcta, produz varias respos-tas de que nao estavamos a espera. O problema com o nosso programae que o mecanismo de retrocesso vai fazer com que a regra com cabecaremove repetidos errado([P | R], [P | L]) e com corpo remove repe-tidos errado(R, L) seja usada mesmo no caso em que P e membro de R.`

E possıvel dizer ao prolog que a partir de certo ponto nao deve procurarmais solucoes. Esta indicacao e feita atraves do operador de corte.

5.12 O operador de corte

O operador de corte e utilizado para alterar a semantica procedimental doprolog, reduzindo o espaco de procura de solucoes atraves de um controleexplıcito sobre o mecanismo de retrocesso.

Page 302: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

290 CAPITULO 5. PROLOG

A vantagem do operador de corte e a possibidade de indicar que num pro-grama, certos ramos da arvore SLD que se sabe que nao produzem solucoes,nao devem ser explorados. A desvantagem do operador de corte e a possibi-lidade de alterar inadvertidamente a semantica declarativa de um programa.

O operador de corte, representado por “!”, e um atomo especial, utilizadocomo um literal numa clausula. O objectivo “!” tem sempre sucesso, no en-tanto, como efeito secundario, a avaliacao deste atomo origina a introducaode uma “barreira” no ramo da arvore SLD em que a clausula com o opera-dor de corte aparece, barreira essa que nao pode ser ultrapassada durante oprocesso de retrocesso.

Exemplo 5.12.1 (remocao de elementos repetidos – versao 2) Con-sideremos a seguinte variacao do programa do Exemplo 5.11.16. Este pro-grama utiliza o operador de corte para evitar o retrocesso apos a descobertade que um elemento esta repetido na lista.

remove_repetidos([], []).

remove_repetidos([P | R], L) :-membro(P, R),!,remove_repetidos(R, L).

remove_repetidos([P | R], [P | L]) :-remove_repetidos(R, L).

Com este programa, obtemos o resultado esperado:

?- remove_repetidos([a, c, c, a, b, c], X).X = [a, b, c] ;No

`

Exemplo 5.12.2 (Ligacoes em grafos – versao 2) Consideremos no-vamente o Exemplo 5.3.6 e suponhamos que escrevıamos o seguinte pro-grama:

Page 303: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.12. O OPERADOR DE CORTE 291

liga ind(a, X)

(ver Figura 5.21)

liga ind(X1, Y1) :- liga(X1, Y1)

{a/X1, X/Y1}

liga(a, X)

"

;

"

liga(a, h)

{h/X}

liga(a, b)

{b/X}

;

Figura 5.20: Retrocessos ate liga ind(a, X).

liga_ind(X, Y) :- liga(X, Y).

liga_ind(X, Z) :-liga(X, Y),!,liga_ind(Y, Z).

Este programa difere do programa do Exemplo 5.3.6 na segunda clausula,na qual o operador de corte e colocado entre os literais liga(X, Y) eliga ind(Y, Z).

De acordo com a semantica do operador de corte, esta clausula tem a se-guinte semantica procedimental “para tentar provar se X se liga indirecta-mente a Z, encontre-se uma ligacao directa entre X e Y, esta sera a unicaligacao directa a utilizar (a consequencia do operador de corte), seguida-mente, tente-se encontrar ligacoes indirectas entre Y e Z”.

Com este programa, e com as afirmacoes apresentadas no Exemplo 5.3.6,obtemos a seguinte interaccao:

?- liga_ind(a, X).X = h ;X = b ;X = i ;

Page 304: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

292 CAPITULO 5. PROLOG

X = g ;No

Note-se a diferenca dos resultados obtidos relativamente ao Exemplo 5.3.6.

Na Figura 5.20 mostramos o processo de inferencia e de retrocesso originadopela producao das duas primeiras respostas (X = h e X = b). Para facilitara compreensao, nesta figura indicam-se, dentro de rectangulos, as variantesde clausulas e as substituicoes utilizadas.

Apos os retrocessos indicados na Figura 5.20, a clausula

liga ind(X, Z) :- liga(X, Y), !, liga ind(Y, Z)

e seleccionada, originando o processo de inferencia que se apresenta nas Fi-guras 5.21 e 5.22. O literal liga(a, X) unifica com liga(a, h), originandoo objectivo

!, liga ind(h, Z)

O literal “!” tem sucesso, originando-se o objectivo liga ind(h, Z). Ime-diatamente apos o sucesso do operador “!” gera-se uma “barreira” na arvoreSLD que nao permite o retrocesso a partir desse ponto (ver Figura 5.21).

Continuando a exploracao da arvore, geram-se mais duas respostas, X =i (ver Figura 5.21) e X = g (ver Figura 5.22). A geracao de respostasadicionais obrigaria a ultrapassar a “barreira” introduzida pelo operador decorte, pelo que o processo termina. No Exemplo 5.3.6, como nao existe ooperador de corte sao produzidas respostas adicionais correspondendo a umretrocesso para alem da “barreira” que nao existe nesse exemplo. `

Page 305: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.12. O OPERADOR DE CORTE 293

liga ind(a, X)

liga(a, X)

(ver Figura 5.20)

liga ind(X2, Z2) :- liga(X2, Y2), !, liga ind(Y2, Z2)

{a/X2, X/Z2}

liga(a, Y2), !, liga ind(Y2, X)

liga(a, h)

{h/Y2}

!, liga ind(h, X)

retrocesso

liga ind(h, X)liga ind(X3, Y3) :- liga(X3, Y3)

{h/X3, X/Y3}

liga ind(X4, Z4) :- liga(X4, Y4), !, liga ind(Y4, Z4)

{h/X4, X/Z4}

liga(h, X)liga(h, i)

{i/X}

"

;

liga(h, Y4), !, liga ind(Y4, X)liga(h, i)

{i/Y4}

!, liga ind(i, X)

liga ind(i, X)

liga(h, i)

{i/Y4}

!, liga ind(i, X)

liga ind(i, X)

(ver Figura 5.22)

retrocesso

Figura 5.21: Retrocessos apos liga ind(a, X) (parte 1).

Page 306: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

294 CAPITULO 5. PROLOG

(ver Figura 5.21)liga ind(i, X)

liga ind(X5, Y5) :- liga(X5, Y5)

{i/X5, X/Y5}

liga ind(X6, Z6) :- liga(X6, Y6), !, liga ind(Y6, Z6)

{i/X6, X/Z6}

liga(i, X)liga(i, g)

{g/X}

"

;

liga(i, Y6), !, liga ind(Y6, X)liga(i, g)

{g/Y6}

!, liga ind(g, X)

liga ind(g, X)liga ind(X8, Z8) :- liga(X8, Y8), ...

{g/X8, X/Z8}

liga(g, Y8), !, liga ind(Y8, X)

X

retrocesso

liga(g, X)

liga ind(X7, Y7) :- liga(X7, Y7)

{g/X7, X/Y7}

X

X

Figura 5.22: Retrocessos apos liga ind(a, X) (parte 2).

Page 307: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.12. O OPERADOR DE CORTE 295

Antes de prosseguir, convem clarificar a semantica do operador de corte.Seja G um objectivo que utiliza uma clausula C cujo corpo contem o ope-rador de corte. O operador de corte compromete o prolog com todas asescolhas que foram feitas desde a unificaccao com a clausula C ate ao ope-rador de corte. O operador compromete tambem o prolog com a escolhade C para responder ao objectivo G. Note-se que e possıvel explorar outrasalternativas utilizando o objectivo G como o seguinte exemplo mostra.

Exemplo 5.12.3 (Utilizacao do operador de corte) Consideremos oseguinte programa:

a(X, Y) :- q(X, Y).

a(0, 0).

q(X, Y) :- i(X), !, j(Y).

q(5, 5).

i(1).i(2).j(1).j(2).j(3).

Com este programa obtemos a interaccao, cuja arvore SLD correspondentese mostra na Figura 5.23.

?- a(X, Y).X = 1,Y = 1 ;X = 1,Y = 2 ;X = 1,Y = 3 ;X = 0,Y = 0 ;No

Note-se que o operador de corte aparece na clausula cuja cabeca e q(X, Y),sendo possıvel o retrocesso para o objectivo a(X, Y). `

Page 308: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

296 CAPITULO 5. PROLOG

a(X, Y)a(X1, Y1) :- q(X1, Y1)

{X/X1, Y/Y1}

a(0, 0)

{0/X, 0/Y}

"q(X, Y)q(X2, Y2) :- i(X2), !, j(Y2)

{X/X2, Y/Y2}

i(X), !, j(Y)

i(1)

{1/X}

!, j(Y)

retrocesso

j(Y)j(1)

{1/Y}

"

;

j(2)

{2/Y}

j(3)

{3/Y}

"

;

"

;

X

Figura 5.23: Retrocessos para clausula que utilizou outra com o corte.

Exemplo 5.12.4 (Divisao de uma lista) Suponhamos que queremosescrever um programa que recebe um inteiro e uma lista de inteiros e que adivide em duas listas, verificando as duas seguintes condicoes: (1) todos oselementos da primeira lista sao menores que o inteiro recebido; (2) todos oselementos da segunda lista sao maiores ou iguais ao elemento recebido.

Seja parte um predicado de quatro elementos com o seguinte significado:sendo N um inteiro, e L, L1 e L2 listas de inteiros, parte(L, N, L1, L2)afirma que todos os elementos da lista L1 sao menores do que N e pertencem alista L e todos os elementos da lista L2 sao maiores ou iguais a N e pertencema lista L.

Page 309: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.12. O OPERADOR DE CORTE 297

Consideremos o programa:

parte([], _, [], []).

parte([P | R], N, [P | R1], L2) :-P < N,parte(R, N, R1, L2).

parte([P | R], N, L1, [P | R2]) :-P >= N,parte(R, N, L1, R2).

Com o qual obtemos a interaccao:

?- parte([2, 3, 5, 7], 4, L1, L2).L1 = [2, 3],L2 = [5, 7]Yes

?- parte(L, 4, [1, 3], [6, 7, 8]).L = [1, 3, 6, 7, 8]Yes

Note-se, no entanto, que se a segunda clausula tem sucesso, a terceiraclausula nao o pode ter, visto ambas terem predicados complementares.Analisando o nosso programa, podemos concluir que apos garantir que P <N na segunda clausula, nao vale a pena fazer retrocesso. O prolog nao ecapaz de inferir este facto, pelo que podemos modificar o nosso programado seguinte modo com a introducao do operador de corte:

parte([], _, [], []) :- !.

parte([P | R], N, [P | R1], L2) :-P < N,!,parte(R, N, R1, L2).

parte([P | R], N, L1, [P | R2]) :-P >= N,

Page 310: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

298 CAPITULO 5. PROLOG

!,parte(R, N, L1, R2).

A utilizacao do operador de corte na terceira clausula (apos P >= N) nao enecessaria,29 sendo utilizado apenas por uma questao de simetria entre asduas ultimas clausulas.

Analisando a nossa ultima versao do programa parte, podemos ser tentadosa pensar que o teste P >= N na ultima clausula tambem nao e necessario,escrevendo assim, a seguinte versao errada de parte.

parte_com_erro([], _, [], []).

parte_com_erro([P | R], N, [P | R1], L2) :-P < N,!,parte_com_erro(R, N, R1, L2).

parte_com_erro([P | R], N, L1, [P | R2]) :-parte_com_erro(R, N, L1, R2).

A seguinte interaccao mostra o erro no nosso ultimo programa:

?- parte_com_erro([4, 8, 1, 10], 7, [], [4, 8, 1, 10]).Yes

Na realidade, sendo o terceiro argumento a lista vazia, esta nunca vai unificarcom [P | R1] na segunda clausula. Nao existindo nenhum teste na ultimaclausula, esta vai ser sempre utilizada, dando origem ao resultado errado.`

Exemplo 5.12.5 (Juncao de listas ordenadas) Suponhamos que que-remos juntar duas listas de inteiros, ambas ordenadas por ordem crescentedos seus elementos, numa unica lista ordenada.

Iremos considerar o predicado junta ord/3 que afirma que o terceiro ele-mento e uma lista ordenada que corresponde a juncao das listas ordenadasque aparecem no primeiro e segundo argumentos deste predicado.

Consideremos o seguinte programa:29Ficando como exercıcio a verificacao desta afirmacao.

Page 311: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.12. O OPERADOR DE CORTE 299

junta_ord(L, [], L).

junta_ord([], L, L).

junta_ord([P1 | R1], [P2 | R2], [P1 | R]) :-P1 < P2,junta_ord(R1, [P2 | R2], R).

junta_ord([P1 | R1], [P2 | R2], [P1 | R]) :-P1 = P2,junta_ord(R1, R2, R).

junta_ord([P1 | R1], [P2 | R2], [P2 | R]) :-P1 > P2,junta_ord([P1 | R1], R2, R).

Com este programa obtemos a interaccao:

?- junta_ord([1, 3, 5], [2, 4, 6], L).L = [1, 2, 3, 4, 5, 6]Yes

Analogamente ao que aconteceu com o Exemplo 5.12.4, podemos introduziras seguintes instancias do operador de corte para aumentar a eficiencia doprograma:

junta_ord(L, [], L) :- !.

junta_ord([], L, L) :- !.

junta_ord([P1 | R1], [P2 | R2], [P1 | R]) :-P1 < P2,!,junta_ord(R1, [P2 | R2], R).

junta_ord([P1 | R1], [P2 | R2], [P1 | R]) :-P1 = P2,!,junta_ord(R1, R2, R).

Page 312: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

300 CAPITULO 5. PROLOG

junta_ord([P1 | R1], [P2 | R2], [P2 | R]) :-P1 > P2,!,junta_ord([P1 | R1], R2, R).

`

Exemplo 5.12.6 (Quick sort) Utilizando os predicados parte e juntaord, podemos escrever o seguinte programa que ordena os elementos de umalista, contendo numeros, utilizando o “Quick sort”:

quicksort([], []).

quicksort([P | R], LO) :-parte(R, P, Menores, Maiores),quicksort(Menores, Omenores),quicksort(Maiores, Omaiores),junta_ord(Omenores, [P | Omaiores], LO).

`

Exemplo 5.12.7 (Os perigos do corte – caso 1) Consideremos predi-cado, menor/3. A expressap menor(V1, V2, V3) afirma que V3 e o menordos elementos V1 e V2. Este predicado pode ser definido trivialmente doseguinte modo:

menor(X, Y, X) :- X =< Y.

menor(X, Y, Y) :- X > Y.

Tendo em atencao que a primeira e a segunda clausula deste programa abor-dam situacoes complementares, somos levados a introduzir o operador decorte, produzindo a seguinte versao do mesmo programa:

menor_1(X, Y, X) :- X =< Y, !.

menor_1(X, Y, Y) :- X > Y.

Page 313: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.12. O OPERADOR DE CORTE 301

Podemos agora ser tentados a seguir o seguinte raciocınio: se a primeiraclausula nao tem sucesso, entao isso significa que X > Y, pelo que o testeda segunda clausula e desnecessario. Produzimos assim, a seguinte versaoerrada do programa menor:

menor_2\_com_erro(X, Y, X) :- X =< Y, !.

menor_2_com_erro(_, Y, Y).

O problema com este programa torna-se patente com a seguinte interaccao:

?- menor_2_com_erro(5, 10, 10).Yes

Na realidade, a primeira clausula falha, nao porque a condicao X =< Y falha,mas sim porque nao existe unificacao com a cabeca da clausula. Para evitara necessidade do teste X > Y precisamos de alterar o programa do seguintemodo:

menor_3(X, Y, Z) :-X =< Y,!,Z = X.

menor_3(_, Y, Y).

`

Exemplo 5.12.8 (Os perigos do corte – caso 2) Consideremos o seguinteprograma:

p :- a, b.p :- c.

Considerando o significado de clausulas de Horn, o predicado p e equivalentea seguinte fbf:

(a ! b) " c

Suponhamos que o programa era modificado com a introducao do operadorde corte do seguinte modo:

Page 314: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

302 CAPITULO 5. PROLOG

p :- a, !, b.p :- c.

O operador de corte mudou o significado do predicado p para a seguinte fbf:

(A !B) " (¬A ! C)

`

5.13 O falhanco forcado

Com o operador de corte, e util poder afirmar que um dado predicado naotem sucesso. Esta operacao pode ser feita recorrendo ao predicado fail/0que forca a geracao de um no falhado.

5.14 A operacao condicional

O prolog fornece a operacao condicional que permite traduzir para a pro-gramacao em logica as instrucoes “if–then–” e “if–then–else–” existentes emlinguagens imperativas e em linguagens funcionais.

A operacao condicional corresponde a utilizacao do predicado pre-definido->/2, o qual pode tambem ser utilizado como um operador. A combinacaodo predicado -> com a disjuncao (;) permite criar uma clausula que corres-ponde a um “if–then–else–”.

A sintaxe da operacao condicional e a seguinte:

<operacao condicional> ::= ->(<literal>, <literais>)<literal> -> <literais>;(->(<literal>, <literais>), <literais>)<literal> -> <literais> ; <literais>

A segunda e a quarta linhas desta definicao correspondem a utilizacao deoperadores. Na nossa explicacao apenas utilizaremos apenas a notacao in-fixa.

Ao encontrar um literal da forma teste -> literais1 ; literais2, o prolog come-ca por executar o literal teste. Se o literal teste tem sucesso, o prolog com-promete-se com a substituicao obtida, proibindo o retrocesso a partir daı

Page 315: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.14. A OPERACAO CONDICIONAL 303

(tal como no caso da utilizacao do operador de corte) e executa os literaisliterais1. Se o literal teste nao tem sucesso, o prolog executa os literaisliterais2. O mecanismo de retrocessso pode gerar solucoes alternativas paraliterais1 ou para literais2, mas nao pode gerar solucoes alternativas para teste.Um literal da forma teste -> literais e equivalente a teste -> literais ; fail.

E importante notar a equivalencia entre os programas

s :- Teste, !, Literal1.s :- Literal2.

e

s :- Teste -> Literal1 ; Literal2.

Esta equivalencia mostra que a operacao condicional nao e mais do que“acucar sintactico” para uma combinacao do operador de corte e de alter-nativas para a mesma clausula.

Exemplo 5.14.1 O predicado menor do Exemplo 5.12.7, podera ser escritodo seguinte modo utilizando o operador condicional:

menor(X, Y, Z) :- X =< Y -> Z = X ; Z = Y. `

Exemplo 5.14.2 (Factorial – versao 2) Consideremos a definicao de fac-torial do Exemplo 5.7.5. Utilizando o operador condicional, podemos es-crever a seguinte versao alternativa deste programa:

factorial(N, F) :-N = 1->F is 1;Nmenos1 is N - 1,factorial(Nmenos1, FNmenos1),F is FNmenos1 * N.

`

Page 316: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

304 CAPITULO 5. PROLOG

5.15 A negacao em prolog

Recordemos do Exemplo 5.3.1 que o prolog assume a hipotese do mundofechado, tudo aquilo que nao e possıvel derivar das afirmacoes e regras exis-tentes no programa e falso. A combinacao da hipotese do mundo fechadocom o operador de corte permite introduzir um tipo de negacao chamadanegacao por falhanco.

A negacao por falhanco permite tratar, de um modo limitado, regras comexcepcoes, regras essas que sao utilizadas na nossa vida quotidiana e queestao associadas a frases do tipo:

Normalmente, A e verdadeiro;Tipicamente, A;Regra geral, A;Se nao houver informacao contraria, assumir A.

Por exemplo, dada a frase “normalmente as aves voam”, ao tomarmos co-nhecimento da existencia de uma dada ave, digamos Piupiu, poderemos serlevados a concluir que o Piupiu voa, embora exista um numero infindavel deexcepcoes: avestruzes, pinguins, aves recem-nascidas, aves mortas, etc. Eimportante notar o facto de que a conclusao de que o Piupiu voa baseou-senao so na informacao de que normalmente as aves voam e de que o Piupiu euma ave, como tambem na suposicao de que o Piupiu e uma ave normal noque diz respeito a voar. Esta suposicao, por sua vez, baseia-se na ausenciade informacao sobre a nao normalidade do Piupiu. Por esta razao, se vier-mos a saber mais tarde que por algum motivo o Piupiu nao e normal no quediz respeito a voar, teremos de retirar a conclusao de que o Piupiu voa.

Note-se a diferenca que existe entre a frase anterior e uma frase quantificadauniversalmente, como por exemplo, “todas as aves sao mortais”; neste caso,se soubermos que o Piupiu e uma ave, podemos inferir que o Piupiu e mortal,e esta conclusao nao e revisıvel: por muita nova informacao que nos chegue,nunca abandonaremos a conclusao de que o Piupiu e mortal.

A negacao por falhanco e usada em prolog atraves do metapredicado “\+”,lido nao (e cujo grafismo e originado no sımbolo de nao derivabilidade, 6&),o qual pode ser definido do seguinte modo:

\+(P) :- P, !, fail.

\+(P).

Page 317: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.15. A NEGACAO EM PROLOG 305

Note-se que “\+” e um metapredicado pois este aplica-se a predicados, ouseja, “\+” e um predicado de segunda ordem.

A semantica procedimental do programa anterior afirma o seguinte: “pararesponder ao objectivo \+(P), tente-se provar P, no caso de sucesso, nao seretroceda a partir deste ponto e retorne-se insucesso; em caso contrario, ouseja, se P nao for satisfeito pela clausula anterior, entao \+P e verdadeiro.

Exemplo 5.15.1 (Entidades voadoras) Consideremos o seguinte progra-ma em prolog:

voa(P) :- ave(P), \+ pinguim(P).

ave(gelido).ave(piupiu).pinguim(gelido).

Este programa especifica que uma dada entidade voa se for uma ave que naoseja um pinguim. Com este programa obtemos a interaccao:

?- voa(gelido).No

?- voa(piupiu).Yes

?- voa(X).X = piupiu ;No

?- \+ voa(X).No

?- \+ pinguim(X).No

E importante notar que o prolog “nao sabe” quem sao as entidades que naovoam, nem quem sao as entidades que nao sao pinguins, como o demonstramas ultimas linhas da interaccao anterior. `

Page 318: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

306 CAPITULO 5. PROLOG

5.16 Execucao forcada

Consideremos novamente a definicao de uma regra apresentada na pagina 225:

<regra> ::= <literal> :- <literais>.

e suponhamos que consideramos a hipotese de um literal ser “nada”. Aregra

:- <literais>.

pode ser interpretada procedimentalmente como: para provar “nada”, proveos literais a seguir ao sımbolo “:-”. A expressao anterior e considerada comoum comando de execucao forcada dos literais que surgem apos o sımbolo“:-”.

5.17 Definicao de novos operadores

Em prolog e possıvel definir novos operadores, especificando se a sua uti-lizacao utiliza a notacao prefixa, infixa ou sufixa. Esta definicao pode serrealizada em relacao a termos ou em relacao a predicados. Para a definicaonovos operadores, o prolog fornece o predicado op com a seguinte sintaxe:

op(<prioridade>, <posicao>, <nome>)

Esta expressao e lida como “o operador nome e definido com a prioridadeprioridade e a posicao posicao”. A prioridade define a prioridade do operador,tal como descrito na pagina 261, a posicao especifica o tipo do operador adefinir, prefixo, infixo ou sufixo, e a sua associatividade, tal como definidonas paginas 257 e 258, e o nome corresponde ao atomo que representa onome do operador a definir.

Exemplo 5.17.1 (Prioridade de operadores) As expressoes

:- op(1000, xfy, ou).:- op(900, xfy, e).

definem dois operadores binarios, com associatividade a direita, cujos nomessao ou e e e as prioridades sao, respectivamente, 1000 e 900. Note-se queestamos a utilizar a execucao forcada (ver Seccao 5.16).

Page 319: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.17. DEFINICAO DE NOVOS OPERADORES 307

Como sabemos, a diferenca de prioridades significa que o operador e tomaprecedencia sobre o operador ou, ou seja, por exemplo, que a expressao A eB ou C e interpretada como (A e B) ou C.

Sabemos tambem que a associatividade a direita significa que em expressoescom o mesmo operador, as operacoes corresponentes sao executadas da es-querda para a direita, ou seja, por exemplo, que a expressao A e B e C eavaliada como (A e B) e C. `

Exemplo 5.17.2 (Avaliacao de operacoes logicas) Consideremos ago-ra o seguinte programa em prolog para a avaliacao de expressoes logicas.Neste programa sao definidos quatro operadores nao, e, ou e implica, per-mitido a formacao e a avaliacao de operacoes com estes operadores.

O predicado tv <op> define a tabela de verdade para o operador op, repre-sentando v e f, respectivamente, os valores logicos verdadeiro e falso.

Os predicados atomic/1 e var/1, sao predicados pre-definidos em prolog esignificam, respectivamente, que o seu argumento e um termo atomico ouum numero e que o seu argumento e uma variavel.

:- op(1000, xfy, ou).:- op(1000, xfy, implica).:- op(900, xfy, e).:- op(600, fy, nao).

tv_nao(v, f).tv_nao(f, v).

tv_e(v, v, v).tv_e(v, f, f).tv_e(f, v, f).tv_e(f, f, f).

tv_ou(v, v, v).tv_ou(v, f, v).tv_ou(f, v, v).tv_ou(f, f, f).

avalia(A, A) :- atomic(A), !.

Page 320: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

308 CAPITULO 5. PROLOG

avalia(A, A) :- var(A), !.

avalia(A e B, C) :-!,avalia(A, A1),avalia(B, B1),tv_e(A1, B1, C).

avalia(A ou B, C) :-!,avalia(A, A1),avalia(B, B1),tv_ou(A1, B1, C).

avalia(nao A, C) :-!,avalia(A, A1),tv_nao(A1, C).

avalia(A implica B, C) :- avalia(nao(A) ou B, C).

Com este programa obtemos a seguinte interaccao:

?- avalia(v e X, Y).X = v,Y = v ;X = f,Y = f ;No

?- avalia(nao(X), Y).X = v,Y = f ;X = f,Y = v ;No

?- avalia(nao X, Y).X = v,Y = f ;

Page 321: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.17. DEFINICAO DE NOVOS OPERADORES 309

X = f,Y = v ;No

?- avalia((A e B) ou C, f).A = v,B = f,C = f ;A = f,B = v,C = f ;A = f,B = f,C = f ;No

?- avalia(X implica Y, v).X = v,Y = v ;X = f,Y = v ;X = f,Y = f ;No

A diferenca entre as prioridades dos operadores e ilustrada pela seguinteinteraccao:

?- avalia(f e f ou v, X).X = v ;No

?- avalia(f ou f e v, X).X = f ;No

`

Page 322: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

310 CAPITULO 5. PROLOG

5.18 Comparacao com outras linguagens

Sob o ponto de vista de uma linguagem de programacao, podemos considerarnuma linguagem os mecanismos de controle das instrucoes e os mecanismosde definicao de manipulacao de dados.

Sob o ponto de vista dos mecanismos de controle, o prolog e semelhante auma linguagem convencional, desde que nao exista retrocesso. A invocacaode objectivos corresponde a uma invocacao de procedimento, utilizando pas-sagem de parametros por referencia e a ordem das clausulas numa regracorresponde a ordem pela qual os procedimentos sao invocados.

A regra

c(<args>) :- o1(<args>), ..., on(<args>)

pode ser olhada como o procedimento:

Procedimento c(<args>)o1(<args>)...on(<args>)

fimA diferenca em relacao a outras linguagens de programacao, surge no mo-mento do retroceso. Numa linguagem convencional, se um processo compu-tacional nao pode prosseguir, gera-se um erro de execucao. Em prolog oprocesso computacional retrocede para o ultimo ponto de decisao em queexiste uma alternativa e o processo continua atraves de um caminho dife-rente.

No que respeita a estruturas de informacao, o prolog e uma linguagemsem declaracao de tipos, utilizando estruturas de informacao de modo muitoflexıvel e sem declaracao previa.

5.19 Notas bibliograficas

Na sequencia do trabalho de [Herbrand 30], Paul C. Gilmore [Gilmore 59]apresentou a primeira implementacao do algoritmo de Herbrand.

Em 1965, J. Alan Robinson publica o algoritmo de unificacao [Robinson 65],

Page 323: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.20. EXERCICIOS 311

o que leva Donal W. Loveland a utilizar o princıpio da resolucao linear comuma funcao de seleccao [Loveland 72].

Os primeiros passos em direccao a Programacao em Logica foram dadospor Robert Kowalski que apresentou a semantica procedimental para asclausulas de Horn [Kowalski e Kuehner 71], [Kowalski 74] e por Alain Colme-rauer que desenvolveu, em 1972, o primeiro interpretador de prolog [Col-merauer e Roussel 1993].

O livro de [Sterling e Shapiro 94] apresenta de uma forma detalhada e pro-funda a linguagem prolog e a sua utilizacao, correspondendo a um exce-lente complemento a este livro.

5.20 Exercıcios

1. Suponha que o programa do Exemplo 5.3.6 era escrito do seguintemodo:

liga(a, b).liga(b, c).liga(b, d).liga(d, e).liga(f, g).liga(d, h).liga(h, i).liga(i, e).

liga_ind(X, Y) :- liga(X, Y).

liga_ind(X, Z) :- liga_ind(X, Y), liga(Y, Z).

Sera que este programa tem o mesmo comportamento que o programado Exemplo 5.3.6? Justifique a sua resposta.

2. Considere as seguintes tabelas que representam, respectivamente, alista de fornecedores e as cidades em que estao localizados, os produtosexistentes, e as quantidades de produtos existentes em cada fornecedor.

Page 324: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

312 CAPITULO 5. PROLOG

Codigo do Nome Actividade Cidadefornecedor

F001 Ze dos Parafusos Fabricante CarregadoF002 Branquinho Importador LisboaF003 Lar Ideal Importador Lisboa

Codigo do DescricaoprodutoP001 ParafusoP002 BrocaP003 LavatorioP004 SaboneteP005 Detergente

Codigo do Codigo do Quantidadefornecedor produto

F001 P001 30000F001 P002 500F002 P003 25F002 P004 50000F002 P005 50000F003 P001 1000F003 P002 50F003 P003 5F003 P005 500

(a) Represente num programa em prolog a informacao anterior.(b) Escreva expressoes para responder as seguintes perguntas:

i. Quais os fornecedores de parafusos?ii. Quais os fornecedores de parafusos localizados em Lisboa?iii. Quais sao as localizacoes (cidades) dos fornecedores de de-

tergentes?iv. Quais os produtos disponıveis no Carregado?

3. Produza a arvore gerada pelo seguinte programa em prolog:

j(a, b).r(X) :- m(X, Y).m(b, a) :- j(a, b).m(X, Y) :- j(X, Y).?- r(X).

Page 325: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.20. EXERCICIOS 313

4. Considerando a estrutura data apresentada na Seccao 5.10, escrevaprogramas em prolog para:

(a) Determinar se uma data e correcta (o reconhecedor para o tipodata). Tenha em atencao a possibilidade de um ano ser bissexto.

(b) Determinar se duas datas sao iguais (o teste para o tipo data).

(c) Calcular a data do dia seguinte a uma dada data. Tenha ematencao a possibilidade de um ano ser bissexto.

5. Escreva um programa em prolog para calcular a diferenca entre duaslistas.

6. Considere a definicao dos numeros de Fibonacci:

fib(n) =

$%

&

0 se n = 01 se n = 1fib(n5 1) + fib(n5 2) se n > 1

Seja fib o predicado com o seguinte significado: fib(N, V) afirmaque o N-esimo numero de Fibonacci e V.

(a) Escreva um programa em prolog que implementa o predicadofib.

(b) Qual a resposta do seu programa ao objectivo fib(X, 21)? Jus-tifique a sua resposta.

7. Considere a definicao da funcao de Ackermann:

A(m, n) =

$%

&

n + 1 se m = 0A(m5 1, 1) se m > 0 e n = 0A(m5 1, A(m, n5 1)) se m > 0 e n > 0

Seja a o predicado com o seguinte significado: a(M, N, V) afirma queo valor da funcao de Ackermann para os argumentos M e N e V. Escrevaum programa em prolog que implementa o predicado a.

8. Escreva um programa em prolog para responder a perguntas relativasa relacoes familiares. O seu programa devera ser capaz de identificaras seguintes relacoes:

• Filho / filha

• Irmao / irma

Page 326: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

314 CAPITULO 5. PROLOG

• Primos direitos

• Cunhado / cunhada

• Tio / tia

• Pai / mae

• Avo / avo

• Tios avos

• Antepassado

• Descendente

9. Escreva um programa em prolog para resolver o seguinte puzzle:30

“O Homem Livre conhece cinco mulheres: Ada, Bea, Cyd, Deb e Eve.

(a) As mulheres pertencem a duas faixas etarias, tres mulheres temmais de 30 anos e as outras duas tem menos de 30 anos.

(b) Duas das mulheres sao professoras e as outras tres sao secretarias.

(c) A Ada e a Cyd pertencem a mesma faixa etaria.

(d) A Deb e a Eve pertencem a faixas etarias diferentes.

(e) A Bea e a Eve tem a mesma profissao.

(f) A Cyd a a Deb tem profissoes diferentes.

Das cinco mulheres, o Homem Livre vai casar-se com a professora commais de 30 anos. Com que se vai casar o Homem Livre?”

10. Escreva em prolog o predicado duplica elementos/2 com o seguintesignificado: duplica elementos(L1, L2) afirma que a lista L2, cons-tituıda apenas por numeros, se obtem a partir da lista L1 duplicandoo valor de todos os seus elementos. Por exemplo:

?- duplica_elementos([2, 4, 6], X).X = [4, 8, 12]Yes

11. Escreva em prolog o predicado soma elementos/2 com o seguintesignificado: soma elementos(L, N) afirma que a soma de todos oselementos da lista L, constituıda apenas por numeros, e N.

30De [Summers 72, pagina 6].

Page 327: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.20. EXERCICIOS 315

a

i

b c

d f

g

eh

Figura 5.24: Grafo cıclico.

12. Escreva em prolog o predicado intersecta/3 com o seguinte signi-ficado: a expressao intersecta(L1, L2, L3) significa que a lista L3contem apenas os elementos comuns as listas L1 e L2. O seu programadeve evitar que o retrocesso produza respostas erradas.

13. Escreva em prolog o predicado substitui/4 com o seguinte signifi-cado: a expressao substitui(L1, De, Para, L2) significa que a listaL2 e obtida a partir da lista L1, substituindo todas as ocorrencias deDe por Para. Com este predicado podemos obter a interaccao:

?- substitui([a, b, e, d, b], b, f, X).X = [a, f, e, d, f]Yes

?- substitui([a, b, e, d, b], X, Y, [a, f, e, d, f]).X = b,Y = fYes

14. Modifique o programa do Exemplo 5.11.12 de modo que este consigalidar com grafos contendo ciclos. Teste o seu programa com o grafoapresentado na Figura 5.24.

15. Considere o seguinte programa em prolog:

a_1(X, Y) :- b(X), c(Y).

Page 328: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

316 CAPITULO 5. PROLOG

a_2(X, Y) :- !, b(X), c(Y).

a_3(X, Y) :- b(X), !, c(Y).

a_4(X, Y) :- b(X), c(Y), !.

b(0).b(1).

c(2).c(3).

Diga quais as respostas dadas pelo prolog aos seguintes objectivos:

(a) a 1(X, Y).

(b) a 2(X, Y).

(c) a 3(X, Y).

(d) a 4(X, Y).

16. Explique qual o papel da quarta clausula do programa do Exem-plo 5.12.5. Sugestao: analise o comportamento da seguinte mo-dificacao desse programa, no qual as duas ultimas clausulas sao juntasnuma unica clausula.

junta_ord(L, [], L) :- !.

junta_ord([], L, L) :- !.

junta_ord([P1 | R1], [P2 | R2], [P1 | R]) :-P1 < P2,!,junta_ord(R1, [P2 | R2], R).

junta_ord([P1 | R1], [P2 | R2], [P2 | R]) :-P1 >= P2,!,junta_ord([P1 | R1], R2, R).

17. Considere o seguinte programa em prolog:

Page 329: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

5.20. EXERCICIOS 317

voa(P) :- \+ pinguim(P), ave(P).

ave(gelido).ave(piupiu).pinguim(gelido).

Qual a resposta fornecida pelo prolog a questao Voa(X)? Discutaqual a diferenca desta resposta em relacao a resposta obtida no Exem-plo 5.15.1.

Page 330: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

318 CAPITULO 5. PROLOG

Page 331: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Apendice A

Sumario da Regras deInferencia

“My dear fellow, you know my methods.”

Sherlock Holmes, The Stockbroker’s Clerk

Apresentamos neste apendice o sumario das regras de inferencia do sistemade deducao natural.

Nome Regra

Premissa n ! Prem

Hipotese

n ! Hip

n + 1 . . .

Repeticao

n !...

...m ! Rep, n

Re-iteracao

n !...

...m ! Rei, n

Page 332: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

320 SUMARIO DAS REGRAS DE INFERENCIA

Introducao Eliminacao

(

n ! Hip

......

m "

m + 1 ! ( " I(, (n, m)

n !m ! ( "m + 1 " E(, (n, m)

&n !n + 1 "n + 2 ! & " I&, (n, n + 1)

n ! & "n + 1 ! E&, n

and

n ! & "n + 1 " E&, n

'

n !n + 1 ! ' " I', n

and

n !n + 1 " ' ! I', n

n ! ' "

o ! Hip

......

p %

r " Hip

......

s %

m % E', (n, (o, p), (r, s))

¬

n ! Hip

......

m "

m + 1 ¬"

m + 2 ¬! I¬, (n, (m, m + 1))

n ¬¬!n + 1 ! E¬, n

Page 333: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SUMARIO DAS REGRAS DE INFERENCIA 321

Introducao Eliminacao

,

n x0...

...

m !(x) · {x0/x}m + 1 ,x[!(x)] I,, (n, m)

n ,x[!(x)]n + 1 !(x) · {t/x} E,, n

- n !(t)n + 1 -x[!(x)] I-, n

n -x[!(x)]

m x0 !(x) · {x0/x} Hip

......

k "

k + 1 " E-, (n, (m, k))

Page 334: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

322 SUMARIO DAS REGRAS DE INFERENCIA

Page 335: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Apendice B

Manual de Sobrevivencia emProlog

“I have come for advice.”“That is easily got.”“And help.”“That is not always so easy.”

Sherlock Holmes, The Five Orange Pips

B.1 Obtencao do Prolog

A versao do prolog utilizada neste livro (o SWI-Prolog) e um programa dedomınio publico, produzido pelo grupo HCS da Universidade de Amsterdaoe que pode ser obtido em:1

http://www.swi-prolog.org/download.html

1A utilizacao deste endereco podera corresponder a uma versao mais recente da lingua-gem do que a utilizada neste livro. A linguagem e as figuras apresentadas correspondema versao 5.6.48, disponıvel em Dezembro de 2007. Carregamentos posteriores a essa datapodem corresponder a uma nova versao do SWI-Prolog. O endereco da pagina de carre-gamento do SWI-Prolog podera tambem, eventualmente, ser alterado.

Page 336: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

324 SOBREVIVENCIA EM PROLOG

Figura B.1: Janela de carregamento do SWI-Prolog.

Figura B.2: Opcoes de acordo com o sistema operativo a utilizar.

Page 337: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOBREVIVENCIA EM PROLOG 325

Na pagina correspondente a este endereco (Figura B.1), atraves da entrada“stable release”, pode ser escolhido o sistema operativo e a versao a utilizar(Figura B.2).

Apos o carregamento do codigo fonte do SWI-Prolog, este deve ser devida-mente instalado, de acordo com as indicacoes fornecidas no ficheiro que ecarregado. Estas instrucoes dependem do sistema operativo utilizado. Todaa discussao apresentada no resto deste apendice pressupoe que o SWI-Prologesta instalado.

B.2 Inıcio de uma sessao

Ao iniciar uma sessao com o SWI-Prolog, surge a seguinte mensagem:

Welcome to SWI-Prolog (Multi-threaded, Version 5.6.34)Copyright (c) 1990-2007 University of Amsterdam.SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is freesoftware, and you are welcome to redistribute it under certainconditions.Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?-

O sımbolo ?- corresponde ao caracter de pronto do prolog, devendo todosos comandos ser fornecidos ao SWI-Prolog a partir dele.

B.3 Criacao a alteracao de programas

No SWI-Prolog os programas sao criados e modificados como ficheiros detexto (ficheiros ASCII) com o recurso a qualquer editor de texto.

Tal como em qualquer linguagem de programacao, em prolog existe umconjunto de regras de estilo cuja utilizacao e recomendada para facilitar aleitura dos programas. Estas regras contem regras gerais de boas praticasna escrita de programas e regras especıficas para o prolog.

Page 338: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

326 SOBREVIVENCIA EM PROLOG

Regras gerais.

1. Devemos escolher nomes apropriados para as nossas variaveis, cons-tantes, functores e nomes de predicados.

2. Devemos inserir comentarios em pontos relevantes do programa. Oscomentarios sao frases em linguagem natural que aumentam a facili-dade de leitura do programa, explicando o significado dos nomes, osobjectivos de partes do programa, certos aspectos do algoritmo, etc.Os comentarios podem tambem ser expressoes matematicas provandopropriedades sobre o programa.

Em prolog, os comentarios sao delimitados pelos sımbolos “/*” e“*/”. Sempre que se escreve um comentario deve ter-se em atencaoa indicacao do fim do comentario. Se nos esquecermos de assinalaro fim do comentario (isto e, se nos esquecermos de escrever “*/”), oprolog considerara algumas das clausulas do nosso programa comofazendo parte do comentario (todas as clausulas que precedem a pri-meira ocorrencia de “*/”).

Um comentario que apenas ocupa parte de uma linha pode tambemser iniciado com o caracter “%”, terminando este comentario no fimda linha respectiva. Neste caso, nao existe nenhum sımbolo explıcitopara terminar o comentario.

Regras especıficas do prolog.

1. As clausulas sao separadas por uma ou mais linhas em branco.

2. Devemos escrever apenas um literal por linha, com a possıvel excepcaodos literais em algumas regras muito curtas.

3. As regras devem ser paragrafadas de modo a que cada literal quepertenca ao corpo uma regra sejam paragrafado da mesma maneira.Este aspecto tem o efeito de mostrar as clausulas de um programa demodo que as clausulas que sao normalmente consideradas como umaunidade aparecam como uma unidade.

4. Devemos inserir um espaco em depois de cada vırgula num termocomposto ou num predicado.

Estes aspectos sao ilustrados nos programas que apresentamos no Capıtulo 5.

Page 339: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOBREVIVENCIA EM PROLOG 327

B.4 Carregamento e utilizacao de programas

Uma sessao tıpica em prolog consiste no carregamento de um programa,de modo a incluir na linguagem novos predicados definidos pelo utilizador,seguido da execucao de objectivos.

O carregamento de qualquer ficheiro correspondente a um programa emprolog e feito atraves do comando

consult(<atomo correspondente ao nome do ficheiro>).

A execucao deste comando causa a compilacao do ficheiro designado e oseu carregamento na presente sessao. Apos este carregamento, todos ospredicados definidos no programa passam a ser conhecidos pelo prolog.

Uma sessao em prolog corresponde a um ciclo interpretado do tipo “le-avalia-escreve”, no qual o prolog le um objectivo que se deseja provar,efectua a prova desse objectivo, ou, dito de uma modo diferente, executa esseobjectivo (este aspecto correspondente a parte “avalia” do ciclo) e escreve oresultado obtido.

Exemplo B.4.1 Dependendo do sistema operativo em utilizacao, os se-guintes comandos correspondem a accoes de carregamento de ficheiros:

?- consult(teste).?- consult(’membro.pl’).?- consult(’usr/jpm/prolog/membro.pl’).?- consult(’\\jpm\\prolog\\membro.pl’).?- consult(’lib:membro.pl’).

Note-se a utilizacao de plicas para a criacao de nomes de atomos que contemcaracteres especiais. Note-se tambem a existencia de um ponto no final dalinha. `

Alternativamente, o carregamento de um ficheiro correspondente a um pro-grama em prolog pode ser feito atraves do comando:

[<atomo correspondente ao nome do ficheiro>].

Exemplo B.4.2 O seguinte comando carrega o ficheiro cujo nome e membro.pl,existente no directorio de onde sao carregados os ficheiros por omissao:

Page 340: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

328 SOBREVIVENCIA EM PROLOG

?- [’membro.pl’].% membro.pl compiled 0.00 sec, 15,820 bytesYes

`

B.5 Informacao sobre predicados

Durante a interaccao com o prolog e comum ter-se a necessidade de con-sultar a definicao de um predicado. O prolog fornece o meta-predicadolisting/1 que aceita como argumento o nome de um predicado definido nonosso programa e que tem como efeito mostrar a definicao desse predicadono monitor.2

Exemplo B.5.1 Considerando o programa do Exemplo 5.3.1, podemos ob-ter a seguinte interaccao:

?- listing(ant).

ant(A, B) :-ad(A, B).

ant(A, C) :-ant(A, B),ad(B, C).

Yes

`

B.6 Rastreio de predicados

O prolog apresenta varios mecanismos para a depuracao de programas,alguns dos quais sao apresentados nesta seccao.

Para compreender o rastreio da execucao de predicados em prolog e im-portante comecar por discutir os varios eventos que tem lugar quando o

2Este predicado tambem pode mostrar o conteudo completo de um ficheiro, se o argu-mento que lhe e fornecido corresponder ao nome de um ficheiro.

Page 341: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOBREVIVENCIA EM PROLOG 329

objRedo

Call

Fail

Exit

Figura B.3: Eventos associados a prova do objectivo obj.

prolog esta a tentar provar um objectivo. Distinguem-se quatro eventosdurante a tentativa de provar um objectivo (apresentados na Figura B.3):

• Call. Este evento ocorre no momento em que o prolog inicia aprova de um objectivo. Este evento corresponde a passagem por umno da arvore SLD no sentido de cima para baixo. O objectivo indicadocorresponde ao primeiro literal do objectivo em consideracao.

• Exit. Este evento ocorre no momento em que o prolog consegueprovar o objectivo, ou seja, quando o objectivo tem sucesso.

• Redo. Este evento ocorre no momento em que o prolog, na sequenciade um retrocesso, volta a considerar a prova de um objectivo.

• Fail. Este evento ocorre no momento em que o prolog falha naprova de um objectivo.

O meta-predicado de sistema trace/1, aceita como argumento o nome deum outro predicado e permite seguir o rasto da avaliacao do predicado es-pecificado.

Exemplo B.6.1 Consideremos o programa do Exemplo 5.3.1:

ad(marge, bart).ad(srB, marge).

ant(X, Y) :- ad(X, Y).

ant(X, Z) :- ant(X, Y), ad(Y, Z).

Recorrendo ao predicado trace/1 para solicitar o rastreio dos predicadosad e ant:

Page 342: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

330 SOBREVIVENCIA EM PROLOG

?- trace(ad).% ad/2: [call, redo, exit, fail]Yes[debug] ?- trace(ant).% ant/2: [call, redo, exit, fail]Yes

a resposta do prolog a estas solicitacoes indica-nos que os quatro even-tos associados a execucao de predicados (call, redo, exit e fail) seraomostrados. O indicador [debug] ?- diz-nos que o prolog se encontra emmodo de depuracao.

Ao seguir o rasto da execucao de um predicado, o prolog associa cadaexecucao de um objectivo com um identificador numerico unıvoco, chamadoo numero da invocacao, o qual e apresentado, entre parenteses, sempre queo rastreio de um predicado esta a ser utilizado.

Pedindo agora ao prolog para provar que ant(srB, bart), obtemos aseguinte interaccao:

[debug] ?- ant(srB, bart).T Call: (7) ant(srB, bart)T Call: (8) ad(srB, bart)T Fail: (8) ad(srB, bart)T Redo: (7) ant(srB, bart)T Call: (8) ant(srB, _L172)T Call: (9) ad(srB, _L172)T Exit: (9) ad(srB, marge)T Exit: (8) ant(srB, marge)T Call: (8) ad(marge, bart)T Exit: (8) ad(marge, bart)T Exit: (7) ant(srB, bart)Yes

As duas primeiras linhas do rastreio destes predicados:

T Call: (7) ant(srB, bart)T Call: (8) ad(srB, bart)

indicam-nos que se iniciou uma prova do objectivo ant(srB, bart), a qualoriginou a prova do objectivo ad(srB, bart). Este aspecto e apresentado

Page 343: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOBREVIVENCIA EM PROLOG 331

ant(srB, bart)

Call (7)ad(srB, bart)

Call (8)

Figura B.4: Invocacoes para provar ant(srB, bart) e ad(srB, bart).

ant(srB, bart)

ad(srB, bart)Fail (8)

Figura B.5: Falhanco da primeira tentativa de provar o objectivo inicial.

esquematicamente na Figura B.4, a qual devera sem comparada com a arvoreSLD originada para este objectivo e apresentada na Figura 5.2. Na Fi-gura B.4, se um rectangulo correspondente a uma invocacao de um predi-cado, e desenhado dentro de um rectangulo correspondente a uma outrainvocacao, estao, isso significa que o objectivo que corresponde a invocacaoapresentada no rectangulo exterior originou a invocacao do objectivo queesta representada no rectangulo interior.

O objectivo ad(srB, bart) falha, o que e traduzido pela seguinte linha dorastreio do predicado

T Fail: (8) ad(srB, bart)

(Figura B.5), o que faz com que uma nova prova para o objectivo ant(srB,bart) seja tentada. Este facto e ilustrado pelas seguintes linhas apresenta-das no rastreio dos predicados e cujos efeitos se ilustram na Figura B.6.

T Redo: (7) ant(srB, bart)T Call: (8) ant(srB, _L172)T Call: (9) ad(srB, _L172)

Nesta tentativa, e utilizada a variante da clausula: ant(srB, bart) :-ant(srB, L172), ad( L172, bart). Esta nova tentativa de prova corres-ponde ao ramo da arvore SLD que se mostra na Figura 5.3.

Page 344: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

332 SOBREVIVENCIA EM PROLOG

ant(srB, bart)

Redo (7)

ant(srB, L172)

Call (8)

ad(srB, L172)

Call (9)

Figura B.6: Segunda tentativa de provar o objectivo inicial.

ant(srB, bart)

ant(srB, marge)

Exit (8)ad(srB, marge)

Exit (9)

Figura B.7: Resultado da prova do objectivo ant(srB, L172).

O objectivo ad(srB, L172) unifica com ad(srB,marge) o que origina aseguinte informacao durante o rastreio (correspondendo a Figura B.7):

T Exit: (9) ad(srB, marge)T Exit: (8) ant(srB, marge)

Tendo provado o primeiro literal no corpo da clausula ant(srB, bart) :-ant(srB, L172), ad( L172, bart) com a substituicao {marge/ L172}, oprolog tenta agora provar o segundo literal, com sucesso como o indicamas seguintes linhas do rastreio dos nossos predicados (Figura B.8):

T Call: (8) ad(marge, bart)T Exit: (8) ad(marge, bart)T Exit: (7) ant(srB, bart)Yes

`

Quando se solicita ao prolog que siga o rasto da execucao de um ou mais

Page 345: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOBREVIVENCIA EM PROLOG 333

ant(srB, bart)

Exit (7)

ant(marge, bart)

Exit (8)ad(marge, bart)

Exit (9)

Figura B.8: Resultado da prova do objectivo inicial.

predicados, este entra em modo de depuracao, mudando o indicador para[debug] ?-. O modo de depuracao pode ser terminado atraves da execucaodo predicado nodebug/0.

Para alem do predicado de sistema trace/1, o prolog fornece outros predi-cados pre-definidos que auxiliam a tarefa de depuracao. Apresentamos maisalguns destes predicados:

• spy/1. Este meta-predicado tem o efeito de efectuar o rastreio do pre-dicado que e seu argumento. A diferenca entre spy/1 e trace/1 resideno facto do meta-predicado spy/1 originar um rastreio interactivo: nofinal de cada evento de execucao, e solicitado ao utilizador que fornecauma indicacao sobre o modo de prosseguir com a tarefa de rastreio.Algumas das possıveis indicacoes sao apresentadas na Tabela B.1.3

• trace/0. Este predicado tem o efeito de ligar o mecanismo de rastreio.A partir do momento da execucao deste predicado, todas as execucoesde todos os predicados definidos no nosso programa sao mostradas.

Exemplo B.6.2 Considerando, de novo, o programa do Exemplo 5.3.1, po-demos gerar a seguinte interaccao:

?- spy(ant).% Spy point on ant/2Yes

[debug] ?- ant(X, bart).Call: (7) ant(_G312, bart) ? creep

3Indicacoes adicionais podem ser consultadas no manual do prolog.

Page 346: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

334 SOBREVIVENCIA EM PROLOG

Indicacao Significado“return” siga para o proximo passo

da execucao (“creep”)s continue a execucao sem mostrar o

rastreio de predicados ate a proximaexecucao do predicado nesteobjectivo

a aborta a execucaoi ignora o presente objectivo, fazendo

com que este tenha sucesson termina o modo de depuracao,

continuando a prova? mostra as indicacoes disponıveis

Tabela B.1: Indicacoes possıveis durante o rastreio interactivo.

Call: (8) ad(_G312, bart) ? creepExit: (8) ad(marge, bart) ? skipExit: (7) ant(marge, bart) ? creep

X = marge ;Redo: (8) ad(_G312, bart) ? skipRedo: (8) ad(_G312, bart) ? skipRedo: (7) ant(_G312, bart) ? creepCall: (8) ant(_G312, _L172) ? creepCall: (9) ad(_G312, _L172) ? creepExit: (9) ad(marge, bart) ? creepExit: (8) ant(marge, bart) ? creepCall: (8) ad(bart, bart) ? creepFail: (8) ad(bart, bart) ? creepRedo: (9) ad(_G312, _L172) ? creepExit: (9) ad(srB, marge) ? creepExit: (8) ant(srB, marge) ? creepCall: (8) ad(marge, bart) ? creepExit: (8) ad(marge, bart) ? creepExit: (7) ant(srB, bart) ? creep

X = srBYes

Page 347: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOBREVIVENCIA EM PROLOG 335

`

B.7 Informacao de ajuda

Durante uma sessao com o prolog e possıvel obter informacao de ajudasobre varios topicos. Para alem do predicado pre-definido listing apresen-tado na seccao B.5, existem dois outros predicados uteis, help e apropos:

• O meta-predicado pre-definido help/1, cujo argumento corresponde aentidade sobre a qual se pretende onter informacao, permite consultaro manual do prolog sobre predicados, funcoes e operadores existentesna linguagem.

Exemplo B.7.1 (Utilizacao de help)

?- help(is).-Number is +Expr

True if Number has successfully been unified with the number Exprevaluates to. If Expr evaluates to a float that can be representedusing an integer (i.e, the value is integer and within the rangethat can be described by Prolog’s integer representation), Expr isunified with the integer value.

Note that normally, is/2 should be used with unbound left operand.If equality is to be tested, =:=/2 should be used. For example:

?- 1 is sin(pi/2). Fails!. sin(pi/2) evaluatesto the float 1.0, which doesnot unify with the integer 1.

?- 1 =:= sin(pi/2). Succeeds as expected.Yes

`

• O meta-predicado pre-definido apropos/1, aceita como argumento umtopico sobre o qual desejamos saber informacao e mostra a informacaoexistente no manual do prolog relacionada com o topico indicado.

Exemplo B.7.2 (Utilizacao de apropos)

Page 348: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

336 SOBREVIVENCIA EM PROLOG

?- apropos(trace).guitracer/0 Install hooks for the graphical debuggernoguitracer/0 Disable the graphical debuggergtrace/0 Trace using graphical tracergdebug/0 Debug using graphical tracergspy/1 Spy using graphical tracertrace/0 Start the tracertracing/0 Query status of the tracernotrace/0 Stop tracingguitracer/0 Install hooks for the graphical debuggernoguitracer/0 Disable the graphical debuggertrace/1 Set trace-point on predicatetrace/2 Set/Clear trace-point on portsnotrace/1 Do not debug argument goalspy/1 Force tracer on specified predicateleash/1 Change ports visited by the tracervisible/1 Ports that are visible in the tracerchr_trace/0 Start CHR tracerchr_notrace/0 Stop CHR tracerprolog_trace_interception/4 library(user) Intercept the Prolog tracerprolog_skip_level/2 Indicate deepest recursion to traceprolog_list_goal/1 Hook (user) Intercept tracer ’L’ commandSection 12-2 ’’Intercepting the Tracer’’Yes

`

Page 349: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Apendice C

Solucoes de ExercıciosSeleccionados

A formidable array of bottles and test-tubes, with thepungent cleanly smell of hydrochloric acid, told methat he had spent his day in the chemical work whichwas so dear to him.“Well, have you solved it?” I asked as I entered.“Yes. It was the bisulphate of baryta.”

Sherlock Holmes, A Case of Identity

C.1 Exercıcios do Capıtulo 1

4

C.2 Exercıcios do Capıtulo 2

1. (f) Provamos, separadamente, cada uma das implicacoes:

1. (¬P ! ¬Q) # ¬(P "Q)

Page 350: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

338 SOLUCOES DE EXERCICIOS

1 ¬P ! ¬Q Hip

2 P "Q Hip

3 ¬P ! ¬Q Rei, 1

4 ¬P E!, 3

5 P Hip

6 P Rei, 5

7 Q Hip

8 ¬P Hip

9 ¬P ! ¬Q Rei, 3

10 ¬Q E!, 9

11 Q Rei, 7

12 ¬¬P I¬, (8, (10, 11))

13 P E¬, 12

14 P E", (2, (5, 6), (7, 13))

15 ¬(P "Q) I¬, (2, (14, 4))16 (¬P ! ¬Q) # ¬(P "Q) I#, (1, 15)

?? Exemplo C.2.1 Como segundo exemplo, apresentamos a prova de (P "

Page 351: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOLUCOES DE EXERCICIOS 339

Q) # ¬(¬P ! ¬Q):

1 P "Q Hip

2 P Hip

3 ¬P ! ¬Q Hip

4 P Rei, 2

5 ¬P E!, 3

6 ¬(¬P ! ¬Q) I¬, (3, (4, 5))

7 Q Hip

8 ¬P ! ¬Q Hip

9 Q Rei, 7

10 ¬Q E!, 8

11 ¬(¬P ! ¬Q) I¬, (8, (9, 10))

12 ¬(¬P ! ¬Q) E", (1, (2, 6), (7, 11))13 (P "Q) # ¬(¬P ! ¬Q) I#, (1, 12)

`

?? Atencao as PREMISSAS FOI INTROFUZIDA A CONJUNCAO

Page 352: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

340 SOLUCOES DE EXERCICIOS

1 ¬P ! ¬Q Prem

2 P "Q Hip

3 P Hip

4 P Rep, 3

5 Q Hip

6 ¬P Hip

7 ¬Q Rei, 2

8 Q Rep, 5

9 ¬¬P I¬, (6, (7, 8))

10 P E¬, 9

11 P E", (2, (3, 4), (5, 10))

12 ¬P Rei, 113 ¬(P "Q) I¬, (2, (11, 12))

15.

(a) Todos os modelos de ! sao modelos de !.

(b) Os modelos podem ser extraıdos dos caminhos que comecam naraiz e terminam em folhas V . Se ao passar por uma letra depredicado P o caminho seguir pelo ramo a cheio, isso significaque nesse modelo o valor dessa letra de predicado e V ; em casocontrario o valor e F . Se o caminho nao passar por alguma letrade predicado, isso significa que o seu valor nao e relevante, isto e,que existira um modelo em que e V e outro em que e F .

(c) Os tres modelos possıveis sao caracterizados pelas seguintes inter-pretacoes:

R QV VV FF V

(d) Tendo em atencao o seguinte resultado:

Page 353: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOLUCOES DE EXERCICIOS 341

P

Q

FV

P

F V

P

Q

VF

Todos os caminhos do OBDD da fbf P ! (P # Q) que terminemem V , depois de passar por qualquer no de rotulo Q, terao deseguir pelo ramo a cheio.

C.3 Exercıcios do Capıtulo 3

3. (a)

1 x0 ¬(P (x0) " ¬P (x0)) Hip

2 P (x0) Hip

3 P (x0) " ¬P (x0) I", 2

4 ¬(P (x0) " ¬P (x0)) Rei, 1

5 ¬P (x0) I¬, (2, (3, 4))

6 P (x0) " ¬P (x0) I", 5

7 ¬(P (x0) " ¬P (x0)) Rep, 1

8 ¬¬(P (x0) " ¬P (x0)) I¬, (1, (6, 7))

9 P (x0) " ¬P (x0) E¬, 810 /x[P (x) " ¬P (x)] I/, (1, 9)

Page 354: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

342 SOLUCOES DE EXERCICIOS

??

(a) /x, y [(P (x) ! P (y)) # 0z [R(z) ! L(z, x, y)]]

(b) /x [R(x) # 0y [P (y) ! ¬Em(y, x)]]

(c) /x, y, z [(P (x) ! P (y) ! P (z))#¬0r[R(r) ! Em(x, r) ! Em(y, r) ! Em(z, r)]]

(d) /x, y [(P (x) ! P (y))#0r [R(r) ! L(r, y, y) ! /s [(R(s) ! L(s, x, y)) # I(r, s)]]]

7. /x, y, z, s [(Limpo(x, s) ! Sobre(x, y, s) ! Limpo(z, s) !Move(x, y, z, s))#¬Sobre(x, y, resultado(move, x, y, z, s)]

/x, y, z, s [(Limpo(x, s) ! Sobre(x, y, s) ! Limpo(z, s) !Move(x, y, z, s))#Sobre(x, z, resultado(move, x, y, z, s)]

/x, y, z, s [(Limpo(x, s) ! Sobre(x, y, s) ! Limpo(z, s) !Move(x, y, z, s))#Limpo(x, resultado(move, x, y, z, s)]

/x, y, z, s [(Limpo(x, s) ! Sobre(x, y, s) ! Limpo(z, s) !Move(x, y, z, s))#Limpo(y, resultado(move, x, y, z, s)]

/x, y, z, s [(Limpo(x, s) ! Sobre(x, y, s) ! Limpo(z, s) !Move(x, y, z, s))#¬Limpo(z, resultado(move, x, y, z, s)]

C.4 Exercıcios do Capıtulo 4

??

Page 355: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOLUCOES DE EXERCICIOS 343

2 P (x, y), Q(b)

2 P (x, y) 2 P (x, y), S(b)

X"(x = b,y = a)

2 Q(x), R(y)

2 Q(x), T (y)

2 Q(x)

"(x = a,y = b)

"

(x = b,y = b)

2 S(x)

X

Solucoes encontradas: x = b, y = a;x = b, y = b;x = a, y = b.

??

Page 356: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

344 SOLUCOES DE EXERCICIOS

2 P (x)

2 Q(x, y), R(y) 2 Q(x, x)

2 S(x)

"(x = a)

"(x = b)

2 Q(x, x), R(x)

2 S(x), R(x)

2 R(a)

X

2 R(b)

"(x = b)

Solucoes encontradas: x = b;x = a;x = b.

C.5 Exercıcios do Capıtulo 5

?? a

fib(0, 0).fib(1, 1).

fib(X, Fib_X) :-X_menos_1 is X - 1,fib(X_menos_1, Fib_X_menos_1),X_menos_2 is X - 2,fib(X_menos_2, Fib_X_menos_2),

Page 357: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOLUCOES DE EXERCICIOS 345

Fib_X is Fib_X_menos_1 + Fib_X_menos_2.

b

?- fib(X, 21).ERROR: is/2: Arguments are not sufficiently instantiated^ Exception: (8) _L134 is _G180-1

O operador “is” necessita que todas as variaveis da expressao aavaliar estejam instanciadas.

xxx

a(0, N, V) :- V is N + 1.a(M, 0, V) :-

M > 0,M_menos_1 is M -1,a(M_menos_1, 1, V).

a(M, N, V) :-M > 0,N > 0,M_menos_1 is M -1,N_menos_1 is N -1,a(M, N_menos_1, V1),a(M_menos_1, V1, V).

9

resolve :-universo(Mulheres),pistas(Mulheres),pergunta(Mulheres).

universo(Mulheres) :-restr_idades(Mulheres),restr_profs(Mulheres),restr_nomes(Mulheres).

restr_idades(Mulheres) :-mulher(M1, Mulheres),mulher(M2, Mulheres),

Page 358: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

346 SOLUCOES DE EXERCICIOS

mulher(M3, Mulheres),mulher(M4, Mulheres),mulher(M5, Mulheres),idade_de(M1, u30),idade_de(M2, u30),idade_de(M3, o30),idade_de(M4, o30),idade_de(M5, o30).

restr_profs(Mulheres) :-mulher(M1, Mulheres),mulher(M2, Mulheres),mulher(M3, Mulheres),mulher(M4, Mulheres),mulher(M5, Mulheres),profissao_de(M1, prof),profissao_de(M2, prof),profissao_de(M3, sec),profissao_de(M4, sec),profissao_de(M5, sec).

restr_nomes(Mulheres) :-mulher(M1, Mulheres),mulher(M2, Mulheres),mulher(M3, Mulheres),mulher(M4, Mulheres),mulher(M5, Mulheres),nome_de(M1, ada),nome_de(M2, bea),nome_de(M3, cid),nome_de(M4, eva),nome_de(M5, deb).

pistas(Mulheres) :-mulher(M1, Mulheres),mulher(M2, Mulheres),nome_de(M1, ada),nome_de(M2, cid),idade_de(M1, I),idade_de(M2, I),

Page 359: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

SOLUCOES DE EXERCICIOS 347

mulher(M3, Mulheres),mulher(M4, Mulheres),nome_de(M3, deb),nome_de(M4, eva),idade_de(M3, I1),idade_de(M4, I2),I1 \== I2,mulher(M5, Mulheres),mulher(M6, Mulheres),nome_de(M5, bea),nome_de(M6, eva),profissao_de(M5, P),profissao_de(M6, P),mulher(M7, Mulheres),mulher(M8, Mulheres),nome_de(M7, cid),nome_de(M8, deb),profissao_de(M7, P1),profissao_de(M8, P2),P1 \== P2.

pergunta(Mulheres) :-write(‘O Homem livre vai casar com a ‘),mulher(X, Mulheres),profissao_de(X, prof),idade_de(X, o30),nome_de(X, Y),write(Y),write(’, a professora com mais de 30 anos.’),nl.

nome_de(defmulher(N, _, _), N).profissao_de(defmulher(_, P, _), P).idade_de(defmulher(_, _, I), I).

mulher(X, mulheres(X, _, _, _, _)).mulher(X, mulheres(_, X, _, _, _)).mulher(X, mulheres(_, _, X, _, _)).mulher(X, mulheres(_, _, _, X, _)).mulher(X, mulheres(_, _, _, _, X)).

Page 360: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

348 SOLUCOES DE EXERCICIOS

??

duplica_elementos([], []).

duplica_elementos([P | R], [Pd | Res2]) :-Pd is P * 2,duplica_elementos(R, Res2).

??

substitui([], _, _, []).

substitui([Elem | R1], Elem, Por, [Por | R2]) :-substitui(R1, Elem, Por, R2),!.

substitui([P | R1], Elem, Por, [P | R2]) :-substitui(R1, Elem, Por, R2).

Page 361: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Bibliografia

[Allen e Kautz 87] Allen J.F. e Kautz H.A., “Logicism is alive and well”, Com-putational Intelligence 3, pp. 161–162, 1987.

[Ben-Ari 03] Ben-Ari M., Mathematical Logic for Computer Science, 2a Edicao,Londres, UK: Springer-Verlag, 2003.

[Birnbaum 91] Birnbaum L., “Rigor Mortis: A Response to Nilsson’s Logic andArtificial Intelligence”, Artificial Intelligence 47, No. 1–3, pp. 57–77, 1991.

[Blasius e Burckert 89] Blasius K. e Burckert H.-J., Deduction Systems in Ar-tificial Intelligence, Chicester , UK: Ellis Horwood, 1989.

[Boole 54] Boole G., An Investigation of the Laws of Thought, New York, N.Y.:Dover, 1854.

[Boyer e Moore 72] Boyer R.S. e Moore J.S., “The Sharing of Structures inTheorem-Proving Programs”, in Machine Intelligence 7, Meltzer and Michie(eds.), Edinburgh, UK: Edinburgh University Press, pp. 101–116, 1972.

[Branquinho 01] Branquinho J., “Implicacao”, em Enciclopedia de Termos Lo-gico-Filosoficos, Branquinho e Murcho (eds), pp. 377–379, Lisboa: Gradiva,2001.

[Bryant 86] Bryant R., “Graph-based Algorithms for Boolean Function Manipu-lation”, IEEE Transactions on Computers, C-35, pp. 677–691, 1986.

[Chang e Lee 73] Chang C-L., e Lee R.C-T., Symbolic Logic and MechanicalTheorem Proving, New York, N.Y.: Academic Press, 1973.

[Church 36] Church A., “An unsolvable problem of number theory”, AmericanJournal of Mathematics 58, pp. 345–363, 1936.

[Church 56] Church A., Introduction to Mathematical Logic, Vol. 1, Princeton,N.J.: Princeton University Press, 1956.

[Colmerauer e Roussel 1993] Colmerauer A. e Roussel P., “The birth of Pro-log”, History of Programming Languages, The second ACM SIGPLAN con-ference on History of programming languages, pp. 37–52, ACM, 1993.

Page 362: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

350 BIBLIOGRAFIA

[Corcoran 72] Corcoran J., “Conceptual Structure of Classical Logic”, Philo-sophy and Phenomenological Research 33, pp. 25–47, 1972.

[Corcoran 83] Corcoran J. (ed.), Logic, Semantics, Metamatemathics, Indiana-polis, IN: Hackett Publishing Co., 2nd Edition, 1983.

[Cormen, Leiserson e Rivest 90] Cormen T.H., Leiserson C.E. e Rivest R.L.,Introduction to Algorithms, Cambridge, MA: The MIT Press, 1990.

[Deransart, Ed-Dbali e Cervoni 96] Deransart P., Ed-Dbali A. e Cervoni L.,Prolog: The Standard, Reference Manual, Berlin, Alemanha: Springer-Verlag,1996.

[Fitch 52] Fitch F., Symbolic Logic: An Introduction, New York: The RonaldPress Company, 1952.

[Gabbay, Hogger e Robinson 93] Gabbay D.M., Hogger C.J. e Robinson J.A.(eds.), Handbook of Logic in Artificial Intelligence and Logic Programming,Vol. 1, Logical Foundations, Oxford, UK: Claredon Press, 1993.

[Gabbay, Hogger e Robinson 94] Gabbay D.M., Hogger C.J. e Robinson J.A.(eds.), Handbook of Logic in Artificial Intelligence and Logic Programming,Vol. 2, Deduction Methodologies, Oxford, UK: Claredon Press, 1994.

[Genesereth e Nilsson 87] Genesereth M.R. e Nilsson N.J., Logical Foundationsof Artificial Intelligence, Los Altos, CA: Morgan Kaufmann Publishers Inc.,1987.

[Gentzen 69] Gentzen G., Collected Papers of Gerhard Gentzen, Amsterdam, TheNetherlands: North-Holland, 1969.

[Gilmore 59] Gilmore, P.C., “A program for the production from axioms, of pro-ofs for theorems derivable within the first order predicate calculus”, IFIPCongress, pp. 265–272, 1959.

[Godel 30] G’odel K., ’Uber die Vollsst’andigkeit des Logikkalk’uls, Ph.D. Thesis,Vienna, Austria: University of Vienna, 1930.

[Godel 31] Godel, K. “Uber Formal Unentscheidbare Satze der Principia Mathe-matica und Verwandter Systeme, I”, Monatshefte fur Math. u. Physik 38,pp. 173–198, 1931.

[Haack 78] Haack S., Philosophy of Logics, Cambridge, UK: Cambridge Univer-sity Press, 1978.

[van Heijenhoort 67] van Heijenhoort J. (ed.), From Frege to G’odel, Harvard,MA: Harvard University Press, 1967.

[Henschen 87] Henschen L., “Reasoning”, em Encyclopedia of Artificial Intelli-gence, Vol.2, Shapiro (ed.), pags 822–827, New York, N.Y.: John Wiley andSons, Inc., 1987.

Page 363: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

BIBLIOGRAFIA 351

[Herbrand 71] Herbrand J., “Recherches sur la theorie de la demonstration”, inLogical Writings, Goldfarb (ed.), Cambridge, MA: Harvard University Press,1971.

[Hofstadter 79] Hofstadter D.R., Godel, Escher, Bach: an Eternal Golden Braid,New York: Vintage Books, 1979.

[Horn 51] Horn A., “On sentences which are true of direct unions of algebras”,Journal of Symbolic Logic 16, pags 14–21, 1951.

[Hursel 70] Hursel E., Logical Investigations, London, UK: Routledge, 1970.

[Huth and Ryan 04] Huth M. and Ryan M., Logic in Computer Science: Mo-delling and Reasoning about Systems, Cambridge, UK: Cambridge UniversityPress, 2004.

[Israel 93] Israel D., “The role(s) of logic in artificial intelligence”, in Gabbay,Hogger, and Robinson (eds.), Handbook of Logic in Artificial Intelligenceand Logic Programming, Vol. 1, Oxford, UK: Claredon Press, pp. 1–29, 1993.

[Jalote 97] Jalote P., An Integrated Approach to Software Engineering, Heidel-berg, Germany: Springer-Verlag, 1997.

[Jaskowski 34] Jaskowski S., “On the Rules of Supposition in Formal Logic”,Studia Logica 1, 1934.

[Je!reys 42] Je*reys H., “Does a Contradiction Entail Every Proposition?”, Mind51, 1942.

[Kleene 52] Kleene S.C., Introduction to Metamathematics, New York: AmericanElsevier Publishing Co, Inc., 1952.

[Kline 72] Kline M., Mathematical Thought: From Ancient to Modern Times,Oxford, UK: Oxford University Press, 1972.

[Kneale and Kneale 88] Kneale W. and Kneale M., The Development of Logic,Oxford, UK: Clarendon Press, 1988.

[Kowalski 74] Kowalski, R., “Predicate Logic as Programming Language”, Pro-ceedings IFIP Congress, pp. 569–574, North Holland Publishing Co., 1974.Tambem em Computers for Artificial Intelligence Applications, Wah, B. eLi, G.-J. (comps.), pp. 68–73, Los Angeles, CA: IEEE Computer SocietyPress,1986.

[Kowalski 75] Kowalski R., “A Proof Procedure Using Connection Graphs”, Jour-nal of the ACM 22, pp. 573–595, 1975.

[Kowalski 79] Kowalski R., Logic for problem Solving, New York: North-Holland,1979.

[Kowalski e Kuehner 71] Kowalski R. e Kuehner D., “Linear Resolution withSelection Function”, Artificial Intelligence 2, No. 3/4, pags. 227-260, 1971.Tambem em Anthology of Automated Theorem-Proving Papers, Vol. 2, pp.542–577, Heidelberg, Alemanha: Springer-Verlag, 1983.

Page 364: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

352 BIBLIOGRAFIA

[Lemmon 78] Lemmon E.J., Beginning Logic, Indianapolis, IN: Hackett PublishingCo., 1978.

[Lewis 18] Lewis C.I., A Survey of Symbolic Logic, Berkeley, CA: University ofCalifornia Press, 1918.

[Lloyd 87] Lloyd J.W., Foundations of Logic Programming, Heidelberg, Alema-nha: Springer-Verlag, 2a Edicao, 1987.

[Loveland 72] Loveland D.W., “A Unifying View of Some Linear Herbrand Pro-cedures”, Journal of the ACM 19, No. 2, pp. 366–384, 1972.

[Loveland 83] Loveland D.W., “A Linear Format for Resolution”, Proc. IRIASymposium on Automatic Deduction, pags. 147-162, New York, N.Y.: Sprin-ger-Verlag, 1970. Tambem em Automation of Reasoning 2: Classical Paperson Computational Logic 1967-1970, Siekmann e Wrightson (eds.), pags. 399-415, Heidelberg, Alemanha: Springer-Verlag, 1983.

[Luckham 83] Luckham D., “Refinements in Resolution Theory”, Proc. IRIASymposium on Automatic Deduction, pags. 163-190, New York, N.Y.: Sprin-ger-Verlag, 1970. Tambem em Automation of Reasoning 2: Classical Paperson Computational Logic 1967-1970, Siekmann e Wrightson (eds.), pags. 435-463, Heidelberg, Alemanha: Springer-Verlag, 1983.

[Martins e Cravo 07] Martins J.P. e Cravo M.R., Programacao em Scheme: In-troducao a Programacao com Multiplos Paradigmas, Lisboa: IST Press, 2a

Edicao, 2007.

[Mendelson 87] Mendelson E., Introduction to Mathematical Logic, Belmont, CA:Wadsworth Publishing Co., 1987.

[Metakides e Nerode 96] Metakides G. e Nerode A., Principles of Logic andLogic Programming, Amsterdao, Holanda: Elsevier Science, 1996.

[Nilsson 71] Nilsson N., Problem Solving Methods in Artificial Intelligence, NewYork: McGraw-Hill Book Co., 1971.

[Nilsson 91] Nilsson N., “Logic and Artificial Intelligence”, Artificial Intelligence47, No. 1–3, pp. 31–56, 1991.

[Oliveira 91] Oliveira A.F., Logica e Aritmetica: Uma Introducao Informal aosMetodos Formais, Lisboa: Gradiva, 1991.

[Paterson and Wegman 78] Paterson M.S. and Wegman M.N., “Linear Unifi-cation”, Journal of Computer and System Sciences 16, No. 2, pp. 158–167,1978.

[Post 43] Post E., “Formal Reductions of the General Combinatorial Problem”,American Journal of Mathematics 65, pp. 197–268, 1943.

[Priest, Routley, and Norman 89] Priest G., Routley R., and Norman, J. (eds.)Paraconsistent Logic: Essays on the Inconsistent, Munich, Germany: Phi-losophia Verlag, 1989.

Page 365: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

BIBLIOGRAFIA 353

[Priest 02] Priest G. “Paraconsistent Logic”, Handbook of Philosophical Logic,2nd Edition, Vol. 6, Gabbay and Guenthner (eds.), pp. 287–393, Dordrecht,Netherlands: Kluwer Academic Publishers, 2002.

[Quine 86] Quine W.V., Philosophy of Logic, Cambridge, MA: Harvard UniversityPress, 2nd Edition, 1986.

[Ramsay 88] Ramsay A., Formal Methods in Artificial Intelligence, Cambridge,UK: Cambridge University Press, 1988.

[Rapaport 92a] Rapaport W.J., “Logic”, in Encyclopedia of Artificial Intelli-gence, Shapiro (ed.), 2nd Edition, New York: John Wiley and Sons, pp.851–853, 1992.

[Rapaport 92b] Rapaport W.J., “Predicate Logic”, in Encyclopedia of ArtificialIntelligence, Shapiro (ed.), 2nd Edition, New York: John Wiley and Sons,pp. 866–873, 1992.

[Robinson 65] Robinson J.A., “A Machine-Oriented Logic Based on the Resolu-tion Principle”, Journal of the ACM 12, No. 1, pp. 23–41, 1965. Tambem emAutomation of Reasoning 1: Classical Papers on Computational Logic 1957-1966, Siekmann e Wrightson (eds.), pags. 397-415, Heidelberg, Alemanha:Springer-Verlag, 1983.

[Robinson e Wos 69] Robinson G.A. e Wos L., “Paramodulation and Theorem-Proving in First-Order Theories with Equality”, Machine Intelligence 4,Meltzer e Michie (eds.), pags. 135-150, Edinburgh, Escocia: Edinburgh Uni-versity Press, 1969. Tambem em Automation of Reasoning 1: Classical Pa-pers on Computational Logic 1967-1970, Siekmann e Wrightson (eds.), pags.298- 313, Heidelberg, Alemanha: Springer-Verlag, 1983.

[Rosen 07] Rosen K. H., Discrete Mathematics and its Applications, New York,NY: McGraw-Hill, 2007.

[Salus 98] Salus P.H. (ed.), Handbook of Programming Languages: Functional andLogic Programming Languages, Vol. 4, Indianapolis, IN: Macmillan TechnicalPublishing, 1998.

[Sanford 80] Sanford D.M., Using Sophisticated Models in Resolution TheoremProving, Heidelberg, Alemanha: Springer-Verlag, 1980.

[Shapiro McKay, Martins, and Morgado 81] Shapiro S.C., McKay D.P.,Martins J.P., and Morgado E.J., “SNePSLOG, a Higher Order Logic Pro-gramming Language”, presented at Workshop on Logic Programming for In-telligent Systems, R.M.S. Queen Mary, Long Beach, CA, 1981.

[Sickel 76] Sickel S., “A Search Technique for Clause Interconnectivity Graphs”,IEEE Transactions on Computers, Vol. C-25, No. 8, pp. 823–835, 1976.

[Siekmann e Wrightson 83a] Siekmann J. e Wrightson G., Automation of Re-asoning 1: Classical Papers on Computational Logic 1957-1966, Heidelberg,Alemanha: Springer-Verlag, 1983.

Page 366: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

354 BIBLIOGRAFIA

[Siekmann e Wrightson 83b] Siekmann J. e Wrightson G., Automation of Re-asoning 2: Classical Papers on Computational Logic 1967-1970, Heidelberg,Alemanha: Springer-Verlag, 1983.

[Slagle e Gini 87] Slagle J. e Gini M., “Pattern Matching”, em Encyclopedia ofArtificial Intelligence, Vol.1, Shapiro (ed.), pags 716-720, New York, N.Y.:John Wiley and Sons, Inc., 1987.

[Sterling e Shapiro 94] Sterling L. e Shapiro E., The Art of Prolog: AdvancedProgramming Techniques, 2a Edicao, Cambridge, MA: The MIT Press, 1994.

[Summers 72] Summers G.J., Test Your Logic: 50 Puzzles in Deductive Reaso-ning, New York, N.Y.: Dover Publications Inc., 1972.

[Tarski 65] Tarski A., Introduction to Logic and to the Methodology of DeductiveSciences, New York: Oxford University Press, 1965.

[Thayse 88] Thayse A., From Standard Logic to Logic Programming, Chichester,UK: John Wiley and Sons, 1988.

[Turing 34] Turing A., “On computational numbers with an application to theentscheindungs-problem”, Proc. London Mathematical Society 42, pp. 230–265, 1936.

[Whitehead and Russell 10] Whitehead A.N. and Russell B., Principia Mathe-matica, Cambridge, UK: Cambridge University Press, 1910 (2nd Edition,1987).

[Wolfram 89] Wolfram S., Philosophical Logic, An Introduction, London, UK:Routledge, 1989.

[Wos, Overbeek, Lusk e Boyle 84] Wos L., Overbeek R., Lusk E. e Boyle J.,Automated Reasoning: Introduction and Applications, Englewood Cli*s, N.J.:Prentice-Hall, 1984.

[Wos, Robinson, e Carson 65] Wos L., Robinson G., e Carson D., “E)ciencyand Completeness of the Set of Support Strategy in Theorem Proving”, Jour-nal of the ACM 12, pags. 536- 541, 1965.

[Wos, Robinson, Carson e Shalla 67] Wos L., Robinson G., Carson D. e ShallaL., “The Concept of Demodulation in Theorem Proving”, Journal of theACM 14, pags. 698-709, 1967.

Page 367: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

Glossario

-, 250->, 302!, 290*, 250**, 250., 271/, 250//, 250;, 226[], 271\+, 304\=, 246\==, 248|, 272+, 250<, 252=, 246=:=, 252=\=, 252=<, 252==, 248>, 252>=, 252

", 2010, 136/, 135(, 48|=, 21, 80¬, 15, 29#, 16, 29", 141&, 20, 38", 14, 29!, 12, 29

abs, 250afirmacao, 201, 225aplicacao da resolucao, 67aplicacao de substituicao, 142argumento, 4, 18arvore de decisao, 81associatividade (de operador), 258atomic, 307atomo, 220axioma, 20

base de Herbrand, 181BDD, 86

Call, 329clausula, 62

cabeca de, 200corpo de, 201em prolog, 224de Horn, 200determinada, 202iterativa, 226, 281nao unitaria, 62, 225unitaria, 225vazia, 67vazia (notacao de Horn), 201

composicao de substituicoes, 159conceptualizacao, 171conclusao, 4conjuncao, 12, 29conjunto das funcoes, 171conjunto das relacoes, 172conjunto de sucessos, 215conjunto unificavel, 160consequencia logica, 21, 80

Page 368: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

356 GLOSSARIO

constante, 136contra-argumento, 10

definicao de operadores, 306definicao de predicado, 203demonstracao por refutacao, 68derivabilidade, 20diagrama de decisao binario, 86disjuncao, 14, 29domınio de um quantificador, 140

eliminacao daconjuncao, 34disjuncao, 42equivalencia, 48implicacao (derivada), 46implicacao, 38negacao, 41quantificacao existencial, 152quantificacao universal, 150

equivalencia, 48estrategia de procura, 210estrutura, 267execucao forcada, 306Exit, 329expressao proposicional, 134expresssao designatoria, 133

facto, 201, 225Fail, 329fbf, 18, 138

atomica, 29, 138contraditoria, 79, 176falsa, 78, 176falsificavel, 78, 176satisfazıvel, 78, 176tautologica, 78, 176verdadeira, 78, 176

fbfs satisfazıveis, 176forma

“Prenex” normal, 157clausal, 62, 154conjuntiva normal, 64, 158

de um argumento, 8formula

bem formada, 18, 138de insercao, 45derivavel, 20fechada, 141

funcao, 132booleana, 76de seleccao, 205de sistema, 223de valoracao, 76pre-definida, 223

functor, 222

Hip, 35hipotese, 35hipotese do mundo fechado, 239

implicacao, 16, 29implica logicamente, 21interpretacao, 21, 76, 173introducao da

conjuncao, 34disjuncao, 42dupla negacao (derivada), 46equivalencia, 48implicacao, 37negacao, 40quantificacao existencial, 152quantificacao universal, 150

invalidade, 4is, 253

letra de funcao, 136letra de predicado, 136lista, 271literal, 62, 223

mencao, 2meta-linguagem, 31metapredicado, 305mgu, 160

Page 369: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

GLOSSARIO 357

mod, 250modelo de Herbrand mınimo, 214modelo de um conjunto de fbfs, 176Modus tollens, 47MT, 47

nl, 263negacao, 15, 29negacao por falhanco, 304no

bem sucedido, 211falhado, 211

numero da invocacao, 330

OBDD, 95objectivo, 202, 227

execucao de, 228operacao condicional, 302operador de corte, 289operador, 256

associatividade, 258posicao, 257prioridade, 261

poder expressivo, 27polimodalidade, 236posicao (de operador), 257predicado de sistema, 246, 249predicado pre-definido, 246, 249Prem, 32premissa, 32premissas, 4princıpio da forma, 8princıpio da resolucao, 66, 164prioridade (de operador), 261processo

iterativo, 281recursivo, 279

programa, 203programacao em logica, 200proposicao, 3prova, 20

categorica, 37

contingente, 37hipotetica, 35por absurdo, 40prova SLD, 206

quantificacaoexistencial, 136universal, 135

Redo, 329ramo infinito, 211read, 262re-iteracao, 36refutacao SLD, 208regra de inferencia, 19regra de inferencia derivada, 46regra de procura, 210regra

clausula de Horn, 201em prolog, 225

Reit, 36relacao de ordem total, 95relacao, 134Rep, 33repeticao, 33Res, 67resolucao SLD, 205resolvente, 66, 164resposta

calculada, 208correcta, 204de um programa, 204

retrocesso, 230round, 250

semantica,declarativa, 214, 228procedimental, 215 228

sımbolo logico, 11sistema de deducao natural, 32sistema dedutivo, 19sistema semantico, 21sqrt, 250

Page 370: LOGICA« PARA PROGRAMAC üAO÷ - Técnico Lisboa · Este livro n÷ao p o de ser repro duzido, no to do ou em parte, sob qualquer forma ou meio, electr« onico ou mecö anico, incluindo

358 GLOSSARIO

sub-objectivo, 202substituicao, 141

cha, 142vazia, 141

tabela de verdade, 77tautologia, 78Teo, 45teorema, 38teorema (regra de inferencia), 45termo, 136, 220

composto, 222fechado, 137livre para variavel, 143

unificacao, 159unificador mais geral, 160universo de discurso, 171universo de Herbrand, 180uso, 2

validade, 4valor logico, 3var, 307variante de uma clausula, 206, 228variavel, 133

anonima, 222ligada, 140livre, 140

write, 263