Você está na página 1de 172

Exerccios de Lgica para Programao

Ana Cardoso-Cachopo
Maio de 2014

CONTEDO

Contedo
1

Argumentos e Validade

Lgica Proposicional Sistema de Deduo Natural

17

Lgica Proposicional Tabelas de Verdade

31

Lgica Proposicional Resoluo

37

Lgica Proposicional BDDs

51

Lgica Proposicional OBDDs

59

Lgica Proposicional SAT

69

Lgica de Primeira Ordem Sistema de Deduo Natural

77

Lgica de Primeira Ordem Sistema Semntico

85

10 Lgica de Primeira Ordem Representao

93

11 Lgica de Primeira Ordem Resoluo

97

12 Programao em Lgica Resoluo SLD; rvores SLD

111

13 Prolog rvores de Refutao; Listas

119

14 Prolog Operadores Pr-definidos

135

15 Prolog Corte; Negao

149

CONTEDO

CONTEDO

Prefcio
Este documento contm uma compilao de exerccios para a disciplina de
Lgica para Programao da LEIC e baseado no livro Lgica e Raciocnio
do Professor Joo Pavo Martins.
A maior parte dos exerccios foi criada por mim especificamente para as aulas
prticas ou para as provas de avaliao da disciplina e outros foram tirados
de livros ou artigos acerca da matria em questo.
Existem dois exerccios cujo enunciado foi feito pelo Professor Joo Pavo
Martins nas aulas sobre os sistemas de deduo natural da lgica proposicional e da lgica de primeira ordem. Esses exerccios esto assinalados com a
etiqueta (JPM).
O Professor Joo Cachopo, para alm de discutir comigo algumas das respostas dos exerccios, ajudou-me a fazer em LaTeX as figuras dos vrios captulos,
tornando esta compilao muito mais apresentvel.
Obviamente, a responsabilidade por quaisquer erros ou gralhas que esta compilao de exerccios possa ter inteiramente minha.
Correces de gralhas ou sugestes de melhorias podem ser enviadas para o
meu endereo de email: acardoso@tecnico.ulisboa.pt.

Proposta de exerccios para cada aula de problemas


Seco
Argumentos e Validade
LP Sistema de Deduo Natural
LP Tabelas de Verdade
LP Resoluo
LP BDDs
LP OBDDs
LP SAT
LPO Sistema de Deduo Natural
LPO Sistema Semntico
LPO Representao
LPO Resoluo
Prog. em Lgica Resoluo SLD; rvores SLD
Prolog rvores de Refutao; Listas
Prolog Operadores Pr-definidos
Prolog Corte; Negao

Exerccios mais relevantes


1.1 e 1.2
2.1, 2.2.9, 2.2.11, 2.3.1, 2.3.4
3.1 a 3.6
4.1, 4.2.1, 4.2.3, 4.5, 4.4.1, 4.3.1, 4.3.11
5.1 a 5.4
6.1 e 6.2
7.1 a 7.6
8.1 a 8.3
9.2 a 9.4
10.1 e 10.2
11.1 a 11.4, 11.8
12.1 a 12.4
13.1 a 13.3
14.1 a 14.6
15.1 a 15.16

CONTEDO

Argumentos e Validade

Sumrio:
Apresentao
Trazer para as aulas os enunciados e as resolues dos exerccios
Argumentos e validade
Resumo:
Um argumento representado por um par (, ), em que um conjunto de proposies
(premissas) e uma proposio (concluso).
Uma proposio uma frase declarativa que pode ser verdadeira ou falsa.
Um argumento vlido (podendo tambm dizer-se que as premissas implicam semanticamente a concluso, ou que a concluso uma consequncia semntica das premissas)
quando logicamente impossvel ter todas as premissas verdadeiras e a concluso falsa,
ou seja, quando todos os modelos das premissas tambm so modelos da concluso.
invlido caso contrrio.
Princpio da irrelevncia do valor lgico: excepto no caso em que as premissas so todas
verdadeiras e a concluso falsa, a verdade ou falsidade das proposies que constituem
um argumento no relevante para determinar a validade ou invalidade do argumento.
Princpio da forma: se dois argumentos tm a mesma forma, ento estes so ambos vlidos
ou ambos invlidos.
Um contra-argumento um argumento com a mesma forma do argumento inicial, cujas
premissas sejam todas verdadeiras e a concluso seja falsa.

1.1. PROPOSIC
OES
E ARGUMENTOS
7
A figura
seguinte
ilustra uma metodologia para provar a validade/invalidade
de um
argumento e foi retirada do livro do Professor Pavo Martins.
(, )
Palpite
V
alido

"!
!

!
!

Inv
alido

& #

#
#

Tente
encontrar
uma
prova
Sim

%
Sabido
v
alido

#
$

Tente
encontrar
um contra
argumento

'(

N
ao

Mude de
palpite

N
ao

Sim

%
Sabido
inv
alido

(Validade /
Invalidade
Desconhecida)

Figura 1.1: Metodologia da l


ogica.
B
A

ARGUMENTOS E VALIDADE

Os componentes de uma lgica so:


A linguagem, que definida atravs de um conjunto de regras que especificam as
fbfs.
O sistema dedutivo, que contm um conjunto de regras para a manipulao dos smbolos existentes na linguagem, as regras de inferncia. Estas regras no fazem parte
da linguagem da lgica mas falam sobre as entidades existentes na linguagem, ou
seja, pertencem meta-linguagem da lgica.
O sistema semntico, que especifica as condies sob as quais as proposies (ou fbfs),
so verdadeiras ou so falsas. A semntica baseada no conceito de interpretao,
que permite determinar os valores lgicos das proposies.
Quando ( ` ), o argumento (, ) demonstrvel usando o sistema sintctico (em
ingls provable).
Quando ( |= ), o argumento (, ) vlido usando o sistema semntico.
Uma lgica correcta se qualquer argumento demonstrvel usando o seu sistema dedutivo vlido de acordo com a sua semntica.
Uma lgica completa se qualquer argumento vlido de acordo com a sua semntica
demonstrvel usando o seu sistema dedutivo.

7
Exerccio 1.1
Usando apenas a informao que est explcita, diga, justificando, se os seguintes argumentos so vlidos ou so invlidos:
1. Peregrino Cinzento Gandalf
Mithrandir Gandalf
Peregrino Cinzento Mithrandir
2. Mithrandir um feiticeiro
Mithrandir Gandalf
Gandalf um feiticeiro
3. Os orcs so feios
Os orcs so feios
4. Nemo um peixe
Dori um peixe
Nemo Dori
5. Os tubares so carnvoros
Os tubares no so vegetarianos
O Bruce vegetariano
O Bruce no tubaro
6. Os peixes so animais
Os tubares so animais
Resposta:
Pretendemos saber se cada argumento satisfaz a definio de argumento vlido: vamos ver se
possvel ter a concluso falsa e as premissas verdadeiras. Se for possvel, o argumento no satisfaz
a definio e por isso invlido; so no for possvel, o argumento satisfaz a definio e por isso
vlido.
Podemos resolver este exerccio usando diagramas de Venn ou usando a forma dos argumentos
e partindo do princpio que a noo de igualdade (com as suas propriedades) est definida na
lgica que estivermos a usar.
Tambm podemos fazer as provas directamente, partindo do princpio que todas as premissas
so verdadeiras e testando se a concluso pode ser falsa; ou por reduo ao absurdo, partindo do
princpio que a concluso falsa e vendo se possvel todas as premissas serem verdadeiras sem
dar origem a uma contradio.
Para alm destas maneiras de provar se um argumento vlido ou no, tambm o podemos fazer
partindo de um palpite, como est no livro. Se o palpite for que o argumento vlido, tentamos
provar que impossvel ter todas as premissas verdadeiras e a concluso falsa. Se conseguirmos,
o argumento sabido vlido. Se no conseguirmos, mudamos o palpite para invlido e tentamos
encontrar um contra-argumento, isto , argumento com a mesma forma mas que ns saibamos
que no vlido. Se conseguirmos, o argumento sabido invlido. Se no conseguirmos provar
que o argumento vlido nem invlido, o argumento tem validade desconhecida.
Vamos usar vrias alternativas para resolver cada um dos exerccios. Normalmente, deve ser
usada apenas uma delas.
1. Peregrino Cinzento Gandalf
Mithrandir Gandalf
Peregrino Cinzento Mithrandir

ARGUMENTOS E VALIDADE

(a) Diagrama de Venn, prova directa:


Para Peregrino Cinzento ser Gandalf, ambos tm que ser representados pelo mesmo
ponto. Para Mithrandir ser Gandalf, ambos tm que ser representados pelo mesmo
ponto. Logo, impossvel que Peregrino Cinzento no seja Mithrandir. Assim, o
argumento vlido.
PC
M
G
(b) Diagrama de Venn, prova por reduo ao absurdo:
Para Peregrino Cinzento no ser Mithrandir, tm que ser representados por pontos
diferentes. Para Peregrino Cinzento ser Gandalf, ambos tm que ser representados
pelo mesmo ponto. Para Mithrandir ser Gandalf, ambos tm que ser representados
pelo mesmo ponto. Como Gandalf no pode ser representado simultaneamente por
dois pontos diferentes, impossvel ter simultaneamente a concluso falsa e todas as
premissas verdadeiras, o que significa que o argumento vlido.
PC
M
G

(c) Forma do argumento, prova directa:


Para Peregrino Cinzento ser Gandalf, tm que ser iguais P C = G. Para Mithrandir
ser Gandalf, tm que ser iguais G = M . Logo, P C = G = M e pela transitividade da
igualdade, impossvel que Peregrino Cinzento no seja igual a Mithrandir. Assim, o
argumento vlido.
(d) Forma do argumento, prova por reduo ao absurdo:
Para Peregrino Cinzento no ser Mithrandir, tm que ser diferentes P C 6= M . Para
Peregrino Cinzento ser Gandalf, tm que ser iguais P C = G. Para Mithrandir ser Gandalf, tm que ser iguais M = G. Temos P C 6= M, P C = G, M = G. Como Gandalf
no pode ser diferente de si mesmo, impossvel ter simultaneamente a concluso
falsa e todas as premissas verdadeiras, o que significa que o argumento vlido.
(e) Pelo algoritmo do livro:
Palpite: o argumento vlido.
Resoluo: tentar encontrar uma prova. A prova pode ser qualquer uma das apresentadas anteriormente.
Concluso: como conseguimos encontrar uma prova, o argumento sabido vlido.
Nota: todas as justificaes anteriores para a validade deste argumento poderiam ser usadas da mesma maneira para o argumento seguinte, pois no dependem das entidades mencionadas.
Peregrino Cinzento Pato Donald
Pato Donald Super Homem
Peregrino Cinzento Super Homem
2. Mithrandir um feiticeiro
Mithrandir Gandalf
Gandalf um feiticeiro
(a) Diagrama de Venn, prova directa:
Para Mithrandir ser um feiticeiro, o conjunto dos feiticeiros tem que o conter. Para
Mithrandir ser Gandalf, ambos tm que ser representados pelo mesmo ponto. Logo,
Gandalf tambm est obrigatoriamente contido no conjunto dos feiticeiros. Assim, o
argumento vlido.

9
Feiticeiros

M
G

(b) Diagrama de Venn, prova por reduo ao absurdo:


Para Gandalf no ser feiticeiro, no pode estar contido no conjunto dos feiticeiros.
Para Mithrandir ser um feiticeiro, o conjunto dos feiticeiros tem que o conter. Para
Mithrandir ser Gandalf, ambos tm que ser representados pelo mesmo ponto. Como
Gandalf no pode ser representado simultaneamente por dois pontos diferentes,
impossvel ter simultaneamente a concluso falsa e todas as premissas verdadeiras, o
que significa que o argumento vlido.
Feiticeiros

M
G

(c) Forma do argumento, prova directa:


Para Mithrandir ser um feiticeiro, F eiticeiro(M ). Para Mithrandir ser Gandalf M =
G. Logo, possvel substituir M por G na primeira frmula e temos F eiticeiro(G), o
que faz com que seja impossvel ter a concluso falsa, ou seja, F eiticeiro(G). Assim,
o argumento vlido.
(d) Forma do argumento, prova por reduo ao absurdo:
Para Gandalf no ser feiticeiro, temos F eiticeiro(G). Para Mithrandir ser um feiticeiro, temos F eiticeiro(M ). Para Mithrandir ser Gandalf M = G e por isso, F eiticeiro(G).
Como isto contraditrio com primeira frmula, impossvel ter simultaneamente a
concluso falsa e todas as premissas verdadeiras, o que significa que o argumento
vlido.
(e) Pelo algoritmo do livro:
Palpite: o argumento vlido.
Resoluo: tentar encontrar uma prova. A prova pode ser qualquer uma das apresentadas anteriormente.
Concluso: como conseguimos encontrar uma prova, o argumento sabido vlido.

3. Os orcs so feios
Os orcs so feios

(a) Diagrama de Venn, prova directa:


Para os orcs serem feios, o conjunto que os representa tem que estar contido no conjunto que representa os feios. Para a concluso ser falsa, necessrio que os orcs no
sejam feios, isto , que no estejam contidos no conjunto dos feios. Como isto impossvel dada a primeira frase, o argumento vlido.

10

ARGUMENTOS E VALIDADE

Feios

Orcs

(b) Diagrama de Venn, prova por reduo ao absurdo:


Vamos supr que os orcs no so feios, isto , que o conjunto que os representa no
est contido no conjunto que representa os feios. Posto isto, possvel ter a premissa
verdadeira, isto , que os orcs sejam feios, ou seja, que estejam contidos no conjunto
dos feios? Como impossvel que o conjunto dos orcs esteja contido e no esteja
contido no conjunto dos feios, o argumento vlido.
Feios

Orcs

Orcs

(c) Forma do argumento, prova directa:


Para os orcs serem feios, temos (x)[Orc(x) F eio(x)]. Logo, impossvel termos a
concluso falsa, ou seja (x)[Orc(x) F eio(x)]. Assim, o argumento vlido.
(d) Forma do argumento, prova por reduo ao absurdo:
Vamos supr que a concluso falsa, isto , que (x)[Orc(x) F eio(x)]. Neste caso,
impossvel que a premissa (x)[Orc(x) F eio(x)] seja verdadeira. Logo, como
impossvel ter simultaneamente todas as premissas verdadeiras e a concluso falsa, o
argumento vlido.
(e) Pelo algoritmo do livro:
Palpite: o argumento vlido.
Resoluo: tentar encontrar uma prova. A prova pode ser qualquer uma das apresentadas anteriormente.
Concluso: como conseguimos encontrar uma prova, o argumento sabido vlido.
Nota: todas as justificaes anteriores para a validade deste argumento poderiam ser usadas da mesma maneira para o argumento seguinte, pois no dependem do significado das
palavras usadas nem da opinio do leitor acerca dos orcs.
Os orcs so lindos
Os orcs so lindos
4. Nemo um peixe
Dori um peixe
Nemo Dori
(a) Diagrama de Venn, prova directa:
Para Nemo ser um peixe, tem que estar contido no conjunto dos peixes. Para Dori ser
um peixe, tem que estar contida no conjunto dos peixes. Pode ser igual ou diferente
do Nemo. Logo, possvel ter todas as premissas verdadeiras e a concluso falsa, isto

11
, Nemo no ser Dori. Assim, o argumento no vlido.
Peixes

Nemo
Dori

(b) Diagrama de Venn, prova por reduo ao absurdo:


Vamos supr que a concluso falsa, isto , que Nemo no Dori. possvel que
ambos sejam peixes? Sim, no h nada que impea o conjunto dos peixes de conter os
dois. Logo, como possvel ter simultaneamente todas as premissas verdadeiras e a
concluso falsa, o argumento no vlido.
Peixes

Nemo
Dori

(c) Forma do argumento, prova directa:


Para Nemo ser peixe, temos P eixe(N emo). Para Dori ser peixe, temos P eixe(Dori).
Nada nos impede de ter N emo 6= Dori. Logo, como possvel ter simultaneamente
todas as premissas verdadeiras e a concluso falsa, o argumento no vlido.
(d) Forma do argumento, prova por reduo ao absurdo:
Vamos supr que a concluso falsa, isto , que N emo 6= Dori. possvel que ambos
sejam peixes? Sim, no h nada que impea de ter simultaneamente P eixe(N emo) e
P eixe(Dori). Logo, como possvel ter simultaneamente todas as premissas verdadeiras e a concluso falsa, o argumento no vlido.
(e) Pelo algoritmo do livro:
Palpite: o argumento no vlido.
Resoluo: tentar encontrar um contra-argumento, isto , um argumento com a mesma
forma mas que ns saibamos que invlido.
2 um nmero
5 um nmero
25
Ns sabemos que 2 no 5, logo, este argumento tem todas as premissas verdadeiras
e a concluso falsa, por isso no vlido.
Concluso: como conseguimos encontrar um contra-argumento, o argumento sabido invlido.
Nota: O argumento seguinte tambm no vlido, apesar de ter as mesmas premissas
mas a concluso ser a negao da concluso do anterior. Neste caso, para provar a sua invalidade deveramos escolher representar o N emo e a Dori no mesmo ponto. O que isto
significa que por sabermos que ambos so peixes no podemos ter a certeza que so o
mesmo nem que so diferentes.
Nemo um peixe
Dori um peixe
Nemo no Dori

12

ARGUMENTOS E VALIDADE

5. Os tubares so carnvoros
Os tubares no so vegetarianos
O Bruce vegetariano
O Bruce no tubaro
(a) Diagrama de Venn, prova directa:
Para os tubares serem carnvoros, o conjunto que representa os tubares tem que
estar contido no conjunto que representa os carnvoros. Para os tubares no serem
vegetarianos, o conjunto que representa os tubares no pode estar contido no conjunto que representa os vegetarianos, embora os carnvoros e os vegetarianos se possam intersectar, sem problemas. Para o Bruce ser vegetariano, tem que estar contido
no conjunto que representa os vegetarianos. Com isto, impossvel que o Bruce esteja
contido no conjunto que representa os tubares. Logo, o argumento e vlido.
Carnvoros Vegetarianos

Tubares

Bruce

(b) Diagrama de Venn, prova por reduo ao absurdo:


Vamos supr que o Bruce um tubaro, o que significa que tem que estar contido no
conjunto que representa os tubares. Para os tubares serem carnvoros, o conjunto
que representa os tubares tem que estar contido no conjunto que representa os carnvoros. Para os tubares no serem vegetarianos, o conjunto que representa os tubares
no pode estar contido no conjunto que representa os vegetarianos. Para o Bruce ser
vegetariano, tem que estar contido no conjunto que representa os vegetarianos. Isto
impossvel, uma vez que ele um tubaro e os tubares no so vegetarianos. Logo,
como impossvel ter simultaneamente todas as premissas verdadeiras e a concluso
falsa, o argumento vlido.
Carnvoros Vegetarianos

Tubares
Bruce

(c) Forma do argumento, prova directa:


Para os tubares serem carnvoros, temos (x)[T ubarao(x) Carnivoro(x)]. Para
os tubares no serem vegetarianos, temos (x)[T ubarao(x) V egetariano(x)].
Para o Bruce ser vegetariano, temos V egetariano(Bruce). Dadas estas premissas,
obrigatrio que a concluso seja verdadeira, pois se ela fosse falsa e tivssemos
T ubarao(Bruce) ele no seria vegetariano e teramos um a contradio. Logo, o argumento e vlido.
(d) Forma do argumento, prova por reduo ao absurdo:
Vamos supr que a concluso falsa, ou seja, que o Bruce um tubaro T ubarao(Bruce).
Para os tubares serem carnvoros, temos (x)[T ubarao(x) Carnivoro(x)]. Para
os tubares no serem vegetarianos, temos (x)[T ubarao(x) V egetariano(x)].
Para o Bruce ser vegetariano, temos V egetariano(Bruce). Isto impossvel, uma vez
que ele um tubaro e os tubares no so vegetarianos e por isso tambm temos

13
V egetariano(Bruce) que d uma contradio. Logo, como impossvel ter simultaneamente todas as premissas verdadeiras e a concluso falsa, o argumento vlido.
(e) Pelo algoritmo do livro:
Palpite: o argumento vlido.
Resoluo: tentar encontrar uma prova. A prova pode ser qualquer uma das apresentadas anteriormente.
Concluso: como conseguimos encontrar uma prova, o argumento sabido vlido.
6. Os peixes so animais
Os tubares so animais
(a) Diagrama de Venn, prova directa:
Para os peixes serem animais, tm que estar contidos no conjunto dos animais. Com
base nesta premissa, nada nos impede de ter o conjunto dos tubares fora do conjunto
dos animais. Logo, possvel ter todas as premissas verdadeiras e a concluso falsa,
isto , os tubares no serem animais. Assim, o argumento no vlido.
Animais

Peixes

Tubaroes

(b) Diagrama de Venn, prova por reduo ao absurdo:


Vamos supr que a concluso falsa, isto , que os tubares no so animais. possvel que os peixes sejam animais? Sim, no h nada que impea o conjunto dos peixes
de estar contido no conjunto dos animais. Logo, como possvel ter simultaneamente
todas as premissas verdadeiras e a concluso falsa, o argumento no vlido.
Animais

Peixes

Tubaroes

(c) Forma do argumento, prova directa:


Para os peixes serem animais, temos (x)[P eixe(x) Animal(x)]. Nada nos impede
de ter (x)[T ubarao(x) Animal(x)]. Logo, como possvel ter simultaneamente
todas as premissas verdadeiras e a concluso falsa, o argumento no vlido.
(d) Forma do argumento, prova por reduo ao absurdo:
Vamos supr que a concluso falsa, isto , que (x)[T ubarao(x) Animal(x)].
possvel que os peixes sejam animais, isto , (x)[P eixe(x) Animal(x)]? Sim, no
h nada que nos impea de ter simultaneamente estas duas frmulas. Logo, como
possvel ter simultaneamente todas as premissas verdadeiras e a concluso falsa, o
argumento no vlido.
(e) Pelo algoritmo do livro:
Palpite: o argumento no vlido.
Resoluo: tentar encontrar um contra-argumento, isto , um argumento com a mesma

14

ARGUMENTOS E VALIDADE

forma mas que ns saibamos que invlido.


Os peixes so animais
Os nmeros so animais
Ns sabemos que os nmeros no so animais, logo, este argumento tem todas as premissas verdadeiras e a concluso falsa, por isso no vlido.
Concluso: como conseguimos encontrar um contra-argumento, o argumento sabido invlido.

Exerccio 1.2
Sempre que for possvel, d exemplos de argumentos vlidos e invlidos com:

As premissas verdadeiras e a concluso verdadeira;


As premissas verdadeiras e a concluso falsa;
As premissas falsas e a concluso verdadeira;
As premissas falsas e a concluso falsa.
Resposta:
(prem, concl)

Argumento Vlido

Argumento Invlido

(Verd, Verd)

Os pares so inteiros
Os pares so inteiros

Os pares so mltiplos de 2
Os mltiplos de 2 so pares

(Verd, Falsa)

Impossvel

Os inteiros so nmeros
Os nmeros so inteiros

(Falsas, Verd)

As estrelas so pessoas
As pessoas irradiam luz
As estrelas irradiam luz

Os astros so estrelas
As estrelas so astros

(Falsas, Falsa)

As bicicletas so casas
As bicicletas so casas

Os patins so animais
Os animais so patins

Uma maneira mais automtica de resolver este exerccio considerar o teorema da forma, que
diz que todos os argumentos com a mesma forma so vlidos ou invlidos. Com base numa
forma, encontrar os exemplos que satisfaam o valor de verdade das premissas e concluso.
Para os argumentos vlidos, sabemos que um argumento com a seguinte forma vlido:
Os As so Bs
Os Bs so Cs
Os As so Cs

15
C

Para os argumentos invlidos, sabemos que um argumento com a seguinte forma no vlido:
Os As so Bs
Os Cs so Bs
B

Agora, s preciso encontrar exemplos de proposies com o valor de verdade pedido, de maneira a que o argumento satisfaa estas formas.
(prem, concl)

Argumento Vlido

Argumento Invlido

(Verd, Verd)

Os pares so inteiros
Os inteiros so nmeros
Os pares so nmeros

Os inteiros so nmeros
Os reais so nmeros

(Verd, Falsa)

Impossvel

Os inteiros so nmeros
Os animais so nmeros

(Falsas, Verd)

Os inteiros so pessoas
As pessoas so nmeros
Os inteiros so nmeros

Os animais so nmeros
Os inteiros so nmeros

(Falsas, Falsa)

Os inteiros so pessoas
As pessoas so plantas
Os inteiros so plantas

Os animais so nmeros
Os carros so nmeros

16

ARGUMENTOS E VALIDADE

17

Lgica Proposicional Sistema de Deduo Natural

Sumrio:
Regras do sistema de deduo natural da lgica proposicional
Provas usando o sistema de deduo natural da lgica proposicional
Resumo:
As frmulas bem formadas (ou fbfs) correspondem ao menor conjunto definido atravs
das seguintes regras de formao:
1. Os smbolos de proposio so fbfs (chamadas fbfs atmicas);
2. Se uma fbf, ento () uma fbf;
3. Se e so fbfs, ento ( ), ( ) e ( ) so fbfs.
Uma prova (tambm chamada demonstrao) uma sequncia finita de linhas numeradas, cada uma das quais ou contm uma premissa ou uma fbf que adicionada prova
recorrendo a uma das regras de inferncia e utilizando as fbfs que existem nas linhas anteriores. No lado direito de cada linha existe uma justificao da introduo da linha na
prova.
Uma prova de a partir de uma prova cuja ltima linha contm a fbf e cujas restantes
linhas contm ou uma fbf em ou uma fbf obtida a partir das fbfs das linhas anteriores
atravs da aplicao de uma regra de inferncia. Se existir uma prova de a partir de ,
dizemos que derivvel a partir de e escrevemos ` .
Existem dois tipos de provas: as provas categricas que no so iniciadas com a introduo de uma hiptese; e as provas hipotticas que so iniciadas com a introduo de
uma hiptese. As fbfs de uma prova hipottica so chamadas contingentes, uma vez que
dependem da hiptese que iniciou a prova; as fbfs nas provas exteriores so chamadas
categricas.
Uma fbf que obtida numa prova que no contm premissas chamada um teorema.
Quando {} ` , ou seja, quando um teorema, usual escrever apenas ` .
Os argumentos continuam a ser representados por um par (, ). Quando uma frmula derivvel (usando o sistema sintctico) a partir de um conjunto de frmulas
, escrevemos ` . Quando uma frmula consequncia lgica (usando o sistema
semntico) de um conjunto de frmulas , escrevemos |= .
Provas nos testes
Embora no livro sejam referidas regras de inferncia derivadas, nos testes em geral o
enunciado diz que apenas se podem usar as regras bsicas: premissa, hiptese, repetio,
re-iterao e introduo e eliminao de cada conectiva lgica.
Para simplificar as provas, permitimos que se usem algumas das regras bsicas com mais
graus de liberdade, mas sempre usando fbfs que estejam no nvel de prova correcto:

18

LGICA PROPOSICIONAL SISTEMA DE DEDUO NATURAL

Em geral podemos no ter as fbfs pela ordem em que aparecem no enunciado da regra
(uma vez que isso poderia ser obtido atravs da utilizao de repeties), desde
que os nmeros dos passos estejam pela ordem correcta na justificao do passo
correspondente.
Reit podemos passar para dentro de mais do que um nvel de cada vez.
Em todas as outras regras temos que respeitar os nveis de prova.
No fim dos exerccios est um resumo das regras de inferncia bsicas do sistema de
deduo natural da lgica proposicional.

19
Exerccio 2.1
(JPM) Demonstre os seguintes teoremas e argumentos usando o sistema de deduo natural da lgica proposicional. Em cada alnea indique se est a demonstrar um teorema
ou um argumento.
1. A (B A)
2. (A A) B
3. ({A B, B A}, A)
4. ({A}, B (A B))
5. ({}, ((A B) (B C)) (A C))
Resposta:
1. A (B A) teorema
A

Hip

Hip

Rei, 1

BA

4
5

A (B A)

I, (2, 3)
I, (1, 4)

2. (A A) B teorema
1

A A

Hip

Hip

A A

Rei, 1

E, 3

E, 3

I, (2, (4, 5))

E, 6

(A A) B

I, (1, 7)

3. ({A B, B A}, A) argumento


1
2

AB
B A

Hip

AB

Rei, 1

E, (3, 4)

B A

Rei, 2

E, (5, 6)

Prem
Prem

I, (3, (3, 7))

20

LGICA PROPOSICIONAL SISTEMA DE DEDUO NATURAL

4. ({A}, B (A B)) argumento


1

Prem

Hip

Rei, 1

AB

I, (3, 2)

B (A B)

I, (2, 4)

5. ({}, ((A B) (B C)) (A C)) argumento. Para alm disso, e uma vez que o
conjunto de premissas do argumento vazio, a fbf que a sua concluso um teorema.
1

(A B) (B C)

Hip

AB

E, 1

BC

E, 1

Hip

AB

Rei, 2

E, (4, 5)

BC

Rei, 3

E, (6, 7)

9
10

AC

((A B) (B C)) (A C)

I, (4, 8)
I, (1, 9)

Exerccio 2.2
Demonstre os seguintes teoremas usando o sistema de deduo natural da lgica proposicional.
1. (A (B C)) ((A B) (A C))
2. ((A (A B)) A) B
3. (A B) (B A)
4. (B A) (A B)
5. (A B) (A B)
6. ((A B) B) A
7. (A A) A
8. (A B) (B A)
9. ((A B) C) (A (B C))
10. (A (B C)) ((A B) (A C))
11. ((A B) (A C)) (A (B C))

21
12. ((A B) A) A
Resposta:
1. (A (B C)) ((A B) (A C))
1

A (B C)

Hip

AB

Hip

Hip

AB

Rei, 2

E, (3, 4)

A (B C)

Rei, 1

BC

E, (3, 6)

E, (5, 7)

AC

9
10
11

I, (3, 8)

(A B) (A C)

I, (2, 9)

(A (B C)) ((A B) (A C))

I, (1, 10)

2. ((A (A B)) A) B
1

(A (A B)) A

Hip

A (A B)

E, 1

E, 1

AB

E, (3, 2)

E, (3, 4)

((A (A B)) A) B

I, (1, 5)

3. (A B) (B A)
1

AB

Hip

Hip

Hip

AB

Rei, 1

E, (3, 4)

Rei, 2

B A

(A B) (B A)

I, (3, (5, 6))


I, (2, 7)
I, (1, 8)

22

LGICA PROPOSICIONAL SISTEMA DE DEDUO NATURAL

4. (B A) (A B)
1

B A

Hip

Hip

Hip

B A

Rei, 1

E, (3, 4)

Rei, 2

I, (3, (6, 5))

E, 7

9
10

AB

(B A) (A B)

I, (2, 8)
I, (1, 9)

5. (A B) (A B)
1

AB

Hip

A B

Hip

AB

Rei, 1

E, 3

E, (4, 2)

E, 3

7
8

(A B)

I, (2, (6, 5))

(A B) (A B)

I, (1, 7)

(A B) B

Hip

6. ((A B) B) A
1
2

Hip

(A B) B

Rei, 1

AB

E, 3

E, (2, 4)

E, 3

7
8

((A B) B) A

I, (2, (5, 6))


I, (1, 7)

23
7. (A A) A
1

A A

Hip

Hip

A A

Rei, 1

E, (2, 3)

I, (2, (2, 4))

(A A) A

I, (1, 5)

8. (A B) (B A)
1

AB

Hip

Hip

BA

I, 2

Hip

BA

I, 4

BA

(A B) (B A)

E, (1, (2, 3), (4, 5))


I, (1, 6)

9. ((A B) C) (A (B C))
1

(A B) C

Hip

AB

Hip

Hip

A (B C)

I, 3

Hip

BC

I, 5

A (B C)

I, 6

A (B C)

E, (2, (3, 4), (5, 7))

Hip

10

BC

I, 9

11

A (B C)

I, 10

12
13

A (B C)

((A B) C) (A (B C))

E, (1, (2, 8), (9, 11))


I, (1, 12)

24

LGICA PROPOSICIONAL SISTEMA DE DEDUO NATURAL

10. (A (B C)) ((A B) (A C))

A (B C)

Hip

E, 1

BC

E, 1

Hip

Rei, 2

AB

I, (5, 4)

(A B) (A C)

I, 6

Hip

Rei, 2

10

AC

I, (9, 8)

11

(A B) (A C)

I, 10

12
13

(A B) (A C)

(A (B C)) ((A B) (A C))

E, (1, (4, 7), (8, 11))


I, (1, 12)

11. ((A B) (A C)) (A (B C))

(A B) (A C)

Hip

AB

Hip

E, 2

E, 2

BC

I, 4

A (B C)

I, (3, 5)

AC

Hip

E, 7

E, 7

10

BC

I, 9

11

A (B C)

I, (8, 10)

12
13

A (B C)

((A B) (A C)) (A (B C))

E, (1, (2, 6), (7, 11))


I, (1, 12)

25
12. ((A B) A) A
(A B) A

Hip

AB

Hip

E, 2

Hip

Rep, 4

E, (1, (2, 3), (4, 5))

((A B) A) A

I, (1, 6)

Exerccio 2.3
Demonstre os seguintes teoremas, que correspondem a aplicaes das leis de De Morgan,
usando o sistema de deduo natural da lgica proposicional.
1. (A B) (A B)
2. (A B) (A B)
3. (A B) (A B)
4. (A B) (A B)
Resposta:
1. (A B) (A B)
1

(A B)

Hip

Hip

AB

I, 2

(A B)

Rei, 1

I, (2, (3, 4))

Hip

AB

I, 6

(A B)

Rei, 1

9
10
11
2. (A B) (A B)

I, (6, (7, 8))

A B

I, (5, 9)

(A B) (A B)

I, (1, 10)

26

LGICA PROPOSICIONAL SISTEMA DE DEDUO NATURAL


ou

A B

Hip

A B

Hip

E, 1

E, 1

E, 1

E, 1

AB

Hip

AB

Hip

Hip

Hip

A B

Hip

Rep, 5

Rei, 5

Hip

Rei, 2

Hip

(A B)

I, (6, (7, 8))

Rei, 3

10

Hip

10

Rei, 7

11

A B

Hip

11

I, (8, (10, 9))

12

Rei, 10

12

E, 11

13

Rei, 3

13

E, (4, (5, 6), (7, 12))

I, (11, (12, 13))

14

Rei, 2

14

(A B)

15

(A B)

E, (4, (5, 9), (10, 14)) 15

16

A B

Rei, 1

17
18

(A B)

(A B) (A B)

I, (4, (16, 15))


I, (1, 17)

16

(A B)

(A B) (A B)

I, (4, (13, 14))


I, (1, 15)

27
3. (A B) (A B)

1
2

(A B)
(A B)

Hip
Hip

Hip

A B

I, 3

(A B)

Rei, 2

I, (3, (4, 5))

E, 6

Hip

A B

I, 8

10

(A B)

Rei, 2

11

I, (8, (9, 10))

12

E, 11

13

AB

I, (7, 12)

14

(A B)

Rei, 1

15
16
17

4. (A B) (A B)

(A B)
A B

(A B) (A B)

I, (2, (13, 14))


E, 15
I, (1, 16)

28

LGICA PROPOSICIONAL SISTEMA DE DEDUO NATURAL


ou

1
2

A B
A

A B

Hip

Hip

AB

Hip

Hip

AB

Hip

E, 2

E, 3

E, 2

Rei, 2

A B

Rei, 1

(A B)

I, (3, (4, 5))

Hip

Hip

Hip

AB

Hip

Rei, 3

E, 8

Rei, 6

10

Rei, 7

10

I, (7, (8, 9))

I, (8, (9, 10))

11

Hip

E, (1, (2, 6), (7, 11)) 12

Rep, 11

11
12
13

(A B)
(A B)

(A B) (A B)

I, (1, 12)

13
14
15

B
(A B)

(A B) (A B)

E, (5, (6, 10), (11, 12))


I, (2, (4, 13))
I, (1, 14)

Lgica Proposicional Sistema de Deduo Natural


Prem

E
n

Prem

Hip
ou
n

n+1

...

Hip

n
..
.
m

..
.

E, n

n
..
.
m

..
.

E, n

n
..
.
m

..
.

n
..
.
m

..
.

Rep
n
..
.
m

..
.

Rep, n

ou

Rei
n
..
.

..
.

..
.

m
k

E
n
..
.
m
..
.
k

..
.

..
.

Rei, n

Hip

I, (n, m)

o
..
.

..
.

r
..
.

..
.

s
m

..
.

..
.

Hip

Hip

E, (n, (o, p), (r, s))

I
E, (n, m)

I
n
..
.
m
..
.
k

I, n

I
n
..
.

I, n

I, (n, m)

n
..
.

..
.

m
..
.

..
.

k
l

E
n
..
.
m

Hip

I, (n, (m, k))

..
.

E, n

30

LGICA PROPOSICIONAL SISTEMA DE DEDUO NATURAL

31

Lgica Proposicional Tabelas de Verdade

Sumrio:
Provas usando o sistema semntico da lgica proposicional
Interpretaes
Tabelas de verdade
Resumo:
Uma funo de valorao uma funo dos smbolos de proposio para os valores lgicos,
verdadeiro e f also.
Dada uma funo de valorao, uma interpretao uma funo das fbfs para os valores
lgicos, que atribui s frases da linguagem o valor verdadeiro ou f also.
Dado um smbolo de proposio P e uma interpretao v, dizemos que v satisfaz o smbolo de proposio P sse v(P ) = V (diz-se tambm que o smbolo de proposio P
verdadeiro segundo a interpretao v); caso contrrio, dizemos que a interpretao no
satisfaz o smbolo de proposio P (neste caso, diz-se tambm que o smbolo de proposio P falso segundo a interpretao v).
Um modelo de uma fbf uma interpretao que satisfaz . Um modelo de um conjunto
de fbfs uma interpretao que satisfaz todas as fbfs de .
Diz-se que uma fbf consequncia lgica de um conjunto de fbfs quando for impossvel
encontrar uma interpretao que satisfaa todas as fbfs do conjunto mas no satisfaa
. Ou seja, quando for satisfeita por todos os modelos do conjunto .
As tabelas de verdade para as fbfs so construidas tendo em conta as valoraes dos smbolos de proposio e as tabelas de verdade das conectivas lgicas, j conhecidas.
Usando a semntica, um argumento vlido se no existir nenhuma interpretao que
torne todas as premissas verdadeiras e a concluso falsa, ou seja, se no existir nenhuma
linha da tabela de verdade em que todas as premissas tenham o valor V e a concluso
tenha o valor F .
Uma fbf diz-se satisfazvel sse existe pelo menos uma interpretao na qual a fbf verdadeira.
Uma fbf diz-se falsificvel sse existe pelo menos uma interpretao na qual a fbf falsa.
Uma fbf diz-se tautolgica sse verdadeira para todas as interpretaes.
Uma fbf diz-se contraditria sse falsa para todas as interpretaes.
A lgica proposicional correcta e completa. Isto importante para nos permitir fazer
provas pela via sintctica, com base no conhecimento que temos, e sabermos que isso
tem uma correspondncia semntica no mundo que estamos a representar. Enquanto
que na lgica proposicional relativamente simples encontrar algoritmos eficientes para
fazer provas pela via semntica, na lgica de primeira ordem isso mais complicado.

32

LGICA PROPOSICIONAL TABELAS DE VERDADE

Assim, fazemos as provas pela via sintctica e, pela correco e completude da lgica,
sabemos que seramos capazes de provar o mesmo pela via semntica.
Uma lgica correcta (do ingls, sound) se qualquer argumento demonstrvel (com o
seu sistema dedutivo) vlido de acordo com a sua semntica. Ou seja, se partindo de
um conjunto de premissas, o sistema dedutivo no gera nenhuma concluso errada.
Uma lgica completa (do ingls, complete) se qualquer argumento vlido de acordo
com a sua semntica demonstrvel no seu sistema dedutivo. Ou seja, significa que
podemos provar todas as proposies verdadeiras, tendo em ateno as premissas.

33
Exerccio 3.1
Para cada uma das seguintes fbfs, diga, justificando, se satisfazvel, falsificvel, tautolgica ou contraditria. necessrio conhecer todas as linhas das tabelas de verdade de
cada fbf para responder a estas perguntas?
1. A
2. A A
3. A A
4. (A B) (A B)
5. (A B) (A B)
Resposta:

Frmula

Satisfazvel
Se tiver pelo menos
uma
interpretao
Verdadeira.

Falsificvel
Se tiver pelo menos
uma
interpretao
Falsa.

Tautolgica
Se tiver todas as
interpretaes Verdadeiras.

Contraditria
Se tiver todas as interpretaes Falsas.

A
A A
A A
(A B) (A B)
(A B) (A B)

Sim
No
Sim
Sim
Sim

Sim
Sim
No
No
Sim

No
No
Sim
Sim
No

No
Sim
No
No
No

Para provar que uma frmula satisfazvel, podemos parar de procurar assim que encontrarmos uma interpretao que satisfaa a frmula, por isso pode no ser necessrio conhecer toda a
tabela de verdade. S ser necessrio conhecer toda a tabela no caso de a frmula no ser satisfazvel. Podemos dizer algo semelhante acerca das frmulas falsificveis, mas paramos quando
encontrarmos uma interpretao que no satisfaa a frmula.
Para provar que uma frmula tautolgica podemos parar numa de duas situaes: ou paramos
quando encontramos uma interpretao que no satisfaa a frmula e neste caso no tautolgica, ou ento temos que mostrar que todas as interpretaes satisfazem a frmula e neste caso
precisamos de percorrer toda a tabela. Podemos dizer algo semelhante para as frmulas contraditrias, trocando satisfazer por no satisfazer e vice-versa.

Exerccio 3.2
Considere o seguinte conjunto de frmulas:
{Homem P essoa, M ulher P essoa, Homem M ulher}
1. Mostre quais so os modelos desse conjunto.
2. P essoa consequncia lgica desse conjunto? Porqu?
3. Acrescente Homem ao conjunto. Diga quais so os seus modelos e as suas consequncias lgicas.
Resposta:
Considerando que: H representa Homem, M representa M ulher e P representa P essoa.

34

LGICA PROPOSICIONAL TABELAS DE VERDADE

1.
H
V
V
V
V
F
F
F
F

M
V
V
F
F
V
V
F
F

P
V
F
V
F
V
F
V
F

HP
V
F
V
F
V
V
V
V

M P
V
F
V
V
V
F
V
V

H M
V
V
V
V
V
V
F
F

modelo?
S
N
S
N
S
N
N
N

Um modelo de um conjunto de frmulas uma interpretao que satisfaz todas as fbfs


desse conjunto, isto , que as torna todas verdadeiras. Assim, os modelos deste conjunto
de frmulas correspondem s interpretaes que atribuem a Homem, M ulher e P essoa os
valores das colunas respectivas, nas linhas em que o valor da ltima coluna S.
Convm notar que num dos modelos temos como consequncia lgica Homem M ulher,
pois no foi dito nada que o impedisse.
2. As consequncias lgicas de um conjunto de frmulas so as frmulas que tm o valor V
em qualquer modelo do conjunto. Assim, P essoa consequncia lgica deste conjunto,
porque tem o valor V em todos os modelos do conjunto.
Intuitivamente, uma vez que temos Homem M ulher, faz sentido que P essoa seja consequncia lgica do conjunto.
3. Para este novo conjunto, s interessa a metade inferior da tabela, em que Homem tem o
valor F . O modelo o que est assinalado na coluna direita. As consequncias lgicas
deste novo conjunto so infinitas e incluem:
As frmulas que esto no conjunto: Homem, Homem P essoa, M ulher P essoa,
Homem M ulher,
as frmulas atmicas s quais a interpretao atribui o valor verdadeiro: M ulher e
P essoa,

todas as frmulas derivveis a partir das frmulas anteriores: M ulher P essoa,


M ulher Boneca, Homem M ulher, etc.,
todos os teoremas da lgica proposicional: A (B A), (A A) B, A A, etc.

Nota: se a pergunta fosse as frmulas derivveis, ainda seria necessrio fazer as provas
respectivas pela via sintctica.

Exerccio 3.3
Considere a seguinte tabela de verdade. Diga a que conectiva lgica corresponde a funo f .
P Q f (P, Q)
V V
V
V F
F
F V
F
F F
F
Resposta:
A funo f corresponde a um e lgico ou conjuno.

Exerccio 3.4
Usando o sistema semntico da lgica proposicional, mostre que {A, B} |= (A B).

35
Resposta:
Para uma interpretao satisfazer {A, B}, A e B tm que ser ambos falsos. Assim, (A B) tambm ser falso e por isso (A B) ser verdadeiro. Logo, todas as interpretaes que satisfazem
{A, B} tambm satisfazem (A B), ou seja, {A, B} |= (A B).
Outra possibilidade de resposta seria fazer uma tabela de verdade e mostrar que todas as linhas
da tabela (interpretaes) que tornam simultaneamente A e B verdadeiras tambm tornam a
fbf (A B) verdadeira.

Exerccio 3.5
Mostre que as frmulas A (B C) e (A B) C no so equivalentes apresentando uma interpretao para a qual elas tenham valores lgicos diferentes.
Resposta:
Um exemplo:
I1 (A) = F
I1 (B) = F
I1 (C) = F
Neste caso, temos I1 (A (B C)) = V e I1 ((A B) C) = F .
Outro exemplo:
I2 (A) = F
I2 (B) = V
I2 (C) = F
Neste caso, temos I2 (A (B C)) = V e I2 ((A B) C) = F .
Outra possibilidade de resposta seria fazer a tabela de verdade com as oito interpretaes possveis para A, B e C e mostrar que em pelo menos uma delas as duas fbfs do enunciado tm valores
de verdade diferentes.

Exerccio 3.6
Usando tabelas de verdade, prove que as seguintes frmulas, correspondentes s leis de
De Morgan, so tautologias.
(A B) (A B)

(A B) (A B)

Resposta:
A
V
V
F
F

B
V
F
V
F

(A B)
F
F
F
V

A B
F
F
F
V

(A B) (A B)
V
V
V
V

A
V
V
F
F

B
V
F
V
F

(A B)
F
V
V
V

A B
F
V
V
V

(A B) (A B)
V
V
V
V

Cada frmula tem sempre o valor verdadeiro independentemente da valorao de A e de B, por


isso so tautologias.

36

LGICA PROPOSICIONAL TABELAS DE VERDADE

37

Lgica Proposicional Resoluo

Sumrio:
Resoluo em lgica proposicional
Provas usando resoluo em lgica proposicional
Resumo:
A resoluo surgiu da necessidade de criar um modo simples e eficiente de automatizar o
raciocnio lgico, para poder ser facilmente implementado em computador.
Antes de se poder usar a resoluo, as fbfs tm que ser passadas para a forma clausal, que
corresponde a uma conjuno de clusulas. Uma clusula um literal ou uma disjuno
de literais. Ou seja, uma fbf na forma clausal corresponde a uma conjuno de disjunes.
Uma fbf atmica corresponde a um smbolo de proposio. Uma fbf atmica ou a sua
negao chamada um literal. Um literal positivo corresponde a uma fbf atmica e um
literal negativo corresponde negao de uma fbf atmica.
Passos da passagem para a forma clausal:
1. Eliminao de : substituir todas as ocorrncias de por (normalmente, de dentro para fora).
2. Reduo do domnio de : eliminao da dupla negao , utilizao das
leis de De Morgan ( ) e ( ) (normalmente, de
fora para dentro).
3. Obteno da forma conjuntiva normal: transformar a frmula numa conjuno de
disjunes usando a propriedade distributiva da disjuno em relao conjuno
( ) ( ) ( ).
4. Eliminao de : transformar a frmula num conjunto de clusulas.
5. Eliminao de : transformar cada clusula num conjunto de literais.
Princpio da resoluo: a partir de e de , podemos concluir . Formalmente,
sendo e duas clusulas e uma fbf atmica tal que e , ento, usando
o princpio da resoluo, podemos inferir a clusula ( {}) ( {}), que o
resolvente das clusulas e .
1
2
3

{A}
{A, B}
{B}

Prem
Prem
Res, (1, 2)

A resoluo correcta mas no completa (por exemplo, {P } |= {P, Q} mas no possvel derivar a concluso {P, Q} a partir da premissa {P } usando resoluo). No entanto,
completa quanto refutao (pois possvel chegar a uma contradio, representada

38

LGICA PROPOSICIONAL RESOLUO

por {}, a partir da premissa {P } e das clusulas correspondentes negao da concluso


{P }, {Q}).
Normalmente, aplica-se a resoluo a demonstraes por reduo ao absurdo, em que o
objectivo chegar a uma clusula vazia, ou seja, a uma contradio:
Para provar que a concluso de um argumento derivvel a partir das suas premissas, passam-se as premissas e a negao da concluso para a forma clausal e
tenta-se chegar clusula vazia.
Para provar que uma frmula teorema, nega-se a frmula, passa-se para a forma
clausal, e tenta-se chegar a uma clusula vazia. Note-se que isto o mesmo que
tentar provar um argumento em que o conjunto de premissas vazio.
Convm ter em ateno que todas as clusulas resultantes da passagem para a
forma clausal das premissas e da negao da concluso do argumento vo ser premissas da resoluo. A palavra premissa tem dois significados diferentes, preciso decidir qual usar com base no contexto (se so as premissas do argumento ou
as premissas da resoluo).
Estratgias a usar em resoluo:
Gerao por saturao de nveis: em cada nvel usa-se pelo menos uma clusula do
nvel anterior.
Estratgias de eliminao de clusulas eliminam clusulas que no vo ser teis
numa prova por resoluo: eliminar os teoremas (ou tautologias), eliminar as clusulas no mnimas (ou subordinadas) e eliminar as clusulas que contm literais
puros (cuja negao no aparece noutras clusulas).
Resoluo unitria: utiliza sempre pelo menos uma clusula com apenas um literal.
Resoluo linear: consiste em utilizar uma clusula e os sucessores dessa clusula
sempre que se aplica o princpio da resoluo. Ou seja, cada passo usa sempre o
resultado do passo anterior.
Resoluo com conjunto de apoio: aplica-se normalmente a demonstraes por reduo ao absurdo e tenta aplicar o princpio da resoluo a pelo menos uma clusula do conjunto de apoio. O conjunto de apoio corresponde negao do que se
pretende provar.
Convm lembrar que o princpio da resoluo permite eliminar uma fbf atmica e a sua
negao de cada vez. Por exemplo, dada a fbf (P Q) (P Q), na forma clausal
temos {{P, Q}, {P, Q}} e poderamos ser tentados a eliminar P e Q num passo s,
ficando com a clusula vazia. Mas isto estaria errado, pois usando a fbf inicial sabemos
que apenas um de P e Q ser verdadeiro, mas no sabemos qual, nem temos forma de
descobrir. Usando resoluo, podemos fazer
{P, Q}
{P, Q}
{P, Q}
{P, Q}
{Q, Q}

ou
mas no conseguimos chegar a {}.

{P, P }

39
Exerccio 4.1
Transforme a seguinte frmula para a forma clausal:
1. A ((B C) (C D))
Resposta:
1. A ((B C) (C D))
(a) Eliminao de : A ((B C) (C D))

(b) Reduo do domnio de : A ((B C) (C D))


A ((B C) (C D))
(c) Obteno da forma conjuntiva normal: A ((B (C D)) (C (C D)))
(A(B (C D)))(A(C (C D)))
(A B C D) (A C D)
(d) Eliminao de : {A B C D, A C D}
(e) Eliminao de : {{A, B, C, D}, {A, C, D}}

Nota: neste exerccio no se nega a fbf inicial, pois a nica coisa que foi pedida foi que a
passasse para a forma clausal, e no que se provasse alguma coisa com ela.

Exerccio 4.2
Demonstre os teoremas e argumentos do exerccio 2.1 usando resoluo. Em cada alnea
indique se est a demonstrar um teorema ou um argumento.
Resposta:
1. A (B A) teorema
Estamos a tentar provar que uma frmula teorema. Negamo-la, passamo-la para a forma
clausal, e tentamos chegar a uma clusula vazia usando resoluo.
Passagem para a forma clausal de (A (B A)):
(a) Eliminao de : (A (B A))

(b) Reduo do domnio de : A (B A)


A (B A)
A B A
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, B, A}

(e) Eliminao de : {{A}, {B}, {A}}

Aplicao do princpio da resoluo:


{A}

{B}

{A}

{}
Nota1: No foi necessrio usar todas as premissas da resoluo para chegar a uma clusula
vazia. Na realidade, isto faz sentido, uma vez que a contradio no depende de B, mas
apenas de A e de A.
Nota2: Se no negarmos a fbf inicial e a passarmos directamente para a forma clausal, temos
A (B A), depois A (B A), e finalmente {{A, B, A}}, e no podemos aplicar
resoluo a apenas uma clusula, por isso nunca conseguiremos chegar clusula vazia.
No esquecer que em resoluo as provas so feitas por refutao.

40

LGICA PROPOSICIONAL RESOLUO

2. (A A) B teorema
Passagem para a forma clausal de ((A A) B):
(a) Eliminao de : ((A A) B)
(b) Reduo do domnio de : ((A A) B)
((A A) B)
(A A) B
(A A) B
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, A, B}
(e) Eliminao de : {{A}, {A}, {B}}
Aplicao do princpio da resoluo:
{A}

{A}

{B}

{}
3. ({A B, B A}, A) argumento
Estamos a tentar provar um argumento. Cada premissa (individualmente) e a concluso
negada so passadas para a forma clausal e tenta-se chegar a uma contradio.
Passagem para a forma clausal de A B, B A, A:
(a) Eliminao de : A B, B A, A
(b) Reduo do domnio de : A B, B A, A
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A B, B A, A}
(e) Eliminao de : {{A, B}, {B, A}, {A}}
Aplicao do princpio da resoluo:
{A, B}

{B, A}

{A}

{A}

{}
4. ({A}, B (A B)) argumento
Passagem para a forma clausal de A, (B (A B)):
(a) Eliminao de : A, (B (A B))
(b) Reduo do domnio de : A, B (A B)
A, B (A B)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, B, A B}
(e) Eliminao de : {{A}, {B}, {A, B}}

41
Aplicao do princpio da resoluo:
{A}

{B}

{A, B}

{A}

{}
5. ({}, ((A B) (B C)) (A C)) argumento
Passagem para a forma clausal de (((A B) (B C)) (A C)):
(a) Eliminao de : (((A B) (B C)) (A C))

(b) Reduo do domnio de : (((A B) (B C)) (A C))


(((A B) (B C)) (A C))
(A B) (B C) (A C)
(A B) (B C) A C
(A B) (B C) A C
(c) Obteno da forma conjuntiva normal: j est.

(d) Eliminao de : {A B, B C, A, C}

(e) Eliminao de : {{A, B}, {B, C}, {A}, {C}}

Aplicao do princpio da resoluo:


{A, B}

{B, C}

{A}

{C}

{A, C}

{C}

{}

Exerccio 4.3
Demonstre os teoremas do exerccio 2.2 usando resoluo.
Resposta:
1. (A (B C)) ((A B) (A C))
Passagem para a forma clausal de ((A (B C)) ((A B) (A C))):
(a) Eliminao de : ((A (B C)) ((A B) (A C)))

(b) Reduo do domnio de : (A (B C)) ((A B) (A C))


(A (B C)) ((A B) (A C))
(A (B C)) (A B) (A C)
(A (B C)) (A B) (A C)

(c) Obteno da forma conjuntiva normal: (A B C) (A B) A C

(d) Eliminao de : {A B C, A B, A, C}

(e) Eliminao de : {{A, B, C}, {A, B}, {A}, {C}}

42

LGICA PROPOSICIONAL RESOLUO

Aplicao do princpio da resoluo:


{A, B, C}

{A, B}

{A}

{C}

{B}

{A, C}

{C}

{}
ou
{A, B, C}

{A, B}

{A}

{C}

{A, C}

{C}

{}
Nota: na segunda prova temos menos um passo porque aplicmos resoluo para eliminar
B e B a duas clusulas que tinham A repetido.
2. ((A (A B)) A) B
Passagem para a forma clausal de (((A (A B)) A) B):
(a) Eliminao de : (((A (A B)) A) B)

(b) Reduo do domnio de : ((A (A B)) A) B


((A (A B)) A) B

(c) Obteno da forma conjuntiva normal: (A A B) A B

(d) Eliminao de : {A A B, A, B}
(e) Eliminao de : {{A, B}, {A}, {B}}

Aplicao do princpio da resoluo:


{A, B}

{A}

{B}

{B}

{}
3. (A B) (B A)
Passagem para a forma clausal de ((A B) (B A)):

43
(a) Eliminao de : ((A B) (B A))
(b) Reduo do domnio de : ((A B) (B A))
(A B) (B A)
(A B) (B A)
(A B) (B A)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A B, B, A}
(e) Eliminao de : {{A, B}, {B}, {A}}
Aplicao do princpio da resoluo:
{A, B}

{B}

{A}

{A}

{}
4. (B A) (A B)
Passagem para a forma clausal de ((B A) (A B)):
(a) Eliminao de : ((B A) (A B))
(b) Reduo do domnio de : ((B A) (A B))
(B A) (A B)
(B A) (A B)
(B A) (A B)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {B A, A, B}
(e) Eliminao de : {{B, A}, {A}, {B}}
Aplicao do princpio da resoluo:
{B, A}

{A}

{B}

{B}

{}
5. (A B) (A B)
Passagem para a forma clausal de ((A B) (A B)):
(a) Eliminao de : ((A B) (A B))
(b) Reduo do domnio de : (A B) (A B)
(A B) (A B)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, B, A B}
(e) Eliminao de : {{A}, {B}, {A, B}}

44

LGICA PROPOSICIONAL RESOLUO

Aplicao do princpio da resoluo:


{A}

{B}

{A, B}

{A}

{}
6. ((A B) B) A
Passagem para a forma clausal de (((A B) B) A):
(a) Eliminao de : (((A B) B) A)

(b) Reduo do domnio de : ((A B) B) A


((A B) B) A
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A B, B, A}

(e) Eliminao de : {{A, B}, {B}, {A}}

Aplicao do princpio da resoluo:


{A, B}

{B}

{A}

{A}

{}
7. (A A) A
Passagem para a forma clausal de ((A A) A):
(a) Eliminao de : ((A A) A)

(b) Reduo do domnio de : (A A) A


A A
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, A}

(e) Eliminao de : {{A}, {A}}

Aplicao do princpio da resoluo:


{A}

{A}

{}
8. (A B) (B A)
Passagem para a forma clausal de ((A B) (B A)):
(a) Eliminao de : ((A B) (B A))

(b) Reduo do domnio de : (A B) (B A)


(A B) B A
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A B, B, A}

45
(e) Eliminao de : {{A, B}, {B}, {A}}
Aplicao do princpio da resoluo:
{A, B}

{B}

{A}

{A}

{}
9. ((A B) C) (A (B C))
Passagem para a forma clausal de (((A B) C) (A (B C))):
(a) Eliminao de : (((A B) C) (A (B C)))
(b) Reduo do domnio de : ((A B) C) (A (B C))
((A B) C) (A (B C))
((A B) C) A (B C)
((A B) C) A B C
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A B C, A, B, C}
(e) Eliminao de : {{A, B, C}, {A}, {B}, {C}}
Aplicao do princpio da resoluo:
{A, B, C}

{A}

{B}

{C}

{B, C}

{C}

{}
10. (A (B C)) ((A B) (A C))
Passagem para a forma clausal de ((A (B C)) ((A B) (A C))):
(a) Eliminao de : ((A (B C)) ((A B) (A C)))
(b) Reduo do domnio de : (A (B C)) ((A B) (A C))
(A (B C)) (A B) (A C)
A (B C) (A B) (A C)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, B C, A B, A C}
(e) Eliminao de : {{A}, {B, C}, {A, B}, {A, C}}
Aplicao do princpio da resoluo:

46

4
{A}

{B, C}

{A, B}

LGICA PROPOSICIONAL RESOLUO


{A, C}

{C, A}

{A}

{}
11. ((A B) (A C)) (A (B C))
Passagem para a forma clausal de (((A B) (A C)) (A (B C))):
(a) Eliminao de : (((A B) (A C)) (A (B C)))
(b) Reduo do domnio de : ((A B) (A C)) (A (B C))
((A B) (A C)) (A (B C))
((A B) (A C)) (A (B C))
(c) Obteno da forma conjuntiva normal:
(((A B) A) ((A B) C)) ((A B) (A C))
((AA)(B A))((AC)(B C))((AB)(AC))

(d) Eliminao de : {A, B A, A C, B C, A B, A C}

(e) Eliminao de : {{A}, {B, A}, {A, C}, {B, C}, {A, B}, {A, C}}
Aplicao do princpio da resoluo:
{A}

{B, A}

{A, C}

{B, C}

{A, B}

{A, C}

{C, A}

{A}

{}
Nota: aqui tambm no foi necessrio usar todas as premissas para chegar a uma contradio. Neste caso, as duas premissas que no foram usadas at poderiam ter sido eliminadas
usando a estratgia de eliminao de clusulas no mnimas, uma vez que ambas contm a
premissa {A}.
12. ((A B) A) A
Passagem para a forma clausal de (((A B) A) A):
(a) Eliminao de : (((A B) A) A)
(b) Reduo do domnio de : ((A B) A) A
((A B) A) A

(c) Obteno da forma conjuntiva normal: (A A) (B A) A

(d) Eliminao de : {A, B A, A}


(e) Eliminao de : {{A}, {B, A}, {A}}

47
Aplicao do princpio da resoluo:
{A}

{B, A}

{A}

{}

Exerccio 4.4
Demonstre os teoremas do exerccio 2.3, que correspondem a aplicaes das leis de De
Morgan, usando resoluo.
Resposta:
1. (A B) (A B)
Passagem para a forma clausal de ((A B) (A B)):
(a) Eliminao de : ((A B) (A B))

(b) Reduo do domnio de : (A B) (A B)


(A B) (A B)
(A B) (A B)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, B, A B}

(e) Eliminao de : {{A}, {B}, {A, B}}

Aplicao do princpio da resoluo:


{A}

{B}

{A, B}

{A}

{}
2. (A B) (A B)
Passagem para a forma clausal de ((A B) (A B)):
(a) Eliminao de : ((A B) (A B))

(b) Reduo do domnio de : (A B) (A B)


(A B) (A B)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A, B, A B}

(e) Eliminao de : {{A}, {B}, {A, B}}

Aplicao do princpio da resoluo:


{A}

{B}

{A, B}

{A}

{}

48

LGICA PROPOSICIONAL RESOLUO

3. (A B) (A B)
Passagem para a forma clausal de ((A B) (A B)):
(a) Eliminao de : ((A B) (A B))
(b) Reduo do domnio de : (A B) (A B)
(A B) (A B)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A B, A, B}
(e) Eliminao de : {{A, B}, {A}, {B}}
Aplicao do princpio da resoluo:
{A, B}

{A}

{B}

{B}

{}
4. (A B) (A B)
Passagem para a forma clausal de ((A B) (A B)):
(a) Eliminao de : ((A B) (A B))
(b) Reduo do domnio de : (A B) (A B)
(A B) (A B)
(c) Obteno da forma conjuntiva normal: j est.
(d) Eliminao de : {A B, A, B}
(e) Eliminao de : {{A, B}, {A}, {B}}
Aplicao do princpio da resoluo:
{A, B}

{A}

{B}

{B}

{}

Exerccio 4.5
Usando uma estratgia de resoluo linear, apresente uma prova por refutao para A a
partir do seguinte conjunto de clusulas: {{A, B, C}, {D, A}, {B}, {C}}.
Resposta:

49
{A}

{A, B, C}

{B, C}

{B}

{C}

{C}

{}
Nota: no foi necessrio usar a clusula {D, A}. Alis, se a tivssemos usado no primeiro passo
no teramos conseguido fazer o resto da prova usando resoluo linear, pois no conseguiramos
eliminar D. A clusula {D, A} poderia at ser eliminada usando a estratgia de eliminao de
literais puros.

50

LGICA PROPOSICIONAL RESOLUO

51

Lgica Proposicional BDDs

Sumrio:
Provas usando o sistema semntico da lgica proposicional
rvores de deciso
BDDs
Resumo:
As rvores de deciso correspondem verso grfica das tabelas de verdade. Uma rvore
de deciso para uma fbf uma rvore binria em que os ns contm os smbolos de
proposio existentes na fbf e as folhas da rvore so um dos valores V e F .
Os BDDs (Binary Decision Diagrams) so grafos acclicos dirigidos e rotulados que representam de forma compacta a mesma informao que as rvores de deciso. As rvores
de deciso em si tambm so BDDs, antes de serem simplificados.

Transformaes aplicveis a BDDs:


R1 - Remoo de folhas duplicadas: Todos os ns com rtulos V e F so unificados, e
os arcos so redireccionados para os novos ns.
R2 - Remoo de testes redundantes: Se ambos os arcos que saem dum n vo para o
mesmo n, podemos eliminar o primeiro, redireccionando os arcos que apontam
para ele.
R3 - Remoo de ns redundantes: Se dois ns distintos so os ns iniciais de dois subBDDs estruturalmente semelhantes, ento podemos eliminar um deles, dirigindo
os ns relevantes do outro.

Composio de BDDs:
1. O BDD para a fbf pode ser criado a partir do BDD , substituindo o n com o
rtulo V por F e vice-versa.
2. O BDD para a fbf pode ser criado a partir do BDD , substituindo o n com o
rtulo V pelo BDD e aplicando ao BDD resultante as redues R1 a R3.
3. O BDD para a fbf pode ser criado a partir do BDD , substituindo o n com o
rtulo F pelo BDD e aplicando ao BDD resultante as redues R1 a R3.
Da composio de BDDs podem resultar BDDs em que existe mais do que um n para
o mesmo smbolo de predicado. Isto no problemtico, mas necessrio considerar
apenas os caminhos consistentes. Para resolver este problema introduzem-se os OBDDs.

52

LGICA PROPOSICIONAL BDDS

Exerccio 5.1
Considere a seguinte tabela de verdade:
P Q f (P, Q)
V V
V
V F
F
F V
F
F
F F

1. Represente a rvore de deciso correspondente.


2. Mostre o BDD reduzido correspondente rvore anterior, apresentando e justificando todos os passos.
3. Com base no BDD reduzido, diga quais so os modelos de f (P, Q) e compare-os
com os obtidos pela observao da tabela de verdade.

Resposta:

1.
P

2.
P

P
P

R1

R2

3. Seguindo o caminho desde a raz do BDD at ao n V , observa-se que, para f (P, Q) ser
verdadeira, P e Q tm ambos que ser verdadeiros, o que o mesmo que seria concluido
observando a tabela de verdade (como seria de esperar!).

Exerccio 5.2
Considere a seguinte tabela de verdade:

53
P
V
V
V
V
F
F
F
F

Q
V
V
F
F
V
V
F
F

R
V
F
V
F
V
F
V
F

f (P, Q, R)
V
F
F
F
V
F
V
F

1. Represente a rvore de deciso correspondente.


2. Mostre o BDD reduzido correspondente rvore anterior, apresentando e justificando todos os passos.
3. O BDD teria a mesma forma se tivesse escolhido outra ordenao para os ns?
Justifique, mostrando o novo BDD reduzido.
4. Com base nos BDDs reduzidos, diga quais so os modelos de f (P, Q, R) e compareos com os obtidos pela observao da tabela de verdade.
Resposta:
1.
P

2.
P

R1

54

R2 e R3

LGICA PROPOSICIONAL BDDS

R2

3. Para saber se a forma do BDD reduzido seria a mesma usando outra ordenao, vamos
voltar a fazer a rvore de deciso e o BDD reduzido usando outra ordenao.
R

R1

R2

Nota: para a mesma tabela de verdade, temos 2 BDDs reduzidos diferentes!


4. Seguindo o caminho desde a raz de cada BDD at ao n V , observa-se que, para f (P, Q, R)
ser verdadeira, existem duas possibilidades: P , Q, R so todos verdadeiros; ou P falso e
R verdadeiro (neste caso, no interessa o valor de Q). Como seria de esperar, a concluso
a mesma, observando o primeiro BDD, o segundo BDD ou a tabela de verdade.

Exerccio 5.3
Usando BDDs, prove que as seguintes frmulas, correspondentes s leis de De Morgan,
so tautologias.
(A B) (A B)

55
(A B) (A B)
Resposta:
Mostrar que, para cada uma das frmulas, o BDD reduzido o BDD de uma tautologia, ou seja
tem apenas a folha V . Como todas as interpretaes das duas fbfs tm o valor verdadeiro e as
fbfs usam os mesmos smbolos proposicionais, ambas tero a mesma rvore de deciso.
A
A

A
B
B

R1

R2

R2

Exerccio 5.4
Considere que = A B C e = B C. Usando as regras de composio de BDDs,
determine os BDDs reduzidos para:
1.
2.
3.
4.
Resposta:
1. = A B C

A
A
B
B

B
C

F
2. = B C

56

LGICA PROPOSICIONAL BDDS

B
B
C
C

3. = (A B C) (B C)
A

4. = (A B C) (B C)

57

Nota: o problema com as duas ltimas alneas, que correspondem composio simples de
BDDs, que temos caminhos por onde necessrio testar mais do que uma vez o valor de
verdade de um smbolo proposicional, e pior ainda que no mesmo caminho consideramos
que um smbolo proposicional verdadeiro e mais tarde que falso (ou vice-versa), o que
no faz sentido. Os OBBDs vm resolver estes problemas. Convm tambm notar que estes
problemas no existiriam se as fbfs e no tivessem smbolos proposicionais em comum.

58

LGICA PROPOSICIONAL BDDS

59

Lgica Proposicional OBDDs

Sumrio:
Provas usando o sistema semntico da lgica proposicional
OBDDs
Resumo:
Da composio de BDDs podem resultar BDDs em que existe mais do que um n para o
mesmo smbolo proposicional no mesmo caminho, no caso em que as fbfs a compor partilhem smbolos proposicionais. Isto no problemtico, apesar de ser ineficiente, mas
necessrio considerar apenas os caminhos consistentes. Para alm disso, difcil verificar a equivalncia de BDDs com ordenaes diferentes para os smbolos de predicado
usados. Para resolver estes problemas introduzem-se os OBDDs.
Um OBBD um BDD que que satisfaz alguma relao de ordem total para os smbolos
proposicionais que contm. Usando OBBDs, cada fbf tem uma representao nica, ou
seja, tem uma forma cannica, que sempre a mesma, independentemente da ordem
pela qual as redues forem aplicadas.
Dados OBDD1 e OBDD2 e um conjunto de smbolos de proposio {P1 , . . . , Pn } contendo os smbolos de proposio de OBDD1 e OBDD2, diz-se que OBDD1 e OBDD2
so compatveis sse existe uma ordem aplicada ao conjunto de smbolos de proposio
tal que ambos os OBDDs satisfazem essa ordem.
A ordenao escolhida para os predicados pode influenciar (e muito!) o tamanho do
OBBD correspondente.
Dada uma fbf e uma relao de ordem total para os smbolos de proposio de , o
OBDD reduzido correspondente a nico. Consequentemente, possvel saber se dois
OBDDs correspondem mesma fbf verificando se estes so estruturalmente semelhantes.
Teste para tautologia/validade uma fbf tautolgica/vlida (isto , tem sempre o
valor verdadeiro) sse o seu OBBD reduzido for V .
Teste para inconsistncia uma fbf contraditria sse o seu OBBD reduzido for F .
Teste para satisfazibilidade uma fbf satisfazvel sse o seu OBBD reduzido no for
F , ou seja, se tiver pelo menos um caminho para a folha V .
Teste de equivalncia semntica duas fbfs so equivalentes sse os seus OBBDs reduzidos so estruturalmente semelhantes.
Ausncia de variveis redundantes se o valor de uma fbf no depende de xi , ento
qualquer OBBD reduzido para no vai ter nenhum n para xi .
Algoritmo reduz
O algoritmo reduz percorre o grafo correspondente ao OBDD por nveis, comeando nos
ns terminais (folhas). Ao percorrer o grafo, atribui um identificador a cada OBDD de tal

60

LGICA PROPOSICIONAL OBDDS

modo que dois OBDDs representam a mesma fbf sse os seus identificadores so iguais,
ou seja, se id(o1 ) = id(o2 ).
1. Todas as folhas F recebem o identificador 0 e todas as folhas V recebem o identificador 1.
2. A atribuio de identificadores aos OBDDs do nvel i feita assumindo que o algoritmo atribuiu identificadores a todos os OBDDs do nvel i + 1. Dado um OBDD, o,
ao nvel i:
(a) Se id(neg(o)) = id(pos(o)), ento mudaId(o, id(neg(o))) pois a raiz deste OBDD
efectua um teste redundante e pode ser removida pela transformao R2.
(b) Se, entre os OBDDs que j tm identificador existe um oId tal que
(raiz(o) = raiz(oId )), id(neg(o)) = id(neg(oId )) e id(pos(o)) = id(pos(oId ))
ento mudaId(o, id(oId )), pois este OBDD corresponde a um OBDD redundante e pode ser removido pela transformao R3.
(c) Caso contrrio, o OBDD o recebe um novo identificador.
3. Aps a atribuio de identificadores a todos os sub-OBDDs, o OBDD resultante
compactado.
Algoritmo aplica
O algoritmo aplica recebe um operador lgico, op, e dois OBDDs reduzidos e compatveis
o e o , correspondentes s fbfs e , e devolve o OBDD reduzido correspondente
fbf ( op ). Nota: Para o aplica poder ser definido apenas para operadores binrios,
considera-se () ( V ), em que corresponde ao ou exclusivo.
A intuio subjacente a este algoritmo a seguinte:
1. Se ambos os ODBBs corresponderem a folhas, aplica-se a operao op aos correspondentes valores lgicos.
2. Caso contrrio, escolhe-se o smbolo de proposio com maior prioridade existente
em o e o e divide-se o problema em dois subproblemas mais simples, num dos
quais o predicado verdadeiro e no outro o predicado falso.
(a) Se o smbolo de proposio a raiz de ambos os OBDDs, o OBDD resultante
ter esse smbolo como raiz, o seu OBDD negativo resulta de aplicar recursivamente o algoritmo aos correspondentes OBDDs negativos e analogamente
para o seu OBDD positivo.
(b) Caso contrrio, o OBDD resultante ter esse smbolo de proposio como raiz,
o seu OBDD negativo resulta de aplicar recursivamente o algoritmo ao OBDD
negativo do OBDD que contm o smbolo e ao outro OBDD (que no contm
o smbolo), e analogamente para o OBDD positivo.
No fim, reduzir o OBBD resultante dos passos anteriores.
Notao para aplica(op, o , o ) = o( op )
o op o
=
o( op )

61
Exerccio 6.1
Considere as seguintes fbfs:
1. = A B C
2. = B C
3. = (A B) D
Partindo das suas rvores de deciso binrias, mostre os seus OBBDs reduzidos atravs
da aplicao do algoritmo reduz. Deve usar a ordenao [A, B, C, D] para os predicados.
Resposta:
1. = A B C
A

0
F

C
0

0
F

0
F

0
F

Nota: obtm-se um OBDD igual ao BDD reduzido da aula passada, mas com apenas uma
passagem pelo OBDD original. O mesmo vai acontecer na prxima alnea.
2. = B C
B
B

0
F

C
1

0
F

1
V

62

6
3. = (A B) D
A

0
F

D
1

0
F

D
1

D
1

0
F

LGICA PROPOSICIONAL OBDDS

0
F

1
V

Exerccio 6.2
Considerando os OBBDs reduzidos do exerccio anterior, combine-os usando o algoritmo
aplica (se isso for possvel) para obter os OBBDs reduzidos para as seguintes fbfs.

1.
2.
3.

Resposta:
possvel combinar os OBBDs porque eles so compatveis, isto , tm ordenaes que permitem
a sua combinao.

1. = (A B C) (B C)
Para determinar o OBDD de , vamos calcular aplica(, o , o ).

63
A
B
B
C

C
F

V
=
A
B

C C

F C
F

=
B

=
F
C
F

V
=
C

Reconstruindo o resultado atravs das chamadas recursivas ao aplica, obtm-se o OBBD:


A

Este OBDD (que por acaso igual ao OBBD de ), mais compacto do que o resultante da
combinao da aula passada, no tem ns repetidos e consequentemente no tem caminhos
inconsistentes.
2. = (A B C) (B C)

64

LGICA PROPOSICIONAL OBDDS

Para determinar o OBBD de , necessrio primeiro determinar o OBBD de , que


equivalente a V . Assim, para determinar o OBDD desta frmula, vamos calcular
aplica(, o , aplica(, o , V )).

Comecemos por calcular aplica(, o , V ).

B
C

V
V
=
B

V V

=
F

=
C

F V

V V

Reconstruindo o resultado atravs das chamadas recursivas ao aplica, obtm-se o OBBD:

Tal como seria de esperar, este OBDD corresponde ao BDD de trocando V por F e
vice-versa.

Para determinar o OBBD de podemos agora calcular aplica(, o , o ).

65
A
B
B
C

C
V

V
=
A
B

F C
V

B
C C

=
B

=
B
C

C
F
V

=
C

F
=
C

Reconstruindo o resultado atravs das chamadas recursivas ao aplica, obtm-se o OBBD:


A

3. = (B C) (A B) D
Para determinar o OBDD de , vamos calcular aplica(, o , o ).

66

LGICA PROPOSICIONAL OBDDS


A

B
B
C

V
F

=
A
B

D
C

C
F

=
B
C

D
V

=
C

V V
=

=
C

=
D

=
B

=
D

=
V

Reconstruindo o resultado atravs das chamadas recursivas ao aplica, obtm-se o OBBD:

67

Que ainda pode ser reduzido, uma vez que ambos os arcos do n A apontam para o mesmo
n B.
B

68

LGICA PROPOSICIONAL OBDDS

69

Lgica Proposicional SAT

Sumrio:
Sistema semntico da lgica proposicional
Algoritmos de propagao de marcas e de teste de ns
Algoritmo DP
Resumo:
Em SAT, pretende-se determinar se uma fbf satisfazvel, e em caso afirmativo determinar uma interpretao que a satisfaa (a testemunha). Os BDDs j encontram todas as
interpretaes que satisfazem uma fbf, o interesse de SAT que mais eficiente.
Para provar que uma frmula uma tautologia, negamos a frmula inicial e tentamos
chegar a uma contradio. Para provar que um argumento vlido, criamos uma frmula com a conjuno das premissas e a negao da concluso e tentamos chegar a uma
contradio.
Algoritmo de propagao de marcas
Este algoritmo muito eficiente (apresenta uma ordem de crescimento linear em funo
do nmero de smbolos de proposio existentes na fbf), mas no completo, porque no
funciona para frmulas da forma ( ).
Se as fbfs contiverem apenas conjunes e negaes, podemos usar um algoritmo de
propagao de marcas que propaga as restries atravs do DAG que representa a fbf.
1. Transformar a frmula para s conter conjunes e negaes:
traduzir para ( ),
traduzir para ( ) e
eliminar duplas negaes, traduzindo para .
2. Construir o DAG, partilhando as folhas e ns repetidos.
3. Propagar as marcas, usando o algoritmo de propagao de marcas e, se necessrio,
o algoritmo de teste de ns. Os inteiros que aparecem associados s marcas indicam
a ordem pela qual as marcas foram atribudas aos respectivos ns.
4. Verificar as marcas: se conseguirmos marcar o DAG sem contradies, propagar
as marcas das folhas para cima e verificar se realmente as marcas que colocmos
esto correctas. Se tudo estiver consistente, encontrmos a testemunha, que uma
interpretao que satisfaz a frmula inicial, e que corresponde s marcas que esto
nas folhas do DAG. Se encontrmos marcas contraditrias, a frmula inicial no
satisfazvel (ou contraditria).
Algoritmo de teste de ns
Quando o algoritmo de propagao de marcas no consegue marcar todos os ns de um
grafo, deve ser aplicado o algoritmo de teste de ns, que tem uma ordem de crescimento

70

LGICA PROPOSICIONAL SAT

cbica em relao ao nmero de smbolos proposicionais da fbf. Este algoritmo escolhe


um dos ns por marcar e testa esse n, marcando-o temporariamente com um valor lgico, efectuando a propagao desta marca temporria e determinando eventualmente
outras marcas temporrias. Se este teste no permitir resolver o problema, o mesmo n
testado com o valor lgico contrrio. Aps o teste de um n, vrias situaes podem
ocorrer:
1. Se todos os ns ficaram marcados com marcas consistentes, o algoritmo termina,
pois foi encontrada uma testemunha;
2. Se foi encontrada uma contradio, ento o n marcado permanentemente com a
marca contrria que foi usada no teste, e utilizado o algoritmo de propagao
de marcas;
3. Se nenhuma das situaes anteriores se verifica, so comparadas as marcas obtidas
nos dois testes do n; as marcas (temporrias) comuns aos dois testes so passadas
a permanentes, e propagadas pelo algoritmo de propagao de marcas.
Algoritmo DP
Este algoritmo menos eficiente do que o anterior (tem ordem de crescimento exponencial), mas correcto e completo.
O algoritmo DP serve para determinar se um determinado conjunto de clusulas satisfazvel e tal como a resoluo utiliza regras que transformam conjuntos de clusulas em
conjuntos de clusulas. Relativamente resoluo, tem a vantagem de permitir determinar uma interpretao que satisfaz o conjunto de clusulas.
Uma maneira de implementar o algoritmo DP usar a eliminao de baldes:
1. Transformar a frmula inicial para a forma clausal.
2. Estabelecer uma ordem para os smbolos de proposio existentes nas clusulas.
3. Construir um balde etiquetado para cada smbolo proposicional P , usando a ordenao estabelecida.
4. Adicionar cada clusula ao primeiro balde P cuja etiqueta aparea na clusula.
5. Processar os baldes por ordem, aplicando resoluo a todas as combinaes de clusulas que permitam eliminar a etiqueta do balde, e adicionando os resolventes obtidos a partir de cada balde ao primeiro balde que aparea abaixo cuja etiqueta
aparea no resolvente.
6. Se a frmula for satisfazvel, possvel determinar uma interpretao que a satisfaa, ou testemunha, fazendo com que a interpretao satisfaa todas as clusulas
de cada balde, de baixo para cima (ou seja, pela ordem inversa que foi dada).
Nota: Se gerar a clusula vazia em algum dos passos, a fbf no satisfazvel. Se gerar
uma tautologia ({A, . . . , A, . . .}), esta pode ser ignorada.

71
Exerccio 7.1
Considere a seguinte frmula: (A (B C)) ((B C) D). Crie o seu DAG,
efectue a propagao de marcas de modo a que a frmula seja verdadeira e apresente
uma testemunha.
Resposta:
Em primeiro lugar, preciso transformar a frmula para que contenha apenas conjunes e negaes:
(A (B C)) ((B C) D)
(A (B C)) ((B C) D)
(A (B C)) ((B C) D)
(A (B C)) ((B C) D)
(notar que (B C) comum a ambas as conjunes exteriores)

1:V

2:V

2:V

4:V
A

3:V

5:F

3:V

7:F
8:F

4:V
C

6:F

9:V

Esta frmula satisfazvel e uma testemunha I(A) = V , I(B) = F , I(C) = F e I(D) = V .

Exerccio 7.2
Considere a seguinte frmula: (A B) (B (B C)).
1. Crie o seu DAG. Efectue a propagao de marcas, de modo a que a frmula seja
verdadeira. O que pode concluir?

2. Faa o mesmo para a negao da frmula dada. Consegue encontrar uma testemunha usando apenas o algoritmo de propagao de marcas? E usando o algoritmo
de teste de ns? O que pode concluir?

Resposta:

1. A fbf j s tem conjunes e negaes, por isso podemos criar j o seu DAG.

72

LGICA PROPOSICIONAL SAT

1:V

2:V

3:V

2:V

3:V

4:F 5:V

Esta frmula no satisfazvel porque existem duas marcas contraditrias para B, ou seja,
a frmula corresponde a uma contradio.

2. Se tivessemos a negao da frmula inicial, ((A B) (B (B C))), o DAG seria o


seguinte. Neste caso, apenas seria possvel rotular os dois primeiros ns com o algoritmo
de propagao de marcas. Assim, seria necessrio usar o algoritmo de teste de ns para
tentar encontrar uma testemunha.
1:V

2:F

Usando o algoritmo de teste de ns para cada um dos ns, com V e com F , vo ficar sempre
ns por marcar. Assim, no vai ser possvel encontrar uma testemunha para esta fbf.
J agora, convm notar que, se esta frmula a negao de uma contradio, ento uma
tautologia e tem 8 testemunhas diferentes. Este exemplo mostra que o algoritmo de teste
de ns no completo.

Exerccio 7.3
Considere o seguinte DAG. Diga a que frmula corresponde. Efectue a propagao de
marcas, de modo a que a frmula seja verdadeira. Se for necessrio, use o algoritmo de
teste de ns. Se for possvel, apresente uma testemunha.

73

Resposta:
Este DAG corresponde frmula ((A B) (B C)) (C (D E)).

2:V

2:V

3:F

4:V

6:V

10:F

5:V

6:V

1:V

11:F

12T:V

5:V

8:V

7:F

9:V

13T:V 13T:V
E

Nota: as marcas 12T , e 13T so temporrias, pois so obtidas com o algoritmo de teste de ns,
supondo que este algoritmo pode ser usado para testar ns que no sejam folhas. Como todos
os ns ficaram marcados com marcas consistentes, o algoritmo termina, pois foi encontrada uma
testemunha.
Testemunha: I(A) = V , I(B) = F , I(C) = V , I(D) = V , I(E) = V .

Exerccio 7.4
Considere o seguinte conjunto de clusulas: {{A, B}, {B, A}, {B}}. Aplique o algoritmo DP e caso a frmula seja satisfazvel, indique uma testemunha.
1. Usando a ordem A B;
2. Usando a ordem B A.

74

LGICA PROPOSICIONAL SAT

Resposta:
1. Usando a ordem A B, temos os seguintes baldes iniciais:
bA : {A, B}, {A, B}
bB : {B}
Baldes aps aplicao do algoritmo:
bA : {A, B}, {B, A}
bB : {B}
{B}
Neste caso, a frmula correspondente ao conjunto de clusulas inicial no satisfazvel
porque no conseguimos encontrar nenhuma interpretao que satisfaa todas as clusulas
do balde de B.
2. Usando a ordem B A, temos os seguintes baldes iniciais:
bB : {A, B}, {B, A}, {B}
bA :
Baldes aps aplicao do algoritmo:
bB : {A, B}, {A, B}, {B}
bA :
{A}, {A}
Neste caso, a frmula correspondente ao conjunto de clusulas inicial no satisfazvel
porque no conseguimos encontrar nenhuma interpretao que satisfaa todas as clusulas
do balde de A.

Exerccio 7.5
Considere o seguinte conjunto de clusulas: {{D, B}, {C, A}, {A, D, C}, {C, E}, {E}}.
Aplique o algoritmo DP usando a ordem C E D A B. Caso a frmula seja satisfazvel, indique uma testemunha.
Resposta:
Baldes iniciais:
bC : {C, A}, {A, D, C}, {C, E}
bE : {E}
bD : {D, B}
bA :
bB :
Baldes aps aplicao do algoritmo:
bC : {C, A}, {A, D, C}, {C, E}
bE : {E}
bD : {D, B}
bA :
bB :

{A, D, E}

{A, D}

{B, A}

Notar que a primeira e a segunda clusulas do balde de C dariam origem ao resolvente {A, A, D},
que no foi adicionado a nenhum balde porque corresponde a uma tautologia.
Testemunha:
I(B) = V opo
I(A) = F opo
I(D) = F opo
I(E) = F necessariamente por causa de {E}
I(C) = F necessariamente por causa de {C, A} e I(A) = F

75
Exerccio 7.6
Considere a seguinte frmula ((A B) (A C)) (A D).
Determine se ela satisfazvel e se for indique uma testemunha, usando:
1. O algoritmo de propagao de marcas (e o algoritmo de teste de ns, se necessrio);
2. O algoritmo DP.
Resposta:
1. Primeiro, transformar a frmula para s conter conjunes e negaes:
((A B) (A C)) (A D)
((A B) (A C)) (A D)
((A B) (A C)) (A D)
((A B) (A C)) (A D)

1:V

2:V

3:F

5T:V

6T:V

6T:V
A

2:V

7T:F

8T:F

4:F
11T:F

9T:F
C

10T:V

12T:V

Marcas temporrias obtidas supondo que o algoritmo de teste de ns pode ser usado para
testar ns que no sejam folhas. Como todos os ns ficaram marcados com marcas consistentes, o algoritmo termina, pois foi encontrada uma testemunha.
Testemunha: I(A) = V , I(B) = F , I(C) = V , I(D) = V .
2. Transformar a frmula para a forma clausal:
((A B) (A C)) (A D)
((A B) (A C)) (A D)
{{A, B, C}, {A, D}}
Vamos escolher a ordem alfabtica para aplicar o algoritmo DP.
Baldes aps aplicao do algoritmo DP:
bA : {A, B, C}, {A, D}
bB :
bC :
bD :
Testemunha:
I(D) = V opo
I(C) = V opo
I(B) = F opo
I(A) = V opo
A testemunha encontrada a mesma que a da alnea anterior, mas poderia no ser. Havia
mais alternativas, por exemplo:

76

LGICA PROPOSICIONAL SAT

I(D) = V opo
I(C) = F opo
I(B) = F opo
I(A) = F necessariamente por causa de {A, B, C} e I(C) = F e I(B) = F
Podemos ainda dizer que a frmula satisfazvel porque conseguimos encontrar uma testemunha; falsificvel porque no caso de I(A) = V , I(B) = F , I(C) = F e I(D) = F a
frmula falsa; no tautolgica nem contraditria porque satisfazvel e falsificvel.

77

Lgica de Primeira Ordem Sistema de Deduo Natural

Sumrio:
Linguagem da lgica de primeira ordem
Regras do sistema de deduo natural da lgica de primeira ordem
Provas usando o sistema de deduo natural da lgica de primeira ordem
Resumo:
Linguagem
As funes so caracterizadas pelo seu domnio e contradomnio e usam-se para representar objectos. As funes de aridade zero (sem argumentos) so as constantes. Uma funo
representa uma correspondncia entre duas classes de entidades. Usa-se quando, dados
os seus argumentos, existe um e um s objecto que corresponde ao valor da funo.
Cada varivel pode ter como valor qualquer elemento do domnio da varivel, mas tem
que ser sempre o mesmo na mesma expresso. No entanto, variveis diferentes podem
ter o mesmo valor.
As relaes so representadas por predicados, que podem ser verdadeiros ou falsos. Uma
relao representa qualquer relao entre duas entidades, e cada objecto pode estar na
relao com zero ou mais objectos.
Os termos representam objectos sobre os quais queremos falar e correspondem a sintagmas nominais em lngua natural. Existem vrios tipos de termos: constantes (que correspondem a funes de zero argumentos), variveis, e aplicaes de funes ao nmero
apropriado de termos.
Um termo cho um termo que no contm variveis livres. Uma fbf que no contm
variveis uma frmula ch.
Uma fbf atmica corresponde apenas a um smbolo de predicado aplicado a termos, ou
seja, no tem smbolos lgicos.
Uma ocorrncia duma varivel diz-se ligada numa fbf se esta ocorrncia aparecer dentro
do domnio do quantificador que a introduz. Uma ocorrncia duma varivel diz-se livre
numa fbf se esta no estiver ligada.
Uma fbf que no contm variveis uma frmula ch. Uma fbf que no contm variveis
livres uma frmula fechada.
Uma substituio um conjunto finito de pares ordenados {t1 /x1 , . . . , tn /xn } em que cada
xi (1 i n) uma varivel individual e cada ti (1 i n) um termo. Numa substituio, todas as variveis individuais so diferentes e nenhuma das variveis individuais
igual ao termo correspondente. A cada um dos pares ti /xi chama-se uma ligao. Uma
substituio ch uma substituio na qual nenhum dos termos contm variveis. A aplicao da substituio s a uma fbf ( s) obtida a partir de substituindo todas as
ocorrncias livres de xi por ti . Isto significa que no se substituem variveis quantificadas.

78

LGICA DE PRIMEIRA ORDEM SISTEMA DE DEDUO NATURAL

Se for uma fbf e t for um termo, dizemos que t livre para x em se nenhuma ocorrncia
livre de x em ocorrer dentro do domnio do quantificador x (ou x) em que x uma
varivel em t. Informalmente, t ser livre para x em significa que se todas as ocorrncias
de x forem substitudas por t, nenhuma ocorrncia de uma varivel em t deixa de ser
livre em (t). Por exemplo, o termo g(y, f (b)) livre para x na fbf P (x, y), mas no o na
fbf y[P (x, y)]. Note-se, por definio, que um termo sem variveis sempre livre para
qualquer varivel em qualquer fbf.
Sistema de Deduo Natural
Usa todas as regras do sistema de deduo natural da lgica proposicional mais as regras
de introduo e eliminao de cada um dos quantificadores.
Tal como na lgica proposicional, para simplificar as provas permitimos que se usem
algumas das regras bsicas com mais graus de liberdade, mas sempre usando fbfs que
estejam no nvel de prova correcto.
No fim dos exerccios est um resumo das regras de inferncia do sistema de deduo
natural da lgica de primeira ordem.

79
Exerccio 8.1
Demonstre os seguintes argumentos, usando o sistema de deduo natural da lgica de
primeira ordem:
1. ({x[F (x)]}, x[F (x)])
2. ({x[F (x) G(x)], x[F (x) H(x)]}, x[G(x) H(x)])
Resposta:

1. ({x[F (x)]}, x[F (x)])


1
2
3

x[F (x)]
F (a)
x[F (x)]

Prem
E, 1
I, 2

2. ({x[F (x) G(x)], x[F (x) H(x)]}, x[G(x) H(x)])


1
2

x[F (x) G(x)]


x[F (x) H(x)]

Prem
Prem

x0 F (x0 ) H(x0 )

Hip

F (x0 )

E, 3

x[F (x) G(x)]

Rei, 1

F (x0 ) G(x0 )

E, 5

G(x0 )

E, (4, 6)

H(x0 )

E, 3

G(x0 ) H(x0 )

I, (7, 8)

10

x[G(x) H(x)]

I, 9

11

x[G(x) H(x)]

E, (2, (3, 10))

Exerccio 8.2
(JPM) Demonstre os seguintes teoremas, usando o sistema de deduo natural da lgica
de primeira ordem:
1. (F (a) x[F (x) G(x)]) G(a)
2. (x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)]
3. (x[F (x) H(x)] y[F (y)]) z[H(z)]
Resposta:

80

LGICA DE PRIMEIRA ORDEM SISTEMA DE DEDUO NATURAL

1. (F (a) x[F (x) G(x)]) G(a)


1

F (a) x[F (x) G(x)]

Hip

F (a)

E, 1

x[F (x) G(x)]

E, 1

F (a) G(a)

E, 3

G(a)

E, (2, 4)

(F (a) x[F (x) G(x)]) G(a)

I, (1, 5)

2. (x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)]


1

x[F (x) G(x)] x[G(x) H(x)]

Hip

x[F (x) G(x)]

E, 1

x[G(x) H(x)]

E, 1

x0

F (x0 )

Hip

x[F (x) G(x)]

Rei, 2

F (x0 ) G(x0 )

E, 5

G(x0 )

E, (4, 6)

x[G(x) H(x)]

Rei, 3

G(x0 ) H(x0 )

E, 8

10

H(x0 )

E, (7, 9)

F (x0 ) H(x0 )

11
12
13

I, (4, 10)

x[F (x) H(x)]

I, (4, 11)

(x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)]

I, (1, 12)

3. (x[F (x) H(x)] y[F (y)]) z[H(z)]


1

x[F (x) H(x)] y[F (y)]

Hip

x[F (x) H(x)]

E, 1

y[F (y)]

E, 1

x0 F (x0 )

Hip

x[F (x) H(x)]

Rei, 2

F (x0 ) H(x0 )

E, 5

H(x0 )

E, (4, 6)

z[H(z)]

I, 7

9
10

z[H(z)]

(x[F (x) H(x)] y[F (y)]) z[H(z)]

E, (3, (4, 8))


I, (1, 9)

81
Exerccio 8.3
Demonstre os seguintes teoremas, que correspondem a aplicaes das leis de De Morgan para os quantificadores, usando o sistema de deduo natural da lgica de primeira
ordem.

1. x[F (x)] x[F (x)]

2. x[F (x)] x[F (x)]

3. x[F (x)] x[F (x)]

4. x[F (x)] x[F (x)]

Resposta:

1. x[F (x)] x[F (x)]


1

x[F (x)]

Hip

x[F (x)]

x0

Hip

F (x0 )

Hip

x[F (x)]

I, 3

x[F (x)]

Rei, 2

F (x0 )

I, (3, (4, 5))

F (x0 )

E, 6

x[F (x)]

I, (3, 7)

x[F (x)]

Rei, 1

10

x[F (x)]

I, (2, (8, 9))

11

x[F (x)]

E, 10

12

2. x[F (x)] x[F (x)]

x[F (x)] x[F (x)]

I, (1, 11)

82

LGICA DE PRIMEIRA ORDEM SISTEMA DE DEDUO NATURAL


ou

x[F (x)]

Hip

x[F (x)]

x0 F (x0 )

Hip

x[F (x)]

Hip

Hip

x[F (x)]

Hip

x[F (x)]

Rei, 1

F (x0 )

E, 3

x0 F (x0 )

Hip

F (x0 )

Rei, 2

x[F (x)]

Rei, 2

I, (3, (4, 5))

F (x0 )

E, 5

E, (1, (2, 6))

x[F (x)]

Hip

F (x0 )

Rei, 6

F (x0 )

Rei, 4

6
7
8

x[F (x)]
x[F (x)]

x[F (x)] x[F (x)]

I, (1, 7)

x[F (x)]

10
11

x[F (x)]

E, (3, (4, 10))

12

x[F (x)]

Rei, 1

13
14

x[F (x)]

x[F (x)] x[F (x)]

3. x[F (x)] x[F (x)]

x[F (x)]

Hip

x0

F (x0 )

Hip

x[F (x)]

I, 2

x[F (x)]

Rei, 1

5
6
7

F (x0 )
x[F (x)]

I, (7, (8, 9))

x[F (x)] x[F (x)]

I, (2, (3, 4))


I, (2, 5)
I, (1, 6)

I, (2, (12, 11))


I, (1, 13)

83
4. x[F (x)] x[F (x)]
1

x[F (x)]

Hip

x[F (x)]

Hip

x0 F (x0 )

Hip

x[F (x)]

Hip

F (x0 )

E, 4

F (x0 )

Rei, 3

x[F (x)]

I, (4, (5, 6))

x[F (x)]

E, (2, (3, 7))

x[F (x)]

Rei, 1

10
11

x[F (x)]

x[F (x)] x[F (x)]

I, (2, (9, 8))


I, (1, 10)

Lgica de Primeira Ordem Sistema de Deduo Natural


Prem

E
n

Prem

Hip
n

n+1

...

Hip

o
..
.

..
.

r
..
.

..
.

Hip

Rep
n
..
.
m
Rei

..
.

n
..
.

m
I

Rep, n

n
..
.

..
.

..
.

ou

ou

Rei, n

Hip

I, (n, m)

n
..
.

..
.

m
..
.

..
.

n
..
.
m
..
.
k

..
.

..
.

n
..
.
m

..
.

n
..
.
m

..
.

n
..
.
m

..
.

n
..
.
m

..
.

Hip

l
E

..
.

..
.

E, (n, (o, p), (r, s))

E
n
..
.
m
..
.
k

Hip

I, (n, (m, k))

..
.

n
..
.
m

E, n

I
E, (n, m)
n
..
.

x0
..
.

m
I, (n, m)

(x0 )

m+1

x[(x)]

n
..
.
m

x[(x)]
..
.
(t)

n
..
.
m

(t)
..
.
x[(x)]

E, n
I
E, n

I, (n, m)

E, n

I, n

E
n
I, n

x[(x)]

m
..
.

x0 (x0 )
..
.

I, n

k+1

Hip

E, (n, (m, k))

85

Lgica de Primeira Ordem Sistema Semntico

Sumrio:
Sistema semntico da lgica de primeira ordem
Conceptualizao
Interpretao
Resumo:
Sistema Semntico
O sistema semntico especifica em que condies as fbfs da linguagem so verdadeiras ou
falsas.
Uma conceptualizao descreve formalmente uma situao ou um mundo e um triplo
(D, F, R) em que: D o conjunto das entidades que constituem o mundo sobre o qual
vamos falar, o chamado universo de discurso; F o conjunto das funes que podem ser
aplicadas s entidades de D; R o conjunto das relaes ou predicados que podem ser
aplicados s entidades de D.
Uma interpretao uma funo I cujo domnio so as entidades da linguagem e cujo
contradomnio so as entidades da conceptualizao. Por a interpretao ser uma funo
das entidades da linguagem para as entidades da conceptualizao, cada constante da
linguagem associada apenas a uma entidade da conceptualizao, mas vrias constantes da linguagem podem ser associadas mesma entidade da conceptualizao. Sendo
uma entidade da linguagem, habitual escrever I() para representar o resultado da
aplicao da interpretao I entidade .
Dada uma conceptualizao (D, F, R), uma interpretao I uma funo das entidades
da linguagem para D F R que deve obedecer s seguintes condies:
1. Cada constante individual fi0 associada com uma entidade do universo de discurso D;
2. Cada letra de funo fin associada a uma funo de F . Se fin uma letra de funo
com aridade n, correspondendo funo I(fin ) da conceptualizao, e se t1 , . . . , tn
so termos, ento fin (t1 , . . . , tn ) corresponde entidade I(fin )(I(t1 ), . . . , I(tn )) da
conceptualizao;
3. A cada letra de predicado Pin associada uma relao de R.
Dada uma fbf , e uma interpretao I, diz-se que I satisfaz nas seguintes condies:
1. Se for uma fbf atmica, ou seja, uma fbf da forma Pin (t1 , . . . , tn ), a interpretao
I satisfaz sse o n-tuplo (I(t1 ), . . . , I(tn )) for um elemento da relao I(Pin ).
2. A interpretao I satisfaz a fbf sse I no satisfizer .
3. A interpretao I satisfaz a fbf sse I satisfizer as duas fbfs e .

86

LGICA DE PRIMEIRA ORDEM SISTEMA SEMNTICO

4. A interpretao I satisfaz a fbf sse I satisfizer pelo menos uma das fbfs ou
.
5. A interpretao I satisfaz a fbf sse I no satisfizer ou I satisfizer .
6. A interpretao I satisfaz a fbf x[] sse, para toda a substituio {a/x}, em que
a qualquer constante individual, I satisfizer {a/x}.
7. A interpretao I satisfaz a fbf x[] sse existir uma substituio {a/x}, em que a
uma constante individual, tal que I satisfaz {a/x}.
Uma fbf verdadeira segundo a interpretao I sse I satisfizer ; caso contrrio, falsa
segundo a interpretao I.
Existem quatro tipos de proposies:
satisfazveis as que podem ser ou no ser verdadeiras, dependendo da interpretao escolhida, e so verdadeiras em pelo menos uma interpretao.
contraditrias as que nunca podem ser verdadeiras, independentemente da interpretao escolhida.
tautolgicas as que so sempre verdadeiras, independentemente da interpretao usada.
falsificveis as que podem ser ou no ser verdadeiras, dependendo da interpretao escolhida, e so falsas em pelo menos uma interpretao.
Uma interpretao que satisfaz todas as proposies de um conjunto de proposies
chama-se um modelo dessas proposies.
A lgica de primeira ordem correcta: se {1 , . . . , n } ` ento {1 , . . . , n } |= .
A lgica de primeira ordem completa: se {1 , . . . , n } |= ento {1 , . . . , n } ` .

87
Exerccio 9.1
Considere a seguinte conceptualizao C = (D, F, R):
D = {F, V, X, B, [, k}
F = {{(F, B), (V, [), (X, k)}}
R = {{(F), (V), (X)}, {(B), ([), (k)}, {(F, V), (F, X), (V, X)}}
e a seguinte interpretao:

I(eq) = F
I(es) = V
I(eo) = X
I(f q) = B
I(f s) = [
I(f o) = k
I(f lorDe) = {(F, B), (V, [), (X, k)}
I(Estrela) = {(F), (V), (X)}
I(F lor) = {(B), ([), (k)}
I(M enosP ontas) = {(F, V), (F, X), (V, X)}

Diga, justificando, quais das seguintes fbfs so satisfeitas por esta interpretao para esta
conceptualizao:
1. Estrela(eo)
2. Estrela(f lorDe(eq))
3. M enosP ontas(eo, eq)
4. Estrela(es) F lor(f q)
5. x[Estrela(x)]
6. x, y, z[(M enosP ontas(x, y) M enosP ontas(y, z)) M enosP ontas(x, z)]
Resposta:
1. A fbf Estrela(eo) satisfeita sse (I(eo)) I(Estrela), ou seja, sse (X) {(F), (V), (X)}, o
que se verifica e por isso a fbf satisfeita.
2. A fbf Estrela(f lorDe(eq)) satisfeita sse (I(f lorDe)(I(eq))) I(Estrela), ou seja, sse
(I(f lorDe)(F)) I(Estrela), ou seja, sse (B) {(F), (V), (X)} o que no se verifica e
por isso a fbf no satisfeita.
3. A fbf M enosP ontas(eo, eq) satisfeita sse (I(eo), I(eq)) I(M enosP ontas), ou seja, sse
(X, F) {(F, V), (F, X), (V, X)}, o que no se verifica e por isso a fbf no satisfeita.
4. A fbf Estrela(es) F lor(f q) satisfeita sse Estrela(es) no for satisfeita ou F lor(f q)
for satisfeita, ou seja, sse (I(es))
/ I(Estrela) ou (I(f q)) I(F lor), ou seja, sse (V)
/
{(F), (V), (X)} ou (B) {(B), ([), (k)} a primeira condio no se verifica, mas a segunda
verifica-se, logo a disjuno satisfeita.

88

LGICA DE PRIMEIRA ORDEM SISTEMA SEMNTICO

5. A fbf x[Estrela(x)] satisfeita sse existir pelo menos uma substituio {a/x}, para uma
constante a, tal que I satisfaz Estrela(a). Vamos considerar a = eq. Neste caso Estrela(eq)
satisfeita sse (I(eq)) I(Estrela), ou seja, sse (F) {(F), (V), (X)}, o que se verifica e
por isso a fbf inicial satisfeita.
6. A fbf x, y, z[(M enosP ontas(x, y) M enosP ontas(y, z)) M enosP ontas(x, z)] satisfeita
sse para toda a substituio {a/x, b/y, c/z}, em que a, b, c so constantes individuais, I satisfizer ((M enosP ontas(x, y) M enosP ontas(y, z)) M enosP ontas(x, z)) {a/x, b/y, c/z}.
Uma implicao satisfeita sse o seu antecedente no for satisfeito ou o seu consequente
for satisfeito. Neste caso, o antecedente nunca satisfeito a no ser para a substituio
{eq/x, es/y, eo/z}, por isso necessrio saber se I satisfaz M enosP ontas(eq, eo), ou seja,
se (I(eq), I(eo)) I(M enosP ontas), ou seja, se (F, X) {(F, V), (F, X), (V, X)}, o que se
verifica e por isso a implicao satisfeita. Como no nico caso em que o antecedente satisfeito o consequente tambm , qualquer que seja a substituio considerada, a fbf inicial
satisfeita.

Exerccio 9.2
Considere a seguinte conceptualizao C = (D, F, R):
D = {I, V, X, C, D, M, 1, 5, 10, 100, 500, 1000}
F = {{(I, 1), (V, 5), (X, 10), (C, 100), (D, 500), (M, 1000)}}
R = {{(X), (C), (D), (M )}, {(I), (V )}}
e a seguinte interpretao:

I(um) 7 I
I(cinco) 7 V
I(dez) 7 X
I(cem) 7 C
I(quinhentos) 7 D
I(mil) 7 M
I(valor) 7 {(I, 1), (V, 5), (X, 10), (C, 100), (D, 500), (M, 1000)}
I(P ar) 7 {(X), (C), (D), (M )}
I(Impar) 7 {(I), (V )}

1. Diga, justificando, quais das seguintes fbfs so satisfeitas por esta interpretao
para esta conceptualizao:
(a) P ar(cem)
(b) Impar(valor(cinco))
(c) P ar(cem) Impar(dez)

(d) x[P ar(x)]

(e) x[Impar(valor(x))]

2. Diga que alteraes faria na conceptualizao para os resultados serem os intuitivamente esperados. Que mudanas que isso implicaria na interpretao?
3. Diga, justificando, se o seguinte poderia ser uma interpretao para esta conceptualizao. Se no puder, indique todas as razes para no poder.
I(a) 7 X

89

I(a) 7 10
I(b) 7 100
I(c) 7 100
I(d) 7 20
I(f 1) 7 {(I, 1), (V, 5), (V, 10), (C, 100)}
I(R1) 7 {(X), (C), (D)}

Resposta:
1. Que fbfs so satisfeitas:
(a) A fbf P ar(cem) satisfeita sse (I(cem)) I(P ar), ou seja, sse (C) {(X), (C), (D), (M )},
o que se verifica e por isso a fbf satisfeita.
(b) A fbf Impar(valor(cinco)) satisfeita sse (I(valor)(I(cinco))) I(Impar), ou seja, sse
(I(valor)(V )) I(Impar), ou seja, sse (5) {(I), (V )}, o que no se verifica e por isso
a fbf no satisfeita.
(c) A fbf P ar(cem) Impar(dez) satisfeita sse P ar(cem) no for satisfeita ou Impar(dez)
for satisfeita, ou seja, sse (I(cem))
/ I(P ar) ou (I(dez)) I(Impar), ou seja, sse
(C)
/ {(X), (C), (D), (M )} ou (X) {(I), (V )}. A primeira condio verifica-se e a
segunda no se verifica e por isso a fbf no satisfeita.
(d) A fbf x[P ar(x)] satisfeita sse para toda a substituio {a/x}, em que a qualquer
constante individual, I satisfizer P ar(x) {a/x}, ou seja, sse (I(a)) I(P ar) para
qualquer constante. Como (I(um))
/ I(P ar), a fbf no satisfeita.
(e) A fbf x[Impar(valor(x))] satisfeita sse existir uma substituio {a/x}, em que a
uma constante individual, tal que I satisfaz Impar(valor(a)). Como o resultado de
aplicar a funo valor a qualquer constante um nmero rabe e no h nenhum
tuplo com nmeros rabes em I(Impar), a fbf no satisfeita.

2. Para os resultados serem os intuitivamente esperados, alterava as interpretaes de P ar e


Impar: I(P ar) 7 {(X), (C), (D), (M ), (10), (100), (500), (1000)} e I(Impar) 7 {(I), (V ), (1), (5)},
fazendo tambm as correspondentes alteraes na conceptualizao.
3. No poderia ser uma interpretao para esta conceptualizao por cinco razes:
a mesma constante da linguagem (a) tem duas interpretaes diferentes, o que no
pode acontecer;
a constante d tem como valor 20, que no faz parte de D;
f 1 no uma funo, pois tem 2 tuplos em que o primeiro elemento V ;
f 1 no corresponde a nenhum dos elementos da conceptualizao;
a interpretao de R1 no corresponde a nenhuma das relaes da conceptualizao,
pois falta-lhe o ltimo tuplo (M ) para corresponder primeira relao da conceptualizao.

Exerccio 9.3
Considere a relao binria EDivisorDe no domnio {1, 2, 3, 4, 5, 6}.
1. Apresente o conjunto de todos os pares que esto na relao para o domnio dado.
2. Diga, justificando, se a relao : reflexiva, simtrica, ou transitiva.
Resposta:
1. O conjunto de pares o seguinte:
{(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 2), (2, 4), (2, 6), (3, 3), (3, 6), (4, 4), (5, 5), (6, 6)}.

90

LGICA DE PRIMEIRA ORDEM SISTEMA SEMNTICO

2. Uma relao reflexiva sse satisfizer x, y[Rel(x, y) (Rel(x, x) Rel(y, y))]. Nota: a definio no poderia ser x[Rel(x, x)], pois era demasiado forte, teria que se aplicar tambm
aos objectos que no fazem parte do domnio da relao; com este antecedente, garante-se
que reflexiva para os objectos do domnio, mas no tem que ser para os outros. A relao
do enunciado reflexiva, pois qualquer nmero divisor de si prprio.
Uma relao simtrica sse satisfizer x, y[Rel(x, y) Rel(y, x)]. Esta relao no simtrica porque possvel encontrar a e b tais que EDivisorDe(a, b) mas EDivisorDe(a, b),
por exemplo se a = 1 e b = 2.
A relao transitiva pois x, y, z[(EDivisorDe(x, y)EDivisorDe(y, z)) EDivisorDe(x, z)].
Neste caso, podemos ver para todos os casos que tornam o antecedente da implicao verdadeiro, que o consequente tambm vai ser verdadeiro. Por outras palavras, no conseguimos encontrar um contra-exemplo que torne a definio de transitividade falsa.

Exerccio 9.4
Considere a seguinte f bf : x, y[(A(x)B(x, y)) A(y)]. Diga se ela verdadeira ou falsa
para cada uma das seguintes interpretaes. Se for falsa, apresente um contra-exemplo.
1. O domnio dos nmeros naturais, onde A(x) interpretado como x par e B(x, y)
interpretado como x igual a y.
2. O domnio dos nmeros naturais, onde A(x) interpretado como x par e B(x, y)
interpretado como x um inteiro divisor de y.
3. O domnio dos nmeros naturais, onde A(x) interpretado como x par e B(x, y)
interpretado como x um inteiro mltiplo de y.
4. O domnio dos booleanos {verdadeiro, f also}, onde A(x) interpretado como x
falso e B(x, y) interpretado como x igual a y.
Resposta:
1. O domnio dos nmeros naturais, onde A(x) interpretado como x par e B(x, y)
interpretado como x igual a y.
verdadeira.
2. O domnio dos nmeros naturais, onde A(x) interpretado como x par e B(x, y)
interpretado como x um inteiro divisor de y.
verdadeira.
3. O domnio dos nmeros naturais, onde A(x) interpretado como x par e B(x, y)
interpretado como x um inteiro mltiplo de y.
falsa. Por exemplo, x = 6 e y = 3: 6 par, mltiplo de 3, mas 3 no par.
4. O domnio dos booleanos {verdadeiro, f also}, onde A(x) interpretado como x falso e
B(x, y) interpretado como x igual a y.
verdadeira.

Exerccio 9.5
Considere a seguinte conceptualizao:
Universo de discurso = {_, `}
Conjunto de funes = {{(_, `)}, {(_, _), (`, _)}}
Conjunto de relaes = {{(_, _), (_, `), (`, `)}}

91
e o seguinte conjunto de frmulas: {P1 (f1 (a), b), P1 (f2 (a), b) P1 (b, f1 (a))}.
Diga se a seguinte interpretao modelo deste conjunto de frmulas:

I(a) 7 _
I(b) 7 `
I(f1 ) 7 {(_, `)}
I(f2 ) 7 {(_, _), (`, _)}
I(P1 ) 7 {(_, _), (_, `), (`, `)}

Resposta:
Uma interpretao modelo de um conjunto de frmulas sse satisfizer todas as frmulas desse
conjunto.
A interpretao satisfaz P1 (f1 (a), b) sse (I(f1 )(I(a)), I(b)) I(P1 ), ou seja, sse (I(f1 )(_), I(b))
I(P1 ), ou seja, sse (`, `) {(_, _), (_, `), (`, `)}, o que se verifica, logo esta fbf satisfeita por
esta interpretao.
A interpretao satisfaz P1 (f2 (a), b) P1 (b, f1 (a)) sse no satisfizer P1 (f2 (a), b) ou satisfizer
P1 (b, f1 (a)). Como (I(f2 )(I(a)), I(b)) = (_, `) {(_, _), (_, `), (`, `)}, satisfaz o antecedente,
logo, s satisfaz a implicao se tambm satisfizer o consequente. Como (I(b), I(f1 )(I(a))) =
(`, `) {(_, _), (_, `), (`, `)}, tambm satisfaz o consequente, logo satisfaz a implicao.
Como a interpretao satisfaz todas as frmulas do conjunto, modelo do conjunto.

Exerccio 9.6
Considere a seguinte conceptualizao C = (D, F, R):
D = {, , , }
F = {{(, )}, {( , )}, {( , , ), ( , , )}}
R = {{(, )}, {(, )}, {(), ( ), (), ( )}}
e a seguinte interpretao:

I(a) = 
I(b) =
I(c) = 
I(d) =
I(f 1) = {(, )}
I(f 2) = {( , )}
I(R1) = {(, )}
I(R2) = {(, )}
I(R3) = {(), ( ), (), ( )}

1. Diga, justificando, se esta interpretao para esta conceptualizao um modelo do


seguinte conjunto de frmulas: {x, y[R3(x)R1(x, f 2(y))], R2(f 1(a), d)R3(b)}.
2. Explique porque que o seguinte no pode ser uma interpretao para esta conceptualizao, mencionando todos os erros que foram cometidos.

92

LGICA DE PRIMEIRA ORDEM SISTEMA SEMNTICO

I(a) = 
I(b) = 
I(c) = 
I(c) =
I(d) = ~
I(f 1) = {(, ), (, )}
I(R1) = {(), (), ( )}

Resposta:
1. Uma interpretao para uma conceptualizao um modelo de um conjunto de frmulas
se satisfizer todas as frmulas desse conjunto, isto , se as tornar todas verdadeiras.
A fbf x, y[R3(x) R1(x, f 2(y))] satisfeita sse existir uma substituio {c1/x, c2/y},
em que c1 e c2 so constantes individuais, tal que I satisfaz R3(c1) R1(c1, f 2(c2)).
Sejam c1 = a e c2 = b. Neste caso, a fbf R3(a) R1(a, f 2(b)) satisfeita sse (I(a))
I(R3) e (I(a), I(f 2)(I(b))) I(R1), ou seja, sse () {(), ( ), (), ( )} e (, )
{(, )}. Como ambas as condies se verificam, a conjuno satisfeita para esta
substituio e a frmula quantificada existencialmente tambm satisfeita.
A fbf R2(f 1(a), d) R3(b) satisfeita sse R2(f 1(a), d) for satisfeita ou R3(b) for
satisfeita. A fbf R2(f 1(a), d) satisfeita sse (I(f 1)(I(a)), I(d)) I(R2), ou seja, sse
(, ) {(, )}, o que se verifica. Como um dos elementos da disjuno satisfeito,
a disjuno inicial satisfeita.
Como ambas as fbfs so satisfeitas, esta interpretao para esta conceptualizao modelo
deste conjunto de frmulas.
2. No pode ser uma interpretao para esta conceptualizao porque:

A constante c tem duas interpretaes diferentes.


A interpretao da constante d no pertence ao domnio da conceptualizao.
A funo f 1 tem dois resultados diferentes quando o seu argumento .
A interpretao da funo f 1 no pertence ao conjunto de funes da conceptualizao.
A interpretao da relao R1 no pertence ao conjunto de relaes da conceptualizao.

93

10

Lgica de Primeira Ordem Representao


11

Sumrio:

2 Lgica
clssica
Representao
Representao
em
lgica
de primeira ordem
Resumo:
Resumo:
NaRepresentao
Representaode
deConhecimento
Conhecimentoaapassagem
passagemdo
domundo
mundoreal
realpara
paraaabase
basede
deconheconheNa
cimento

feita
por
seres
humanos.
Apenas
a
inferncia

feita
pelos
computadores.
cimento feita por seres humanos. Apenas a inferncia que feita pelos computadores.
Mundo

Modelo

abstrao

Base de Conhecimento

representao

inferncia computacional

Do ponto de vista da Representao de Conhecimento, as fbfs que interessam so as satisfazveis


e falsificveis,
pois so
que
satisfazem
Um
argumento
representado
por as
umque
parpermitem
(, ), emseparar
que os
ummundos
conjunto
deas
proposies
dos que noe
assatisfazem,
e assim
ajudar a definir o mundo que nos interessa. As tau(premissas)
uma proposio
(concluso).
tolgicas so usadas como passos intermdios nas provas, servem para fazer dedues.
As contraditrias
no ser
interessam
nunca,
pois nunca podem ser verdadeiras em nenhum
Uma
proposio pode
verdadeira
ou falsa.
mundo.
Um argumento vlido quando impossvel ter todas as premissas verdadeiras e a conNa Representao
dequando
Conhecimento
lgica: das premissas tambm so modelos da
cluso
falsa, ou seja,
todos osem
modelos
concluso. invlido caso contrrio.
As funes usam-se para representar objectos do domnio.
Quando ( ! ), o argumento (, ) derivvel (em ingls provable).
As funes de aridade zero chamam-se constantes e representam objectos indiQuando ( viduais.
|= ), o argumento
) vlido.
Ex: Dumbo,(N,
emo.
As funes de aridade maior que zero representam correspondncias entre enUsam-se predicados
para
representar
as proposies,
quecaudaDe(Dumbo),
podem ser verdadeiras
ou falsas.
tidades, que
so
obrigatoriamente
nicas. Ex:
paiDe(N
emo).
No
se
poderia
usar
apenas
uma
funo
para
representar
uma
das
patas
do
Usam-se funes para representar objectos.
Dumbo; ou usvamos uma funo para cada pata ou uma funo que tivesse
todas as patas do Dumbo.
Existem trscomo
tiposvalor
de proposies:
As variveis representam objectos do domnio e devem estar quantificadas existen vlidas
ou
as universalmente.
que so sempre verdadeiras, independentemente da interpretao
cialmente
usada.
Os predicados representam relaes entre objectos ou classes de objectos e podem ser
verdadeiros
ouas
falsos.
Ex: Elef
ante(Dumbo),
P eixe(N emo),
M aior(Dumbo,
N emo).
satisfazveis
que podem
ser
ou no ser verdadeiras,
dependendo
da interpre-

tao escolhida.
Alguns documentos com exerccios e resumos sobre representao do conhecimento:
no satisfazveis as que nunca podem ser verdadeiras, independentemente da
interpretao escolhida.
Exercises for the practical classes of Knowledge Representation and Reasoning:
http://web.ist.utl.pt/acardoso/docs/2012-rcr-guiaPraticas.pdf
Do ponto
de vistapara
da RC,
as queprticas
interessam
so as satisfazveis,
pois so as que permitem
Exerccios
as aulas
de Representao
do Conhecimento
separarhttp://web.ist.utl.pt/acardoso/docs/2007-rc-guiaPraticas.pdf
os mundos que as satisfazem dos que no as satisfazem, e assim ajudar a definir
o mundo
que nos
interessa.
As vlidasdeso
usadas como
passos intermdios
nas pro Solues
de alguns
dos exerccios
Exerccios
de Representao
do Conhecimento
vas, servem
- Vol I para fazer dedues. As no satisfazveis no interessam nunca, pois nunca
podemhttp://web.ist.utl.pt/acardoso/docs/2007-rc-exerciciosResolvidos.
ser verdadeiras em nenhum mundo.
pdf
Uma conceptualizao
um triplo (D, F, R), em que D um conjunto de entidades, F um
conjunto de funes e R um conjunto de relaes.
Vantagens da utilizao da lgica como formalismo de Representao do Conhecimento:

+ Elevado poder expressivo

94

10

LGICA DE PRIMEIRA ORDEM REPRESENTAO

Exerccio 10.1
Represente em lgica de primeira ordem cada uma das seguintes frases:
1. O Miau um gato castanho.
2. Os gatos so animais.
3. Nenhum gato um co.
4. Nem todos os gatos gostam de leite.
5. Os gatos no gostam de ces.
(Nenhum gato gosta de nenhum co.)
6. Existe um co de quem todos os gatos gostam.
(Todos os gatos gostam do mesmo co.)
7. Todos os gatos gostam de algum co.
(Pode ser um co diferente para cada gato.)
8. Se algum gato gostar do Rui, ento o Miau tambm gosta do Rui.
9. O Miau um siams ou um bobtail, mas no os dois simultaneamente.
(No pode usar o ou exclusivo.)
10. A cauda do Miau comprida.
11. Todos os gatos tm cauda.
Resposta:
1. O Miau um gato castanho.
Gato(M iau) Castanho(M iau)
2. Os gatos so animais.
x[Gato(x) Animal(x)]
3. Nenhum gato um co.
x[Gato(x) Cao(x)]
ou
(x[Gato(x) Cao(x)])
4. Nem todos os gatos gostam de leite.
x[Gato(x) Gosta(x, Leite)]
ou
x[Gato(x) Gosta(x, Leite)]
5. Os gatos no gostam de ces.
x, y[(Gato(x) Cao(y)) Gosta(x, y)]
ou
x, y[Gato(x) Cao(y) Gosta(x, y)]
6. Existe um co de quem todos os gatos gostam.
x[Cao(x) y[Gato(y) Gosta(y, x)]]
7. Todos os gatos gostam de algum co.
x[Gato(x) y[Cao(y) Gosta(x, y)]]
8. Se algum gato gostar do Rui, ento o Miau tambm gosta do Rui.
x[Gato(x) Gosta(x, Rui)] Gosta(M iau, Rui)

95
9. O Miau um siams ou um bobtail, mas no os dois simultaneamente.
(Siames(M iau) Bobtail(M iau)) (Siames(M iau) Bobtail(M iau)) ou
(Siames(M iau) Bobtail(M iau)) (Siames(M iau) Bobtail(M iau))
Se representar usando implicaes, ateno contrapositiva.
Ver a discusso da soluo do exerccio 2.3.1 dos exerccios resolvidos de Representao do
Conhecimento, acerca do BolaDeNeve, que co ou gato, mas no as duas coisas simultaneamente.
10. A cauda do Miau comprida.
Comprida(caudaDe(M iau))
11. Todos os gatos tm cauda.
x[Gato(x) T em(x, caudaDe(x))]

Exerccio 10.2
Suponha que N (x) representa que x um nmero, P (x) representa que x par,
I(x) representa que x mpar e M (x, y) representa que x maior que y. Traduza
as seguintes fbfs para linguagem comum. Se alguma delas no fizer sentido, explique
porqu.
1. x[N (x)]
2. x[I(x) N (x)]
3. x[N (x) P (x)]
4. x[N (x) P (x)]
5. x[I(x) P (x)]
6. x[P (x) y[I(y) M (y, x)]]
7. x[P (x) y[(P (y) x 6= y) M (y, x)]]
8. x[P (x) N (x)]
Resposta:
1. x[N (x)]
Existe pelo menos um nmero.
2. x[I(x) N (x)]
Todos os mpares so nmeros.
3. x[N (x) P (x)]
Nem todos os nmeros so pares.
4. x[N (x) P (x)]
Existe pelo menos um nmero que no par, ou nem todos os nmeros so pares, como a
anterior.
5. x[I(x) P (x)]
Os mpares no so pares.
6. x[P (x) y[I(y) M (y, x)]]
Para qualquer par, existe pelo menos um mpar que maior do que ele.
7. x[P (x) y[(P (y) x 6= y) M (y, x)]]
Existe um par que menor do que todos os outros pares.

96

10

LGICA DE PRIMEIRA ORDEM REPRESENTAO

8. x[P (x) N (x)]


Esta proposio no tem utilidade, pois basta existir um elemento do domnio que no
satisfaa o predicado P (x) para ela ser verdadeira. Est aqui porque um erro que aparece
muito frequentemente nos testes.

97

11

Lgica de Primeira Ordem Resoluo

Sumrio:
Unificao e resoluo em lgica de primeira ordem
Resumo:
Passos da passagem para a forma clausal na LPO:
1. Eliminao de : substituir todas as ocorrncias de por .
2. Reduo do domnio de : eliminao da dupla negao , utilizao das
leis de De Morgan ( ) ( ), ( ) ( ) e utilizao das
segundas leis de De Morgan x[(x)] x[(x)] e x[(x)] x[(x)].
3. Normalizao de variveis: mudar o nome de algumas das variveis de modo a que
cada ocorrncia de um quantificador esteja associada a um nico nome de varivel.
4. Eliminao dos quantificadores existenciais: substituir todas as variveis quantificadas existencialmente por constantes ou funes de Skolem, consoante no estejam ou estejam no mbito de quantificadores universais.
5. Converso para a forma Prenex normal: mover todas as ocorrncias de quantificadores universais para a esquerda da fbf.
6. Eliminao da quantificao universal: uma vez que as fbfs de origem no tinham
variveis livres, todas as variveis existentes na fbf aps os passos anteriores so
quantificadas universalmente, e como a ordem por que aparecem os quantificadores universais no importante, podemos eliminar a ocorrncia explcita dos
quantificadores universais e assumir que todas as variveis so quantificadas universalmente.
7. Obteno da forma conjuntiva normal: transformar a frmula numa conjuno de
disjunes usando a propriedade distributiva da disjuno ( ) ( )
( ).
8. Eliminao de : transformar a frmula num conjunto de clusulas (ou disjunes).
9. Eliminao de : transformar cada clusula num conjunto de literais.
Uma substituio um conjunto finito de pares ordenados {t1 /x1 , . . . , tn /xn } em que cada
xi uma varivel individual e cada ti um termo. Numa substituio, todas as variveis
individuais so diferentes e nenhuma das variveis individuais igual ao termo correspondente.
A unificao o processo que permite determinar se duas fbfs atmicas podem ser tornadas iguais atravs de substituies apropriadas para as suas variveis livres.
Sendo s1 = {t1 /x1 , . . . , tn /xn } e s2 = {u1 /y1 , . . . , um /ym } duas substituies, a composio
das substituies s1 e s2 , representada por s1 s2 , a substituio s tal que para qualquer
fbf , s = ( s1 ) s2 . A composio das substituies s1 e s2 obtm-se aplicando s2

98

11

LGICA DE PRIMEIRA ORDEM RESOLUO

aos termos de s1 e adicionando a s1 os pares de s2 que contm variveis que no ocorrem


em s1 . Ou seja, s1 s2 obtido do conjunto {t1 s2 /x1 , . . . , tn s2 /xn , u1 /y1 , . . . , um /um },
removendo todos os elementos ti s2 /xi tais que ti s2 = xi e todos os elementos uj /yj tais
que yj {x1 , . . . , xn }. A composio de substituies associativa mas no comutativa.
Um conjunto de fbfs atmicas {1 , . . . , m } diz-se unificvel sse existir uma substituio
s que torna idnticas todas as fbfs do conjunto, ou seja, sse existir uma substituio s tal
que 1 s = . . . = m s. Neste caso, a substituio s diz-se o unificador do conjunto
{1 , . . . , m }. Se s um unificador do conjunto {1 , . . . , m }, ento {1 s, . . . , m s} =
{1 s}.
Dado um conjunto de fbfs atmicas {1 , . . . , m }, define-se o unificador mais geral ou mgu
deste conjunto como sendo um unificador, s, de {1 , . . . , m }, com a seguinte propriedade: se s1 for um unificador de {1 , . . . , m }, ento existe uma substituio s2 tal que
s = s1 s2 . Uma propriedade importante do unificador mais geral o facto de ser nico
(excepto para variantes alfabticas de variveis).
Resoluo com clusulas com variveis Sejam e duas clusulas, e dois literais
tais que e , e e so unificveis. Seja s o unificador mais geral de e
. Ento, usando o princpio da resoluo, podemos inferir a clusula (( {}) (
{})) s. A clusula obtida chamada o resolvente das clusulas e .
Com a utilizao de clusulas com variveis, a resoluo pode ser utilizada para responder a dois tipos de questes, questes do tipo verdadeiro ou falso e questes do tipo
quem ou qual. As questes do tipo verdadeiro ou falso pretendem saber se uma dada
clusula pode ser derivada de um conjunto de clusulas. Nas questes do tipo quem ou
qual no estamos interessados em saber se uma dada proposio consequncia de um
conjunto de clusulas, mas sim quais so as instncias que fazem com que uma fbf que
contm variveis livres seja consequncia de um conjunto de clusulas. De modo a fornecer uma resposta a esta questo, utilizando resoluo, para alm de necessitarmos de
transformar as premissas para a forma clausal, teremos que adicionar uma nova fbf que
especifica quais so as respostas desejadas.
Tal como na lgica proposicional, a resoluo correcta mas no completa, no sentido
em que no existe a garantia de derivar todas as clusulas que so consequncias lgicas
de um conjunto de clusulas. No entanto, a resoluo completa quanto refutao. Por
esta razo que normalmente as provas em resoluo so feitas por reduo ao absurdo.

99
Exerccio 11.1
Utilize o algoritmo de unificao para determinar quais dos seguintes conjuntos de fbfs
so unificveis, e, no caso de o serem, determine o unificador mais geral. Mostre todos
os passos intermdios usados nos clculos.
1. {P (a, x, x), P (a, b, c)}
2. {P (a, x, f (x)), P (x, y, z)}
3. {P (x, y), Q(x, y)}
4. {Colocou(x1 , SenhorAneis, y1 ), Colocou(M aria, x2 , topo(y2)),
Colocou(x3 , SenhorAneis, topo(M esaAzul))}
Resposta:
1. {P (a, x, x), P (a, b, c)}
Conjunto de fbfs
{P (a, x, x), P (a, b, c)}
{P (a, b, b), P (a, b, c)}

Conj. Desacordo
{x, b}
{b, c}

Substituio
{b/x}
no unificveis

2. {P (a, x, f (x)), P (x, y, z)}


Conjunto de fbfs
Conj. Desacordo
{P (a, x, f (x)), P (x, y, z)} {a, x}
{P (a, a, f (a)), P (a, y, z)} {a, y}
{P (a, a, f (a)), P (a, a, z)} {f (a), z}
{P (a, a, f (a))}
O unificador mais geral {f (a)/z, a/y, a/x}.
3. {P (x, y), Q(x, y)}
Conjunto de fbfs
{P (x, y), Q(x, y)}

Conj. Desacordo
{P, Q}

Substituio
{a/x}
{a/y}
{f (a)/z}

Substituio
no unificveis

4. {Colocou(x1 , SenhorAneis, y1 ), Colocou(M aria, x2 , topo(y2)), Colocou(x3 , SenhorAneis, topo(M esaAzul))}


Conjunto de fbfs
Conj. Desacordo
Substituio
{C(x1 , SA, y1 ), C(M, x2 , t(y2)), C(x3 , SA, t(M A))}
{x1 , M, x3 }
{M/x1 }, {M/x3 }
{C(M, SA, y1 ), C(M, x2 , t(y2)), C(M, SA, t(M A))}
{SA, x2 }
{SA/x2 }
{C(M, SA, y1 ), C(M, SA, t(y2)), C(M, SA, t(M A))} {y1 , t(y2 ), t(M A)} {t(y2 )/y1 }
{C(M, SA, t(y2 )), C(M, SA, t(M A))}
{y2 , M A}
{M A/y2 }
{C(M, SA, t(M A))}
O unificador mais geral {M A/y2 , t(M A)/y1 , SA/x2 , M/x1 , M/x3 }.
Nota1: Na primeira linha da tabela foram aplicados dois passos do algoritmo de unificao.
Nota2: No UMG t(M A)/y1 e no t(y2 )/y1 por causa da composio de substituies.
Uma forma de verificar se o unificador mais geral est bem calculado saber que quando se aplica
essa substituio a cada uma das fbfs do conjunto inicial deve ter como resultado, em apenas um
passo, a fbf do conjunto final.

Exerccio 11.2
Passe as seguintes fbfs da lgica de primeira ordem para a forma clausal.
1. x[A(x)] x, y[B(x) w[C(x, y, w)] w[D(w, y)]] x[E(x) F (x)]
2. x[(A(x) y[B(y) C(x, y)]) D(x)]

100

11

LGICA DE PRIMEIRA ORDEM RESOLUO

3. x[A(x) y[B(x, y) C(y)]] x[D(x)]


Resposta:
1. x[A(x)] x, y[B(x) w[C(x, y, w)] w[D(w, y)]] x[E(x) F (x)]
(a) Eliminao de : j est.

(b) Reduo do domnio de : j est.

(c) Normalizao de variveis: x[A(x)] y, z[B(y) w[C(y, z, w)] v[D(v, z)]]


u[E(u) F (u)]

(d) Eliminao de : A(sk1 ) y, z[B(y) C(y, z, skf1 (y, z)) D(skf2 (y, z), z)] (E(sk2 )
F (sk2 ))
(e) Mover para esquerda: y, z[A(sk1 ) (B(y) C(y, z, skf1 (y, z)) D(skf2 (y, z), z))
(E(sk2 ) F (sk2 ))]

(f) Eliminao de : A(sk1 ) (B(y) C(y, z, skf1 (y, z)) D(skf2 (y, z), z)) (E(sk2 )
F (sk2 ))

(g) Obteno da forma conjuntiva normal: j est.


(h) Eliminao de : {A(sk1 ), B(y)C(y, z, skf1 (y, z))D(skf2 (y, z), z), E(sk2 )F (sk2 )}

(i) Eliminao de : {{A(sk1 )}, {B(y), C(y, z, skf1 (y, z)), D(skf2 (y, z), z)}, {E(sk2 ), F (sk2 )}}

2. x[(A(x) y[B(y) C(x, y)]) D(x)]


(a) Eliminao de : x[(A(x) y[B(y) C(x, y)]) D(x)]

(b) Reduo do domnio de : x[A(x) y[B(y) C(x, y)] D(x)]


x[A(x) y[B(y) C(x, y)] D(x)]
(c) Normalizao de variveis: j est.
(d) Eliminao de : j est.

(e) Mover para esquerda: x, y[A(x) B(y) C(x, y) D(x)]


(f) Eliminao de : A(x) B(y) C(x, y) D(x)

(g) Obteno da forma conjuntiva normal: j est.

(h) Eliminao de : {A(x) B(y) C(x, y) D(x)}


(i) Eliminao de : {{A(x), B(y), C(x, y), D(x)}}

3. x[A(x) y[B(x, y) C(y)]] x[D(x)]


(a) Eliminao de : x[A(x) y[B(x, y) C(y)]] x[D(x)]

(b) Reduo do domnio de : j est.

(c) Normalizao de variveis: x[A(x) y[B(x, y) C(y)]] z[D(z)]

(d) Eliminao de : x[A(x) (B(x, skf1 (x)) C(skf1 (x)))] D(sk1 )

(e) Mover para esquerda: x[(A(x) (B(x, skf1 (x)) C(skf1 (x)))) D(sk1 )]
(f) Eliminao de : (A(x) (B(x, skf1 (x)) C(skf1 (x)))) D(sk1 )

(g) Obteno da forma conjuntiva normal: (A(x)B(x, skf1 (x)))(A(x)C(skf1 (x)))


D(sk1 )
(h) Eliminao de : {A(x) B(x, skf1 (x)), A(x) C(skf1 (x)), D(sk1 )}

(i) Eliminao de : {{A(x), B(x, skf1 (x))}, {A(x), C(skf1 (x))}, {D(sk1 )}}

Exerccio 11.3
Considere o seguinte conjunto de clusulas: {{A(x), B(x), C(x)}, {A(x)}, {B(a)}, {A(y), C(y)}}.

101
1. Apresente uma demonstrao por refutao a partir desse conjunto.
2. Apresente uma demonstrao por refutao a partir desse conjunto, usando resoluo unitria.
3. Apresente uma demonstrao por refutao a partir desse conjunto, usando resoluo linear e {B(a)} como clusula inicial.
Resposta:

1. Demonstrao por refutao a partir do conjunto:


Uma demonstrao por refutao uma demonstrao de {} a partir do conjunto de clusulas dado.
{A(x), B(x), C(x)}

{A(y), C(y)}
{x/y}

{A(x), B(x)}

{A(x)}

{B(x)}

{B(a)}
{a/x}

{}
2. Demonstrao por refutao a partir do conjunto, usando resoluo unitria:
Na resoluo unitria usa-se sempre pelo menos uma clusula unitria (ou seja, s com um
literal). Neste caso, tambm resoluo linear.
{A(x)}

{A(y), C(y)}
{x/y}

{C(y)}

{A(x), B(x), C(x)}


{x/y}

{A(x), B(x)}

{B(a)}
{a/x}

{A(a)}
{a/x}

{}
3. Demonstrao por refutao a partir do conjunto, usando resoluo linear e {B(a)} como
clusula inicial:
A resoluo linear comea pela clusula inicial e depois usa sempre um sucessor dessa
clusula nos passos subsequentes.

102

11
{B(a)}

LGICA DE PRIMEIRA ORDEM RESOLUO

{A(x), B(x), C(x)}


{a/x}

{A(a), C(a)}

{A(y), C(y)}
{a/y}

{A(a)}

{A(x)}
{a/x}

{}

Exerccio 11.4
Demonstre, usando resoluo, o seguinte argumento:
({x, y, z[(R(x, y) R(y, z)) R(x, z)], R(a, b), R(b, c), R(c, d)}, R(a, d)).
Resposta:
Em primeiro lugar, necessrio passar as premissas e a negao da concluso para a forma clausal. Ficamos com o seguinte conjunto de clusulas:
{{R(x, y), R(y, z), R(x, z)}, {R(a, b)}, {R(b, c)}, {R(c, d)}, {R(a, d)}}.
Depois, necessrio aplicar resoluo at chegar a uma contradio, preferencialmente comeando com a negao da concluso.
{R(x, y), R(y, z), R(x, z)}

{R(a, d)}

{R(a, b)}

{R(b, c)}

{R(c, d)}

{a/x, b/z}

{R(a, y), R(y, d)}


{b/y}

{R(b, d)}
{b/x, d/z}

{R(b, y), R(y, d)}


{c/y}

{R(c, d)}

{}

Exerccio 11.5
Demonstre os argumentos do exerccio 8.1, usando resoluo.
Resposta:
Em cada caso, estamos a tentar provar que a concluso derivvel a partir das premissas do
argumento. Cada premissa (individualmente) e a concluso negada so passadas para a forma
clausal e tenta-se chegar a uma contradio (representada pela clusula vazia). Se conseguirmos,
porque impossvel todas as premissas serem verdadeiras e a concluso falsa, e por isso o
argumento vlido, o que significa que a concluso derivvel a partir das premissas.

103
1. ({x[F (x)]}, x[F (x)])
Passagem para a forma clausal de x[F (x)], x[F (x)]:
(a) Eliminao de : j est.

(b) Reduo do domnio de : x[F (x)], x[F (x)]

(c) Normalizao de variveis: x[F (x)], y[F (y)]

(d) Eliminao de : j est.

(e) Mover para esquerda: j est.


(f) Eliminao de : F (x), F (y)

(g) Obteno da forma conjuntiva normal: j est.


(h) Eliminao de : {F (x), F (y)}

(i) Eliminao de : {{F (x)}, {F (y)}}

Aplicao do princpio da resoluo:


{F (x)}

{F (y)}
{x/y}

{}
2. ({x[F (x) G(x)], x[F (x) H(x)]}, x[G(x) H(x)])
Passagem para a forma clausal de x[F (x) G(x)], x[F (x) H(x)], x[G(x) H(x)]:
(a) Eliminao de : x[F (x) G(x)], x[F (x) H(x)], x[G(x) H(x)]

(b) Reduo do domnio de : x[F (x) G(x)], x[F (x) H(x)], x[G(x) H(x)]
(c) Normalizao de variveis: x[F (x) G(x)], y[F (y) H(y)], z[G(z) H(z)]

(d) Eliminao de : x[F (x) G(x)], F (a) H(a), z[G(z) H(z)]


(e) Mover para esquerda: j est.

(f) Eliminao de : {F (x) G(x)}, {F (a) H(a)}, {G(z) H(z)}

(g) Obteno da forma conjuntiva normal: j est.

(h) Eliminao de : {F (x) G(x), {F (a), H(a), G(z) H(z)}

(i) Eliminao de : {{F (x), G(x)}, {F (a)}, {H(a)}, {G(z), H(z)}}

Aplicao do princpio da resoluo:


{F (x), G(x)}

{F (a)}

{H(a)}

{G(z), H(z)}

{a/x}

{a/z}

{G(a)}

{G(a)}

{}

Exerccio 11.6
Demonstre os teoremas do exerccio 8.2, usando resoluo.
Resposta:
Em cada caso, estamos a tentar provar que uma frmula teorema. Negamo-la, passamo-la para
a forma clausal, e tentamos chegar a uma contradio (representada pela clusula vazia) usando
resoluo. Se conseguirmos, porque impossvel a frmula ser falsa, e por isso tem que ser
sempre verdadeira, ou seja, um teorema.

104

11

LGICA DE PRIMEIRA ORDEM RESOLUO

1. (F (a) x[F (x) G(x)]) G(a)


Passagem para a forma clausal de ((F (a) x[F (x) G(x)]) G(a)):
(a) Eliminao de : ((F (a) x[F (x) G(x)]) G(a))

(b) Reduo do domnio de : (F (a) x[F (x) G(x)]) G(a)


F (a) x[F (x) G(x)] G(a)
(c) Normalizao de variveis: j est.
(d) Eliminao de : j est.

(e) Mover para esquerda: x[F (a) (F (x) G(x)) G(a)]


(f) Eliminao de : F (a) (F (x) G(x)) G(a)

(g) Obteno da forma conjuntiva normal: j est.

(h) Eliminao de : {F (a), F (x) G(x), G(a)}

(i) Eliminao de : {{F (a)}, {F (x), G(x)}, {G(a)}}

Aplicao do princpio da resoluo:


{F (a)}

{F (x), G(x)}

{G(a)}

{a/x}

{G(a)}

{}
2. (x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)]
Passagem para a forma clausal de
((x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)]):
(a) Eliminao de : ((x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)])

(b) Reduo do domnio de : (x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)]
(x[F (x) G(x)] x[G(x) H(x)]) x[F (x) H(x)]
(c) Normalizao de variveis: (x[F (x) G(x)] y[G(y) H(y)]) z[F (z) H(z)]

(d) Eliminao de : (x[F (x) G(x)] y[G(y) H(y)]) (F (a) H(a))

(e) Mover para esquerda: x, y[(F (x) G(x)) (G(y) H(y)) (F (a) H(a))]
(f) Eliminao de : (F (x) G(x)) (G(y) H(y)) (F (a) H(a))

(g) Obteno da forma conjuntiva normal: j est.

(h) Eliminao de : {F (x) G(x), G(y) H(y), F (a), H(a)}

(i) Eliminao de : {{F (x), G(x)}, {G(y), H(y)}, {F (a)}, {H(a)}}

Aplicao do princpio da resoluo:


{F (x), G(x)}

{G(y), H(y)}

{F (a)}

{x/y}

{F (x), H(x)}
{a/x}

{H(a)}

{}

{H(a)}

105
3. (x[F (x) H(x)] y[F (y)]) z[H(z)]
Passagem para a forma clausal de ((x[F (x) H(x)] y[F (y)]) z[H(z)]):
(a) Eliminao de : ((x[F (x) H(x)] y[F (y)]) z[H(z)])

(b) Reduo do domnio de : (x[F (x)H(x)]y[F (y)])z[H(z)])


x[F (x) H(x)] y[F (y)] z[H(z)])
(c) Normalizao de variveis: j est.
(d) Eliminao de : x[F (x) H(x)] F (a) z[H(z)])

(e) Mover para esquerda: x, z[(F (x) H(x)) F (a) H(z)]


(f) Eliminao de : (F (x) H(x)) F (a) H(z)

(g) Obteno da forma conjuntiva normal: j est.

(h) Eliminao de : {F (x) H(x), F (a), H(z)}

(i) Eliminao de : {{F (x), H(x)}, {F (a)}, {H(z)}}

Aplicao do princpio da resoluo:


{F (x), H(x)}

{F (a)}

{H(z)}

{a/x}

{H(a)}
{a/z}

{}

Exerccio 11.7
Demonstre os teoremas do exerccio 8.3, que correspondem a aplicaes das leis de De
Morgan para os quantificadores, usando resoluo.
Resposta:
1. x[F (x)] x[F (x)]
Passagem para a forma clausal de (x[F (x)] x[F (x)]):
(a) Eliminao de : (x[F (x)] x[F (x)])

(b) Reduo do domnio de : x[F (x)] x[F (x)]


x[F (x)] x[F (x)]
(c) Normalizao de variveis: x[F (x)] y[F (y)]

(d) Eliminao de : F (a) y[F (y)]

(e) Mover para esquerda: y[F (a) F (y)]


(f) Eliminao de : F (a) F (y)

(g) Obteno da forma conjuntiva normal: j est.


(h) Eliminao de : {F (a), F (y)}

(i) Eliminao de : {{F (a)}, {F (y)}}

Aplicao do princpio da resoluo:


{F (a)}

{F (y)}
{a/y}

{}

106

11

LGICA DE PRIMEIRA ORDEM RESOLUO

2. x[F (x)] x[F (x)]


Passagem para a forma clausal de (x[F (x)] x[F (x)]):
(a) Eliminao de : (x[F (x)] x[F (x)])

(b) Reduo do domnio de : x[F (x)] x[F (x)]


x[F (x)] x[F (x)]
(c) Normalizao de variveis: x[F (x)] y[F (y)]

(d) Eliminao de : F (a) y[F (y)]

(e) Mover para esquerda: y[F (a) F (y)]


(f) Eliminao de : F (a) F (y)

(g) Obteno da forma conjuntiva normal: j est.


(h) Eliminao de : {F (a), F (y)}

(i) Eliminao de : {{F (a)}, {F (y)}}

Aplicao do princpio da resoluo:


{F (a)}

{F (y)}
{a/y}

{}
3. x[F (x)] x[F (x)]
Passagem para a forma clausal de (x[F (x)] x[F (x)]):
(a) Eliminao de : (x[F (x)] x[F (x)])

(b) Reduo do domnio de : x[F (x)] x[F (x)]


x[F (x)] x[F (x)]
(c) Normalizao de variveis: x[F (x)] y[F (y)]

(d) Eliminao de : x[F (x)] F (a)

(e) Mover para esquerda: x[F (x) F (a)]


(f) Eliminao de : F (x) F (a)

(g) Obteno da forma conjuntiva normal: j est.


(h) Eliminao de : {F (x), F (a)}

(i) Eliminao de : {{F (x)}, {F (a)}}

Aplicao do princpio da resoluo:


{F (x)}

{F (a)}
{a/x}

{}
4. x[F (x)] x[F (x)]
Passagem para a forma clausal de (x[F (x)] x[F (x)]):
(a) Eliminao de : (x[F (x)] x[F (x)])

(b) Reduo do domnio de : x[F (x)] x[F (x)]


x[F (x)] x[F (x)]
(c) Normalizao de variveis: x[F (x)] y[F (y)]

(d) Eliminao de : x[F (x)] F (a)

(e) Mover para esquerda: x[F (x) F (a)]


(f) Eliminao de : F (x) F (a)

107
(g) Obteno da forma conjuntiva normal: j est.
(h) Eliminao de : {F (x), F (a)}

(i) Eliminao de : {{F (x)}, {F (a)}}

Aplicao do princpio da resoluo:


{F (x)}

{F (a)}
{a/x}

{}

Exerccio 11.8
Considere as seguintes afirmaes:

Os animais com plos so mamferos.


Os ursos so animais com plos.
Os coelhos so mamferos.
O Kenai um urso.
O Bugsbunny um coelho.
O Sylvester um animal com plos.

1. Represente-as em lgica de primeira ordem.


2. Usando resoluo, responda s seguintes perguntas:
(a) O Kenai mamfero?
(b) Quem que tem plos?
(c) Quais so os mamferos?
Resposta:
1. Em lgica de primeira ordem, ficam:

x[(Animal(x) T emP elos(x)) M amif ero(x)]


x[U rso(x) (Animal(x) T emP elos(x))]
x[Coelho(x) M amif ero(x)]
U rso(Kenai)
Coelho(Bugsbunny)
Animal(Sylvester) T emP elos(Sylvester)

2. Para responder s perguntas, necessrio passar cada uma das frmulas correspondentes
s premissas do problema para a forma clausal.
{Animal(x), T emP elos(x), M amif ero(x)}
{U rso(x) (Animal(x) T emP elos(x))}
{U rso(x), Animal(x)}, {U rso(x), T emP elos(x)}
{Coelho(x), M amif ero(x)}
{U rso(Kenai)}
{Coelho(Bugsbunny)}
{Animal(Sylvester)}, {T emP elos(Sylvester)}

108

11

LGICA DE PRIMEIRA ORDEM RESOLUO

(a) Para saber se o Kenai mamfero, necessrio responder a uma questo do tipo verdadeiro ou falso. Neste caso, pretendemos saber se a clusula M amif ero(Kenai)
pode ser derivada a partir do conjunto de clusulas inicial. Uma vez que nem todas
as clusulas iniciais (ou premissas) so necessrias, vamos representar apenas as que
so usadas na prova.
{U rso(x), Animal(x)}

{U rso(Kenai)}

{U rso(x), T emP elos(x)}

{Kenai/x}

{Kenai/x}

{Animal(Kenai)}

{T emP elos(Kenai)}

{Animal(x), T emP elos(x), M amif ero(x)}

{Kenai/x}

{Animal(Kenai), M amif ero(Kenai)}

{M amif ero(Kenai)}
Tambm podemos usar resoluo no formato de prova:
{U rso(x), Animal(x)}
{U rso(Kenai)}
{U rso(x), T emP elos(x)}
{Animal(x), T emP elos(x), M amif ero(x)}
{Animal(Kenai)}
{T emP elos(Kenai)}
{Animal(Kenai), M amif ero(Kenai)}
{M amif ero(Kenai)}

1
2
3
4
5
6
7
8

Prem
Prem
Prem
Prem
Res, (1, 2), {Kenai/x}
Res, (2, 3), {Kenai/x}
Res, (4, 6), {Kenai/x}
Res, (5, 7), {}

Na realidade, e uma vez que estamos a usar resoluo, o mais normal negar o que
se quer provar e tentar chegar a uma contradio. Assim, a maneira mais comum
de responder a esta questo usando resoluo seria atravs da seguinte prova por
reduo ao absurdo:
{M amif ero(Kenai)}

{Animal(x), T emP elos(x), M amif ero(x)}

{Kenai/x}

{Animal(Kenai), T emP elos(Kenai)}

{U rso(x), Animal(x)}

{Kenai/x}

{U rso(Kenai), T emP elos(Kenai)}

{U rso(x), T emP elos(x)}

{Kenai/x}

{U rso(Kenai)}

{U rso(Kenai)}

{}

(b) Para saber quem que tem plos, estamos interessados em saber quais so as instncias que fazem com que a fbf T emP elos(x) seja consequncia do conjunto de premissas. Neste caso, para alm de necessitarmos de transformar as premissas para a
forma clausal, teremos que adicionar a fbf x[T emP elos(x) Resposta(x)] (ou, na
forma clausal, {T emP elos(x), Resposta(x)}), que especifica quais so as respostas
desejadas.

109
{U rso(Kenai)}

{U rso(x), T emP elos(x)}

{Kenai/x}

{T emP elos(Kenai)}

{T emP elos(x), Resposta(x)}

{T emP elos(Sylvester)}

{Kenai/x}

{Sylvester/x}

{Resposta(Kenai)}

{Resposta(Sylvester)}

Tambm podemos usar resoluo no formato de prova:


{U rso(Kenai)}
{U rso(x), T emP elos(x)}
{T emP elos(Sylvester)}
{T emP elos(x), Resposta(x)}
{T emP elos(Kenai)}
{Resposta(Kenai)}
{Resposta(Sylvester)}

1
2
3
4
5
6
7

Prem
Prem
Prem
Prem
Res, (1, 2), {Kenai/x}
Res, (4, 5), {Kenai/x}
Res, (3, 4), {Sylvester/x}

Convm notar que no conseguimos saber se o Bugsbunny tem plos. Ele um coelho
e os coelhos so mamferos, mas o que ns sabemos que os animais com plos so
mamferos e no que os mamferos so animais com plos. Na realidade, deveramos
ter representado esta implicao como uma equivalncia, se no fossem as excepes
dos golfinhos e baleias...
(c) Para saber quais so os mamferos, estamos interessados em saber quais so as instncias que fazem com que a fbf M amif ero(x) seja consequncia do conjunto de premissas. Neste caso, adicionamos a fbf x[M amif ero(x) Resposta(x)] (ou, na forma
clausal, {M amif ero(x), Resposta(x)}). Nesta rvore, abreviamos cada smbolo para
a primeira letra de cada palavra que o compe.
{U (x), A(x)}

{U (K)}

{U (x), T P (x)}

{K/x}

{K/x}

{A(K)}

{T P (K)}

{A(x), T P (x), M (x)}

{A(S)}

{K/x}

{S/x}

{A(K), M (K)}

{T P (S), M (S)}

{M (K)}

{M (S)}

{M (x), R(x)}

{T P (S)}

{C(B)}

{C(x), M (x)}

{K/x}

{S/x}

{B/x}

{R(K)}

{R(S)}

{M (B)}
{B/x}

{R(B)}

110

11

LGICA DE PRIMEIRA ORDEM RESOLUO

111

12

Programao em Lgica Resoluo SLD; rvores SLD

Sumrio:
Clusulas de Horn
Programas, objectivos, funo de seleco
Resoluo SLD
rvores SLD
Resumo:
Uma clusula uma disjuno de literais.
Uma clusula de Horn uma clusula que contm, no mximo, um literal positivo. Numa
clusula de Horn, o literal positivo (se existir) chamado a cabea da clusula e os literais
negativos (se existirem) so chamados o corpo da clusula.
A fbf (AB) C transformada na clusula {A, B, C}, que s tem um literal positivo
e por isso pode ser transformada na clusula de Horn C A, B, ou seja, a implicao
da fbf inicial transformada na implicao ao contrrio da clusula de Horn. Esta
clusula de Horn significa: para provar C, provar A e provar B.
Existem quatro tipos de clusulas de Horn:
1. Regras ou implicaes, correspondendo a clusulas em que tanto a cabea como o
corpo contm literais, por exemplo, C P1 , P2 .
2. Afirmaes ou factos, correspondendo a clusulas em que o corpo no contm literais
(ou seja, vazio) mas a cabea contm um literal, por exemplo, C .
3. Objectivos, correspondendo a clusulas em que a cabea no contm um literal (ou
seja, vazia) mas o corpo contm pelo menos um literal, por exemplo, P1 , P2 .
4. A clusula vazia, ou seja, 2.
As clusulas do tipo 1 e 2 (ou seja, as regras e as afirmaes, que tm cabea) tm o nome
de clusulas determinadas (do Ingls definite clauses).
Regra da resoluo: assumindo que o literal unifica com o literal i , sendo s o unificador mais geral destes dois literais, o caso geral da aplicao da regra da resoluo a
clusulas de Horn o seguinte:
m
n
n+1

1 , . . . , m
1 , . . . , i1 , i , i+1 , . . . , n
( 1 , . . . , i1 , 1 , . . . , m , i+1 , . . . , n ) s

Res, (m, n)

Em programao em lgica, um programa qualquer conjunto finito de clusulas determinadas e um objectivo corresponde a uma clusula que se pretende derivar a partir desse
programa. Num programa, o conjunto de todas as clusulas cuja cabea corresponde a

112

12

PROGRAMAO EM LGICA RESOLUO SLD; RVORES SLD

um literal contendo a letra de predicado P diz-se a definio de P . Uma definio de um


predicado que contenha apenas clusulas fechadas chama-se uma base de dados.
Resposta de um programa a um objectivo: Sendo um programa e um objectivo,
uma resposta de a uma substituio s para as variveis de . Uma resposta s de
a diz-se correcta se |= ( s).
Uma funo de seleco, S, uma regra para escolher um literal numa clusula objectivo
como candidato aplicao do princpio da resoluo. Esta uma funo do conjunto
dos objectivos para o conjunto dos literais, tal que S( 1 , . . . , n ) {1 , . . . , n }.
A resoluo SLD (Linear resolution with Selection function and Definite clauses) uma
estratgia de resoluo linear aplicvel a clusulas determinadas, conjuntamente com
uma funo de seleco, a qual, dentro dos possveis literais aplicveis com a regra da
resoluo, escolhe um literal de um modo determinstico.
Uma regra de procura uma funo do conjunto dos literais e do conjunto dos programas
para o conjunto das clusulas definidas, tal que P (, ) .
rvore SLD: Seja um programa, um objectivo e S uma funo de seleco. A rvore
SLD de via S uma rvore rotulada, construda do seguinte modo:
1. O rtulo de cada n um objectivo;
2. O rtulo da raiz ;
3. Cada n com rtulo 1 , . . . , n tem um ramo por cada clusula 1 , . . . , n
de cuja cabea seja unificvel com S( 1 , . . . , n ). O rtulo da raiz deste ramo
corresponde ao resolvente entre as duas clusulas.
Um ramo cuja folha tem o rtulo 2 diz-se um n bem sucedido; um ramo cuja folha tem
um rtulo que no corresponda clusula vazia diz-se um n falhado; os restantes ramos
dizem-se ramos infinitos.
Seja um programa e um objectivo. Ento, independentemente da funo de seleco,
todas as rvores SLD de e tm o mesmo nmero (finito ou infinito) de ramos bem
sucedidos. Em termos computacionais, este resultado afirma que a qualidade de uma
implementao da resoluo SLD independente da funo de seleco escolhida, pelo
menos no que diz respeito s respostas que podem ser calculadas.

113
Exerccio 12.1
Demonstre os argumentos do exerccio 8.1, usando resoluo SLD e uma funo de seleco que escolhe o primeiro literal da clusula objectivo.
Notas: Como est a tentar demonstrar argumentos, pode fazer provas por refutao em
que algumas das clusulas correspondem negao da concluso do argumento. Uma
vez que a passagem para a forma clausal j foi feita na aula sobre resoluo, apresentamse com cada argumento as clusulas que lhe correspondem.
1. Argumento: ({x[F (x)]}, x[F (x)])
Clusulas: {{F (x)}, {F (y)}}
2. Argumento: ({x[F (x) G(x)], x[F (x) H(x)]}, x[G(x) H(x)])
Clusulas: {{F (x), G(x)}, {F (a)}, {H(a)}, {G(z), H(z)}}
Resposta:
1. Clusulas: {{F (x)}, {F (y)}}
Clusulas de Horn: F (x)
F (y)
Aplicao da resoluo SLD com o objectivo F (y):
F (y)

F (x)

{y/x}

A resposta ({y/x})|{y} =
Nota: a resposta sempre uma substituio para as variveis do objectivo.
2. Clusulas: {{F (x), G(x)}, {F (a)}, {H(a)}, {G(z), H(z)}}
Clusulas de Horn: G(x) F (x)
F (a)
H(a)
G(z), H(z)
Aplicao da resoluo SLD com o objectivo G(z), H(z):
G(z), H(z)

G(x) F (x)

{z/x}

F (z), H(z)

F (a)

{a/z}

H(a)

H(a)

A resposta ({z/x} {a/z} )|{z} = {a/z}

Exerccio 12.2
Demonstre os teoremas do exerccio 8.2, usando resoluo SLD e uma funo de seleco
que escolhe o ltimo literal da clusula objectivo.

114

12

PROGRAMAO EM LGICA RESOLUO SLD; RVORES SLD

Notas: Como est a tentar provar se uma frmula um teorema, deve fazer provas por
refutao em que as clusulas correspondem negao da frmula inicial. Uma vez que
a passagem para a forma clausal j foi feita na aula sobre resoluo, apresentam-se com
cada frmula as clusulas que correspondem sua negao.

1. (F (a) x[F (x) G(x)]) G(a)


{{F (a)}, {F (x), G(x)}, {G(a)}}
2. (x[F (x) G(x)] y[G(y) H(y)]) z[F (z) H(z)]
{{F (x), G(x)}, {G(y), H(y)}, {F (a)}, {H(a)}}
3. (x[F (x) H(x)] y[F (y)]) z[H(z)]
{{F (x), H(x)}, {F (a)}, {H(z)}}
Resposta:
1. Clusulas: {{F (a)}, {F (x), G(x)}, {G(a)}}
Clusulas de Horn: F (a)
G(x) F (x)
G(a)
Aplicao da resoluo SLD com o objectivo G(a):
G(a)

G(x) F (x)

{a/x}

F (a)

F (a)

A resposta ({a/x} )|{} =


2. Clusulas: {{F (x), G(x)}, {G(y), H(y)}, {F (a)}, {H(a)}}
Clusulas de Horn: G(x) F (x)
H(y) G(y)
F (a)
H(a)
Aplicao da resoluo SLD com o objectivo H(a):
H(a)

H(y) G(y)

{a/y}

G(a)

G(x) F (x)

{a/x}

F (a)

F (a)

A resposta ({a/y} {a/x} )|{} =

115
3. Clusulas: {{F (x), H(x)}, {F (a)}, {H(z)}}
Clusulas de Horn: H(x) F (x)
F (a)
H(z)
Aplicao da resoluo SLD com o objectivo H(z):
H(z)

H(x) F (x)

{z/x}

F (z)

F (a)

{a/z}

A resposta ({z/x} {a/z})|{z} = {a/z}

Exerccio 12.3
Considere o seguinte conjunto de clusulas:

{Animal(x), T emP elos(x), M amif ero(x)}


{U rso(x), Animal(x)}
{U rso(x), T emP elos(x)}
{Coelho(x), M amif ero(x)}
{U rso(Kenai)}
{Coelho(Bugsbunny)}
{Animal(Sylvester)}
{T emP elos(Sylvester)}

Usando resoluo SLD e uma funo de seleco sua escolha, responda s seguintes
perguntas:
1. O Kenai mamfero?
2. Quem que tem plos?
3. Quais so os mamferos?
Resposta:
Para usar resoluo SLD, preciso transformar as clusulas dadas no enunciado em clusulas de
Horn.
M amif ero(x) Animal(x), T emP elos(x)
Animal(x) U rso(x)
T emP elos(x) U rso(x)
M amif ero(x) Coelho(x)
U rso(Kenai)
Coelho(Bugsbunny)
Animal(Sylvester)
T emP elos(Sylvester)
Vamos usar uma funo de seleco que escolhe para unificar o primeiro literal do objectivo.

116

12

PROGRAMAO EM LGICA RESOLUO SLD; RVORES SLD

1. Para sabermos se o Kenai mamfero, vamos aplicar resoluo SLD com o objectivo
M amif ero(Kenai).
M amif ero(Kenai)

M amif ero(x1) Animal(x1), T emP elos(x1)

{Kenai/x1}

Animal(Kenai), T emP elos(Kenai)

Animal(x2) U rso(x2)

{Kenai/x2}

U rso(Kenai), T emP elos(Kenai)

T emP elos(Kenai)

U rso(Kenai)

T emP elos(x3) U rso(x3)

{Kenai/x3}

U rso(Kenai)

U rso(Kenai)

A resposta ({Kenai/x1} {Kenai/x2} {Kenai/x3} )|{} =


2. Quem que tem plos?
Para saber quem que tem plos, que uma pergunta que pode ter vrias respostas, vamos
usar rvores SLD, para garantir que encontramos todas as respostas possveis.
T emP elos(x)
T emP elos(x1) U rso(x1)
{x/x1}

T emP elos(Sylvester)
{Sylvester/x}

U rso(x)
U rso(Kenai)
{Kenai/x}

Temos duas respostas: {Kenai/x} e {Sylvester/x}, ou seja, o Sylvester e o Kenai tm


plos.
Nota: quando h duas variveis para unificar, a varivel do objectivo substitui a varivel
do programa que estamos a utilizar, pois isto facilita a composio das substituies para
encontrar as respostas; quando existe uma constante e uma varivel, a constante substitui
sempre a varivel, como seria de esperar.

3. Quais so os mamferos?

117
M amif ero(x)
M amif ero(x1) Animal(x1), T emP elos(x1)

M amif ero(x5) Coelho(x5)

{x/x1}

{x/x5}

Animal(x), T emP elos(x)

Coelho(x)

Animal(x2) U rso(x2)
{x/x2}

Animal(Sylvester)
{Sylvester/x}

U rso(x), T emP elos(x)

T emP elos(Sylvester)

U rso(Kenai)
{Kenai/x}

T emP elos(x4) U rso(x4)


{Sylvester/x4}

T emP elos(Kenai)

U rso(Sylvester)

T emP elos(x3) U rso(x3)


{Kenai/x3}

impossvel

Coelho(Bugsbunny)
{Bugsbunny/x}

T emP elos(Sylvester)

U rso(Kenai)
U rso(Kenai)

Temos trs respostas: {Kenai/x}, {Sylvester/x} e {Bugsbunny/x}, ou seja, o Kenai, o


Sylvester e o Bugsbunny so mamferos.

Exerccio 12.4
Considere o seguinte conjunto de clusulas de Horn:

A(x) B(x), C(x)


B(x) D(x)
C(x) E(x)
B(a1)
E(a1)
C(a2)
C(a3)
D(a3)

Usando uma rvore de resoluo SLD e uma funo de seleco que escolha para unificar
o ltimo literal do objectivo, mostre todas as solues para o seguinte objectivo: A(x).
No final, indique explicitamente as solues.
Resposta:

118

12

PROGRAMAO EM LGICA RESOLUO SLD; RVORES SLD


A(x)
A(x1) B(x1), C(x1)
{x/x1}

B(x), C(x)
C(x2) E(x2)
{x/x2}

C(a2)
{a2/x}

C(a3)
{a3/x}

B(x), E(x)

B(a2)

B(a3)

E(a1)
{a1/x}

B(x4) D(x4)
{a2/x4}

B(x5) D(x5)
{a3/x5}

B(a1)

D(a2)

D(a3)

B(x3) D(x3)
{a1/x3}

B(a1)

D(a3)
impossvel

D(a1)

impossvel

Este objectivo tem duas solues: {a3/x} e {a1/x}.

119

13

Prolog rvores de Refutao; Listas

Sumrio:
Prolog
rvores de refutao em Prolog
Listas e operaes sobre listas
Resumo:
Um programa em Prolog constitudo por uma sequncia de frases declarativas escritas
em lgica, juntamente com um conjunto de indicaes procedimentais que controlam a
utilizao dessas frases declarativas. Por ser um conjunto e no uma sequncia de clusulas, a ordem interessa.
Termos

Constantes
tomos comeam com letra minscula, podem estar entre plicas, tomos especiais.
Nmeros inteiros ou reais.
Variveis comeam com maiscula ou _. Usam-se variveis annimas, representadas por _, quando se quer dizer que existe ali um argumento, mas ele
no vai interessar para a computao.
Compostos aplicao de uma funo aos seus argumentos.

Literais correspondem aplicao de um predicado ao nmero apropriado de argumentos. O Prolog tem overloading de operadores, isto , pode haver o mesmo
predicado com nmeros de argumentos diferentes e significados diferentes. Ex:
mae(X) significa que X me, mae(X,Y) significa que X a me de Y.
Clusulas (de Horn)
Afirmaes clusulas em que o corpo no contm literais.
Regras clusulas em que tanto a cabea como o corpo contm literais.
Objectivos clusulas em que a cabea no contm literais mas o corpo contm pelo menos um literal.

O Prolog usa uma estratgia de procura em profundidade com retrocesso e uma funo
de seleco que escolhe o primeiro literal do objectivo. Isto significa que a ordem das
clusulas e a ordem dos literais no corpo das clusulas influenciam a ordem pela qual as
respostas so encontradas.
O Prolog usa a closed world assumption, isto , tudo aquilo que no consegue provar
considerado falso. A resposta do Prolog a um objectivo que no se consegue provar
No.
Um objectivo que no contm variveis pergunta se ele uma consequncia lgica do
programa, e a resposta Yes ou No. Um objectivo contendo variveis pergunta se existem alguns valores para as variveis que faam com que o objectivo seja uma consequncia lgica do programa, e a resposta uma substituio para as variveis. Escrever ;

120

13

PROLOG RVORES DE REFUTAO; LISTAS

na interaco com o Prolog serve para perguntar se h mais alguma substituio que
satisfaa o objectivo.
possvel usar regras lgicas do tipo (AB) C atravs da utilizao de duas clusulas
de Horn C :- A e C :- B. Fazendo a passagem para a forma clausal,
(A B) C
(A B) C
(A B) C
(A C) (B C) duas clusulas de Horn.
No possvel usar regras do tipo A (B C) apenas com clusulas de Horn. Fazendo
a passagem para a forma clausal,
A (B C)
A B C uma clusula com dois literais positivos no de Horn.
A reduo de um objectivo por um programa a substituio de pelo corpo de
uma clusula de cuja cabea emparelhe com .
Listas
O primeiro argumento de uma lista tem um elemento e o segundo argumento recursivamente o resto da lista. A lista vazia representada por []. O termo .(X,Y), representado por [X|Y], uma lista com cabea X e resto Y. Exemplos de listas: [], [X], [X,Y],
[X|Xs], [X,Y|Ys]. Definio de listas em Prolog:
lista([]).
lista([_|Xs]) :- lista(Xs).
Interaco com o Prolog
consult(ficheiro).
[ficheiro].
[user].
;
(.., .. ; ..)
halt.
possvel incluir testes para os predicados no cdigo de um programa, em que se verifica se os resultados so aquilo que se est espera. Quando o resultado diferente do
indicado, o compilador escreve um aviso a indicar isso. Eu ainda no consegui fazer um
exemplo de uma directiva em que a resposta fosse No, por exemplo se no exemplo abaixo
X fosse 4.
/*
ultimo1(X, Xs) :- tem o valor verdadeiro se X for o ltimo
elemento da lista Xs.
/
*
ultimo1(X, [X]).
ultimo1(X, [_|Xs]) :- ultimo1(X, Xs).
:- ultimo1(X, [1, 2, 3]), X=3.

121
Exerccio 13.1
Considere o seguinte programa em Prolog:
mamifero(X) :- animal(X), tempelos(X).
animal(X) :- urso(X).
tempelos(X) :- urso(X).
mamifero(X) :- coelho(X).
urso(kenai).
coelho(bugsbunny).
animal(sylvester).
tempelos(sylvester).
Mostrando as rvores de refutao respectivas, explique o que que o Prolog responderia
s seguintes perguntas. Considere que so pedidas todas as solues em cada um dos
casos.
1. O Kenai mamfero?
2. Quem que tem plos?
3. Quais so os mamferos?
Resposta:

122

13

PROLOG RVORES DE REFUTAO; LISTAS

1. Para sabermos se o Kenai mamfero, usamos o objectivo mamifero(kenai).


mamifero(kenai).

mamifero(X1) :- animal(X1), tempelos(X1).


{kenai/X1}

mamifero(X4) :- coelho(X4).
{kenai/X4}

animal(kenai), tempelos(kenai).

coelho(kenai).

animal(X2) :- urso(X2).
{kenai/X2}

impossvel

urso(kenai), tempelos(kenai).

urso(kenai).

tempelos(kenai).

tempelos(X3) :- urso(X3).
{kenai/X3}

urso(kenai).

urso(kenai).

A resposta true.
Como no enunciado diz para considerar que so pedidas todas as solues em cada um dos
casos, o Prolog ir explorar toda a rvore e dar a resposta true seguida da resposta false.
2. Para saber quem que tem plos, usamos o objectivo tempelos(X).
tempelos(X).

tempelos(X1) :- urso(X1).

tempelos(sylvester).

{X/X1}

{sylvester/X}

urso(X).

urso(kenai).
{kenai/X}

Temos duas respostas: X = kenai e X = sylvester.


3. Para saber quais so os mamferos, usamos o objectivo mamifero(X).

123
mamifero(X).

mamifero(X1) :- animal(X1), tempelos(X1).


{X/X1}

mamifero(X5) :- coelho(X5).
{X/X5}

animal(X), tempelos(X).

coelho(X).

animal(X2) :- urso(X2).
{X/X2}

animal(sylvester).
{sylvester/X}

urso(X), tempelos(X).

tempelos(sylvester).

urso(kenai).
{kenai/X}

tempelos(X4) :- urso(X4).
{sylvester/X4}

tempelos(kenai).

urso(sylvester)

tempelos(X3) :- urso(X3).
{kenai/X3}

impossvel

coelho(bugsbunny).
{bugsbunny/X}

tempelos(sylvester).

urso(kenai).

urso(kenai).

Temos trs respostas: X = kenai, X = sylvester e X = bugsbunny.


Exemplo de uma interaco com o Prolog em que se consulta um ficheiro com este programa e se
fazem algumas perguntas.

Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.1)


Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).

?- consult(~/cadeiras/lpp/13-14/exercicios/mamiferos.pl).
Warning: /Users/acardoso/cadeiras/lpp/13-14/exercicios/mamiferos.pl:4:
Clauses of mamifero/1 are not together in the source-file
Warning: /Users/acardoso/cadeiras/lpp/13-14/exercicios/mamiferos.pl:7:
Clauses of animal/1 are not together in the source-file
Warning: /Users/acardoso/cadeiras/lpp/13-14/exercicios/mamiferos.pl:8:
Clauses of tempelos/1 are not together in the source-file
% /Users/acardoso/cadeiras/lpp/13-14/exercicios/mamiferos.pl compiled 0.00 sec, 9 clau
true.
?- mamifero(kenai).

124

13

PROLOG RVORES DE REFUTAO; LISTAS

true ;
false.
?- tempelos(X).
X = kenai ;
X = sylvester.
?- mamifero(X).
X = kenai ;
X = sylvester ;
X = bugsbunny.
?- animal(X).
X = kenai ;
X = sylvester.
?- animal(bugsbunny).
false.
?- halt.
Process prolog finished

Exerccio 13.2
Considere definido da seguinte forma o predicado m(X, Xs):

m(X, [X|_]).
m(X, [_|Xs]) :- m(X, Xs).

Mostre as rvores de refutao para os seguintes objectivos, considerando que so pedidas todas as solues.

1. m(2, [1, 2, 3]).

2. m(X, [1, 2, 3]).

Resposta:

1. m(2, [1, 2, 3]).

125
m(2,[1,2,3]).

m(X1,[_|Xs1]) :- m(X1,Xs1).
{2/X1, [2, 3]/Xs1}

m(2,[2,3]).

m(X2,[X2|_]).
{2/X2}

m(X3,[_|Xs3]) :- m(X3,Xs3).
{2/X3, [3]/Xs3}

m(2,[3]).

m(X4,[_|Xs4]) :- m(X4,Xs4).
{2/X4, []/Xs4}

m(2,[]).

impossvel

A resposta true.
Como no enunciado diz para considerar que so pedidas todas as solues em cada um dos
casos, o Prolog ir explorar toda a rvore e dar a resposta true seguida da resposta false.
2. m(X, [1, 2, 3]).
m(X,[1,2,3]).

m(X1,[X1|_]).

m(X2,[_|Xs2]) :- m(X2,Xs2).

{X/X1, 1/X1}

{X/X2, [2, 3]/Xs2}

m(X,[2,3]).

m(X3,[X3|_]).
{X/X3, 2/X3}

m(X4,[_|Xs4]) :- m(X4,Xs4).
{X/X4, [3]/Xs4}

m(X,[3]).

m(X5,[X5|_]).
{X/X5, 3/X5}

m(X6,[_|Xs6]) :- m(X6,Xs6).
{X/X6, []/Xs6}

m(X,[]).

impossvel

Respostas: X = 1; X = 2; X = 3; e false.

126

13

PROLOG RVORES DE REFUTAO; LISTAS

Exerccio 13.3
(Adaptado de The Art of Prolog, de Leon Sterling e Ehud Shapiro.)
Defina os seguintes predicados que manipulam listas. Em caso de necessidade, em cada
alnea pode usar os predicados definidos nas alneas anteriores.
1. O predicado membro(Elemento, Lista), que tem o valor verdadeiro se Elemento
for um membro da lista Lista. Por exemplo, membro(2, [1, 2, 3]) tem o valor verdadeiro.
2. O predicado prefixo(Prefixo, Lista), que tem o valor verdadeiro se Prefixo
for um prefixo da lista Lista. Por exemplo, prefixo([1, 2], [1, 2, 3])
tem o valor verdadeiro.
3. O predicado sufixo(Sufixo, Lista), que tem o valor verdadeiro se Sufixo
for um sufixo da lista Lista. Por exemplo, sufixo([2, 3], [1, 2, 3]) tem
o valor verdadeiro.
4. O predicado sublista(Sub, Lista), que tem o valor verdadeiro se Sub for
uma sublista da lista Lista. Por exemplo, sublista([2, 3], [1, 2, 3, 4])
tem o valor verdadeiro.
5. O predicado junta(Xs, Ys, Zs), em que a lista Zs o resultado de concatenar
as listas Xs e Ys. Por exemplo, junta([1, 2], [3, 4], [1, 2, 3, 4]) tem
o valor verdadeiro.
6. Redefina os predicados membro, prefixo, sufixo e sublista em termos do
predicado junta.
7. O predicado seguidos(X, Y, Zs), que tem o valor verdadeiro se X e Y aparecerem seguidos na lista Zs. Por exemplo, seguidos(2, 3, [1, 2, 3]) tem o
valor verdadeiro.
8. O predicado ultimo(X, Xs), que tem o valor verdadeiro se X for o ltimo elemento da lista Xs. Por exemplo, ultimo(3, [1, 2, 3]) tem o valor verdadeiro.
9. O predicado inverte(Xs, Ys), que tem o valor verdadeiro se Ys for uma lista
que contm os elementos de Xs pela ordem inversa da qual eles aparecem na lista
original. Por exemplo, inverte([1, 2, 3], [3, 2, 1]) tem o valor verdadeiro.
10. O predicado comprimento(Xs, N), que tem o valor verdadeiro se N for o comprimento da lista Xs. Por exemplo, comprimento([a, 1], s(s(0))) tem o
valor verdadeiro.
11. O predicado repete(Xs, XsXs), que tem o valor verdadeiro se cada elemento
de Xs aparece repetido em XsXs. Por exemplo, repete([1, 2, 3], [1, 1,
2, 2, 3, 3]) tem o valor verdadeiro.
Resposta:
/********************************************************************************
Aula sobre listas
********************************************************************************/

127

/*
ultimo1(X, Xs) :- tem o valor verdadeiro se X for o ultimo elemento da lista Xs.
/
*
ultimo1(X, [X]).
ultimo1(X, [_|Xs]) :- ultimo1(X, Xs).
:- ultimo1(X, [1, 2, 3]), X=3.

/*
membro(Elemento, Lista) :- tem o valor verdadeiro se Elemento for
um membro da lista Lista.
*/
membro(X, [X|_]).
membro(X, [_|Ys]) :- membro(X, Ys).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- membro(1, [1, 2, 3]).


true ;
false.
?- membro([2], [1, [2], a]).
true ;
false.
?- membro(a, [1, b, 3]).
false.
?- membro(X, [1, 2, 3]).
X = 1 ;
X = 2 ;
X = 3 ;
false.
?- membro(1, Y).
Y = [1|_G236] ;
Y = [_G235, 1|_G239] ;
Y = [_G235, _G238, 1|_G242] ;
Y = [_G235, _G238, _G241, 1|_G245] ;
Y = [_G235, _G238, _G241, _G244, 1|_G248] ;
Y = [_G235, _G238, _G241, _G244, _G247, 1|_G251] ;
Y = [_G235, _G238, _G241, _G244, _G247, _G250, 1|_G254]
?- membro(X, Y).
Y = [X|_G251] ;
Y = [_G250, X|_G254] ;
Y = [_G250, _G253, X|_G257] ;
Y = [_G250, _G253, _G256, X|_G260] ;
Y = [_G250, _G253, _G256, _G259, X|_G263] ;
Y = [_G250, _G253, _G256, _G259, _G262, X|_G266] ;
Y = [_G250, _G253, _G256, _G259, _G262, _G265, X|_G269]

/*
prefixo(Prefixo, Lista) :- tem o valor verdadeiro se Prefixo for um
prefixo da lista Lista.
*/
prefixo([], _).
prefixo([X|Xs], [X|Ys]) :- prefixo(Xs, Ys).
%% ?- prefixo([1, 2], [1, 2, 3]).

128
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

13

PROLOG RVORES DE REFUTAO; LISTAS

true.
?- prefixo([1, 2], [2, 2, 3]).
false.
?- prefixo([], 5).
true.
?- prefixo(X, [1, 2, 3]).
X = [] ;
X = [1] ;
X = [1, 2] ;
X = [1, 2, 3] ;
false.
?- prefixo([1, 2], Y).
Y = [1, 2|_G251].
?- prefixo(X, Y).
X = [] ;
X = [_G250],
Y = [_G250|_G254] ;
X = [_G250, _G256],
Y = [_G250, _G256|_G260] ;
X = [_G250, _G256, _G262],
Y = [_G250, _G256, _G262|_G266] ;
X = [_G250, _G256, _G262, _G268],
Y = [_G250, _G256, _G262, _G268|_G272]

/*
sufixo(Sufixo, Lista) :- tem o valor verdadeiro se Sufixo for um
sufixo da lista Lista.
*/
sufixo(Xs, Xs).
sufixo(Xs, [_|Ys]) :- sufixo(Xs, Ys).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- sufixo([2, 3], [1, 2, 3]).


true ;
false.
?- sufixo([2, 3], [1, 2, 2]).
false.
?- sufixo(5, 5).
true ;
false.
?- sufixo(X, [1, 2, 3]).
X = [1, 2, 3] ;
X = [2, 3] ;
X = [3] ;
X = [] ;
false.
?- sufixo([2, 3], Y).
Y = [2, 3] ;
Y = [_G247, 2, 3] ;
Y = [_G247, _G250, 2, 3] ;
Y = [_G247, _G250, _G253, 2, 3] ;
Y = [_G247, _G250, _G253, _G256, 2, 3] ;
Y = [_G247, _G250, _G253, _G256, _G259, 2, 3]
?- sufixo(X, Y).
X = Y ;
Y = [_G250|X] ;

129
%%
%%
%%
%%

Y
Y
Y
Y

=
=
=
=

[_G250,
[_G250,
[_G250,
[_G250,

_G253|X] ;
_G253, _G256|X] ;
_G253, _G256, _G259|X] ;
_G253, _G256, _G259, _G262|X]

/*
sublista(Sub, Lista) :- tem o valor verdadeiro se Sub for uma
sublista da lista Lista.
*/
%%% definicao recursiva
sublista(Xs, Ys) :- prefixo(Xs, Ys).
sublista(Xs, [_|Ys]) :- sublista(Xs, Ys).
%aqui nao podia ser prefixo, se fosse so considerava
%sublistas a comecar na primeira e segunda posicoes
%%% sufixo de um prefixo
sublista2(Xs, Ys) :- prefixo(Ps, Ys), sufixo(Xs, Ps).
%%% prefixo de um sufixo
sublista3(Xs, Ys) :- prefixo(Xs, Ss), sufixo(Ss, Ys).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- sublista([2, 3], [1, 2, 3, 4]).


true ;
false.
?- sublista([2, 3], [1, 2, 2, 4]).
false.
?- sublista(X, [1, 2, 3, 4]).
X = [] ;
X = [1] ;
X = [1, 2] ;
X = [1, 2, 3] ;
X = [1, 2, 3, 4] ;
X = [] ;
X = [2] ;
X = [2, 3] ;
X = [2, 3, 4] ;
X = [] ;
X = [3] ;
X = [3, 4] ;
X = [] ;
X = [4] ;
X = [] ;
false.
?- sublista([2, 3], Y).
Y = [2, 3|_G251] ;
Y = [_G247, 2, 3|_G254] ;
Y = [_G247, _G250, 2, 3|_G257] ;
Y = [_G247, _G250, _G253, 2, 3|_G260] ;
Y = [_G247, _G250, _G253, _G256, 2, 3|_G263]
?- sublista(X, Y).
X = [] ;
X = [_G661],
Y = [_G661|_G665] ;
X = [_G661, _G667],
Y = [_G661, _G667|_G671] ;

130
%%
%%
%%
%%
%%
%%

13
X
Y
X
Y
X
Y

=
=
=
=
=
=

[_G661,
[_G661,
[_G661,
[_G661,
[_G661,
[_G661,

_G667,
_G667,
_G667,
_G667,
_G667,
_G667,

PROLOG RVORES DE REFUTAO; LISTAS

_G673],
_G673|_G677] ;
_G673, _G679],
_G673, _G679|_G683] ;
_G673, _G679, _G685],
_G673, _G679, _G685|_G689]

/*
junta(Xs, Ys, Zs) :- a lista Zs e o resultado de concatenar as listas Xs e Ys.
/
*
junta([], Ys, Ys).
junta([X|Xs], Ys, [X|Zs]) :- junta(Xs, Ys, Zs).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- junta([1, 2], [3, 4], [1, 2, 3, 4]).


true.
?- junta([1, 2], [3, 3], [1, 2, 3, 4]).
false.
?- junta([1, 2], [3, 4], Z).
Z = [1, 2, 3, 4].
?- junta([1, 2], Y, [1, 2, 3, 4]).
Y = [3, 4].
?- junta(X, [3, 4], [1, 2, 3, 4]).
X = [1, 2] ;
false.
?- junta(X, Y, [1, 2, 3, 4]).
X = [],
Y = [1, 2, 3, 4] ;
X = [1],
Y = [2, 3, 4] ;
X = [1, 2],
Y = [3, 4] ;
X = [1, 2, 3],
Y = [4] ;
X = [1, 2, 3, 4],
Y = [] ;
false.
?- junta(X, [3, 4], Z).
X = [],
Z = [3, 4] ;
X = [_G267],
Z = [_G267, 3, 4] ;
X = [_G267, _G273],
Z = [_G267, _G273, 3, 4] ;
X = [_G267, _G273, _G279],
Z = [_G267, _G273, _G279, 3, 4] ;
X = [_G267, _G273, _G279, _G285],
Z = [_G267, _G273, _G279, _G285, 3, 4]
?- junta(X, Y, Z).
X = [],
Y = Z ;
X = [_G270],
Z = [_G270|Y] ;
X = [_G270, _G276],
Z = [_G270, _G276|Y] ;
X = [_G270, _G276, _G282],
Z = [_G270, _G276, _G282|Y] ;

131
%% X = [_G270, _G276, _G282, _G288],
%% Z = [_G270, _G276, _G282, _G288|Y]

/*
Redefinir os predicados membro, prefixo, sufixo e sublista
em termos do predicado junta.
*/
membro2(X, Ys) :- junta(_, [X|_], Ys).
prefixo2(Xs, Ys) :- junta(Xs, _, Ys).
sufixo2(Xs, Ys) :- junta(_, Xs, Ys).
%%% prefixo de um sufixo
sublista4(Xs, AsXsBs) :- junta(_, XsBs, AsXsBs), junta(Xs, _, XsBs).
%%% sufixo de um prefixo
sublista5(Xs, AsXsBs) :- junta(AsXs, _, AsXsBs), junta(_, Xs, AsXs).

/*
seguidos(X, Y, Zs) :- tem o valor verdadeiro se X e Y aparecerem
seguidos na lista Zs.
*/
seguidos(X, Y, Zs) :- junta(_, [X, Y|_], Zs).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- seguidos(1, 2, [1, 2, 3]).


true ;
false.
?- seguidos(1, 2, [2, 2, 3]).
false.
?- seguidos(1, Y, [1, 2, 3]).
Y = 2 ;
false.
?- seguidos(X, Y, [1, 2, 3]).
X = 1,
Y = 2 ;
X = 2,
Y = 3 ;
false.
?- seguidos(X, Y, Z).
Z = [X, Y|_G271] ;
Z = [_G273, X, Y|_G271] ;
Z = [_G273, _G279, X, Y|_G271] ;
Z = [_G273, _G279, _G285, X, Y|_G271] ;
Z = [_G273, _G279, _G285, _G291, X, Y|_G271]

/*
ultimo(X, Xs) :- tem o valor verdadeiro se X for o ultimo
elemento da lista Xs.
*/
ultimo(X, Xs) :- junta(_, [X], Xs).
%% ?- ultimo(3, [1, 2, 3]).

132
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

13
true ;
false.
?- ultimo(2, [1, 2, 3]).
false.
?- ultimo(X, [1, 2, 3]).
X = 3 ;
false.
?- ultimo(3, Y).
Y = [3] ;
Y = [_G238, 3] ;
Y = [_G238, _G244, 3] ;
Y = [_G238, _G244, _G250,
Y = [_G238, _G244, _G250,
true
?- ultimo(X, Y).
Y = [X] ;
Y = [_G253, X] ;
Y = [_G253, _G259, X] ;
Y = [_G253, _G259, _G265,
Y = [_G253, _G259, _G265,

PROLOG RVORES DE REFUTAO; LISTAS

3] ;
_G256, 3]

X] ;
_G271, X]

/*
inverte(Xs, Ys) :- tem o valor verdadeiro se Ys for uma lista que
contem os elementos de Xs pela ordem inversa da qual eles aparecem na
lista original.
*/
%%% versao inicial
inverteInicial([], []).
inverteInicial([X|Xs], Zs) :- inverteInicial(Xs, Ys), junta(Ys, [X], Zs).
%%% inverte com is --- nao funciona, pois o is deve ser usado com numeros
inverteIs([], []).
inverteIs([X|Xs], Zs) :- inverteIs(Xs, Ys), Zs is [X|Ys].
%%% versao com acumulador
inverte(Xs, Ys) :- inverte(Xs, [], Ys).
inverte([X|Xs], Acc, Ys) :- inverte(Xs, [X|Acc], Ys).
inverte([], Ys, Ys).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- inverteInicial([1, 2, 3], [3, 2, 1]).


true.
?- inverteInicial([1, 1, 1], [3, 2, 1]).
false.
?- inverteInicial(X, [3, 2, 1]).
X = [1, 2, 3] ;
C-c C-c
Action (h for help) ? h
Options:
a:
abort
b:
c:
continue
e:
g:
goals
t:
h (?):
help
Action (h for help) ? a:

break
exit
trace

133
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

abort
% Execution Aborted
?- inverteInicial(X, [3, 2, 1]).
X = [1, 2, 3]
?- inverteInicial([1, 2, 3], Y).
Y = [3, 2, 1].
?- inverteInicial(X, Y).
X = Y, Y = [] ;
X = Y, Y = [_G295] ;
X = [_G253, _G256],
Y = [_G256, _G253] ;
X = [_G253, _G256, _G259],
Y = [_G259, _G256, _G253] ;
X = [_G253, _G256, _G259, _G262],
Y = [_G262, _G259, _G256, _G253]
?- inverte([1, 2, 3], [3, 2, 1]).
true.
?- inverte([1, 1, 1], [3, 2, 1]).
false.
?- inverte(X, [3, 2, 1]).
ERROR: Out of local stack
?- inverte([1, 2, 3], Y).
Y = [3, 2, 1].
?- inverte(X, Y).
ERROR: Out of local stack

/*
comprimento(Xs, N) :- tem o valor verdadeiro se N for o comprimento da lista Xs.
/
*
comprimento([], 0).
comprimento([_|Xs], s(N)) :- comprimento(Xs, N).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- comprimento([], X).
X = 0.
?- comprimento([1, 2, 3], s(s(s(0)))).
true.
?- comprimento([1, 2, 3], s(s(0))).
false.
?- comprimento([1, 2, 3], X).
X = s(s(s(0))).
?- comprimento(X, s(s(s(0)))).
X = [_G250, _G253, _G256].

/*
repete(Xs, XsXs) :- que tem o valor verdadeiro se cada elemento de
Xs aparece repetido em XsXs.
*/
repete([], []).
repete([X|Xs], [X, X|Ys]) :- repete(Xs, Ys).
%%
%%
%%
%%

?- repete([1, 2], [1, 1, 2, 2]).


true.
?- repete([1, 2], [1, 2]).
false.

134
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

13

PROLOG RVORES DE REFUTAO; LISTAS

?- repete([1, 2], Y).


Y = [1, 1, 2, 2].
?- repete(X, [1, 1, 2, 2]).
X = [1, 2].
?- repete(X, [1, 1, 2]).
false.
?- repete(X, Y).
X = [], Y = [] ;
X = [_G256],
Y = [_G256, _G256] ;
X = [_G256, _G265],
Y = [_G256, _G256, _G265, _G265] ;
X = [_G256, _G265, _G274],
Y = [_G256, _G256, _G265, _G265, _G274, _G274] ;
X = [_G256, _G265, _G274, _G283],
Y = [_G256, _G256, _G265, _G265, _G274, _G274, _G283, _G283]

135

14

Prolog Operadores Pr-definidos

Sumrio:
Operadores pr-definidos
Acrescentar/remover clusulas
Inspeco da estrutura dos termos
Predicados solues-todas
Resumo:
Operadores pr-definidos
Operadores relacionais
= Predicado de unificao: <t1> = <t2> tem sucesso se t1 e t2 podem ser unificados. A unificao de duas variveis no instanciadas faz com que elas partilhem
a mesma representao interna.
\= Negao do predicado de unificao.
== Predicado de identidade: <t1> == <t2> tem sucesso se t1 e t2 so idnticos (sem instanciar variveis).
\== Negao do predicado de identidade, indica que dois termos tm que ser
diferentes.
Operaes numricas
<t1> + <t2> soma.
<t1> - <t2> subtraco.
-<t1> simtrico.
<t1> * <t2> multiplicao.
<t1> / <t2> diviso.
(/ <t1>) inverso.
<t1> ** <t2> potncia.
<t1> // <t2> diviso inteira.
<t1> mod <t2> resto da diviso inteira.
(round <t1>) arredondamento para o inteiro mais prximo.
(sqrt <t1>) raiz quadrada.
(abs <t1>) valor absoluto.

136

14

PROLOG OPERADORES PR-DEFINIDOS

Operadores relacionais numricos


=:= Igualdade aritmtica.
=\= Negao da igualdade aritmtica.
< Menor.
> Maior.
=< Menor ou igual.
>= Maior ou igual.
O operador de atribuio <varivel> is <termo> avalia o termo e liga o seu valor
varivel. O resultado da sua avaliao verdadeiro. Com a atribuio, j no possvel
usar qualquer argumento dos predicados como varivel, apenas aqueles que estavam
previstos.
Instrues de escrita write(<t1>), nl, entre outras.
A representao predicado(+A, +B, C, D) significa que o predicado deve ser usado
com os dois argumentos A e B instanciados (argumentos de entrada) e dois argumentos
C e D como variveis (argumentos de sada).
Acrescentar/remover clusulas
dynamic[predicado] um predicado dinmico um predicado ao qual podem ser
acrescentadas ou removidas clusulas ao longo da execuo do programa.
assert adiciona uma clusula a um predicado na base de dados. As clusulas podem
ser adicionadas no incio ou no fim da lista de clusulas do predicado.
assert(+Termo) adiciona a clusula como a ltima do predicado.
asserta(+Termo) adiciona a clusula como a primeira do predicado.
retract(+Termo) quando o Termo um tomo ou um termo, unifica com o primeiro facto ou clusula unificvel da base de dados, que removido.
retractall(+Cabeca) todas as clusulas na base de dados cuja cabea unifica com
Cabeca so removidas.
?- assert(maisAlto(nuno, maria)).
true.
?- assert(maisAlto(nuno, ana)).
true.
?- assert((maisBaixo(X, Y) :- maisAlto(Y, X))).
true.
?- maisBaixo(X, nuno).
X = maria ;
X = ana.
?- retractall(maisBaixo(X, Y)).
true.
?- maisBaixo(maria, nuno).

137
false.
?- retract(maisAlto(nuno, ana)).
true.
?- maisAlto(nuno, X).
X = maria.
?Inspeco da estrutura dos termos
integer(X), real(X), atom(X), compound(X)
number(X) o mesmo que integer(X) ou real(X).
atomic(X) o mesmo que atom(X) ou number(X).
var(Term), nonvar(Term)
Predicados solues-todas
Predicados solues-todas so predicados que retornam todas as instncias que so resposta de um objectivo.
findall(+Template, +Objectivo, -Saco) cria uma lista com as instanciaes
obtidas para Template fazendo retrocessos sucessivos sobre o Objectivo e unifica o
resultado com Saco. Tem sucesso com uma lista vazia se o Objectivo no tiver solues. equivalente ao bagog com todas as variveis usando o operador existencial (),
excepto no facto que o bagof falha quando no existem solues.
bagof(+Template, +Objectivo, -Saco) unifica Saco com as alternativas de
Template, se o Objectivo tiver variveis livres para alm das partilhadas com o Template.
A notao VariavelObjectivo diz ao bagof para no ligar a Varivel no Objectivo.
Falha se o Objectivo no tiver solues.
setof(+Template, +Objectivo, -Conjunto) equivalente ao bagof, mas ordena o resultado usando sort/2 para obter uma lista ordenada sem duplicados (um
conjunto ordenado).

138

14

PROLOG OPERADORES PR-DEFINIDOS

Exerccio 14.1
Considere o seguinte programa para calcular o factorial de um nmero.
/*
factorial1(N, F) :- F e o factorial de N.
*/
factorial1(0, 1).
factorial1(N, F) :- N1 is N-1, factorial1(N1, F1), F is N*F1.
1. Qual a sua resposta ao objectivo factorial1(3, X)?
2. O que acontece se pedirmos uma segunda soluo? Escreva um programa que
resolva o problema.
3. Qual a sua resposta ao objectivo factorial1(X, 6)? Como resolver o problema?
Resposta:
1. ?- factorial1(3, X).
X = 6
2. ?- factorial1(3, X).
X = 6 ;
ERROR: Out of local stack
Neste caso, o programa entra em ciclo infinito. Este problema pode ser resolvido usando
uma outra definio para o factorial, por exemplo:
/*
factorial(N, F) :- F e o factorial de N.
/
*
factorial(N, F) :- factorial(N, 1, F).
factorial(N, T, F) :- N > 0, T1 is T*N, N1 is N-1, factorial(N1, T1, F).
factorial(0, F, F).
Com esta definio, o Prolog nem sequer permite que seja pedida outra soluo:
?- factorial(3, X).
X = 6.
?3. A resposta de ambos os programas a este objectivo um erro:
?- factorial1(X, 6).
ERROR: is/2: Arguments are not sufficiently instantiated
^ Exception: (8) _L136 is _G170-1 ? a
% Execution Aborted
?- factorial(X, 6).
ERROR: >/2: Arguments are not sufficiently instantiated
^ Exception: (10) _G173>0 ? a
% Execution Aborted
?Neste caso, se quisermos ter um programa que determina de que nmero que um valor
o factorial, temos que escrever outro programa especfico para o efeito, pois a utilizao do
is e dos operadores matemticos obriga a que a computao seja feita apenas num sentido.

139
Exerccio 14.2
Escreva o predicado comp(L, C), que tem o valor verdadeiro se C o comprimento da
lista L.
1. Gerando um processo recursivo.
2. Gerando um processo iterativo.
Resposta:
1. /*
comp(L, C) :- C e o comprimento da lista L.
*/
comp([], 0).
comp([_|Xs], C) :- comp(Xs, Cx), C is Cx+1.
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

O caso base aparece antes para dar uma resposta a comp(X, 2).
?- comp([], X).
X = 0.
?- comp([1, 2, 3], X).
X = 3.
?- comp([1, 2, 3], 5).
false.
?- comp(X, 2).
X = [_G241, _G244] ;
C-c C-c
Action (h for help) ? a
abort
% Execution Aborted
?-

2. /*
comp1(L, C) :- C e o comprimento da lista L.
Usando um acumulador.
*/
comp1(L, C) :- comp1(L, 0, C).
comp1([], Acc, Acc).
comp1([_|Xs], Acc, C) :- Acc1 is Acc+1, comp1(Xs, Acc1, C).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

O caso base aparece antes para dar uma resposta a comp1(X, 2).
?- comp1([], X).
X = 0.
?- comp1([1, 2, 3], X).
X = 3.
?- comp1([1, 2, 3], 5).
false.
?- comp1(X, 2).
X = [_G241, _G247] ;
ERROR: Out of global stack
?-

Exerccio 14.3
Escreva o predicado somalista(Xs, S), que tem o valor verdadeiro se S corresponde
soma de todos os elementos da lista de inteiros Xs.

140

14

PROLOG OPERADORES PR-DEFINIDOS

1. Gerando um processo recursivo.


2. Gerando um processo iterativo.
Resposta:
1. /*
somalista(Xs, S) :- tem o valor verdadeiro se S corresponde
a soma de todos os elementos da lista de inteiros Xs.
*/
somalista([X|Xs], S) :- somalista(Xs, S1), S is S1+X.
somalista([], 0).
%%
%%
%%
%%
%%
%%
%%

?- somalista([1, 2, 3, 4], X).


X = 10.
?- somalista([1, -22, 3*4, 4], X).
X = -5.
?- somalista([1, -22, 3*4, 4], 4).
false.
?-

2. /*
somalista(Xs, S) :- tem o valor verdadeiro se S corresponde
a soma de todos os elementos da lista de inteiros Xs.
Usando um acumulador.
/
*
somalista1(Xs, S) :- somalista1(Xs, 0, S).
somalista1([X|Xs], Acc, S) :- Acc1 is Acc + X, somalista1(Xs, Acc1, S).
somalista1([], S, S).
%%
%%
%%
%%
%%
%%
%%

?- somalista1([1, 2, 3, 4], X).


X = 10.
?- somalista1([1, -22, 3*4, 4], X).
X = -5.
?- somalista1([1, -22, 3*4, 4], 4).
false.
?-

Exerccio 14.4
Escreva o predicado remove(Xs, X, Ys), que tem o valor verdadeiro se Ys resulta de
remover todas as ocorrncias de X da lista Xs.
Resposta:
/*
remove(Xs, X, Ys) :- tem o valor verdadeiro se Ys resulta de
remover todas as ocorrencias de X da lista Xs.
*/
remove([X|Xs], X, Ys) :- remove(Xs, X, Ys).
remove([X|Xs], Z, [X|Ys]) :- X \= Z, remove(Xs, Z, Ys).
remove([], _, []).
%% ?- remove([], 3, X).
%% X = [].

141
%%
%%
%%
%%
%%
%%
%%
%%

?- remove([1,
X = [1, 3] ;
false.
?- remove([1,
X = [1, 2, 3,
?- remove([1,
false.
?-

2, 3, 2], 2, X).

2, 3, 2], 4, X).
2].
2, 3, 2], 2, [1]).

%% A condicao X \= Z e necessaria senao dava varias solucoes como


%% resposta, em que removia todas, todas menos uma, todas menos duas,
%% ..., ate nao remover nenhuma das ocorrencias de X. Por exemplo,
removeErrado([X|Xs], X, Ys) :- removeErrado(Xs, X, Ys).
removeErrado([X|Xs], Z, [X|Ys]) :- removeErrado(Xs, Z, Ys).
removeErrado([], _, []).
%%
%%
%%
%%
%%
%%

?- removeErrado([1, 2, 3, 2], 2, X).


X = [1, 3] ;
X = [1, 3, 2] ;
X = [1, 2, 3] ;
X = [1, 2, 3, 2].
?-

%%
%%
%%
%%
%%

Na segunda clausula e necessario adicionar X ao resultado na cabeca


e nao no corpo da clausula porque se o fizesse no corpo nunca iria
emparelhar com o caso base da recursao. Ou seja, a lista do
resultado nao seria vazia quando a lista inicial o fosse (so dava o
resultado certo nos casos em que este correspondesse a lista vazia).

removeErrado2([X|Xs], X, Ys) :- removeErrado2(Xs, X, Ys).


removeErrado2([X|Xs], Z, Ys) :- X \= Z, removeErrado2(Xs, Z, [X|Ys]).
removeErrado2([], _, []).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- removeErrado2([],
X = [].
?- removeErrado2([2,
X = [] ;
false.
?- removeErrado2([1,
false.
?- removeErrado2([1,
false.
?- removeErrado2([1,
false.
?-

3, X).
2, 2, 2], 2, X).

2, 3, 2], 2, X).
2, 3, 2], 4, X).
2, 3, 2], 2, [1, 3]).

Exerccio 14.5
Escreva o predicado escreveLista(Xs), que escreve todos os elementos da lista Xs,
um por linha, e a mensagem Fim da lista. no fim da lista.
Resposta:
/*

142

14

PROLOG OPERADORES PR-DEFINIDOS

escreveLista(Xs) :- escreve todos os elementos da lista Xs,


um por linha.
*/
escreveLista([X|Xs]) :- write(X), nl, escreveLista(Xs).
escreveLista([]) :- write(Fim da lista.), nl.
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- escreveLista([1, 2, 3]).
1
2
3
Fim da lista.
true.
?- escreveLista([ola, ola bom dia, "ola"]).
ola
ola bom dia
[111, 108, 97]
Fim da lista.
true.
?-

Exerccio 14.6
Suponha que queremos definir um predicado que permita indicar que uma pessoa um
av portugus de algum. Supondo que temos uma base de dados em Prolog com os predicados portugues(X) e avo(X,Y), podemos definir um predicado avoPortugues
de uma das seguintes maneiras:
Definio 1: avoPortugues1(X,Y) :- portugues(X), avo(X,Y).
Definio 2: avoPortugues2(X,Y) :- avo(X,Y), portugues(X).
Diga se alguma das definies mais eficiente do que a outra, em que condies, e explique porqu.
Resposta:
Em primeiro lugar convm notar que em termos lgicos as duas definies so equivalentes e
devem dar os mesmos resultados.
Se tanto X como Y estiverem instanciados, por exemplo se estivermos interessados em saber se
o Nuno um av portugus do Rui (avoPortugues(Nuno, Rui)), no h grandes diferenas
em termos de eficincia, pois so feitos os mesmos pedidos base de dados do Prolog.
Se X tiver um valor mas Y for varivel, por exemplo se estivermos interessados em saber de quem
que o Nuno um av portugus (avoPortugues(Nuno, Y)), a primeira ser mais eficiente
se o Nuno no for portugus porque no precisa de procurar os netos, e ambas so igualmente
eficientes se o Nuno for portugus.
Se X for varivel mas Y tiver um valor, por exemplo se estivermos interessados em saber quem
so os avs portugueses do Rui (avoPortugues(X, Rui), a segunda definio mais eficiente
do que a primeira. Na primeira definio, o Prolog vai emparelhar X com todos os portugueses
e s depois que vai verificar se cada um deles ou no av do Rui. Na segunda definio,
primeiro o Prolog determina quais so os avs do Rui e depois vai verificar se so portugueses.
Como o nmero de avs de algum muito menor do que o nmero de portugueses, a segunda
alternativa muito mais eficiente do que a primeira.

143
Se tanto X como Y forem variveis, convinha saber se h mais portugueses ou avs na base de
dados, e testar primeiro os que estiverem em menor nmero.
Se soubermos em que condies que o predicado vai ser chamado com mais frequncia, podemos escolher a implementao que melhor se adequa nossa aplicao.

Exerccio 14.7
Suponha que tem uma base de dados que indica as notas que os alunos tiveram nas vrias
disciplinas (nota(Nome, Disciplina, Nota)) e quais os alunos inscritos nas vrias
disciplinas (inscrito(Nome, Disciplina)).
Escreva um programa que permite lanar notas de alunos s disciplinas a que eles esto
inscritos e que determina a seguinte informao:
Lista dos alunos com pelo menos uma nota superior ou igual a um dado valor.
Mdia das notas de uma disciplina.
Mdia das notas de um aluno.
Resposta:

Ficheiro bdAlunos.pl
% Para poder usar assert, retract, um predicado tem que ser dynamic
:- dynamic nota/3.
:- dynamic inscrito/2.
/*
nota(Nome, Disciplina, Nota) :- o aluno chamado Nome fez a Disciplina
com a Nota indicada.
*/
nota(maria,
nota(maria,
nota(maria,
nota(maria,
nota(maria,

lp, 15).
fp, 16).
iaed, 13).
bd, 13).
comp, 17).

nota(pedro,
nota(pedro,
nota(pedro,
nota(pedro,
nota(pedro,

lp, 16).
fp, 15).
iaed, 14).
bd, 14).
comp, 16).

nota(nuno,
nota(nuno,
nota(nuno,
nota(nuno,
nota(nuno,

lp, 12).
fp, 13).
iaed, 15).
bd, 13).
comp, 15).

/*
inscrito(Nome, Disciplina) :- o aluno chamado Nome esta inscrito na
Disciplina.
*/

144

14

PROLOG OPERADORES PR-DEFINIDOS

inscrito(maria, as).
inscrito(maria, es).
inscrito(pedro, as).
inscrito(pedro, es).
inscrito(pedro, qs).

Ficheiro alunos.pl
:- consult(bdAlunos).
/*
lancaNota(Aluno, Disciplina, Nota) :- lanca a Nota de um Aluno a uma Disciplina
em que ele esta inscrito.
*/
lancaNota(Aluno, Disciplina, Nota) :inscrito(Aluno, Disciplina),
retract(inscrito(Aluno, Disciplina)),
actualizaNota(Aluno, Disciplina, Nota);
write(Impossivel lancar nota porque ),
write(Aluno),
write( nao esta inscrito(a) a ),
write(Disciplina),
write(.).

/*
actualizaNota(Aluno, Disciplina, Nota) :- actualiza a Nota de um Aluno a uma
Disciplina.
*/
actualizaNota(Aluno, Disciplina, Nota) :nota(Aluno, Disciplina, NotaAnterior),
NotaAnterior >= Nota,
write(O aluno ja tinha uma nota melhor.);
retractall(nota(Aluno, Disciplina, _)),
%% o retractall nao falha, mesmo que nao exista uma nota anterior
assert(nota(Aluno, Disciplina, Nota)).

/*
listaAlunosNotaSuperiorA(Nota, ListaAlunos) :- determina a lista
dos alunos com pelo menos uma nota superior a um dado valor.
*/
listaAlunosNotaSuperiorA(Nota, ListaAlunos) :setof(Aluno, alunoComNota(Aluno, Nota), ListaAlunos).
%% usa-se setof porque nao se quer que os alunos aparecam repetidos

/*
alunoComNota(Aluno, Nota) :- o Aluno tem pelo menos uma nota
superior a Nota.
*/
alunoComNota(Aluno, Nota) :nota(Aluno, _, Nota2),

145
Nota2 >= Nota.

/*
escreveLista(Lista) :- escreve os elementos da Lista, um por linha.
/
*
escreveLista([X|Xs]) :- write(X), nl, escreveLista(Xs).
escreveLista([]) :- write(Fim da lista).

/*
mediaAluno(Aluno) :- determina a media das notas do Aluno.
/
*
mediaAluno(Aluno) :bagof(Nota, Disciplina^nota(Aluno, Disciplina, Nota), ListaNotas),
%% usa-se bagof porque todas as notas contam, mesmo que sejam repetidas
escreveMedia(ListaNotas, A media das notas do(a) , Aluno).

/*
mediaDisciplina(Disciplina) :- determina a media das notas dos alunos
que ja fizeram a disciplina.
*/
mediaDisciplina(Disciplina) :bagof(Nota, Nome^nota(Nome, Disciplina, Nota), ListaNotas),
escreveMedia(ListaNotas, A media das notas de , Disciplina).

/*
escreveMedia(Lista, Mensagem, Objecto) :- determina a media dos numeros
da lista e escreve-a.
/
*
escreveMedia(Lista, Mensagem, Objecto) :calculaMedia(Lista, Media),
write(Mensagem),
write(Objecto),
write( e ),
write(Media),
write(.),
nl.

/*
calculaMedia(Lista, Media) :- determina a media dos numeros da lista.
*/
calculaMedia(Lista, Media) :contaESoma(Lista, 0, 0, Elems, Soma),
Media is Soma/Elems.

/*
contaESoma(Lista, AccElems, AccSoma, Elems, Soma) :conta e soma os numeros da lista.
*/
contaESoma([X|Xs], AccElems, AccSoma, Elems, Soma) :AccElems1 is AccElems + 1,

146

14

PROLOG OPERADORES PR-DEFINIDOS

AccSoma1 is AccSoma + X,
contaESoma(Xs, AccElems1, AccSoma1, Elems, Soma).
contaESoma([], AccElems, AccSoma, AccElems, AccSoma).

Exemplo de utilizao
% library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 3,928 bytes
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.10.4)
Copyright (c) 1990-2011 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- [alunos.pl].
% bdAlunos compiled 0.00 sec, 4,320 bytes
% alunos.pl compiled 0.00 sec, 11,768 bytes
true.
?- bagof(Nota, nota(maria, Disciplina, Nota), ListaNotas).
Disciplina = bd,
ListaNotas = [13] ;
Disciplina = comp,
ListaNotas = [17] ;
Disciplina = fp,
ListaNotas = [16] ;
Disciplina = iaed,
ListaNotas = [13] ;
Disciplina = lp,
ListaNotas = [15].
?- setof(Nota, nota(maria, Disciplina, Nota), ListaNotas).
Disciplina = bd,
ListaNotas = [13] ;
Disciplina = comp,
ListaNotas = [17] ;
Disciplina = fp,
ListaNotas = [16] ;
Disciplina = iaed,
ListaNotas = [13] ;
Disciplina = lp,
ListaNotas = [15].
?- findall(Nota, nota(maria, Disciplina, Nota), ListaNotas).
ListaNotas = [15, 16, 13, 13, 17].
?- bagof(Nota, Disciplina^nota(maria, Disciplina, Nota), ListaNotas).
ListaNotas = [15, 16, 13, 13, 17].
?- setof(Nota, Disciplina^nota(maria, Disciplina, Nota), ListaNotas).
ListaNotas = [13, 15, 16, 17].
?- findall(Nota, Disciplina^nota(maria, Disciplina, Nota), ListaNotas).

147
ERROR: fa_loop/5: Undefined procedure: (^)/2
ERROR:
^/2 can only appear as the 2nd argument of setof/3 and bagof/3
?- bagof(Nota, nota(maria, _, Nota), ListaNotas).
ListaNotas = [13] ;
ListaNotas = [17] ;
ListaNotas = [16] ;
ListaNotas = [13] ;
ListaNotas = [15].
?- setof(Nota, nota(maria, _, Nota), ListaNotas).
ListaNotas = [13] ;
ListaNotas = [17] ;
ListaNotas = [16] ;
ListaNotas = [13] ;
ListaNotas = [15].
?- findall(Nota, nota(maria, _, Nota), ListaNotas).
ListaNotas = [15, 16, 13, 13, 17].
?- bagof(Nota, nota(ana, _, Nota), ListaNotas).
false.
?- setof(Nota, nota(ana, _, Nota), ListaNotas).
false.
?- findall(Nota, nota(ana, _, Nota), ListaNotas).
ListaNotas = [].
?- listaAlunosNotaSuperiorA(16, ListaAlunos).
ListaAlunos = [maria, pedro].
?- lancaNota(pedro, xpto, 15).
Impossivel lancar nota porque pedro nao esta inscrito(a) a xpto.
true.
?- lancaNota(pedro, as, 15).
true
?- nota(pedro, as, X).
X = 15.
?- assert(inscrito(pedro, as)).
true.
?- lancaNota(pedro, as, 13).
O aluno ja tinha uma nota melhor.
true
?- nota(pedro, as, X).
X = 15.
?- setof((Nota, Disciplina), nota(nuno, Disciplina, Nota), ListaNotas).
ListaNotas = [ (12, lp), (13, bd), (13, fp), (15, comp), (15, iaed)].
?- bagof((Nota, Disciplina), nota(nuno, Disciplina, Nota), ListaNotas).
ListaNotas = [ (12, lp), (13, fp), (15, iaed), (13, bd), (15, comp)].

148

14

PROLOG OPERADORES PR-DEFINIDOS

?- setof(Nota, Disciplina^nota(nuno, Disciplina, Nota), ListaNotas).


ListaNotas = [12, 13, 15].
?- bagof(Nota, Disciplina^nota(nuno, Disciplina, Nota), ListaNotas).
ListaNotas = [12, 13, 15, 13, 15].
?- mediaAluno(nuno).
A media das notas do(a) nuno e 13.6.
true.
?- bagof(Nota, Aluno^nota(Aluno, iaed, Nota), ListaNotas).
ListaNotas = [13, 14, 15].
?- mediaDisciplina(iaed).
A media das notas de iaed e 14.
true.
?- halt.
Process prolog finished

149

15

Prolog Corte; Negao

Sumrio:
Corte
Negao
Resumo:

Corte
O operador de corte (!) tem sempre sucesso e impede o retrocesso na rvore de refutao
para alm do ponto onde resolvido, comprometendo-se com todas as escolhas feitas
desde que o objectivo inicial unificou com a cabea da clusula onde o corte ocorre. Serve
para impedir que o Prolog explore ramos das rvores de refutao que se sabe que no
devem ser explorados.
Um corte elimina todas as clusulas abaixo dele. Um objectivo unificado com
uma clusula contendo um corte que teve sucesso no consegue produzir solues
usando clusulas que ocorram abaixo dessa clusula.
O corte elimina todas as solues alternativas para a conjuno de objectivos sua
esquerda. Por exemplo, uma conjuno seguida de um corte produzir apenas uma
soluo.
O corte no afecta os objectivos sua direita na clusula. Estes podem produzir
mais do que uma soluo em caso de retrocesso. No entanto, quando esta conjuno falha, a procura continua a partir da ltima alternativa anterior escolha da
clusula contendo o corte.
Os cortes verdes servem para expressar determinismo, por exemplo quando um programa
tem vrias clusulas que se sabe que so mutuamente exclusivas, isto , que quando o
fluxo de execuo passa um determinado teste no vai passar os testes das outras clusulas.
Os cortes vermelhos so usados para aumentar a eficincia dos programas, eliminando
solues alternativas que partida no se quer que sejam geradas. Mas alteram os resultados obtidos, e por isso devem ser usados ainda com mais cuidado.
Exemplos de corte
Se o Prolog encontra um corte numa regra, ele no vai retroceder nas escolhas que j fez
para o objectivo que est a provar. Isto ilustrado pelo programa seguinte:
a1(X, Y) :- b1(X), !, c1(Y).
b1(1).
b1(2).
b1(3).
c1(1).
c1(2).
c1(3).

150

15

PROLOG CORTE; NEGAO

Se perguntarmos a1(Q, R), o Prolog pode dar vrias respostas:


?- a1(Q, R).
Q = R, R = 1 ;
Q = 1,
R = 2 ;
Q = 1,
R = 3.
?A nica opo considerada para Q 1, mas so consideradas todas as alternativas para R.
Quando o Prolog comea a provar o objectivo, tenta provar a1(Q, R) usando a primeira
clusula do programa. Para isso, precisa de provar b1(Q), que tem sucesso com Q = 1.
Depois encontra o corte e Q = 1 passa a ser a nica opo possvel para Q. Depois continua com c1(R). Primeiro, R = 1 e o objectivo concludo. Quando o utilizador tecla
;, o Prolog tenta encontrar alternativas para c1(R). Como quando o Prolog encontrou
o corte ainda no tinha escolhido um valor para R, ainda pode tentar encontrar alternativas para ele. Quando acabam as alternativas para R, o Prolog j no pode procurar
alternativas para Q e termina.
Para perceber como que o corte altera o significado de um programa, consideremos o
seguinte:
a2(X) :- b2(X), !, c2(X).
b2(1).
b2(2).
b2(3).
c2(2).
Sem o corte na primeira linha, o Prolog iria retornar Q = 2 para o objectivo a2(Q). Com
o corte, o Prolog no consegue encontrar uma resposta. Para provar o objectivo, primeiro
prova b2(Q) com Q = 1. A seguir encontra um corte, compromete-se com Q = 1 e
no consegue encontrar uma prova para c2(1). Se pudesse ter procurado alternativas,
teria encontrado Q = 2, que torna b2(Q) e c2(Q) ambos verdadeiros, mas o corte no
o permite. No entanto, se perguntarmos directamente a2(2), o Prolog responde true.
Agora, o Prolog instancia o X da primeira linha com 2, porque o utilizador o especificou,
e quando chega ao corte est comprometido com o 2, permitindo a prova de c2(2).
O corte tambm funciona quando existem vrias regras com a mesma cabea. Se o programa tiver duas clusulas para a3(X) e encontrar um corte numa dessas clusulas, no
s se compromete com as instanciaes para as variveis, mas tambm com a regra para
a3(X), no considerando as regras seguintes para este objectivo. Por exemplo, no programa seguinte:
a3(X) :- b3(X), !, c3(X).
a3(X) :- d3(X).
b3(1).
b3(4).

151
c3(3).
d3(4).
O Prolog falha com o objectivo a3(X), apesar de poder resolver o objectivo com a segunda clusula, usando X = 4 e a ltima linha do programa, d3(4).. Mas o Prolog
tenta a primeira regra e quando encontra o corte tem que ignorar todas as alternativas
para a3(X). Neste caso, o objectivo a3(4) tambm falha, porque o Prolog tambm encontra o corte, uma vez que consegue provar b3(4). De seguida, tenta provar c3(4)
mas falha, mas como est comprometido com X = 4 por causa do corte no pode procurar mais alternativas. Se a linha b3(4) fosse retirada do programa, o Prolog falharia na
primeira regra, antes de encontrar o corte e poderia resolver o objectivo com a segunda
regra.

Negao
O corte pode ser usado para implementar a negao como falhano, em conjunto com o
fail, que falha sempre.
Suponhamos que se usava o programa seguinte para responder ao objectivo nao(G). A
primeira regra aplicada e tenta-se provar G. Se G tiver sucesso, o corte encontrado,
no so procuradas mais solues, e avaliado o fail, que falha sempre, logo nao(G)
falha; se G falhar, no se continua na primeira clusula (e por isso no se executa o corte)
e executa-se a segunda clusula, que tem sempre sucesso, e por isso nao(G) tem sucesso.
Neste programa, a ordem das clusulas importante.
/*
nao(X) :- nao se consegue provar X.
*/
nao(X) :- X, !, fail.
nao(_).
Neste programa, a terminao de nao(G) depende da terminao de G, isto , se G no
terminar, nao(G) pode ou no terminar, dependendo de ser ou no encontrada uma
soluo antes do ramo infinito.
Na realidade, o Prolog tem um predicado pr-definido not/1, que exprime uma forma
de negao. Este predicado tambm pode ser usado em Prolog como um operador,
usando \+, ou seja, not(G) o mesmo que \+ G. Usando o predicado pr-definido,
not(G) verdadeiro se o Prolog no conseguir provar G como verdadeiro dada a base
de dados actual. Quando o interpretador de Prolog encontra um objectivo da forma
not(G), tenta provar o objectivo G. Se o G conseguir ser provado, ento not(G) falha,
caso contrrio, not(G) tem sucesso.
Existem programas que poderiam falhar usando a negao como falhano, mas que
no terminam usando as regras de computao do Prolog. Por exemplo, o objectivo
not((p1(X), p2(X))) no termina relativamente ao programa seguinte, mas teria
sucesso se p2(X) fosse selecionado primeiro, pois isso daria origem a uma rvore finitamente falhada.
p1(s(X)) :- p1(X).

152

15

PROLOG CORTE; NEGAO

p2(a).
p3(a).
p4(b).
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- p1(X).
ERROR: Out of global stack
?- p1(a).
false.
?- p2(X).
X = a.
?- not((p1(X), p2(X))).
ERROR: Out of global stack
?- not((p2(X), p1(X))).
true.
?- not((p2(X), p3(X))).
false.
?- not((p2(X), p4(X))).
true.
?- not(p2(X)), not(p4(X)).
false.
?- p5(X).
ERROR: toplevel: Undefined procedure: p5/1 (DWIM could not correct goal)
?- not(p2(X)), not(p5(X)).
ERROR: toplevel: Undefined procedure: p5/1 (DWIM could not correct goal)
?- not((p2(X), p5(X))).
ERROR: toplevel: Undefined procedure: p5/1 (DWIM could not correct goal)
?-

Outro exemplo a relao de estudanteSolteiro, que define algum que no casado e estudante:
/*
estudanteSolteiro(X) :- tem sucesso quando X nao e casado e e estudante
*/
estudanteSolteiro(X) :- not(casado(X)), estudante(X).
estudante(rui).
casado(pedro).

%%
%%
%%
%%
%%

?- estudanteSolteiro(X).
false.
?- estudanteSolteiro(rui).
true.

153
%%
%% ?O objectivo estudanteSolteiro(X) falha com o programa anterior, apesar de X=rui
ser uma soluo implicada logicamente pelos factos conhecidos na base de conhecimento
e de o objectivo estudanteSolteiro(rui) ter sucesso. O problema ocorre porque
not(casado(X)) falha, uma vez que casado(X) tem a soluo X=pedro. Este problema pode ser evitado trocando a ordem das clusulas e garantindo que as variveis j
esto instanciadas quando usado o not.

154

15

PROLOG CORTE; NEGAO

Exerccio 15.1
Escreva um programa que determina o mnimo entre dois nmeros.
1. Usando Prolog puro.
2. Usando cortes.
Resposta:
1. /*
minimo(X, Y, Min) :- Min e o minimo dos numeros X e Y.
/
*
minimo(X, Y, X) :- X =< Y.
minimo(X, Y, Y) :- X > Y.
2. /*
minimo2(X, Y, Min) :- Min e o minimo dos numeros X e Y.
*/
minimo2(X, Y, X) :- X =< Y, !.
minimo2(X, Y, Y) :- X > Y, !.
O corte usado neste programa um corte verde, pois no altera as solues existentes, uma
vez que ambas as clusulas tm testes que so mutuamente exclusivos. O corte na segunda
clusula aparece apenas para ficar mais parecida com a primeira, mas no essencial.

Exerccio 15.2
Explique porque que o seguinte programa para o minimo3 no tem os resultados esperados.
/*
minimo3(X, Y, Min) :- Min e o minimo dos numeros X e Y.
*/
minimo3(X, Y, X) :- X =< Y, !.
minimo3(X, Y, Y).
Resposta:
Basta usar o objectivo minimo3(2, 5, 5), que tem sucesso, apesar de 5 no ser o mnimo dos
dois argumentos. O problema que este programa foi feito pensando que o terceiro argumento
no estaria unificado, e nesse caso funcionaria, mas no caso em que o terceiro argumento conhecido podemos obter resultados errados. O programa correcto o que estava na soluo do
exerccio anterior.
Concluso: nem sempre se podem eliminar condies que partida poderiam parecer redundantes, pois o programa pode dar resultados errados se for chamado com outros argumentos que no
os inicialmente esperados.

Exerccio 15.3
Escreva um programa em Prolog que funde duas listas ordenadas de inteiros, tendo
como resultado outra lista ordenada de inteiros, incluindo repeties. Por exemplo,
funde([1, 3, 5], [3, 7], [1, 3, 3, 5, 7]) tem o valor verdadeiro.
Resposta:

155
/*
funde(Xs, Ys, Zs) :- Zs e uma lista ordenada de inteiros obtida
atraves da fusao das listas ordenadas de inteiros Xs e Ys.
*/
funde([X|Xs], [Y|Ys], [X|Zs]) :X < Y, !, funde(Xs, [Y|Ys], Zs).
funde([X|Xs], [Y|Ys], [X, Y|Zs]) :X =:= Y, !, funde(Xs, Ys, Zs).
funde([X|Xs], [Y|Ys], [Y|Zs]) :X > Y, !, funde([X|Xs], Ys, Zs).
funde(Xs, [], Xs) :- !.
funde([], Ys, Ys) :- !.
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- funde([1, 3], [2], X).


X = [1, 2, 3].
?- funde([1, 3, 5], [2, 3, 7], X).
X = [1, 2, 3, 3, 5, 7].
?- funde(X, Y, [1, 2, 3, 3, 5, 7]).
ERROR: </2: Arguments are not sufficiently instantiated
Exception: (6) funde(_G229, _G230, [1, 2, 3, 3, 5, 7]) ? a
% Execution Aborted
?- funde([1, 3, 3], Y, [1, 2, 3, 3, 5, 7]).
ERROR: </2: Arguments are not sufficiently instantiated
Exception: (7) funde([1, 3, 3], _G242, [1, 2, 3, 3, 5, 7]) ? a
% Execution Aborted
?- funde(X, [1, 3, 3], [1, 2, 3, 3, 5, 7]).
ERROR: >/2: Arguments are not sufficiently instantiated
Exception: (7) funde(_G241, [1, 3, 3], [1, 2, 3, 3, 5, 7]) ? a
% Execution Aborted
?-

Neste programa, o corte da terceira clusula no necessrio, mas est l para tornar o programa
mais simtrico e facilitar a sua leitura.
O seguinte programa, em que a primeira e a segunda clusula se juntam, tambm funcionaria.
funde2([X|Xs], [Y|Ys], [X|Zs]) :X =< Y, !, funde2(Xs, [Y|Ys], Zs).
funde2([X|Xs], [Y|Ys], [Y|Zs]) :X > Y, !, funde2([X|Xs], Ys, Zs).
funde2(Xs, [], Xs) :- !.
funde2([], Ys, Ys) :- !.

Exerccio 15.4
Em matemtica, um polinmio uma expresso construda a partir de uma ou mais variveis e constantes, usando apenas os operadores de adio, subtraco e multiplicao,
e expoentes inteiros positivos. Por exemplo, x**2-4*x+7 a representao de um polinmio em Prolog.
Considere o seguinte programa em Prolog para reconhecer polinmios.
/*
polinomio(Termo, X) :- Termo e um polinomio em X.

156

15

PROLOG CORTE; NEGAO

*/
polinomio(X, X).
polinomio(Termo, _) :number(Termo).
polinomio(Termo1+Termo2, X) :polinomio(Termo1, X), polinomio(Termo2, X).
polinomio(Termo1-Termo2, X) :polinomio(Termo1, X), polinomio(Termo2, X).
polinomio(Termo1*Termo2, X) :polinomio(Termo1, X), polinomio(Termo2, X).
polinomio(Termo1/Termo2, X) :polinomio(Termo1, X), number(Termo2).
polinomio(Termo**N, X) :integer(N), N >= 0, polinomio(Termo, X).
Altere-o, usando cortes verdes, de modo a eliminar ramos desnecessrios da rvore de
refutao.
Resposta:
/*
polinomio2(Termo, X) :- Termo e um polinomio em X.
Usa cortes verdes.
*/
polinomio2(X, X) :- !.
polinomio2(Termo, _) :number(Termo), !.
polinomio2(Termo1+Termo2, X) :!, polinomio2(Termo1, X), polinomio2(Termo2, X).
polinomio2(Termo1-Termo2, X) :!, polinomio2(Termo1, X), polinomio2(Termo2, X).
polinomio2(Termo1*Termo2, X) :!, polinomio2(Termo1, X), polinomio2(Termo2, X).
polinomio2(Termo1/Termo2, X) :!, polinomio2(Termo1, X), number(Termo2).
polinomio2(Termo**N, X) :!, integer(N), N >= 0, polinomio2(Termo, X).
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- polinomio2(4, x).
true.
?- polinomio2(4*xy, xy).
true.
?- polinomio2(4*xy, x).
false.
?- polinomio2(4*xy+2*xy**4, xy).
true.
?-

Exerccio 15.5
Explique qual o problema com o corte no seguinte programa:
/*

157
membro3(X, L) :- X e um membro de L.
*/
membro3(X, [X|_]) :- !.
membro3(X, [_|Ys]) :- membro3(X, Ys).
Resposta:
O problema que este um corte vermelho, que altera o significado do programa. Quando quisermos usar o predicado membro3 para saber quais so os elementos de uma lista, apenas vamos
conseguir obter o primeiro, pois o corte elimina a possibilidade de fazer retrocesso e encontrar os
outros elementos.
A interaco seguinte ilustra alguns dos problemas:
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- membro3(2, [1, 2, 3]).


true.
?- membro3(X, [1, 2, 3]).
X = 1.
?- membro3(X, [1, 2, 3]), X=2.
false.
?- X=2, membro3(X, [1, 2, 3]).
X = 2.
?-

O primeiro objectivo d o resultado esperado.


O segundo objectivo apenas tem uma soluo que corresponde ao primeiro elemento da lista,
quando deveria ter 3 solues.
No terceiro objectivo a resposta false, quando existe a soluo X = 2.
No quarto objectivo, conseguimos ter essa soluo porque quando chamamos o membro3 o X j
est unificado com 2 e s na chamada recursiva ao membro3 que vai unificar com o segundo
elemento da lista.

Exerccio 15.6
Escreva um programa separa(Numeros, Positivos, Negativos), que separa uma
lista de nmeros em duas listas, uma com os nmeros positivos e outra com os nmeros
negativos. Considere que o zero um nmero positivo. Por exemplo, separa([1, -2,
0, -3], [1, 0], [-2, -3]) tem o valor verdadeiro.
Resposta:
/*
separa(Numeros, Positivos, Negativos) :- Positivos contem os numeros
positivos da lista Numeros e Negativos contem os numeros negativos
da lista Numeros.
*/
separa([N | Resto], [N | Positivos], Negativos) :N >= 0, !, separa(Resto, Positivos, Negativos).
separa([N | Resto], Positivos, [N | Negativos]) :N < 0, !, separa(Resto, Positivos, Negativos).
separa([], [], []).

158
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

15

PROLOG CORTE; NEGAO

?- separa([1, -2, 5, -3], P, N).


P = [1, 5],
N = [-2, -3].
?- separa([1, -2, 5, -3], [1], N).
false.
?- separa([1, -2, 5, -3], [], N).
false.
?- separa([1, -2, 5, -3], [1, 5], N).
N = [-2, -3].
?- separa([1, -2, 5, -3], P, []).
false.
?- separa([1, -2, 5, -3], P, [-2]).
false.
?- separa([1, -2, 5, -3], P, [-2, -3]).
P = [1, 5].
?- separa(X, [0, 3, 4], [-2, -1]).
X = [0, 3, 4, -2, -1] ;
false.
?- separa(X, P, [-2, -1]).
ERROR: >=/2: Arguments are not sufficiently instantiated
Exception: (7) separa(_G220, _G221, [-2, -1]) ? a
% Execution Aborted
?- separa(X, [0, 3, 4], N).
X = [0, 3, 4],
N = [] ;
ERROR: </2: Arguments are not sufficiently instantiated
?-

Exerccio 15.7
Escreva um programa ifThenElse(A, B, C), que caso A tenha sucesso avalia B e caso
A falhe avalia C.
Resposta:
/*
ifThenElse(A, B, C) :- caso A tenha sucesso avalia B
e caso A falhe avalia C.
/
*
ifThenElse(A, B, _) :- A, !, B.
ifThenElse(_, _, C) :- C.
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- ifThenElse(2=:=1+1, writeln(avaliei B), writeln(avaliei C)).


avaliei B
true.
?- ifThenElse(2==1+1, writeln(avaliei B), writeln(avaliei C)).
avaliei C
true.
?- ifThenElse(2=:=1+1, 2==1+1, writeln(avaliei C)).
false.
?-

Convm notar que neste programa a ordem das clusulas relevante.

159
Uma alternativa, usando ;, seria a seguinte:
/*
ifThenElse2(A, B, C) :- caso A tenha sucesso avalia B
e caso A falhe avalia C.
*/
ifThenElse2(A, B, C) :- A, !, B; C.
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- ifThenElse2(2=:=1+1, writeln(avaliei B), writeln(avaliei C)).


avaliei B
true.
?- ifThenElse2(2==1+1, writeln(avaliei B), writeln(avaliei C)).
avaliei C
true.
?- ifThenElse2(2=:=1+1, (writeln(avaliei B), fail), writeln(avaliei C)).
avaliei B
false.
?- ifThenElse2(2=:=1+1, 2==1+1, writeln(avaliei C)).
false.
?-

Exerccio 15.8
Considere o programa:
m(1).
m(2) :- !.
m(3).
Diga quais so todas as respostas do Prolog aos seguintes objectivos, considerando que o
utilizador escreve ; at esgotar todas as respostas:
1. ?- m(X).
2. ?- m(X), m(Y).
3. ?- m(X), !, m(Y).
4. ?- m(X), m(Y), !.
5. ?- m(1), m(2), m(3).
Resposta:
Interaco com o Prolog:
%%
%%
%%
%%

?- m(X).
X = 1 ;
X = 2.
?- m(X), m(Y).

160
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

15
X = Y, Y = 1 ;
X = 1,
Y = 2 ;
X = 2,
Y = 1 ;
X = Y, Y = 2.
?- m(X), !, m(Y).
X = Y, Y = 1 ;
X = 1,
Y = 2.
?- m(X), m(Y), !.
X = Y, Y = 1.
?- m(1), m(2), m(3).
true.
?-

rvores SLD:

1. ?- m(X).
m(X).

m(1).
{1/X}

m(2) :- !.
{2/X}

!.

sem retrocesso at

2. ?- m(X), m(Y).

PROLOG CORTE; NEGAO

161
m(X), m(Y).

m(1).
{1/X}

m(2) :- !.
{2/X}

m(Y).

!, m(Y).

m(1).

m(2) :- !.

{1/Y }

{2/Y }

sem retrocesso at

!.

m(Y).

sem retrocesso at

m(1).

m(2) :- !.

{1/Y }

{2/Y }

!.

sem retrocesso at

3. ?- m(X), !, m(Y).
m(X), !, m(Y).

m(1).
{1/X}

!, m(Y).

sem retrocesso at

m(Y).

m(1).
{1/Y }

m(2) :- !.
{2/Y }

!.

sem retrocesso at

4. ?- m(X), m(Y), !.

162

15
m(X), m(Y), !.

m(1).
{1/X}

m(Y), !.

m(1).
{1/Y }

!.

sem retrocesso at

5. ?- m(1), m(2), m(3).


m(1), m(2), m(3).

m(1).

m(2), m(3).

m(2) :- !.

!, m(3).

sem retrocesso at

m(3).

m(3).

Exerccio 15.9
Considere o seguinte programa em Prolog.
d :- a.
d :- g.
a :- b(X), !, c(X).
a :- e.
b(1).

PROLOG CORTE; NEGAO

163
b(2).
c(2).
g.
e.
Construa a rvore de refutao para mostrar que d sucede atravs de g.
Resposta:
d.

d :- a.

d :- g.

a.

g.

a :- b(x1),!,c(x1).

g.

b(x),!,c(x).

b(1).
{1/x1}

!,c(1).

sem retrocesso at

c(1).

impossvel

Exerccio 15.10
Considere o seguinte programa:
p(X, Y) :- q(X, Y).
p(a, b).
q(c, d).
q(e, f).
q(X, Y) :- r(X), !, s(Y).
q(X, Y) :- t(X, Y).
r(e).
r(f).
s(g).
s(h).

164

15

PROLOG CORTE; NEGAO

t(i, j).
Diga quais so as respostas dadas pelo Prolog ao objectivo p(X, Y), considerando que
o utilizador escreve ; at esgotar todas as respostas.
Resposta:
Interaco com o Prolog:
?- p(X, Y).
X = c,
Y = d ;
X = e,
Y = f ;
X = e,
Y = g ;
X = e,
Y = h ;
X = a,
Y = b.
?rvore SLD:
p(X, Y).

p(X1, Y1) :- q(X1, Y1).


{X/X1, Y /Y 1}

p(a, b).
{a/X, b/Y }

q(X, Y).

q(c, d).

q(e, f).

q(X2, Y2) :- r(X2), !, s(Y2).

{c/X, d/Y }

{e/X, f /Y }

{X/X2, Y /Y 2}

r(X), !, s(Y).

r(e).
{e/X}

!, s(Y).

sem retrocesso at

s(Y).

s(g).

s(h).

{g/Y }

{h/Y }

165
Exerccio 15.11
Considere o seguinte programa:

u(a).
u(b).
v(1).
v(2).
v(3).
w1(X, Y) :- !, u(X), v(Y).
w2(X, Y) :- u(X), !, v(Y).
w3(X, Y) :- u(X), v(Y), !.

Diga quais so as respostas dadas pelo Prolog aos objectivos w1(X, Y), w2(X, Y), e
w3(X, Y), considerando que o utilizador escreve ; at esgotar todas as respostas.
Resposta:
Interaco com o Prolog:

?- w1(X, Y).
X = a,
Y = 1 ;
X = a,
Y = 2 ;
X = a,
Y = 3 ;
X = b,
Y = 1 ;
X = b,
Y = 2 ;
X = b,
Y = 3.
?- w2(X, Y).
X = a,
Y = 1 ;
X = a,
Y = 2 ;
X = a,
Y = 3.
?- w3(X, Y).
X = a,
Y = 1.
?-

rvores SLD:

166

15

PROLOG CORTE; NEGAO

w1(X, Y).

w1(X1, Y1) :- !, u(X1), v(Y1).


{X/X1, Y /Y 1}

!, u(X), v(Y).

sem retrocesso at

u(X), v(Y).

v(1).
{1/Y }

u(a).

u(b).

{a/X}

{b/X}

v(Y).

v(Y).

v(2).
{2/Y }

v(3).
{3/Y }

w2(X, Y).

w2(X1, Y1) :- u(X1), !, v(Y1).


{X/X1, Y /Y 1}

u(X), !, v(Y).

u(a).
{a/X}

!, v(Y).

sem retrocesso at

v(Y).

v(1).
{1/Y }

v(2).
{2/Y }

v(3).
{3/Y }

v(1).
{1/Y }

v(2).
{2/Y }

v(3).
{3/Y }

167
w3(X, Y).

w3(X1, Y1) :- u(X1), v(Y1), !.


{X/X1, Y /Y 1}

u(X), v(Y), !.

u(a).
{a/X}

v(Y), !.

v(1).
{1/Y }

!.

sem retrocesso at

Exerccio 15.12
Escreva um predicado de dois argumentos diferentes, que tem sucesso apenas quando
os seus dois argumentos no so o mesmo, isto , no so unificveis.
Resposta:
/*
diferentes(X, Y) :- tem sucesso quando X e Y sao diferentes.
*/
diferentes(X, X) :- !, fail.
diferentes(_, _).
Usando o not, pode ficar:
diferentes2(X, Y) :- not(X = Y).
Usando o diferente do Prolog, \=, pode ficar:
diferentes3(X, Y) :- X \= Y.
Exemplos de utilizao:
%%
%%
%%
%%

?- diferentes(a, b).
true.
?- diferentes(A, B).
false.

168
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

15

PROLOG CORTE; NEGAO

?- diferentes(1, 1).
false.
?- diferentes(1, 2-1).
true.
?- 1=2-1.
false.
?- 1=:=2-1.
true.
?- diferentes2(a, b).
true.
?- diferentes2(A, B).
false.
?- diferentes2(1, 1).
false.
?- diferentes2(1, 2-1).
true.
?- diferentes3(a, b).
true.
?- diferentes3(A, B).
false.
?- diferentes3(1, 1).
false.
?- diferentes3(1, 2-1).
true.
?-

Exerccio 15.13
Defina o conceito de duas listas serem disjuntas usando o not, partindo do princpio que
existe o predicado membro/2 que indica se um elemento membro de uma lista .
Resposta:
/*
disjuntas(X, Y) :- tem sucesso quando X e Y sao listas disjuntas.
/
*
disjuntas(Xs, Ys) :- not((membro(Z, Xs), membro(Z, Ys))).
%%
%%
%%
%%
%%

?- disjuntas([a, b, c], [1, 2, 3]).


true.
?- disjuntas([1, 2, c], [a, 2, 4]).
false.
?-

Exerccio 15.14
Considere o seguinte programa em Prolog.
pessoaAlta(X) :- not(baixa(X)), pessoa(X).
pessoa(eva).
pessoa(maria).
baixa(maria).
Qual a resposta do Prolog ao objectivo pessoaAlta(X)? Corresponde ao que estaria
intuitivamente correcto? Se no, explique como que poderia passar a corresponder.

169
Resposta:
A resposta do Prolog false, mas estariamos espera que fosse X = eva, at porque o objectivo
pessoaAlta(eva) tem sucesso. Para obtermos esta resposta, temos que garantir que o X j est
instanciado quando avaliado o not, o que podemos fazer trocando a ordem dos literais na
clusula:
pessoaAlta1(X) :- pessoa(X), not(baixa(X)).
Exemplos de utilizao:
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- pessoaAlta(X).
false.
?- pessoaAlta(eva).
true.
?- pessoaAlta(maria).
false.
?- pessoaAlta1(X).
X = eva ;
false.
?- pessoaAlta1(eva).
true.
?- pessoaAlta1(maria).
false.
?-

Exerccio 15.15
Considere o seguinte programa:
p1(s(X)) :- p1(X).
p2(a).
Diga qual a resposta do Prolog ao objectivo not((p1(X), p2(X))).
Resposta:
?- not((p1(X), p2(X))).
ERROR: Out of global stack
?-

Para este objectivo, o Prolog no termina, mas teria sucesso se p2(X) fosse selecionado primeiro,
por exemplo em not((p2(X), p1(X))), pois isso daria origem a uma rvore finitamente falhada.
?- not((p2(X), p1(X))).
true.
?-

Exerccio 15.16
Considere a seguinte base de conhecimento:

170

15

PROLOG CORTE; NEGAO

cao(bobi).
cao(fiel).
cao(guerreiro).
morde(guerreiro).
E as duas formas de representar que o Carlos gosta de todos os ces que no mordam.
Repare que em termos lgicos no existem diferenas entre as duas.
gosta1(carlos, X) :- cao(X), not(morde(X)).
gosta2(carlos, X) :- not(morde(X)), cao(X).
Diga qual a resposta do Prolog a cada um dos seguintes objectivos gosta1(carlos,
X) e gosta2(carlos, X). Se as respostas forem diferentes, explique a razo dessas
diferenas.
Resposta:
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%
%%

?- gosta1(carlos, X).
X = bobi ;
X = fiel ;
false.
?- gosta2(carlos, X).
false.
?- halt.
Process prolog finished

No primeiro caso, primeiro o Prolog vai tentar encontrar os ces e s depois de estarem instanciados que vai tentar provar que no mordem. Neste caso, os resultados so os esperados.
No segundo caso, a varivel X no est instanciada quando o Prolog vai tentar provar not(morde(X)),
e este objectivo falha porque existe algo que morde na base de conhecimento.
Convm notar que ambos os objectivos dariam origem a um erro se no existisse nada que mordesse nem nenhuma definio para o que significa morder na base de conhecimento, pois o predicado no estaria definido.