Você está na página 1de 25

192

2006
c Newton José Vieira Lógica aplicada à computação

• {∃x∀y α(x, y)} |= ∀y∃x α(x, y)


Já o inverso desta última não é válida, pois existe interpretação i que satisfaz
∀y∃x p(x, y) e não satisfaz ∃x∀y p(x, y); por exemplo, uma em que:
– Universo: {a, b};
– pi = {(a, a), (b, b)}.

As consequências lógicas do Exemplo 119 podem ser usadas para fundamentar regras
de inferência para se lidar com os quantificadores. No entanto, na próxima seção serão
apresentadas regras de mais longo alcance.
Aqui, como em lógica proposicional, α ≡ β, se, e somente se, {α} |= β e {β} |= α.
As propriedades da consequência lógica vistas na Seção 2.7 valem também para a
lógica de predicados. Em particular, vale o teorema da dedução, Teorema 12, segundo
o qual H ∪ {α} |= β se, e somente se, H |= α → β, assim como:
• H ∪ {α} |= α.

• Se H |= α e H ∪ {α} |= β, então H |= β.
• Se H |= α, então H ∪ {β} |= α. Ou seja, a lógica é monotônica.

• H |= α se e somente se H ∪ {¬α} é insatisfatı́vel.


O problema de determinar se uma fórmula é consequência lógica de um conjunto
de fórmulas, que era decidı́vel em lógica proposicional, passa a ser indecidı́vel em lógica
de primeira ordem. Para demonstrar tal indecidibilidade basta mostrar que, dada uma
máquina de Turing M e uma palavra w, é possı́vel construir (existe algoritmo para tal)
H e α tais que H |= α se e somente se M pára se a entrada é w.3

Exercı́cios
1. Repita o Exercı́cio 1 da seção anterior e mostre que a última fórmula é conse-
quência lógica das outras. Note que, para isto, é preciso explicitar a relação que
existe entre pequeno e grande.

3.5 Dedução
Assim como para a lógica proposicional, existem sistemas dedutivos corretos e comple-
tos para a lógica de predicados. Tais sistemas, basicamente, acrescentam axiomas e/ou
regras de inferência para lidar com os quantificadores universal e existencial.
Nesta seção serão revisitados alguns sistemas dedutivos vistos para lógica proposi-
cional com os acréscimos pertinentes.
3
Uma demonstração pode ser vista, por exemplo, em Ben-Ari, M. Mathematical Logic for Computer
Science, 2nd ed., Springer, 2001.
Newton José Vieira Capı́tulo 3: Lógica de predicados 193

3.5.1 Exemplos de regras de inferência e deduções


A seguir, são apresentadas algumas regras de inferência normalmente utilizadas para
lidar com os quantificadores. Evidentemente, as regras de inferência apresentadas na
Seção 2.8.1 continuam valendo para a lógica de predicados.
A seguir, serão apresentados dois exemplos de regras de inferência que envolvem os
quantificadores.
A primeira regra, que será denominada instanciação universal (IU), é:
∀να
αtν
em que t é um termo sem variáveis. A seguir, um exemplo de uso de tal regra.

Exemplo 120 Segue uma dedução que mostra que:

{∀x(homem(x) → mortal (x)), homem(Sócrates )} ⊢ mortal (Sócrates):

1. ∀x(homem(x) → mortal (x)) (H)


2. homem(Sócrates) (H)
3. homem(Sócrates) → mortal (Sócrates) (IU 1)
4. mortal (Sócrates) (MP 3,2)

O segundo exemplo de regra de inferência, generalização existencial (GE), vem a


seguir:
αtν
∃να

Uma estratégia baseada nesta regra seria: para provar que ∃να, basta provar αtν para
algum termo t.

Exemplo 121 Uma dedução que mostra que :

{∀x(homem(x) → mortal (x)), homem (Sócrates)} ⊢ ∃x mortal (x):

1. ∀x(homem(x) → mortal (x)) (H)


2. homem(Sócrates) (H)
3. homem(Sócrates) → mortal (Sócrates) (IU 1)
4. mortal (Sócrates) (MP 3,2)
5. ∃x mortal (x) (GE 4)
194 2006
c Newton José Vieira Lógica aplicada à computação

Exercı́cios
1. Determine deduções que mostrem:

a) {∀x(p(x) → q(x)), ¬q(a)} |= ∃x ¬p(x)


b) {∀x(p(x) → q(x)), p(a) ∧ r(a)} |= ∃x(r(x) ∧ q(x))
c) {∃x p(x) → ∀x(q(x) → r(x)), p(a) ∧ q(a)} |= r(a)

3.5.2 Sistema dedutivo do tipo Hilbert


A seguir, o sistema do tipo Hilbert apresentado para lógica proposicional na Seção 2.8.2
será complementado, também apenas para dar um exemplo de sistema dedutivo cor-
reto e completo para a lógica de predicados de primeira ordem.4 Repete-se, aqui, os
esquemas de axiomas Ax1, Ax2 e Ax3 e a regra modus ponens.

• Se α, β e γ são fórmulas, então são axiomas:

Ax1: α → (β → α)
Ax2: (α → (β → γ)) → ((α → β) → (α → γ))
Ax3: (¬β → ¬α) → [(¬β → α) → β]
Ax4: ∀να → αtν se ν é substituı́vel por t em α
Ax5: ∀ν(α → β) → (α → ∀νβ) se não há ocorrência livre de ν em α

• Regras de inferência:

MP: modus ponens:


α α→β
β
GN: generalização:
α
∀ν α

Este sistema dedutivo aproveita o fato de que o conjunto de conectivos {→, ¬, ∀} é


completo para lógica de primeira ordem.
Deve-se ressaltar que nesse tipo de sistema dedutivo podem ser deduzidas fórmulas
com variáveis livres. O objetivo é que elas possam ser usadas como “intermediárias”
em provas de sentenças. De qualquer maneira, elas podem ser interpretadas como
se estivessem quantificadas universalmente. Por exemplo, a fórmula p(x) → (q(x) →
p(x)) é uma instância do esquema de axioma Ax1, devendo x ser imaginada como
universalmente quantificada.

Exemplo 122 Uma dedução usando o sistema dedutivo acima:


4
Este sistema dedutivo foi tomado emprestado de Mendelson, E. Introduction to Mathematical Logic,
3rd edition, Wadsworth & Brooks/Cole, 1987, página 56.
Newton José Vieira Capı́tulo 3: Lógica de predicados 195

1. ∀x(p(x) → q(x)) (H)


2. ∀x p(x) (H)
3. ∀x(p(x) → q(x)) → (p(x) → q(x)) (Ax4)
4. p(x) → q(x) (MP 1,3)
5. ∀p(x) → p(x) (Ax4)
6. p(x) (MP 2,5)
7. q(x) (MP 4,6)
8. ∀x q(x) (GN 7)

Tem-se, portanto, que {∀x(p(x) → q(x)), ∀x p(x)} |= ∀x q(x).

Como todo sistema dedutivo do tipo Hilbert, esse tem interesse principalmente
teórico, não sendo adequado para servir de base para processamento em computadores
nem utilização por seres humanos em demonstrações.

Exercı́cios

1. Prove usando o sistema de Hilbert visto anteriormente:

a) {∀x(p(x) → q(x)), ∀x(q(x) → r(x))} |= ∀x(p(x) → r(x))

3.5.3 Tableau semânticos


Segue uma complementação dos sistemas de tableaux para tratamento dos quantifi-
cadores. O termo t deve ser um termo sem variáveis da linguagem, mas a constante a
tem que ser nova, isto é, uma ainda não utilizada. No tableau com fórmulas marcadas,
as regras de inferência faltantes são:

1. Conectivo ∀ (t é um termo sem variáveis e c uma constante nova):

V ∀ν α F ∀ν α
V αtν F αaν

2. Conectivo ∃ (a é uma constante nova e t um termo sem variáveis):

V ∃ν α F ∃ν α
V αaν F αtν

Exemplo 123 Segue um tableau que prova que ∀x (p(x) → q(x)) → (∀x p(x) →
∀x q(x)) é válida:
196 2006
c Newton José Vieira Lógica aplicada à computação

1. F ∀x (p(x) → q(x)) → (∀x p(x) → ∀x q(x))


2. V ∀x (p(x) → q(x)) [1]
3. F ∀x p(x) → ∀x q(x) [1]
4. V ∀x p(x) [3]
5. F ∀x q(x) [3]
6. F q(a) [5]
7. V p(a) [4]
8. V p(a) → q(a) [2]
HH
 HH
 HH
9. F p(a) [8] 10. V q(a) [8]
X X

O exemplo seguinte cria três constantes novas.

Exemplo 124 O próximo tableau prova que ∀x (p(x) ∧ q(x)) ↔ (∀x p(x) ∧ ∀x q(x)) é
válida:
1. F ∀x (p(x) ∧ q(x))
X
↔ (∀x p(x) ∧ ∀x q(x))
 XX
 XXX
 XXX

 XX
X
2. V ∀x (p(x) ∧ q(x)) [1] 14. F ∀x (p(x) ∧ q(x)) [1]
3. F ∀x p(x) ∧ ∀x q(x) [1] 15. V ∀x p(x) ∧ ∀x q(x) [1]
Q 16. V ∀x p(x) [15]
 Q
 Q 17. V ∀x q(x) [15]

 QQ
4. F ∀x p(x) [3] 9. F ∀x q(x) [3] 18. F p(b3) ∧ q(b3) [14]
Q
5. F p(b1) [4] 10. F q(b2) [9]  Q
 Q
6. V p(b1) ∧ q(b1) [2] 11. V p(b2) ∧ q(b2) [2]  QQ
7. V p(b1) [6] 12. V p(b2) [11] 19. F p(b3) [14] 21. F q(b3) [14]
8. V q(b1) [6] 13. V q(b2) [11] 20. V p(b3) [16] 22. V q(b3) [17]
X X X X

Para tableaux com fórmulas não marcadas, as regras de inferência para os quantifi-
cadores são:

1. Conectivo ∀ (t é um termo sem variáveis e a uma constante nova):


∀ν α ¬∀ν α
αtν ¬αaν

2. Conectivo ∃ (a é uma constante nova e t um termo sem variáveis):


∃ν α ¬∃ν α
αaν ¬αtν
Newton José Vieira Capı́tulo 3: Lógica de predicados 197

Exemplo 125 Segue um tableau com fórmulas não marcadas que prova que a mesma
fórmula do Exemplo 123, ∀x (p(x) → q(x)) → (∀x p(x) → ∀x q(x)), é válida:
1. ¬∀x (p(x) → q(x)) → (∀x p(x) → ∀x q(x))
2. ∀x (p(x) → q(x)) [1]
3. ¬∀x p(x) → ∀x q(x) [1]
4. ∀x p(x) [3]
5. ¬∀x q(x) [3]
6. ¬q(a) [5]
7. p(a) [4]
8. p(a) → q(a) [2]
HH
 HH
 HH
9. ¬p(a) [8] 10. q(a) [8]
X X

Às vezes, a partir de um tableau não fechado para uma fórmula ¬α, pode-se recu-
perar um modelo que satisfaz ¬α, sendo assim, um modelo que falseia α, mostrando
porque α não é válida. Segue um exemplo.

Exemplo 126 Segue um tableau não fechado para ¬[∃x p(x) ∧ ∃x q(x) → ∃x (p(x) ∧
q(x))]:
1. ¬[∃x p(x) ∧ ∃x q(x) → ∃x (p(x) ∧ q(x))]
2. ∃x p(x) ∧ ∃x q(x) [1]
3. ¬∃x(p(x) ∧ q(x)) [1]
4. ∃x p(x) [2]
5. ∃x q(x) [2]
6. p(a1 ) [4]
7. q(a2 ) [5]
8. ¬(p(a1 ) ∧ q(a1 )) [3]
9. ¬(p(a2 ) ∧ q(a2 )) [3]
H
 HH
 HH
 H
10. ¬p(a1 ) [8] 11. ¬q(a1 ) [8]
X @
@
@
12. ¬p(a2 ) [9] 13. ¬q(a2 ) [9]
X
As fórmulas 6, 7, 11 e 12, no ramo não fechado, correspondem a uma interpretação
que satisfaz ¬[∃x (p(x) ∧ ∃x q(x) → ∃x (p(x) ∧ q(x))], ou ainda, a uma que falseia
∃x (p(x) ∧ ∃x q(x) → ∃x (p(x) ∧ q(x)). Ou seja, tal fórmula não é válida, sendo que uma
interpretação i tal que v i (∃x (p(x) ∧ ∃x q(x) → ∃x (p(x) ∧ q(x))) = F é aquela em que
o universo consta de dois objetos, ai1 e ai2 , e:

• ai1 ∈ pi (por 6);


198 2006
c Newton José Vieira Lógica aplicada à computação

• ai1 6∈ q i (por 11);

• ai2 ∈ q i (por 7); e

• ai2 6∈ pi (por 12).

Em tableaux com fórmulas não marcadas, uma fórmula universalmente quantificada


pode ser usada várias vezes, instanciando-se a variável com termos ainda não usados.
Isto é o que pode fazer com que um tableau tenha ramos infinitos e, portanto, fazer
com que um procedimento baseado em tableaux entre em loop. Como a construção
de um tableau visa encontrar, se existir, uma interpretação que falseia a fórmula, se
tal interpretação existir e contiver, por exemplo, uma relação infinita, tal relação será
evidenciada justamente por meio de um ramo infinito, como mostra o exemplo a seguir.

Exemplo 127 Ao procurar por um modelo que satisfaz ∀x∃y p(x, y)∧∀x∀y∀z(p(x, y)∧
p(y, z) → p(x, z)), tem-se o seguinte trecho:
1. ∀x∃y p(x, y) ∧ ∀x∀y∀z(p(x, y) ∧ p(y, z) → p(x, z))
2. ∀x∃y p(x, y) [1]
3. ∀x∀y∀z(p(x, y) ∧ p(y, z) → p(x, z)) [1]
4. ∃y p(a1 , y) [2]
5. p(a1 , a2 ) [4]
6. ∃y p(a2 , y) [2]
7. p(a2 , a3 ) [6]
8. ∃y p(a3 , y) [2]
9. p(a3 , a4 ) [8]
..
.

Em vez de substituir variáveis universalmente quantificadas por novos termos sem


controle, correndo o risco de proporcionar um loop, existe a alternativa de usar uma
versão com unificação. Essa versão permite também, em certas circunstâncias, detectar
que não há como fechar o tableau.
Como unificação é importante, não apenas em conexão com o método de tableaux,
mas também com o de resolução, ela será abordada em uma seção.

Exercı́cios
1. Demonstre usando tableaux:

a) {∀x(p(x) → q(x)), ∀x(q(x) → r(x))} |= ∀x(p(x) → r(x))


b) {∀x(p(x) → q(x)), ∃x(r(x) ∧ p(x))} |= ∃x(r(x) → q(x))
c) {} |= ∃x (p(x) ∨ q(x)) ↔ (∃x p(x) ∨ ∃x q(x))
Newton José Vieira Capı́tulo 3: Lógica de predicados 199

3.5.4 Unificação
A noção de unificação é uma noção central na área de automação de sistemas de in-
ferência, responsável por um considerável acréscimo de eficiência nesse tipo de sistema.
Intuitivamente, o problema é encontrar termos, os mais gerais possı́veis, que, ao substi-
tuirem variáveis de um conjunto de expressões, tornem tais expressões idênticas. Uma
expressão pode ser um termo, uma fórmula, um tableau, uma cláusula etc.
Inicialmente, define-se o conceito de substituição. Uma substituição é um conjunto
{v1 /t1 , . . . , vn /tn } (n ≥ 0), em que, para 1 ≤ i ≤ n:

(a) vi é variável;

(b) ti é um termo diferente de vi ; e

(c) vi 6= vj para i 6= j.

Cada vi /ti é denominado um componente da substituição. A substituição sem compo-


nentes, ∅, é denominada substituição vazia.
Seja uma substituição σ = {v1 /t1 , . . . , vn /tn } e uma expressão E. A aplicação
da substituição σ a E, denotada por Eσ, é a expressão obtida de E substituindo-se
simultaneamente cada vi por ti . Eσ é denominada uma instância de E.

Exemplo 128 Seja a substituição σ = {x/a, y/f (b), z/f (y)} e a fórmula α = p(x, y, b)∨
q(z). Então, ασ = p(a, f (b), b) ∨ q(f (y)).

Sejam duas substituições σ = {v1 /t1 , . . . , vn /tn } e θ = {w1 /u1 , . . . , wm /um }. A


composição de σ e θ, σ◦θ, é a substituição tal que, para qualquer expressão E, E(σ◦θ) =
(Eσ)θ (ou seja, primeiro aplica-se σ, e depois θ. Ela pode ser obtida de

{v1 /t1 θ, . . . , vn /tn θ, w1 /u1 , . . . , wm /um }

eliminando-se

• todo componente vi /ti θ tal que vi = ti θ, e

• todo componente wj /uj tal que wj ∈ {v1 , v2 , . . . , vn }.

Exemplo 129 Seja σ = {x/f (y), y/z} e θ = {x/a, y/b, z/y}. Segue-se que σ ◦ θ =
{x/f (b), z/y}.

Algumas propriedades da composição de substituições são:

• associatividade: (σ ◦ θ) ◦ λ = σ ◦ (θ ◦ λ), e

• ∅ ◦ σ = σ ◦ ∅ = σ.
200 2006
c Newton José Vieira Lógica aplicada à computação

Uma substituição σ é uma substituição unificadora, ou um unificador , para um


conjunto de expressões {E1 , . . . , En } se, e somente se, E1 σ = E2 σ = · · · = En σ; neste
caso, diz-se que o conjunto de expressões é unificável.
Um unificador σ para {E1 , . . . , En } é dito ser um unificador mais geral (umg) se,
e somente se, para todo unificador θ do conjunto existe uma substituição λ tal que
θ = σ ◦ λ.

Exemplo 130 Algumas expressões e unificadores (quando existem):

• {p(f (x), y, x), p(z, f (z), a)} tem um único unificador que, portanto, é um unifi-
cador mais geral: {x/a, y/f (f (a)), z/f (a)}.

• {f (f (x, y), y), f (z, a)} tem um número ilimitado de unificadores, como, por exem-
plo, estes: {x/a, y/a, z/f (a, a)}, {x/b, y/a, z/f (b, a)},{x/w, y/a, z/f (w, a)}, {y/a, z/f (x, a)}
etc. Apenas os dois últimos são umgs.

• não existe unificador para {p(x, x), p(y, f (y))}.

O algoritmo a ser apresentado a seguir, determina um umg para dois termos ou


fórmulas atômicas, que é o que será necessário para os métodos de inferência a serem
apresentados. Para simplificar o algoritmo, assume-se que o sı́mbolo predicativo ou
funcional é o 0-ésimo argumento da fórmula atômica ou forma funcional em que partic-
ipa. Assim, no algoritmo de unificação, apresentado na Figura 3.9, argi (Ej ) é o i-ésimo
argumento da expressão Ej .
A eficiência do algoritmo de unificação é extremamente importante, pois ele é apli-
cado em cada passo de inferência, como será visto adiante. Um dos problemas do
algoritmo com relação a eficiência é o chamado teste de ocorrência: o teste para deter-
minar se uma variável ocorre em um termo; tanto assim, que em muitas implementações
da linguagem PROLOG ele é simplesmente omitido. Entretanto, sua omissão compro-
mete a consistência do provador (ele pode derivar conclusões erradas). Um algoritmo
para o teste de ocorrência está mostrado na Figura 3.10.
Os algoritmos apresentados não enfocam aspectos de eficiência. Existe na literatura
uma ampla gama de algoritmos de unificação que podem ser adequados em um contexto
ou outro; muitas vezes, a escolha depende de vários fatores, como, por exemplo, o
tipo de estruturas de dados utilizado para representar as deduções. O fato de um
algoritmo ser melhor que outro em termos de complexidade computacional, nem sempre
implica que ele vai ser mais eficiente em determinado contexto, pois pode exigir um
tipo de representação não compatı́vel com o modelo de implementação utilizado para
as deduções.

Exercı́cios
1. Determine σ ◦ θ para:
Newton José Vieira Capı́tulo 3: Lógica de predicados 201

proc MGU(expressões E1 , E2 ) retorna (booleano, unificador):


se E1 = E2 então
retorne (verdadeiro,∅)
senãose E1 é variável então
se E1 ocorre em E2 então
retorne (falso,∅)
senão
retorne (verdadeiro,{E1 /E2 })
fimse
senãose E2 é variável então
se E2 ocorre em E1 então
retorne (falso,∅)
senão
retorne (verdadeiro,{E2 /E1 })
fimse
senãose os números de argumentos de E1 e E2 são diferentes então
retorne (falso,∅)
senão
σ := ∅;
para i de 0 até número de argumentos de E1 faça
(suc, θ) := MGU(argi (E1 ), argi (E2 ));
se suc então
E1 := E1 θ;
E2 := E2 θ;
σ := σ ◦ θ
senão
retorne (falso, ∅)
fimse
fimpara;
retorne (verdadeiro, σ)
fimse
fim MGU

Figura 3.9: Algoritmo de unificação.

proc ocorre(variável v, expressão E) retorna booleano:


se E é variável então
retorne v = E
senão
para i de 1 até número de argumentos de E faça
se ocorre(v, argi (E)) então
retorne verdadeiro
fimse
fimpara;
retorne falso
fimse
fim ocorre

Figura 3.10: Algoritmo para o teste de ocorrência.


202 2006
c Newton José Vieira Lógica aplicada à computação

(a) σ = {x/f (y), z/f (w)}, θ = {y/a, z/f (a)}


(b) σ = {x/a, y/f (z)}, θ = {x/z, z/a}
(c) σ = {x/y, z/f (g(x, y))}, θ = {x/y, y/a, z/a}
2. Faça um algoritmo para uma função que retorne a composição de duas substitu-
ições.
3. Determine umgs (caso existam) para as seguintes expressões:
(a) p(x, y) e p(a, z)
(b) p(x, y) e p(f (x), a)
(c) p(x, f (x)) e p(y, f (y))
(d) p(x, f (x)) e p(a, f (y))
(e) p(x, f (x)) e p(y, y)
(f) p(x, x) e p(y, f (z))
(g) p(x, x) e p(y, f (y))
(h) p(x, x, g(x)) e p(y, f (z), z)
(i) p(x, x, g(x)) e p(y, f (z), w)
4. Descreva modificações para o algoritmo de unificação da Figura 3.9 para que ele
seja capaz de unificar n pares de expressões (n ≥ 2).

3.5.5 Tableau com unificação


A idéia aqui é, ao invés de possibilitar a substituição de uma variável x por qualquer
termo t usando as regras para os quantificadores universal e negação do existencial,
simplesmente substituir x por uma variável livre nova e, depois, usar unificação para
encontrar um termo para substituir x em alguma tentativa de fechar um ramo. As
regras de inferência se tornam (apenas para tableaux não marcados):
1. Conectivo ∀ (v é uma variável nova e f uma função nova):
∀x α ¬∀x α
αvx ¬αx
f (x1 ,...,xn )

2. Conectivo ∃ (v é uma variável nova e f é uma função nova):


∃x α ¬∃x α
f (x ,...,xn )
αx 1 ¬αvx

Nestas regras, x1 , . . . , xn são todas as variáveis livres de α, com exceção de x. A função


f é denominada função de Skolem. Se n = 0, então f é uma constante de Skolem.
Se σ é uma substituição e T um tableau, T σ é o resultado de substituir cada fórmula
α do tableau por ασ.
Além das regras já vistas, agora é preciso a seguinte regra, para fechar um ramo via
unificação:
Newton José Vieira Capı́tulo 3: Lógica de predicados 203

Se um tableau T tem um ramo com dois literais L1 e L2 , um positivo e


outro negativo, tais que σ é um umg de L1 e L2 , então T σ também é uma
tableau.

Exemplo 131 Usando-se as regras para ∀ e ∃, constrói-se na tentativa de se chegar a


uma prova da validade de ∃w∀x p(x, w, f (x, w)) → ∃w∀x∃y p(x, w, y):
1. ¬[∃w∀x p(x, w, f (x, w)) → ∃w∀x∃y p(x, w, y)]
2. ∃w∀x p(x, w, f (x, w)) [1]
3. ¬∃w∀x∃y p(x, w, y) [1]
4. ∀x p(x, sk1 , f (x, sk1 )) [2]
5. ¬∀x∃y p(x, v1 , y) [3]
6. ¬∃y p(sk2 (v1 ), v1 , y) [5]
7. p(v2 , sk1 , f (v2 , sk1 )) [4]
8. ¬p(sk2 (v1 ), v1 , v3 ) [6]
Observe que os literais 7 e 8 têm umg σ = {v1 /sk1 , v2 /sk2 (sk1 ), v3 /f (sk2 (sk1 ), sk1 )}.
Aplicando-se esse umg ao tableau acima, obtém-se um tableau fechado.

3.5.6 Resolução
Assim como para lógica proposicional, o sistema de resolução para lógica de predicados
trabalha com um conjunto de cláusulas. Um conjunto de cláusulas c(α) correspondente
a uma sentença α é equivalente a esta com relação a satisfabilidade, ou seja, c(α) tem um
modelo se, e somente se α tem um modelo. Isto implica, por exemplo, que α é válida se, e
somente se, um conjunto de cláusulas correspondente
S a ¬α é insatisfatı́vel. E, portanto,
implica também que H |= α se, e somente se, γ∈H c(γ) ∪ c(¬α) é insatisfatı́vel. Assim,
resolução para lógica de predicados também trabalha mostrando a insatisfabilidade de
um conjunto de cláusulas.
Aqui, novamente, uma cláusula é um conjunto de literais. Um literal é uma fórmula
atômica ou a negação de uma. Lembre-se que a cláusula sem literais é denominada
cláusula vazia, e é denotada aqui por ⊥. Um conjunto de cláusulas correspondente a
uma sentença pode ser obtido aplicando-se os seguintes passos, em sequência:

1. Eliminar os conectivos ↔ e →, utilizando as equivalências:

α → β ≡ ¬α ∨ β
α ↔ β ≡ (¬α ∨ β) ∧ (α ∨ ¬β)

2. Encostar ¬ nos átomos, utilizando as equivalências:

¬¬α ≡ α
¬(α ∨ β) ≡ ¬α ∧ ¬β
¬(α ∧ β) ≡ ¬α ∨ ¬β
¬∀vα ≡ ∃v¬α
¬∃vα ≡ ∀v¬α
204 2006
c Newton José Vieira Lógica aplicada à computação

3. Renomear as variáveis, de tal forma que não fiquem duas quantificações com a
mesma variável.

4. Para cada sub-fórmula da forma α = ∃vβ, sejam w1 , w2 , . . . , wn todas as variáveis


tais que

. α está no escopo de ∀wi e


. wi ocorre livre em β.

Eliminar ∃v, e

a. se n = 0, substituir toda ocorrência livre de v em β por uma constante nova;


b. se n > 0, substituir toda ocorrência livre de v em β por uma forma funcional
f (w1 , w2 , . . . , wn ), em que f é um sı́mbolo funcional novo.

5. Eliminar todas as quantificações universais.

6. Transformar para a forma normal conjuntiva, utilizando as equivalências:

α ∨ (β ∧ γ) ≡ (α ∨ β) ∧ (α ∨ γ)
(α ∧ β) ∨ γ ≡ (α ∨ γ) ∧ (β ∨ γ)

7. Cada disjunção da forma normal conjuntiva obtida dá origem a uma cláusula: o
conjunto dos literais da disjunção.

As constantes introduzidas no passo 4.a são denominadas constantes de Skolem, e os


sı́mbolos funcionais introduzidos em 4.b são ditos denotar funções de Skolem.
Aplicando-se a transformação acima a uma sentença γ, obtém-se, após o passo 3,
uma sentença γ ′ tal que γ ≡ γ ′ , com as seguintes caracterı́sticas:

(a) só existem ocorrências dos conectivos ∧, ∨, ¬, ∀ e ∃;

(b) só existem conectivos ¬ em literais; e

(c) não existem quantificações com a mesma variável.

Imediatamente após o passo 4, tem-se uma sentença γ ′′ , sem quantificadores existenci-


ais, que não é logicamente equivalente a γ ′ (e, portanto, não é logicamente equivalente
a γ), pois não se pode afirmar que {∃vβ} |= βvt , embora seja verdade que {βvt } |= ∃vβ.
Mas, γ ′′ tem um modelo se, e somente se, γ ′ (e, portanto, γ) tem um modelo, como pode
ser facilmente verificado, pela semântica de ∀ e ∃. Tendo sido eliminados os quantifi-
cadores existenciais, só restam os universais; estes são eliminados no passo 5, obtendo-se
uma fórmula logicamente equivalente à anterior, desde que se considere todas as suas
variáveis implicitamente universalmente quantificadas (por causa da renomeação feita
no passo 3). Isto feito, tem-se uma fórmula cujos únicos conectivos são ∧, ∨ e ¬,
estes últimos em literais. No passo 6 obtém uma fórmula equivalente na forma normal
conjuntiva, e cada disjunção desta dá origem a uma cláusula no passo 7.
Newton José Vieira Capı́tulo 3: Lógica de predicados 205

Exemplo 132 Seja a sentença

∀x(∀yp(x, y) → ∃yq(x, y)) ∨ ∃x∀y(p(x, y) ∧ q(y, x)).

Segue a obtenção de um conjunto de cláusulas correspondente, utilizando o algoritmo


acima, passo a passo:

1. Eliminando-se →:
∀x(¬∀yp(x, y) ∨ ∃yq(x, y)) ∨ ∃x∀y(p(x, y) ∧ q(y, x))

2. Empurrando-se ¬ para dentro:


∀x(∃y¬p(x, y) ∨ ∃yq(x, y)) ∨ ∃x∀y(p(x, y) ∧ q(y, x))

3. Renomeando-se as variáveis:
∀x(∃y¬p(x, y) ∨ ∃zq(x, z)) ∨ ∃w∀u(p(w, u) ∧ q(u, w))

4. Eliminando-se os quantificadores existenciais:


∀x(¬p(x, f1 (x)) ∨ q(x, f2 (x))) ∨ ∀u(p(a, u) ∧ q(u, a))

5. Eliminando-se os quantificadores universais:


(¬p(x, f1 (x)) ∨ q(x, f2 (x))) ∨ (p(a, u) ∧ q(u, a))

6. Colocando-se na forma normal conjuntiva:


(¬p(x, f1 (x)) ∨ q(x, f2 (x)) ∨ p(a, u)) ∧
(¬p(x, f1 (x)) ∨ q(x, f2 (x)) ∨ q(u, a))

7. Obtendo as cláusulas:
{¬p(x, f1 (x)), q(x, f2 (x)), p(a, u)}
{¬p(x, f1 (x)), q(x, f2 (x)), q(u, a)}

Aqui também, em vez de utilizar a notação de conjunto para cláusulas, será utilizada
a notação, mais comum, de disjunção. Assim, para o exemplo anterior, as cláusulas
seriam representadas por:

¬p(x, f1 (x)) ∨ q(x, f2 (x)) ∨ p(a, u) e


¬p(x, f1 (x)) ∨ q(x, f2 (x)) ∨ q(u, a)

Apesar disto, serão utilizadas operações de conjuntos sobre cláusulas, sempre que con-
veniente.
É fácil mostrar que quantificações universais se distribuem sobre conjunções, ou
seja, ∀x(α ∧ β) ≡ (∀xα ∧ ∀xβ). Assim sendo, cada cláusula pode ser considerada um
“contexto” diferente para variáveis; ou ainda, variáveis com o mesmo nome ocorrendo
em cláusulas diferentes podem ser consideradas variáveis diferentes.
206 2006
c Newton José Vieira Lógica aplicada à computação

Seja C uma cláusula e σ uma substituição. Cσ é denominada uma instância de C.


Caso Cσ não tenha variáveis, a instância é dita ser uma instância básica.
O método da resolução para lógica de predicados é baseado no Teorema de Herbrand,
que diz:
Um conjunto de cláusulas B é insatisfatı́vel se, e somente se, existe um
conjunto finito, insatisfatı́vel, de instâncias básicas de cláusulas de B.

Exemplo 133 Por exemplo, o conjunto das cláusulas


1. ¬p(x) ∨ q(x, f (y))

2. q(b, x) ∨ q(c, x)

3. p(a)

4. ¬q(a, x)
é insatisfatı́vel, pois o conjunto das instâncias básicas
1’. ¬p(a) ∨ q(a, f (b))

3’. p(a)

4’. ¬q(a, f (b))


é insatisfatı́vel (para verificar isto, basta, por exemplo, utilizar a tabela da verdade).

Em vez de tentar produzir um conjunto de instâncias básicas insatisfatı́vel, res-


olução tenta produzir (implicitamente) um conjunto de instâncias insatisfatı́vel, instân-
cias estas as mais gerais possı́veis (via unificação). Por exemplo, para o conjunto de
cláusulas do exemplo anterior, é suficiente encontrar o seguinte conjunto de instâncias
para demonstrar que o conjunto é insatisfatı́vel:
1”. ¬p(a) ∨ q(a, f (y))

3”. p(a)

4”. ¬q(a, f (y))


O sistema dedutivo subjacente aos provadores de teoremas baseados em resolução
tem uma única regra de inferência, a regra de resolução, a qual é usualmente definida
a partir de duas outras regras: a regra de fatoração e a regra de resolução binária.
A regra de fatoração é aplicável a uma cláusula que contenha dois literais unificáveis.
Seja então uma cláusula C com dois literais unificáveis L1 e L2 . O resultado da aplicação
da regra de fatoração é uma cláusula Cσ, em que σ é um umg de L1 e L2 . Cσ é
denominada um fator de C. Por exemplo, um fator de

p(x) ∨ ¬q(x) ∨ p(f (y))


Newton José Vieira Capı́tulo 3: Lógica de predicados 207

seria p(f (y)) ∨ ¬q(f (y)) (o umg utilizado foi {x/f (y)}).
Diz-se que dois literais têm sinais trocados se, e somente se, um é um átomo e o
outro é a negação de um átomo. Será utilizada a notação |L| para denotar o átomo
do literal L. Dois literais L1 e L2 são ditos complementares, se têm sinais trocados e
|L1 | = |L2 |.
A regra de resolução binária é aplicável a duas cláusulas, uma contendo um literal
L1 e outra contendo um literal L2 , de sinais trocados, e tais |L1 | e |L2 | sejam unificáveis.
Sejam então duas cláusulas C1 e C2 , contendo, respectivamente, literais L1 e L2 , de
sinais trocados, e tais que |L1 | e |L2 | sejam unificáveis. O resultado da aplicação da
regra de resolução binária é uma cláusula (C1 − L1 )σ ∪ (C2 − L2 )σ, em que σ é um umg
de |L1 | e |L2 |. Tal cláusula é denominada um resolvente binário de C1 e C2 .

Exemplo 134 Alguns exemplos de resolventes binários:


• Um resolvente de p(x)∨q(x) e ¬p(a)∨r(x) é q(a)∨r(x) (lembre-se de que variáveis
de cláusulas diferentes são diferentes, mesmo se tiverem o mesmo nome).

• Um resolvente de p(y)∨q(x) e ¬p(a)∨r(x) é q(z)∨r(x) (vale o lembrete anterior).

• O único resolvente para p(x) e ¬p(a) é ⊥.

• Um resolvente de p1 (a, y) ∨ p2 (y) e ¬p1 (x, b) ∨ p2 (b) é p2 (b) (lembre-se que uma
cláusula é um conjunto).

• Um resolvente de ¬gosta(x, pai(y))∨gosta(y, x) e ¬gosta(pai(z), z)∨gosta(z, pai(z))


é ¬gosta(x, pai(pai(x)))∨gosta(x, pai(x)) (umg: {y/pai(z)}◦{z/x} = {y/pai(x), z/x}).
Um outro resolvente é: ¬gosta(pai(x), x) ∨ gosta(x, x) (umg: {z/x} ◦ {y/x} =
{z/x, y/x}).

A regra de resolução combina as de resolução binária e de fatoração em uma única


regra de inferência. Um resolvente, resultado da aplicação da regra de resolução a duas
cláusulas C1 e C2 , é
(a) um resolvente binário de C1 e C2 ; ou

(b) um resolvente binário de C1 e um fator de C2 ; ou

(c) um resolvente binário de um fator de C1 e C2 ; ou

(d) um resolvente binário de um fator de C1 e um fator de C2 .


Pode-se demonstrar que o sistema dedutivo de resolução é refutacionalmente con-
sistente e completo, ou seja,

H |= α se, e somente se, c(H) ∪ c(¬α) ⊢R .

Exemplo 135 Seja H o conjunto das duas sentenças:


208 2006
c Newton José Vieira Lógica aplicada à computação

1. ∃x(paciente(x) ∧ ∀y(médico(y) → gosta(x, y)))


(alguns pacientes gostam de todos os médicos)

2. ∀x(paciente(x) → ∀y(quacre(y) → ¬gosta(x, y)))


(nenhum paciente gosta de qualquer quacre)

Seja α a sentença:

3. ∀x(médico(x) → ¬quacre(x))
(nenhum médico é quacre)

Transformando H e ¬α em cláusulas, obtém-se (i.j é a j-ésima cláusula obtida para a


sentença i):

1.1 paciente(a)

1.2 ¬médico(y) ∨ gosta(a, y)

2.1 ¬paciente(x) ∨ ¬quacre(y) ∨ ¬gosta(x, y)

3.1 médico(b)

3.2 quacre(b)

Uma dedução da cláusula vazia seria (só são explicitados os resolventes):

4. gosta(a, b) [1.2, 3.1]


5. ¬quacre(y) ∨ ¬gosta(a, y) [1.1, 2.1]
6. ¬quacre(b) [4, 5]
7. ⊥ (3.2, 6)

Portanto, pode-se concluir que H |= α.

O procedimento de prova mais simples (e ineficiente) para tentar encontrar a cláusula


vazia a partir de um conjunto de cláusulas C, é o denominado método de resolução por
saturação, já apresentado para lógica proposicional, na Figura 2.48.
Um primeiro passo para aumentar a eficiência, não apenas deste procedimento, mas
também de muitos outros, é a eliminação de cláusulas que, em algum sentido, sejam
redundantes. Exemplo já citados para lógica proposicional:

(a) Cláusulas puras: são aquelas cláusulas de entrada que contêm algum literal L tal
que nenhuma outra cláusula contém um literal com o mesmo sı́mbolo predicativo
de L e sinal contrário. Evidentemente, tais cláusulas não devem ser usadas como
premissas.

(b) Cláusulas tautológicas: aquelas que têm dois literais complementares. Evidente-
mente, se uma tautologia for eliminada de um conjunto insatisfatı́vel, ele continua
insatisfatı́vel.
Newton José Vieira Capı́tulo 3: Lógica de predicados 209

proc subjuga(cláusula C1 , C2 ) retorna {verdadeiro, falso}


sejam x1 , . . . , xn as variáveis de C2 .
sejam a1 , . . . , an constantes que não ocorrem em C1 nem em C2 .
seja σ = {x1 /a1 , . . . , xn /an }.
Γ := {Lσ | L ∈ C2 };
∆ := {C1 };
enquanto ⊥ 6∈ ∆ faça
X := ∆;
∆ := {resolvente de C e D | C ∈ X e D ∈ Γ};
se ∆ = ∅ então retorne falso fimse;
fimenquanto;
retorne verdadeiro
fim subjuga.

Figura 3.11: Algoritmo de subjugação.

(c) Cláusulas subjugadas: diz-se que uma cláusula C1 subjuga uma cláusula C2 se, e
somente se, existe uma substituição σ tal que C1 σ ⊆ C2 (C2 , no caso, é a cláusula
subjugada). Na presença de C1 , C2 é redundante, e pode ser desconsiderada.

Um algoritmo de subjugação, ou seja, um algoritmo que determina se uma cláusula


subjuga outra, está mostrado na Figura 3.11.
No exemplo a seguir, ∆0 é o valor inicial de ∆, e ∆i , para i ≥ 1, é o valor de ∆ ao
fim da i-ésima iteração do pseudocomando enquanto.

Exemplo 136 O seguinte exemplo mostra, passo a passo, como o algoritmo determina
que a cláusula ¬p(x) ∨ q(f (x), a) subjuga a cláusula ¬p(h(y)) ∨ q(f (h(y)), a) ∨ ¬p(z):

Γ = {p(h(b)), ¬q(f (h(b)), a), p(c)} — σ = {y/b, z/c}

∆0 = {¬p(x) ∨ q(f (x), a)}

∆1 = {q(f (h(b)), a), ¬p(h(b)), q(f (c), a)}

∆2 = {⊥}

É, em geral, muito caro verificar se uma cláusula subjuga outra a cada passo de
inferência. Assim, pode ser interessante implementar uma forma simplificada de sub-
jugação; por exemplo, verificar apenas se uma cláusula é subconjunto de outra.
Um conjunto de cláusulas de entrada determina um espaço de pesquisa: o con-
junto de todos os resolventes que podem ser gerados a partir do mesmo. O que um
procedimento de prova faz é, em certo sentido, “navegar” nesse espaço em busca da
cláusula vazia. Tal espaço pode ser (e usualmente é) extremamente redundante, no
sentido de que existem muitos caminhos diferentes para se obter a mesma cláusula, e
também no sentido de que, para efeitos de procura pela cláusula vazia, a geração de
certos resolventes é inócua. Os métodos de eliminação apresentados acima procuram
210 2006
c Newton José Vieira Lógica aplicada à computação

minorar tal problema, mas ficam longe de prover uma solução satisfatória. A seguir,
são apresentados alguns métodos mais extremados de redução do espaço de pesquisa
que, sob certas condições, não comprometem a completude. Tais métodos têm como
caracterı́stica comum o fato de que impõem restrições quanto às deduções permissı́veis;
permitindo apenas um certo subconjunto das provas possı́veis de serem obtidas, é que
eles reduzem o espaço de pesquisa.
O método de redução do espaço de pesquisa mais importante é, talvez, o do conjunto
de suporte, já mencionado na Seção 2.8.5. Além de reduzı́-lo drasticamente, ele é
compatı́vel com outros métodos. Seja B um conjunto de cláusulas de entrada. Um
conjunto S tal que S ⊆ B é denominado um conjunto de suporte de B se, e somente
se, B − S é satisfatı́vel. Uma dedução por conjunto de suporte é uma dedução na qual,
para toda aplicação da regra de resolução, as premissas não estão ambas em C − B.
Pode-se demonstrar que um conjunto é insatisfatı́vel se, e somente se, existe uma
dedução por conjunto de suporte da cláusula vazia. Ou seja, um procedimento de prova
continua refutacionalmente completo, caso só admita deduções por conjunto de suporte.
Como escolher um conjunto de suporte S, a partir de um conjunto de cláusulas de
entrada B? Duas escolhas óbvias são:

• todas as cláusulas de B que têm apenas literais negativos; ou

• todas as cláusulas de B que não têm literais negativos.

Seja o problema de determinar se H |= α. Seja c(H) um conjunto de cláusulas corre-


pondente a todas as sentenças de H, e c(¬α) um conjunto de cláusulas correspondente
a ¬α. Caso c(H) seja consistente, uma escolha natural é c(¬α). Tal escolha tem a
vantagem de que todo resolvente produzido tem a ver, direta ou indiretamente, com
a sentença a ser provada. Ela é especialmente útil quando existem muitas conclusões
deriváveis a partir de H (e normalmente, este é o caso). Veja o exemplo a seguir.

Exemplo 137 Seja a seguinte base de conhecimento, já expressa em cláusulas:

1. ¬ac(x, y) ∨ ¬adj(y, z) ∨ ac(x, z)


(se y é acessı́vel a partir de x e y é adjacente a z, z é acessı́vel a partir de x )

2. ac(x, x)
(todo objeto é acessı́vel a partir dele mesmo)

3. adj(a, b)

4. adj(b, e)

5. adj(c, d)

6. adj(a, c)

Suponha que se queira provar que ac(a, d):

7. ¬ac(a, d)
Newton José Vieira Capı́tulo 3: Lógica de predicados 211

Uma refutação utilizando 7 como conjunto de suporte seria:

8. ¬ac(a, y) ∨ ¬adj(y, d) [7,1]


9. ¬ac(a, c) [8,5]
10. ¬ac(a, y) ∨ ¬adj(y, c) [9,1]
11. ¬ac(a, a) [10,6]
12. ⊥ [11,2]

Observe que a cláusula 1 é recursiva; por causa disto, o conjunto das cláusulas 1 a
6 tem uma infinidade de consequências. Permitindo resoluções entre tais cláusulas, o
procedimento poderia gerar resolventes que nada têm a ver com o que se quer provar,
como, por exemplo, ¬ac(x, b) ∨ ac(x, e) [1,4].

É evidente que poderá haver uma infinidade de resolventes, e que o provador poderá
se “perder”, mesmo utilizando a negação do teorema a ser provado como conjunto de
suporte pois, afinal, o problema da insatisfabilidade é indecidı́vel em geral. Pode-se
constatar isto facilmente analisando-se o Exemplo 137. Embora os resolventes 8 e 10,
como todos os outros, tenham a ver com a sentença a ser provada (eles mencionam
constantes que aparecem na sentença), eles podem ser resolvidos com a cláusula 1;
os resolventes produzidos também podem, e assim por diante. A coisa é pior ainda
quando a sentença a ser provada não segue da base de conhecimento; por exemplo,
ac(b, c). Assim, pode ser conveniente utilizar outros métodos de redução do espaço de
pesquisa combinados com este.
Como foi dito acima, este método só preserva completude quando o conjunto de
cláusulas de entrada, excluı́das as cláusulas do conjunto de suporte, é satisfatı́vel. As-
sim, se o conjunto das cláusulas correspondentes à negação da sentença a ser provada
for assumido como conjunto de suporte, e se o conjunto das cláusulas correspondentes
à base de conhecimento (hipóteses) for insatisfatı́vel, não há garantia de encontrar uma
refutação, porque a cláusula vazia pode ser obtenı́vel a partir apenas da base de conhec-
imento. Isto se deve ao fato de que se H é inconsistente, então H |= α para qualquer
sentença α. No entanto, esta falta de completude pode ser considerada uma virtude e
não um defeito, caso não se deseje que a introdução de informações inconsistentes na
base de conhecimento permita a dedução de qualquer sentença. Tem-se, no fundo, um
comportamento paraconsistente. Por exemplo, a partir da base de conhecimento:

1. p(a)

2. ¬p(a)

3. p(b)

pode-se deduzir qualquer sentença (pois ⊥ é resolvente de 1 e 2). No entanto, se a


negação da sentença for utilizada como conjunto de suporte, isto não é verdade; por
exemplo, não seria possı́vel provar, dentre outras, ¬p(b), p(c) e ¬p(c); seria possı́vel
provar, dentre outras, as sentenças: p(a), ¬p(a) e p(b) (mas em nenhuma das deduções
ocorre a resolução de 1 e 2).
212 2006
c Newton José Vieira Lógica aplicada à computação

A seguir descreve-se a estratégia linear para lógica de predicados.


Seja um conjunto de cláusulas B. Recordando da Seção 2.8.5, uma dedução linear
de uma cláusula Cn a partir de B com cláusula de partida C0 é uma sequência de
cláusulas C0 , . . . , Cn , tal que C0 ∈ B e para todo 1 ≤ i ≤ n Ci foi obtida resolvendo
Ci−1 com alguma cláusula de B ou com alguma cláusula Cj , para 0 ≤ j ≤ i − 1.
Graficamente:

C0 ◦ ◦ B0

C1 ◦ ◦ B1
Bi ∈ B
C2 ◦
.. ou Bi é Cj para algum j < i.
.
Cn−1 ◦ ◦ Bn−1

Cn ◦

Uma refutação linear é uma dedução linear da cláusula vazia. Um exemplo de


refutação linear é aquela mostrada no Exemplo 137. Um outro, é a do Exemplo 88.
Pode-se demonstrar que resolução linear preserva completude. Além disto, é com-
patı́vel com conjunto de suporte, ou seja, se um conjunto de cláusulas B é satisfatı́vel
e B ∪ {C} é insatisfatı́vel (onde C é uma cláusula), então existe uma refutação linear
a partir de C.
O uso de subjugação em conexão com resolução é um importante fator para pre-
venção contra loops (nem que seja uma forma simplificada de subjugação). Considere
o exemplo seguinte.

Exemplo 138 Considere o seguinte exemplo:

1. ¬irmão(x, y) ∨ irmão(y, x)

2. irmão(Abel, Caim)

Supondo que se deseje provar irmão(Juca, Caim), o procedimento de prova primeira-


mente produziria:

3. ¬irmão(Juca, Caim)

A única possibilidade é resolver com 1, o que leva à produção de:

4. ¬irmão(Caim, Juca) (3,1)

Novamente, a única possibilidade é resolver com 1:

5. ¬irmão(Juca, Caim) (4,1)


Newton José Vieira Capı́tulo 3: Lógica de predicados 213

A cláusula 5 é subjugada pela cláusula 3, e não existem outras possibilidades para


resolução das cláusulas 4 e 3. Logo, conclui-se que não existe refutação. Caso não seja
aplicada a subjugação, o procedimento entra em loop (re)produzindo as cláusulas 4 e
5.

Seja C0 , . . . , Cn uma dedução linear a partir de B. Como já visto, Cn+1 deve obtida
resolvendo Cn com:
(a) alguma cláusula de B; ou

(b) alguma cláusula Ci , para 0 ≤ i ≤ n.


A possibilidade (b) é essencial para manter a completude, como pode ser verificado
através do Exemplo 88. Se esta possibilidade for eliminada, tem-se as denominadas
deduções lineares de entrada, também denominadas deduções lineares puras. O método
é denominado resolução de entrada. Neste caso, apesar de se perder a completude,
pode-se ainda resolver uma ampla gama de problemas, e a implementação é bem mais
simples e eficiente. O procedimento de prova da linguagem Prolog pode ser visto como
um gerador de deduções lineares de entrada. O sistema dedutivo associado é completo
porque a linguagem só admite certos tipos de cláusulas denominadas cláusulas de Horn.
(Uma cláusula de Horn é uma cláusula com no máximo um literal positivo.)
Um outro método de redução do espaço de pesquisa é o denominado resolução
unitária. Neste método, a única restrição é que uma das premissas para aplicação de
resolução seja uma cláusula unitária; as refutações, no caso, são denominadas refutações
unitárias. Foi demonstrado que este é equivalente ao de resolução linear de entrada,
no sentido de que existe uma refutação unitária a partir de B se, e somente se, existe
uma refutação de entrada a partir de B.
Após impor restrições quanto às cláusulas e deduções permissı́veis, tem-se um espaço
de pesquisa a ser percorrido pelo procedimento de prova à procura da cláusula vazia,
menor do que o especificado pelo sistema dedutivo. Agora o problema é determinar
uma estratégia para navegação em tal espaço. Tal estratégia irá depender de fatores
como: necessidade de encontrar uma refutação o mais rápido possı́vel; necessidade que
a refutação seja a menor possı́vel; etc.
Uma estratégia bastante comum é escolher como premissas, em cada passo, as
menores cláusulas, já que o objetivo é obter a menor cláusula de todas: a cláusula vazia.
O método de resolução unitária está dentro deste espı́rito: cada passo de inferência
produz sempre uma cláusula menor do que a maior das premissas.
Até agora só foram consideradas consultas do tipo “H |= α?”. As respostas a esse
tipo de consulta é sim, caso H |= α; é não, caso H |= ¬α; e é não sei , caso H 6|= α e
Γ 6|= ¬α. Um outro tipo de consulta envolve a determinação de termos para os quais
vale determinada afirmativa. Em outras palavras, pode-se querer obter, não apenas
demonstrações de teoremas, mas também o que se denomina uma (ou mais de uma)
realização dos quantificadores existenciais dos teoremas. Por exemplo, seja o conjunto
de clásulas:
1. ¬filho(x, y) ∨ ¬filho(y, z) ∨ neto(x, z)
214 2006
c Newton José Vieira Lógica aplicada à computação

2. filho(Carlos, Pedro)
3. filho(Pedro, Marcos)
Seja a consulta “∃x neto(Carlos, x)?”. Negando e colocando em forma de cláusula:
4. ¬neto(Carlos, x)
Segue uma refutação:
5. ¬filho(Carlos, y) ∨ ¬filho(y, z) (4,1)
6. ¬filho(Pedro, z) (5,2)
7. ⊥ (6,3)
Observe que, ao resolver 6 com 3, a variável z foi substituı́da por Marcos. Se a consulta
for “determine x tal que neto(Carlos, x)”, a dedução acima poderia ser usada para
justificar a resposta “Marcos”. Em geral, para uma consulta do tipo
determine x1 , . . . , xn tais que α
em que x1 , . . . , xn são as variáveis livres de α, basta considerar tais variáveis como exis-
tencialmente quantificadas; o processo de resolução, ao mesmo tempo que encontra uma
refutação para ¬∃x1 · · · ∃xn α, encontra valores (termos) para x1 , . . . , xn . Para extrair
tais valores, uma possibilidade é anexar um literal especial da forma resp(x1 , . . . , xn ) às
cláusulas correspondentes a ¬∃x1 · · · ∃xn α. Ao invés de pesquisar pela cláusula vazia,
pesquisa-se agora por uma cláusula que só tenha literais com o sı́mbolo predicativo
resp. O exemplo acima ficaria assim:
4’. ¬neto(Carlos, z) ∨ resp(z)
5’. ¬filho(Carlos, y) ∨ ¬filho(y, z) ∨ resp(z) (4’,1)
6’. ¬filho(Pedro, z) ∨ resp(z) (5’,2)
7’. resp(Marcos) (6’,3)
Algumas vezes é possı́vel determinar que ∃xα sem determinar com precisão um valor
para x tal que α. Neste caso, a cláusula final da refutação contém mais de um literal;
a resposta, no caso, é disjuntiva, contendo uma alternativa para cada literal resposta.
Seja, por exemplo, o conjunto de cláusulas:
1. ¬adulto(x) ∨ tomar(x, R1 )
2. adulto(x) ∨ tomar(x, R2 )
Seja o problema de determinar z tal que tomar(Manoel, z). Transformando a sentença
¬∃ztomar(Manoel, z) em cláusulas e anexando o literal resposta, tem-se:
3. ¬tomar(Manoel, z) ∨ resp(z)
Segue uma refutação:
4. ¬adulto(Manoel) ∨ resp(R1 ) (3,1)
5. tomar(Manoel, R2 ) ∨ resp(R1 ) (4,2)
6. resp(R1 ) ∨ resp(R2 ) (5,3)
Logo, a resposta é “R1 ou R2 ”, ou seja, “tomar(Manoel, R1 ) ou tomar(Manoel, R2 )”.
(É interessante observar que respostas disjuntivas aparecem quando há resolução entre
resolventes.)
Newton José Vieira Capı́tulo 3: Lógica de predicados 215

Exercı́cios
1. Encontre um conjunto de cláusulas para cada uma das sentenças:

(a) ¬(∀x p(x) → ∃y p(y))


(b) ¬(∀x p(x) → ¬∃y∀x q(y, x))
(c) ∀x{¬x = 0 → [∃y y = f (x) ∧ ∀z(z = f (x) → y = z)]}

2. Encontre todos os resolventes dos seguintes pares de cláusulas:

(a) ¬p(x) ∨ q(x, b) e p(a) ∨ q(a, b)


(b) ¬p(x) ∨ q(x, x) e ¬q(a, f (a))
(c) ¬p(x, y, u) ∨ ¬p(y, z, v) ∨ ¬p(x, v, u) ∨ p(u, z, w) e p(g(x, y), x, y)
(d) ¬p(v, z, v) ∨ p(w, z, w) e p(w, h(x, x), w)

3. Prove, utilizando resolução, que:

∀x∀y(p(x, y) ∨ p(f (y), f (x))) |= ∃x∃y(p(x, y) ∧ p(y, x))

4. Prove que o seguinte conjunto de cláusulas é insatisfatı́vel utilizando resolução:

(1) p ∨ q ∨ r
(2) p ∨ q ∨ ¬r
(3) p ∨ ¬q ∨ r
(4) p ∨ ¬q ∨ ¬r
(5) ¬p ∨ q ∨ r
(6) ¬p ∨ q ∨ ¬r
(7) ¬p ∨ ¬q ∨ r
(8) ¬p ∨ ¬q ∨ ¬r

5. (a) Verifique se p(x, y) ∨ q(z) subjuga q(a) ∨ p(b, b) ∨ r(u).


(b) Prove que p(x, y) ∨ r(y, x) não subjuga p(a, y) ∨ r(z, b).
(c) Seja C1 = ¬p(x) ∨ p(f (x)) e C2 = ¬p(x) ∨ p(f (f (x))). Mostre que C1 |= C2 ,
mas C1 não subjuga C2 .

6. Prove que o seguinte conjunto de cláusulas é insatisfatı́vel utilizando resolução


linear:

(1) d(x, x)
(2) ¬d(x, y) ∨ ¬d(y, z) ∨ d(x, z)
(3) p(x) ∨ d(g(x), x)
(4) p(x) ∨ m(e, g(x))
216 2006
c Newton José Vieira Lógica aplicada à computação

(5) p(x) ∨ m(g(x), x)


(6) m(e, a)
(7) ¬p(x) ∨ ¬d(x, a)
(8) ¬m(e, x) ∨ ¬m(x, a) ∨ p(f (x))
(9) ¬m(e, x) ∨ ¬m(x, a) ∨ d(f (x), x)

7. Sejam os seguintes fatos:

(a) ∀x∀y[(pai(x, y) ∧ pai(y, z)) → avo(x, z)]


(b) ∀x∃y pai(y, x)

Utilizando resolução com extração de respostas, determine x e y tal que avo(x, y).

8. Sejam os seguintes fatos:

(a) Todos que entraram no paı́s e não eram VIPs foram revistados por um agente
da polı́cia federal.
(b) Paulo C. era contrabandista.
(c) Paulo C. entrou no paı́s.
(d) Paulo C. só foi revistado por contrabandistas.
(e) Nenhum contrabandista era VIP.

Utilizando resolução com extração de respostas, encontre uma pessoa que era,
ambos, contrabandista e agente da polı́cia federal.

9. Sejam as seguintes cláusulas:

(a) p(x) ∨ q(x) ∨ r(f (x))


(b) ¬q(x) ∨ s(x)
(c) ¬q(x) ∨ t(x)
(d) ¬r(x) ∨ s(x)
(e) ¬r(x) ∨ u(x)
(f) p(g(x)) ∨ q(h(x))

Utilizando resolução com extração de respostas, determine x e y tal que

(s(x) ∧ t(x)) ∨ (u(y) ∧ s(y)).

Você também pode gostar