Sunteți pe pagina 1din 246

Corra da Silva

^
^
Outras Obras
Flvio Soares Corra da Silva professor do
Departamento de Cincia da Computao da
LGICA PARA
Algoritmos e Lgica de Programao
USP campus Butant. graduado (1984) e
mestre (1989) em Engenharia pela USP, doutor
COMPUTAO Marco Antonio Furlan de Souza, Marcelo Marques
Gomes, Marcio Vieira Soares e Ricardo Concilio

|
(1992) em Inteligncia Artificial pela Univer-
sidade de Edinburgh (Esccia) e livre-docente

Finger
Compiladores: Princpios e Prticas
(1999) tambm pela USP. Kenneth C. Louden

Marcelo Finger professor do Departamento de Comunicao entre Computadores e

|
Cincia da Computao da USP campus Butan- O livro apresenta um texto original em portugus que, sem Tecnologias de Rede

^
LGICA PARA

Melo
t. graduado (1988) em Engenharia pela Esco- perder a abordagem introdutria, expe rigor matemtico e profun- Michael A. Gallo e William M. Hancock
la Politcnica da USP, mestre (1990) e doutor didade adequados para o pblico-alvo. A obra apresenta os funda-
(1994) em Cincia da Computao pela Univer- mentos e mtodos da lgica matemtica para estudantes de Cincia Introduo aos Sistemas Operacionais
sidade de Londres (Inglaterra) e livre-docente da Computao, permitindo-lhes apreciar os benefcios e as dificul- Ida M. Flynn e Ann McIver McHoes
(2001) em Cincia da Computao pela USP. Tra-
balha h 16 anos na rea de Lgica Computacio-
dades advindos da aplicao de mtodos matemticos rigorosos para
a resoluo de problemas e, acima de tudo, a enorme importncia COMPUTAO Lgica de Programao

LGICA PARA COMPUTAO


nal e j publicou diversos artigos em peridicos dos mtodos formais e mais especificamente dos mtodos funda- Irenice de Ftima Carboni
e conferncias internacionais. autor de um li- mentados em lgica formal para as diversas facetas e ramificaes
vro de Lgica Temporal e de dois livros infantis. da Cincia da Computao. Modelos Clssicos de Computao
Flvio Soares Corra da Silva e Ana Cristina
Vieira de Melo
Ana Cristina Vieira de Melo professora do De- APLICAES
partamento de Cincia da Computao da USP
Livro-texto para as disciplinas lgica e mtodos formais nos Princpios de Sistemas de Informao
campus Butant. graduada (1986) e mestre Traduo da 6 edio norte-americana
cursos de graduao e ps-graduao em Cincia da Computao,
(1989) em Cincia da Computao pela UFPE, e Ralph M. Stair e George W. Reynolds
Matemtica e Filosofia. Leitura complementar para a disciplina funda-
doutora (1995) em Cincia da Computao pela
mentos matemticos da computao. Leitura recomendada tambm
Universidade de Manchester (Inglaterra). Projeto de Algoritmos com Implementaes
para profissionais e todos aqueles que, direta ou indiretamente, lidam
em Pascal e C 3 edio revista e
com mtodos formais e matemticos para a resoluo de problemas.
ampliada
Nivio Ziviani

Flvio Soares Corra da Silva

^ Marcelo Finger
Ana Cristina Vieira de Melo

Para suas solues de curso e aprendizado,


visite www.cengage.com.br
i i
Lgica para Computao PROVA 4 4/7/2006 #1
i i

Lgica para Computao

i i

i i
Dados Internacionais de Catalogao na Publicao (CIP)
(Cmara Brasileira do Livro, SP, Brasil)

Silva, Flvio Soares Corra da


Lgica para computao / Flvio Soares Corra da
Silva, Marcelo Finger, Ana Cristina Vieira de Melo.
So Paulo : Cengage Learning, 2006.

Bibliografia
ISBN 978-85-221-0851-0

1. Lgica 2. Lgica computacional 3. Lgica


simblica e matemtica I. Finger, Marcelo. II. Melo,
Ana Cristina Vieira de. III. Ttulo.

06-5095 CDD-004.01

ndice para catlogo sistemtico:

1. Lgica computacional 004.01


Lgica para
Computao
Flvio Soares Corra da Silva
Marcelo Finger
Ana Cristina Vieira de Melo

AustrliaBrasilJapoCoreiaMxicoCingapuraEspanhaReino Unido Estados Unidos

Austrlia Brasil Canad Cingapura Espanha Estados Unidos Mxico Reino Unido
Coleo Ideias em Ao 2006 Cengage Learning Edies Ltda.
Ensino de Matemtica na escola de
Todos os direitos reservados. Nenhuma parte deste
nove anos dvidas, dvidas e desafios
livro poder ser reproduzida, sejam quais forem os
Flvio Soares Corra da Sliva meios empregados, sem a permisso, por escrito,
Marcelo Finger da Editora. Aos infratores aplicam-se as sanes
Cristina Vieira de Melo previstas nos artigos 102, 104, 106 e 107 da Lei
n 9.610, de 19 de fevereiro de 1998.

Gerente editorial: Patricia La Rosa


Para informaes sobre nossos produtos, entre em
Editora de desenvolvimento: Tatiana contato pelo telefone 0800 11 19 39
Pavanelli Valsi
Supervisor de produo editorial: Fbio Para permisso de uso de material desta obra, envie
Gonalves seu pedido para direitosautorais@cengage.com
Supervisora de produo grfica: Fabiana
Alencar Albuquerque
Produtora Editorial: Renata Siqueira 2006 Cengage Learning. Todos os direitos reservados.
Campos
Copidesque: Norma Gusukuma ISBN 13: 978-85-221-0851-0
Reviso: Gisele Mfalo e Andra Vidal ISBN 10: 85-221-0851-X

Composio: Roberto Maluhy Jr. Mika


Mitsui
Cengage Learning
Capa: Eduardo Bertolini
Condomnio E-Business Park
Rua Werner Siemens, 111 Prdio 11 Torre A Conjunto 12
Lapa de Baixo CEP 05069-900 So Paulo SP
Tel.: (11) 3665-9900 Fax: 3665-9901
SAC: 0800 11 19 39

Para suas solues de curso e aprendizado, visite


www.cengage.com.br

Impresso no Brasil
Printed in Brazil
1234 08 07 06
i i
Lgica para Computao PROVA 4 4/7/2006 #5
i i

Para Renata e Maria Clara. FCS


Para Diana e Michel. MF
Para Roger. ACVM

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #6
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #7
i i

Sumrio

Introduo , 1

Parte 1
Lgica Proposicional

1 Lgica Proposicional: Linguagem e Semntica , 7


1.1 Introduo, 7
1.2 A Linguagem Proposicional, 8
1.2.1 Frmulas da Lgica Proposicional, 8
1.2.2 Subfrmulas, 10
1.2.3 Tamanho de Frmulas, 11
1.2.4 Expressando Idias com o Uso de Frmulas, 11
1.3 Semntica, 13
1.4 Satisfazibilidade, Validade e Tabelas da Verdade, 16
1.5 Conseqncia Lgica, 22
1.6 Desafios da Lgica Proposicional, 28
1.7 Notas Bibliogrficas, 30

2 Sistemas Dedutivos , 33
2.1 O Que um Sistema Dedutivo?, 33
2.2 Axiomatizao, 34
2.2.1 Substituies, 35
2.2.2 Axiomatizao, Deduo e Teoremas, 36

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #8
i i

viii Lgica para Computao

2.2.3 Exemplos, 37
2.2.4 O Teorema da Deduo, 39
2.3 Deduo Natural, 41
2.3.1 Princpios da Deduo Natural, 41
2.3.2 Regras de Deduo Natural para Todos os Conectivos, 43
2.3.3 Definio Formal de Deduo Natural, 46
2.4 O Mtodo dos Tableaux Analticos, 48
2.4.1 Frmulas Marcadas, 49
2.4.2 Regras de Expanso e , 50
2.4.3 Exemplos, 52
2.5 Correo e Completude, 57
2.5.1 Conjuntos Descendentemente Saturados, 58
2.5.2 Correo do Mtodo dos Tableaux Analticos, 60
2.5.3 A Completude do Mtodo dos Tableaux Analticos, 61
2.5.4 Decidibilidade, 61
2.6 Notas Bibliogrficas, 63

3 Aspectos Computacionais , 65
3.1 Introduo, 65
3.2 Implementao de um Provador de Teoremas pelo Mtodo dos
Tableaux Analticos, 66
3.2.1 Estratgias Computacionais, 66
3.2.2 Estruturas de Dados, 70
3.2.3 Famlias de Frmulas Notveis, 74
3.3 Formas Normais, 77
3.3.1 A Forma Normal Conjuntiva ou Forma Clausal, 78
3.3.2 Forma Normal Disjuntiva, 86
3.4 Resoluo, 88
3.5 O Problema SAT, 93
3.5.1 O Mtodo DPLL, 93
3.5.2 Aprendizado de Novas Clusulas, 97
3.5.3 O Mtodo Chaff, 100
3.5.4 O Mtodo Incompleto GSAT, 106
3.5.5 O Fenmeno de Mudana de Fase, 108
3.6 Notas Bibliogrficas, 109

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #9
i i

Sumrio ix

Parte 2
Lgica de Predicados

4 Lgica de Predicados Mondicos , 113


4.1 Introduo, 113
4.2 A Linguagem de Predicados Mondicos, 115
4.3 Semntica, 117
4.4 Deduo Natural, 122
4.5 Axiomatizao, 128
4.6 Correo e Completude, 132
4.7 Decidibilidade e Complexidade, 136
4.8 Notas Bibliogrficas, 139

5 Lgica de Predicados Polidicos , 141


5.1 Introduo, 141
5.2 A Linguagem de Predicados Polidicos, 142
5.3 Semntica, 143
5.4 Deduo Natural, 146
5.5 Axiomatizao, 146
5.6 Tableaux Analticos, 147
5.7 Decidibilidade e Complexidade, 149
5.8 Notas Bibliogrficas, 151

Parte 3
Verificao de Programas

6 Especificao de Programas , 155


6.1 Introduo, 155
6.2 Especificao de Programas, 157
6.2.1 Programas como Transformadores de Estados, 158
6.2.2 Especificao de Propriedades sobre Programas, 160
6.3 Lgica Clssica como Linguagem de Especificao, 165
6.3.1 Tipos de Dados e Predicados Predefinidos, 167
6.3.2 Invariantes, Precondies e Ps-condies, 169
6.3.3 Variveis de Especificao, 173

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #10
i i

x Lgica para Computao

6.4 Exemplo, 175


6.5 Notas Bibliogrficas, 176

7 Verificao de Programas , 179


7.1 Introduo, 179
7.1.1 Como Verificar Programas?, 183
7.2 Uma Linguagem de Programao, 186
7.3 Prova de Programas, 191
7.4 Correo Parcial de Programas, 195
7.4.1 Regras, 195
7.4.2 Sistema de Provas, 199
7.4.3 Correo e Completude do Sistema de Provas, 213
7.5 Correo Total de Programas, 217
7.6 Notas Bibliogrficas, 224

Concluso , 227

Referncias Bibliogrficas , 229

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #11
i i

Introduo

1* Die Welt ist alles, was der Fall ist.


Ludwig Wittgenstein, Tractatus logico-philosophicus

da necessidade de contarmos com um livro-texto em portu-


E STE LIVRO SURGIU
gus para a disciplina mtodos formais em programao, que faz parte
do curso de bacharelado em Cincia da Computao da Universidade de So
Paulo, sob responsabilidade do Departamento de Cincia da Computao
daquela universidade. A mesma disciplina ocorre na quase totalidade dos cur-
sos de graduao em Cincia da Computao, Engenharia da Computao
e Sistemas de Informao nas universidades brasileiras, embora com nomes
distintos: lgica para computao, lgica matemtica, introduo lgica etc.
Essa disciplina tem por objetivo apresentar, em carter introdutrio, os
fundamentos e mtodos da lgica matemtica a estudantes de Cincia da
Computao, permitindo-lhes apreciar a elegncia desse ramo do conheci-
mento, os benefcios e dificuldades advindos da aplicao de mtodos mate-
mticos rigorosos para a resoluo de problemas e, acima de tudo, a enorme
importncia dos mtodos formais e mais especificamente dos mtodos
fundamentados em lgica formal para as diversas facetas e ramificaes da
Cincia da Computao.

N.A. O mundo tudo que o caso.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #12
i i

2 Lgica para Computao

Salvo raras excees, os livros que encontrvamos para indicar aos nossos
alunos se enquadravam em duas categorias:

Livros que no mencionavam explicitamente os cientistas de compu-


tao como pblico-alvo e que, de fato, se dirigiam a estudantes de
outras reas, como, por exemplo, a matemtica pura. Encontramos
livros de excelente qualidade nessa categoria, que inclusive tratam de
temas relevantes para os cientistas de computao (como, por exemplo,
a indecidibilidade da satisfazibilidade da lgica de relaes veja o
Captulo 5), mas que, em geral, tratam com grande profundidade
aspectos menos relevantes de forma mais direta para a cincia da
computao e deixam de explorar, ou ao menos de evidenciar, outros
aspectos que podem ser de interesse mais central para profissionais e
estudiosos das cincias informticas.

Livros de lgica matemtica dirigidos a cientistas de computao e


engenheiros. Esses livros tendem a ser menos rigorosos e um pouco
mais genricos e superficiais.

Dentre os poucos livros que encontramos e que nos pareceram equilibra-


dos no tratamento rigoroso da lgica e na informalidade para expor conceitos
lgicos a um pblico de no-matemticos, destacamos os livros de Huth e
Ryan (2000) e de Robertson e Agust (1999).
Nosso objetivo foi preparar um texto original em portugus que, sem
perder o carter de texto introdutrio, apresentasse o rigor matemtico e a
profundidade que consideramos adequados para o nosso pblico-alvo.
Este livro tem trs autores e est dividido em trs partes. Os trs autores
so co-responsveis por todos os captulos. Entretanto, cada parte teve um
dos autores como autor responsvel, o que contribuiu para aumentar nossa
produtividade.
A Parte I, Lgica Proposicional, foi preparada por Marcelo Finger. Ela
composta por trs captulos. No Captulo 1 so apresentados os fundamen-
tos da lgica proposicional. No Captulo 2 so apresentados, em detalhes,
diferentes sistemas dedutivos para essa lgica. Finalmente, no Captulo 3 so
apresentados aspectos computacionais das dedues na lgica proposicional.
A Parte II, Lgica de Predicados, foi preparada por Flvio Soares Corra da
Silva. Ela composta por dois captulos. No Captulo 4 apresentado um
caso particular da lgica de predicados, em que cada predicado tem apenas

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #13
i i

Introduo 3

um argumento. Essa lgica til para modelar diversos problemas de cincia


da computao, em especial da engenharia de linguagens de programao.
Alm disso, um caso restrito dessa lgica a lgica de predicados mondicos
com assinatura pura apresenta uma propriedade formal notvel, conforme
discutido no final do Captulo 4. No Captulo 5 apresentada a lgica de
predicados completa, na forma como ela mais conhecida.
A Parte III, Verificao de Programas, foi preparada por Ana Cristina Vieira
de Melo. Ela composta por dois captulos. No Captulo 6 so apresentados
aspectos lgicos e formais da especificao de programas. Finalmente, no
Captulo 7, so apresentados os aspectos lgicos da verificao de programas
propriamente dita.

Agradecimentos
Os autores agradecem coletivamente aos estudantes do curso de bacharelado
em Cincia da Computao da Universidade de So Paulo, que inspiraram
este livro e ajudaram sobremaneira no refinamento e nas correes do texto.
Agradecemos tambm Thomson Learning pelo apoio editorial.
Flvio agradece sua esposa Renata e sua filha Maria Clara pelo estmulo
para construir coisas que devam trazer benefcios para outras pessoas de
alguma maneira o que inclui escrever este livro.
Marcelo agradece sua esposa Diana e ao filho Michel pelo total apoio e
pela fora recebida nas pequenas e nas grandes dificuldades.
Ana Cristina agradece ao seu marido Roger pelo apoio durante a prepara-
o deste livro.

N.A. Embora devamos ressaltar que todas as imperfeies ainda presentes no texto so de total
responsabilidade dos autores.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #14
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #15
i i

Parte 1

Lgica
Proposicional

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #16
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #17
i i

1 Lgica Proposicional:
Linguagem e Semntica

1.1 Introduo
A linguagem natural, com a qual nos expressamos diariamente, muito
suscetvel a ambigidades e imprecises. Existem frases no-gramaticais que
possuem sentido (por exemplo, anncios de classificados no jornal) e frases
perfeitamente gramaticais sem sentido ou com sentido mltiplo. Isso faz com
que a linguagem no seja apropriada para o estudo das relaes lgicas entre
suas sentenas.
Portanto, no estudo da lgica matemtica e computacional, utilizamo-nos
de uma linguagem formal. Linguagens formais so objetos matemticos, cujas
regras de formao so precisamente definidas e s quais podemos atribuir
um nico sentido, sem ambigidade.
Linguagens formais podem ter diversos nveis de expressividade. Em geral,
quanto maior a expressividade, maior tambm a complexidade de se mani-
pular essas linguagens. Iniciaremos nosso estudo da lgica a partir de uma
linguagem proposicional, que tem uma expressividade limitada, mas j nos
permite expressar uma srie de relaes lgicas interessantes.
Nesse contexto, uma proposio um enunciado ao qual podemos atribuir
um valor verdade (verdadeiro ou falso). preciso lembrar que nem toda
sentena pode possuir um valor verdade. Por exemplo, no podemos atribuir
valor verdade a sentenas que se referem ao seu prprio valor verdade,
com a sentena esta sentena falsa. Esse tipo de sentena chamado
de auto-referente e deve ser excludo da linguagem em questo, pois, se a
sentena verdadeira, ento ela falsa; por outro lado, se ela for falsa, ento
verdadeira. A linguagem proposicional exclui sentenas auto-referentes.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #18
i i

8 Lgica para Computao

Dessa forma, a lgica proposicional clssica nos permite tratar de enuncia-


dos aos quais podemos atribuir valor verdade (as proposies) e as operaes
que permitem compor proposies complexas a partir de proposies mais
simples, como a conjuno (E), a disjuno (OU), a implicao (SE . . .
ENTO . . .) e a negao (NO).
A linguagem proposicional no nos permite expressar relaes sobre ele-
mentos de um conjunto, como as noes de todos, algum ou nenhum.
Tais relaes so chamadas de quantificadoras, e ns as encontraremos no
estudo da lgica de primeira ordem, que ser tratada na Parte 2.
A seguir, vamos realizar um estudo detalhado da lgica proposicional
clssica (LPC).

1.2 A Linguagem Proposicional


Ao apresentarmos uma linguagem formal, precisamos inicialmente forne-
cer os componentes bsicos da linguagem, chamados de alfabeto, para em
seguida fornecer as regras de formao da linguagem, tambm chamadas de
gramtica.
No caso da lgica proposicional, o alfabeto composto pelos seguintes
elementos:

Um conjunto infinito e contvel de smbolos proposicionais, tambm


chamados de tomos, ou de variveis proposicionais: P = {p0 , p1 , . . .}.

O conectivo unrio (negao, l-se: NO).

Os conectivos binrios (conjuno, l-se: E), (disjuno, l-se: OU),


e (implicao, l-se: SE . . . ENTO . . .).

Os elementos de pontuao, que contm apenas os parnteses: ( e ).

1.2.1 Frmulas da Lgica Proposicional


Os elementos da linguagem LLP da lgica proposicional so chamados de
frmulas (ou frmulas bem-formadas). O conjunto das frmulas da lgica
proposicional ser definido por induo. Uma definio por induo pode
possuir vrios casos. O caso bsico da induo aquele no qual alguns
elementos j conhecidos so adicionados ao conjunto que estamos definindo.
Os demais casos, chamados de casos indutivos, tratam de adicionar novos
elementos ao conjunto, a partir de elementos j inseridos nele.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #19
i i

1 Lgica Proposicional: Linguagem e Semntica 9

Dessa maneira, o conjunto LLP das frmulas proposicionais definido


indutivamente como o menor conjunto, satisfazendo as seguintes regras de
formao:

1. Caso bsico: Todos os smbolos proposicionais esto em LLP ; ou seja,


P LLP . Os smbolos proposicionais so chamados de frmulas
atmicas, ou tomos.

2. Caso indutivo 1: Se A LLP , ento A LLP .

3. Caso indutivo 2: Se A, B LLP , ento (A B) LLP , (A B) LLP ,


(A B) LLP .

Se p, q e r so smbolos proposicionais, pelo item 1, ou seja, o caso bsico,


eles so tambm frmulas da linguagem proposicional. Ento, p e p
tambm so frmulas, bem como (pq), (p(pq)), ((rp) q) etc.
Em geral, usamos as letras minsculas p, q, r e s para representar os smbolos
atmicos, e as letras maisculas A, B, C e D para representar frmulas. Desse
modo, se tomarmos a frmula ((r p) q), podemos dizer que ela da
forma (A B), em que A = (r p) e B = q; j a frmula A da forma
(A1 A2 ), onde A1 = r e A2 = p; similarmente, B da forma B1 , onde
B1 = q.
A definio de LLP ainda exige que LLP seja o menor conjunto satisfa-
zendo as regras de formao. Essa condio chamada de clusula maximal.
Isso necessrio para garantir que nada de indesejado se torne tambm uma
frmula. Por exemplo, essa restrio impede que os nmeros naturais sejam
considerados frmulas da lgica proposicional.
De acordo com a definio de frmula, o uso de parnteses obrigatrio
ao utilizar os conectivos binrios. Na prtica, no entanto, usamos abreviaes
que permitem omitir os parnteses em diversas situaes:

Os parnteses mais externos de uma frmula podem ser omitidos.


Dessa forma, podemos escrever pq em vez de (pq), (rp) q
em vez de ((r p) q).

O uso repetido dos conectivos e dispensa o uso de parnteses. Por


exemplo, podemos escrever pqrs em vez de ((pq)r)s;
note que os parnteses aninham-se esquerda.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #20
i i

10 Lgica para Computao

O uso repetido do conectivo tambm dispensa o uso de parnteses,


s que os parnteses aninham-se direita. Dessa forma, podemos
escrever p q r para representar p (q r).

Alm disso, nas frmulas em que h uma combinao de conectivos,


existe uma precedncia entre eles, dada pela ordem: , , , . Dessa
forma:

p q representa (p q) [e no (p q)].
p q r representa p (q r).
p q r representa (p q) r.

Em geral, deve-se preferir clareza economia de parnteses e, na dvida,


bom deixar alguns parnteses para explicitar o sentido de uma frmula.

1.2.2 Subfrmulas
Definimos a seguir, por induo sobre estrutura das frmulas (tambm cha-
mada de induo estrutural), a noo do conjunto de subfrmulas de uma
frmula A, Subf (A). Na induo estrutural, o caso bsico analisa as frmulas
de estrutura mais simples, ou seja, o caso bsico trata das frmulas atmicas.
Os casos indutivos tratam das frmulas de estrutura composta, ou seja,
de frmulas que contm conectivos unrios e binrios. Assim, o conjunto
Subf (A) de subfrmulas de uma frmula A definido da seguinte maneira:

1. Caso bsico: A = p. Subf (p) = {p}, para toda frmula atmica p P

2. Caso A = B. Subf (B) = {B} Subf (B)

3. Caso A = B C. Subf (B C) = {B C} Subf (B) Subf (C)

4. Caso A = B C. Subf (B C) = {B C} Subf (B) Subf (C)

5. Caso A = B C. Subf (B C) = {B C} Subf (B) Subf (C)

Os trs ltimos casos indutivos poderiam ter sido expressos da seguinte


forma compacta: Para {, , }, se A = B C ento Subf (A) = {A}
Subf (B) Subf (C).
Dessa forma, temos que o conjunto de subfrmulas da frmula A = (p
q) (r q) o conjunto {A, p q, p, q, q, r q, r}. Note que no
h necessidade de contabilizar subfrmulas repetidas mais de uma vez.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #21
i i

1 Lgica Proposicional: Linguagem e Semntica 11

Pela definio anterior, uma frmula sempre subfrmula de si mesma.


No entanto, definimos B como uma subfrmula prpria de A se B Subf (A)
A, ou seja, se B uma subfrmula de A diferente de A. Se A = (p q)
(r q), as subfrmulas prprias de A so {p q, p, q, q, r q, r}.

1.2.3 Tamanho de Frmulas


O tamanho ou complexidade de uma frmula A, representado por |A|, um
nmero inteiro positivo, tambm definido por induo estrutural sobre uma
frmula:

1. |p| = 1 para toda frmula atmica p P

2. |A| = 1 + |A|

3. |A B| = 1 + |A| + |B|, para {, , }

O primeiro caso a base da induo e diz que toda frmula atmica


possui tamanho 1. Os demais casos indutivos definem o tamanho de uma
frmula composta a partir do tamanho de seus componentes. O item 2 trata
do tamanho de frmulas com conectivo unrio e o item 3, do tamanho de
frmulas com conectivos binrios, tratando dos trs conectivos binrios
de uma s vez. Note que o tamanho |A| de uma frmula A assim definido
corresponde ao nmero de smbolos que ocorrem na frmula, excetuando-se
os parnteses. Por exemplo, suponha que temos a frmula A = (p q)
(r q) e vamos calcular sua complexidade:

|(p q) (r q)| = 1 + |p q| + |r q|
= 3 + |p| + |q| + |r| + |q|
= 5 + |p| + |q| + |r| + |q|
=9

Note que se uma subfrmula ocorre mais de uma vez em A, sua complexi-
dade contabilizada cada vez que ela ocorre. No exemplo, a subfrmula q
foi contabilizada duas vezes.

1.2.4 Expressando Idias com o Uso de Frmulas


J temos uma base para comear a expressar propriedades do mundo real
em lgica proposicional. Assim, podemos ter smbolos atmicos com nomes

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #22
i i

12 Lgica para Computao

mais representativos das propriedades que queremos expressar. Por exemplo,


se queremos falar sobre pessoas e suas atividades ao longo da vida, podemos
utilizar os smbolos proposicionais criana, jovem, adulto, idoso, estudante,
trabalhador e aposentado.
Com esse vocabulrio bsico, para expressarmos que uma pessoa ou
criana, ou jovem, ou adulto ou idoso, escrevemos a frmula:

criana jovem adulto idoso

Para expressar que um jovem ou trabalha ou estuda, escrevemos

jovem trabalhador estudante

Para expressar a proibio de que no podemos ter uma criana aposen-


tada, uma das formas possveis escrever:

(criana aposentado)

Iremos ver mais adiante que esta apenas uma das formas de expressar
essa idia, que pode ser expressa de diversas formas equivalentes.

Exerccios

1.1 Simplificar as seguintes frmulas, removendo os parnteses desne-


cessrios:
(a) (p q)
(b) ((p q) (r s))
(c) (p (q (p q)))
(d) (p (q r))
(e) (p (q r))
(f) ((p (p q)) q)

1.2 Adicionar os parnteses s seguintes frmulas para que fiquem de


acordo com as regras de formao de frmulas:
(a) p q
(b) p q r s

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #23
i i

1 Lgica Proposicional: Linguagem e Semntica 13

(c) p q r p q r
(d) p q r s
(e) p (p q) q

1.3 Dar o conjunto de subfrmulas das frmulas a seguir. Notar que


os parnteses implcitos so fundamentais para decidir quais so as
subfrmulas:
(a) p p
(b) p r r s
(c) q p r p q r
(d) p q r s
(e) p (p q) q

1.4 Calcular a complexidade de cada frmula do exerccio anterior. Notar


que a posio exata dos parnteses no influencia a complexidade da
frmula!

1.5 Definir por induo sobre a estrutura das frmulas a funo


tomos (A), que retorna o conjunto de todos os tomos que ocorrem
na frmula A. Por exemplo, tomos (p (p q) q) = {p, q}.

1.6 Baseado nos smbolos proposicionais da Seo 1.2.4, expressar os se-


guintes fatos com frmulas da lgica proposicional.
(a) Uma criana no um jovem.
(b) Uma criana no jovem, nem adulto, nem idoso.
(c) Se um adulto trabalhador, ento ele no est aposentado.
(d) Para ser aposentado, a pessoa deve ser um adulto ou um idoso.
(e) Para ser estudante, a pessoa deve ser ou um idoso aposentado, ou
um adulto trabalhador ou um jovem ou uma criana.

1.3 Semntica
O estudo da semntica da lgica proposicional clssica consiste em atribuir
valores verdade s frmulas da linguagem. Na lgica clssica, h apenas dois

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #24
i i

14 Lgica para Computao

valores verdade: verdadeiro e falso. Representaremos o verdadeiro por 1 e o


falso por 0.
Inicialmente, atribumos valores verdade para os smbolos proposicionais
por meio de uma funo de valorao. Uma valorao proposicional V
uma funo V : P {0, 1} que mapeia cada smbolo proposicional em
P em um valor verdade. Essa valorao apenas diz quais so verdadeiros e
quais so falsos.
Em seguida, estendemos a valorao para todas as formas da linguagem da
lgica proposicional, de forma a obtermos uma valorao V : LLP {0, 1}.
Essa extenso da valorao feita por induo sobre a estrutura das frmulas,
da seguinte maneira:

V(A) = 1 se, e somente se, V(A) = 0


V(A B) = 1 sse V(A) = 1 e V(B) = 1
V(A B) = 1 sse V(A) = 1 ou V(B) = 1
V(A B) = 1 sse V(A) = 0 ou V(B) = 1

A definio anterior pode ser detalhada da seguinte maneira. Para atri-


buirmos um valor verdade a uma frmula, precisamos primeiro atribuir um
valor verdade para suas subfrmulas, para depois compor o valor verdade da
frmula de acordo com as regras dadas. Note que o fato de a definio usar
se, e somente se (abreviado de sse) tem o efeito de, quando a condio
direita for falsa, inverter o valor verdade. Dessa forma, se V(A) = 1, ento
V(A) = 0. Note tambm que, na definio de V(AB), o valor verdade ser
1 se V(A) = 1 ou se V(B) = 1 ou se ambos forem 1 (e, por isso, o conectivo
chamado de OU-Inclusivo). Similarmente, V(A B) ter valor verdade
1 se V(A) = 0 ou V(B) = 1 ou ambos. E V(A B) = 0 se V(A) = 0 ou
V(B) = 0 ou ambos.
Podemos visualizar o valor verdade dos conectivos lgicos de forma mais
clara por meio de matrizes de conectivos, conforme a Figura 1.1. Para ler essas
matrizes, procedemos da seguinte maneira. Por exemplo, na matriz relativa a
A B, vemos que, se A 0 e B 0, ento A B tambm 0.
Nas matrizes da Figura 1.1 podemos ver que a nica forma de obter o
valor verdade 1 para A B quando ambos, A e B, so valorados em 1. J

N.A. sse abreviatura de se, e somente se.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #25
i i

1 Lgica Proposicional: Linguagem e Semntica 15

AB B=0 B= 1 AB B=0 B=1


A=0 0 0 A=0 0 1
A=1 0 1 A=1 1 1

AB B=0 B=1 A
A=0 1 1 A=0 1
A=1 0 1 A=1 0

Figura 1.1 Matrizes de conectivos lgicos.

na matriz de A B, vemos que a nica forma de obter 0 quando A e B


so valorados em 0. Similarmente, na matriz de A B, vemos que a nica
forma de obtermos 0 quando A valorado em 1 e B valorado em 0.
Agora veremos um exemplo de valorao de uma frmula complexa.
Suponha que temos uma valorao V1 tal que V1 (p) = 1, V1 (q) = 0 e
V1 (r) = 1 e queiramos computar V1 (A), onde A = (p q) (r q).
Procedemos inicialmente computando os valores verdade das subfrmulas
mais internas, at chegarmos no valor verdade de A:

V1 (q) = 1
V1 (p q) = 1
V1 (r q) = 1
V1 ((p q) (r q)) = 1

Por outro lado, considere agora uma valorao V2 tal que V2 (p) = 1,
V2 (q) = 1 e V2 (r) = 1 e vamos calcular V2 (A), para A como anteriormente.
Ento:

V1 (q) = 0
V1 (p q) = 1
V1 (r q) = 0
V1 ((p q) (r q)) = 0

Ou seja, o valor verdade de uma frmula pode variar, em geral, de acordo


com a valorao de seus tomos. Pela definio dada, uma valorao atribui

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #26
i i

16 Lgica para Computao

um valor verdade a cada um dos infinitos smbolos proposicionais. No


entanto, ao valorarmos uma nica frmula, s temos necessidade de valorar
o seu conjunto de tomos, que sempre finito. Dessa forma, se uma frmula
A possui um nmero N de subfrmulas atmicas, e cada valorao pode
atribuir ou 0 ou 1 a cada um desses tomos, temos que pode haver 2N
distintas valoraes diferentes para a frmula A.
Veremos na Seo 1.4 que existem frmulas cujo valor verdade no varia
com as diferentes valoraes.

Exerccios

1.7 Considerar duas valoraes V1 e V2 tais que V1 valora todos os tomos


em 1 e V2 valora todos os tomos em 0. Computar como V1 e V2
valoram as frmulas a seguir:
(a) p q
(b) p q r s
(c) p q r (p q r)
(d) (p q) (r s)
(e) p (p q) q
(f) p p
(g) p p
(h) ((p q) p) p

1.8 Dar uma valorao para os tomos das frmulas (b) e (c), no exerccio
anterior, de forma que a valorao da frmula seja 1.

1.4 Satisfazibilidade, Validade e Tabelas da Verdade


Considere a frmula p p. Como essa frmula possui apenas um tomo,
podemos gerar apenas duas distintas valoraes para ela, V1 (p) = 0 e
V2 (p) = 1. No primeiro caso, temos V1 (p) = 1 e V(p p) = 1. No
segundo caso, temos V1 (p) = 0 e V(p p) = 0. Ou seja, em ambos os
casos, independentemente da valorao dos tomos, a valorao da frmula
sempre 1.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #27
i i

1 Lgica Proposicional: Linguagem e Semntica 17

Por outro lado, considere a frmula p p. De maneira similar, temos


apenas duas valoraes distintas para essa frmula, e ambas valoram p p
em 0.
Por fim, temos frmulas que podem ora ser valoradas em 0, em cujo caso a
valorao falsifica a frmula, ora ser valoradas em 1, em cujo caso a valorao
satisfaz a frmula. Por exemplo, a frmula p q uma delas.
Esses fatos motivam a classificao das frmulas de acordo com o seu
comportamento diante de todas as valoraes possveis de seus tomos.

Uma frmula A dita satisfazvel se existe uma valorao V de seus


tomos tal que V(A) = 1.

Uma frmula A dita insatisfazvel se toda valorao V de seus tomos


tal que V(A) = 0.

Uma frmula A dita vlida ou uma tautologia se toda valorao V de


seus tomos tal que V(A) = 1.

Uma frmula dita falsificvel se existe uma valorao V de seus


tomos tal que V(A) = 0.

H infinitas frmulas em cada uma dessas categorias. Existem tambm


diversas relaes entre as classificaes apresentadas, decorrentes diretamente
das definies, notadamente:

Toda frmula vlida tambm satisfazvel.

Toda frmula insatisfazvel falsificvel.

Uma frmula no pode ser satisfazvel e insatisfazvel.

Uma frmula no pode ser vlida e falsificvel.

Se A vlida, ento A insatisfazvel; analogamente, se A insatisfa-


zvel, ento A vlida.

Se A satisfazvel, A falsificvel, e vice-versa.

Existem frmulas que so tanto satisfazveis como falsificveis (por


exemplo, as frmulas p, p, p q, p q e p q).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #28
i i

18 Lgica para Computao

No caso de frmulas grandes, a classificao de uma frmula nas catego-


rias apresentadas no absolutamente trivial. Um dos grandes desafios da
computao encontrar mtodos eficientes para decidir se uma frmula
satisfazvel/insatisfazvel ou se vlida/falsificvel.
Um dos primeiros mtodos propostos na literatura para a verificao da
satisfazibilidade e validade de frmulas o mtodo da tabela da verdade.
A Tabela da Verdade um mtodo exaustivo de gerao de valoraes para
uma dada frmula A, a que construda da seguinte maneira:

A tabela possui uma coluna para cada subfrmula de A, inclusive


para A. Em geral, os tomos de A ficam situados nas colunas mais
esquerda, e A a frmula mais direita.

Para cada valorao possvel para os tomos de A, insere-se uma linha


com os valores da valorao dos tomos.

Em seguida, a valorao dos tomos propagada para as subfrmu-


las, obedecendo-se a definio de valorao. Dessa forma, comea-se
valorando as frmulas menores at as maiores.

Ao final desse processo, todas as possveis valoraes de A so criadas,


e pode-se classificar A da seguinte maneira:

A satisfazvel se alguma linha da coluna A contiver 1.


A vlida se todas as linhas da coluna A contiverem 1.
A falsificvel se alguma linha da coluna A contiver 0.
A insatisfazvel se todas as linhas da coluna A contiverem 0.

Como primeiro exemplo, considere a frmula A1 = (p q) (p


q). Vamos construir uma Tabela da Verdade para A1 . Para isso, inicialmente
montamos uma lista de subfrmulas e as valoraes para os tomos:

p q p q p q p q (p q) (p q)
0 0
0 1
1 0
1 1

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #29
i i

1 Lgica Proposicional: Linguagem e Semntica 19

Note que as frmulas esto ordenadas, da esquerda para a direita, em


ordem de tamanho, e a frmula A1 a ltima da direita. Em seguida,
preenchemos as colunas de cada subfrmula, de acordo com a definio
de valorao, indo da esquerda para a direita, at completar toda a tabela.
Obtemos a seguinte Tabela da Verdade para A1 :

p q p q p q p q (p q) (p q)
0 0 1 1 0 1 0
0 1 1 0 1 1 1
1 0 0 1 1 1 1
1 1 0 0 1 0 0

Podemos inferir dessa Tabela da Verdade que A1 satisfazvel, devido ao 1


na segunda e terceira linhas, e falsificvel, devido ao 0 na primeira e quarta
linhas.
Como segundo exemplo, considere a frmula A2 = p p. A Tabela da
Verdade para A2 fica:
p p p p
0 1 1
1 0 1

Nesse caso, vemos que A2 uma tautologia (ou uma frmula vlida), pois
todas as valoraes para A2 geram 1 em todas as linhas.
Considere agora a Tabela da Verdade para a frmula A3 = p p:

p p p p
0 1 0
1 0 0

Donde inferimos que A3 uma frmula invlida, pois todas as linhas da


tabela da verdade contm 0.
Do ponto de vista computacional, importante notar que, se uma frmula
contm N tomos, o nmero de valoraes possveis para esses tomos
de 2N e, portanto, o nmero de linhas da Tabela da Verdade ser de 2N .
Isso faz com que o mtodo da Tabela da Verdade no seja recomendado para
frmulas com muitos tomos.
Como exemplo final desta seo, gostaramos de verificar se a frmula
A4 = ((p q) (r s)) ((p r) (q s)) vlida ou no. Para isso,
construmos a seguinte Tabela da Verdade para A4 :

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #30
i i

20 Lgica para Computao

1 2 1 2 3 A
z}|{ z}|{ z}|{ z}|{ z }|3 { z }| { z }|4 {
p q r s pq rs pr qs 1 2 1 2 3 3
0 0 0 0 1 1 0 0 1 1 1
0 0 0 1 1 1 0 1 1 1 1
0 0 1 0 1 0 1 0 0 0 1
0 0 1 1 1 1 1 1 1 1 1
0 1 0 0 1 1 0 1 1 1 1
0 1 0 1 1 1 0 1 1 1 1
0 1 1 0 1 0 1 1 0 1 1
0 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 1 1 0 0 0 1
1 0 0 1 0 1 1 1 0 1 1
1 0 1 0 0 0 1 0 0 0 1
1 0 1 1 0 1 1 1 0 1 1
1 1 0 0 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1 1 1
1 1 1 0 1 0 1 1 0 1 1
1 1 1 1 1 1 1 1 1 1 1

Por meio dessa Tabela da Verdade, podemos ver que A4 uma frmula
vlida, pois todas as linhas contm 1 na ltima coluna.
Nota-se tambm que, com o aumento de tomos, o mtodo fica, no
mnimo, desajeitado para a verificao manual e, na prtica, 4 tomos o
limite de realizao manual de uma Tabela da Verdade.
A automao da Tabela da Verdade tambm possvel, mas, por causa do
crescimento exponencial, existe um limite no muito alto para o nmero de
tomos a partir do qual mesmo a construo das Tabelas da Verdade por
computador acaba levando muito tempo e as torna tambm inviveis.

Exerccios

1.9 Classificar as frmulas a seguir de acordo com sua satisfazibilidade,


validade, falsificabilidade ou insatisfazibilidade:
(a) (p q) (q p)
(b) (p p) q

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #31
i i

1 Lgica Proposicional: Linguagem e Semntica 21

(c) p q p q
(d) p
(e) p p
(f) (p q p)
(g) (p p q)
(h) ((p q) (r q)) (p r q)

1.10 Encontrar uma valorao que satisfaa as seguintes frmulas:

(a) p p
(b) q p p
(c) (p q) p
(d) (p q q)
(e) (p q) (p q)
(f) (p q) (q p)

1.11 O fragmento implicativo o conjunto de frmulas que so construdas


apenas usando o conectivo . Determinadas frmulas desse frag-
mento receberam nomes especiais, conforme indicado a seguir. Veri-
ficar a validade de cada uma dessas frmulas.

I pp
B (p q) (r p) (r p)
C (p q r) (q p r)
W (p p q) (p q)
S (p q r) (p q) (p r)
K pqp
Peirce ((p q) p) p

1.12 Dada uma frmula A com N tomos, calcular o nmero mximo de


posies (ou seja, clulas ocupadas por 0 ou 1) em uma Tabela da
Verdade para A, em funo de |A| e N.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #32
i i

22 Lgica para Computao

1.13 Seja B Subf (A). A polaridade de B em A pode ou ser + (positiva)


ou ser (negativa), e dizemos que essas duas polaridades so opostas.
Definimos a polaridade de B em A por induo estrutural sobre A, da
seguinte maneira:
Se B = A, ento a polaridade de B +.
Se B = C, ento a polaridade de C oposta de B.
Se B = C D, {, }, ento as polaridades de B, C e D so as
mesmas.
Se B = C D, ento C tem polaridade oposta de B, e D tem a
mesma polaridade que B.
Notar que, em uma mesma frmula A, uma subfrmula B pode
ocorrer mais de uma vez, e as polaridades dessas ocorrncias no so
necessariamente as mesmas. Por exemplo, em (p q) (p q)
a primeira ocorrncia de p q tem polaridade negativa e a segunda,
positiva.
Com base nessa definio, provar ou refutar as seguintes afirmaes:
(a) Se A uma frmula em que todos os tomos tm polaridade
positiva, ento A satisfazvel.
(b) Se A uma frmula em que todos os tomos tm polaridade
positiva, ento A falsificvel.
(c) Se A uma frmula em que todos os tomos tm polaridade
negativa, ento A satisfazvel.
(d) Se A uma frmula em que todos os tomos tm polaridade
negativa, ento A falsificvel.
Dica: Dar exemplos de frmulas em que todos os tomos tm polari-
dade s positiva e polaridade s negativa.

1.5 Conseqncia Lgica


Quando podemos dizer que uma frmula conseqncia de outra frmula
ou de um conjunto de frmulas? Este um dos temas mais estudados da
lgica, e diferentes respostas a ele podem gerar diferentes lgicas. No caso
da lgica proposicional clssica, a resposta dada em termos de valoraes.
Dizemos que uma frmula B conseqncia lgica de outra frmula A, re-
presentada por A |= B, se toda valorao v que satisfaz A tambm satisfaz B.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #33
i i

1 Lgica Proposicional: Linguagem e Semntica 23

Note que essa definio permite que B seja satisfeito por valoraes que no
satisfazem A. Nesse caso, tambm dizemos que A implica logicamente B.
Podemos usar as Tabelas da Verdade para verificar a conseqncia lgica.
Por exemplo, considere a afirmao p q r |= p r. Para verificar se essa
afirmao verdadeira, construmos simultaneamente as Tabelas da Verdade
de p q r e p r:
Linha p q r pq pq r p r
1 0 0 0 0 1 1
2 0 0 1 0 1 1
3 0 1 0 1 0 1
4 0 1 1 1 1 1
5 1 0 0 1 0 0
6 1 0 1 1 1 1
7 1 1 0 1 0 0
8 1 1 1 1 1 1

Nesse caso, vemos que a frmula p q r implica logicamente p r,


pois toda linha da coluna para p q r que contm 1 (linhas 1, 2, 4, 6 e 8)
tambm contm 1 na coluna para p r. Alm disso, a terceira linha contm
1 para p r e 0 para p q r, o que permitido pela definio.
Vejamos um segundo exemplo, em que vamos tentar determinar se p
q r |= p r ou no. Novamente, construmos uma Tabela da Verdade
simultnea para p q r e para p r:

Linha p q r pq pq r p r
1 0 0 0 0 1 1
2 0 0 1 0 1 1
3 0 1 0 0 1 1
4 0 1 1 0 1 1
5 1 0 0 0 1 0
6 1 0 1 0 1 1
7 1 1 0 1 0 0
8 1 1 1 1 1 1

Conclumos que p q r 2 p r por causa da quinta linha, que satisfaz


p q r mas falsifica p r.
Alm da conseqncia lgica entre duas frmulas, podemos estudar quan-
do uma frmula A a conseqncia lgica de um conjunto de frmulas .

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #34
i i

24 Lgica para Computao

Um conjunto de frmulas chamado de teoria, e essa definio nos permite


dar um significado preciso para as conseqncias lgicas de uma teoria.
Dizemos que uma frmula A a conseqncia lgica de um conjunto de
frmulas , representado por |= A, se toda valorao v que satisfaz a todas
as frmulas de tambm satisfaz A.
Como exemplo da verificao desse tipo de conseqncia lgica, vamos
verificar a validade da regra lgica conhecida por modus ponens, ou seja,
p q, p |= q. Para tanto, construmos a Tabela da Verdade:

p q pq
0 0 1
0 1 1
1 0 0
1 1 1

A nica linha que satisfaz simultaneamente p q e p a ltima, e nesse


caso temos tambm q satisfeita. Portanto, podemos concluir a validade do
modus ponens.
Nesta altura, surge uma pergunta natural: qual a relao entre a con-
seqncia lgica (|=) e o conectivo booleano da implicao ()? A resposta
a essa pergunta dada pelo Teorema da Deduo.

Teorema 1.5.1 teorema da deduo Sejam um conjunto de frmulas e A e


B frmulas. Ento,

, A |= B sse |= A B.

Demonstrao: Vamos provar as duas partes do se, e somente se separa-


damente.
() Primeiro, assuma que , A |= B. Ento, pela definio de con-
seqncia lgica, toda valorao que satisfaz simultaneamente e A
tambm satisfaz B. Para mostrar que |= A B, considere uma
valorao v que satisfaz todas as frmulas de (notao: v( ) = 1).
Vamos verificar que v(A B) = 1. Para isso, consideramos dois casos:

N.A. usual representar o conjunto de frmulas antes do smbolo |= apenas como uma lista de
frmulas; alm disso, em vez de escrevermos {A} |= B, abreviamos para , A |= B.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #35
i i

1 Lgica Proposicional: Linguagem e Semntica 25

v(A) = 1. Nesse caso, como temos , A |= B, temos necessaria-


mente que v(B) = 1 e, portanto, v(A B) = 1.
v(A) = 0. Nesse caso, imediato que v(A B) = 1.
Portanto, conclumos que |= A B.
() Vamos assumir agora que |= A B, ou seja, toda valorao
que satisfaz tambm satisfaz A B. Para mostrar que , A |= B,
considere uma valorao v tal que v( ) = v(A) = 1. Assuma, por
contradio, que v(B) = 0. Nesse caso, temos que v(A B) = 0, o
que contradiz |= A B. Logo, v(B) = 1 e provamos que , A |= B,
como desejado.
O teorema da deduo nos diz que A B e conseqncia lgica das
hipteses se, e somente se, ao adicionarmos A s hipteses, podemos inferir
logicamente B. Dessa forma, a noo de implicao lgica e o conectivo
implicao esto totalmente relacionados.
Alm da conseqncia lgica, podemos tambm considerar a equivalncia
lgica entre duas frmulas. Duas frmulas A e B so logicamente equivalentes,
representado por A B, se as valoraes que satisfazem A so exatamente as
mesmas valoraes que satisfazem B. Em outras palavras, A B se A |= B
e B |= A.
Para verificarmos a equivalncia lgica de duas frmulas A e B, constru-
mos uma Tabela da Verdade simultaneamente para A e B e notamos se as
colunas para A e para B so idnticas.
Por exemplo, considere a seguinte equivalncia lgica: p q q p.
Construmos a Tabela da Verdade simultnea para p q e q p:

p q p q p q q p
0 0 1 1 1 1
0 1 1 0 1 1
1 0 0 1 0 0
1 1 0 0 1 1

Como as colunas para p q e q p so idnticas, podemos concluir


que p q q p. A implicao q p dita a contrapositiva da
implicao p q.
Existem diversas equivalncias notveis entre frmulas, dentre as quais
destacamos as seguintes.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #36
i i

26 Lgica para Computao

Definio 1.5.1 equivalncias notveis

(a) p p (eliminao da dupla negao)


(b) p q p q (definio de em termos de e )
(c) (p q) p q (lei de De Morgan 1)
(d) (p q) p q (lei de De Morgan 2)
(e) p (q r) (p q) (p r) (distributividade de sobre )
(f) p (q r) (p q) (p r) (distributividade de sobre )

Ao definirmos a linguagem da lgica proposicional, apresentamos trs


smbolos binrios: , e . Na realidade, precisamos apenas da negao
e de um deles para definir os outros dois. Nesse exemplo, vamos ver como
definir e em funo de e .

Definio 1.5.2 definio de e em funo de e

(a) A B (A B); note a semelhana com as leis de De Morgan


(b) A B (A B)

Tambm possvel usar como bsicos o par e , ou o par e , e definir


os outros conectivos binrios em funo deles. Veja os Exerccios 1.18 e 1.19.
Por fim, podemos definir o conectivo da seguinte maneira: A B
(A B) (B A). A frmula A B possui a seguinte Tabela da Verdade:

p q pq
0 0 1
0 1 0
1 0 0
1 1 1

Ou seja, p q satisfeita sse o valor verdade de p e q o mesmo. Desse


modo, pode-se formular uma condio para a equivalncia lgica de forma
anloga ao teorema da deduo para a conseqncia lgica.

Teorema 1.5.2 A B se, e somente se, A B uma frmula vlida.

A demonstrao desse teorema ser feita no Exerccio 1.20.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #37
i i

1 Lgica Proposicional: Linguagem e Semntica 27

Exerccios

1.14 Provar ou refutar as seguintes conseqncias lgicas, usando Tabelas


da Verdade:
(a) q p |= p q
(b) p q |= p q
(c) p q |= p q r
(d) p q |= p q r
(e) (p q) |= p q
(f) (p q) |= p q

1.15 Provar ou refutar a validade das seguintes regras lgicas, usando Tabe-
las da Verdade:
(a) p q, q |= p (modus tolens)
(b) p q, q |= p (abduo)
(c) p q, q |= p

1.16 Mostrar a validade das equivalncias notveis da Definio 1.5.1, usan-


do Tabelas da Verdade.

1.17 Mostrar a validade das equivalncias utilizadas na definio de e


em funo de e na Definio 1.5.2, usando Tabelas da Verdade.

1.18 Assumir agora que temos como bsicos os conectivos e . Mostrar


como os conectivos e podem ser definidos em termos de e e
provar as equivalncias lgicas, usando Tabelas da Verdade.

1.19 Assumir agora que temos como bsicos os conectivos e . Mostrar


como os conectivos e podem ser definidos em termos de e e
provar as equivalncias lgicas, usando Tabelas da Verdade.

1.20 Provar que:


(a) A B (A B) (A B)
(b) A B se, e somente se, A B uma frmula vlida (Teo-
rema 1.5.2)

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #38
i i

28 Lgica para Computao

1.21 Provar que, se A B, ento:


(a) A B
(b) A C B C
(c) C A C B
(d) A C B C
(e) A C B C
Essas equivalncias so chamadas de congruncias.

1.22 Provar que:


(a) Se A |= B e B |= C, ento A |= C (transitividade de |=)
(b) Se A B e B C, ento A C (transitividade de )

1.23 Considerar a seguinte teoria:

criana jovem adulto idoso


trabalhador estudante aposentado
jovem trabalhador estudante
(criana aposentado)
(criana trabalhador)

Verificar quais das seguintes frmulas so conseqncia lgica des-


sa teoria:
(a) aposentado jovem adulto idoso
(b) criana jovem
(c) criana estudante
(d) aposentado jovem

1.6 Desafios da Lgica Proposicional


A lgica proposicional clssica, apesar de estar situada no incio do vasto
estudo da lgica moderna, apresenta um dos maiores desafios teoria da
computao. Isso porque o problema SAT (a satisfazibilidade de uma fr-
mula) foi o primeiro a ser demonstrado pertencer a uma classe de problemas

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #39
i i

1 Lgica Proposicional: Linguagem e Semntica 29

chamados de NP-completos (No-determinsticos Polinomialmente comple-


tos). Esses problemas no possuem nenhuma soluo eficiente conhecida e,
no entanto, ningum at o momento demonstrou que no podem ter uma
soluo eficiente.
Uma classe muito grande de problemas computacionais interessantes e
muito freqentes so problemas NP-completos. Pertencem a essa classe de
problemas de quase todas as reas da computao, como algoritmos de otimi-
zao do uso de recursos, criptografia e segurana de redes de computadores,
inteligncia artificial, especificao de sistemas, aprendizado computacional,
viso computacional, entre muitos outros.
O nome NP-completo vem do seguinte fato: muito fcil obter no-
deterministicamente, ou seja, com um chute, uma valorao para os tomos
de uma frmula, e possvel verificar eficientemente, ou seja, em tempo
polinomial em relao complexidade da frmula, se essa valorao satisfaz
ou no a frmula. Todos os problemas que podem ser resolvidos com um
chute no-determinstico, seguido de uma verificao em tempo polino-
mial da correo do chute, so chamados de problemas em NP. Para serem
completos, h ainda um requisito extra.
A classe de problemas NP-completos possui a propriedade de que, se
um desses problemas tiver uma soluo eficiente, todos os problemas da
classe tero solues eficientes. Por outro lado, se ficar demonstrado que um
problema dessa classe no pode ter soluo eficiente, nenhum problema da
classe ter soluo eficiente. Todos os problemas NP-completos esto em NP,
mas nem todos os problemas em NP so NP-completos.
O problema de soluo eficiente (ou seja, em tempo polinomial) para
problemas NP-completos o mais famoso problema em aberto na teoria da
computao. to famoso que existe at um prmio, envolvendo uma grande
soma em dinheiro, para quem conseguir resolver o problema, ou seja, para
quem conseguir mostrar se possvel ou impossvel haver solues eficientes
para problemas NP-completos.
Existem ainda outros problemas em aberto e igualmente difceis. Por
exemplo, o problema de se determinar se uma frmula vlida um pro-
blema complementar da determinao da satisfazibilidade. Esse problema
pertence classe de problemas coNP-completos. Permanece em aberto at
hoje se as classes NP e coNP so iguais ou se so distintas. Esses e outros
problemas de teoria da complexidade computacional permanecem desafios em
aberto que nasceram na lgica proposicional clssica.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #40
i i

30 Lgica para Computao

1.7 Notas Bibliogrficas

Os conectivos da lgica proposicional clssica so chamados de conecti-


vos booleanos, em homenagem ao matemtico ingls George Boole (1815-
1864) (MacHale, 1985). Boole nunca estudou para a obteno de um grau
acadmico, mas comeou sua carreira como um professor auxiliar e, com o
tempo, abriu sua prpria escola e iniciou sozinho os estudos de matemtica.
Em 1853, publicou seu trabalho mais famoso, An investigation into the laws
of thought, on which are founded the mathematical theories of logic and proba-
bilities, o qual deu origem a um campo da matemtica conhecido hoje como
lgebra booleana (Monk, 1989), que possui aplicaes em lgica, construo
de computadores, e deu as bases para a construo de circuitos eletrnicos.
Boole se correspondeu intensamente com Augustus de Morgan (1806-
1871), em cujas investigaes algbricas aparecem pela primeira vez as con-
sagradas leis de De Morgan (Rice, 1996).
A lgica proposicional moderna teve seu incio com a publicao, em 1910,
do livro Principia mathematica, de Russell e Whitehead (1910). Esse livro
lanou as bases matemticas do estudo da lgica como feito nos dias de hoje,
distinguindo-o do estudo da lgica como vinha sendo feito desde Aristteles
e diversos outros filsofos gregos e na Idade Mdia.
O mtodo das Tabelas da Verdade, em sua forma seminal, pode ser encon-
trado nos trabalhos de fundamentos da matemtica de Gottlob Frege e Char-
les Peirce na dcada de 1880. Na forma como o conhecemos, o mtodo foi
formulado por Emil Post (Stillwell, 2004) e Ludwig Wittgenstein. Wittgens-
tein utilizou esse mtodo em sua obra Tractatus logico-philosophicus (1922)
no estudo de funes verdade, e devido grande influncia desse trabalho, o
uso de Tabelas da Verdade se espalhou.
A lgica proposicional voltou a atrair grande interesse com o incio da
construo de computadores e circuitos eletrnicos de chaveamento na d-
cada de 1960. Pouco tempo depois, comeou a se desenvolver a teoria da
complexidade computacional. A classe de problemas NP-completos foi defi-
nida por Cook (1971), que estudou a complexidade de mtodos de provas de
teoremas (que sero vistos no prximo captulo). Uma lista de diversos pro-
blemas NP-completos, bem como um estudo detalhado de NP-completude,
pode ser encontrada no livro clssico de Garey e Johnson (1979).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #41
i i

1 Lgica Proposicional: Linguagem e Semntica 31

A relao entre problemas NP-completos e coNP-completos foi estudada


por Cook e Reckhow (1979). Diversas outras classes de complexidade so
tambm descritas no livro de Garey e Johnson (1979), bem como problemas
em aberto envolvendo a relao entre essas classes.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #42
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #43
i i

2 Sistemas Dedutivos

2.1 O Que um Sistema Dedutivo?


No Captulo 1, vimos o que so frmulas da lgica proposicional clssica e
como atribuir valores verdade a essas frmulas. Vimos tambm a noo de
conseqncia lgica e como determinar se uma frmula A conseqncia
lgica de um conjunto de frmulas .
No entanto, no vimos como, a partir de um conjunto de frmulas ,
podemos inferir novas frmulas que sejam a conseqncia lgica de . Essa
a tarefa de um sistema dedutivo.
Um sistema dedutivo nos permite inferir, derivar ou deduzir as conseqn-
cias lgicas de um conjunto de frmulas, chamado de teoria. Quando um
sistema dedutivo infere uma frmula A a partir de uma teoria , escrevemos
` A. O objeto ` A chamado de seqente, no qual o antecedente (ou
hiptese) e A o conseqente (ou concluso).
Existem vrios procedimentos distintos que nos permitem realizar uma
inferncia, e cada procedimento d origem a um distinto sistema dedutivo
(tambm chamado de sistema de inferncia). Neste captulo, iremos analisar
trs tipos de sistemas dedutivos: axiomatizaes (`Ax ), sistemas de deduo
natural (`DN ) e o mtodo dos tableaux analticos (`TA ).

N.A. Na sua formulao mais genrica, um seqente uma relao entre duas seqncias de
frmulas, B1 , . . . , Bn ` A1 , . . . , Am , com a leitura de que a seqncia de hipteses B1 , . . . , Bn
prova pelo menos uma das concluses A1 , . . . , Am ; ou seja, no antecedente a vrgula lida como
conjuno, enquanto no conseqente ela lida como disjuno.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #44
i i

34 Lgica para Computao

Obviamente, no queremos que um sistema de deduo produza fr-


mulas que no sejam conseqncia lgica da teoria usada como hiptese.
Dizemos que um sistema dedutivo ` correto se isso nunca ocorre, ou seja,
se ` A somente se |= A.
Por outro lado, queremos que um sistema dedutivo consiga inferir todas
as possveis conseqncias lgicas de uma teoria. Dizemos que um sistema
dedutivo ` completo se ele for capaz de realizar todas essas inferncias, ou
seja, se sempre tivermos ` A se |= A.
Todos os sistemas dedutivos que apresentaremos a seguir possuem as
propriedades de correo e completude.

2.2 Axiomatizao
Axiomatizao o sistema formal de deduo mais antigo que se conhece,
tendo sido usado desde a apresentao da geometria euclidiana pelos gregos.
S que, naquele caso, tratava-se de axiomatizar uma teoria no caso, a
teoria geomtrica. Mais modernamente, no final do sculo XIX, com os
trabalhos de Frege, as axiomatizaes foram usadas em tentativas de prover
um fundamento seguro para a matemtica.
Quando falamos em axiomatizao, porm, estamos nos referindo a
uma forma de inferncia lgica. Portanto, estamos nos referindo aqui a uma
axiomatizao da lgica clssica. Falaremos sobre axiomatizao de teorias
mais adiante.
A apresentao da axiomatizao segue o estilo utilizado por Hilbert, tanto
que as axiomatizaes de lgicas so muitas vezes chamadas de sistemas
de Hilbert. De acordo com essa forma de apresentao, uma axiomatizao
possui dois tipos de elementos:

Os axiomas, que so frmulas da lgica s quais se atribui um status


especial de verdades bsicas.

As regras de inferncia, que permitem inferir novas frmulas a partir de


frmulas j inferidas.

N.A. importante deixar bem claro que existem vrias lgicas, e no apenas a lgica. Na
realidade, existe um nmero infinito de possveis lgicas.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #45
i i

2 Sistemas Dedutivos 35

Antes de apresentarmos uma axiomatizao da lgica proposicional cls-


sica, temos de mencionar o conceito de substituio.

2.2.1 Substituies
A substituio de um tomo p por uma frmula B em uma frmula A
representada por A[p := B]. Intuitivamente, se temos uma frmula A =
p (p q) e queremos substituir p por (r s), o resultado da substituio
ser A[p := (r s)] = (r s) ((r s) q). A definio formal de
substituio se d por induo estrutural sobre a frmula A sobre a qual se
processa a substituio, da seguinte maneira:

1. p[p := B] = B

2. q[p := B] = q, para q 6= p

3. (A)[p := B] = (A[p := B])

4. (A1 A2 )[p := B] = A1 [p := B] A2 [p := B], para {, , }

Note que os itens 1 e 2 tratam do caso bsico de substituir em frmulas


proposicionais. Os itens 3 e 4 tratam dos casos indutivos.
Aplicando essa definio ao exemplo que foi visto intuitivamente, te-
mos que:

(p (p q))[p := (r s)] = p[p := (r s)] (p q)[p := (r s)]


= (r s) (p[p := (r s)] q[p := (r s)])
= (r s) ((r s) q)

Quando uma frmula B resultante da substituio de um ou mais tomos


da frmula A, dizemos que B uma instncia da frmula A.
Com a noo de substituio bem definida, apresentaremos a seguir uma
axiomatizao da lgica proposicional clssica.

N.A. Note que foi dito uma axiomatizao, pois podem existir vrias axiomatizaes
equivalentes.
N.A. Existem inmeras notaes alternativas para substituio na literatura que causam uma
certa confuso; por exemplo, para a mesma noo, podem-se encontrar na literatura as seguintes
notaes: A(B/p), A(p/B), A(p/B) etc. No nosso caso, escolhemos uma notao que fosse a
mais clara possvel.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #46
i i

36 Lgica para Computao

2.2.2 Axiomatizao, Deduo e Teoremas


Antes de definir uma axiomatizao para a lgica proposicional clssica,
importante frisarmos que pode existir mais de uma axiomatizao possvel,
todas elas equivalentes. A axiomatizao a seguir apresenta grupos de axio-
mas que definem o comportamento de cada um dos conectivos booleanos.

Definio 2.2.1 A axiomatizao para a lgica proposicional clssica contm


os seguintes axiomas:

(1 ) p (q p)
(2 ) (p (q r)) ((p q) (p r))
(1 ) p (q (p q))
(2 ) (p q) p
(3 ) (p q) q
(1 ) p (p q)
(2 ) q (p q)
(3 ) (p r) ((q r) ((p q) r))
(1 ) (p q) ((p q) p)
(2 ) p p

e a seguinte regra de inferncia:


Modus Ponens: A partir de A B e A, infere-se B.
Os axiomas podem ser instanciados, ou seja, seus tomos podem ser
uniformemente substitudos por qualquer frmula da lgica. Nesse caso,
dizemos que a frmula resultante uma instncia do axioma. Com a noo
de axiomatizao, podemos definir a noo de deduo.

Definio 2.2.2 Uma deduo uma seqncia de frmulas A1 , . . . , An tal que


cada frmula na seqncia ou uma instncia de um axioma ou obtida
de frmulas anteriores por meio das regras de inferncia, ou seja, por
modus ponens.

N.A. Chamamos a ateno para o fato de os axiomas (1 ) e (2 ) serem, respectivamente, as


frmulas K e S do Exerccio 1.11 da Seo 1.4.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #47
i i

2 Sistemas Dedutivos 37

Um teorema A uma frmula tal que existe uma deduo A1 , . . .,


An = A. Representaremos um teorema por `Ax A ou simplesmente por
` A, quando o contexto deixar claro qual o mtodo de inferncia que
est sendo usado.
A axiomatizao apresentada possui a propriedade da substituio uni-
forme, ou seja, se A um teorema e B uma instncia de A, ento B um
teorema tambm. O motivo para isso bem simples: se podemos aplicar uma
substituio para obter B de A, podemos aplicar a mesma substituio nas
frmulas que ocorrem na deduo de A e, como toda instncia de um axioma
uma frmula dedutvel, transformamos a deduo de A em uma deduo
de B.
Iremos definir agora quando uma frmula A segue de um conjunto de
frmulas , tambm chamado de teoria ou de conjunto de hipteses, o que
representado por `Ax A. Nesse caso, trata-se de adaptar a noo de deduo
para englobar os elementos de .
Definio 2.2.3 Dizemos que a frmula A dedutvel a partir do conjunto
de frmulas se h uma deduo, ou seja, uma seqncia de frmulas
A1 , . . . , An = A tal que cada frmula Ai na seqncia:
1) ou uma frmula Ai
2) ou uma instncia de um axioma
3) ou obtida de frmulas anteriores por meio de modus ponens
Note que, no caso de o conjunto ser um conjunto vazio, = , temos
que `Ax A implica que A um teorema, o que representado simples-
mente por ` AxA. Note tambm que no podemos aplicar a substituio
uniforme nos elementos de ; a substituio uniforme s pode ser aplicada
aos axiomas da lgica.
Tambm costume representar o conjunto como uma seqncia de
frmulas, sem o uso das chaves delimitadoras de conjuntos. Assim, se =
{A1 , . . . , An }, em vez de escrevermos {A1 , . . . , An } ` A, escrevemos simples-
mente A1 , . . . , An ` A. Similarmente, em vez de escrevermos {A} ` B,
escrevemos simplesmente , A ` B, representando a unio das hipteses pela
concatenao de listas de hipteses.
2.2.3 Exemplos
Vamos dar alguns exemplos de deduo de teoremas usando a axiomatizao
apresentada.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #48
i i

38 Lgica para Computao

Exemplo 2.2.1
Vamos inicialmente mostrar a deduo do teorema I = A A.
1. (A ((A A) A)) de (2 ), onde p := A, q := A A,
((A (A A)) (A A)) r := A.
2. A ((A A) A) de (1 ), onde p := A, q := A A,
3. ((A (A A)) (A A)) por modus ponens 1, 2.
4. A (A A) de (1 ), onde p := A, q := A.
5. AA por modus ponens 3, 4.

Note que o exemplo anterior deixa claro que qualquer instanciao de A


A dedutvel dessa maneira, bastando substituir A pela frmula desejada em
todas as suas ocorrncias na deduo.

Exemplo 2.2.2
Como um segundo exemplo, vamos mostrar que a deduo de duas frmulas
pode ser composta, conforme expressa a frmula B = (A B) ((C
A) (C B)).
1. ((C (A B)) ((C A) de (2 ), onde
(C B))) ((A B) p := (C (A B))
((C (A B)) ((C A) ((C A) (C B)),
(C B)))) q := A B.
2. (C (A B)) ((C A) de (1 ), onde p := C,
(C B)) q := A, r := B.
3. (A B) por modus ponens 1, 2.
((C (A B))
((C A) (C B)))
4. (((A B) ((C (A B)) de (1 ), onde p := A B,
((C A) (C B)))) q := C (A B),
(((A B) (C (A B))) r := (C A) (C B).
((A B) ((C A)
(C B))))
5. ((A B) (C (A B))) por modus ponens 4, 3.
(A B) ((C A) (C B))
6. (A B) (C (A B)) de (2 ), onde
p := A B, q := C.
7. (A B) ((C A) (C B)) por modus ponens 5, 6.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #49
i i

2 Sistemas Dedutivos 39

De posse desse resultado, devido propriedade da substituio uniforme,


podemos sempre concatenar duas implicaes, A B e C A para obter
C B.
Esses dois exemplos tambm so interessantes para mostrar quo com-
plexa pode ser uma deduo utilizando a simples axiomatizao. Compu-
tacionalmente falando, essa complexidade torna a axiomatizao de pouco
uso em termos de implementao, sendo utilizada basicamente como uma
ferramenta terica.
Vamos agora ver um exemplo de deduo a partir de uma teoria. Antes
disso, porm, para facilitar nossa tarefa, vamos apresentar o teorema da
deduo.

2.2.4 O Teorema da Deduo


O Teorema da Deduo relaciona a relao entre o conectivo da implicao,
, e a deduo lgica representada por `.

Teorema 2.2.1 teorema da deduo , A ` B se, e somente se, ` A B.


A prova desse teorema, em termos de axiomatizao, trata de transformar
uma deduo de , A ` B em uma deduo de ` A B e, inversamente,
transformar uma deduo ` A B em uma deduo de , A ` B.
No apresentaremos aqui uma demonstrao desse teorema; veja, porm,
o Exerccio 2.5. No entanto, vamos utiliz-lo em alguns exemplos de deduo
a partir de uma teoria.

Exemplo 2.2.3
Desejamos demonstrar que p q, p r ` p q r. Em vez de fazer
uma deduo direta, vamos usar o Teorema da Deduo e provar a condio
equivalente p q, p r, p ` q r. Dessa forma:
1. pq hiptese
2. pr hiptese
3. p hiptese
4. q modus ponens 1, 3
5. r modus ponens 2, 3
6. q (r (q r)) instncia de (1 )
7. r (q r) modus ponens 6, 4
8. qr modus ponens 7, 5

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #50
i i

40 Lgica para Computao

O Teorema da Deduo pode facilitar a prova de outros teoremas. Por


exemplo, a deduo de ` p p se torna trivial ao reformul-la como p ` p.

Exemplo 2.2.4
Usando o Teorema da Deduo, vamos deduzir novamente a frmula B =
(A B) ((C A) (C B)), ou seja, vamos deduzir que A
B, C A, C ` B.
1. AB hiptese
2. CA hiptese
3. C hiptese
4. A modus ponens 2, 3
5. B modus ponens 1, 4

A simplicidade dessa prova em relao anterior surpreendente, o que


atesta a fora do Teorema da Deduo.

Exerccios

2.1 Sem usar o Teorema da Deduo, apresentar demonstraes para as


seguintes frmulas:
(a) C = (A (B C)) (B (A C))
(b) W = (A (A B)) (A B)

2.2 Repetir o exerccio anterior, usando agora o Teorema da Deduo, e


comparar a complexidade das provas.

2.3 Provar os seguintes teoremas, usando o Teorema da Deduo se for


conveniente.
(a) (p q) ((p q) p)
(b) (p q) (q p)
(c) (q p) (p q)
(d) (p p) q
(e) p p

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #51
i i

2 Sistemas Dedutivos 41

2.4 Provar que a axiomatizao possui a propriedade da substituio uni-


forme. Ou seja, provar que, se `Ax A, ento, para qualquer frmula B
que seja uma instncia de A, `Ax B.
Dica: Provar por induo no tamanho n da deduo de A: A1 ,
. . . , An = A.

2.5 Mostrar que:

(a) Se h uma deduo para , A ` B ento obtemos uma deduo


para ` A B.
(b) Se h uma deduo para ` A B ento obtemos uma deduo
para , A ` B.
(c) Concluir o teorema da deduo.

2.3 Deduo Natural


O mtodo de inferncia por axiomatizao pode ter propriedades tericas
interessantes, mas totalmente impraticvel em termos de implementao
prtica. Isso pode ser visto nos exemplos da Seo 2.2.3, nos quais fica bvio
que identificar quais axiomas devem ser utilizados, em que ordem e com
qual substituio totalmente no-intuitivo e requer uma busca de grande
complexidade computacional.
Por outro lado, o tipo de inferncias que uma pessoa faz ao raciocinar
sobre os conectivos lgicos est longe de seguir o mtodo da axiomatizao.
Foi pensando nessa deficincia dos sistemas de axiomatizao que Gerhard



 
Gentzen props um mtodo de inferncia que se aproximasse mais da forma
como as pessoas raciocinam, dando a esse mtodo o nome de deduo
natural.

2.3.1 P da Deduo Natural


O mtodo da Deduo Natural um mtodo formal de inferncia baseado
em princpios bem claros e simples:

As inferncias so realizadas por regras de inferncia em que hipteses


podem ser introduzidas na prova e que devero ser posteriormente
descartadas para a consolidao da prova.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #52
i i

42 Lgica para Computao

Para cada conectivo lgico, duas regras de inferncia devem ser provi-
das, uma para a insero do conectivo na prova e outra para a remoo
do conectivo.

As frmulas introduzidas como hipteses sero representadas entre chaves


e numeradas por exemplo, [A]1 em que o nmero ser usado para
indicar o descarte dessa hiptese por uma regra de inferncia em algum passo
posterior. Alm disso, comum, em apresentaes de Deduo Natural,
utilizar a constante lgica (falsum ou falsidade), que no satisfeita por
nenhuma valorao. A Figura 2.1 apresenta as regras de insero e eliminao
do conectivo (implicao) em Deduo Natural.

[A]i
AB A ..
( E) .
B B
( I)i
AB

Figura 2.1 Eliminao e insero da em deduo natural.

A regra ( E) de eliminao da implicao nada mais do que modus


ponens. A regra ( I) da insero da implicao expressa a seguinte idia:
para inferir A B, necessrio hipotetizar A e, a partir dessa hiptese,
inferir B; o fato de A ser uma hiptese indicado pela marcao [A] e, como
toda hiptese deve ser descartada por uma regra, utilizamos o ndice numrico
i, [A]i , para indicar que a hiptese foi descartada pelo uso da regra ( I)i .
Por exemplo, para provarmos que `DN A A (ou seja, que A A pode
ser inferido por Deduo Natural), temos:

[A]1
A
( I)1
AA

onde a insero da implicao descarta a hiptese [A]1 e o segundo A nada


mais do que a cpia do primeiro.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #53
i i

2 Sistemas Dedutivos 43

Um segundo exemplo mostra que `DN A (B A):

[A]1 [B]2
A
( I)2
BA
( I)2
A (B A)

Note que nessa deduo a segunda hiptese, [B]2, descartada primeiro,


para em seguida descartar-se a primeira hiptese, [A]1 .
Um terceiro exemplo mostra que `DN (A (B C)) ((A B)
(A C)):

[A (B C)]1 [A]3 [A B]2 [A]3


( E) ( E)
BC B
( E)
C
( I)3
AC
( I)2
(A B) (A C)
( I)1
(A (B C)) ((A B) (A C))

Nesse exemplo, a hiptese [A]3 foi usada duas vezes, mas descartada uma s
vez. O exemplo apresenta o uso de vrias inseres e eliminaes do conectivo
. Note que esses dois ltimos exemplos mostram a deduo pelo mtodo da
deduo natural de dois axiomas, (1 ) e (2 ), do mtodo da axiomatizao.

2.3.2 Regras de Deduo Natural para Todos os Conectivos

A Figura 2.2 mostra as regras de Deduo Natural para todos os conectivos.


Como usual nas apresentaes de Deduo Natural, introduzimos regras
para a constante lgica , cuja interpretao v() = 0 para qualquer
valorao v; seu dual a constante lgica >, onde v(>) = 1 para qual-
quer valorao v.
O conectivo possui uma regra de introduo e duas regras (simtri-
cas) de eliminao, permitindo, de uma conjuno A B inferir tanto A
quanto B. Para exemplificar o uso destas regras, demonstramos a seguir

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #54
i i

44 Lgica para Computao

`DN A B A e `DN A (B A B):

[A B]1 [A]1 [B]2


(E1 ) (I)
A AB
( I)1 ( I) 2
AB A A (B A B)

Na deduo da direita, o ltimo passo representa duas introdues de ,


descartando cada uma das hipteses. Note que esses dois exemplos mostram
a deduo pelo mtodo da Deduo Natural dos axiomas, (1 ) e (2 ), do
mtodo da axiomatizao.

A B AB AB
(I) (E1 ) (E2 )
AB A B

[A]i
.. AB A
. ( E)
B i B
( I)
AB
[A]i [B]j
A B .. ..
(I1 ) (I2 ) . .
AB AB AB C C
(E)i,j
C
A A
(I) (E)
A

[A]i [A]i
.. ..
. .

( I)i ( E)i
A A

Figura 2.2 Regras de introduo e eliminao de conectivos em deduo


natural.

O conectivo possui duas regras de introduo e uma regra de eliminao.


As regras de introduo de so duais das regras de eliminao de . J
a regra de eliminao (E) descarta duas hipteses simultaneamente. Para
exemplificar o uso destas regras, demonstramos a seguir `DN A A B e

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #55
i i

2 Sistemas Dedutivos 45

`DN (A C) ((B C) ((A B) C)).


[A C]1 [A]3 [B C]2 [B]4
1 ( E) ( E)
[A]
(I1 ) C C [A B]5
AB (E)3,4
( I)1 C
AAB ( I) 3
(A C) ((B C) ((A B) C))

Note que esses dois exemplos mostram a deduo pelo mtodo da Dedu-
o Natural dos axiomas, (1 ) e (3 ), do mtodo da axiomatizao.
O conectivo (negao) est intimamente ligado com a constante
(falsidade). De fato, comparando a regra da insero da implicao, ( I),
e a regra da insero da negao, (I), percebemos a semelhana entre A
e A . Isso no coincidncia, pois, se fizermos a Tabela da Verdade,
verificaremos que A A .
A regra de introduo de indica que equivale a uma contradio; se
encararmos A A , veremos que essa regra nada mais que uma
instanciao do modus ponens. A regra de eliminao de o princpio da
trivializao da lgica clssica em que, a partir de uma contradio, qualquer
frmula dedutvel.
A regra de introduo da negao (I), como mencionado, se assemelha
introduo da implicao, expressando que, se assumimos uma frmula
como verdadeira e isso levar contradio, ento a frmula deve ser falsa. Por
outro lado, se assumimos que uma frmula A falsa (ou seja, sua negao A
verdadeira) e chegamos a uma contradio, a regra da insero da negao
nos daria uma dupla negao, A. No entanto, a regra de eliminao da
negao, (E), nos permite inferir que a frmula A verdadeira, e portanto
a regra (E) corresponde inferncia A ` A. Para ilustrar o uso dessas
regras, mostramos a seguir a deduo de ` (A B) ((A B) A)
e ` A A.
[A B]1 [A]3 [A B]2 [A]3
( E) ( E) [A]1 [A]2
B B (I)
(I)
(E)2
(I)3 A
A ( I)1
( I) 2 A A
(A B) ((A B) A)

N.A. Esse princpio recebe o nome em latim de Ex Contraditio Quodlibet ou ECQ.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #56
i i

46 Lgica para Computao

A deduo da esquerda tem a peculiaridade de assumir a hiptese [A]3 e


utiliz-la duas vezes (por meio de uma cpia), mas descart-la uma nica vez
na introduo da negao (I)3 . Esse comportamento anlogo ao de per-
mitir o descarte de duas hipteses idnticas por uma mesma regra. A deduo
da direita mostra o que foi afirmado anteriormente sobre a equivalncia entre
(E) e a eliminao da dupla negao. Note que demonstramos, pelo mtodo
da Deduo Natural, os axiomas (1 ) e (2 ) do mtodo da axiomatizao.
Com isso, demonstramos todos os axiomas do mtodo de axiomatizao por
meio da Deduo Natural (ver Exerccio 2.9).
Uma importante observao sobre as regras da deduo natural que as
regras de introduo e eliminao podem ser aplicadas a qualquer instncia
das frmulas. De fato, fizemos isso vrias vezes nas dedues apresentadas,
por exemplo, quando deduzimos a partir de A e A, que podem ser
vistas como instncias de A e A pela substituio no-circular A := A.

2.3.3 Definio Formal de Deduo Natural


Depois de vermos todos esses exemplos, estamos em condies de definir
formalmente o que uma deduo pelo mtodo da Deduo Natural.

Definio 2.3.1 A deduo de `DN A pelo mtodo da deduo natural uma


rvore cujos ns contm frmulas tais que:
a) A frmula A a raiz da rvore de deduo.
b) Os ns da folha da rvore de deduo so elementos de ou
hipteses.
c) Cada n intermedirio obtido a partir de ns superiores na
rvore por meio da instanciao de uma regra de insero ou
remoo constante na Figura 2.2.
d) Todas as hipteses devem ter sido descartadas por regras.
e) Uma regra pode descartar uma ou mais frmulas idnticas ou,
similarmente, as hipteses podem ser copiadas para distintos pon-
tos da rvore de deduo.
Note que, de acordo com essa definio, os teoremas da lgica proposicio-
nal clssica so as frmulas que podem ser inferidas a partir de um conjunto
de hipteses = . Esse foi o caso de todos os exemplos vistos at agora.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #57
i i

2 Sistemas Dedutivos 47

Como um exemplo de deduo em que 6= , mostramos a seguir a


deduo de A ` A, dual de A ` A vista anteriormente:

A [A]1
(I)

(I)1
A

Como exemplo final, mostramos a deduo no-trivial do teorema


conhecido como princpio do terceiro excludo, que exclui um terceiro valor
verdade na lgica clssica, afirmando que toda frmula ou verdadeira
ou falsa: A A. Esse princpio provado hipotetizando-se sua ne-
gao, (A A), e derivando uma contradio; por eliminao da negao,
chega-se ao resultado desejado.

[A]1
(I)
A A [(A A)]2
(I)

(I)1
A
(I)
A A [(A A)]2
(I)

(E)2
A A

Note que a hiptese [(A A)] foi utilizada duas vezes e foi descartada
no ltimo passo da deduo.

Exerccios

2.6 Usando Deduo Natural, apresentar demonstraes para as seguintes


frmulas:
(a) C = (A (B C)) (B (A C))
(b) W = (A (A B)) (A B)

N.A. Em latim, Tertio Non Datur.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #58
i i

48 Lgica para Computao

2.7 Deduzir os seguintes resultados pelo mtodo da deduo natural.


(a) (p q) ` ((p q) p)
(b) p q, q ` p
(c) q p ` p q
(d) (p q) ` p q
(e) p q ` (p q)
(f) (p q) ` p q
(g) p q ` (p q)
(h) p (q r) ` (p q) (p r)
(i) (p q) (p r) ` p (q r)
(j) p (q r) ` (p q) (p r)
(k) (p q) (p r) ` p (q r)

2.8 Demonstrar o teorema da deduo, usando as regras da Deduo


Natural. Ou seja, mostrar que

, A `DN B sse `DN A B.

2.9 Provar que toda deduo pelo sistema de axiomatizao pode ser
simulada pelo mtodo da Deduo Natural.
Dica: Notar que j demonstramos todos os axiomas em exemplos
anteriores. Notar tambm que a substituio e modus ponens fazem
parte da Deduo Natural. Resta apenas mostrar, dada uma deduo
axiomtica, como compor uma Deduo Natural.

2.4 O Mtodo dos Tableaux Analticos


Os mtodos de inferncia vistos at agora permitem demonstrar quando uma
frmula pode ser a concluso de um conjunto de hipteses. No entanto, ne-
nhum desses mtodos prov, de maneira bvia, um procedimento de deciso.
Um procedimento de deciso permite determinar a validade de um se-
qente, ou seja, determinar se B1 , . . . , Bn ` A1 , . . . , Am ou se B1 , . . . , Bn 0
A1 , . . . , Am . No caso tpico, estamos interessados em decidir seqentes com o
conseqente unitrio, da forma ` A. Os mtodos dos sistemas axiomticos

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #59
i i

2 Sistemas Dedutivos 49

e da deduo natural apenas nos permitiam demonstrar como A poderia


ser inferido a partir de . Mas esses mtodos no nos permitiam inferir que
0 A, ou seja, no permitiam inferir a falsidade de um seqente.
importante notar que 0 A no implica que ` A. Isso pode ser
visualizado mais facilmente pela noo de conseqncia lgica. Considere
a (in)conseqncia lgica p 2 q, em que claramente podemos ter uma
valorao v que satisfaz p e contradiz q; com isso no podemos afirmar que
p |= q, pois podemos ter uma valorao v 0 que satisfaz p e q, falsificando
q. Dessa forma, temos que p 2 q e p 6|= q.
Esse exemplo, alis, muito conveniente para ilustrar o fato de que os
mtodos baseados em Tabelas da Verdade so procedimentos de deciso.
Porm, como j vimos, esses procedimentos tm um crescimento no nmero
de linhas das Tabelas da Verdade exponencial com o nmero de smbolos
proposicionais.
Apresentaremos agora um mtodo de deciso baseado em um sistema de
inferncia, o qual no necessariamente gera provas de tamanho exponencial
com o nmero de smbolos proposicionais. Tal mtodo chamado de mtodo
dos tableaux analticos ou tableaux semnticos.
Tableau analtico um mtodo de inferncia baseado em refutao: para
provarmos que B1 , . . . , Bn ` A1 , . . . , Am , afirmaremos a veracidade de B1 , . . . ,
Bn e a falsidade de A1 , . . . , Am , na esperana de derivarmos uma contradio.
Se a contradio for obtida, teremos demonstrado o seqente. Por outro lado,
se no for obtida uma contradio, teremos obtido um contra-exemplo ao
seqente, ou seja, teremos construdo uma valorao que satisfaz todas as
frmulas Bi do antecedente e falsifica todas as frmulas Aj do conseqente.

2.4.1 Frmulas Marcadas


Para afirmar a veracidade ou a falsidade de frmula, o mtodo dos tableaux
analticos lida com frmulas marcadas pelos smbolos T (de true, verdadeiro)
e F (falso). Dessa forma, em vez de lidar com frmulas puras, do tipo A,
lidaremos com frmulas marcadas, do tipo TA e FA. As frmulas marcadas
TA e FA so chamadas de frmulas conjugadas.

N.A. Tanto no singular, tableau, quanto no plural, tableaux, a palavra pronunciada tabl;
iremos usar a grafia tradicional em francs sem, no entanto, grafar a palavra em itlico.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #60
i i

50 Lgica para Computao

O passo inicial na criao de um tableau para um seqente B1 , . . . , Bn `


A1 , . . . , Am marcar todas as frmulas da seguinte maneira: as frmulas do
antecedente (aquelas cuja veracidade queremos afirmar) so marcadas por
T; as frmulas do conseqente, cuja finalidade em um processo de refutao
queremos afirmar, so marcadas por F. Dessa forma, o seqente B1 , . . . , Bn `
A1 , . . . , Am d origem ao tableau inicial:

TB1
..
.
TBn
FA1
..
.
FAm

Esse formato inicial do tableau indica que um tableau uma rvore. Em


seguida, o tableau expandido por regras que podem simplesmente adicionar
novas frmulas ao final de um ramo (regras do tipo ) ou bifurcar um ramo
em dois (regras do tipo ).

2.4.2 Regras de Expanso e

As frmulas marcadas de um tableau podem ser de dois tipos: frmulas


do tipo e frmulas do tipo . As frmulas do tipo se decompem em
frmulas 1 e 2 , conforme ilustrado na Figura 2.3. As frmulas do tipo se
decompem em frmulas 1 e 2 , conforme ilustrado na Figura 2.4.

1 2
TA B TA TB
FA B FA FB
FA B TA FB
TA FA FA

Figura 2.3 Frmulas do tipo .

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #61
i i

2 Sistemas Dedutivos 51

1 2
FA B FA FB
TA B TA TB
TA B FA TB
FA TA TA

Figura 2.4 Frmulas do tipo .

Note que a escolha de classificar TA como frmula do tipo e FA


como frmula do tipo arbitrria e foi feita com o intuito de dar simetria
ao conjunto de frmulas marcadas. Assim, se uma frmula do tipo , a
frmula conjugada do tipo , e vice-versa.
As regras de expanso de um tableau so as seguintes:

Expanso : Se um ramo do tableau contm uma frmula do tipo ,


adicionam-se 1 e 2 ao fim de todos os ramos que contm .


1
2

Expanso : Se um ramo do tableau contm uma frmula do tipo ,


esse ramo bifurcado em dois ramos, encabeados por 1 e 2 , respec-
tivamente.

1 2

Note que, se p um tomo, Tp e Fp no so nem frmulas do tipo nem


do tipo e portanto no podem gerar expanses do tableau. Em cada ramo,
uma frmula s pode ser expandida uma nica vez.
Um ramo que no possui mais frmulas para serem expandidas chamado
de ramo saturado. Como as expanses e sempre geram frmulas de
tamanho menor, eventualmente todas as frmulas sero expandidas at che-
garmos ao nvel atmico, quando todos os ramos estaro saturados. Portanto,
o processo de expanso sempre termina.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #62
i i

52 Lgica para Computao

Um ramo do tableau est fechado se este possui um par de frmulas


conjugadas do tipo TA e FA. Um ramo fechado no necessita mais ser
expandido, mesmo que no esteja ainda saturado. Um tableau est fechado
se todos os seus ramos esto fechados.

Definio 2.4.1 Um seqente B1 , . . . , Bn `T A A1 , . . . , Am foi deduzido pelo


mtodo dos tableaux analticos se existir um tableau fechado para ele.
No caso da deduo de um teorema `TA A pelo mtodo dos tableaux
analticos, devemos construir um tableau fechado para FA.
Vamos ver a seguir alguns exemplos de deduo e de deciso pelo mtodo
dos tableaux analticos.

2.4.3 Exemplos
Como primeiro exemplo, vamos provar o teorema ` p p:
1. Fp p
2. Fp , 1
3. Fp , 1
4. Tp , 3
2, 4
Nesse primeiro exemplo, no h bifurcaes. Iniciamos aplicando uma
expanso em uma frmula do formato (F), gerando as linhas 2 e 3.
Em seguida, expandimos a frmula (F) da linha 3, que, apesar de ser
nominalmente do tipo , no provoca bifurcao. As linhas 2 e 4 fecham o
ramo e, como esse tableau tem apenas um ramo, o tableau est fechado, e
o teorema foi demonstrado. Note que o nico ramo est saturado.
Como segundo exemplo, vamos provar que p q, q r ` p r:

Tp q
Tq r
Fp r
Tp
Fr

Fp Tq

Fq Tr

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #63
i i

2 Sistemas Dedutivos 53

Nesse exemplo, primeiro aplicou-se uma em Fp r; em geral, por


motivos de eficincia, aplicam-se todas as expanses antes de aplicar uma
. Em seguida, aplicou-se uma em Tp q, fechando o ramo esquerdo;
note que esse ramo foi fechado sem estar saturado. Em seguida, aplicou-se
uma em Tq , e os dois ramos foram imediatamente fechados.

No prximo exemplo, vamos mostrar um seqente no-dedutvel. Vamos


considerar p, p q r ` r:

Tp
Tp q r
Fr

Fp q Tr

Tp F q

Nesse tableau, o ramo mais direita e o ramo mais esquerda esto fecha-
dos. No entanto, o ramo central est saturado e aberto. Nesse ramo, temos
as seguintes frmulas atmicas marcadas: Tp, Fq, Fr. Esse ramo fornece a
valorao v tal que v(p) = 1, v(q) = v(r) = 0. Note que essa valorao
demonstra que p, p q r 2 r pois satisfaz p e p q r, e falsifica r. Ou
seja, o ramo saturado e aberto nos deu um contra-exemplo do seqente.

O fato de que h um ramo saturado aberto no tableau implica que p, p


q r 0TA r. No coincidncia que o tableau nos fornea uma valorao
que um contra-exemplo ao seqente que tentvamos provar, conforme
veremos na Seo 2.5, em que provaremos a correo e completude do
mtodo dos tableaux analticos em relao semntica de valoraes.

Um segundo exemplo que demonstra a gerao de contra-exemplos, a


partir de um ramo saturado aberto, o seqente no-dedutvel p q, p
r, q r s ` r, que gera o seguinte tableau:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #64
i i

54 Lgica para Computao

Tp q
Tp r
Tq r s
Fr

Tp Tq

Fp Tr Fq Tr s

Tr Ts

Tr Fp

Nesse tableau, o ramo mais direita est aberto e contm as frmulas


atmicas marcadas: Fr, Tq, Ts e Fp. Consideramos ento uma valorao
v tal que v(r) = v(p) = 0 e v(q) = v(s) = 1. Com isso, temos que
v(p q) = v(p r) = v(q r s) = 1, satisfazendo o antece-
dente do seqente, mas falsificando o conseqente. Do tableau aberto infe-
rimos p q, p r, q r s 0TA r e da valorao contra-exemplo inferimos
que p q, p r, q r s 2 r.
Por fim, vamos exemplificar o fato de que um seqente pode ter mais de
um tableau. Considere o seqente p q, p r, q r ` r. Um primeiro
tableau aplica as regras nas frmulas conforme sua ocorrncia de cima para
baixo, gerando o seguinte tableau:

Tp q
Tp r
Tq r
Fr

Tp Tq

Fp Tr Fp Tr

Fq Tr

Nesse tableau h quatro bifurcaes e cinco ramos, todos fechados. Se,


no entanto, aplicarmos as bifurcaes nas frmulas de baixo para cima,
teremos o seguinte tableau:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #65
i i

2 Sistemas Dedutivos 55

Tp q
Tp r
Tq r
Fr

Fq Tr

Fp Tr

Tp Tq

Nesse segundo tableau h apenas trs bifurcaes e quatro ramos. Isso


mostra que a ordem em que as bifurcaes so feitas pode afetar o tamanho
do tableau. Um mesmo seqente pode ter uma prova de tamanho linear ou
exponencial, dependendo da ordem em que as regras so aplicadas.
No entanto, importante notar que, se h um tableau fechado para um
seqente, qualquer outro tableau tambm ir fechar, independentemente da
ordem de aplicao de regras.

Exerccios

2.10 Provar ou refutar os seguintes seqentes pelo mtodo dos tableaux


analticos:

(a) q p ` p q
(b) p q ` p q
(c) p q ` p q r
(d) p q ` p q r
(e) (p q) ` p q
(f) (p q) ` p q
(g) p q, q ` p (modus tolens)

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #66
i i

56 Lgica para Computao

(h) p q, q ` p (modus erronens)


(i) p q, q ` p

2.11 Provar os axiomas do fragmento implicativo da lgica clssica:

I pp
B (p q) (r p) (r p)
C (p q r) (q p r)
W (p p q) (p q)
S (p q r) (p q) (p r)
K pqp
Peirce ((p q) p) p

2.12 Considerar o conectivo (bi-implicao ou equivalncia), com a se-


guinte Tabela da Verdade:

AB B=0 B=1
A=0 1 0
A=1 0 1

Dar regras de tableau para esse conectivo. Essas regras so do tipo


ou ?

2.13 Usando a regra definida no exerccio anterior, provar as seguintes


equivalncias notveis pelo mtodo dos tableaux analticos:

(a) p p (eliminao da dupla negao)


(b) p q p q (definio de em termos de e )
(c) (p q) p q (lei de De Morgan 1)
(d) (p q) p q (lei de De Morgan 2)
(e) p (q r) (p q) (p r) (distributividade de sobre )
(f) p (q r) (p q) (p r) (distributividade de sobre )

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #67
i i

2 Sistemas Dedutivos 57

2.5 Correo e Completude


Nesta seo, abordaremos as questes da lgica dentro de um enfoque mais
formal e provaremos a correo e completude do mtodo de tableaux anal-
ticos em relao semntica de valoraes vista no Captulo 1. Provaremos
tambm que esse mtodo decidvel, ou seja, ele sempre termina com uma
resposta.
Recorde que a implicao lgica de uma frmula A, a partir de um
conjunto de hipteses , denotada por |= A, que foi definida como
verdadeira quando, para toda valorao v, se v satisfaz todas as frmulas
B (v( ) = 1), v satisfaz A (v(A) = 1). Ou seja:

|= A sse v( ) = 1 implica v(A) = 1

Por outro lado, representamos por `TA A o fato de existir um tableau


analtico fechado com hipteses e concluso A.
Dessa forma, definimos que o mtodo dos tableaux analticos correto se
sempre que for possvel obter uma prova de `TA A ento ser verdade que
|= A. Ou seja, a correo pode ser expressa por:

`TA A = |= A.

Por outro lado, o mtodo de tableaux analticos correto se sempre que


uma implicao lgica for verdadeira, |= A, ento conseguiremos prov-la,
obtendo `TA A. Ou seja, a completude pode ser expressa por

`TA A = |= A.

Note que, no caso de completude, o fato de existir um tableau fechado para


`TA A no quer dizer, imediatamente, que haja um algoritmo que produza
sempre esse tableau. Similarmente, se uma conseqncia lgica falsa, isso
no implica automaticamente que haja um algoritmo que sempre consiga um
ramo aberto (e, portanto, uma contra-valorao ou um contra-exemplo) que
falsifique a conseqncia lgica. Definimos, ento, o mtodo dos tableaux
analticos como sendo decidvel se existir um algoritmo tal que:

Se |= A, ento o algoritmo sempre gera um tableau fechado para


`TA A.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #68
i i

58 Lgica para Computao

Se 2 A, ento o algoritmo gera um tableau com um ramo saturado


aberto.

A seguir, veremos como demonstrar essas propriedades.

2.5.1 Conjuntos Descendentemente Saturados


Um conjunto de frmulas marcadas dito descendentemente saturado se as
seguintes condies forem respeitadas:

(a) Nenhuma frmula marcada e seu conjugado esto simultaneamente


em .

(b) Se existe alguma frmula marcada em do tipo , ento 1 e


2 .

(c) Se existe alguma frmula marcada em do tipo , ento 1 ou


2 (ou ambos).

Os conjuntos descendentemente saturados so s vezes chamados de con-


juntos de Hintikka e so importantes para o estudo de tableaux devido ao
seguinte fato.
Lema 2.5.1 Todo ramo saturado e aberto de um tableau um conjunto
descendentemente saturado.
Demonstrao: Como o ramo aberto, nenhuma frmula e seu conjugado
podem estar presentes no ramo, satisfazendo a primeira condio.
Em razo da saturao, se h uma frmula do tipo no ramo, ento
tanto 1 como 2 esto no ramo, satisfazendo a segunda condio.
Tambm devido saturao, se h uma frmula do tipo no ramo,
ento ou 1 ou 2 esto no ramo, satisfazendo a terceira condio.
Nem todo conjunto descendentemente saturado um ramo. Por exemplo,
podemos ter um conjunto infinito de frmulas que descendentemente
saturado, mas, como veremos na prova de decidibilidade, no possvel ter
ramos infinitos em um tableau para a lgica proposicional clssica.
Por outro lado, esse resultado indica que a expanso de um ramo uma
tentativa de se construir um conjunto descendentemente saturado a partir
de um conjunto qualquer de frmulas. Note que isso apenas uma tenta-
tiva, pois pode ser impossvel a construo do conjunto descendentemente
saturado exatamente nos casos em que todos os ramos do tableau fecham, e

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #69
i i

2 Sistemas Dedutivos 59

a proibio de uma frmula e seu conjugado pertencerem ao conjunto no


pode ser respeitada.
O prximo passo estender a noo de valorao para frmulas marcadas.
Isso pode ser facilmente obtido da seguinte maneira:

v(TA) = 1 sse v(A) = 1


v(FA) = 1 sse v(A) = 0

Dessa forma, podemos dizer que uma valorao v satisfaz um conjunto


de frmulas marcadas se para toda frmula marcada , v() = 1.
Um conjunto de frmulas marcadas satisfazvel se existir um v tal que
v() = 1, ou seja, tal que v() = 1 para todo .
Provaremos agora dois lemas que nos fornecero o caminho para as provas
de correo e completude do mtodo dos tableaux analticos.

Lema 2.5.2 Seja um conjunto satisfazvel de frmulas marcadas. Ento:

(a) Se , ento {1 , 2 } satisfazvel tambm.


(b) Se , ento {1 } satisfazvel ou {2 } satisfazvel.

Demonstrao:

(a) Suponha que da forma TA B. Como satisfazvel,


existe v tal que v() = 1. Em particular, v() = 1 e, portanto,
v(A) = v(B) = 1; logo, v( {TA, TB}) = 1.
A prova totalmente anloga nos casos em que da forma FAB,
FA B e TA. Ver Exerccio 2.14.
(b) Suponha que da forma FAB. Como satisfazvel, existe
v tal que v() = 1. Em particular, v() = 1 e, portanto, v(A) = 0
ou v(B) = 0. Se v(A) = 0, temos que v({FA}) = 1 e, se v(B) = 0,
temos que v( {FB}) = 1.
A prova totalmente anloga nos casos em que da forma TAB,
TA B e FA. Ver Exerccio 2.15.
O segundo lema conhecido como lema de Hintikka.

Lema 2.5.3 Hintikka Todo conjunto descendentemente saturado satis-


fazvel.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #70
i i

60 Lgica para Computao

Demonstrao: Seja um conjunto descendentemente saturado; logo, para


um mesmo tomo p, no podemos ter Tp e Fp . Vamos
construir uma valorao v da seguinte maneira:
Se Tp , ento v(p) = 1.
Se Fp , ento v(p) = 0.
Se nem Tp nem Fp esto em , ento v(p) pode ser qualquer valor.
imediato que todo tomo marcado em satisfeito por v. Vamos
demonstrar por induo na complexidade da frmula que, para toda
frmula marcada , v() = 1. O caso bsico foi coberto pela
observao sobre tomos marcados. Resta analisar dois casos indutivos.
Se , ento 1 , 2 . Pela hiptese de induo, v(1 ) =
v(2 ) = 1. fcil verificar que para da forma TAB, FAB, FA B
ou TA, isso implica que v() = 1 (ver Exerccio 2.14).
Se , ento 1 ou 2 . Sem perda de generalidade, suponha
que 1 e ento, pela hiptese de induo, v(1 ) = 1. Para as
quatro possveis formas de , v(1 ) = 1 implica que v() = 1 (Ver
Exerccio 2.15). A prova totalmente anloga se 2 .
Dessa forma, provamos que todas as frmulas em so satisfeitas por
v, como desejado.
Note que o lema de Hintikka vale tanto para conjuntos finitos quanto para
conjuntos infinitos de frmulas marcadas.

2.5.2 Correo do Mtodo dos Tableaux Analticos


Estamos em condies de provar a correo do mtodo dos tableaux ana-
lticos.

Teorema 2.5.1 Correo O mtodo dos tableaux analticos correto com


relao semntica de valoraes. Ou seja, se `TA A, ento |= A.

Demonstrao: Vamos provar a contrapositiva do enunciado do teorema, ou


seja, vamos assumir que 2 A e provar que 0TA A.
De fato, suponha que 2 A. Ento, existe uma valorao v tal que
v( ) = 1 e v(A) = 0. Seja 0 o conjunto de frmulas marcadas
representando o tableau inicial para `TA A; claramente, v(0 ) = 1.
Vamos provar que, a cada passo da expanso do tableau, haver sempre
um ramo i tal que v(i ) = 1.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #71
i i

2 Sistemas Dedutivos 61

Suponha que v(i1 ) = 1. Se o ramo i1 for expandido por


uma frmula , ento, pelo Lema 2.5.2(a), a expanso ser satisfeita
por v. Se o ramo i1 for expandido por uma frmula , ento, pelo
Lema 2.5.2(b), ao menos um dos dois ramos resultantes ser satisfeito
por v. Em ambos os casos, temos um ramo i tal que v(i ) = 1.
Logo, sempre haver um ramo satisfeito que, aps todas as expanses,
ser um conjunto descendentemente saturado e no poder fechar.
Portanto, 0TA A.
Note que a prova do Teorema 2.5.1 mostra que, se 2 A, nenhum tableau
para essas hipteses poder fechar.

2.5.3 A Completude do Mtodo dos Tableaux Analticos


A completude do mtodo uma decorrncia direta do lema de Hintikka,
como podemos ver a seguir.

Teorema 2.5.2 completude O mtodo dos tableaux analticos completo


com relao semntica de valoraes. Ou seja, se |= A, ento
`TA A.

Demonstrao: Vamos tambm demonstrar usando a contrapositiva. Supo-


nha que 6`TA A, pois temos um ramo saturado e aberto. Sabemos
pelo Lema 2.5.1 que este ramo um conjunto descendentemente satu-
rado; logo, pelo lema de Hintikka, satisfazvel. Portanto, existe uma
valorao que satisfaz e falsifica A, ou seja, 2 A.
Note que esse teorema tambm implica que, se |= A, qualquer tableau
para esses dados deve fechar, caso contrrio teremos uma valorao que um
contra-exemplo para |= A.

2.5.4 Decidibilidade
Para provar que o mtodo dos tableaux decidvel, basta mostrar que um
desenvolvimento qualquer de um tableau para a lgica proposicional clssica,
independentemente da ordem em que as expanses so feitas, sempre gera
tableaux finitos.

N.A. Note que essa propriedade deixar de ser verdade quando abordarmos a lgica de primeira
ordem, na Parte 2 do livro.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #72
i i

62 Lgica para Computao

Teorema 2.5.3 O mtodo dos tableaux analticos um processo de deciso


para a lgica proposicional clssica.

Demonstrao: No processo de expanso de um tableau, notamos que:

1. Uma frmula nunca expandida mais de uma vez e


2. A expanso de uma frmula gera sempre frmulas de complexi-
dade menor
Dessa forma, medida que vai-se expandindo um tableau, qual-
quer que seja a ordem de expanso, as frmulas no expandidas se-
ro cada vez de complexidade menor, at que finalmente tenhamos
apenas tomos, que no podem ser expandidos, e todos os ramos do
tableau estejam saturados. Se todos os ramos estiverem fechados, ento
o seqente inicial uma conseqncia lgica. Caso contrrio, temos um
contra-exemplo do seqente inicial.
Os tableaux analticos so mtodos muito mais amenos manipulao
que as tediosas Tabelas da Verdade, se bem que ambos os mtodos so
procedimentos de deciso para a lgica clssica. No entanto, as Tabelas da
Verdade so mtodos determinsticos, enquanto os tableaux dependem
da ordem em que as frmulas so escolhidas para serem expandidas. Fica a
pergunta de carter computacional: ser que os tableaux so sempre melhores
que as Tabelas da Verdade na demonstrao de um teorema?
A resposta : nem sempre. Em geral, quando o tamanho da frmula no
muito maior que o nmero de tomos, a utilizao de tableaux pode gerar
dedues muito menores. No entanto, quando se trata de uma frmula
gorda, em que o tamanho da frmula exponencial em relao ao nmero
de tomos distintos, a situao pode se inverter. Veja o Exerccio 2.16.

Exerccios

2.14 Mostrar, examinando cada um dos casos, que v() = 1 se, e somente
se, v(1 ) = v(2 ) = 1.

2.15 Mostrar, examinando cada um dos casos, que v() = 1 se, e somente
se, v(1 ) = 1 ou v(2 ) = 1.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #73
i i

2 Sistemas Dedutivos 63

2.16 Considerar a seguinte famlia de tautologias:

H1 = p p
H2 = (p q) (p q) (p q) (p q)
H3 = (p q r) (p q r) (p q r) (p q r)
(p q r) (p q r) (p q r) (p q r)

(a) Dar a forma geral da tautologia Hn . Calcular a complexidade da


frmula Hn em funo de n, o nmero de tomos.
(b) Fazer um tableau para H1 , H2 , H3 , Hn e contar o nmero de ramos
utilizados em funo de n.
(c) Fazer uma tabela da verdade para H1 , H2 , H3 , Hn e contar o
nmero de clulas de sua tabela em funo de n.
(d) Qual dos dois mtodos mais eficiente na prova dos teoremas na
famlia Hn ?

2.6 Notas Bibliogrficas


David Hilbert foi um dos matemticos mais influentes do final do sculo XIX
e incio do sculo XX. Em seu trabalho sobre os fundamentos da geometria
de 1899 (Hilbert, 1899), ele props a primeira axiomatizao correta e com-
pleta da geometria euclidiana. Esse conjunto de axiomas ficou conhecido
como sistema de axiomas de Hilbert para geometria e, em geral, siste-
mas de axiomas ficaram conhecidos como sistemas de Hilbert. Em 1920,
Hilbert apresentou uma proposta que ficou conhecida como Programa
de Hilbert para a Matemtica, que defendia que toda a matemtica deveria
ser fundada em slidos e completos princpios da lgica (Hilbert, 1927). Ele
pretendia mostrar que toda a matemtica segue de um sistema de axiomas
e que esse sistema consistente (Gray, 2000). Essa proposta at hoje ainda
muito popular (Winskel, 1993), apesar de ter sido demonstrada impossvel
com os teoremas da incompletude de Gdel, em 1931 (Gdel, 1931).
Apesar de seu apelo formal, os sistemas de axiomatizaes, segundo
Hilbert, no espelham a forma como as pessoas em geral, e os matemticos
em especial, procedem suas dedues. No intuito de prover um sistema de
deduo que melhor espelhasse esse procedimento, Gerhard Gentzen criou o
sistema formal de deduo natural em um artigo de 1935. Tendo dificuldades

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #74
i i

64 Lgica para Computao

de provar a consistncia de tal sistema (que veio a ser demonstrada direta-


mente por Prawitz em 1965 (Prawitz, 1965)), no mesmo artigo props um
outro sistema, hoje conhecido como sistema de seqentes de Gentzen, cuja
consistncia pde provar pelo procedimento de eliminao do corte, que por
sua vez levou prova indireta da consistncia da deduo natural (Szabo,
1969). O Sistema de Seqentes de Gentzen com eliminao do corte est na
base do mtodo de provas dos tableaux analticos.
Gerhard Gentzen tinha relaes com instituies nazistas e chegou a ocu-
par uma posio em Praga, como parte do esforo de guerra nazista na
Segunda Guerra. Ele foi preso com todo o corpo acadmico alemo em Praga
quando houve a revolta contra a ocupao nazista, em maio de 1945. Com a
chegada do exrcito russo, foi internado em um campo de prisioneiros, onde
veio a falecer de subnutrio em agosto de 1945 (Vihan, 1995).
O mtodo dos tableaux analticos possui diversos pais. Por exemplo,
temos o trabalho de Beth (1962), o trabalho de Hintikka (1962) e o trabalho
de Smullyan. A nossa apresentao foi baseada no trabalho de Raymond
Smullyan (1968), o qual influenciou tambm muito do que foi feito poste-
riormente sobre o mtodo de provas por tableaux analticos. Com o advento
da deduo automtica por computador, diversas crticas e adies foram
feitas ao mtodo dos tableaux analticos, no que diz respeito sua eficincia.
Em particular, foi questionado se o mtodo dos tableaux analticos sempre
mais eficiente que Tabelas da Verdade (DAgostino, 1992).
Raymond Smullyan, alm de matemtico, tambm msico e mgico,
tendo atuado profissionalmente em todas essas reas. Alm disso, um
grande escritor de livros de quebra-cabeas sobre xadrez e sobre os funda-
mentos da matemtica, sendo o autor de Qual o nome deste livro? (What
is the name of this book?) e Satan, cantor, infinitude e outros quebra-cabeas
(Satan, Cantor, infinity and other mind-bogglin).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #75
i i

3 Aspectos Computacionais

3.1 Introduo
Neste captulo, apresentaremos diversos mtodos que visam implementa-
o eficiente de provadores de teoremas automticos em computador para a
lgica clssica proposicional.
Inicialmente, na Seo 3.2, vamos apresentar uma forma de implementar
um provador de teoremas pelo mtodo dos tableaux analticos. Apresen-
taremos tambm diversas famlias de teoremas de complexidade de prova
crescente, que podem ser usadas para testar a eficincia do provador imple-
mentado.
Os provadores de teoremas usados na prtica so baseados em tableaux
analticos. Isso se deve a uma caracterstica intrnseca de ineficincia desse
mtodo. Na segunda parte do captulo, exploraremos os mtodos mais
usados na prtica para prova de teoremas. Inicialmente nos concentraremos
na representao de frmulas usadas na prtica, e para isso descreveremos na
Seo 3.3 as formas normais conjuntiva (ou clausal) e disjuntiva. Os mtodos
mais difundidos na prtica so todos baseados na forma clausal. Em especial,
o importante mtodo de prova de teoremas por resoluo, apresentado na
Seo 3.4, capaz de detectar a inconsistncia de teorias no formato clausal.

N.A. O mtodo dos tableaux analticos baseado em um clculo lgico no qual a regra do corte
foi eliminada, o que causa essa ineficincia; infelizmente, uma discusso mais profunda sobre isso
est fora do escopo deste texto introdutrio.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #76
i i

66 Lgica para Computao

As implementaes mais eficientes de provadores de teoremas para lgica


proposicional clssica so baseadas em uma forma restrita de resoluo.
Esses provadores so conhecidos como resolvedores SAT e, em sua maioria,
implementam a restrio da resoluo conhecida como algoritmo DPLL.
Para obter o ganho de eficincia, diversos mtodos so acrescidos ao mtodo
DPLL. A Seo 3.5 discute o algoritmo DPLL e diversas formas de aumentar
sua eficincia.

3.2 Implementao de um Provador de Teoremas pelo


Mtodo dos Tableaux Analticos
Na Seo 2.4, foi apresentado o mtodo dos tableaux analticos como um
mtodo de inferncia lgica e tambm como um mtodo de deciso, capaz de
decidir sobre a validade de uma frmula ou a derivabilidade de um seqente.
Nesta seo, indicaremos formas de implementar esse mtodo, o que im-
plica analisarmos dois pontos cruciais para a transformao da apresentao
abstrata do mtodo dos tableaux em uma realidade implementada. Esses dois
pontos so as estratgias computacionais e as estruturas de dados.
Alm disso, apresentaremos famlias de frmulas notveis de crescente
complexidade que servem de teste para uma eventual implementao de um
provador de teoremas.

3.2.1 Estratgias Computacionais


O algoritmo 3.1 apresenta, de forma genrica, um provador de teoremas
pelo mtodo dos tableaux analticos. Uma das propriedades fundamentais
do algoritmo 3.1 que se trata de um algoritmo no-determinstico.

Algoritmo 3.1 Prova de Teoremas por Tableaux Analticos


Entrada: Um seqente A1 , . . . , An ` B1 , . . . Bn .
Sada: verdadeiro, se A1 , . . . , An |= B1 , . . . Bn , ou um contra-exemplo,
caso contrrio.
1 : Criar um ramo inicial contendo TA1 , . . . , TAn , FB1 , . . . FBn .
2 : enquanto existir um ramo aberto faa
3: Escolher um ramo aberto .
4: se o ramo est saturado ento
5: Encontrar todos os tomos marcados de .
6: retorne a valorao correspondente a estes tomos marcados.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #77
i i

3 Aspectos Computacionais 67

7: fim se
8: Escolher R, uma das regras aplicveis em .
9: Expandir o tableau, aplicando R sobre .
10 : Verificar se ou seus sub-ramos fecharam.
11 : fim enquanto
12 : retorne verdadeiro

Em um algoritmo determinstico, ao final de cada passo de execuo a


prxima instruo a ser executada est totalmente definida. Por outro lado,
um algoritmo no-determinstico caracterizado pela realizao de escolhas
em determinados pontos do algoritmo. No caso do algoritmo 3.1, essas
escolhas esto explicitadas nas linhas 3 e 8. A linha 3 contm uma escolha
sobre qual ramo proceder a expanso do tableau. A linha 8 contm uma
escolha sobre qual regra aplicar a um determinado ramo aberto.
Os computadores que temos a nosso dispor so mquinas determins-
ticas. Para que um algoritmo no-determinstico, possa ser implementado
em um computador determinstico preciso incorporar ao algoritmo uma
estratgia computacional ou estratgia de seleo. Tal estratgia tem a funo
de implementar uma poltica determinstica de escolha em cada passo no-
determinstico do programa.
importante notar que a escolha da estratgia pode ter conseqncias
muito drsticas sobre a eficincia do provador de teoremas. Com a estratgia
errada, um seqente que possui um tableau linear poderia gerar, devido
seleo de regras que causam bifurcaes, uma rvore larga, que s gera um
tableau fechado depois de um tempo exponencial em relao ao tamanho das
frmulas contidas no seqente inicial.
Vamos analisar a seguir as estratgias necessrias para o algoritmo 3.1.

Estratgias de Escolha de Ramos

A classe de estratgias utilizada na escolha do ramo do tableau a ser expan-


dido conhecida na literatura como estratgia de busca em rvore. O objetivo
da busca encontrar um ramo que seja aberto e saturado. Nesse caso, a busca
se acaba. No caso em que essa busca falha, temos um tableau fechado.
Inicialmente, o tableau possui apenas um ramo. medida que regras
do tipo vo sendo aplicadas, diversos ramos podem surgir, forando o
algoritmo a fazer uma escolha sobre qual ramo expandir.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #78
i i

68 Lgica para Computao

Dentre as vrias estratgias de busca em rvore conhecidas na literatura,


destacamos as seguintes:

Busca em Profundidade. Esse tipo de busca tende a expandir um ramo


at a saturao. No caso de tableaux, isso significa expandir um
ramo at que ele esteja fechado ou saturado. Ao se aplicar uma regra-,
a busca procede no ramo contendo 1 . Caso o ramo seja fechado, a
escolha retrocede para o ramo contendo 2 da bifurcao mais recente.
O fato de o ramo contendo 1 ser escolhido primeiro para continuao
da expanso arbitrrio, e poderamos ter uma estratgia mais refinada
que analisaria qual dos dois ramos deveria ser expandido primeiro,
retornando ao outro, caso o escolhido venha a fechar.
Busca em Largura. Esse tipo de busca tende a aplicar em seqncia
expanso em cada ramo aberto, fazendo com que todos os ramos
abertos tenham o mesmo cumprimento (em termos de nmero de
regras aplicadas a ele).

Por razes de eficincia e espao, a busca em profundidade a preferida


na expanso de tableau. Esse mtodo mais eficiente pois, se o ramo for
saturar sem fechar, atingiremos esse ponto antes do mtodo em largura.
Em termos de espao, esse mtodo tambm mais econmico, pois a cada
instante necessitamos armazenar apenas o ramo atual, mantendo somente
uma pilha de pontos de retrocesso. Quando um ramo se fecha, o trecho final
entre o fechamento e a ltima bifurcao pode ser descartado ao se reiniciar
a expanso do ramo contendo 2 .
Mais adiante, detalharemos as estruturas de dados necessrias para que
esse mecanismo de busca em profundidade possa ser implementado.
Estratgias de Seleo de Regras
Uma vez que temos um ramo aberto selecionado, precisamos escolher, dentre
as possveis regras que podem expandir aquele ramo, qual ser aplicada.
Diversas estratgias podem ser adotadas, e uma composio de estratgias
muitas vezes usada.
A primeira estratgia que apresentaremos, e que chamaremos de -pri-
meiro, universalmente adotada. Trata-se da estratgia de aplicar inicial-
mente, em um determinado ramo, todas as expanses- possveis. Dessa
forma, uma expanso- somente ser aplicada quando no houver mais
nenhuma expanso- aplicvel.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #79
i i

3 Aspectos Computacionais 69

A estratgia -primeiro baseia-se no fato de que as expanses- no criam


novos ramos e podem levar um ramo ao fechamento, antes de qualquer
bifurcao e, portanto, devem ser realizadas anteriormente.
No h qualquer imposio de ordem nas -expanses, pois se h vrias
candidatas -expanso, uma expanso no afetar o status de candidatas
das frmulas j existentes. Assim sendo, em qualquer ordem em que forem
feitas as -expanses, obteremos o mesmo conjunto de formas marcadas em
um ramo. Para melhorar a eficincia, pode-se considerar que a transformao
resultante da aplicao de todas as expanses apenas uma expanso e
verificar o fechamento do ramo apenas aps a saturao das expanses .
Uma segunda estratgia, quase universal, descartar a frmula ou
aps sua expanso. Isso equivale a substituir uma frmula por sua expanso,
e como essa substituio uma equivalncia lgica vlida, essa simplificao
pode ser feita. A forma como essa simplificao feita depende das estruturas
de dados escolhidas, o que discutiremos mais adiante.
A ordem em que as -expanses so feitas pode ter um grande efeito sobre
o tamanho do tableau e, portanto, sobre a eficincia do provador de teoremas.
Apresentamos a seguir algumas das estratgias possveis, que ordenam as
frmulas presentes em um ramo do tableau de acordo com a configurao
do ramo.

Ordem Direta. Consiste em selecionar a primeira frmula que ocorre


no ramo para expanso. Essa estratgia no envolve nenhuma inteli-
gncia e depende da ordem em que as frmulas so apresentadas no
tableau.
Ordem Reversa. Consiste em selecionar a ltima frmula que ocorre
no ramo para expanso. Possui as mesmas desvantagens que o caso
anterior.
Menor Tamanho. Consiste em selecionar a menor das frmulas . A
idia que, quanto menor a frmula, mais fcil fechar o ramo.
Contm Subfrmula. Consiste em dar preferncia para uma frmula
se houver subfrmulas suas presentes no ramo. A idia tambm a
de facilitar o fechamento do ramo. Essa estratgia pode ser refinada,
verificando-se a polaridade das subfrmulas. Nesse caso, contabilizam-
se apenas as subfrmulas que ocorrem no ramo com a polaridade
oposta sua ocorrncia na frmula .

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #80
i i

70 Lgica para Computao

Combinaes. Podemos ter uma estratgia que combina as anteriores.


Inicialmente, encontramos as frmulas que contm subfrmulas de
polaridade oposta no ramo. Se houver empate, selecionamos a
de menor tamanho. Se ainda houver empate, selecionamos a ordem
direta ou inversa (a que for mais rapidamente computvel).

3.2.2 Estruturas de Dados

Vamos descrever aqui as estruturas de dados para uma implementao poss-


vel do provador de teoremas. Diversas melhorias e alteraes so possveis
nessas estruturas de dados para gerar provadores mais sofisticados e efi-
cientes.
Estamos assumindo que o tableau ser implementado segundo a estra-
tgia de busca em profundidade, em que apenas um ramo do tableau
armazenado. O ramo do tableau armazenado em um vetor de frmulas
marcadas, ramo. O tamanho do vetor igual soma dos tamanhos das
frmulas contidas no seqente de entrada. Dessa forma, toda a expanso do
ramo pode ser contida no vetor.
Por exemplo, suponha que queiramos demonstrar o seqente p q, q
r ` p r. O tamanho mximo do vetor ser de |p q| + |q r| + |p
r| = 3 + 3 + 3 = 9, ilustrado a seguir.

ramo:
Tp q Tq r F p r
1 2 3 4 5 6 7 8 9

Alm disso, importante registrar o tamanho atual do ramo em uma


varivel TamAtual, que no exemplo dada por TamAtual = 3.
Uma segunda estrutura de dados trata da marcao de todas as frmulas
ainda por expandir no ramo atual. Representamos essa estrutura como
um vetor de variveis booleanas do mesmo comprimento que o vetor que
armazena o ramo. No exemplo anterior, inicialmente teramos o vetor betas
da seguinte maneira:

betas:
X X
1 2 3 4 5 6 7 8 9

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #81
i i

3 Aspectos Computacionais 71

O primeiro passo de cada iterao do algoritmo 3.1, segundo a estratgia


adotada, a aplicao de todas as expanses-. No exemplo, isso se aplica
apenas sobre a posio 3:

ramo:
Tp q Tq r F p r Tp Fr
1 2 3 4 5 6 7 8 9

com a respectiva alterao de TamAtual = 5.

Com a saturao de todas as expanses-, verificamos se o ramo no est


fechado. Como essa verificao falha, passamos ento a uma nova iterao do
algoritmo 3.1, procedendo seleo da frmula sobre a qual bifurcar. Su-
ponha por simplicidade que, nesse exemplo, estamos realizando a bifurcao
usando a estratgia ascendente, que seleciona a ltima frmula marcada no
vetor betas, ou seja, seleciona a posio 2. Nesse caso, temos que 1 = Fq e
2 = Tr. Isso acarreta a alterao do vetor betas para:

betas:
X
1 2 3 4 5 6 7 8 9

O ramo ser expandido com a frmula 1 = Fq. Porm, antes disso preci-
samos armazenar o ponto em que o ramo estava antes da bifurcao, de onde
reiniciaremos a expanso, caso o ramo atual seja fechado. Para isso, utiliza-
mos uma pilha de entradas, chamada de PilhaDeRamos. A entrada dessa pi-
lha uma tripla composta dos seguintes elementos: h2 , TamAtual, betasi.
Esses dados sero desempilhados da PilhaDeRamos, caso o ramo atual

N.A. Alternativamente, poderamos efetivamente apagar a frmula expandida, resultando em


um vetor em que TamAtual = 4:

ramo:

Tp q Tq r Tp Fr

1 2 3 4 5 6 7 8 9

No restante desse exemplo, no consideraremos mais o apagamento de frmulas- expandidas.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #82
i i

72 Lgica para Computao

fechar. Dessa forma, a PilhaDeRamos do exemplo que estamos seguindo,


que sempre se inicia vazia, passa a ter o seguinte contedo:

PilhaDeRamos
D E
Tr, 5, X

Nesse ponto, continuamos a expanso do ramo, cuja configurao atual


aps a insero de 1 = Fq fica
ramo:
Tp q Tq r F p r Tp Fr Fq
1 2 3 4 5 6 7 8 9

e TamAtual = 6. Procede-se verificao do fechamento do ramo, que falha.


Na iterao seguinte, no h nenhuma expanso- possvel. A seleo da
expanso- imediata, pois s h um candidato no vetor betas: = Tp
q. Nesse caso, 1 = Fp e 2 = Tq. O vetor betas alterado e torna-se
totalmente vazio:
betas:

1 2 3 4 5 6 7 8 9
Antes de expandir o ramo, necessrio empilhar uma nova entrada na
PilhaDeRamos, cuja configurao se torna:

PilhaDeRamos
D E
Tq, 6,
D E
Tr, 5, X

O ramo expandido assume a configurao


ramo:
Tp q Tq r F p r Tp Fr Fq Fp
1 2 3 4 5 6 7 8 9

e TamAtual = 7. Nesse caso, a verificao de fechamento do ramo sucede,


devido presena de Tp e do recm-inserido Fp. O fato de que apenas os ns

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #83
i i

3 Aspectos Computacionais 73

recm-inseridos podem causar o fechamento de um ramo pode ser usado


para aumentar a eficincia da verificao de fechamento.
Com o fechamento do ramo, antes de proceder prxima iterao, de-
vemos desempilhar o topo da PilhaDeRamos e reconstituir o ramo. Ao
desempilharmos o topo da pilha, obtemos um valor de 2, de TamAtual e
do vetor betas. Todas as posies do vetor atual alm do valor TamAtual
so apagadas, e o valor de 2 inserido no final do ramo. Alm disso, o
vetor betas substitudo pelo que estava na pilha. Ao processarmos essas
alteraes, as estruturas de dados de nosso exemplo se tornam:

PilhaDeRamos
D E
Tr, 5, X

betas:

1 2 3 4 5 6 7 8 9
ramo:
Tp q Tq r F p r Tp Fr Fq Tq
1 2 3 4 5 6 7 8 9

e TamAtual = 7. Uma nova verificao de fechamento sucede, ento desem-


pilhamos a prxima posio da PilhaDeRamos. Ao reconstruirmos o ramo,
obtemos as seguintes estruturas de dados:

PilhaDeRamos

betas:
X
1 2 3 4 5 6 7 8 9
ramo:
Tp q Tq r Fp r Tp Fr Tr
1 2 3 4 5 6 7 8 9

e TamAtual = 6. Esse ramo tambm est fechado, e como a PilhaDeRamos


est vazia, no h como reconstruir o ramo. Isso indica que todos os ramos
possveis do tableau foram fechados e o tableau foi fechado. Nesse ponto, o

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #84
i i

74 Lgica para Computao

algoritmo deve retornar verdadeiro, indicando que o seqente de entrada


foi provado.
Uma palavra final sobre a implementao necessria, para explicar a
representao de frmulas. Uma frmula pode ser representada como uma
rvore. Por exemplo, a frmula p (q r) pode ser representada por:

p q r

Uma frmula marcada um par hMarca, rvore-frmulai, em que a marca


pode ser desde um nico bit (0 = F e 1 = T) at um caractere ou um inteiro.
Essa notao facilita a aplicao de regras de expanso, pois o conectivo
principal da frmula est na raiz e as subfrmulas em que uma frmula se
decompe so os ramos filhos da raiz.

3.2.3 Famlias de Frmulas Notveis


Apresentaremos algumas famlias de frmulas notveis que servem de ben-
chmark (ou seja, de banco de testes) para uma eventual implementao de
um provador de teoremas. Essas famlias de frmulas tm a caracterstica
de serem todas teoremas, parametrizados, em geral por algum inteiro n, e
medida que n cresce, aumenta o tamanho da prova do teorema.
Para cada frmula dessas famlias, podem-se medir os seguintes par-
metros:
O tempo que levou para o seqente ser demonstrado. Esse parmetro
dependente da mquina e da qualidade do compilador utilizado para
gerar o programa; mesmo assim, um parmetro bastante usado.
Nmero de ns gerados no tableau fechado. Esse um parmetro
independente da mquina e do compilador utilizado; no entanto,
essa medida no leva em considerao, por exemplo, a eficincia na
deteco de um ramo fechado.
Nmero de ramos no tableau fechado. Essa a medida mais abstrata,
ignorando quantos ns existem em cada ramo do tableau e se con-
centrando apenas na caracterstica geradora da exponencialidade da
implementao, que o nmero de ramos.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #85
i i

3 Aspectos Computacionais 75

Uma boa implementao capaz de medir todos esses parmetros.

A Famlia n

A primeira famlia de que iremos tratar a famlia n , dada por:

n = {ai (ai+1 bi+1 ), bi (ai+1 bi+1 )|1 6 i 6 n}

E o seqente n dado por: a1 b1 , n ` an+1 bn+1 .


Por exemplo, o seqente 1 dado por:

a1 b1 ,
a1 (a2 b2 ), ` a2 b2 ,
b1 (a2 b2 ).

O seqente 2 dado por:

a1 b1 ,
a1 (a2 b2 ),
b1 (a2 b2 ), ` a3 b3 ,
a2 (a3 b3 ),
b2 (a3 b3 ).

e assim por diante. A cada incremento em n, aumentam-se duas novas


clusulas no antecedente, e o conseqente an+1 bn+1 .
Essa famlia de frmulas tem a seguinte propriedade. Dependendo da
estratgia de seleo, a prova do seqente n pode ser bem curta, de tamanho
linear em n. No entanto, uma escolha errada da estratgia pode levar provas
do seqente n a ter tamanho exponencial em n, um fato muito indesejvel.

Frmulas de Statman

As frmulas de Statman apresentam uma caracterstica peculiar: no tm


provas eficientes pelo mtodo dos tableaux analticos, mas possuem provas
curtas em outros mtodos, como o da deduo natural.
Considere variveis proposicionais pi e qi , com i > 1. Para todo i > 1,
definimos indutivamente:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #86
i i

76 Lgica para Computao

A1 = p1
B1 = q1
Ai+1 = (p1 q1 ) (p2 q2 ) . . . (pi qi ) pi+1
Bi+1 = (p1 q1 ) (p2 q2 ) . . . (pi qi ) qi+1

E um seqente Statman de ordem n o seqente:

A1 B1, A2 B2 , . . . , An Bn ` pn qn

interessante verificar que, se alterarmos as regras para as seguintes


regras 0 :

FA B TA B TA B

FA FB TA TB FA TB
TA FA TA

podemos obter provas eficientes para os seqentes da famlia de Statman.


O Princpio do Escaninho
O princpio do escaninho (em ingls, pigeonhole principle, ou princpio do
buraco de pombo) diz que, se tivermos n + 1 cartas para inserir em n
escaninhos, algum escaninho receber mais de uma carta. curioso notar
que um princpio to simples assim pode levar a provas de complexidade to
elevada.
As frmulas atmicas de um problema de ordem n (PHPn ) so da forma
pij , indicando que a carta i depositada no escaninho j, onde 1 6 i 6 n + 1
e 1 6 j 6 n.
Um seqente PHPn tem o formato n ` n , onde
^1 _
n+ n
n = pij
i=1 j=1

representando o fato de que cada carta inserida em um escaninho (buraco),


e a frmula n da forma
_ _1 _
n n+ n
n = pij pkj
i=1 k=i+1 j=1

representando o fato de que algum escaninho recebe mais de uma carta.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #87
i i

3 Aspectos Computacionais 77

Sabe-se que existe uma forma intrincada pelo mtodo da axiomatizao


que capaz de gerar provas de tamanho polinomial em n para o PHPn . No
entanto, nenhum dos mtodos automticos mais conhecidos na literatura
capaz de gerar provas do PHPn que no sejam exponenciais em n, inclusive
o mtodo dos tableaux analticos.
Observao: Se o leitor conseguir algum mtodo de prova genrico e
computacional capaz de resolver o PHPn em tempo polinomial, por favor
entre em contato com os autores deste livro.

Exerccios

3.1 Considerar um conjunto de estratgias de seleo de regras e busca


por profundidade. Reescrever um algoritmo determinstico que seja
equivalente ao algoritmo 3.1.

3.2 Alterar o algoritmo do exerccio anterior, incorporando-lhe a remoo


do ramo de frmulas ou que j foram expandidas.

3.3 Implementar um provador de teoremas pelo mtodo dos tableaux


analticos em sua linguagem de programao preferida.
Incentiva-se o uso de alguma linguagem orientada a objetos, como
C++, Java ou Python. Nesse caso, recomenda-se usar bibliotecas pree-
xistentes na manipulao de listas, pilhas ou rvores.
Quem decidir realizar a implementao em Prolog dever usar em
seu favor a estrutura de backtracking (retrocesso) da linguagem. Isso
capaz de gerar um provador bem enxuto e elegante.

3.4 Mostrar que as regras 0 so corretas, ou seja, se elas forem usadas,


apenas os seqentes vlidos geram tableaux fechados.
Encontrar uma estratgia para tableaux que gera provas curtas (po-
linomiais, no-exponenciais) para as frmulas da famlia de Statman
para os tableaux analticos, usando as regras 0 em vez das regras .

3.3 Formas Normais


Diversos algoritmos de manipulao de frmulas da lgica proposicional
assumem que as frmulas so apresentadas em um formato predefinido,

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #88
i i

78 Lgica para Computao

chamado de forma normal. So duas as principais formas normais: a forma


normal conjuntiva (FNC) e a forma normal disjuntiva (FND).

3.3.1 A Forma Normal Conjuntiva ou Forma Clausal


A forma normal conjuntiva (FNC) tambm chamada de forma clausal. Ela
empregada no mtodo de inferncia chamado de resoluo, que serve de base
programao lgica e linguagem de programao Prolog (ver Seo 3.4).
A FNC tambm usada como formato de entrada da maioria dos algoritmos
de verificao de satisfazibilidade, como os descritos na Seo 3.5.
O elemento bsico na formao da FNC o literal. Um literal uma
frmula atmica p ou a negao de uma frmula atmica p. No caso de
o literal ser da forma p, ele chamado de positivo, e o literal da forma p
chamado de negativo.
Uma clusula a disjuno de literais

L1 L2 . . . Ln ,

onde n o tamanho da clusula. Se n = 1, a clusula dita unitria. Se


n = 0, a clusula dita vazia, e nesse caso convenciona-se que a clusula
vazia idntica constante falsa, .
Note que uma clusula da forma

q1 . . . qk p1 . . . pl ,

onde qi , pj so tomos, pode ser equivalentemente reescrita na forma impli-


cativa
(q1 . . . qk ) (p1 . . . pl ).

Uma frmula A est na forma mormal conjuntiva ou forma clausal se for


uma conjuno de clusulas,
m
^
A= L1 . . . Lnk
k=1

Por conveno, no caso de a frmula A ser a conjuno de zero clusulas,


ento A = >, a constante verdadeira.
Qualquer frmula da lgica proposicional clssica pode ser reduzida a uma
outra frmula equivalente que est na FNC, conforme mostra o resultado
a seguir.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #89
i i

3 Aspectos Computacionais 79

Teorema 3.3.1 Para toda frmula da lgica proposicional clssica B, existe


uma frmula A na FNC que equivalente a B, A B.

Demonstrao: A prova obtida fornecendo-se o algoritmo 3.2 de converso


de uma frmula B em uma frmula equivalente na FNC. Note que todas
as transformaes do algoritmo so, na realidade, equivalncias notveis
listadas na Definio 1.5.1 e, portanto, a frmula A obtida ao final de
todas as substituies equivalente frmula B.
No algoritmo 3.2, a linha 2 nos garante que A no possui o smbolo
. As linhas 3 e 4 nos garantem que, em A, a negao s pode estar
aplicada aos tomos. Uma frmula nesse formato dita na forma
normal da negao (FNN).
Por fim, a distributividade na linha 5 nos assegura que A possui
apenas conjunes de clusulas e, portanto, A est na FNC.

Algoritmo 3.2 Transformao na FNC Sem Novos tomos


Entrada: Uma frmula B.
Sada: Uma frmula A na FNC, B A.
1 : para todas as subfrmulas X, Y , Z de B faa
2: Redefinir em termos de e :

(X Y) 7 (X Y)

3: Empurrar as negaes para o interior por meio das leis de De Morgan:

(X Y) 7 X Y
(X Y) 7 X Y

4: Eliminao da dupla negao:

X 7 X

5: Distributividade de sobre :

X (Y Z) 7 (X Y) (X Z)

6: fim para
7: A frmula A obtida quando no h mais substituies possveis.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #90
i i

80 Lgica para Computao

O algoritmo 3.2, apesar de sempre gerar uma frmula na FNC, pode


gerar frmulas exponencialmente maiores que a frmula de entrada. As
substituies dos passos 2, 3 e 4 no causam aumento no tamanho
da frmula. Porm, o passo 5, o da distributividade, causa a duplicao da
subfrmula X, que por sua vez poder ser do formato (X1 X2 ), que poder
gerar nova duplicao. Essa duplicao, se repetida diversas vezes, pode gerar
uma exploso exponencial no tamanho da frmula.
Infelizmente, sem aumentar o nmero de tomos em uma frmula, a
converso de B para a FNC sempre poder gerar uma frmula A equivalente
a B exponencialmente maior que a frmula original B. No entanto, se
permitirmos a insero de novos smbolos proposicionais, podemos gerar
uma frmula A equivalente a B cujo tamanho ser apenas uma funo linear
do tamanho inicial da frmula B. Essa nova converso para a FNC feita pelo
algoritmo 3.3.

Algoritmo 3.3 Transformao Linear para FNC com Adio de Novos tomos
Entrada: Uma frmula B.
Sada: Uma frmula A na FNC, B A.
1 : para todas as subfrmulas X, Y , Z de B faa
2: Redefinir em termos de e :
(X Y) 7 (X Y)

3: Empurrar as negaes para o interior por meio das leis de De Morgan:

(X Y) 7 X Y
(X Y) 7 X Y

4: Eliminao da dupla negao:


X 7 X

5: Insero de novo tomo p:


X (Y Z) 7 (X p) (p X) (p Z) (Y Z p)

6: fim para
7: A frmula A obtida quando no h mais substituies possveis.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #91
i i

3 Aspectos Computacionais 81

Note que a nica diferena entre o algoritmo 3.3 e o algoritmo 3.2 est
na linha 5. Na segunda verso, introduzimos um novo smbolo atmico p,
ou seja, um smbolo atmico p que no ocorre na frmula, de forma que
p (Y Z). A frmula p (Y Z), segundo o exemplo a seguir, quando
posta na forma clausal, gera (p Y) (p Z) (Y Z p). Se essa
substituio for feita apenas quando X, Y e Z j estiverem no formato clausal,
ela no gerar duplicao de frmulas, mas somente apenas um aumento
linear no tamanho da frmula.
Como exemplo, iremos decompor a frmula p (Y Z) no formato
clausal. Inicialmente, desmembramos o conectivo em dois, gerando a
frmula
(p (Y Z)) (Y Z p).

O prximo passo a eliminao do conectivo , obtendo

(p (Y Z)) ((Y Z) p).

Em seguida, por meio das leis de De Morgan, empurramos a negao


adentro, obtendo

(p (Y Z)) (Y Z p).

O segundo elemento j est no formato clausal, e podemos nos concentrar


agora no primeiro elemento. Nesse caso, no h dupla negao e aplicaremos
a distribuio de sobre , obtendo a frmula final contendo trs clusulas

(p Y) (p Z) (Y Z p).

Note que as duas primeiras clusulas correspondem a p Y e p Z,


enquanto a terceira clusula corresponde a Y Z p.
Para satisfazer uma frmula no formato clausal, basta satisfazer um literal
em cada uma de suas clusulas. Por outro lado, para falsificar uma frmula no
formato clausal, basta falsificar todos os literais de uma nica clusula. Esses
fatos tornam o formato clausal bastante til para a representao e soluo
de problemas envolvendo frmulas proposicionais. freqente considerar
uma frmula como um conjunto de clusulas, e no uma conjuno delas.
Para satisfazer o conjunto C de clusulas, necessrio satisfazer cada clusula
c C.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #92
i i

82 Lgica para Computao

Existem fragmentos importantes das frmulas em formato clausal que


iremos mencionar a seguir: as clusulas de Horn e as k-clusulas.
Clusulas de Horn
Clusulas de Horn so clusulas contendo, no mximo, um literal positivo.
Por exemplo, a frmula que obtivemos pela decomposio de p (Y Z)
no formato clausal, assumindo que Y e Z sejam frmulas atmicas, gerou um
conjunto de trs clusulas, p Y p Z e Y Z p, todas elas clusulas
de Horn com exatamente um literal positivo cada.
Em geral, as clusulas de Horn podem ser de trs tipos:

Fatos: so clusulas unitrias, em que o nico literal positivo. So


usadas para realizar afirmaes sobre a veracidade de algum tomo.

Regras: so clusulas da forma

p1 . . . pn q

ou, equivalentemente,

p1 . . . pn q.

Nesse caso, q chamado de cabea da regra e p1 . . . pn chamado


de corpo da regra.
Fatos e regras so os componentes principais das bases de conheci-
mento, uma generalizao dos bancos de dados relacionais.

Consultas ou Restries: so clusulas de Horn sem nenhum tomo


positivo, ou seja, do formato

p1 . . . pn ou, equivalentemente, (p1 . . . pn ).

No caso de bases de conhecimento, as consultas base possuem esse


formato, pois so computadas por refutao. Em bases de conheci-
mento com restries de integridade, clusulas sem tomos positivos
indicam uma conjuno de fatores indesejvel, que pode levar o sis-
tema como um todo a um estado inconsistente.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #93
i i

3 Aspectos Computacionais 83

As clusulas de Horn possuem as seguintes propriedades, que fazem com


que a sua manipulao seja muito mais simples do que a manipulao de
clusulas genricas.

Lema 3.3.1 Seja C um conjunto de clusulas de Horn sem nenhum fato (ou
seja, sem nenhuma clusula unitria positiva). Ento, C satisfazvel.

Demonstrao: Basta fazer todos os tomos de C falsos. Como cada clusula


de C possui pelo menos um literal negativo, esse literal estar satisfeito,
e assim todas as clusulas esto satisfeitas.

Lema 3.3.2 Seja C um conjunto de clusulas de Horn contendo um fato p.


Seja C 0 o conjunto de clusulas obtidas a partir de C removendo-se p
do corpo de todas as clusulas. Ento, C C 0 .

Demonstrao: fcil notar que C |= c para todo c C 0 . Se c C,


a demonstrao trivial. Por outro lado, se c = L1 . . . Ln e
A = L1 . . . Ln p C, imediato que A, p |= c. Logo, C |= C 0 .
Para provar que C 0 |= C, seja v uma valorao tal que v(C) = 0.
Ento, h uma clusula c C tal que v(c) = 0. Se c C 0 , imediato
que v(C 0 ) = 0. Caso contrrio, c p C 0 ; nesse caso, se v(p) = 1,
ento v(c p) = v(C 0 ) = 0, e se v(p) = 0, temos a clusula unitria
p C C 0 falsificada por v. Em ambos os casos, temos que v(C 0 ) = 0.
Ento, toda valorao que falsifica C tambm falsifica C 0 , o que equivale
a dizer que C 0 |= C.
A partir dessas propriedades, obtemos uma forma eficiente de decidir a
satisfazibilidade/insatisfazibilidade de um conjunto de clusulas de Horn,
apresentado no algoritmo 3.4.

Algoritmo 3.4 HornSAT(C)


Entrada: Um conjunto C de clusulas.
Sada: verdadeiro se C satisfazvel, ou falso caso contrrio.
se C ento
retorne falso
fim se
se C no contm fatos ento
retorne verdadeiro
fim se

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #94
i i

84 Lgica para Computao

Seja p C um fato.
Seja C 0 obtida de C removendo p de suas clusulas.
/* Note que se houver uma clusula p C, ela se transformar na
clusula vazia C 0 . */
retorne HornSAT (C 0 )

Se N o nmero de tomos em C, o algoritmo HornSAT ser chamado


recursivamente, no mximo, N vezes, e portanto o mtodo decide a satis-
fazibilidade de um conjunto de clusulas de Horn em tempo linear como
nmero de tomos. Isso uma sensvel melhora no algoritmo de tabelas da
verdade, que pode precisar de 2N passos.
k-Clusulas
Um conjunto de clusulas no qual todas as clusulas possuem, no mximo, k
literais chamado de um conjunto de k-clusulas.
Conjuntos de 1-clusulas so triviais de se lidar. Conjuntos de 2-clusulas
so conjuntos cuja satisfazibilidade pode ser decidida eficientemente, e nesse
caso, o problema chamado de 2SAT. O algoritmo 3.5 apresenta uma soluo
do problema 2SAT. Esse algoritmo tem a seguinte propriedade: uma vez
escolhida uma valorao de um tomo que no falsifica nenhuma clusula
aps a propagao (simplificao) de seus efeitos, no h mais necessidade
de se alterar a valorao desse tomo.

Algoritmo 3.5 2SAT(C)


Entrada: Um conjunto C de 2-clusulas
Sada: verdadeiro se C satisfazvel, ou falso, caso contrrio.
C := Simplifica(C)
enquanto 6 C e C 6= faa
Escolha um tomo p qualquer em C
C 0 := Simplifica(C {p})
se C 0 ento
C := Simplifica(C {p})
seno
C := C 0
fim se
fim enquanto
se C ento

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #95
i i

3 Aspectos Computacionais 85

retorne falso
seno
retorne verdadeiro
fim se

O algoritmo 2SAT utiliza uma funo de simplificao apresentada no


algoritmo 3.6. Essa simplificao conhecida como BCP (boolean constraint
propagation) e consiste na propagao de clusulas unitrias (positivas ou
negativas). Dado um conjunto C de clusulas com uma clusula unitria u,
para que C seja satisfeito necessrio que u seja satisfeito. Portanto, podemos
simplificar C de duas maneiras:
1. Eliminando de C todas as clusulas contendo u, pois estas j esto
satisfeitas
2. Apagando u das demais clusulas, pois u falso
Com isso, temos um conjunto de clusulas menor, com pelo menos um
tomo a menos. Note que essa simplificao se aplica a qualquer conjunto de
clusulas, no apenas a k-clusulas.
Conjuntos de k-clusulas, com k > 3, no possuem nenhum algoritmo
eficiente conhecido para decidir sua satisfazibilidade. Uma propriedade im-
portante que todo conjunto de k-clusulas, com k > 3, pode ser transfor-
mado em um conjunto equivalente de 3-clusulas por meio da introduo
de novos tomos. Essa transformao ser deixada como um exerccio para
o leitor.

Algoritmo 3.6 Simplifica(C)


Entrada: Um conjunto C de clusulas (quaisquer)
Sada: Um conjunto de clusula C 0 , C 0 C, sem clusulas unitrias.
C 0 := C
enquanto Existe uma clusula unitria u C faa
C 0 := C 0 {c|u literal em c}
para toda clusula c = u c 0 faa
C 0 := C 0 {c 0 } c
fim para
fim enquanto
retorne C 0

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #96
i i

86 Lgica para Computao

3.3.2 Forma Normal Disjuntiva


A forma normal disjuntiva (FND) muito utilizada no projeto de circuitos
booleanos lgicos. Em particular, o mtodo de Quine-McCluskey de minimi-
zao de funes booleanas para otimizao de circuitos lgicos requer que
sua entrada esteja na FND.
A FND definida como uma disjuno de conjunes de literais:

N
_
L1 L2 . . . Lni .
i=1

Uma conjuno de literais da forma L1 L2 . . . Lni muitas vezes


chamada de clusula dual. tambm usual representar frmulas na FND
como polinmios, em que a conjuno representada pela multiplicao (),
a disjuno pela adio (+) e a negao por uma barra sobre o tomo (x).
Dessa forma, a frmula na FND (p1 p2 ) (p1 p2 ) pode ser
representada pelo polinmio x1 x2 + x1 x2 .
Como no caso da forma clausal, toda frmula pode ser transformada em
uma frmula equivalente na FND. A FND pode ser obtida de forma muito
similar obteno da FNC, conforme o algoritmo 3.7.

Algoritmo 3.7 Transformao na FND Sem Novos tomos


Entrada: Uma frmula B.
Sada: Uma frmula A na FND, B A.
1 : para todas as subfrmulas X, Y , Z de B faa
2: Redefinir em termos de e :

(X Y) 7 (X Y)

3: Empurrar as negaes para o interior por meio das leis de De Morgan:

(X Y) 7 X Y
(X Y) 7 X Y

4: Eliminao da dupla negao:

X 7 X

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #97
i i

3 Aspectos Computacionais 87

5: Distributividade de sobre :

X (Y Z) 7 (X Y) (X Z)

6: fim para
7: A frmula A obtida quando no h mais substituies possveis.

Note que a nica diferena entre o algoritmo 3.7 e o algoritmo 3.2 utilizado
para transformar frmulas no formato clausal est no passo 5, em que a
distributividade de sobre aplicada para obter a FND. Esse algoritmo
no introduz novos tomos e, devido distributividade, possui o mesmo
problema do algoritmo 3.2, ou seja, o tamanho da frmula produzida na
FND ser exponencialmente maior que o tamanho da frmula original. Para
evitar esse problema, pode-se utilizar a mesma tcnica do algoritmo 3.3 de
introduo de novos tomos, a qual ser deixada como exerccio.

Exerccios

3.5 Transformar no formato clausal, introduzindo, se necessrio, novos


tomos.

(a) ((p q) p) p
(b) (p p)
(c) (p q) (q r)

3.6 Verificar qual das frmulas anteriores, no formato clausal, uma


clusula de Horn.

3.7 Apresentar uma frmula cuja forma clausal sem adio de novos
tomos seja exponencialmente maior no tamanho. Apresentar, em
seguida, a mesma frmula no formato clausal com adio de novos
tomos.

3.8 Verificar se as frmulas a seguir so satisfazveis.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #98
i i

88 Lgica para Computao

(a) p1 p2 p3
p2 p4
p3 p4
p4 p5 p6
p5 p7
p6 p7
(b) p1 p2 p3
p2 p4
p3 p4
p4 p5 p6
p5 p7
p6 p7
p7 p1
p7 p4

3.9 Expandir a frmula a seguir no formato em 2-clusulas e verificar sua


satisfazibilidade.

3 _
^ 2 2 _
_ 3 _
2
pij pij pkj
i=1 j=1 i=1 k=i j=1

3.10 Fornecer um algoritmo que transforma uma clusula qualquer de


tamanho k > 3 em um conjunto de 3-clusulas, introduzindo novos
tomos.
Aplicar o seu algoritmo na transformao da seguinte clusula:

p0 p1 p2 p3 p4 p5 .

3.11 Fornecer um algoritmo que transforme uma frmula qualquer na FND


sem aumentar exponencialmente o tamanho da frmula, introduzindo
eventualmente novos tomos.

3.4 Resoluo
Resoluo uma regra de inferncia que requer que as frmulas estejam
no formato clausal. Nesse caso, consideramos uma teoria um conjunto de

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #99
i i

3 Aspectos Computacionais 89

clusulas. A ordem dos literais dentro das clusulas no considerada impor-


tante, e portanto podemos reordenar as clusulas da forma mais conveniente,
sem que isso incorra em custos computacionais ou lgicos.
Quando queremos ressaltar a presena de um literal L em uma clusula C,
podemos escrever C = L C 0 , em que C 0 representa os literais restantes na
clusula; essa representao tambm engloba o caso limite em que C = L,
onde C 0 seria a clusula vazia . Como a ordem no importante, podemos
supor que o literal L ocorre em qualquer posio em C e, em particular, na
primeira posio.
Com essa notao, podemos definir a regra auxiliar da contrao de clu-
sulas, sendo
LLC
(Contrao)
LC

Essa regra permite inferir novas clusulas simplesmente apagando ou con-


traindo literais que ocorram mais de uma vez na clusula.
A regra da resoluo uma regra de inferncia envolvendo duas clusulas
que contenham literais sobre o mesmo tomo, mas de polaridade oposta.
Dessa forma, a regra da resoluo dada por

Ap p B
(Resoluo)
AB

As frmulas A p e p B so chamadas de resolventes, e a frmula


inferida A B chamada de resoluta. Esse passo de inferncia no provoca a
eliminao de suas premissas, ou seja, uma frmula pode ser usada mais de
uma vez como resolvente.
Para definirmos a inferncia por resoluo, precisamos inicialmente de uma
notao. Dada uma clusula C, representamos por C a negao de C
transformada no formato clausal. Ou seja, se C = p, C = {p}, e se,
por exemplo, C = p q r, C o conjunto de clusulas unitrias
C = {p, q, r}.
Dizemos que uma clusula C pode ser inferida por resoluo de um
conjunto de clusulas , o que representado por `res C, se a partir
do conjunto { C}, por operaes de resoluo e contrao, pudermos
obter a clusula vazia . Portanto, o mtodo de inferncia por resoluo
chamado de um mtodo de inferncia por refutao, pois podemos inferir C
de se, a partir de e a negao de C, obtivermos uma inconsistncia.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #100
i i

90 Lgica para Computao

Como primeiro exemplo de inferncia por resoluo, apresentamos a


inferncia `res p p. Para tanto, computamos (p p) = {p, p} e
em apenas um passo de resoluo obtemos:

p p
.

Como segundo exemplo, considere a inferncia p s r, s r `res p r.


Inicialmente, computamos (p r) = {p, r} e ento procedemos a
diversos passos de resoluo sobre o conjunto {p s r, s r, p, r}:

psr p
sr s r
rr
r r

O primeiro passo de resoluo entre psr e p gera sr, que resolvido


com s r, obtendo-se r r. Essa frmula ento contrada e resolvida com
r, chegando-se finalmente contradio, .
Por causa da sua simplicidade, o mtodo de resoluo tem sido um dos
preferidos para automatizao, sendo o mtodo utilizado pela linguagem de
programao em lgica Prolog e por provadores de teoremas como o OTTER.
Em ambos os casos, na realidade, o mtodo aplicado mais genericamente
lgica de primeira ordem, o que ser discutido na segunda parte deste livro.
No entanto, a resoluo apresenta dois grandes desafios computacionais:

A escolha dos resolventes a cada passo de resoluo.

A diminuio do espao de busca.

A escolha dos resolventes gera distintas estratgias computacionais. Uma


das estratgias mais usadas tentar utilizar a resoluo unitria o mximo
possvel. A resoluo unitria aquela em que ao menos um dos resolventes
uma clusula unitria. A resoluo unitria tem a vantagem de sempre gerar
frmula de tamanho menor que o resolvente no-unitrio.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #101
i i

3 Aspectos Computacionais 91

O exemplo anterior da inferncia de p s r, s r `res p r poderia ser


realizado apenas com resolues unitrias:

psr p
sr r
s s r
r r

Note que a clusula unitria r foi utilizada duas vezes, o que corresponde
utilizao da regra da contrao sobre r r na prova anterior. Infelizmente,
nem toda inferncia por resoluo pode ser feita apenas com resolues
unitrias. Ver exerccios a seguir sobre isso.
Em algumas referncias na literatura, a resoluo unitria descrita como
uma resoluo em que a clusula unitria deve ser negativa. O mtodo
apresentado tambm conhecido na literatura como propagao unitria ou
BCP (boolean constraint propagation).
Outra estratgia possvel o uso de resolues lineares. Em uma resoluo
linear, a frmula resoluta em um passo deve ser usada como resolvente no
passo seguinte, de forma que a rvore de prova degenerada em uma linha,
de forma que os ramos direita so sempre constitudos de uma nica
frmula. O exemplo anterior de resoluo unitria tambm consiste em uma
resoluo linear.
O segundo desafio computacional a diminuio do espao de busca. O
fato de uma frmula ter sido usada como resolvente em um determinado
passo de resoluo no descarta a possibilidade de essa frmula ser utili-
zada como resolvente em algum outro passo de resoluo. Como a prpria
frmula resoluta tambm uma candidata a resolvente, o espao de busca
de resolventes pode aumentar muito aps vrios passos de resoluo. Alm
disso, muitos possveis resolventes geram frmulas que no sero nunca
utilizadas na derivao final da contradio, tornando-se frmulas inteis.
Faz-se necessrio uma estratgia de restrio desse espao de busca para
aumentar a eficincia da resoluo.
A principal estratgia utilizada o descarte de frmulas por englobamento
(traduzido do ingls, subsumption). Dadas duas clusulas C1 e C2 , dizemos
que C1 engloba C2 se todos os literais que ocorrem em C1 tambm ocorrerem
em C2 , o que representado por C1 C2 .

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #102
i i

92 Lgica para Computao

A estratgia de diminuio do espao de busca de resolventes diz que,


se temos clusulas C1 e C2 tais que C1 C2 , ento podemos eliminar a
clusula englobada C2 . Essa estratgia correta, pois temos que, se C1 C2 ,
ento C1 |= C2 e, ao descartarmos C2 , no estamos perdendo nenhuma
informao.
Por exemplo, se o espao de busca contm as frmulas a b c, a
p, b p, a resoluo das duas ltimas gera a b, que engloba a primeira
frmula, e portanto essa frmula ser descartada, gerando o novo espao de
busca que contm apenas a b, a p, b p.
No caso da resoluo unitria, a frmula resoluta sempre engloba o re-
solvente no-unitrio, como pode ser visto no exemplo anterior. Assim, a
resoluo unitria descarta um resolvente em favor de um resoluto, e dessa
forma ela no aumenta o nmero de frmulas no espao de busca, alm de
diminuir o tamanho das frmulas nesse espao.

Exerccios

3.12 Mostrar que o passo de resoluo correto, ou seja, mostrar para toda
valorao v que, se v(A p) = v(B p) = 1, ento necessariamente
v(A B) = 1.
Analogamente, provar a correo da regra de contrao.

3.13 Provar pelo mtodo da resoluo todos os axiomas da axiomatizao


da Seo 2.2.

3.14 Concluir, a partir dos dois exerccios anteriores, que a resoluo


correta e completa em relao s funes de valorao.

3.15 Verificar quais dos seqentes a seguir podem ser resolvidos por resolu-
o linear. Dos restantes, identificar quais podem ser resolvidos ou no
por resoluo.
(a) p q, q s ` p s
(b) s p, s p, s r, s r, r t p ` t
(c) p q, q s ` s
(d) s p, s p, p t r, p t r ` t

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #103
i i

3 Aspectos Computacionais 93

3.5 O Problema SAT


Os maiores avanos recentes na rea de provadores de teoremas proposicio-
nais no foram feitos na proposta de algum mtodo de inferncia, mas na
melhoria da eficincia de um velho algoritmo para verificar a satisfazibilidade
de uma frmula. Este conhecido como problema SAT e foi o primeiro
problema NP-completo da literatura.
Diversos algoritmos tm sido usados para essa tarefa, os quais se divi-
dem em duas categorias. Os algoritmos completos so aqueles que sempre
conseguem decidir corretamente se um conjunto de clusulas decidvel ou
no. Os algoritmos incompletos so aqueles que, se a frmula for satisfazvel,
ento sempre conseguem apresentar uma valorao; porm, se a frmula
for insatisfazvel, o programa capaz de no terminar. A vantagem dos
algoritmos incompletos que eles so capazes de ser muito mais rpidos que
os algoritmos completos.

3.5.1 O Mtodo DPLL


O algoritmo DPLL muitas vezes chamado de mtodo Davis-Putnam data
de 1962 e vem sendo implementado com as mais diferentes heursticas desde
ento, o que demonstra que um algoritmo que aceita muito bem novas heu-
rsticas, e j ganhou diversas competies de implementaes na resoluo de
problemas como SAT, planejamento e outros problemas NP-completos que
podem ser traduzidos no problema SAT.
A idia bsica do algoritmo a de construir uma valorao para uma
frmula fornecida como um conjunto de clusulas. Inicialmente, todos os
tomos recebem a valorao *, representando um valor indefinido. A cada
iterao do algoritmo, um literal L escolhido, e faz-se v(L) = 1; note que,
se esse literal for negativo, da forma q, isso significa fazer v(q) = 0. Com
essa nova valorao, procede-se simplificao da frmula. Se essa valorao
satisfizer todas as clusulas, o que significa que a simplificao levou ao
conjunto vazio de clusulas, tem-se uma valorao que satisfaz a frmula
inicial. Se alguma clusula for falsificada pela valorao, altera-se a escolha
para v(L) = 0. Se nenhuma clusula foi falsificada, nem todas as clusulas
foram satisfeitas, procede-se prxima escolha de literal. O processo pra
quando uma valorao foi encontrada, em cujo caso a frmula satisfazvel,
ou quando no h mais tomos para serem testados, em cujo caso a frmula
insatisfazvel. Esse procedimento est ilustrado no algoritmo 3.8.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #104
i i

94 Lgica para Computao

Algoritmo 3.8 DPLL(F)


Entrada: Uma frmula F na forma clausal (FNC).
Sada: verdadeiro, se F satisfazvel, ou falso, caso contrrio.
Fazer v(p) = * para todo tomo p
F 0 = Simplifica(F)
se F 0 = ento
retorne verdadeiro
seno se F 0 contm uma clusula vazia (falsa) ento
retorne falso
fim se

/* Escolha no-determinstica */
Escolha um literal L com v(L) = *

/* Chamadas recursivas */
se DPLL(F 0 {L}) = verdadeiro ento
retorne verdadeiro
seno se DPLL(F 0 {L}) = verdadeiro ento
retorne verdadeiro
seno
retorne falso
fim se

Esse algoritmo tambm um algoritmo no-determinstico, pois no es-


pecifica qual o mtodo para escolher o literal indefinido que ser instanciado
a cada passo. O algoritmo 3.8 apresentado de forma recursiva, pois, uma
vez escolhido o literal a ser instanciado, o procedimento se auto-invoca.
O mtodo DPLL um mtodo chamado de SAT-completo, ou seja, ele
sempre capaz de decidir corretamente se um conjunto de clusulas
satisfazvel ou no.
Quando a seleo de um literal gera uma falha (ou seja, uma valorao que
falsifica alguma clusula), ocorre um retrocesso ou backtracking. Em termos
de eficincia, sempre melhor que esse retrocesso ocorra quando um menor
nmero de tomos j foi selecionado, pois isso elimina uma parte maior do
espao de busca de valoraes de variveis.
Outra observao que o procedimento de simplificao no foi especifi-
cado. Na maioria dos algoritmos, esse procedimento inclui a simplificao

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #105
i i

3 Aspectos Computacionais 95

feita pela propagao do literal instanciado, o que pode ser visto como
uma resoluo unitria com o literal recm-instanciado, tambm chamada
de BCP (boolean constraint satisfaction). Esse algoritmo de simplificao
apresentado no algoritmo 3.9.

Algoritmo 3.9 Simplifica(F)


Entrada: Uma frmula F na forma clausal (FNC).
Sada: Uma frmula na forma clausal equivalente a F, porm mais simples.
/* A simplificao ocorre enquanto F possuir uma clusula unitria for-
mada de apenas um literal */
enquanto F possui alguma clusula unitria L faa
Apaga de F toda clusula que contm L. /* Simplificao 1 */
Apaga L das clusulas restantes. /* Simplificao 2 */
fim enquanto
retorna F.

Com relao ao algoritmo 3.9, note que um passo de simplificao pode


gerar diversas outras clusulas unitrias. Por exemplo, se tivermos as clusulas

x1
x1 x2
x1 x3
x2 x3 x4 x5
x1 x4

a clusula unitria inicial permite o processo de simplificao. Pela simplifi-


cao 1, a primeira e a ltima clusula sero apagadas, e pela simplificao 2,
x1 ser apagado da segunda e terceira clusulas, gerando

x2
x3
x2 x3 x4 x5

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #106
i i

96 Lgica para Computao

em que temos duas novas clusulas unitrias. Se escolhermos x2 primeiro


(a ordem irrelevante nesse caso, apesar de o programa ser, em tese, no-
determinstico) obtemos

x3
x3 x4 x5

e, for fim, a forma simplificada

x4 x5 .

Alm dessa simplificao, algumas outras podem ser usadas:

Eliminao de Literais Puros: Um literal dito puro se ocorre em todas


as clusulas sempre na mesma polaridade. Nesse caso, basta fazer esse
literal verdadeiro e apagar todas as clusulas que o contm.

Resoluo de Literais Simples: Um literal simples se ocorre na forma


positiva em uma nica clusula ou na forma negativa em uma nica
clusula. Nesse caso, o literal eliminado, resolvendo-se todas as clu-
sulas que o contm. Note que isso no aumenta o nmero de clusulas,
mas diminui o nmero de tomos e, portanto, a complexidade do
problema.

Essas simplificaes no so aplicadas, em geral, a cada iterao do algo-


ritmo resolvedor de SAT, mas algumas implementaes as aplicam apenas na
simplificao inicial ao problema.
Diversas heursticas (ou estratgias) so aplicadas para selecionar o literal
que ser instanciado em um passo do algoritmo DPLL. A seguir, apresenta-
mos algumas delas:

Heurstica MOM. Mximo nmero de Ocorrncias de Mnimo com-


primento. Essa heurstica de fcil implementao. A idia bsica
selecionar o literal que apresente o maior nmero de ocorrncias em
clusulas de tamanho mnimo e, com isso, aumentar a probabilidade
de detectar uma clusula falsificvel com antecedncia. As clusulas de
tamanho mnimo tm, no mnimo, tamanho dois, pois as clusulas
unitrias so eliminadas pela simplificao.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #107
i i

3 Aspectos Computacionais 97

Heurstica SATO. uma variao da heurstica MOM. Nesse caso, seja


f(p) o nmero de clusulas de tamanho mnimo que contm p, mais
1. A heurstica calcula para todos os tomos o valor de f(p) f(p) e
escolhe o tomo p que maximiza esse produto. Por fim, a deciso sobre
fazer p verdadeiro ou falso primeiro tomada com base no maior valor,
respectivamente, de f(p) ou f(p).
Para melhorar a eficincia da deciso do literal selecionado, algumas
implementaes no consideram o produto f(p) f(p) em todas as
clusulas de tamanho mnimo, mas apenas uma frao destas.

Desempate por simulao. No caso de uma das heursticas anteriores


gerar mais de um literal candidato para seleo, uma possibilidade
simular a aplicao da simplificao em cada uma delas e selecionar o
literal L que causa, pela propagao unitria e simplificao, o maior
nmero de clusulas unitrias.

3.5.2 Aprendizado de Novas Clusulas


Os sbios aprendem com as escolhas malfeitas.

Toda vez que derivamos uma contradio, ou seja, que um ramo da busca
DPLL leva falsificao de uma clusula, pode-se lamentar a escolha dos
literais que nos levaram a esse beco sem sada.
Alternativamente, podemos aprender com nossos erros. Em particular,
aprendemos que os literais escolhidos levam contradio e que as clusulas
envolvidas contm informao relevante para evitar a repetio das ms
escolhas.
Podemos adicionar essa informao aprendida ao problema. No contexto
do algoritmo DPLL, aprender significa adicionar novas clusulas ao problema,
sem aumentar o nmero de tomos.
O objetivo do aprendizado melhorar a eficincia da prova, encolhendo
o espao de busca. Esse encolhimento decorrente da adio de clusulas
novas que probem a repetio de ms escolhas. Cada vez que derivamos uma
contradio, podemos aprender uma ou mais clusulas. Veremos a seguir
dois mtodos complementares de aprendizado de novas clusulas.
Aprendendo das Ms Escolhas
O mtodo DPLL pode ser visto como a tentativa de construir uma valorao
que satisfaa um conjunto de clusulas. Nesse processo, a cada momento te-
mos uma valorao parcial, V , que inicialmente vazia. Essa valorao parcial

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #108
i i

98 Lgica para Computao

expandida de duas maneiras: pelas escolhas de literais e pela propagao de


clusulas unitrias. Por outro lado, quando uma contradio encontrada, a
valorao parcial contrada.
Por exemplo, suponha que iniciamos com a valorao parcial

V = .

No primeiro passo de escolha, escolhemos o literal a1 :

V = {a1 }

e por propagao unitria, obtemos a2 , . . . , aka :

V = {a1 , a2 , . . . , aka }.

Supondo que V no seja contraditrio, ou seja, no contenha dois literais


opostos, continuamos o processo com uma nova escolha, o literal b1 , que um
novo ciclo de propagao unitria expande V com b2 , . . . , bkb

V = {a1 , a2 , . . . , aka , b1 , b2 , . . . , bkb }.

Supondo agora que V , nesse ponto, falsifica uma clusula o que equi-
valente a termos em V dois literais opostos, x e x , desfazemos todos os
efeitos da propagao e invertemos a ltima escolha no caso, a escolha do
literal b1
V = {a1 , a2 , . . . , aka , b1 };

note que b1 no aparece em negrito na valorao parcial V , pois o negrito


se destina a literais escolhidos, e nesse caso b1 no uma escolha, mas
a nica opo que nos restou nessa valorao parcial, uma vez que sabemos
que b1 leva a uma contradio.
Nesse contexto, a derivao da contradio nos ensina que as escolhas
simultneas de a1 e b1 no so possveis, o que pode ser codificado na
frmula (a1 b1 ), que corresponde adio da clusula

a1 b1

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #109
i i

3 Aspectos Computacionais 99

Vamos ilustrar o processo de aprendizado com um exemplo mais concreto.


Suponha que temos o seguinte conjunto de clusulas:

pq
p q
p t s
p t s
p s

e que temos a valorao parcial


V = {t, p}

que por propagao unitria gera

V = {t, p, s, s}

que uma valorao contraditria que falsifica a terceira e quinta clusulas.


Nesse caso, vemos que a opo simultnea de t e p no possvel, ou seja,
aprendemos a clusula
t p,

que ser adicionada ao conjunto de clusulas. Nesse mtodo de aprendizado,


apenas os literais escolhidos, que esto representados pelo negrito na repre-
sentao da valorao parcial, que so usados no aprendizado, uma vez que
os outros literais foram inferidos a partir deles.
Em geral, esse tipo de aprendizado no melhora muito a eficincia do
resolvedor SAT, pois, no caso de termos k literais de escolha na valorao
parcial, a forma clausal aprendida s ser usada se k 1 literais aparecerem
em outro ramo da busca do DPLL, o que uma situao pouco provvel
na prtica. Esse tipo de aprendizado possui utilidade apenas em casos de
reincios aleatrios, descritos adiante. Outras tcnicas de aprendizado mais
teis podem ser empregadas.
Aprendendo por Inferncia
Clusulas envolvidas em uma contradio trazem informao relevante que
pode ser aprendida. Em particular, as clusulas responsveis pelo fechamento
do ramo podem ser resolvidas. Nesse caso, aprendemos (e adicionamos
frmula) a clusula resultante da resoluo de duas outras. Para isso, devemos
armazenar novas informaes na valorao parcial:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #110
i i

100 Lgica para Computao

Para cada literal obtido por propagao unitria, qual a clusula que
deu origem ao literal.

Literais de escolha so associados a >.

No mesmo exemplo anterior, as escolhas so representadas por:

V = {(t, >), (p, >)}

Aps a propagao linear que gerou a contradio, temos:

V = {(t, >), (p, >), (s, p s), (s, p t s)}

Aprendemos a resoluo das clusulas associadas contradio: p s e


p t s. Ou seja, adicionamos a seguinte clusula frmula:

p t

que nesse exemplo em particular gerou a mesma clusula aprendida pelo


mtodo anterior. No entanto, isso nem sempre acontece. Esse tipo de apren-
dizado por inferncia, na prtica, traz efeitos mais positivos sobre a eficincia,
o mtodo de aprendizado que assumimos que estar sendo usado.
Podem-se aprender outras frmulas, resultantes de outras resolues, nem
sempre com ganhos de eficincia.

3.5.3 O Mtodo Chaff


O mtodo chamado de Chaff trouxe melhorias de desempenho ao mtodo
DPLL. Existe uma implementao do Chaff livre na internet, chamada de
zChaff, que ganhou diversos concursos de resolvedores SAT e que tambm
pode ser adaptada a outros ambientes, como o de planejamento, e esse
sistema tambm venceu vrias competies de planejamento e inteligncia
artificial.
O Chaff uma extenso do DPLL que utiliza aprendizado, e sua boa
performance devida aos seguintes elementos:

Literais vigiados.

Retrossaltos (backjumping).

Reincios aleatrios.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #111
i i

3 Aspectos Computacionais 101

Heurstica para lidar com aprendizado.

Analisaremos, a seguir, cada um desses mtodos.


Literais Vigiados
No mtodo Chaff, a parte principal do ganho de desempenho no est
baseada em algoritmos sofisticados para reduo do espao de busca, mas
em um desenho bastante eficiente da etapas cruciais do mtodo DPLL: a
propagao das clusulas unitrias (tambm chamada anterior de simplifi-
cao ou, simplesmente, propagao unitria). Experimentos mostram que
mais de 80% do tempo de execuo de um mtodo DPLL destinado
propagao de clusulas unitrias, e nessa fase crtica que se devem investir
os esforos de otimizao.
A tcnica dos literais vigiados tem como propriedades:

Acelerao da propagao unitria.

Falta de necessidade de apagar literais ou clusulas.

Falta de necessidade de vigiar todos os literais em uma clusula.

Retrocesso em tempo constante (muito rpido).

A lgica subjacente ao DPLL tem 3 valores verdade. Dada a valorao


parcial
V = {1 , . . . , k }

seja um literal qualquer. Ento:



1(verdade) se V
V() = 0(falso) se V

(indefinido) caso contrrio

Os literais vigiados so uma estrutura de dados tal que:

A cada instante, toda clusula c tem exatamente dois literais seleciona-


dos: c1 , c2 .

c1 , c2 so escolhidos dinamicamente e mudam com o tempo.

c1 , c2 so propriamente vigiados sob a valorao parcial V se:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #112
i i

102 Lgica para Computao

Ambos so indefinidos; ou
Ao menos, um deles 1.

O comportamento dos literais vigiados dinmico. Inicialmente, V = .


Um par de literais vigiados escolhido para cada clusula. Essa escolha
sempre prpria, pois todos os literais assim escolhidos so indefinidos.
Durante o processo normal do DPLL, h escolha de literais e propagao
unitria, o que expande a valorao parcial V . Quando essa expanso ocorre,
um ou ambos os literais vigiados podem ser falsificados. Se o par de literais
vigiados de uma clusula hc1 , c2 i torna-se imprprio, ento o algoritmo de
manuteno dos literais vigiados acionado, da seguinte maneira: se h um
ou mais literais vigiados falsificados, troca-se o par de literais vigiados, bus-
cando, entre outros literais da clusula, um outro par que restabelea a vigia
prpria. Se nenhum par de literais vigiados prprios pode ser encontrado,
ento no h literais satisfeitos na clusula, e duas situaes podem ocorrer:
H um nico literal indefinido na clusula. Nesse caso, fazemos esse
literal verdadeiro, e a valorao parcial V expandida. Essa a verso
da propagao unitria com literais vigiados.
Todos os literais foram falsificados. Nesse caso, procedemos ao retro-
cesso, que consiste unicamente na alterao de V , ou seja, apagamos
as ltimas propagaes unitrias at encontrarmos em V um literal
de escolha e invertemos essa escolha. Em seguida, continuamos com
o DPLL normal, com novas propagaes lineares e novas escolhas.
Note que, no procedimento de retrocesso citado, apenas os literais que
esto vigiados e cujos valores foram alterados na contrao de V que so
recomputados. As clusulas no so alteradas com apagamentos na propaga-
o unitria e, portanto, no necessitam ser recompostas no retrocesso.
Vamos dar um exemplo. Considere que temos, entre o conjunto de clu-
sulas a serem resolvidas, as seguintes clusulas. Inicialmente, escolhemos os
dois primeiros literais para serem vigiados.

clusula c 1 c 2
pqr p= q=
p q s p = q =
p r s p = r =

Como todos os literais so indefinidos, todas as vigias so prprias.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #113
i i

3 Aspectos Computacionais 103

Suponha que o literal p escolhido, de forma que V = {p}. Todos


os pares de literais vigiados ficam (0, ), imprprios. Ento, novos literais
so eleitos para serem vigiados em cada uma das clusulas impropriamente
vigiadas, conforme a configurao a seguir:

clusula c 1 c 2
pqr r= q=
p q s s = q =
p r s s = r =

O algoritmo DPLL procede normalmente. Como no h propagaes


unitrias, uma nova escolha feita.
Suponha que r escolhido, obtendo-se V = {p, r}. Assim, os literais
vigiados na primeira e terceira clusulas ficam imprprios. Em ambas as
clusulas, no h nenhum outro literal *-valorado ou 1-valorado para ser
escolhido. Procedemos, ento, propagao unitria.
Pela clusula 1, q torna-se verdadeiro, e pela clusula 3, s torna-se
verdadeiro. Dessa forma, obtemos a valorao V = {p, r, q, s} e a
configurao:
clusula c 1 c 2
pqr r=0 q=1
p q s s = q =
p r s s = 1 r = 0

Procedendo ao algoritmo DPLL, devemos continuar com a propagao


unitria dos literais recm-inseridos em V . Com isso, os literais vigiados da
clusula 2 tornam-se imprprios.
Notamos que todos os literais da clusula 2 esto falsificados e, portanto,
no h nenhum outro par de literais nessa clusula que constitua a vigia
prpria.
clusula c 1 c 2
pqr r=0 q=1
p q s s = 0 q = 0
p r s s = 1 r = 0

Procedemos, ento, a um retrocesso rpido. V contrada at o ltimo


ponto de escolha, que invertida: V = {p, r}. Apenas os literais vigiados

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #114
i i

104 Lgica para Computao

afetados so recomputados. No h necessidade de recuperar o contexto


prvio de uma pilha de contextos.

clusula c 1 c 2
pqr r=1 q=
p q s s = q =
p r s s = r = 1

Esse tipo de retrocesso extremamente rpido, em comparao com o


mtodo tradicional. O algoritmo DPLL procede a partir desse ponto.
Retrossaltos
Retrossaltos (em ingls, backjumping) uma tcnica que evita a duplicao de
esforos causada pela m escolha de um literal que acaba no tendo nenhum
papel no fechamento de um ramo, ou seja, na descoberta de uma contradio.
Vamos explicar a tcnica do retrossalto por meio de um exemplo.
Suponha que temos a seguinte valorao parcial, em que cada literal est
associado clusula que lhe deu origem; os literais de escolha esto asso-
ciados a >.

V = {(p, >), (r, >), (a, >), (q, pqr), (s, p r s), (s, p q s)}.

Claramente, essa valorao contm uma contradio. Note tambm que


o literal escolhido a no ocorre nas clusulas associadas s propagaes
unitrias subseqentes. Isso que dizer: a escolha de a intil.
Se realizarmos o retrocesso seguido da substituio de a por seu oposto,
esse retrocesso geraria uma repetio intil:

V = {(p, >), (r, >), (a, >), (q, p q r),


(s, p r s), (s, p q s)}.

Nesse caso, o processo de retrocesso pode saltar sobre a e ignor-lo; em


vez de V = {(p, >), (r, >), (a, >), gera

V = {(p, >), (r, >)}.

Isso o retrossalto. Retrossaltos, quando efetuados, trazem sempre ganhos


de eficincia.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #115
i i

3 Aspectos Computacionais 105

Reincios Aleatrios
Considere o seguinte cenrio, de alta probabilidade durante a execuo do
DPLL. A frmula satisfazvel, porm as escolhas iniciais foram malfeitas.
Suponha que temos 1.000 variveis na frmula, e as valoraes que satisfazem
essa frmula requerem todas que V(p1 ) = 0. No entanto, uma das primeiras
escolhas da valorao parcial foi p1 verdadeiro.
Nesse caso, s acharemos uma valorao que satisfaz a frmula depois de
esgotar todas as possibilidades da m escolha inicial, o que pode equivaler
construo de uma rvore com 2999 ramos.
Para evitar tais casos, surgiu a idia de reiniciar periodicamente a busca da
valorao. O mecanismo o seguinte. Com o passar do processamento DPLL
de uma dada frmula, vamos aprendendo diversas clusulas, que no estavam
disponveis quando a m escolha inicial foi feita. Se fosse dado realizar a
escolha inicial nesse novo contexto, o literal escolhido seria outro, ou seria
o mesmo, s que com polaridade oposta.
Para implementar esse reincio, o sistema contm como parmetro uma
probabilidade de reincio bem pequena (digamos, = 0, 5%). Cada vez que
uma contradio encontrada, uma ou mais clusulas so aprendidas. Em
seguida, com probabilidade (1 ), ocorre o processo normal de retrocesso.
Porm, com probabilidade , a busca pode ser reiniciada com V = .
Esse reincio aleatrio pode trazer problemas de eficincia se a frmula
for insatisfazvel. Tal problema, porm, no ocorre se as frmulas aprendidas
forem mantidas ao se reiniciar. Ou seja, medidas empricas garantem que os
reincios aleatrios tragam ganho de eficincia.
Heurstica VSIDS
A heurstica de seleo de literais do Chaff chamada de VSIDS (do ingls
variable state independent decaying sum). Esse mtodo leva em considerao
que novas clusulas so aprendidas ao longo do processo e usa essa informa-
o para privilegiar a escolha de literais em clusulas recm-aprendidas:
Para cada varivel proposicional e para cada uma de suas polaridades,
atribudo um contador, inicializado com zero.

Ao se adicionar uma clusula ao problema (seja na inicializao, seja


uma nova clusula aprendida), incrementado o contador de cada um
dos literais da clusula.

Os literais com o maior contador so os candidatos seleo.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #116
i i

106 Lgica para Computao

Caso haja mais de um literal candidato, escolhe-se aleatoriamente entre


eles.

Periodicamente, todos os contadores so divididos por uma constante.


Dessa forma, os literais pertencentes s clusulas includas mais recen-
temente acabam tendo maior prioridade.

Dessa forma, o Chaff privilegia a satisfao das ltimas clusulas apren-


didas. Outro aspecto importante que essa heurstica gera uma sobrecarga
pequena no processo de deciso, visto que os contadores s so atualizados
em caso de backtracking.

3.5.4 O Mtodo Incompleto GSAT

O GSAT foi o primeiro dos mtodos incompletos propostos para a resolu-


o de problemas SAT e baseia-se em processos probabilsticos sobre uma
busca local. No caso do GSAT, as valoraes consideram apenas os valores 1
(verdadeiro) e 0 (falso), no havendo mais tomos indefinidos.
Duas valorases so vizinhas se diferem no valor atribudo a apenas
um tomo. A idia bsica do mtodo , partindo de uma valorao inicial
aleatria, a cada iterao visitar uma valorao vizinha que satisfaa um
nmero de clusulas maior que a valorao atual. So duas as condies de
parada desse processo:

Todas as clusulas esto satisfeitas, em cujo caso retorna-se a valorao


atual.

O nmero mximo de iteraes (MAXITER) atingido. Nesse caso,


seleciona-se uma nova valorao inicial e reinicia-se a busca local.

Uma descrio do GSAT pode ser encontrada no algoritmo 3.10. L, vemos


que o processo pode ser reiniciado at um nmero de tentativas MAXTEN-
TATIVAS. Aps esse valor ter sido ultrapassado, o algoritmo simplesmente
desiste, indicando que a valorao no foi encontrada. Isso pode indicar
que a valorao no existe, no caso de a frmula ser insatisfazvel, ou que
a valorao no foi achada. O GSAT no distingue entre esses dois casos.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #117
i i

3 Aspectos Computacionais 107

Algoritmo 3.10 GSAT(F)


Entrada: Uma frmula F na forma clausal (FNC), inteiros MAXITER e
MAXTENTATIVAS.
Sada: Uma valorao v que satisfaz F, se encontrada.
para i := 1 at MAXTENTATIVAS faa
v := uma valorao aleatria
para j := 1 at MAXITER faa
se v satisfaz F ento
retorne v
fim se
Seja v 0 o vizinho de v com maior incremento no nmero de clusulas
satisfeitas.
v := v 0
fim para
fim para
retorna Valorao no encontrada

Em cada tentativa, a partir da valorao inicial, o GSAT analisa todas as


valoraes vizinhas. De uma forma gulosa, o GSAT busca a melhor valorao
vizinha a cada iterao. No momento de escolher a valorao vizinha, existem
trs situaes possveis:

Existem valoraes que incrementam o nmero de frmulas satisfeitas.


Nesse caso, a visita a novos vizinhos procede normalmente.

Todas as valoraes vizinhas satisfazem um nmero menor de clusu-


las. Isso indica que foi atingido um mximo local. A soluo, nesse caso,
fazer uma nova tentativa, com uma nova valorao inicial aleatria.

As valoraes vizinhas levam, no mximo, manuteno no total de


clusulas satisfeitas. Essa situao denominada movimento lateral.

No caso da movimentao lateral, utiliza-se uma busca tabu. Nessa busca,


memorizam-se quais as variveis que foram invertidas ao longo de uma
seqncia de deslocamentos laterais entre vizinhos, impedindo que
uma mesma varivel seja invertida duas vezes. Se, ao longo desse processo,
for encontrada uma valorao que aumenta o nmero de clusulas satisfeitas,

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #118
i i

108 Lgica para Computao

interrompe-se a busca tabu e retorna-se busca gulosa normal. Se a busca


tabu ficar sem opes, inicia-se uma nova tentativa, com uma nova valorao
inicial aleatria.

3.5.5 O Fenmeno de Mudana de Fase


Considere um problema 3-SAT, ou seja, um conjunto de clusulas, cada uma
com trs literais. So dois os parmetros do problema 3-SAT, o nmero N de
tomos e o nmero L de clusulas. Em geral, os problemas 3-SAT so gerados
aleatoriamente, dados N e L.
Com N fixo, se tivermos um nmero de clusulas L pequeno, a tendncia
que a frmula seja satisfazvel, pois o nmero de restries sobre os tomos
pequeno. Dessa forma, espera-se que a maioria dos problemas gerados para
L/N pequeno seja satisfazvel.
Por outro lado, se for gerado um nmero L de clusulas muito grande, a
tendncia que a frmula seja insatisfazvel, visto que grande a possibili-
dade de conflito entre as diversas restries. Assim, espera-se que a maioria
dos problemas gerados para L/N grande seja insatisfazvel.
Existe, no entanto, um valor de L/N para o qual 50% das frmulas
geradas aleatoriamente so satisfazveis e 50% das frmulas geradas so
insatisfazveis. Esse valor de L/N chamado de ponto de mudana de fase.
Como necessria a deteco de frmulas insatisfazveis, apenas localizamos
o ponto de mudana de fase para algoritmos completos SAT-solucionadores.
Esse ponto de mudana de fase existe independentemente do mtodo
utilizado para a resoluo do problema SAT. Alm disso, duas propriedades
do ponto de mudana de fases so notadas na prtica:

O valor L/N do ponto de mudana de fase independente de N e


independente do algoritmo usado.

O tempo mdio de soluo do problema mais alto nas vizinhanas do


ponto de mudana de fase.

Nunca se provou que o ponto de mudana de fase deva existir e ter essas
propriedades. Essas observaes so todas de carter emprico. Pode ser que
surja um novo algoritmo SAT que viole essas propriedades.
No caso de problemas 3-SAT, a experincia mostra que o ponto de mu-
dana de fase ocorre para L/N = 4, 3. Esse nmero obtenvel com mais
estabilidade para n > 100.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #119
i i

3 Aspectos Computacionais 109

Exerccios

3.16 Reescrever o algoritmo de DPLL utilizando iteraes em vez de chama-


das recursivas.

3.17 Implementar uma verso do algoritmo de DPLL na sua linguagem


favorita e verificar o ponto de mudana de fase para o problema 3-SAT.

3.18 O algoritmo WalkSAT uma variao do GSAT em que, com pro-


babilidade , em vez de escolher a melhor valorao vizinha, uma
valorao vizinha qualquer escolhida; portanto, com probabilidade
(1 ) o procedimento WalkSAT igual ao procedimento SAT. Escrever
o algoritmo do WalkSAT.

3.19 Implementar um resolvedor SAT (ou usar um disponvel na internet)


e descobrir qual o ponto de mudana de fase para o problema 4-SAT,
ou seja, para o problema da satisfazibilidade de clusulas com quatro
literais.

3.6 Notas Bibliogrficas


Os tableaux cuja implementao discutimos foram propostos originalmente
por Smullyan, em 1968. Naquela poca, ainda no havia computadores
disponveis para pesquisadores ou alunos. O tema de tableaux semnticos
tornou-se popular entre os estudantes de computao a partir da publicao
do livro de Melvin Fitting (Fitting, 1990). Desde ento, diversas implemen-
taes foram propostas para tableaux semnticos, incluindo uma verso em
Java livremente disponvel na internet (jTAP, 1999) e uma implementao
extremamente diminuta, chamada de leanTAP, que provavelmente o menor
provador de teoremas existentes (Beckert e Posegga, 1995). Uma referncia
sobre o estado da arte em tableaux e suas aplicaes pode ser encontrada
em (Posegga e Schmitt, 1999).
Uma srie de frmulas vlidas de dificuldade de prova crescente aparece
listada em Carbone e Semmer (2000). As frmulas de Statman foram de-
finidas inicialmente em 1978 (Statman, 1978), e uma prova de tamanho
polinomial para o princpio do escaninho por meio do uso de axiomatizao
foi apresentada por Buss (1987).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #120
i i

110 Lgica para Computao

O mtodo de resoluo para a prova automtica de teoremas foi proposto


por Robinson (1965) e se aplicava lgica de primeira ordem. Neste livro,
abordamos apenas a parte proposicional, apesar de este ser um dos mtodos
de deduo automtica mais utilizados na prtica para a programao em
lgica (Lloyd, 1987) e na linguagem Prolog (Sterling e Shapiro, 1994).
A literatura sobre o problema SAT imensa. A prova de que HornSAT
linear pode ser encontrada em (Dowling e Gallier, 1984), e o algoritmo log-
espao-completo para o 2SAT foi proposto por Even, Itai e Shamir em 1976.
O artigo inicial de Davis e Putnam sobre satisfazibilidade data de 1960 (Davis
e Putnam, 1960), porm o algoritmo conhecido como o procedimento de
Davis-Putnam foi originalmente publicado em 1962, por Davis, Logemann
e Loveland, o que explica por que esse mtodo muitas vezes chamado de
DLL ou DPL ou DPLL. O mtodo BCP usado na simplificao das clusulas
foi proposto por McAllester (1990) como um mtodo empregado em seus
sistemas mantenedores de verdade (TMS: truth maintenance systems) (Doyle,
1979). O fenmeno de mudana de fase na soluo do problema SAT foi
apresentado por Gent e Walsh (1994). O mtodo Chaff pode ser encontrado
em Moskewicz et al. (2001), e uma implementao do Chaff conhecida como
zChaff pode ser obtida na pgina http://www.princeton.edu/ chaff/zchaff.html.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #121
i i

Parte 2

Lgica de
Predicados

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #122
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #123
i i

4 Lgica de Predicados
Mondicos

4.1 Introduo

Conforme visto nos captulos anteriores, a lgica proposicional permite


caracterizar de forma rigorosa e precisa relacionamentos entre proposies. Os
relacionamentos so caracterizados com base nos conectivos da lgica, e as
inter-relaes entre os conectivos (e conseqentemente entre as proposies)
so caracterizadas com base em um sistema dedutivo.
Todos os relacionamentos (tanto os caracterizados pelos conectivos como
os caracterizados pelo sistema dedutivo) so justificados pela semntica da
linguagem. Quando um sistema lgico correto e completo com relao a
uma semntica, existe uma vinculao entre o que se observa na semntica
e o que pode ser deduzido pela lgica. Nesse caso, o sistema lgico pode
ser usado para inferir fatos que dizem respeito, por exemplo, a um sistema
(fsico ou abstrato) correspondente sua semntica: se quisermos raciocinar
a respeito de mquinas em uma fbrica e se aceitarmos uma idealizao
das mquinas que corresponda semntica vista nos captulos anteriores da
lgica proposicional, ento poderemos usar a lgica para inferir fatos sobre
as mquinas.
A partir deste captulo, consideramos uma extenso da lgica proposicio-
nal, visando torn-la mais expressiva. Isso deve ampliar as oportunidades
de aplicao da lgica para inferir fatos a respeito dos sistemas que cor-
respondam sua semntica, mas para isso ser pago o preo de aumentar
consideravelmente a complexidade da lgica.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #124
i i

114 Lgica para Computao

Consideremos, por exemplo, as seguintes sentenas proposicionais:

(a) e1 s1

(b) e2 s2

(c) e3 s3

Intuitivamente, os ndices de valor 1 indicam o Marcelo, os ndices de


valor 2 indicam a Ana Cristina e os ndices de valor 3 indicam o Flvio. As
proposies ei denotam que o indivduo i pratica esportes, e as proposies
si denotam que o indivduo i tem boa sade.
Se os nicos indivduos em nosso domnio de interesse forem esses trs,
ento no existe a necessidade de se estender a lgica. Se quisermos, en-
tretanto, considerar um domnio maior, as coisas podem mudar de figura.
Como poderamos, por exemplo, escrever que qualquer pessoa que pratica
esportes tem boa sade? Precisaramos escrever algo como:

ei si , para qualquer valor de i pertencente ao conjunto I =


{1, 2, 3, . . .}.

Isso, entretanto, no pertence linguagem proposicional vista anterior-


mente. A novidade que as proposies representam agora propriedades
relativas aos indivduos correspondentes aos ndices pertencentes a I. O nome
usualmente adotado para essas propriedades predicados, e por esse motivo a
lgica proposicional estendida dessa forma chamada de lgica de predicados.
Neste captulo, consideraremos apenas um ndice associado a cada predi-
cado, ou seja, todos os predicados considerados sero predicados mondicos.
No prximo captulo, estenderemos ainda mais a linguagem, permitindo
predicados polidicos, ou seja, predicados indexados por listas de ndices.
Um segundo exemplo : como poderamos escrever que o filho de qualquer
pessoa que pratica esportes tem boa sade? Precisaramos, nesse caso, de
uma funo f : I I para capturar o conceito de filho: se o indivduo
correspondente ao ndice i filho do indivduo correspondente a j, ento
f(j) = i. Assim, precisaramos escrever algo como:

N.A. No estamos, nesse momento, considerando se as sentenas escritas so verdadeiras ou


falsas. Queremos apenas, por enquanto, ser capazes de formular essas sentenas.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #125
i i

4 Lgica de Predicados Mondicos 115

ei sf(i) , para qualquer valor de i pertencente ao conjunto I =


{1, 2, 3, . . . }.

A lgica de predicados mondicos admite, portanto, a referncia indireta


aos ndices por meio de funes fk : I I, k = 1, 2, . . ..
Finalmente, consideremos o seguinte exemplo: se o pai ou a me de algum
pratica esportes, ento esse algum tem boa sade. Essa sentena seria escrita
como:

ei ej sf(i,j) , para quaisquer valores de i e j pertencentes ao


conjunto I = {1, 2, 3, . . .}.

Nesse caso, modificamos a funo correspondente ao conceito de filho


para considerar pai e me. A funo agora depende de dois parmetros,
em vez de apenas um, como no exemplo anterior. A lgica de predicados
mondicos que estudaremos nas prximas sees, embora exija que todos os
predicados sejam mondicos, admite funes polidicas, ou seja, funes que
dependem de mais de um parmetro. Dessa forma, as funes consideradas
tm a forma geral fn n
k : I I, k = 1, 2, . . . , n = 1, 2, . . . , N, N < .
A lgica de predicados mondicos muito til para a formalizao de
conceitos da cincia da computao. Muitos problemas relacionados com a
manipulao de tipos de dados em linguagens de programao, por exemplo,
podem ser formalizados e verificados usando essa lgica.

4.2 A Linguagem de Predicados Mondicos


Apresentamos aqui a formalizao da lgica de predicados mondicos. Para
isso, precisamos de alguns conceitos preliminares.
Um conjunto R1 = {r1 , r2 , . . .} um conjunto de predicados mondicos. Esse
conjunto pode ser vazio, finito ou infinito.
Um conjunto C = {c1 , c2 , . . .} um conjunto de constantes. Esse conjunto
pode ser vazio, finito ou infinito.
Conjuntos Fi = {fi1 , fi2 , . . .} so conjuntos de funes i-dicas, ou seja,
funes com i argumentos, i > 1. Cada um desses conjuntos pode ser vazio,
finito ou infinito.

N.A. Com N < , queremos dizer que N finito.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #126
i i

116 Lgica para Computao

Uma assinatura de predicados mondicos uma tupla especfica

1 = [R1 , C, F1 , F2 , . . . , FN ], N < .

Fixemos agora o conjunto V = {x1 , x2 , . . .}, que o conjunto de variveis.


Esse conjunto necessariamente infinitamente enumervel.
Podemos, ento, definir os termos e frmulas da lgica de predicados
mondicos. O conjunto T (1 ) de termos da assinatura 1 definido indu-
tivamente como o menor conjunto que atenda s seguintes condies:

Se xi V , ento xi T (1 ).

Se ci C, ento ci T (1 ).

Se fji Fj e t1 , . . . , tj T (1 ), ento fji (t1 , . . . , tj ) T (1 ).

O conjunto F(1 ) de frmulas da assinatura 1 definido indutivamente


como o menor conjunto que atenda s seguintes condies:

Se t T (1 ) e r R1 , ento r(t) F(1 ).

Se t1 , t2 T (1 ), ento t1 = t2 F(1 ).
Esses dois tipos de frmulas so denominados frmulas elementares ou
atmicas:

Se , F(1 ), ento , , , F(1 ) (as


regras para colocao de parnteses so idnticas s vistas para a lgica
proposicional).

Se F(1 ) e x V , ento x(), x() F(1 ).

Uma subseqncia de smbolos de uma frmula que tambm pertena


ao conjunto F(1 ) denominada subfrmula de .
O conjunto de variveis livres de uma frmula , denotado como L(),
definido assim:

Se = r(t), r R1 , t T (1 ), ento L() o conjunto de todas as


variveis ocorrendo em t.

Se = (t1 = t2 ), t1 , t2 T (1 ), ento L() o conjunto de todas as


variveis ocorrendo em t1 e t2 .

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #127
i i

4 Lgica de Predicados Mondicos 117

Se = , ento L() = L().

Se = , ou , ento L() = L() L().

Se = x() ou x(), x V , ento L() = L() {x}.

Se L() = , ento a frmula recebe o nome especial de sentena.

Exerccios

4.1 Considerar a assinatura 1 = [R1 , C, F1 , F2 ], em que:


R1 = {r1 }.
C = {a, b, c}.
F1 = {f1 }.
F2 = {f2 }.
Identificar, dentre as seqncias de smbolos a seguir, quais perten-
cem a F(1 ):
r1 (a).
r1 (f1 ).
r1 (f2 (x1 , f1 (a))) r1 (f1 (x2 )) x1 = x2 .
r1 (x1 ) x2 (r2 (x2 )).
x1 (x2 (r1 (f1 (x1 )) r1 (f2 (x2 , x1 )))).

4.2 Identificar, nas seqncias de smbolos anteriores que forem frmulas,


todas as suas subfrmulas.

4.3 Identificar, nas frmulas do Exerccio 4.1 e em todas as subfrmulas


identificadas no Exerccio 4.2, os respectivos conjuntos de variveis
livres.

4.3 Semntica
1
Um par A(1 ) = [A, A( ) ] um sistema algbrico da assinatura 1 se as
seguintes condies forem observadas:

A 6= denominado portador do sistema algbrico.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #128
i i

118 Lgica para Computao

1
A( ) mapeia os elementos dos conjuntos de 1 em subconjuntos e
funes sobre o conjunto A e denominada interpretao de 1 em A.
1
Se ri R1 , ento A( ) (ri ) A.
1
Se ci C, ento A( ) (ci ) A.
1
Se fji Fj , ento existe uma funo A( ) (fji ) : Aj A.

Seja X V um conjunto de variveis selecionadas. Uma funo : X A


denominada interpretao do conjunto X em A.
O valor de um termo t T (1 ) em um sistema algbrico A(1 ) para
1
interpretao denotado como tA( ) [] e definido indutivamente da
seguinte forma:
1
Se t = x X, ento tA( ) [] = (x).
1 1
Se t = c C, ento tA( ) [] = A( ) (c).

Se fji Fj , t1 , . . . , tj T (1 ) e t = fji (t1 , . . . , tj ), ento


1 1 A(1 ) A(1 )
tA( ) [] = A( ) (fji )(t1 [], . . . , tj []).

Ou seja, o valor de uma funo dado pelo valor do smbolo funcional


aplicado aos valores dos termos que formam os parmetros da funo.

O valor de um termo em um sistema algbrico para uma interpretao


, portanto, sempre um elemento de A desde que, claro, as variveis que
ocorram nesse termo pertenam ao domnio da interpretao de variveis
utilizada. Caso isso no ocorra, o valor do termo indeterminado.
Seja : X A, X V uma interpretao de variveis e X1 V .
Definimos a restrio da interpretao a X1 como a funo

X1 (x) = (x), x X X1 .
X1 : (X X1 ) A,
X1 (x) = indefinido, caso contrrio.

Podemos definir agora quando uma frmula F(1 ) em um sistema


algbrico A(1 ) para uma interpretao verdadeira (denotado como
A(1 ) |= []). Para que seja verdadeira em A(1 ) para , preciso que
ocorra o seguinte:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #129
i i

4 Lgica de Predicados Mondicos 119

1
Se = r(t) F(1 ), ento A(1 ) |= [] equivalente a tA( ) []
1
A( ) (r).

Se = (t1 = t2 ), t1 , t2 T (1 ), ento A(1 ) |= [] equivalente a


A(1 ) A(1 )
t1 [] = t2 [].

Se = , F(1 ), ento A(1 ) |= [] se, e somente se, no for


verdade que A(1 ) |= [].

Se = , , F(1 ), ento A(1 ) |= [] se, e somente se,


A(1 ) |= [] ou A(1 ) |= [].

Se = , , F(1 ), ento A(1 ) |= [] se, e somente se,


A(1 ) |= [] e A(1 ) |= [].

Se = , , F(1 ), ento A(1 ) |= [] se, e somente se,


A(1 ) |= [], ento necessariamente tambm A(1 ) |= [].

Se = x(), F(1 ), ento A(1 ) |= [] se, e somente se, existir


pelo menos uma interpretao de variveis 1 : X1 A tal que x
X1 , 1 L() = L() e A(1 ) |= [1 ].

Se = x(), F(1 ), ento A(1 ) |= [] se e somente se para


qualquer interpretao de variveis i : Xi A tal que x Xi e
i L() = L(), tivermos que A(1 ) |= [i ].

Um caso que merece destaque que: se for uma sentena, ento L() =
. Nesse caso, por definio, nos dois ltimos casos, i L() = L(),
independentemente de qual seja a funo . Se for uma sentena, portanto,
podemos simplificar um pouco a notao e indicar que verdadeira em
A(1 ) (denotado como A(1 ) |= ).
Quando uma sentena no for verdadeira em um sistema algbrico A(1 ),
dizemos que ela falsa em A(1 ).

Exerccios

4.4 Considerar a assinatura 1 = [R1 , C, F1 , F2 ], em que:


R1 = {r1 , r2 }.
C = {a, b, c}.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #130
i i

120 Lgica para Computao

F1 = {f1 }.
F2 = {f2 }.
Considerar tambm os seguintes sistemas algbricos:
1
A1 (1 ) = [A1 , A1 ( ) ].
A1 = {1}
1 1
A1 ( ) (r1 ) = A1 ( ) (r2 ) = {1}
1 1 1
A1 ( ) (a) = A1 ( ) (b) = A1 ( ) (c) = 1
1
A1 ( ) (f1 ) = f : A1 A1 , f(x) = 1
1
A1 ( ) (f2 ) = g : A1 A1 A1 , g(x, y) = x
1
A2 (1 ) = [A2 , A2 ( ) ].
A2 = {1, 2, 3, . . .}
1
A2 ( ) (r1 ) = {1, 3, 5, . . .}
1
A2 ( ) (r2 ) = {2, 4, 6, . . .}
1
A2 ( ) (a) = 1
1
A2 ( ) (b) = 2
1
A2 ( ) (c) = 3
1
A2 ( ) (f1 ) = f : A2 A2 , f(x) = x + 1
1
A2 ( ) (f2 ) = g : A2 A2 A2 , g(x, y) = x + y
Verificar, para as sentenas i a seguir, se A1 (1 ) |= i e se
A2 (1 ) |= i :
x1 (x2 (x3 (r2 (x1 ) (r1 (x2 ) r1 (x3 ) (x1 = f2 (x2 , x3 )))))).
x1 (x2 (r2 (x1 ) (r1 (x2 ) (x1 = f2 (x2 , a))))).
x1 (x2 (r2 (x1 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x1 (x2 (r2 (x1 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x(r1 (x)).
x(r1 (x) r1 (x)).
x(r2 (f1 (x)) r1 (x)).
x(r2 (f1 (x)) r1 (x)).
x((r2 (f1 (x)) r1 (x))).
x(r2 (f1 (x)) r1 (x)).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #131
i i

4 Lgica de Predicados Mondicos 121

4.5 Para cada uma das sentenas do exerccio anterior, construir (se poss-
vel) um sistema algbrico Aj (1 ) tal que no seja verdade que Aj (1 )
|= i .
Seja 1 uma assinatura e F(1 ). Definimos a assinatura 1 restrita a
denotada como 1 () como a assinatura composta unicamente pelos
predicados, constantes e funes de 1 que ocorrerem em .
1
Seja um sistema algbrico A(1 ) = [A, A( ) ]. Definimos como a cardina-
lidade de A(1 ) a quantidade de elementos de A. Denotamos a cardinalidade
de A(1 ) como |A(1 )|.
Uma sentena n-verdadeira, n < , se A(1 ()) |= para qualquer
sistema algbrico de assinatura () cuja cardinalidade seja menor ou igual
a n. Denotamos esse conceito como |=n .
Uma sentena denominada simplesmente verdadeira se A(1 ()) |=
para qualquer sistema algbrico de assinatura (), independentemente da
cardinalidade. Denotamos esse conceito como |= .

Exerccios

4.6 Demonstrar que existe um algoritmo que, para qualquer sentena ,


permite determinar em um nmero finito de passos se |=n para
qualquer n, 0 < n < .

4.7 (Extrado de Ershov e Paliutin, 1990) Demonstrar que a sentena a


seguir n-verdadeira para qualquer n, 0 < n < , mas no
verdadeira:

x1 (x2 ((f(x2 ) = x1 ))) x3 (x4 ((f(x3 ) = f(x4 )) (x3 = x4 )))

Nas prximas sees, estudaremos mtodos sistemticos para verificar se


uma dada sentena verdadeira, bem como a possibilidade de automatizar
esses procedimentos na forma de programas de computador. Um ltimo
resultado importante que apresentamos na presente seo um teorema
que ser til nas sees seguintes. Apresentamos o teorema, mas no a sua
demonstrao, que estaria fora do escopo deste livro. Algumas sugestes de
livros em que a demonstrao desse teorema pode ser encontrada esto na
seo de Notas Bibliogrficas (Seo 4.8).
Um sistema algbrico A(1 ) um modelo de um conjunto de sentenas
se A(1 ) |= para qualquer . Se tiver pelo menos um modelo,

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #132
i i

122 Lgica para Computao

dizemos que satisfazvel. Dizemos ainda que localmente satisfazvel se


todo subconjunto finito de tiver pelo menos um modelo.

Teorema 4.3.1 teorema da compacidade Se um conjunto de sentenas for


localmente satisfazvel, ento ele tambm ser satisfazvel.

4.4 Deduo Natural


Iniciemos com o conceito de substituio de variveis. Seja 1 uma assinatura,
t1 , . . . , tn T (1 ), F(1 ) e as variveis x1 , . . . , xn V . Assumimos
que as variveis xi sejam distintas duas a duas, mas entre os termos ti
podem ocorrer repeties. Assumimos ainda que, se tiver uma subfrmula
de forma x 0 ( 0 ) ou de forma x 0 ( 0 ) e se xi L() ocorrer dentro
dessa subfrmula, ento x 0 6 ti . A frmula [x1 := t1 , . . . , xn := tn ]
obtida substituindo as variveis livres entre x1 , . . . , xn pelos termos de mesmo
ndice.
Por exemplo, se = x1 (r1 (x1 ) r1 (x2 )), ento [x1 := f21 (c1 , x1 ), x2 :=
f21 (c2 , x2 )] = x1 (r1 (x1 ) r1 (f21 (c2 , x2 ))). Deve ser observado que a varivel
x1 no substituda pelo termo correspondente, pois ela no pertence a L().
Como um segundo exemplo, se = r1 (x1 ) x2 (r1 (f21 (x1 , x2 ))), ento
pode ser efetuada a substituio [x1 := c1 ] gerando a frmula [x1 := c1 ] =
r1 (c1 ) x2 (r1 (f21 (c1 , x2 ))) , mas no pode ser efetuada a substituio
[x1 := x2 ]. Intuitivamente, uma substituio aplicada a uma frmula gera
um caso particular daquela frmula, mas no deve impor condies na
frmula gerada que j no estivessem presentes na frmula inicial. Uma
leitura informal de nesse ltimo caso poderia ser se um valor de x1
pertencer ao conjunto determinado por r1 , ento existe pelo menos um
valor de x2 tal que o resultado da funo f21 (x1 , x2 ) tambm pertencer
ao mesmo conjunto. A frmula [x1 := c1 ] particulariza para quando
o valor de x1 for igual a c1 , ou seja se c1 pertencer ao conjunto determinado
por r1 ento existe pelo menos um valor de x2 tal que o resultado da
funo f21 (c1 , x2 ) tambm pertencer ao mesmo conjunto. J a frmula
= r1 (x2 ) x2 (r1 (f21 (x2 , x2 ))), que seria obtida pela aplicao errnea
da regra de substituio delineada anteriormente, exige a leitura se um valor
de x2 pertencer ao conjunto determinado por r1 , ento existe um valor que
pode ser substitudo como os dois parmetros da funo f21 , e o resultado
dessa funo tambm pertencer ao conjunto determinado por r1 .

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #133
i i

4 Lgica de Predicados Mondicos 123

Exerccio

4.8 Efetuar as substituies apropriadas nas frmulas a seguir:


r1 (x1 ) r2 (x2 ) r1 (f21 (x1 , x2 )), [x1 := a, x2 := b].
r1 (x1 ) x2 (r1 (f21 (x1 , x2 ))), [x1 := a, x2 := b].
r1 (x1 ) x2 (r1 (f21 (x1 , x2 ))), [x1 := x2 , x2 := x1 ].
r1 (x1 ) x2 (r1 (f21 (x1 , x2 ))), [x1 := f(x1 )].
r1 (x1 ) x2 (r1 (f21 (x1 , x2 ))), [x2 := f(x1 )].

Sejam agora as frmulas arbitrrias 1 , . . . , n , 1 , n > 1. Definimos


os seqentes em 1 como quaisquer expresses com uma das formas a seguir:

1 , . . . , n ` .

1 , . . . , n `.

` .

`.

Definimos os axiomas em 1 como todos os seqentes com os formatos a


seguir:

` , F(1 ).

` (x = x), x V .

(x1 = x2 ), [x3 := x1 ] ` [x3 := x2 ], x1 , x2 , x3 V , supondo que essas


substituies sejam possveis.

O sistema de deduo natural para 1 formado pelas 16 regras a seguir,


em que , , , 1 , . . . , n F(1 ), n > 1, x V , t T (1 ) e , so listas
de frmulas, possivelmente vazias:

1. ``; `

2. `
`

3. `
`

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #134
i i

124 Lgica para Computao

`
4. `
`
5. `

6. , ` ; , ` ; `
`

7. `, `

8. ` ; ``

9. ,
`
`

10. ` ; ``

11. ,, , , `
, , `

12. ,``

13. ` , assumindo que x 6 L( ),


i i
` x()
, [x := t] `
14.
, x() `
` [x := t]
15.
` x()
, `
16. , assumindo que x 6 L(i ), i e x 6 L()
, x() `

Cada uma das regras desse sistema de deduo prescreve uma forma de
construo de novos seqentes a partir de seqentes anteriores. A demons-
trao de um seqente C uma rvore de seqentes em que as folhas so
axiomas, a raiz o seqente C e os seqentes intermedirios so construdos
utilizando as regras anteriores.
Se existir uma demonstrao de um seqente C, ento esse seqente recebe
o nome de teorema. Mais adiante, veremos a relao entre os teoremas e os
sistemas algbricos da assinatura de .
Intuitivamente, podemos observar que as regras anteriores de 1 a 10
servem para acrescentar ou para eliminar um conectivo (, , , ). As

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #135
i i

4 Lgica de Predicados Mondicos 125

regras de nmeros 11 e 12, que no acrescentam nem eliminam elementos da


linguagem, so denominadas regras estruturais do sistema dedutivo. As regras
de 13 a 16 manipulam os quantificadores (, ), permitindo a sua insero
esquerda ou direita nos seqentes.
Por exemplo, consideremos o seguinte seqente:

x1 (x2 (x3 ((r1 (x1 ) r1 (x2 ))


(r1 (x1 ) r1 (x3 ))))) `x1 (x2 (x3 (r1 (x1 ) (r1 (x2 ) r1 (x3 )))))

Ele pode ser demonstrado da seguinte forma, em que abreviamos em


alguns pontos a sentena (r1 (a) r1 (b)) (r1 (a) r1 (c)) como para
tornar a demonstrao um pouco mais concisa (na prxima pgina):

Exerccios

4.9 Construir demonstraes para os seguintes seqentes:


x(r1 (x) r2 (x)) ` x(r2 (x) r1 (x)).
r1 (a), r1 (b) ` r1 (a) r1 (b).
` x1 (x2 (r1 (x1 ) (r1 (x2 ) r1 (x1 )))).
r1 (a) r1 (a) `.

4.10 Comparar as regras anteriores de 1 a 10 com as regras da Figura 2.2.


Voc deve notar que, na verdade, as duas notaes so equivalentes.
Optamos por uma notao distinta neste captulo por um motivo
didtico, para expor o leitor s notaes mais comumente encontradas
em outros textos. Ademais, essa segunda notao explicita as regras
estruturais (regras 11 e 12), que so freqentemente alteradas para
produzir lgicas no-clssicas, que podem ser, inclusive, de interesse
da cincia da computao. Por exemplo, se eliminarmos essas duas
regras (que esto implcitas na notao da Figura 2.2), os conjuntos de
frmulas esquerda dos seqentes passam a ser listas de frmulas, em
que a ordem e a quantidade de repeties de cada frmula se tornam
relevantes.

N.A. Essa demonstrao no nica. O leitor pode tentar, como exerccio, construir uma
demonstrao diferente.

i i

i i
i
i

i
i

126

r1 (a) ` r1 (a) ` r1 (a) ` r1 (a) `


r1 (a), ` r1 (a) ` r1 (a) r1 (b) r1 (a), ` r1 (a) ` r1 (a) r1 (c)
Lgica para Computao

, r1 (a) ` r1 (a) , r1 (a) ` r1 (a) r1 (b) , r1 (a) ` r1 (a) ` r1 (a), r1 (a) r1 (c)
, r1 (a) ` r1 (b) , r1 (a) ` r1 (c)
, r1 (a) ` r1 (b) r1 (c)
(r1 (a) r1 (b)) (r1 (a) r1 (c)) ` r1 (a) (r1 (b) r1 (c))
x3 ((r1 (a) r1 (b)) (r1 (a) r1 (x3 ))) ` r1 (a) (r1 (b) r1 (c))
x2 (x3 ((r1 (a) r1 (x2 )) (r1 (a) r1 (x3 )))) ` r1 (a) (r1 (b) r1 (c))
x1 (x2 (x3 ((r1 (x1 ) r1 (x2 )) (r1 (x1 ) r1 (x3 ))))) ` x3 (r1 (a) (r1 (b) r1 (x3 )))
x1 (x2 (x3 ((r1 (x1 ) r1 (x2 )) (r1 (x1 ) r1 (x3 ))))) ` x2 (x3 (r1 (a) (r1 (x2 ) r1 (x3 )))
x1 (x2 (x3 ((r1 (x1 ) r1 (x2 )) (r1 (x1 ) r1 (x3 ))))) `x1 (x2 (x3 (r1 (x1 ) (r1 (x2 ) r1 (x3 )))))
Lgica para Computao PROVA 4 4/7/2006 #136

i
i

i
i
i i
Lgica para Computao PROVA 4 4/7/2006 #137
i i

4 Lgica de Predicados Mondicos 127

Podemos tambm estender nossa linguagem com as propriedades mate-


mticas usuais do smbolo de igualdade, fazendo uso dos seguintes seqentes:

` (t = t), t T (1 ).

(t1 = t2 ) ` (t2 = t1 ), t1 , t2 T (1 ).

(t1 = t2 ), (t2 = t3 ) ` (t1 = t3 ), t1 , t2 , t3 T (1 ).

(t10 = t100 ), . . . , (tn0 = tn00 ) ` t[x1 := t10 , . . . , xn := tn0 ] = t[x1 :=


t100 , . . . , xn := tn00 ], t, t10 , . . . , tn0 , t100 , . . . , tn00 T (1 ).

(t10 = t100 ), . . . , (tn0 = tn00 ), [x1 := t10 , . . . , xn := tn0 ] ` [x1 :=


t100 , . . . , xn := tn00 ], t, t10 , . . . , tn0 , t100 , . . . , tn00 T (1 ), F(1 ) e assu-
mindo que as duas substituies possam ser efetuadas em .

Vamos agora definir a relao desejada entre os teoremas e a noo de


verdade relativa a sistemas algbricos vista na seo anterior. Sejam 1 uma
assinatura de predicados mondicos, C um seqente cujas frmulas perten-
am a F(1 ), A(1 ) um sistema algbrico e : V A uma interpretao de
variveis. As seguintes condies so requeridas para que C seja um seqente
verdadeiro em A(1 ) para :

Se C = ` , exigido que A(1 ) |= [] ou que A(1 ) |= []


para pelo menos uma frmula pertencente a (observao: pode
ser uma lista vazia de frmulas).

Se C = `, exigido que A(1 ) |= [] para ao menos uma frmula


pertencente a .

Se um seqente C no for verdadeiro em A(1 ) para , ele denominado


falso. Em particular, das duas exigncias anteriores, podemos concluir que
o seqente vazio (`) falso em qualquer sistema algbrico e para qualquer
interpretao de variveis.
Um seqente C denominado simplesmente verdadeiro se for verdadeiro
em qualquer sistema algbrico e para qualquer interpretao de variveis.
O resultado natural esperado uma correspondncia entre teoremas e
seqentes verdadeiros. Esse resultado foi demonstrado por Kurt Gdel:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #138
i i

128 Lgica para Computao

Teorema 4.4.1 teorema da correo e completude O conjunto de seqentes


que so teoremas coincide com o conjunto de seqentes que so ver-
dadeiros.
Na Seo 4.6 analisaremos com mais detalhes esse resultado importante
e til da lgica matemtica. Antes disso, estudaremos um segundo sistema
dedutivo.

4.5 Axiomatizao
O sistema dedutivo da seo anterior tem uma estratgia de construo, que
fazer uso de uma pequena quantidade de axiomas bastante simples e cons-
truir as propriedades desejadas para os elementos da linguagem (conectivos
e quantificadores) por meio das regras de deduo. Com isso, temos poucos
esquemas de axiomas e uma maior quantidade de regras.
A possibilidade inversa fazer uso de uma pequena quantidade de regras,
que sejam mantidas to simples quanto possvel, com a natural contrapartida
de precisar de axiomas mais sofisticados e em maior quantidade, que levem
s mesmas propriedades para os elementos da linguagem.
Consideremos, por exemplo, o seguinte seqente:

r1 (c) r2 (c) ` r2 (c) r1 (c)

Esse seqente um teorema, o que pode ser comprovado pela demonstra-


o a seguir:
r1 (c) r2 (c) ` r1 (c) r2 (c) r1 (c) r2 (c) ` r1 (c) r2 (c)
r1 (c) r2 (c) ` r2 (c) r1 (c) r2 (c) ` r1 (c)
r1 (c) r2 (c) ` r2 (c) r1 (c)

Nessa demonstrao, foram utilizadas as regras de nmeros (1), (2) e (3)


do sistema de deduo natural visto na seo anterior. Se essas regras forem
eliminadas do sistema dedutivo, que axiomas precisam ser includos para que
o seqente continue sendo um teorema?
Essa pergunta poderia ser respondida de muitas maneiras distintas. Es-
colhemos aqui uma resposta que melhor se adapta ao sistema dedutivo que
apresentaremos a seguir. Inicialmente observamos que simples demonstrar,
usando as regras de nmeros (7) e (8) do sistema de deduo natural, que o
seguinte resultado vlido:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #139
i i

4 Lgica de Predicados Mondicos 129

Teorema 4.5.1 teorema da deduo Um seqente ` um teorema, =


1 , . . . , n , n > 1, em que , i so frmulas se, e somente se, o seqente
` 1 (2 (. . . (n ) . . .) tambm o for.

Exerccio

4.11 (Difcil) demonstrar o teorema da deduo.

Portanto, a pergunta anterior equivalente a perguntar quais axiomas


precisam ser includos em substituio s regras de nmeros (1), (2) e (3)
do sistema de deduo natural, para que o seqente ` r1 (c) r2 (c)
r2 (c) r1 (c) seja um teorema.
Se considerarmos como axiomas adicionais todos os seqentes com os
seguintes formatos:

` ( ) .

` ( ) .

` ( ) (( ) ( ( ))).

em que , e so frmulas, ento podemos construir a seguinte demons-


trao:
` r1 (c)r2 (c) r2(c) ` (r1 (c)r2 (c) r2(c))
((r1 (c)r2 (c) r1 (c)) (r1(c)r2 (c) r2 (c) r1 (c)))
` r1 (c)r2 (c) r1(c) ` (r1 (c)r2 (c) r1(c)) (r1(c)r2 (c) r2 (c) r1 (c))
` r1 (c) r2 (c) r2 (c) r1 (c)

Seja 1 uma assinatura e as frmulas arbitrrias 1 , . . . , n , 1 , n > 1.


Pode-se demonstrar que os seqentes definidos na seo anterior podem ser,
respectivamente, reescritos para as formas a seguir:

` 1 (. . . (n ) . . .).

` 1 . . . n .

` .

`.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #140
i i

130 Lgica para Computao

Exerccio

4.12 Demonstrar esse resultado.

Definimos para esses seqentes um novo conjunto de axiomas em 1 ,


como sendo todos os seqentes com os formatos a seguir:

1. ` ( ), , F(1 )

2. ` ( ) (( ( )) ( )), , , F(1 )

3. ` ( ) , , F(1 )

4. ` ( ) , , F(1 )

5. ` ( ) (( ) ( ( ))), , , F(1 )

6. ` ( ), , F(1 )

7. ` ( ), , F(1 )

8. ` ( ) (( ) (( ) )), , , F(1 )

9. ` ( ) (( ) ), , F(1 )

10. ` , F(1 )

11. ` x() [x := t], F(1 ), x V , t T (1 ) e assumindo que


essa substituio seja permitida

12. ` [x := t] x(), F(1 ), x V , t T (1 ) e assumindo que


essa substituio seja permitida

13. ` (x = x), x V

14. ` (x1 = x2 ) ([x3 := x1 ] [x3 := x2 ]), x1 , x2 V , F(1 ) e


assumindo que essas substituies sejam permitidas

O sistema axiomtico de deduo para 1 formado pelos 14 axiomas e


pelas trs regras a seguir, em que , F(1 ) e x V :

1. ` `
`

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #141
i i

4 Lgica de Predicados Mondicos 131

2.
x()


3.
x()

O teorema enunciado a seguir determina uma noo de equivalncia entre


o sistema de deduo natural visto na seo anterior e o sistema axiomtico
de deduo apresentado anteriormente. Uma demonstrao elegante e con-
cisa desse teorema pode ser encontrada em Ershov e Paliutin (1990):

Teorema 4.5.2 teorema da equivalncia entre sistemas dedutivos Seja 1 uma


assinatura e ` um seqente, F(1 ). Esse seqente ser um
teorema no sistema de deduo natural se e somente se for tambm
um teorema no sistema axiomtico de deduo.
Com essa amostra, apresentamos a possibilidade de codificar a noo de
demonstrao de diferentes maneiras para um mesmo conjunto de frmulas,
de forma que os teoremas demonstrados nas diferentes codificaes coin-
cidam. A escolha de qual codificao utilizar depende das preferncias e
objetivos de quem estiver utilizando a lgica. Por exemplo, comumente
aceito que sistemas como o sistema de deduo natural, apresentado na seo
anterior, so apropriados para estudar propriedades das demonstraes,
que so colocadas como o elemento central do sistema. Uma propriedade
interessante, por exemplo, se uma dada demonstrao de um teorema
a mais curta possvel (ou seja, a que utiliza o menor nmero de regras
de deduo), o que traduz uma noo intuitiva de simplicidade: como as
propriedades dos elementos da linguagem esto codificadas nas regras, o
menor uso de regras indica que a demonstrao usa essas propriedades de
forma mais econmica. Por outro lado, se o interesse a construo
de um programa para demonstrar teoremas, ento sistemas como o sistema
axiomtico, apresentado nesta seo, podem ser preferidos, pois o principal
a ser implementado nesses programas so justamente as regras de deduo
que podem ser vistas como procedimentos para gerar novos seqentes a
partir dos anteriormente encontrados ou fornecidos e, portanto, quanto
menos regras, mais fcil deve ser construir um programa.
Quanto construo de programas para demonstrar teoremas, discusses
mais detalhadas sero apresentadas na Seo 4.7 e no prximo captulo.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #142
i i

132 Lgica para Computao

Exerccio

4.13 Demonstrar os teoremas a seguir, usando tanto o sistema de deduo


natural como o sistema axiomtico de deduo:
` (r1 (c) r2 (c)) (r2 (c) r1 (c)).
` x((r1 (x) r2 (x)) (r2 (x) r1 (x))).
` r1 (a) (r1 (b) (r1 (a) r1 (b))).
` x1 (x2 (r1 (x1 ) (r1 (x2 ) r1 (x1 )))).
` (r1 (a) r1 (a)).
` (r1 (c) (r2 (c) r3 (c))) ((r1 (c) r2 (c))
(r1 (c) r3 (c))).
` (x1 (r1 (x1 ) r2 (x1 ))) (x2 (r1 (x2 ))) (x3 (r2 (x3 ))).
` (x1 (x2 (r1 (x2 ) r2 (x1 )))) (x3 (r1 (x3 )))
(x4 (r2 (x4 ))).
` (x1 (r1 (x1 ) r2 (x1 ))) (x2 (r1 (x2 ) r2 (x2 ))).
` r(c) x((x = c) r(x)).
` (x1 (x2 (r1 (x1 ) r2 (x2 )))) (x3 (x4 (r1 (x4 ) r2 (x3 )))).

4.6 Correo e Completude


Voltemos agora ao Teorema 4.4.1 teorema da correo e completude
enunciado no final da Seo 4.4:

O conjunto de seqentes que so teoremas coincide com o conjunto


de seqentes que so verdadeiros.

Graas ao Teorema 4.5.2 teorema da equivalncia entre sistemas dedutivos


tanto faz qual sistema dedutivo entre os dois vistos neste captulo adotemos
para demonstrar o teorema da correo e completude. Podem ser encontra-
das na literatura demonstraes utilizando qualquer um dos dois sistemas,
alm de outros sistemas dedutivos que tambm so equivalentes a esses dois
(usando a mesma noo de equivalncia adotada no Teorema 4.5.2).
A demonstrao se divide em duas partes, que do nome ao teorema e a
esta seo. A primeira parte correo determina se todos os teoremas so
verdadeiros. A segunda parte completude determina se existe pelo menos
uma demonstrao para cada um dos seqentes verdadeiros.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #143
i i

4 Lgica de Predicados Mondicos 133

Teorema 4.6.1 correo do sistema de deduo natural Todo teorema ver-


dadeiro.

Demonstrao: Da definio de teorema, depreendemos que um teorema


sempre um axioma ou o resultado da aplicao de uma regra de
deduo em um teorema anterior (ou seja, a linha superior de uma
regra de deduo em uma demonstrao sempre um teorema). Por-
tanto, a demonstrao desse teorema se limita a demonstrar que todos
os axiomas so verdadeiros e que, assumindo por hiptese em cada regra
que a linha superior verdadeira, decorre que a linha inferior tambm
verdadeira.
Apresentaremos a demonstrao para um axioma e para uma regra
de deduo e deixaremos os axiomas e regras de deduo restantes como
exerccio. Alertamos, entretanto, que esse exerccio difcil.
Consideremos, por exemplo, o axioma ` , F(1 ). Para que
esse seqente seja verdadeiro, preciso que A(1 ) |= [] ou, ento,
que A(1 ) |= [] para qualquer sistema algbrico A(1 ) e qualquer
interpretao de variveis . Essa segunda condio equivalente a
exigir que no seja verdade que A(1 ) |= []. Portanto, o seqente
necessariamente verdadeiro, independentemente do sistema algbrico,
da interpretao ou da estrutura de formao da frmula .
Consideremos agora, como exemplo de regra, a regra (4):

`
.
`

Assumindo que o seqente ` seja verdadeiro, ento, para cada


sistema algbrico A(1 ) e para cada interpretao de variveis , A(1 )
|= [], ou ento A(1 ) |= [] para pelo menos uma frmula
pertencente a .
Para que o seqente ` seja verdadeiro, preciso que, para
cada sistema algbrico A(1 ) e para cada interpretao de variveis ,
A(1 ) |= ( )[], ou ento A(1 ) |= [] para pelo menos
uma frmula pertencente a . A segunda condio garantida por
hiptese, portanto resta apenas verificar se, para cada sistema algbrico
A(1 ) e para cada interpretao de variveis , temos que A(1 ) |=
( )[]. Mas essa condio tambm garantida pela hiptese.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #144
i i

134 Lgica para Computao

Exerccio

4.14 (Difcil) Completar a demonstrao anterior para os axiomas e regras


de deduo restantes.

Demonstraremos o resultado de completude para o sistema de deduo


natural restrito aos seqentes de forma ` , no qual uma frmula. Isso
no restringe o resultado obtido, uma vez que o Teorema 4.5.1 teorema da
deduo garante que qualquer seqente pode ser reescrito dessa forma.

Teorema 4.6.2 completude do sistema de deduo natural Todo seqente da


forma ` que for verdadeiro um teorema.
Apresentamos a seguir um esboo de demonstrao para esse teorema.
Diversos detalhes no triviais so omitidos, embora indiquemos nas notas
bibliogrficas onde eles podem ser encontrados. O objetivo dessa apresenta-
o exibir a estrutura geral da demonstrao.

Demonstrao: Precisamos de um conceito auxiliar. Uma lista de frmulas


de uma assinatura 1 inconsistente se o seqente ` for um teorema e
todas as frmulas em ocorrerem tambm em . Caso contrrio,
uma lista consistente.
Vamos verificar se ser consistente condio suficiente para ga-
rantir que tem pelo menos um modelo. O Teorema 4.3.1 teorema
da compacidade garante que, se for localmente satisfazvel, ento
tambm ser satisfazvel. Portanto, para verificar se tem um modelo,
basta analisar as sublistas finitas de frmulas = [1, . . . , m ] .
Para cada sublista , consideremos 1 = [R1 , C, F1 , . . . , FN ], N <
como a assinatura restrita aos smbolos que ocorrem em , que tambm
necessariamente finita.
Um resultado cuja demonstrao no detalharemos aqui que: se
tiver pelo menos um modelo, ento a sentena x1 (x2 (. . . xn (1
. . . m ) . . .) ser verdadeira, em que m i=1 L(i ) = {x1 , . . . , xn }.
S

Seja D = {d1 , d2 , . . .} um conjunto de constantes distintas duas a duas,


tal que D C = . Seja 1D = [R1 , C D, F1 , . . . , FN ], N < , e seja
{0 , 1 , 2 , . . .} o conjunto de sentenas da assinatura 1D .
Seja agora uma coleo de conjuntos de sentenas de 1D construda
da seguinte forma. A coleo denotada como 0 , 1 , . . .:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #145
i i

4 Lgica de Predicados Mondicos 135

0 = . Como consistente, depreende-se que 0 tambm o .


Se n {n } for inconsistente, ento n+1 = n {n }.
Se n {n } for consistente e n no for da forma x( 0 n ), ento
n+1 = n {n }.
Se n {n } for consistente e n for da forma x( 0 n ), ento
n+1 = n {n , 0 n [x := dk ]}, em que dk D e k o menor
ndice tal que dk no ocorre em n {n }.

Seja agora = i=0,1,... i . Considerando todas as sentenas da


S

forma (di = dj ) , di , dj D, pode ser facilmente observado


que essas sentenas organizam o conjunto D em classes de equivalncia
(isso decorre das propriedades do smbolo de igualdade apresentadas
na Seo 4.4). De cada classe de equivalncia, denotamos como d
um representante escolhido arbitrariamente. Finalmente, seja o sistema
1
algbrico A(1 ) = [A, A( ) ] da assinatura 1D , tal que:

A = {d : d D}.
1
A( ) (d) = d, d D.
1
d A( ) (r), r R1 se, e somente se, r(d) .
1
Se fj Fj , ento A( ) (fj )(d1 , . . . , dj ) = d se, e somente se,
(fj (d1 , . . . , dn ) = d) .

Pode ser demonstrado que esse sistema algbrico um modelo de .


Como , esse sistema tambm um modelo de . Dessa forma,
satisfazvel.
Como esse resultado no requer qualquer propriedade especfica a
respeito de , ele vale para qualquer sublista finita de frmulas de .
Assim, localmente satisfazvel e, portanto, tambm satisfazvel.
Ou seja, se for consistente, ento tambm ser satisfazvel. Em
outras palavras, se for insatisfazvel, ento ser necessariamente
inconsistente.
Consideremos agora o seqente ` . Se a frmula for verdadeira,
ento a frmula ser insatisfazvel. Pelo resultado anterior, essa
frmula ser inconsistente, ou seja, existir uma demonstrao de `.
Usando a regra (9) do sistema de deduo natural, decorre de imediato

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #146
i i

136 Lgica para Computao

que existir tambm uma demonstrao de ` , que o resultado


desejado.

Exerccio

4.15 Pesquisar na literatura especializada e completar os detalhes das de-


monstraes nessa seo.

4.7 Decidibilidade e Complexidade

At aqui o fato de termos restringido a lgica aos predicados mondicos


no tinha sido explorado. O motivo apresentado para essa restrio tinha
sido o fato de que, mesmo assim, essa lgica j bem mais expressiva
que a lgica proposicional, permitindo a caracterizao de diversos pro-
blemas interessantes para cientistas de computao (como, por exemplo,
algumas teorias simples de tipos).
Nesta seo, apresentaremos um resultado interessante, que ser comple-
mentado no prximo captulo: a satisfazibilidade de sentenas na lgica de
predicados mondicos decidvel ou seja, podemos construir um programa
de computador que, dada uma sentena nessa lgica, responde SIM se a
sentena for satisfazvel ou NO em caso contrrio mas, se quisermos tor-
nar essa lgica apenas um pouquinho mais expressiva, acrescentando-lhe
predicados polidicos, a satisfazibilidade se tornar indecidvel, ou seja, passa
a ser impossvel construir um programa como esse.
Existe um preo a pagar, entretanto, pela maior expressividade da lgica
de predicados mondicos em comparao com a lgica proposicional, que
a complexidade computacional associada ao problema da satisfazibilidade
nessa lgica. A lgica vista neste captulo uma extenso da lgica propo-
sicional, portanto no surpreendente que o problema da satisfazibilidade
para essa lgica tambm seja NP-completo. A sua complexidade, entretanto,
significativamente maior que no caso da lgica proposicional, ou seja, alm
de os recursos computacionais requeridos para resolver o problema da satis-
fazibilidade crescerem exponencialmente com uma medida de complexidade
da sentena analisada, eles crescem com uma velocidade muito maior que no
caso da lgica proposicional.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #147
i i

4 Lgica de Predicados Mondicos 137

Rigorosamente falando, preciso restringir um pouco mais a lgica de


predicados mondicos para que a satisfazibilidade se torne decidvel. Deno-
minamos de assinatura de predicados mondicos pura a assinatura

1P = [R1 , C, F1 , F2 , . . . , FN ], N <

em que C = F1 = . . . = FN = .
Nesse caso, o conjunto de termos T (1P ) coincide com o conjunto de
variveis V = {x1 , x2 , . . .}.
Uma sentena F(1P ) necessariamente se enquadra em uma das
seguintes categorias:

verdadeira, ou seja, A(1P ) |= em qualquer sistema algbrico


A(1P ). Nesse caso, pelo teorema da completude, existe a garantia de
que ` um teorema.

falsa, ou seja, para nenhum sistema algbrico A(1P ) temos que


A(1P ) |= . Nesse caso, tambm pelo teorema da completude, existe a
garantia de que ` um teorema.

satisfazvel, ou seja, existem sistemas algbricos A(1P ) tais que


A(1P ) |= , mas tambm existem A 0 (1P ) para os quais no temos
que A 0 (1P ) |= . Nesse caso, no temos como teorema ` nem
` . O problema detectar essa situao e saber que no vale a pena
continuar tentando demonstrar um desses seqentes.

Suponha que tenhamos a garantia de que, se uma sentena tiver um


ou mais modelos, ela necessariamente ter pelo menos um modelo cuja
cardinalidade ser menor que ou igual a um valor conhecido m. Nesse
1
caso, podemos gerar todos os sistemas algbricos Ai (1P ) = [AP , PAi (P ) ]
tais que |Ai (1P )| 6 m e verificar se Ai (1P ) |= para algum Ai (1P ).
Essa garantia, portanto, nos permitiria afirmar que a satisfazibilidade dessa
lgica decidvel, bem como delimitaria o tamanho do espao de busca para
determinar se satisfazvel. Esse espao de busca corresponderia a todas as
possibilidades de colocao dos elementos de AP em cada um dos conjuntos
1
PAi (P ) (ri ), ri ocorrendo em , ou seja, 2m .
Esse resultado, de fato, j foi demonstrado. Apresentamos a seguir a cons-
truo desses sistemas algbricos, mas omitimos a demonstrao de que,

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #148
i i

138 Lgica para Computao

se tiver um modelo, ento ter pelo menos um modelo Ai (1P ) =


1
[AP , PAi (P ) ] tal que |Ai (1P )| 6 m.
Suponha que os predicados que ocorrem em sejam r11 , . . . , r1k e que as
variveis que ocorrem em sejam x1 , . . . , xr . Por hiptese, tem pelo menos
1
um modelo. Suponha que B(1P ) = [B, B(P ) ] seja um modelo de (em
que B no seja necessariamente um conjunto finito).
Para cada b B, seja (b) = [1 , . . . , k ], em que cada i {>, } indica o
1 1
seguinte: se i = >, ento b B(P ) (r1i ), e se i = , ento b 6 B(P ) (r1i ).
Independentemente da cardinalidade de B, existem no mximo 2k tuplas
distintas da forma [1, . . . , k ].
Agrupemos os elementos de B em 2k classes de equivalncia da seguinte
forma: bi e bj B pertencero mesma classe de equivalncia se (bi ) =
(bj ). Selecionemos, agora, de cada classe de equivalncia, s elementos arbi-
trrios, em que s = min{r, cardinalidade da classe de equivalncia}. Denote-
mos o conjunto de elementos selecionados como D. A cardinalidade de D
1
|D| 6 2k r. Seja agora o sistema algbrico D(1P ) = [D, D(P ) ], no qual
1 1
d D(P ) (r1i ) se, e somente se, d B(P ) (r1i ), d D, i = 1, . . . , k.
Pode ser demonstrado que D(1P ) modelo de . Portanto, dada uma
sentena F(1P ) com k predicados e r variveis, a verificao de sa-
tisfazibilidade requer a inspeo de todos os possveis sistemas algbricos
construdos como D(1P ), o que, no pior caso, significa inspecionar 22 r
k

sistemas algbricos.
Conforme prometido, obtivemos, dessa forma, que o problema da sa-
tisfazibilidade para a lgica de predicados mondicos com assinatura pura
decidvel. Entretanto, conforme tambm previsto, a sua complexidade
computacional alta. Para ilustrar o quanto mais de trabalho pode ser
necessrio para verificar a satisfazibilidade de uma sentena nessa lgica, em
comparao com a lgica proposicional, consideremos a seguinte sentena
proposicional
((p1 p2 ) p3 ) (p4 p5 )

O conjunto de valoraes que precisam ser inspecionadas para verificar a


satisfazibilidade dessa sentena tem cardinalidade 25 = 32.
Consideremos agora a seguinte sentena com predicados mondicos de
uma assinatura pura

(x1 (x2 (x3 ((p1 (x1 )p2 (x2 ))p3 (x3 ))))) (x4 (x5 (p4 (x4 )p5 (x5 ))))

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #149
i i

4 Lgica de Predicados Mondicos 139

O conjunto de sistemas algbricos que precisam ser inspecionados para


5
verificar a satisfazibilidade dessa sentena tem cardinalidade 22 5 = aproxi-
madamente 1, 46 1048 .

4.8 Notas Bibliogrficas


Existem muitos bons livros introdutrios que apresentam a lgica de pre-
dicados de forma dirigida a matemticos. Dentre eles, destacamos os livros
de Shoenfield (2001) e de Mendelson (1987). Um livro-texto excelente sobre
esse mesmo assunto e com o mesmo enfoque o de Ershov e Paliutin (1990),
j mencionado ao longo do captulo. Infelizmente, com a falncia da editora
Mir, esse livro se tornou difcil de encontrar.
Os resultados de decidibilidade e de complexidade do problema da satisfa-
zibilidade para a lgica de predicados mondicos com assinatura pura podem
ser encontrados no livro de Boolos e Jeffrey (1989). Um texto introdutrio so-
bre decidibilidade o livro de Epstein e Carnielli (2000). Esse livro bastante
acessvel, embora a organizao pouco convencional do texto dificulte a sua
leitura em alguns pontos.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #150
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #151
i i

5 Lgica de Predicados
Polidicos

5.1 Introduo
Vamos retomar um dos exemplos de motivao apresentados no captulo
anterior, na Seo 4.1. Consideremos a sentena o filho de qualquer pessoa
que pratica esportes tem boa sade. J utilizando a notao da lgica de
predicados mondicos, se a funo unria f1 : T (1 ) T (1 ) denotar a
relao filho de, o predicado r11 denotar pratica esportes e o predicado r12
denotar tem boa sade, podemos escrever

x(r11 (x) r12 (f1 (x))).

Est implcito nessa sentena que ningum pode ter mais de um filho, caso
contrrio a relao f1 deixaria de ser uma funo. Para que admitamos a
condio de algum ter vrios filhos, poderamos transformar a funo f1
em uma relao r2 T (1 )2 , para ento escrever

x1 (x2 ((r11 (x1 ) r2 (x1 , x2 )) r12 (x2 )).

O problema que agora precisamos de um predicado didico, que est


alm da linguagem vista no captulo anterior.
Os predicados mondicos caracterizam atributos associados a termos in-
dividuais, e os predicados polidicos (didicos, tridicos etc.) caracterizam
relaes entre os termos. Por esse motivo, freqentemente a lgica de predi-
cados mondicos denominada lgica de atributos, e a lgica de predicados
polidicos denominada lgica de relaes.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #152
i i

142 Lgica para Computao

A alterao na lgica, para passar da linguagem de predicados mondicos


para a linguagem de predicados polidicos, mnima: basta admitirmos
na linguagem esses novos predicados. O poder expressivo da linguagem,
entretanto, drasticamente ampliado. Embora a maioria dos resultados
do captulo anterior seja preservada no caso dos predicados polidicos, o
aumento da expressividade se manifesta vigorosamente na alterao dos
resultados atingveis de decidibilidade e complexidade.
Nas prximas sees, apresentaremos as alteraes decorrentes da incluso
dos predicados polidicos. Na medida do possvel, replicaremos neste cap-
tulo a estrutura de sees do captulo anterior, para facilitar a comparao
entre as duas lgicas.

5.2 A Linguagem de Predicados Polidicos


Apresentamos aqui a formalizao da lgica de predicados polidicos. A
nica alterao com relao lgica de predicados mondicos a substituio
do conjunto R1 = {r1 , r2 , . . .} o conjunto de predicados mondicos pelos
conjuntos Ri = {ri1 , ri2 , . . .} de predicados i-dicos, ou seja, predicados com
i argumentos, i > 1. Cada um desses conjuntos pode ser vazio, finito ou
infinito.
Uma assinatura uma tupla especfica

= [R1 , R2 , . . . , RM , C, F1 , F2 , . . . , FN ], M, N <

O conjunto de termos T () da lgica de predicados polidicos definido


exatamente da mesma maneira que o conjunto T (1 ) do captulo anterior.
O conjunto F() de frmulas da assinatura definido indutivamente
como o menor conjunto que atenda s seguintes condies:

Se t1 , . . . , tj T () e rji Rj , ento rji (t1 , . . . , tj ) F().


Se t1 , t2 T (), ento t1 = t2 F().
Esses dois tipos de frmulas so denominados frmulas elementares.
Se , F(), ento , , , F().
Se F() e x V , ento x(), x() F().

O conjunto de variveis livres de uma frmula , denotado como L(),


passa a ser definido assim:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #153
i i

5 Lgica de Predicados Polidicos 143

Se = rj (t1 , . . . , tj ), rj Rj , t1 , . . . , tj T (), ento L() o


conjunto de todas as variveis ocorrendo em t1 , . . . , tj .

Se = (t1 = t2 ), t1 , t2 T (), ento L() o conjunto de todas as


variveis ocorrendo em t1 e t2 .

Se = , ento L() = L().

Se = , ou , ento L() = L() L().

Se = x() ou x(), x V , ento L() = L() {x}.

5.3 Semntica
Um par A() = [A, A()] um sistema algbrico da assinatura se as
seguintes condies forem observadas:

A 6= denominado portador do sistema algbrico.

A() mapeia os elementos dos conjuntos de em relaes e funes


sobre o conjunto A e denominada interpretao de em A.
j vezes
z }| {
Se rji Rj , ento A() (rji ) Aj = A . . . A.

Se ci C, ento A() (ci ) A.

Se fji Fj , ento existe uma funo A() (fji ) : Aj A.

As definies de interpretao de um conjunto de variveis : X A


e de valor de um termo t T () em um sistema algbrico A() para uma
interpretao permanecem inalteradas.
Podemos definir agora quando uma frmula F() em um sistema
algbrico A() para uma interpretao verdadeira (denotado como
A() |= []). Para que seja verdadeira em A() para , preciso que
ocorra o seguinte:

Se = rj (t1 , . . . , tj ) F(), ento A() |= [] equivalente a


A() A()
[t1 [], . . . , tj []] A() (rj ).

Se = (t1 = t2 ), t1 , t2 T (), ento A() |= [] equivalente a


A() A()
t1 [] = t2 [].

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #154
i i

144 Lgica para Computao

Se = , F(), ento A() |= [] se, e somente se, no for


verdade que A() |= [].

Se = , , F(), ento A() |= [] se, e somente se,


A() |= [] ou A() |= [].

Se = , , F(), ento A() |= [] se e somente se A() |=


[] e A() |= [].

Se = , , F(), ento A() |= [] se, e somente se,


no caso em que A() |= [], ento necessariamente tambm A() |=
[].

Se = x(), F(), ento A() |= [] se, e somente se, existir


pelo menos uma interpretao de variveis 1 : X1 A tal que x
X1 , 1 L() = L() e A() |= [1 ].

Se = x(), F(), ento A() |= [] se, e somente se, para


qualquer interpretao de variveis i : Xi A tal que x Xi e
i L() = L(), tivermos que A() |= [i ].

Exerccios

5.1 Considerar a assinatura 1 = [R1 , R2 , C, F1 , F2 ], em que:


R1 = {r1 }.
R2 = {r2 }.
C = {a, b, c}.
F1 = {f1 }.
F2 = {f2 }.
Considerar tambm os seguintes sistemas algbricos:
A1 () = [A1 , A1 () ].
A1 = {1, 2}
A1 () (r1 ) = {1}
A1 () (r2 ) = {[1, 2]}
A1 () (a) = A1 () (b)
A1 () (c) = 2

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #155
i i

5 Lgica de Predicados Polidicos 145

A1 () (f1 ) = f : A1 A1 , f(x) = 1
A1 () (f2 ) = g : A1 A1 A1 , g(x, y) = y
A2 () = [A2 , A2 () ].
A2 = {1, 2, 3, . . .}
A2 () (r1 ) = {1, 3, 5, . . .}
A2 () (r2 ) = {[1, 2], [3, 4], [5, 6], . . .}
A2 () (a) = 1
A2 () (b) = 2
A2 () (c) = 3
A2 () (f1 ) = f : A2 A2 , f(x) = x + 1
A2 () (f2 ) = g : A2 A2 A2 , g(x, y) = x + y
Verificar, para as sentenas i a seguir, se A1 () |= i e se A2 () |= i :
x1 (x2 (x3 (r2 (x1 , x2 ) (r1 (x2 ) r1 (x3 ) (x1 = f2 (x2 , x3 )))))).
x1 (x2 (r2 (x1 , x2 ) (r1 (x2 ) (x1 = f2 (x2 , a))))).
x1 (x2 (r2 (x1 , x2 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x1 (x2 (r2 (x1 , x2 ) (r1 (x2 ) (x1 = f2 (x2 , c))))).
x(r1 (x)).
x(r2 (x, x) r2 (x, x)).
x(r2 (f1 (x), f2 (x, x)) r2 (x, x)).
x(r2 (f1 (x), x) r1 (x)).
x((r2 (f1 (x), x) r1 (x))).
x(r2 (f1 (x), x) r1 (x)).

5.2 Para cada uma das sentenas do exerccio anterior, construir (se poss-
vel) um sistema algbrico Aj () tal que no seja verdade que
Aj () |= i .

5.3 Demonstrar que existe um algoritmo que, para qualquer sentena ,


permite determinar em um nmero finito de passos se |=n para
qualquer n, 0 < n < . Ou seja, demonstrar que o resultado obtido
no Exerccio 4.6 da Seo 4.3 independe da restrio da lgica a apenas
predicados mondicos.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #156
i i

146 Lgica para Computao

O Teorema 4.3.1 teorema da compacidade tambm independe da


presena de predicados que no sejam mondicos. Portanto, ele tambm
vlido na lgica de predicados polidicos.

5.4 Deduo Natural


No detalharemos nenhum aspecto dos sistemas dedutivos j vistos no ca-
ptulo anterior para a lgica de predicados polidicos, pois tudo o que foi
apresentado nas Sees 4.4 e 4.5 independe da restrio aos predicados
mondicos e, portanto, continua vlido com predicados polidicos.
Continuam valendo, portanto, para o sistema de deduo natural:

O conceito de substituio de variveis.

O conceito de seqente.

Os axiomas do sistema de deduo natural.

Todas as 16 regras de deduo.

O conceito de demonstrao de um seqente.

O conceito de verdade relativa a um sistema algbrico.

O Teorema 4.4.1 teorema da correo e completude. Para verificar


essa ltima afirmativa, basta acompanhar a estratgia de demonstrao
desse teorema delineada na Seo 4.6 e verificar que em nenhum
ponto daquela demonstrao foi obtido algum resultado dependente
do fato de os predicados tratados serem todos mondicos.

5.5 Axiomatizao
Da mesma forma, continuam tambm valendo para o sistema axiomtico de
deduo:

O Teorema 4.5.1 teorema da deduo.

Os 14 axiomas e as trs regras de deduo.

O Teorema 4.5.2 teorema da equivalncia entre sistemas dedutivos.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #157
i i

5 Lgica de Predicados Polidicos 147

5.6 Tableaux Analticos


O mtodo dos tableaux analticos apresentado na Seo 2.4 pode ser esten-
dido para a lgica de predicados. Para isso, acrescentamos mais dois tipos de
frmulas marcadas, alm dos j existentes tipos . Eles so os tipos e ,
apresentados, respectivamente, nas Figuras 5.1 e 5.2.

1
Tx(A) TA[x := a]
Fx(A) FA[x := a]

em que a uma constante arbitrria.

Figura 5.1 Frmulas do tipo .

1
Fx(A) FA[x := a]
Tx(A) TA[x := a]

em que a uma constante arbitrria que no ocorre em A.

Figura 5.2 Frmulas do tipo .

As regras de expanso so bastante simples:

Expanso : Se um ramo do tableau contm uma frmula do tipo ,


adiciona-se 1 ao fim de todos os ramos que contm .

Expanso : Se um ramo do tableau contm uma frmula do tipo ,


adiciona-se 1 ao fim de todos os ramos que contm .

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #158
i i

148 Lgica para Computao

Todos os procedimentos para demonstrao usando tableaux analticos


permanecem idnticos aos apresentados na Seo 2.4.

Exemplo 5.6.1
Vamos provar, usando um tableau analtico, que

x(r1 (x) r2 (x)) ` (x(r1 (x))) (x(r2 (x))) :

T x(r1 (x) r2 (x))


F ` (x(r1 (x))) (x(r2 (x)))
T (x(r1 (x)))
F (x(r2 (x)))
F r2 (a)
T r1 (a)
T r1 (a) r2 (a)

F r1 (a) T r2 (a)

Exerccio

5.4 Construir demonstraes para os seguintes seqentes, usando o m-


todo dos tableaux analticos:
x(r1 (x) r2 (x)) ` x(r2 (x) r1 (x)).
r1 (a), r1 (b) ` r1 (a) r1 (b).
` x1 (x2 (r1 (x1 ) (r1 (x2 ) r1 (x1 )))).
r1 (a) r1 (a) `.
` (r1 (c) r2 (c)) (r2 (c) r1 (c)).
` x((r1 (x) r2 (x)) (r2 (x) r1 (x))).
` r1 (a) (r1 (b) (r1 (a) r1 (b))).
` x1 (x2 (r1 (x1 ) (r1 (x2 ) r1 (x1 )))).
` (r1 (a) r1 (a)).
` (r1 (c) (r2 (c) r3 (c))) ((r1 (c) r2 (c))
(r1 (c) r3 (c))).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #159
i i

5 Lgica de Predicados Polidicos 149

` (x1 (r1 (x1 ) r2 (x1 ))) (x2 (r1 (x2 ))) (x3 (r2 (x3 ))).
` (x1 (x2 (r1 (x2 ) r2 (x1 )))) (x3 (r1 (x3 )))
(x4 (r2 (x4 ))).
` (x1 (r1 (x1 ) r2 (x1 ))) (x2 (r1 (x2 ) r2 (x2 ))).
` r(c) x((x = c) r(x)).
` (x1 (x2 (r1 (x1 ) r2 (x2 )))) (x3 (x4 (r1 (x4 ) r2 (x3 )))).

5.7 Decidibilidade e Complexidade


Na Seo 4.7 destacamos que a satisfazibilidade de sentenas na lgica de
predicados mondicos com assinatura pura decidvel, porm tem comple-
xidade computacional muito alta. Ou seja, podemos construir um programa
de computador que, dada uma sentena nessa lgica, sempre responde SIM
se a sentena for satisfazvel ou NO em caso contrrio; entretanto, esse
programa pode demorar muitssimo para gerar essa resposta, em alguns
casos.
Nesta seo, apresentaremos um resultado interessante, relativamente sur-
preendente e um tanto incmodo: a satisfazibilidade de sentenas na lgica
de predicados polidicos indecidvel. Ou seja, no existe um algoritmo
capaz de, dada qualquer sentena nessa lgica, sempre responder SIM se a
sentena for satisfazvel ou NO em caso contrrio.
Para apresentar esse resultado com os detalhes tcnicos necessrios, preci-
saramos de uma seqncia de conceitos auxiliares. Esses conceitos so, em
si, de grande interesse para estudos mais aprofundados tanto de teoria da
computao como de lgica matemtica. Eles so, entretanto, mais comple-
xos e abstratos que as tcnicas e conceitos vistos neste livro, e consideramos
que o seu estudo foge do escopo pretendido para esta obra. Na seo de
Notas Bibliogrficas (Seo 5.8), indicamos referncias adicionais em que
esses detalhes podem ser encontrados.
Em vez disso, apresentamos um exemplo significativamente mais simples
de demonstrao de existncia de funes indecidveis. Com esse exem-
plo, pretendemos ilustrar algumas tcnicas e o grau de abstrao neces-
srio para demonstraes dessa natureza. Um fator matemtico que contri-
bui para o alto grau de abstrao requerido que o resultado pretendido a
demonstrao da inexistncia de algo (no caso, de um procedimento efetivo
para obter um resultado), portanto ao final da demonstrao nenhum objeto
concreto exibido.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #160
i i

150 Lgica para Computao

Uma funo caracterstica de nmeros naturais uma funo f :


{, >}, em que o conjunto de nmeros naturais. Dentre as diferentes
funes caractersticas existentes, algumas so decidveis e outras so indeci-
dveis. A seguir, demonstraremos a indecidibilidade do problema de decidir
se uma funo caracterstica ou no decidvel.
A demonstrao ser efetuada por reduo ao absurdo: partiremos da
hiptese de que o problema decidvel e mostraremos como essa hiptese
leva a uma contradio. Consideremos por hiptese, portanto, que exista um
procedimento (que poderia ser traduzido em um programa de computador)
que receba qualquer funo caracterstica e responda se ela ou no decidvel.
Em outras palavras, o procedimento indica se vale a pena tentar traduzir
a funo caracterstica apresentada em um programa ou se essa seria uma
causa perdida.
O conjunto de funes caractersticas enumervel e pode ser ordenado
segundo algum critrio (por exemplo, segundo a ordem lexicogrfica dos
nomes dados s funes). Considerando essa ordenao e a existncia do pro-
cedimento que responde se uma funo caracterstica decidvel, podemos
computar qual a n-sima funo caracterstica decidvel. Para isso, basta
testar as funes caractersticas uma a uma, obedecendo sua ordenao, e
contar as funes decidveis encontradas.
Supondo que seja possvel efetuar esse teste e que as funes caractersticas
decidveis encontradas sejam denotadas, na ordem, como d0 , d1 , . . ., podere-
mos construir a seguinte funo g : {, >}:

se di (i) = >
g(i) =
> se di (i) =

Evidentemente, a prpria funo g uma funo caracterstica decidvel.


Portanto, existe um ndice k tal que g = dk . O valor de g(k), entretanto,
contraditrio:

se dk (k) = g(k) = >
g(k) =
> se dk (k) = g(k) =

N.A. Esse um meta-problema de decidibilidade, por assim dizer.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #161
i i

5 Lgica de Predicados Polidicos 151

Portanto, no possvel construir o procedimento que gera a seqncia de


funes caractersticas decidveis d0 , d1 , . . .. Em outras palavras, determinar
se qualquer funo caracterstica ou no decidvel um problema indeci-
dvel.
A estratgia usada para demonstrar a indecidibilidade da satisfazibilidade
para a lgica de predicados polidicos similar da demonstrao que
acabamos de apresentar. A demonstrao propriamente dita, entretanto,
muito mais complicada.

Exerccio

5.5 (Extrado de Davis, 1958) Considerar as funes de uma varivel


para os nmeros naturais f : . Demonstrar que determinar
se qualquer uma dessas funes ou no decidvel um problema
indecidvel. (Dica: Se o problema fosse decidvel e as funes decidveis
pudessem ser ordenadas como d00 , d10 , . . ., considerar a funo g :
tal que g(i) = di0 (i) + 1.)

5.8 Notas Bibliogrficas


As mesmas referncias bibliogrficas sugeridas na Seo 4.8 contm material
detalhado sobre a lgica de predicados polidicos, incluindo a demonstrao
da indecidibilidade da satisfazibilidade para essa lgica.
Uma referncia adicional importante o texto histrico de Martin Davis
(1958) que, apesar da idade, continua indicado como um livro exemplar-
mente didtico e bem organizado. O exemplo de funo indecidvel apresen-
tado aqui foi inspirado por um exerccio encontrado nesse texto.
O sistema dedutivo da resoluo apresentado no Captulo 3 pode ser
estendido para a lgica de predicados, com o devido tratamento das variveis.
Essa extenso, entretanto, j foi publicada em outros dois livros de um dos
autores do presente texto, e consideramos redundante repeti-la mais uma
vez aqui. Sugerimos ao leitor interessado que consulte Melo e Silva (2003)
e Corra da Silva e Agust-Cullell (2003).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #162
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #163
i i

Parte 3

Verificao de
Programas

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #164
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #165
i i

6 Especificao de Programas

6.1 Introduo
Uma das principais tarefas dos profissionais de computao o entendi-
mento e modelagem de um problema real em um problema computacional.
Para o entendimento do problema real a ser resolvido, vrias pesquisas
tm sido desenvolvidas na chamada engenharia de requisitos (Sommerville
e Sawyer, 1997; Kotonya e Sommerville, 1998). Ao final do processo de
entendimento, o problema precisa ser representado e futuramente desen-
volvido computacionalmente e, para isso, necessitamos de uma forma de
representao clara e precisa.
comum encontrarmos problemas a serem computacionalmente resolvi-
dos representados em linguagem natural, como, por exemplo:

Exemplo 6.1.1
O proprietrio de uma loja de CDs precisa que seja emitida, toda semana,
uma lista de seus clientes ordenados do maior ao menor valor de compras.
A partir de uma descrio inicial, o analista do sistema deve descrever o
problema a ser implementado para os respectivos programadores do sistema.
Algo como:
Dada uma lista de clientes da loja e os seus respectivos valores
de compras efetuadas naquela loja, o programa dever produzir
uma lista desses clientes em ordem decrescente dos seus respec-
tivos valores de compras.
A partir dessa especificao, o programador ir produzir um programa de
ordenao considerando o valor de compra de cada cliente.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #166
i i

156 Lgica para Computao

O problema descrito anteriormente bastante simples e com vrias so-


lues conhecidas: os vrios algoritmos de ordenao na literatura. Note,
contudo, que no h qualquer meno sobre o fato de:

Ter, ou no, clientes repetidos nessa lista.

Se permitida uma lista vazia de clientes.

Ou, ainda, qual o significado de lista ordenada pelo valor de compra.

Sobre o significado de ordenao, poderamos assumir o termo como co-


nhecido na literatura, enquanto os outros itens deveriam ser explicitamente
mencionados para uma soluo mais precisa. A falta de definio desses
elementos poderia gerar uma soluo inadequada como, por exemplo, listar
um mesmo cliente vrias vezes quando os valores de suas compras deveriam
ser somados no caso em que um mesmo cliente aparecesse mais de uma vez
na lista fornecida (quando permitido um mesmo cliente aparecer mais de
uma vez na lista).
Assumir o termo como na literatura, nesse caso particular, poderia ser
apropriado porque o domnio conhecido. Contudo, em grande parte dos
sistemas computacionais, assumir significados de termos, ao contrrio de
defini-los explicitamente, pode ser desastroso, culminando com a produ-
o de um software que no foi solicitado quando assumimos um significado
errneo de termos. Esse apontado como um dos principais problemas
no desenvolvimento de software e tem sido largamente estudado na rea
de engenharia de software (Sommerville, 2001). Uma das suas principais
causas a falta de comunicao adequada, seja entre pessoas do grupo de
desenvolvimento, seja entre as vrias modelagens do sistema. A comunicao
adequada entre as vrias modelagens remediada principalmente por boas
representaes, o que tambm propicia uma melhor comunicao entre
pessoas da equipe de desenvolvimento.
Existem hoje linguagens para a especificao dos vrios nveis de abstrao
do software, desde a arquitetura at problemas algortmicos detalhados. A
UML (unified modeling language) (Booch, Rumbaugh e Jacobson, 1999) um
exemplo do esforo de unificar representaes das modelagens de sistemas
para facilitar o entendimento. Vrias outras linguagens com semnticas pre-
cisamente definidas tambm tm sido largamente usadas para a especificao
de sistemas crticos e sero discutidas na Seo 6.5. Neste captulo, discutimos

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #167
i i

6 Especificao de Programas 157

o uso da lgica clssica como linguagem para especificao de programas.


Uma discusso sobre especificao de sistemas computacionais complexos
est fora do escopo deste livro. Aqui, pretendemos apenas mostrar como
podemos especificar problemas a serem solucionados por um programa para
que possamos, posteriormente, provar que o programa implementa, de fato,
uma soluo para o problema especificado.

6.2 Especificao de Programas


Como visto na seo anterior, vrios problemas a serem resolvidos
computacionalmente so especificados em linguagem natural ou mesmo
em uma linguagem esquemtica que, muitas vezes, tem seus itens des-
critos em linguagem natural. Apesar de a descrio de um sistema computa-
cional em linguagem natural ser, em geral, de fcil leitura (se for bem escrita)
pela maioria dos integrantes da equipe de desenvolvimento, a ambigidade
de termos utilizados para definir os requisitos pode gerar entendimentos di-
ferentes sobre um mesmo requisito. Isso poder ocasionar desenvolvimentos
de partes individuais de um mesmo requisito que so inconsistentes entre si,
simplesmente porque cada um teve uma interpretao particular sobre um
mesmo termo. Alm disso, podemos gerar, em linguagem natural:

Frases perfeitas sob o ponto de vista gramatical, mas com significado


vago na descrio de um domnio de aplicao de sistemas.

Frases com significados inconsistentes sobre um mesmo requisito.

Por outro lado, como visto no estudo da lgica clssica (Partes I e II), esta
pode expressar propriedades sobre o nosso cotidiano a partir dos predicados
definidos sobre o domnio em questo. Com a lgica clssica, podemos, en-
to, formular sentenas sobre sistemas com interpretao nica, j que todos
os seus operadores tm um significado nico. Alm disso, podemos ainda
verificar inconsistncias quando definimos propriedades contraditrias sobre
um mesmo requisito.
Neste captulo, temos como objetivo mostrar o uso da lgica clssica na
especificao de propriedades sobre programas. Para isso, definimos inicial-
mente quais tipos de propriedades so relevantes aos programas seqenciais
(determinsticos), para ento mostrar como elas podem ser definidas usando
a lgica clssica.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #168
i i

158 Lgica para Computao

6.2.1 Programas como Transformadores de Estados


Discutimos at o momento a importncia da especificao como modelagem
precisa de problemas reais. A partir dessa modelagem, ou representao,
dos dados reais, precisamos de formas de processamento que transformem os
dados originais em novos dados produzidos. Essas transformaes so reali-
zadas por meio dos programas, que so mquinas abstratas responsveis pela
transformao de dados. Assim, a soluo computacional para um problema
requer que ele tenha os seus dados modelados de forma computacional e, a
partir de um modelo desses dados, o programa faz processamentos que os
transformam em dados resultado, o resultado computacional do programa.
A Figura 6.1 mostra essa relao entre os dados de entrada e sada.

Dados de Entrada Programa Dados de Sada

Figura 6.1 Programa abstrato.

Considerando a computao de um programa como uma mquina de


transformao, podemos distinguir dois estados primordiais do programa:
o estado inicial, quando nenhuma transformao sobre os dados foi ainda
realizada, e o estado final, aps todas as transformaes realizadas pelo
programa. A maioria dos programas, no entanto, formada por sucessivas
transformaes de dados. Dessa forma, podemos subdividir o programa em
elementos de transformaes sucessivas, como mostra a Figura 6.2.

1 2 n

Figura 6.2 Programa: transformao de estados.

Ainda nos resta definir o que representa o estado de um programa. Se


considerarmos que um programa representado por uma funo, como nas
linguagens funcionais, os dados de entrada representam o estado inicial, o
processamento da funo representa o programa (a capacidade de transfor-
mao) e o resultado da funo representa o estado final, como definido na
Figura 6.1. Para as linguagens que possuem variveis para guardar valores
de dados a serem computados ao longo do programa, o estado refletido
pelo conjunto de variveis e seus respectivos valores. O estado inicial de um

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #169
i i

6 Especificao de Programas 159

programa , portanto, denotado pelo conjunto de suas variveis, com os


seus respectivos contedos, quando a computao do programa iniciada.
Aps uma primeira transformao, temos um novo estado do programa, e
assim sucessivamente at o final da computao, chegando ao estado final do
programa. Para programas seqenciais, a computao de um programa , na
realidade, uma transformao sucessiva de seu estado (Figura 6.3).

1 = {v11 , . . . , v1m } 2 = {v21 , . . . , v2m } n = {vn n


1 , . . . , vm }

Figura 6.3 Computao de um programa.

Assim, especificar propriedades sobre programas significa descrever rela-


es sobre os estados desse programa. Para o problema apresentado no Exem-
plo 6.1.1 (ordenao pelo valor de compra), poderamos definir propriedades
tanto sobre o estado inicial quanto sobre o estado final:

Estado inicial:

A lista de clientes contm pelo menos um cliente.


No h clientes repetidos na lista dada.
Para cada cliente, existe um valor no-negativo de compras etc.

Estado final:

A lista resultado do programa dever conter todos os elementos


da lista inicial.
A lista resultado dever estar em ordem decrescente dos valores
de compra. Assim, o cliente que efetuou a compra de maior valor
dever ser o primeiro elemento da lista. O segundo elemento da
lista dever conter o cliente que efetuou a segunda maior compra,
e assim sucessivamente.

Note que as propriedades definidas so apenas ilustrativas e vrias outras


poderiam ser definidas sobre o mesmo programa, inclusive considerando
restries distintas sobre o estado inicial do programa, como, por exem-
plo, aceitar uma lista de entrada com a repetio de clientes. importante
salientar que as propriedades aqui definidas sobre o estado inicial restringem

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #170
i i

160 Lgica para Computao

o funcionamento do programa a apenas dados de entrada que satisfaam


aquelas caractersticas. Por outro lado, as propriedades sobre o estado final
refletem o que ser produzido pelo programa e, principalmente, quais as
transformaes efetuadas sobre os dados do estado inicial. Alm dos esta-
dos inicial e final, as propriedades poderiam tambm ser definidas sobre
estados intermedirios do programa.

6.2.2 Especificao de Propriedades sobre Programas


Como os programas seqenciais so transformadores de dados e esses dados
denotam o estado dos programas por meio de suas variveis, natural que
as propriedades sobre os programas sejam definidas sobre as suas variveis.
Assim, podemos definir uma propriedade sobre uma varivel em particular
ou, ainda, como uma relao entre variveis de um mesmo programa. Para
ilustrar, vamos utilizar um problema ainda mais simples que o anterior.

Exemplo 6.2.1
Dados dois valores de entrada sobre o domnio dos nmeros inteiros maiores
ou iguais a 10 (dez), o programa dever calcular a soma desses dois valores.
Especificao:
Para especificarmos esse problema, podemos inicialmente dar nomes s
variveis de entrada do programa: x representa o primeiro dado de entrada
e y, o segundo dado de entrada. Podemos agora definir a restrio sobre os
dados de entrada (estado inicial) do programa:

x > 10 y > 10

Para que o programa a ser construdo possa funcionar da forma esperada,


precisamos que esse predicado seja satisfeito.
Usando essas mesmas variveis do programa e mais uma nova varivel para
denotar o valor calculado pelo programa (z), podemos especificar tambm
propriedades sobre o estado final do programa:

z= x+y

Aqui, usamos novamente as duas variveis definidas como valores de en-


trada para especificar a propriedade de que o valor calculado pelo programa
dever corresponder soma dos valores de entrada. Note que esse um

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #171
i i

6 Especificao de Programas 161

predicado sobre as variveis do programa e, portanto, dever ser verdadeiro


ao final do programa (a igualdade definida na frmula matemtica; isso no
constitui uma atribuio como em programas).

No exemplo anterior, definimos propriedades sobre os estados inicial e


final usando variveis que representam os dados de entrada do programa.
Para um problema to simples, pudemos especificar as propriedades rele-
vantes diretamente do seu enunciado. Para problemas mais complexos, o
enunciado, em geral, no escrito de forma to completa quanto o apresen-
tado anteriormente e a especificao requer, muitas vezes, o conhecimento
do domnio do problema para que possamos especificar precisamente o
problema computacional a ser resolvido. Essa , de fato, a situao mais
comum a ser encontrada, e o especificador do sistema ou programa tem como
tarefa modelar um problema real de forma que possa ser resolvido computa-
cionalmente.
Assim, um mesmo sistema (ou programa) pode ser especificado de formas
diferentes e o especificador responsvel por decidir quais propriedades so
relevantes ao sistema (precisam ser satisfeitas pelo sistema) tanto em seu
estado inicial quanto em seu estado final (ou estados intermedirios, para
sistemas mais complexos). A deciso de quais propriedades so relevantes a um
dado sistema uma tarefa to subjetiva quanto a de se construir um programa
claro e elegante para um dado problema e depende da experincia do especifi-
cador. Por essa razo, podemos ter especificaes distintas de um mesmo pro-
blema ou ainda especificaes com caractersticas indesejveis, tais como falta
de clareza, deficitria ou com propriedades desnecessrias. Nos exemplos
seguintes, mostramos especificaes distintas do Exemplo 6.2.1 e apontamos
alguns problemas.

Exemplo 6.2.2
Considere o mesmo problema definido no Exemplo 6.2.1.
Especificao:
Sobre o estado inicial:

x > 10 y > 10 (x + y) > 0

Sobre o estado final:


z = x + y z > 20

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #172
i i

162 Lgica para Computao

Anlise:
Nas propriedades especificadas, tanto sobre o estado inicial quanto sobre o
estado final acrescentamos novos predicados. Sobre o estado inicial, (x+y) >
0 um predicado desnecessrio porque pode ser deduzido pelos dois outros
iniciais. Da mesma forma, sobre o estado final, o predicado z > 20 pode
ser omitido por ser uma conseqncia dos dois primeiros predicados sobre
o estado inicial, juntamente com z = x + y. Essa uma caracterstica
indesejvel nas especificaes, a qual chamamos de superespecificao (do
ingls overspecification).

A superespecificao, em geral, ocorre quando o especificador tem o m-


peto de especificar tudo o que ele sabe sobre o problema e no percebe
que est repetindo o que j foi especificado. Em casos particulares, a su-
perespecificao pode ser proposital para enfatizar uma certa caracterstica
do problema. Para o problema apresentado no exemplo, este poderia ter sido
requisitado em um domnio em que o resultado apresentado dever ser usado
para um prximo clculo e tem como restrio ser um valor estritamente
maior ou igual a 20. Nesse caso, o predicado z > 20 poderia servir como
nfase no sistema como um todo.

Exemplo 6.2.3
Considere o mesmo problema definido no Exemplo 6.2.1.
Especificao:
Sobre o estado inicial:

x > 10 (x + y) > (10 + x)

Sobre o estado final:


z= x+y

Anlise:
Nas propriedades especificadas sobre o estado inicial, temos o predicado
(x + y) > (10 + x). Este, juntamente com x > 10, especifica que y deve ser
maior ou igual a 10 (dez), como requerido pelo problema. Contudo, essa
uma forma pouco clara, ou indireta, de explicitar tal propriedade. ideal que
tenhamos especificaes com propriedades explcitas sobre o problema e da
maneira mais concisa possvel.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #173
i i

6 Especificao de Programas 163

Podemos, ainda, ter especificaes deficitrias que podem prejudicar tanto


o problema a ser resolvido quanto a sua verificao posteriormente.

Exemplo 6.2.4
Considere o mesmo problema definido no Exemplo 6.2.1.
Especificao:
Sobre o estado inicial:
x > 10

Sobre o estado final:


z= x+y

Anlise:
Na propriedade especificada sobre o estado inicial, temos apenas o pre-
dicado x > 10. Nesse caso, y poderia assumir qualquer valor, o que torna
a especificao incompatvel com a definio do problema. Com essa es-
pecificao incompleta do problema, um programa poderia ser construdo
resultando em uma soluo errada para o problema poderamos, inclusive,
obter nmeros negativos como resultado do problema.

Vrios cuidados devem ser observados para que obtenhamos uma espe-
cificao clara, concisa e precisa de um programa. O especificador precisa
definir, inicialmente, quais restries so necessrias sobre os dados de um
programa para que ele funcione, assim como propriedades sobre os dados
a serem produzidos pelo programa. Nos exemplos anteriores, definimos
as propriedades sobre os dados dos programas utilizando uma linguagem
matemtica comparaes sobre nmeros inteiros e conectivos lgicos.
Poderamos ter tais especificaes escritas em linguagem natural, mas as van-
tagens de termos especificaes de programas definidas em uma linguagem
matemtica so:

(a) Preciso: a linguagem matemtica precisa e, por isso, possui um


significado nico para cada propriedade.

(b) Verificao de Consistncia: a linguagem matemtica nos possibilita


verificar inconsistncias nas especificaes quando temos proprie-
dades contraditrias sobre um mesmo objeto. Essas inconsistncias

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #174
i i

164 Lgica para Computao

podem ser verificadas de forma automtica ou pelo menos semi-


automtica. Tal verificao se torna impossvel quando temos essas
especificaes em linguagem natural, dada a ambigidade de termos e
sentenas.
(c) Simulao: as especificaes em algumas linguagens matemticas po-
dem ser parcialmente executveis, o que auxilia a validao da especi-
ficao.
(d) Verificao de Programas: aps a construo de um programa que
pretendemos que solucione o problema especificado, podemos veri-
ficar (novamente de forma automtica ou semi-automtica) se esta
uma soluo (satisfaz) para a especificao do problema. Assim como
na verificao de consistncia, a verificao do programa s possvel
se tivermos o problema especificado em uma linguagem precisa.
Uma vantagem decorrente das especificaes em linguagem matemtica
que para definir propriedades de forma precisa, os especificadores necessitam
de uma idia clara sobre o problema, ao passo que a descrio em linguagem
natural pode ser vaga. Note que isso no mrito da linguagem matemtica
(podemos ter especificaes com um bom entendimento sobre o problema
em linguagem natural), mas acaba sendo uma realidade na prtica.
Em contrapartida, uma especificao escrita em linguagem matemtica,
apesar de ser acessvel aos profissionais de computao, nem sempre de
fcil leitura aos usurios que contratam os servios de tais profissionais.
Alm disso, apesar de estimular um entendimento preciso do problema, a
especificao em linguagem matemtica pode ser tanto incompleta quanto
incorreta em relao ao problema real. Assim como em quaisquer outras
modelagens de problemas reais, o especificador poder ter um entendimento
incorreto ou incompleto do problema, e isso se refletir na especificao.
Existe a chance de entendimentos equivocados serem descobertos se tivermos
a simulao da especificao, mas no h um passe de mgica que faa com
que especificaes em uma linguagem matemtica sejam exatamente o que
se deseja do problema real sem um esforo do especificador.
Nesta seo, apresentamos apenas o que desejvel na especificao de
programas e argumentamos que podemos usar uma linguagem matemtica
para tal especificao. Na Seo 6.3, mostramos o uso da lgica clssica como
linguagem matemtica para a especificao de propriedades sobre programas
seqenciais.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #175
i i

6 Especificao de Programas 165

6.3 Lgica Clssica como Linguagem de Especificao


Vimos, na Parte 2 deste livro, o uso da lgica de predicados para expressar
sentenas do nosso cotidiano e sistemas de prova sobre tal fundamento.
Nesta seo, redefinimos a linguagem lgica utilizada para a especificao de
programas, considerando a semntica j definida nos captulos anteriores.
Considere R, F, V e C os conjuntos de smbolos de predicados, funes,
variveis e constantes, respectivamente. A linguagem lgica aqui utilizada
ser a seguinte:

Termos os termos t so definidos por:

t ::= x | c | f(t, . . . , t)

x uma varivel x V .
c uma constante c C.
Se t1 , . . . , tn so termos e f uma funo (f F) de paridade n,
ento f(t1 , . . . , tn ) um termo.

Frmulas o conjunto de frmulas definido por:

::= P(t1 , . . . , tn ) | | | | | x | x

Se P um predicado com n argumentos e t1 , . . . tn so termos,


ento P(t1 , . . . , tn ) uma frmula.
, , , , e so todos operadores da lgica de predicados
com a semntica definida anteriormente.
A precedncia dos operadores, assim como o uso de parnteses
nas frmulas, tem o mesmo significado que nas frmulas apre-
sentadas anteriormente.
As variveis no quantificadas so ditas variveis livres.

Alguns predicados sobre programas, assim como nos exemplos anteriores,


sero definidos na forma infixa para tornar a leitura de propriedades mais
intuitiva.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #176
i i

166 Lgica para Computao

Exemplo 6.3.1
Para comparar se um dado nmero inteiro maior ou igual a outro, uti-
lizamos
5>4
em vez de usarmos o predicado na forma

MaiorOuIgual(5, 4) ou > (5, 4)

como sugerido na notao anterior. Essa escolha de notao tem como


objetivo a clareza, j que lidamos no nosso dia-a-dia com comparaes
entre nmeros na notao infixa, seja em definies matemticas, seja
nas linguagens de programao. Da mesma forma, a comparao entre
variveis que representam valores numricos tambm aparecer na forma
infixa para tornar a leitura mais intuitiva:
x>y
Alm dessa comparao, todas as outras comparaes usuais entre nme-
ros inteiros tambm sero usadas na forma infixa:

x = y, x 6 y, x 6 y, x > y, x > y

Operadores sobre inteiros sero definidos na Seo 6.3.1.

A forma de escrita (infixa) dos predicados conhecidos sobre nmeros no


altera o significado nem o poder de expresso da lgica. Assim, a semntica
da linguagem e os sistemas de prova definidos nos captulos anteriores
continuam vlidos aqui.
Para a especificao de um programa, devemos inicialmente definir o
significado dos predicados usados nas asseres (ou propriedades) sobre
o programa. Omitimos a definio inicial desses predicados se eles j forem
conhecidos, tais como os matemticos definidos anteriormente.

Exemplo 6.3.2
Dadas x e y variveis que representam nmeros inteiros, as seguintes expres-
ses so frmulas aceitas como asseres de programas:

(a) x > 0 o valor da varivel x dever ser maior que 0.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #177
i i

6 Especificao de Programas 167

(b) x > 0 x 6 10 o valor da varivel x dever estar no intervalo fechado


entre 0 e 10.
(c) x < 0 x > 20 o valor da varivel x dever ser um nmero negativo
ou maior ou igual a 20.
(d) x(x = 0 x + y > 10) para todos os valores que a varivel x pode
assumir, esse valor dever ser 0, ou a sua soma com o valor da varivel
y dever ser maior que 10.

(e) y(x = 2 y) o valor da varivel x um nmero par.

Aqui mostramos apenas que asseres usando a lgica de predicados


podem ser usadas como especificaes de programas. Nas sees que seguem,
definimos um conjunto de predicados associados a tipos de dados que au-
xiliam a especificao de sistemas reais e uma sistemtica de especificao
baseada em asseres sobre os estados inicial e final dos programas.
6.3.1 Tipos de Dados e Predicados Predefinidos
Quando definimos sentenas lgicas sobre o nosso cotidiano, precisamos,
antes de tudo, definir predicados e funes-base sobre o domnio em ques-
to. Para especificar asseres sobre programas, devemos definir, da mesma
forma, um conjunto de predicados sobre o domnio de aplicao. Apesar de
podermos definir novos tipos em grande parte das linguagens de programa-
o, existem os elementos-base sobre os quais construmos esses novos tipos,
os tipos predefinidos das linguagens. Predefinimos aqui um conjunto de
predicados e funes sobre elementos que comumente usamos para asseres
sobre programas. Esta no uma lista exaustiva de elementos-base; uma lista
mais completa pode ser encontrada nas linguagens e mtodos formais defini-
dos com o propsito de especificao de sistemas mais complexos (Seo 6.5).
Aqui, restringimo-nos a um conjunto ilustrativo que nos possibilite definir
asseres sobre programas.
Nmeros Inteiros
Expresses envolvendo nmeros inteiros so comuns em linguagens de pro-
gramao e, por isso, estados dos programas muitas vezes incluem variveis
com valores no conjunto de nmeros inteiros. Existe um conjunto de relaes
e funes sobre nmeros inteiros, e aqui enumeramos alguns deles usados no
decorrer das especificaes:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #178
i i

168 Lgica para Computao

IntXInt Int

x + y.
x y.
x y.
x/y diviso de inteiros.
max(x, y) o valor mximo entre dois nmeros.
min(x, y) o valor mnimo entre dois nmeros.
mod(x, y) resto da diviso de x por y.

IntXInt Bool

x = y o smbolo = sobrecarregado para nmeros inteiros e


termos lgicos.
x < y.
x 6 y.
x > y.
x > y.

Essa uma definio incomum para os nmeros inteiros, mas usada aqui
apenas para facilitar a escrita/leitura das especificaes.
Vetores
Da mesma forma que os nmeros inteiros, comum termos vetores (arrays)
de valores, os quais formam um tipo composto. Em particular, podemos ter
vetores de nmeros inteiros:

V1 , . . . , Vn

As variveis compostas sero representadas por ndices (subscritos), que


so valores inteiros. Os vetores de valores inteiros tm a seguinte assinatura:

Int Int

Para elementos representados nesse tipo de estrutura, podemos, por exem-


plo, comparar valores, bem como os seus ndices.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #179
i i

6 Especificao de Programas 169

Exemplo 6.3.3
Os elementos do vetor V , que no contm elementos repetidos, esto em
ordem decrescente:
i, j(i < j Vi > Vj )

Na maioria dos mtodos formais, os vetores so definidos como seqn-


cias, o tipo associado a vetores, e vrias relaes e funes so definidas
(como, por exemplo, primeiro e ltimo elementos da seqncia). Aqui,
optamos pela denominao de vetores para aproximar nomenclatura usada
nas linguagens de programao.

6.3.2 Invariantes, Precondies e Ps-condies


Para a especificao de propriedades sobre programas, as quais objetivamos
que sejam verificadas posteriormente (Captulo 7), devemos sistematizar
como elas devem ser construdas.
Como sugerido na Seo 6.2, programas seqenciais so essencialmente
transformadores de estados. As especificaes de programas devem, por-
tanto, denotar quais aes so esperadas dos programas sob o ponto de vista
de transformaes de seus estados. Inicialmente, o especificador deve:

1. Identificar o domnio de aplicao do problema

2. Escolher uma representao (modelo) para os dados a serem manipu-


lados pelo programa

3. Definir os elementos que compem os estados do programa

4. Identificar quais transformaes sobre o estado so relevantes ao pro-


blema e

5. Descrever as transformaes sobre os estados

Na identificao e descrio das transformaes sobre os estados, devemos


identificar alguns elementos importantes: o estado inicial e o estado final.
Alm disso, as asseres devem explicitamente denotar sobre quais estados
elas so definidas:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #180
i i

170 Lgica para Computao

Precondies: asseres definidas sobre o estado inicial do programa


que denotam sob quais restries o programa est preparado para
funcionar. As precondies determinam condies tanto sobre da-
dos de entrada quanto sobre valores iniciais de variveis. Se as pre-
condies de um programa so violadas, no h garantia de que ele
funcione adequadamente.

Exemplo 6.3.4

Dado um nmero inteiro n, o programa Fat dever calcular o fatorial


de n.
Identificando o domnio de aplicao do problema, o domnio da
funo fatorial, percebemos que ela est definida apenas para nmeros
inteiros maiores ou iguais a zero: n > 0. Como essa funo no est
definida para nmeros negativos, o programa estar preparado apenas
para o clculo de fatorial de nmeros no-negativos. Caso seja dado
um nmero negativo, o programa poder eventualmente produzir um
resultado errneo. Assim, temos para o problema proposto:
Pre:n > 0
Caso essa condio seja violada por exemplo, n = 2 , o programa
poderia produzir um resultado errado como 2, no produzir um
resultado final (loop infinito) ou ainda produzir uma mensagem sobre
o dado de entrada errado.

Diferentemente dos exemplos anteriores, neste tivemos de descobrir, a


partir do domnio de aplicao do problema, quais as precondies
necessrias ao funcionamento do programa. Isso uma prtica na
maioria das situaes reais e constitui uma das tarefas do especificador
(a definio informal do problema a ser resolvido nem sempre eviden-
cia tais condies). Vale ressaltar que a omisso de precondies para
um programa determina que ele dever responder a quaisquer valores
do tipo. Quando no h a definio explcita das precondies, estas
assumiro o valor true, denominando que no h restries sobre o
estado inicial do programa.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #181
i i

6 Especificao de Programas 171

Ps-condies: so asseres sobre o estado final do programa que de-


notam condies sobre os dados resultado do programa. Nas ps-
condies, so definidas as propriedades sobre os dados de sada e
valores das variveis que denotam o estado do programa. Os valores
de sada so denotados por variveis que sero usadas como resultado
e esto, em geral, relacionadas a variveis ou valores de entrada.

Exemplo 6.3.5
Considere o problema do Exemplo 6.3.4 sobre fatorial. Alm de definir
as precondies para o funcionamento do programa, devemos tambm
denotar o resultado a ser produzido pelo programa por meio de suas
ps-condies. Seja n o valor de entrada, como definido anterior-
mente, e denotamos por fat o valor resultado da funo. Temos, para
o problema, as ps-condies:
Pos:fat = n!
em que

1, se n = 0
n! = 1, se n = 1

n (n 1)!, se n > 1

uma definio usual da funo fatorial.


Na definio da ps-condio dessa funo, foi usada uma varivel que
denota o valor resultado do programa (fat) para deixar clara a relao
por meio de variveis de programas. Como o problema proposto uma
funo matemtica, pudemos denotar o valor resultado do programa
em uma nica varivel de estado (fat). Em outros casos, poderemos ter
um conjunto de variveis que configuram o estado final do programa.

A omisso da ps-condio significa que no h quaisquer condies


(propriedades) a serem satisfeitas pelo estado final do programa, e o
seu valor true, da mesma forma que as precondies. Sob o ponto de
vista prtico, significa que quaisquer valores resultado produzidos pelo
programa so aceitveis j que no precisam satisfazer a quaisquer pro-
priedades. Em outras palavras, uma especificao com a ps-condio

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #182
i i

172 Lgica para Computao

true inerte, j que no h meno do que o programa deve produzir.


Nesse caso, qualquer programa adequado para tal especificao.

Invariante: so asseres sobre programas que devem ser vlidas ao


longo da computao do programa. Em particular, tal assero deve
ser vlida nos estados inicial e final dos programas. Assim, se definimos
que x, uma varivel de um programa P, deve ser maior que zero ao
longo da computao do programa, devemos descrever tal propriedade
como invariante do programa (Inv:x > 0).

Exemplo 6.3.6
Consideremos ainda o problema do Exemplo 6.3.4 sobre fatorial e
acrescentemos a assero de que a varivel sobre o valor resultado
no assume valores negativos no decorrer da execuo do programa.
Podemos, ento, definir o invariante:
Inv:fat > 0
Note que tal assero , ao mesmo tempo, uma pr e ps-condio na
especificao do problema e poderia eventualmente ser acrescentada
a tais condies. Lembre-se de que ter a mesma condio como inva-
riante, precondio e ps-condio constitui uma superespecificao
do problema, a qual aceita apenas quando se quer enfatizar aspectos
especficos do problema.

A omisso de invariantes no sistema no constitui uma situao


dramtica na especificao do problema como a omisso das ps-
condies. comum encontrarmos especificaes de problemas sem
quaisquer invariantes. No exemplo anterior, introduzimos o invariante
artificialmente no problema para a sua explicao. Em particular, de-
finiremos as especificaes de programas sem incluir explicitamente
invariantes.
Alternativamente, podemos distribuir invariantes do programa sobre
as pr e ps-condies. Sob o ponto de vista de especificao, definir
uma mesma assero como pr e ps-condio de um programa no
constitui um invariante. Como as precondies atuam apenas sobre o
estado inicial e as ps-condies, sobre o estado final do programa,

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #183
i i

6 Especificao de Programas 173

tais asseres no precisam ser satisfeitas nos estados intermedirios,


diferentemente do invariante, que precisa ser satisfeito em todos os
estados.

Para efeito de especificao de programas definida neste livro, usaremos


apenas as pr e ps-condies deles. Quando uma dada propriedade precisar
ser satisfeita tanto no estado inicial quanto no estado final do programa, ela
ser explicitamente uma assero na pr e ps-condio concomitantemente.
Contudo, a idia de invariante ser abordada nas regras de prova para
fazermos verificao de programas (Captulo 7).

Exemplo 6.3.7
Consideremos o problema do Exemplo 6.3.6 sobre fatorial com a assero
de que a varivel sobre o valor resultado no assume valores negativos no
decorrer da execuo do programa. Para o valor de entrada n e o valor de
sada fat, a especificao do problema pode ser definida por:
Especificao:
Pre:n > 0 fat > 0
Pos:fat = n! fat > 0
Note que a propriedade fat > 0 redundante na ps-condio, mas foi
mantida aqui apenas para deixar explcito o invariante sugerido anterior-
mente.

Alm dos estados inicial e final do programa, podemos ainda definir


quais propriedades devem ser satisfeitas em estados intermedirios do pro-
grama. Podemos, em particular, definir propriedades sobre partes internas
dos programas. Essa forma de especificao ser parcialmente explorada no
Captulo 7.

6.3.3 Variveis de Especificao


Mostramos, at o momento, um conjunto de especificaes definidas por
meio de asseres sobre os estados inicial e final dos programas. Argumen-
tamos que os estados dos programas so denotados pelas suas variveis, e
todas as asseres foram definidas sobre as variveis dos programas. Em
certas situaes, precisamos de asseres na ps-condio relacionadas a
valores de variveis em estados anteriores do programa, mesmo que estes te-
nham sido modificados ao longo da computao. Para isso, devemos lembrar

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #184
i i

174 Lgica para Computao

alguns valores que no so preservados at o final do programa. Nesses casos,


criamos variveis de especificao, que no existem no programa, apenas na
especificao. Elas servem como elementos auxiliares quando precisamos
definir propriedades sobre o estado final do programa que usam valores no
preservados pelas variveis do programa.

Exemplo 6.3.8
Consideremos novamente o problema do Exemplo 6.3.4 sobre fatorial.
Programas iterativos que resolvem o problema do clculo de fatorial usam
a prpria varivel de entrada, n, para esse clculo. Dessa forma, o valor da
varivel n destrudo ao longo do clculo no programa. Para designarmos
que o valor da varivel fat contm o clculo do fatorial do valor de entrada,
criamos a varivel de especificao n0 :

Especificao:
Pre:n > 0 n0 = n
Pos:fat = n0 !
Dessa forma, independentemente do valor final de n, se preservado ou
destrudo, a ps-condio denota explicitamente a noo da especificao de
fatorial sobre o valor inicial.

Na maioria das linguagens formais (Seo 6.5) que lidam com especifi-
caes baseadas nos estados inicial e final, existem notaes explcitas sobre
cada um deles. Aqui, especificamos as propriedades sobre programas porque
temos como objetivo a verificao dessas propriedades sobre os progra-
mas. Por essa razo, usamos variveis que fazem parte dos prprios pro-
gramas, como veremos no Captulo 7, nas especificaes e, por isso, a neces-
sidade da criao das variveis de especificao. No caso do exemplo anterior,
precisaramos provar que a propriedade fat = n! satisfeita ao trmino do
programa. Contudo, o valor da varivel usado para a prova ser aquele ao
trmino do programa, mesmo que tenha sido modificado.
Portanto, apesar de a ps-condio no Exemplo 6.3.5 estar correta sob
o ponto de vista de especificao, pode ser problemtica na verificao do
programa por conta do uso concomitante das variveis nos programas e nas
especificaes.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #185
i i

6 Especificao de Programas 175

6.4 Exemplo
Descrevemos aqui o problema apresentado inicialmente, com a sua respectiva
especificao.

Exemplo 6.4.1
Voltando ao nosso problema inicial sobre a loja que quer ordenar seus
clientes pelo valor de compra (Exemplo 6.1.1), vamos agora especific-lo
formalmente.
Consideramos dois vetores: C para clientes e V para os valores de com-
pra dos clientes. Para cada cliente Ci temos o valor correspondente da
compra Vi maior ou igual a zero. Alm disso, cada cliente aparece apenas
uma vez na lista.
Especificao:
Pre:i, j.(i 6= j Ci 6= Cj ) Vi > 0 C0i = Ci V 0i = Vi
Pos:i, j(i < j Vi > Vj ) (Ci = C0j Vi = V 0j )
Na precondio, temos a restrio sobre o domnio de entrada para que
os clientes sejam distintos e cada valor de compra seja no-negativo. Como
cada Vi est relacionado ao Ci correspondente, e tal correspondncia deve
permanecer nos vetores resultado, criamos as variveis de especificao V 0
e C0 para que tal relao possa ser denotada na ps-condio. Assim, na
ps-condio, temos que o vetor de valores V deve estar ordenado e que a
relao entre os valores e os clientes preservada como nos valores de entrada
(usando as variveis de especificao Ci = C0j Vi = V 0j ).

Exerccios

6.1 Formular uma especificao para um programa P que, dados dois


nmeros naturais, deve calcular o mximo divisor comum para eles.

6.2 Formular uma especificao para um programa P em que, dados dois


nmeros inteiros como entrada, a soma desses dois nmeros no estado
inicial deve ser idntica soma deles no estado final do programa.
Notar que o valor de cada uma das variveis que representa esses
valores pode ser modificado ao longo da execuo de P.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #186
i i

176 Lgica para Computao

6.3 Especificar o problema de diviso de inteiros. O programa P deve


receber dois dados de entrada x e y e produzir o quociente e o resto
da diviso de x por y.!! proibido usar os operadores de diviso (x/y)
e o resto da diviso (mod(x, y)) para especificar esse problema.

6.4 Formular uma especificao para o problema de gerao de nmeros


pares. Um programa P deve gerar um nmero par.

6.5 Formular a especificao para a decomposio de um nmero maior


que 2 em fatores primos. O programa P deve receber como entrada
um nmero natural e produzir os fatores primos que decompem esse
nmero.

6.6 Um dado nmero palndromo se possui a mesma ordem de dgitos


quando visto da esquerda para a direita ou da direita para a esquerda.
Formular uma especificao para que, dado um nmero natural, o
programa deva testar se esse nmero palndromo.

6.7 Especificar o problema para que, dado um nmero natural a um


programa P, este deva reconhecer se o nmero pode ser escrito da
forma 2i 1.

6.8 Formular uma especificao para um programa P que recebe um n-


mero inteiro e uma lista de nmeros inteiros e verifica se esse nmero
est contido na lista ou no.

6.9 Um programa recebe uma lista de nmeros inteiros e a quantidade de


elementos dessa lista, e deve produzir uma nova lista, de forma que
todos os elementos que aparecem antes do i-simo elemento devam
conter o valor zero. Especificar tal problema.

6.5 Notas Bibliogrficas


Os estudos sobre especificao de requisitos e de programas no so re-
centes, e se do principalmente pela preocupao em desenvolver o soft-
ware/programa desejado, para evitar descobrir que o software desenvolvido
no era o esperado apenas quando j estivesse pronto. Um grande esforo foi
empregado para a definio de mtodos formais baseados em modelos, tais

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #187
i i

6 Especificao de Programas 177

como Z (Woodcock e Davies, 1996), B (Wordsworth, 1996) e VDM (Vienna


Development Method) (Jones, 1990), os quais foram inicialmente criados
para o desenvolvimento de sistemas seqenciais no paradigma modular e tm
como fundamentos principais a teoria dos conjuntos e a lgica de predicados.
As idias de invariantes, pr e ps-condies para sistemas aparecem de
forma explcita nos mtodos formais citados. Neste livro, seguimos uma
abordagem similar que usada em VDM, na qual denominamos as pr
e ps-condies explicitamente, mas omitimos os invariantes. Os mtodos
Z e B seguem abordagem semelhante na forma de esquemas e so ainda
enriquecidos com uma linguagem para esquemas. Nesses mtodos, aparecem
tambm formas particulares de denotar os estados inicial e final e suas
mudanas, assim como a predefinio de tipos estruturados, tais como con-
juntos, seqncias e suas variaes, juntamente com as respectivas operaes
bsicas.
Alm dos sistemas seqenciais, existem os desenvolvimentos de teorias e
mtodos para sistemas concorrentes (no abordados neste livro), tais como
CCS (Milner, 1999) e CSP (Hoare, 1969). Estas so lgebras (ou clculos) que
tm como objetivo principal denotar a comunicao entre processos. Mais
recentemente, existe um esforo no desenvolvimento de teorias e linguagens
para agentes mveis, tais como pi-calculus (Milner, 1999) e ambient-calculus
(Cardelli e Gordon, 1998), entre outros. O leitor pode consultar Nissanke
(1999) sobre um resumo de mtodos dedicados tanto a sistemas seqenciais
quanto concorrentes. O site http://www.afm.sbu.ac.uk/ contm uma srie de
links para os mtodos formais citados e vrios outros, assim como para
ferramentas existentes para eles.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #188
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #189
i i

7 Verificao de Programas

7.1 Introduo
comum encontrarmos erros quando testamos programas. Em geral, desco-
brimos os erros e rearrumamos os programas, de forma a reparar
tais erros. Em certas ocasies, conseguimos reparar tais erros sem que novos
erros sejam introduzidos. Mas, infelizmente, reparar um erro aqui gera um
outro erro l, e assim temos de fazer reparos sucessivos nos programas at
que eles possam ser executados para uma malha de testes sem produzir
resultados errados. Ser que um programa executado para aquela malha de
testes no produzir resultados errneos para outros dados? Na realidade,
os testes s garantem que o programa produzir dados corretos para o
conjunto de dados que foi testado, mas tal garantia no extrapolada para
outros testes. No so poucos os sistemas que, depois de tempos de uso,
descobrimos que produzem resultados absurdos ou mesmo param mediante
um dado diferente. Alguns programas esto aparentemente corretos, mas
no funcionam adequadamente para dados especficos. O mais grave que
alguns erros de programas, no entanto, nem so percebidos ao longo de seu
funcionamento porque no foram submetidos a dados que os revelassem.

Exemplo 7.1.1
Faa um programa que, dadas duas seqncias de nmeros inteiros em or-
dem crescente, produz uma terceira seqncia em ordem crescente contendo
todos os elementos das duas primeiras seqncias.
Uma das solues para esse problema o entrelaamento das duas seqn-
cias respeitando a ordem:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #190
i i

180 Lgica para Computao

Programa:

void merge1(int V1[], int V2[], int V3[], int tam1, int tam2)
{int pos1, pos2, pos3;
pos1 = pos2 = pos3 = 0;
while (tam1 + tam2 > 0)
{if (V1[pos1] > V2[pos2])
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;}
else
{V3[pos3] = V1[pos1];
pos1 = pos1 + 1;
tam1 = tam1 - 1;}
pos3++;
}
}

Anlise:
De uma anlise descuidada desse programa podemos supor que ele fun-
ciona corretamente para o problema proposto. Contudo, fcil notar que,
se uma das seqncias dadas for vazia, faremos uma comparao indevida:
if (V1[pos1] > V2[pos2]). Estaramos comparando um valor com um
outro valor indefinido. Tal situao ocorre quando uma das seqncias
vazia ou ainda quando todos os elementos de uma das seqncias so
menores que o da outra etc.

Se usssemos esse programa em um sistema real e nunca tivssemos tais


situaes, poderamos incorrer no erro de achar que o programa estaria
correto, uma vez que nunca teria produzido resultado inadequado (no caso
do programa anterior, encontraramos o erro com poucos testes).

Exemplo 7.1.2

Uma vez que detectamos um problema no programa do Exemplo 7.1.1,


podemos tentar corrigir tal problema. Assim, a condio do while pode ser
modificada para que este seja executado apenas quando as duas seqncias
forem no-vazias.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #191
i i

7 Verificao de Programas 181

Programa:
void merge2(int V1[], int V2[], int V3[], int tam1, int tam2)
{int pos1, pos2, pos3;
pos1 = pos2 = pos3 = 0;
while (tam1 > 0 && tam2 > 0)
{if (V1[pos1] > V2[pos2])
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;}
else
{V3[pos3] = V1[pos1];
pos1 = pos1 + 1;
tam1 = tam1 - 1;}
pos3++;
}
}
Anlise:
Agora s faremos a comparao do comando if-else se tivermos, de fato,
elementos nas duas seqncias. Mas, nesse caso, paramos de produzir a nova
seqncia quando j usamos todos os elementos de uma das seqncias origi-
nais; os elementos restantes da outra seqncia no apareceriam na seqncia
produzida. Assim, tentando corrigir um erro do programa, acabamos de
introduzir outro.

Nesse caso, temos de considerar mais esse problema a ser corrigido.

Exemplo 7.1.3
Dado o erro detectado, vamos corrigir o problema:
Programa:
void merge2(int V1[], int V2[], int V3[], int tam1, int tam2)
{int pos1, pos2, pos3;
pos1 = pos2 = pos3 = 0;
while (tam1 > 0 && tam2 > 0)
{if (V1[pos1] > V2[pos2])
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;}
else
{V3[pos3] = V1[pos1];

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #192
i i

182 Lgica para Computao

pos1 = pos1 + 1;
tam1 = tam1 - 1;}
pos3++;
}
/* preenche com vetor V1 */
while (tam1 > 0)
{V3[pos3] = V1[pos1];
pos1 = pos1 + 1;
tam1 = tam1 - 1;
pos3++;
}
/* preenche com vetor V2 */
while (tam2 > 0)
{V3[pos3] = V2[pos2];
pos2 = pos2 + 1;
tam2 = tam2 - 1;
pos3++;
}
}
Aqui, corrigimos os pequenos erros do programa original.

Se para um problema to simples cometemos erros tanto na sua elaborao


quanto na sua correo, o que acontece em problemas mais complexos?
Na prtica, como podemos perceber que o programa est incorreto? Uma
das maneiras usuais a inspeo de programas. Nela, seguimos a lgica do
programa e muitas vezes percebemos que no tratamos os casos especiais.
Para isso, usamos a definio do problema a qual, na maioria das vezes,
est descrita em linguagem natural , com o nosso conhecimento sobre o
domnio do problema. Se os casos particulares a serem tratados no so do
nosso conhecimento, no perceberemos os problemas do programa. Alm
disso, tal percepo depende do entendimento do programa, que dever
estar escrito de forma clara para que os casos especiais sejam evidenciados.
Note que, apesar de funcionar na prtica, essa uma forma subjetiva de
julgamento.
Outra tcnica bastante usada o teste de programas, como mencionado
anteriormente. Nela, so escolhidos os casos de teste a serem validados e um
conjunto de dados de teste gerado, sobre o qual o programa executado.
Os casos de teste so classes de dados sobre as quais o programa deve
atuar. A seleo dessas classes de dados arbitrria e realizada de forma

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #193
i i

7 Verificao de Programas 183

manual ou, na melhor das hipteses, semi-automtica. De qualquer forma,


um subconjunto de dados dentro daquela classe ser testado, j que o teste
exaustivo no vivel. Nesse caso, alguns dos dados no testados podero
gerar resultados errados, principalmente quando agregamos em uma nica
classe elementos com comportamentos diferenciados e no percebemos a
priori. Apesar das vrias tcnicas de teste desenvolvidas atualmente, os testes
no garantem o funcionamento para todos os possveis dados do domnio do
programa. Com isso, programas, mesmo que bem testados, podem produzir
resultados errneos para dados particulares. Para garantir que um programa
responda adequadamente aos dados do domnio, precisamos verificar se ele
, de fato, uma implementao particular da especificao do problema. Para
isso, precisamos provar que o programa satisfaz a especificao do problema,
como veremos a seguir.

7.1.1 Como Verificar Programas?


Para quaisquer sistemas computacionais, esperamos que os programas fun-
cionem adequadamente (corretamente) para todos os dados de entrada do
seu domnio de aplicao, ou seja, que eles produzam os resultados esperados
para cada dado. Por isso, no h correo absoluta de programas; nenhum
programa est correto ou errado por si s, mas em relao especificao
do problema. Existem, de fato, estratgias para produzirmos programas
corretos em relao sua especificao (Francez, 1992; Partsch, 1990):

Sntese: Dada uma especificao , um programa P construdo de


forma automtica, ou semi-automtica, por meio da transformao da
especificao original no programa P. A partir da especificao, trans-
formaes sucessivas so aplicadas at que o programa seja produzido.
Se tal problema estivesse resolvido por completo, no precisaramos
mais programar, apenas especificar e aplicar as transformaes. Apesar
dos esforos de desenvolvimentos dessa estratgia, a transformao
automtica ainda no uma realidade, exceto para algumas reas
especficas. Alm disso, o processo de deciso de quais regras devem ser
aplicadas assistido: devemos definir como tornar uma especificao
mais concreta por meio da aplicao das regras de refinamento. Em
geral, so necessrios vrios passos sucessivos para chegarmos a um
programa final: uma especificao transformada em outra mais con-
creta (mais detalhada) e assim sucessivamente at que os tipos de dados

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #194
i i

184 Lgica para Computao

e algoritmos estejam definidos, quando temos uma soluo especfica


para o problema especificado. Vale salientar que essas regras fazem
parte de um sistema de transformao e no devem produzir novas
especificaes que violem as originais.

Verificao: Dada uma especificao e um programa P, mostrar que P


um modelo para a especificao (P satisfaz ).
Diferentemente da sntese, como a especificao e o programa so
fornecidos, fazemos uma verificao a posteriori. Nessa abordagem,
devemos ter formas de comparar a especificao com o programa para
que possamos provar que este ltimo um modelo para a especifi-
cao. Essa ser a estratgia usada neste captulo para provarmos a
correo dos programas. A alternativa por essa abordagem est baseada
principalmente na facilidade de mostrar o uso da lgica e seus sistemas
de prova, na especificao e prova de correo de programas. Por outro
lado, vrios desenvolvimentos tm sido realizados nessa rea, inclusive
com aplicao na indstria.

Na prtica, o uso da verificao formal aparece em vrias situaes. Aqui


relatamos apenas algumas usuais ao desenvolvimento de programas:

Anlise: Dado um programa P, encontrar uma especificao que


defina o problema para o qual o programa P uma soluo. A partir
da, podemos descobrir se o programa resolve o problema desejado.
Essa estratgia usada, em geral, quando temos sistemas prontos que
no possuem uma especificao adequada e alguns problemas so en-
contrados. Uma especificao inadequada surge, por exemplo, quando
o sistema sofre vrias manutenes evolutivas, mas sua documentao
no devidamente modificada. Em certas ocasies, o sistema pode
produzir resultados inadequados sem que possamos determinar pre-
cisamente quais partes do sistema esto provocando tais problemas. A
anlise tem como objetivo resgatar a especificao atual de um sistema
para que a origem dos resultados indesejados seja detectada. Nesse
caso, faz-se necessria a correo dos programas. Em outras ocasies,
as especificaes de programas servem como resgate do problema para
que sejam usadas como documentao do sistema.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #195
i i

7 Verificao de Programas 185

Correo: Dados uma especificao e um programa P que no satisfaz


, construir um programa P0 que satisfaa e seja prximo de P
(considerando uma medida de proximidade cdigo, por exemplo).
Podemos ter a especificao de um problema e construirmos, por
acidente, um programa correspondente que no satisfaz a especifi-
cao (provado usando verificao). Assim, precisamos construir um
novo programa que satisfaa a dada especificao. Em geral, o novo
programa uma correo do original, modificado para atender
especificao, o qual pode ser novamente verificado quanto sua
satisfazibilidade da especificao.
Outra situao comum se d quando os sistemas sofrem modificaes
para atender a novos requisitos. Nesse caso, a especificao do pro-
blema refeita para atender aos novos requisitos e um novo programa
deve ser construdo para atender nova especificao. O novo pro-
grama , em geral, uma modificao de programas anteriores e, por-
tanto, uma correo de programa para que atenda nova especificao.

Otimizao: Dados uma especificao e um programa P que satisfaz


, encontrar um programa P0 equivalente a P que seja timo sob
determinadas medidas de complexidade.
Na prtica, queremos substituir um programa por um outro mais
eficiente. Isso necessrio para vrios casos em que encontramos
programas freqentemente usados em um sistema, mas que no tm
um desempenho adequado. Nesse caso, devemos produzir um novo
programa P0 com a eficincia adequada, mas que conserve o compor-
tamento do programa P. O novo programa P0 pode ser comparado
tanto com o programa P (equivalncia) quanto com a especificao
(satisfazibilidade). Assim, tanto relaes de equivalncia quanto de
satisfazibilidade podem ser utilizadas nessa abordagem, e tcnicas
de verificao podem ser usadas em ambas as comparaes.

Na verificao de programas, faz-se necessria a comparao entre a es-


pecificao e o programa correspondente. Se a especificao for escrita em
linguagem natural, no h como compar-la com o programa de forma
matemtica. Para que provemos que um programa satisfaz uma dada es-
pecificao, precisamos construir um sistema de provas, e no h como
construir tal sistema baseado em linguagem natural pela falta de preciso

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #196
i i

186 Lgica para Computao

e ambigidades de sentenas na linguagem. O que usualmente fazemos,


quando a especificao dada em linguagem natural, submeter o programa
a um conjunto de testes para nos certificarmos de que ele funciona adequa-
damente. Os testes de programas servem para fazermos a validao deles, mas
a verificao de programas s poder ser realizada mediante um sistema de
provas.
Portanto, para verificarmos programas, necessitamos de:

1. Uma especificao escrita em uma linguagem com fundamento mate-


mtico para que seja precisa e no ambga.

2. Um programa escrito em uma linguagem que tem o significado de seus


comandos definido de forma precisa semntica formal da linguagem
de programao.

3. Uma forma de associar e comparar as asseres da especificao com os


comandos do programa; as linguagens de especificao e programao
devem, portanto, ser comparveis.

4. Um sistema de provas que usamos para mostrar que um programa


satisfaz uma dada especificao.

A linguagem de especificao utilizada neste livro ser a j definida no


Captulo 6, baseada na lgica de predicados, com operaes definidas sobre
nmeros inteiros e vetores. A linguagem de programao ter a sua sintaxe
definida na Seo 7.2. A semntica da linguagem ser definida com um
sistema de provas associado nas Sees 7.4 e 7.5 por meio da lgica de
Hoare (1969). Dessa forma, associamos as asseres com os comandos dos
programas por meio das regras do sistema de provas.

7.2 Uma Linguagem de Programao


A linguagem de programao L aqui usada corresponde a um subconjunto
dos comandos de linguagens de programao, tais como C, C++ e Java.
Esse subconjunto escolhido das linguagens, o qual forma a nossa lingua-
gem L, capaz de computar os mesmos problemas que as outras linguagens
aqui citadas, mas certamente em uma forma mais rudimentar (sem tantas
facilidades quanto as outras). A razo para a escolha de um subconjunto
essencial da linguagem de programao para manter a simplicidade dos

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #197
i i

7 Verificao de Programas 187

elementos semnticos a serem definidos. Alm disso, alguns comandos mais


sofisticados dessas linguagens podem ser definidos a partir desse conjunto
essencial de comandos. Outras caractersticas como vinculao dinmica
de escopo necessitariam de extenses sofisticadas no sistema de provas e
desvirtuariam o propsito principal deste livro, o qual mostrar o uso da
lgica na prova de programas.
A linguagem de programao L tem como tipos de dados primrios os do-
mnios dos nmeros inteiros e os booleanos. Assim, temos as expres-
ses definidas sobre nmeros inteiros (expresses aritmticas) e outras ex-
presses sobre valores booleanos (expresses lgicas). O outro domnio
sinttico da linguagem so os comandos, responsveis pelas transformaes
de estados dos programas. A sintaxe da linguagem a seguinte:

Expresses Aritmticas: Sejam n um nmero no domnio dos inteiros


(. . . , 1, 0, 1, . . .) e x uma varivel que tem como contedo um valor
do domnio dos inteiros,

E ::= n | x | (E) | (E + E) | (E E) | (E E)

As operaes bsicas sobre inteiros (+, , so soma, subtrao


e multiplicao) tm o significado usual.
A prioridade dos operadores tambm usual: o unrio o de
maior prioridade, seguido dos , e +, binrios que tm a mesma
prioridade. Portanto, usamos parnteses para auxiliar a definio
das expresses sobre inteiros, assim como na matemtica.

Expresses Lgicas: Seja {true, false} o conjunto de valores booleanos,

B ::= true | false | (!B) | (B&B) | (B||B) | (E < E) | (E == E) | (E! = E)

!, &, || representam negao, conjuno e disjuno, respectiva-


mente.
! tem a mais alta prioridade, e & e || tm a mesma prioridade.
Parnteses tambm so usados para determinar prioridades nas
expresses.
As comparaes sobre inteiros resultam em um valor booleano.
< representa o menor, == representa a igualdade entre valores

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #198
i i

188 Lgica para Computao

inteiros e ! = a diferena entre valores inteiros. As compara-


es == e ! = podem ser definidas a partir da 6 e da negao,
mas foram introduzidas aqui para facilitar a leitura das expresses
lgicas dos programas. Mais uma vez, parnteses tambm so
permitidos nessas expresses para determinar as prioridades.

Comandos: Considere as expresses aritmticas e lgicas definidas ante-


riormente, x uma varivel do tipo inteiro e as chaves ({}) para demarcar
os blocos de comandos,

C ::= x := E | C; C | if B {C} else {C} | while B {C}

x := E corresponde ao comando de atribuio: a expresso


aritmtica E avaliada, e o resultado dela associado como
contedo da varivel x.
C1; C2 corresponde ao comando de composio seqencial: o
comando C1 executado inicialmente e, aps o trmino da sua
execuo, o comando C2 executado. importante salientar que,
se o comando C1 no termina, o comando C2 no pode ser
executado. Alm disso, o comando C2 executado sobre o estado
do programa j modificado pelo comando C1.
if B {C1} else {C2} corresponde ao comando condicional: a
expresso lgica B avaliada e, se o resultado dessa expresso for
true, o bloco de comandos {C1} ser executado; se for false, o bloco
de comandos {C2} ser executado.
while B {C} corresponde ao comando de repetio da linguagem:
a expresso lgica B inicialmente avaliada sobre o estado atual
e, se o valor resultado for true, o bloco de comandos {C} ser
executado. Aps a execuo do bloco de comandos, B ser no-
vamente avaliada sobre o estado atual (aps a execuo do bloco
de comandos). Se a expresso B avaliada e tem o valor false como
resultado, o comando termina.

Aqui, definimos os comandos da linguagem de forma intuitiva, assim


como os conhecemos das linguagens de programao no mercado. Como j
foi mencionado anteriormente, para que possamos verificar os programas em
relao s especificaes correspondentes, precisamos definir precisamente o
efeito de cada comando; a semntica formal dos comandos da linguagem.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #199
i i

7 Verificao de Programas 189

Considerando que um programa seqencial essencialmente um trans-


formador de dados de um estado inicial para dados em um estado final, a
idia mais intuitiva dessas transformaes pode ser definida pela semntica
operacional (Winskel, 1993), que denota o efeito sobre o estado do programa
para cada comando da linguagem. Assim, o programa possui um estado
inicial e sofre efeitos sucessivos de mudanas de estados, por meio de seus
comandos, at chegar ao estado final. A execuo de um comando C no
estado atual provoca um efeito sobre o estado do programa, o qual passa a
ser 0:
< C, > 0

A semntica operacional deve denotar os efeitos de todos os comandos


da linguagem de programao e, para isso, deve ser definida sobre todos os
comandos e expresses da linguagem. A semntica , de fato, definida sobre
todos os elementos sintticos da linguagem, e a semntica de um programa
inferida a partir da semntica de cada um de seus comandos em particular
(por induo estrutural).

Exemplo 7.2.1
No comando de atribuio x := E, por exemplo, temos a avaliao da
expresso E no estado atual

< E, > m

m o resultado da avaliao da expresso E no estado . O efeito da


atribuio da expresso E a uma varivel x no estado , portanto:

< x := E, > [m/x]

quando o resultado da avaliao de E m no dado estado. Note que o


novo estado ([m/x]) obtido a partir do estado , com a diferena de
que o contedo associado varivel x passa a ser m. A regra de inferncia
para o comando de atribuio na semntica operacional pode, ento, ser es-
crita por:
< E, > m
Atrib-Operacional
< x := E, > [m/x]

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #200
i i

190 Lgica para Computao

que lido: se E avaliado com o valor m no estado , ento o efeito do


comando de atribuio x := E sobre o programa, no mesmo estado, ser a
gerao do novo estado [m/x].

Vale salientar que, para que obtenhamos tal efeito do comando de atribui-
o, precisamos ter definido tambm a semntica das expresses aritmticas
(como avaliar E no estado ?). Da mesma forma, as expresses lgicas e todos
os outros comandos tambm devem ter suas semnticas definidas.

Exemplo 7.2.2
Para exemplificar o uso da semntica do comando de atribuio definido no
Exemplo 7.2.1, considere o programa:
a := 5 ;
O programa tem uma varivel, que no possui valor associado inicial-
mente. O estado inicial do programa , portanto, denotado pelo estado

= {(a, ?)}

como a avaliao da expresso 5 no estado o valor 5,

< 5, > 5

temos que
< a := 5, > [5/a]

chegando ao estado final:

0 = [5/a] = {(a, 5)}

Na notao de regra de inferncia:

< 5, > 5
< a := 5, > [5/a]

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #201
i i

7 Verificao de Programas 191

Apesar de ser uma maneira intuitiva de denotar a semntica das lingua-


gens, a semntica operacional no faz uma representao explcita entre
asseres que denotam as pr e ps-condies dos programas. Como o nosso
objetivo primordial, neste captulo, a verificao, devemos ter um sistema
de provas para que, dados a especificao do programa, por meio das suas pr
e ps-condies, e um programa, provemos que ele satisfaz a especificao:

hi Prog hi (7.1)

Uma interpretao para essa assero dada por (correo parcial):

para todo estado que satisfaz , se a execuo de Prog a partir


do estado termina, produzindo o estado 0, ento 0 satisfaz .

A assero 7.1 chamada de tripla de Hoare por ter sido proposta por
Hoare com o objetivo de provar a correo de programas. Na prtica, quere-
mos um sistema (clculo) de provas para provar a validade da assero 7.1:

` hi Prog hi

Complementando a idia inicial das triplas, Hoare tambm desenvolveu


um sistema de provas no qual as regras relacionam cada construtor da lin-
guagem de programao com as asseres necessrias. Historicamente, regras
similares foram definidas por R. W. Floyd para provar diagramas de fluxo
(Floyd, 1967) e, posteriormente, adaptadas por Hoare para programas. Por
isso, so tambm denominadas regras Floyd-Hoare. Alm disso, os autores
inicialmente propuseram as regras como uma forma de dar o significado aos
comandos de programas em termos de axiomas que designam como provar
as propriedades. Por essa razo, essa abordagem para definio dos comandos
tambm denominada semntica axiomtica (Winskel, 1993).
Nas sees que seguem, mostraremos o que um sistema de provas
baseado em lgica para a prova de asseres em programas.

7.3 Prova de Programas


Sob o ponto de vista prtico, o que significa construir um sistema de provas
para provar asseres como

` hi Prog hi? (7.2)

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #202
i i

192 Lgica para Computao

As precondies so propriedades sobre o estado inicial do programa


Prog. Podemos ter, por exemplo, um estado particular que satisfaa a
assero
`

ento, aps a execuo do programa Prog sobre o estado , um estado 0


produzido e 0 satisfaz :

` dProgc `

onde Prog termina se executado sobre um estado que satisfaz e dProgc


representa o estado produzido por Prog aps a sua execuo sobre o es-
tado .
A assero 7.2, contudo, deve ser vlida para todos os estados que satisfa-
zem :
( ` ) dProgc `

Nessas discusses, assumimos que o programa Prog termina quando


executado sobre os estados . Na prtica, contudo, temos programas que
no param, mas no mencionamos ainda como lidar com eles. As provas de
programas podem, de fato, ser divididas em: provas quando assumimos que
o programa pra e provas que tm como tarefa tambm provar a terminao
do programa. Definimos, a seguir, essas duas noes de provas.
Definio 7.3.1 correo parcial A tripla

hi Prog hi

satisfeita sob correo parcial se, para todos os estados que satis-
fazem , o estado resultante da execuo do programa Prog satisfaz
a ps-condio , se Prog termina. Nesse caso, `par a relao de
satisfazibilidade para a correo parcial:

`par hi Prog hi

Correo parcial um requisito ineficiente, na prtica, porque no garante


a terminao do programa: qualquer programa que no termina satisfaz a sua
especificao. Na outra noo de correo, a satisfazibilidade, bem como a
terminao do programa, deve ser provada. Tal noo definida como segue:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #203
i i

7 Verificao de Programas 193

Definio 7.3.2 correo total A tripla

hi Prog hi

satisfeita sob correo total se, para todos os estados que satisfazem
, o estado resultante da execuo do programa Prog satisfaz a ps-
condio e Prog termina. Nesse caso, `tot a relao de satisfazibili-
dade para a correo total:

`tot hi Prog hi

Note que qualquer programa que entra em um lao infinito de repetio


no satisfaz sua especificao sob a relao de correo total. Essa relao ,
obviamente, muito mais til na prtica, e o nosso interesse se concentra nela.
Contudo, provar correo total de programas pode ser dividida em: provar
correo parcial e provar que o programa termina.

Exemplo 7.3.1
Suponha um programa Fat que calcula o fatorial de um nmero inteiro n:
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Considere a especificao do problema do clculo de fatorial (j apresen-
tada nos Exemplos 6.3.4 e 6.3.5).
Especificao:
Pre:n > 0
Pos:fat = n!
Reescrevendo o problema usando as triplas de Hoare, temos:

hn > 0i Fat hfat = n!i

Agora queremos provar que o programa Fat satisfaz a especificao para a


relao tanto de correo parcial quanto de correo total de programas.

`par hn > 0i Fat hfat = n!i ?

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #204
i i

194 Lgica para Computao

`tot hn > 0i Fat hfat = n!i ?

Para provar a correo parcial (`par ), dado que o programa Fat termina,
precisamos verificar se a varivel fat contm o resultado da funo fatorial
para o dado n, quando n um nmero natural. Para esse programa, fcil
averiguar que, para nmeros naturais, o programa calcular o fatorial de n
como requisitado.
Para provar a correo total (`tot ), precisamos verificar que a varivel fat
contm o resultado da funo fatorial para o dado n, quando n um nmero
natural, e que o programa Fat termina. A argumentao sobre o resultado
produzido pelo programa a mesma que a anterior. Contudo, para a correo
total, precisamos ainda provar que o programa termina: como a condio de
parada do comando de repetio depende da varivel i que incrementada
de 0 at n, e n um nmero positivo, podemos argumentar que o programa
ter um nmero finito de passos de execuo (termina). Por isso, o pro-
grama Fat satisfaz a especificao dada.

Podemos ter ainda uma especificao para um problema similar:

Exemplo 7.3.2
Consideremos novamente o programa Fat para calcular o fatorial de um
nmero inteiro n:
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Com a descrio informal desse problema, se o especificador no tiver co-
nhecimento do domnio da funo fatorial, pode produzir uma especificao
que no restringe o domnio de dados de entrada do programa:

htruei Fat hfat = n!i

O que acontece se quisermos provar as correes parcial e total dessa


assero?
`par htruei Fat hfat = n!i ?

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #205
i i

7 Verificao de Programas 195

`tot htruei Fat hfat = n!i ?

Para provar a correo parcial (`par ), precisamos verificar: se o programa


Fat termina, ento a varivel fat contm o resultado da funo fatorial
para o dado n, quando n um nmero inteiro. Nesse caso, como estamos
interessados apenas nos resultados do programa para dados de entrada que
ele termina, nem precisamos recorrer aos dados de entrada. A argumentao
da satisfazibilidade similar do Exemplo 7.3.1.
Para provar a correo total (`tot ), contudo, precisamos verificar que a
varivel fat contm o resultado da funo fatorial para o dado n inteiro e
que o programa Fat termina. A argumentao sobre o resultado produzido
pelo programa a mesma que a anterior. O trmino do programa pode ser
provado para os nmeros naturais (como no Exemplo 7.3.1), mas falha para
os inteiros negativos: como i decrementado e n negativo, i no convergir
para o valor de n e o programa no pra.

Nos exemplos citados, mostramos apenas de maneira informal, por meio


de argumentaes, quando as correes parcial ou total so satisfeitas ou
falham. Mas essas argumentaes no constituem provas dessas relaes. Nas
sees que seguem, definimos os sistemas de prova para verificar (formal-
mente) tanto a correo parcial quanto a correo total de programas.

7.4 Correo Parcial de Programas


Argumentamos, at o momento, que desejamos provar as triplas de Hoare,
que foram definidas considerando o programa como um todo. O sistema de
provas para tanto definido sobre cada elemento sinttico da linguagem, e
as provas so realizadas usando induo sobre as estruturas dos programas.
Ou seja, as regras provam a correo de uma assero para um comando
mais complexo, pela prova de correo das asseres de seus subcomandos.
Devemos, ento, distinguir dois elementos no sistema de provas: as regras
de inferncia sobre cada um dos elementos sintticos dos programas e o
mecanismo de prova utilizando as regras definidas.
7.4.1 Regras
As regras apresentadas no Quadro 7.1 so uma adaptao das regras apresen-
tadas por Hoare em 1969, as regras de Hoare para a linguagem, exemplo da
Seo 7.2. O conjunto dessas regras forma a lgica de Hoare.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #206
i i

196 Lgica para Computao

Quadro 7.1 Regras de prova (parcial).

hi C1 hi hi C2 hi
Composio
hi C1; C2 hi

Atribuio
h[E/x]i x := E hi

h Bi C1 hi h Bi C2 hi
IfElse
hi if B {C1} else {C2} hi

h Bi C hi
WhileParcial
hi while B {C} h Bi

` 0 hi C hi ` 0
Implicao
h0i {C} h0i

O entendimento das regras relativamente fcil, com exceo, talvez, das


regras para os comandos de atribuio e repetio (while):

Composio Dadas as especificaes para os fragmentos de programa


C1 e C2:
hi C1 hi hi C2 hi

a regra Composio nos permite concluir:

hi C1; C2 hi

Em outras palavras, se j temos provado hi C1 hi e hi C2 hi, po-


demos provar tambm hi C1; C2 hi.

Atribuio A regra para a atribuio no contm premissas e , portanto,


um axioma da lgica. Segundo essa regra, se quisermos provar que a
propriedade satisfeita aps a atribuio x := E, precisamos provar
tambm que h[E/x]i satisfeita no estado que antecede o comando de

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #207
i i

7 Verificao de Programas 197

atribuio ([E/x] significa a frmula em que todas as ocorrncias


livres de x so substitudas pela expresso E).
De uma leitura dessa regra com pouca ateno, temos o mpeto de
pensar que ela foi escrita s avessas. Contudo, desejamos provar a
satisfazibilidade de propriedades sobre programas em relao aos re-
sultados produzidos. Da mesma forma, queremos provar asseres
aps o comando de atribuio, a assero . Como sabemos que x
contm o valor da expresso E no estado que deve satisfazer (nesse
ponto do programa, a atribuio x := E foi realizada), ento a assero
a ser satisfeita antes da atribuio a prpria . Mas a propriedade
formulada sobre um estado quando a atribuio j foi realizada,
enquanto tal atribuio ainda no foi realizada antes do comando.
Assim, a propriedade a ser satisfeita antes da atribuio a prpria
com todas as ocorrncias de x substitudas pela expresso E, [E/x].
IfElse A regra de prova para o comando if-else permite a prova de
triplas do tipo
hi if B {C1} else {C2} hi

pela decomposio desta em duas outras: uma quando a condio B


verdadeira, e outra quando essa condio falsa. A precondio
deve ser satisfeita antes de executar o comando, independentemente de
a condio ser verdadeira ou falsa. Da mesma forma, a ps-condio
deve ser satisfeita aps o comando. A prova da satisfazibilidade da
especificao pelo comando pode ser desmembrada, ento, em

h Bi C1 hi

e
h Bi C2 hi

A partir das provas desses dois elementos, podemos concluir a prova


do comando if-else. Isso mostra, mais uma vez, a caracterstica
composicional do sistema a ser formulado a partir dessas regras.
WhileParcial while o comando mais sofisticado da nossa linguagem e,
portanto, esperado que a regra para sua prova tambm seja a mais
sofisticada:
hi while B {C} h Bi

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #208
i i

198 Lgica para Computao

Uma das idias centrais dessa regra ter uma propriedade () preser-
vada ao longo das iteraes do comando de repetio, a qual chamamos
de invariante do comando de repetio. No comando, temos a condi-
o B que depende de algumas variveis e uma seqncia de comandos
({C}) a serem executados quando a condio verdadeira. As variveis
relacionadas condio B so, em geral, modificadas ao longo da
execuo do comando C mas o invariante deve ser satisfeito. Assim,
no interessa quantas vezes temos as iteraes no dado comando de
repetio, o invariante deve ser satisfeito antes e depois de o comando
C ser executado ( assumido que o comando C termina)

h Bi C hi ,

quando imediatamente aps a execuo do comando while

h Bi .

O que distingue quando mais uma iterao deve ser realizada, ou no,
a condio B.

Implicao A regra da implicao nos diz que se j provamos

` 0

e
` 0

e ainda que o comando C satisfaz a sua especificao:

hi C hi

ento, temos tambm a prova de

h0i {C} h0i

Essa regra faz a conexo entre as provas que podemos ter na lgica
de predicados, usada na especificao dos problemas, com a lgica de
programas aqui apresentada. Isso nos permite considerar as provas
na lgica de predicados como parte das provas de programas. Essa

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #209
i i

7 Verificao de Programas 199

regra amplia a lgica de programas para que considere provas sobre os


predicados e estabelece, portanto, o elo de ligao entre especificao e
programas.

7.4.2 Sistema de Provas


Pelas regras de Hoare, temos a noo de derivao de provas de comandos a
partir de elementos menores e, conseqentemente, um sistema de provas. As
derivaes so, ento, as provas e a concluso, um teorema.
Uma vez que temos as regras de Hoare como lgica para a prova de
programas, precisamos agora de um mecanismo para usar tais regras e
produzir as provas. Como as prprias regras sugerem, provar um programa
consiste em compor a prova de cada um dos comandos na seqncia em que
aparecem no programa, por meio da regra Composio. Assim, provar que o
programa P
C0;
C1;
C2;
..
.
Cn

satisfaz a especificao
Pre:
Pos:

`par hi P hi

corresponde a provar cada um dos comandos para as suas pr e ps-condies


individuais:
hi
C0;
h1 i
C1;
h2 i
..
.
hn i
Cn
hi

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #210
i i

200 Lgica para Computao

O que corresponde a:

`par hi C0 h1 i
`par h1 i C1 h2 i
..
.
`par hn i Cn hi

Qual regra deve ser aplicada para provar cada comando detectada pela
prpria sintaxe do comando; se uma Atribuio, um IfElse etc. Mas, aqui,
foram introduzidas asseres intermedirias entre os comandos: como en-
contrar tais asseres quando temos apenas a especificao das pr () e
ps-condies () do problema?
Em princpio, queremos provar que o programa produz um resultado
que satisfaz a ps-condio se tivermos como premissa sobre o estado
inicial do programa. Com esse objetivo, podemos, por exemplo, argumentar
a aplicao da regra Atribuio:

Atribuio
h[E/x]i x = E hi

Exemplo 7.4.1
Suponha que queiramos provar:

`par htruei x := 5 hx > 0i

Em outras palavras, queremos verificar se o programa dado produz um


resultado (denotado pela varivel x) maior que zero. Como temos apenas
um comando de atribuio no programa, devemos utilizar a regra Atribuio:
x

htruei

h(x > 0)[x = 5]i h5 > 0i
x := 5


hx > 0i

Nesse passo de prova, olhamos o que queramos provar (x > 0) e des-


cobrimos qual a propriedade necessria antes do comando de atribuio do

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #211
i i

7 Verificao de Programas 201

programa (5 > 0). Agora, para completar a prova, devemos verificar se a


precondio true suficiente para provar essa nova assero requerida:

true (5 > 0)

Como a assero 5 > 0 verdadeira no domnio dos inteiros, temos que a


implicao acima tambm o , finalizando assim a prova do programa aps
a aplicao da regra Implicao.

Assim como na atribuio, a aplicao das regras sobre os demais coman-


dos segue a mesma ordem: olhamos o que queremos provar para, ento,
introduzir asseres intermedirias verificar se a premissa suficiente para
provar a assero do topo do programa.
As provas aqui sero apresentadas em um tableau de provas com os
seguintes elementos:

Regra Passo Assero Programa

em que Regra e Passo representam o nome da regra a ser aplicada e o


passo da prova, respectivamente (o passo da prova no necessrio, mas
foi introduzido aqui para que o leitor acompanhe o momento em que as
regras so aplicadas). A prova do programa do Exemplo 7.4.1 pode ser, ento,
expressa de forma resumida como:

Regra Passo Assero Programa


Implicao 2 true (5 > 0)
Atribuio 1 5>0 x := 5;
0 x>0

No passo 0, olhamos a ps-condio que desejamos para o programa (x >


0), no passo 1, aplicamos a regra Atribuio e descobrimos qual a precondio
para o dado comando: substituindo as ocorrncias de x pela expresso da
atribuio (5) na ps-condio do comando (x > 0), obtemos 5 > 0. Como
chegamos ao topo do programa, devemos agora provar que a precondi-
o do programa true suficiente como premissa para provarmos a assero
requerida no topo do programa, executando assim o passo 2. Nesse ponto,
o programa provado correto se conseguimos provar a assero produzida

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #212
i i

202 Lgica para Computao

pelo passo 2. Tal prova, no entanto, deve recorrer a um sistema de provas


para a lgica de predicados que considera o domnio dos inteiros. S depois
dessa prova podemos concluir a prova do programa (usamos o smbolo
para denotar que foi provado e para denotar que no pode ser provado).
A prova do programa pode ser lida de cima para baixo, mas a aplicao
das regras realizada de baixo para cima: partindo da ps e subindo at a
precondio. Apresentamos, a seguir, provas para programas simples para
ilustrar a aplicao de cada uma das regras da Quadro 7.1.

Atribuio

Exemplo 7.4.2

Seja Suc um programa que deve calcular o sucessor de um nmero no


domnio dos inteiros. A especificao do problema dada por:
Especificao:
Pre:true
Pos: suc = x + 1

Programa:

suc := x + 1

Verificao:

`par htruei Suc hsuc = x + 1i

Regra Passo Assero Programa


Implicao 2 true (x + 1 = x + 1)
Atribuio 1 x+1= x+1 suc := x + 1;
0 suc = x + 1

Note que, no passo 1, aplicamos a regra Atribuio e assim geramos uma nova
assero, em que suc substituda por x + 1. Assim, a assero x + 1 = x + 1
gerada a partir da ps-condio suc = x + 1 e a aplicao da regra Atribuio.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #213
i i

7 Verificao de Programas 203

Composio
Da mesma forma que no comando de atribuio, a regra sobre composio
tambm pode ser aplicada diretamente quando o comando sintaticamente
reconhecido. importante salientar que, se temos a pr e a ps-condio
para o programa e iniciamos a prova pela ps-condio, podemos descobrir
a assero necessria antes do ltimo comando, e assim sucessivamente
at chegarmos ao topo do programa no qual encontramos a precondio.
Essa regra da composio permite que as provas sejam realizadas de forma
composicional, na qual provamos apenas um comando por vez.

Exemplo 7.4.3
Seja SucPred um programa que deve calcular o sucessor e o predecessor de
um nmero no domnio dos inteiros. A especificao do problema dada
por:
Especificao:
Pre:true
Pos:pred = x 1 suc = x + 1
Programa:
suc := x + 1;
pred := x - 1;
Verificao:

`par htruei SucPred hpred = x 1 suc = x + 1i

Regra Passo Assero Programa


Implicao 3 true (x 1 = x 1
x + 1 = x + 1)
Atribuio 2 x1=x1 x+1 =x+1 suc := x + 1;
Atribuio 1 x 1 = x 1 suc = x + 1 pred := x 1;
0 pred = x 1 suc = x + 1

A assero x 1 = x 1 suc = x + 1 gerada a partir da ps-condio


e da aplicao da regra Atribuio, no passo 1, passa a ser a ps-condio para
o comando suc := x + 1. Por causa da regra Composio, podemos novamente
aplicar a regra Atribuio gerando, assim, a nova assero x 1 = x 1 x+ 1 =
x + 1 no topo do programa.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #214
i i

204 Lgica para Computao

IfElse

Para o comando IfT henElse temos duas alternativas: quando a condio


verdadeira e quando ela falsa:

h Bi C1 hi h Bi C2 hi
IfElse
hi if B {C1} else {C2} hi

Assim, quando iniciamos pela ps-condio e queremos lev-la para o


topo do comando, devemos considerar duas situaes:

1. Quando a condio verdadeira, devemos considerar o comando C1:


a ps-condio do comando () deve ser levada ao topo considerando
apenas o comando C1. Denotamos por 1 essa nova assero conside-
rando o C1

2. Quando a condio falsa, devemos considerar o comando C2: a


ps-condio do comando () deve ser levada ao topo considerando
apenas o comando C2. Denotamos por 2 essa nova assero conside-
rando o C2

Essas duas situaes so refletidas nas premissas da regra IfElse:

h Bi C1 hi h Bi C2 hi

Para a primeira premissa, quando a condio verdadeira (B), 1 deve


ser verdadeira. Para a segunda premissa, quando a condio falsa (B), 2
deve ser verdadeira. Como devemos considerar as duas premissas no topo do
comando, a assero necessria no topo do comando deve ser:

B 1 B 2

A prova do comando concluda com a prova da assero anterior, consi-


derando hi como premissa. Mas, se o comando ainda no est no topo do
programa a ser provado (muitas vezes, temos uma seqncia de comandos
anteriormente), levamos tal assero at o topo do programa para prov-la.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #215
i i

7 Verificao de Programas 205

Utilizando a regra IfElse sobre o comando a seguir:

hi
if(B)
{C1}
else
{C2}
hi

temos, portanto, os seguintes passos para a prova do comando if-else:

1. Introduzir como ps-condio de C1 e C2:

hi
if(B)
{C1
hi }
else
{C2
hi }
hi

2. Produzir as novas asseres como precondies de C1 e C2 a partir da


ps-condio : 1 e 2 .
hi
if(B)
{ h1 i
C1
hi}
else
{ h2 i
C2
hi}
hi

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #216
i i

206 Lgica para Computao

3. Produzir a nova assero no topo do comando que garanta a validade


das premissas:
hi
hB 1 B 2 i
if(B)
{h1 i
C1
hi}
else
{h2 i
C2
hi}
hi

Nesse ltimo passo, devemos provar a nova assero, tendo como premissa
a precondio , concluindo assim a prova de todo o comando. A seguir,
ilustramos a aplicao da regra com um programa simples.

Exemplo 7.4.4

Seja Maisum um programa que dado um nmero inteiro, calcula o prximo


nmero no domnio dos nmeros naturais.
Especificao:
Pre:true
Pos:num = 0 num = x + 1

Programa:

a := x + 1;
if (a < 0)
{num := 0;}
else
{num := a;}

Verificao:

`par htruei Maisum hnum = 0 num = x + 1i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #217
i i

7 Verificao de Programas 207

Regra Passo Assero Programa


Implicao 5 true (((x + 1) < 0 0 = 0 0 = x + 1)
(((x + 1) < 0) x + 1 = 0 x + 1 = x + 1))
(((x + 1) < 0) x + 1 = 0 x + 1 = x + 1) a := x + 1;
IfElse 3 (a < 0 0 = 0 0 = x + 1)
((a < 0) a = 0 a = x + 1) if (a < 0) {
Atribuio 2 0=00=x+1 num := 0;
IfElse 1 num = 0 num = x + 1 }
else {
Atribuio 2 a=0a=x+1 num := a;
IfElse 1 num = 0 num = x + 1 }
0 num = 0 num = x + 1

Nesse caso particular, temos em conjunto a aplicao das regras de com-


posio, atribuio e do condicional if-else. Assim, a prova da assero do
topo do if-else foi levada ao topo de todo o programa para ser realizada.

WhileParcial
Todas as regras mostradas anteriormente so aplicadas diretamente aos pro-
gramas sem que seja necessria a criao de novos elementos. Elas podem ser,
portanto, aplicadas automaticamente. Para a aplicao da regra WhileParcial, no
entanto, temos um novo elemento introduzido, o invariante.
Nos programas, queremos provar:

hi while B {C} hi (7.3)

assim como nos outros comandos mostrados at o momento. Contudo,


a regra WhileParcial definida usando asseres sobre uma mesma proprie-
dade ():
h Bi C hi
WhileParcial
hi while B {C} h Bi

Nesse caso, a propriedade deve ser satisfeita tanto antes e depois


de cada iterao do comando quanto ao final dele. O que determina quan-
do a iterao deve ser realizada a condio B, que falsa apenas ao final do
comando, quando no devemos mais realizar as iteraes.
Para aplicarmos a regra WhileParcial ao comando, como aparece em (7.3)
devemos, ento, descobrir o invariante , tal que:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #218
i i

208 Lgica para Computao

1. `

2. ` ( B)

porque
hi hi while B {C} h Bi hi

No entanto, para que possamos aplicar a regra WhileParcial, devemos ter


como premissa:
h Bi C hi

Ento, se provarmos que , de fato, um invariante, a premissa pode


ser usada. Assim como tivemos no comando if-else, se tivermos como
ps-condio do corpo do comando C, podemos descobrir a precondio a
ser satisfeita antes de iniciar o corpo do comando: tendo aps o corpo C,
levamos essa assero para o topo de C e descobrimos 0. Note que, antes de
o corpo C ser executado, temos a assero B na premissa. Essa assero
pode, ento, ser usada para provarmos 0.

( B) 0

Assim, para provar que um invariante, precisamos provar que:

1. ` ( B)

2. ` ( B) 0

Descobrir o invariante depende de uma percepo de asseres candi-


datas para que os itens anteriores sejam satisfeitos. importante salientar
que o invariante no precisa ser satisfeito durante a execuo de C, mas
antes do comando while, antes e depois de cada iterao do corpo C e aps
todo o comando while. Em geral, um invariante til expressa uma relao
entre as variveis manipuladas no corpo do comando (C). Quais variveis
devem ser, de fato, utilizadas para expressar o invariante e qual a relao
entre elas podem ser percebidas pela seqncia de valores produzidos por
essas variveis ao longo de uma computao do programa. Assim, a partir de
uma computao exemplo, podemos notar a relao entre as variveis antes
da execuo do comando e logo aps a execuo do corpo C, ou seja, aps
cada iterao do comando de repetio.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #219
i i

7 Verificao de Programas 209

Exemplo 7.4.5
Consideremos novamente o programa para calcular o fatorial com a sua
respectiva especificao (j apresentado no Exemplo 7.3.1).
Especificao:
Pre:n > 0
Pos:fat = n!
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Para encontrar o invariante para o comando while, devemos considerar
um exemplo de computao do comando, para dados reais, e ento comparar
a relao entre as variveis. Podemos ter, por exemplo, n = 4:

iterao i fat i 6= n
0 0 1 true
1 1 1 true
2 2 2 true
3 3 6 true
4 4 24 false

A iterao 0 corresponde ao momento imediatamente anterior execuo


do comando. A condio (i 6= n) calculada com os valores das variveis ao
trmino da iterao (os que aparecem na tabela).
Note que a relao
fat = i!

mantida tanto antes (iterao 0) quanto aps cada iterao. Essa assero ,
portanto, uma candidata a invariante do comando. Resta-nos provar que
, de fato, um invariante:

1. ` ( B)

2. ` ( B) 0

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #220
i i

210 Lgica para Computao

fat = i!
B i = n
B i 6= n
0 fat (i + 1) = (i + 1)!
fat = n!

ento,

1. ` (fat = i! (i = n)) fat = n!

2. ` (fat = i! i 6= n)) 0 fat (i + 1) = (i + 1)!)

Como as condies para que seja, de fato, um invariante so satisfeitas,


este passa a ser um invariante do comando. Com isso, pode passar a ser
uma precondio para o comando while.

Os passos de prova para o comando

hi
while(B)
{C}
hi

usando a regra WhileParcial so:

1. Encontrar um candidato a invariante observando a relao entre as


variveis do corpo do comando C, antes e aps a sua execuo

2. Certificar como possvel invariante em relao ps-condio ,


provando:
` B

hi
while (B)
{C}
B
hi

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #221
i i

7 Verificao de Programas 211

3. Introduzir como ps-condio do corpo C do comando while:

hi
while (B)
{C
hi }
B
hi

4. Produzir 0 a partir de e o corpo C:

hi
while (B)
{ h0i
C
hi}
B
hi

5. Certificar como invariante provando:

( B) 0

hi
while (B)
( B) 0
{h0i
C
hi}
B
hi

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #222
i i

212 Lgica para Computao

6. Introduzir como precondio do comando while:

hi
hi
while (B)
( B) 0
{h0i
C
hi}
B
hi

Exemplo 7.4.6
Consideremos novamente o programa do Exemplo 7.4.5:
Especificao:
Pre:n > 0
Pos:fat = n!
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}
Verificao:
`par hn > 0i Fat hfat = n!i

Inicialmente, precisamos encontrar um candidato e certific-lo como in-


variante, para o comando while, considerando a ps-condio (passo
a passo explicado no Exemplo 7.4.5). Na prova, inclumos como primeiro
passo a certificao do invariante em relao ps-condio. Assim, os
elementos:

Invariante : fat = i!
` ( B) : (fat = i! (i 6= n)) fat = n!

foram includos na tabela a seguir em vez de serem mantidos em separado.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #223
i i

7 Verificao de Programas 213

Regra Passo Assero Programa


Implicao 9 n > 0 (1 = 0!)
Atribuio 8 1 = 0! fat := 1;
Atribuio 7 fat = 0! i := 0;
WhileParcial 6 fat = i! while (i != n)
Implicao 5 (fat = i! (i 6= n))
fat (i + 1) = (i + 1)!
Atribuio 4 fat (i + 1) = (i + 1)! { i := i + 1 ;
Atribuio 3 fat i = i! fat = fat * i;
WhileParcial 2 fat = i! }
WhileParcial 1 (fat = i! (i 6= n)) fat = n!
Invariante 1 fat = i!
0 fat = n!

A certificao do invariante em relao precondio foi apenas realizada


no topo do programa juntamente com a prova final. Novamente, todas as
provas que recorrem a um provador externo para a lgica de predicados e
nmeros inteiros esto anotadas com .

Note que, nesse ltimo exemplo, assim como em todos os outros an-
teriores, todas as provas relativas lgica de predicados foram omitidas.
A rigor, para que provemos os programas, precisamos de um sistema de
provas para a lgica de predicados, assim como para os nmeros inteiros, e
tais provas deveriam ser mostradas aqui. Como queremos priorizar os passos
de prova para os programas j que as provas para a lgica de predicados
foram vistas na Parte II, optamos por no introduzir, aqui, essas provas (o
leitor pode recorrer aos sistemas de provas da Parte II do livro). Da mesma
forma, apelamos para o conhecimento intuitivo do leitor em relao aos
nmeros inteiros para no introduzir mais a teoria e sistemas de provas
para nmeros inteiros. Isso sobrecarregaria a leitura do livro, e a teoria de
nmeros inteiros, ou quaisquer outros tipos aqui utilizados, est fora do
escopo deste livro.

7.4.3 Correo e Completude do Sistema de Provas


Quando apresentamos um sistemas de provas, as primeiras questes que
surgem so:

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #224
i i

214 Lgica para Computao

1. O sistema de provas correto? Quando o sistema produz uma prova de


correo sobre o programa, verdade que o programa est correto?

2. O sistema de provas completo? Todo programa que est correto em


relao sua especificao pode ser provado pelo sistema?

Definio 7.4.1 Quando um programa satisfaz a sua especificao sob a rela-


o de correo parcial, dizemos que

par hi P hi

Ento, o sistema de provas para a correo parcial de programas correto


quando
`par hi P hi par hi P hi

Por outro lado, o sistema de provas para a correo parcial de programas


completo quando
par hi P hi `par hi P hi

Para provar a correo do sistema de provas, necessria apenas a prova


de correo para cada uma das regras (induo estrutural), j que o sistema
composicional. Essa uma prova relativamente simples e pode ser encon-
trada em Winskel (1993).
Para provar a completude do sistema de provas, contudo, devemos recorrer
a provas para a lgica de predicados, j que utilizamos seus sistemas de
provas como recurso externo s nossas provas. Pelo teorema de incompletude
de Gdel, j enunciado na Parte II deste livro, no podemos provar a com-
pletude para a lgica de predicados e, portanto, no podemos provar para o
novo sistema aqui introduzido. Um artifcio usado para provar a comple-
tude do sistema de provas aqui apresentado a introduo de asseres
de programas como axiomas do sistema, a partir dos quais podemos fazer
uma prova da completude relativa do sistema de provas. A prova da com-
pletude relativa do sistema pode ser encontrada em Apt e Olderog (1997),
Francez (1992) e Winskel (1993). Omitimos essa prova neste livro para no
sairmos do foco: uso da lgica para especificao e provas de programas.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #225
i i

7 Verificao de Programas 215

Exerccios

7.1 Verificar a correo parcial para cada uma das triplas a seguir (pode ser
verdadeira ou falsa), usando apenas a regra Atribuio:

1. htruei x := 5 htruei
2. htruei x := 10 hx = 10i
3. hx = 20i x := 5 hx > 20i
4. hx = 20i x := 5 hfalsei
5. hfalsei x := 5 hx > 20i
6. htruei x := 5 hfalsei

7.2 Verificar a correo parcial para cada uma das triplas a seguir usando
as regras Atribuio e Composio:

1. hx > 0i y := x + 5 hy > 5i
2. htruei y := x; y := 2 x + y hy = 3 xi
3. hz > 1i x := 1; y := z; y := y x hz > yi
4. hx = x0 y = y0 i z := x; x := y; y := z hx = y0 y = x0 i

7.3 Dado o programa P a seguir

Programa:

if (x>y)
{z:= x;}
else
{z:= y;}

Mostrar:

1. `par htruei P hz = max(x, y)i


2. `par hx > 0i P hz > 0i
3. `par hx > 0i P hz > min(x, y)i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #226
i i

216 Lgica para Computao

7.4 Dado o programa P a seguir


Programa:
fat := 1;
while (n != 0)
{fat := fat * n ;
n := n - 1;
}
Mostrar:
1. `par hn > 0i P hfat = n!i
2. `par hn = n0 n > 0i P hfat = n0 !i

7.5 Dado o programa P a seguir


Programa:
y := 0;
while (y != x)
{y := y + 1;
}
Mostrar:
1. `par htruei P hx = yi
2. `par hx > 0i P hx = y y > 0i

7.6 Dado o programa P a seguir


Programa:
q := 0;
r := x;
while (r >= y)
{r := r - y;
q := q + 1;
}
Mostrar:
1. `par hy 6= 0i P h(x = q y + r) (r < y)i
2. `par htruei P h(x = q y + r) (r < y)i

7.7 Fazer um programa para cada um dos problemas propostos na Seo


6.4 e provar a correo parcial desses programas em relao especifi-
cao que voc formulou naqueles exerccios.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #227
i i

7 Verificao de Programas 217

7.5 Correo Total de Programas

No Exemplo 7.4.6, mostramos a prova de correo parcial para um programa


que calcula o fatorial de um nmero inteiro. Para completar a prova, tivemos
de provar:

n > 0 (1 = 0!)

no topo do programa. Mas para provar 1 = 0! no precisamos da premissa


n > 0, j que, por definio, 1 = 0!. Isso significa que, mesmo que
tivssemos a assero true como precondio do programa, a correo parcial
dele poderia ser provada:

`par htruei Fat hfat = n!i

porque

true (1 = 0!)

Se considerarmos true como precondio, podemos ter um nmero ne-


gativo como entrada, o que levar o programa a uma repetio infinita do
comando while. Mesmo assim, a correo parcial do programa pode ser
provada porque essa relao assume que cada comando termina.
Na correo total de programas, em vez de considerarmos que cada co-
mando termina, queremos provar que os comandos terminam de fato. Dessa
forma, precisamos redefinir a lgica para que as regras contemplem a ter-
minao de programas. Dentro do repertrio de comandos da linguagem de
programao proposta, temos apenas um comando de repetio: while. Esse
o nico comando da linguagem que pode no terminar se sua condio
nunca progredir para o valor false. Por isso, a lgica para a correo total
de programas contm as mesmas regras encontradas na prova parcial de pro-
gramas, exceto a regra sobre o comando while, a qual refeita considerando
que agora queremos provar o trmino do comando. O Quadro 7.2 contm a
lgica de Hoare para a correo total de programas.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #228
i i

218 Lgica para Computao

Quadro 7.2 Regras de prova (total).

hi C1 hi hi C2 hi
Composio
hi C1; C2 hi

Atribuio
h[E/x]i x := E hi

h Bi C1 hi h Bi C2 hi
IfElse
hi ifB {C1} else {C2} hi

h B 0 6 E = E0 i C h 0 6 E 6 E0 i
WhileTotal
h 0 6 Ei while B {C} h Bi

` 0 hi C hi ` 0
Implicao
h0i {C} h0i

A nica nova regra de prova introduzida a WhileTotal, que substituiu a


WhileParcial da lgica anterior. As outras regras tm o mesmo significado do
Quadro 7.1. Nessa nova regra,

h B 0 6 E = E0 i C h 0 6 E 6 E0 i
WhileTotal
h 0 6 Ei while B {C} h Bi

introduzimos os elementos E e E0 . Como desejamos provar a terminao,


precisamos de uma expresso que decresa a cada iterao at chegar a um
valor que torne a condio do while falsa aps um nmero finito de iteraes
(isso garante que o comando termina). Esses novos elementos so, ento:

A expresso variante E uma expresso sobre variveis do programa


cujo valor decresce a cada iterao do while. Ou seja, o valor de E
aps a execuo de C menor que o valor de E0 antes da execu-
o de C.
E0 a expresso E antes da execuo do comando C, usada para
evidenciar a variao do valor de E a cada iterao.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #229
i i

7 Verificao de Programas 219

A prova do comando while realizada de forma semelhante que fizemos


com a prova de correo parcial do mesmo comando, exceto que a conver-
gncia (para zero) da expresso variante deve tambm ser provada. Para isso,
os passos de prova usando a regra WhileTotal so:

1. Encontrar um candidato a invariante e uma expresso variante E


observando a relao entre as variveis do corpo do comando C, antes
e depois da sua execuo

2. Certificar como invariante em relao ps-condio :

` B

hi
while (B)
{C}
B
hi

3. Introduzir 0 6 E 6 E0 como ps-condio do corpo C:

hi
while (B)
{C
h 0 6 E 6 E0 i }
B
hi

4. Produzir 0 0 6 E0 6 E0 a partir de 0 6 E 6 E0 e o corpo C:

hi
while (B)
{ h0 0 6 E0 6 E0 i
C
h 0 6 E 6 E0 i}
B
hi

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #230
i i

220 Lgica para Computao

5. Certificar e E como invariante e variante, respectivamente:

( B 0 6 E = E0 ) (0 0 6 E0 6 E0 )

hi
while (B)
( B 0 6 E = E0 ) (0 0 6 E0 6 E0 )
{h0 0 6 E0 6 E0 i
C
h 0 6 E 6 E0 i}
B
hi

6. Introduzir 0 6 E como precondio do comando while:

hi
h 0 6 Ei
while (B)
( B 0 6 E = E0 ) (0 0 6 E0 6 E0 )
{h0 0 6 E0 6 E0 i
C
h 0 6 E 6 E0 i}
B
hi

Exemplo 7.5.1
Consideremos novamente o programa do Exemplo 7.4.5:
Especificao:
Pre:n > 0
Pos:fat = n!
Programa:
fat := 1;
i := 0;
while (i != n)
{ i := i + 1 ;
fat = fat * i;
}

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #231
i i

7 Verificao de Programas 221

Verificao:
`tot hn > 0i Fat hfat = n!i

Inicialmente, precisamos encontrar um candidato e certific-lo como inva-


riante, para o comando while, considerando a ps-condio , assim como
a expresso variante E.

Invariante : fat = i!
Variante E: ni

A partir desses dois elementos, prosseguimos com os passos de prova:

Regra Passo Assero Programa


Implicao 10 n > 0 (1 = 0! 0 6 n)
Atribuio 9 1 = 0! 0 6 n fat := 1;
Atribuio 8 fat = 0! 0 6 n 0 i := 0;
WhileTotal 7 fat = i! 0 6 n i while (i != n)
Implicao 6 (fat = i! (i 6= n) 0 6 n i = E0 )
fat (i + 1) = (i + 1)! 0 6 n (i + 1) 6 E0
Atribuio 5 fat (i + 1) = (i + 1)! 0 6 n (i + 1) 6 E0 { i := i + 1 ;
Atribuio 4 fat i = i! 0 6 n i 6 E0 fat = fat * i;
WhileTotal 2 fat = i! 0 6 n i 6 E0 }
WhileTotal 1 (fat = i! (i 6= n)) fat = n!
Invariante 1 fat = i!
Variante 1 ni
0 fat = n!

Note que dessa vez precisamos da precondio n > 0 para provar a


assero do topo do programa:

n > 0 (1 = 0! 0 6 n)

Se no tivssemos a premissa n > 0, no poderamos provar a assero


0 6 n. Diferentemente da correo parcial de programas, no podemos, por
exemplo, provar
`tot htruei Fat hfat = n!i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #232
i i

222 Lgica para Computao

Regra Passo Assero Programa


Implicao 10 true (1 = 0! 0 6 n)
Atribuio 9 1 = 0! 0 6 n fat := 1;
Atribuio 8 fat = 0! 0 6 n 0 i := 0;
WhileTotal 7 fat = i! 0 6 n i while (i != n)
Implicao 6 (fat = i! (i 6= n) 0 6 n i = E0 )
fat (i + 1) = (i + 1)! 0 6 n (i + 1) 6 E0
Atribuio 5 fat (i + 1) = (i + 1)! 0 6 n (i + 1) 6 E0 { i := i + 1 ;
Atribuio 4 fat i = i! 0 6 n i 6 E0 fat = fat * i;
WhileTotal 2 fat = i! 0 6 n i 6 E0 }
WhileTotal 1 (fat = i! (i 6= n)) fat = n!
Invariante 1 fat = i!
Variante 1 ni
0 fat = n!

Mais uma vez, recorremos a provas da lgica de predicados e teoria dos


inteiros que no foram demonstradas aqui.
Definio 7.5.1 Quando um programa satisfaz a sua especificao sob a rela-
o de correo total, dizemos que

tot hi P hi

O sistema de provas para a correo total de programas correto quando

`tot hi P hi tot hi P hi

O sistema de provas para a correo total de programas completo quando

tot hi P hi `tot hi P hi

Essas asseres restritas completude relativa considerando um conjunto


de asseres sobre programas e assumindo a expressividade dos inteiros
tambm podem ser encontradas em Apt e Olderog (1997) e Francez (1992).

Exerccios

7.8 Dado o programa P a seguir

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #233
i i

7 Verificao de Programas 223

Programa:
fat := 1;
while (n != 0)
{fat := fat * n ;
n := n - 1;
}
Mostrar:
1. `tot hn > 0i P hfat = n!i
2. `tot hn = n0 n > 0i P hfat = n0 !i

7.9 Dado o programa P a seguir


Programa:
y := 0;
while (y != x)
{y := y + 1;
}
Mostrar:
1. `tot htruei P hx = yi
2. `tot hx > 0i P hx = y y > 0i

7.10 Dado o programa P a seguir


Programa:
q := 0;
r := x;
while (r >= y)
{r := r - y;
q := q + 1;
}
Mostrar:
1. `tot hy 6= 0i P h(x = q y + r) (r < y)i
2. `tot htruei P h(x = q y + r) (r < y)i

7.11 O nmero de Fibonacci definido indutivamente por:

fib0 = 0,
fib1 = 1,
fibn = fibn1 + fibn2 , n > 2

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #234
i i

224 Lgica para Computao

Dado o programa P a seguir


Programa:
x := 0;
y := 1;
count := n;
while (count > 0)
{ h := y;
y := x + y;
x := h;
count := count - 1;
}
Mostrar:
`tot hn > 0i P hx = fib(n)i

7.12 Dado o programa P a seguir


Programa:
a := 0;
z := 0;
while (a != y)
{ z := z + x;
a := a + 1;
}
Mostrar:
`tot htruei P hz = x yi

7.6 Notas Bibliogrficas


Como j exposto neste captulo, a verificao de programas (ou sistemas de
software) depende de fundamentos matemticos tanto para a linguagem
de especificao, como j foi discutido no Captulo 6, quanto para a lin-
guagem de programao. Aqui, a linguagem de programao usada teve sua
semntica axiomtica definida para, posteriormente, usarmos a lgica de
Hoare para verificar os programas. Existem outras formas de definirmos as
semnticas das linguagens de programao, tais como a semntica operacio-
nal (Plotkin, 1981) e a semntica denotacional (Schmidt, 1986). Os leitores
interessados em outras formas de definio de semntica de linguagens de
programao podem consultar Winskel (1993), que d uma viso geral sobre

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #235
i i

7 Verificao de Programas 225

as vrias formas de definio de semntica de linguagens, mas sem muita


profundidade.
Neste livro, introduzimos a verificao de programas sob uma abordagem
prtica para exemplificar o uso da lgica, e seus sistemas de prova, na
correo de programas. Vrios outros livros tratam o tema de verificao de
programas de forma mais aprofundada, inclusive para programas concor-
rentes. Aqui, utilizamos principalmente os livros de Francez (1992) e de Apt
e Olderog (1997) como referncia, nos quais so demonstradas a completude
relativa e correo do sistema de provas aqui utilizado.
Para cada um dos mtodos ou linguagens formais, tais com o Z, VDM e
B (j mencionados no Captulo 6, Seo 6.5), existe um sistema de provas
relacionado. Para esses mtodos, h clculos de refinamentos com os quais as
especificaes podem ser sucessivamente detalhadas para que se aproximem
do cdigo. Vrios estudos tm sido desenvolvidos nessa rea, como, por
exemplo, Circus (Sampaio, Woodcock e Cavalcanti, 2002; Woodcock, 2004),
que tem um clculo de refinamento para especificaes conjuntas em Z/CSP.
Vrias referncias e ferramentas sobre outras formas de verificao e tcnicas
de refinamento e transformao de programas (Partsch, 1990) podem ser
acessadas a partir do site http://www.afm.sbu.ac.uk/.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #236
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #237
i i

Concluso

Apresentamos, portanto, nossa modesta compilao da lgica clssica de uma


forma que consideramos particularmente til para cientistas de computao.
Nosso objetivo foi apresentar os diversos temas tratados de forma acessvel
e simples, para que este livro pudesse ser usado como base em disciplinas
de graduao. Por esse motivo, como o leitor deve ter notado, apresentamos
relativamente poucas demonstraes de teoremas ao longo de todo o texto,
se comparado com livros sobre lgica clssica de outros autores.
Nosso maior cuidado e esforo, entretanto, foi em no sacrificar a preci-
so dos temas tratados em nome da simplicidade. Consideramos paradoxal
apresentar um livro de lgica matemtica de maneira imprecisa.
Esperamos ter atingido nosso objetivo, que era a produo de um livro-
texto de alta qualidade, voltado primordialmente para os estudantes de
informtica interessados em lgica matemtica.
Sendo assim, conclumos. Ponto final.

7 Wovon man nicht sprechen kann, darber muss man schweigen.


Ludwig Wittgenstein, Tractatus logico-philosophicus

N.A. Sobre aquilo de que no se pode falar, deve-se calar.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #238
i i

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #239
i i

Referncias Bibliogrficas

APT, K. R.; OLDEROG, E. R. Verification of sequential and concurrent pro-


grams. Berlim: Springer-Verlag, 1997.

BECKERT, B.; POSEGGA, J. leanTAP: Lean, tableau-based deduction. Journal


of automated reasoning, n.15, v.3, p. 339-358, 1995.

BETH, Evert Willem. Formal methods. An introduction to symbolic logic and


to the study of effective operations in arithmetic and logic. Dordrecht: D.
Reidel Publishing, 1962.

BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. The unified modelling language


user guide. Reading: Addison-Wesley, 1999.

BOOLOS, G. S.; JEFFREY, R. C. Computability and logic. 3. ed. Cambridge:


Cambridge University Press, 1989.

BUSS, Samuel. Polynomial size proofs of the propositional pigeonhole prin-


ciple. Journal of symbolic logic, n.52, p. 916-927, 1987.

CARBONE, Alessandra; SEMMES, Stephen. A graphic apology for symmetry


and implicitness. Oxford Mathematical Monographs. Oxford: Oxford Univer-
sity Press, 2000.

CARDELLI, L.; GORDON, A. D. Mobile ambients. In: NIVAT, Maurice (Ed.).


Foundations of software science and computational structures. Springer, 1998.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #240
i i

230 Lgica para Computao

COOK, Stephen A. The complexity of theorem proving procedures. Third


Annual ACM Symposium on the Theory of Computing. Nova York: ACM, 1971,
p. 151-158.

COOK, Stephen A.; RECKHOW, Robert A. The relative efficiency of propo-


sitional proof systems. Journal of Symbolic Logic, n. 44, v.1, p. 36-50, 1979.

CORRA DA SILVA, F. S.; AGUST-CULLELL, J. Knowledge coordination.


Chichester: John Wiley, 2003.

DAGOSTINO, Marcello. Are tableaux an improvement on truth-tables?


Cut-free proofs and bivalence. Journal of Logic, Language and Information,
n.1, p. 235-252, 1992.

DAVIS, M. Computability and unsolvability. New York: McGraw-Hill, 1958.

DAVIS, M.; PUTNAM, H. A computing procedure for quantification theory.


Journal of the ACM, n.7, v.3, p.201-215, 1960.

DAVIS, Martin; LOGEMANN, George; LOVELAND, Donald. A machine


program for theorem-proving. Communications of the ACM, n.5, v.7, p.394-
397, Jul. 1962.

DOWLING, W. F.; GALLIER, J. H. Linear time algorithms for testing satisfi-


ability of propositional horn formulae. Journal of Logic Programming, n.3, p.
267-284, 1984.

DOYLE, Jon. A truth maintenance system. In: Artificial intelligence, p. 259-


279, 1979.

EPSTEIN, R. L.; CARNIELLI, W. A. Computability Computable functions,


logic, and the foundations of mathematics. 2. ed. Belmont: Wadsworth, 2000.

ERSHOV, Yu.; PALIUTIN, E. Lgica matemtica. Moscou: Mir, 1990.

EVEN, S.; ITAI, A.; SHAMIR, A. On the complexity of timetable and multi-
commodity flow problems. SIAM Journal of Computing, n.5, v.4, p. 691-703,
1976.

FITTING, Melvin. First-order logic and automated theorem proving. New


York: Springer-Verlag, 1990. (2. ed., 1996).

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #241
i i

Referncias Bibliogrficas 231

FLOYD, R. Assigning meaning to programs. In: SCHWARTZ, J. T. (ed.).


Proceedings of Symposium on Applied Mathematics 19 - Mathematical aspects
of computer science. Nova York: American Mathematical Society, p. 19-32,
1967.

FRANCEZ, N. Program verification. Reading: Addison-Wesley, 1992.

GAREY, M. R.; JOHNSON, D. S. Computers and intractability: A guide to the


theory of NP-completeness. Nova York: Freeman, 1979.

GENT, Ian; WALSH, Toby. The SAT phase transition. In: COHN, A. G. (ed.)
Proceedings of ECAI-94. Chichester: John Wiley & Sons, p. 105-109, 1994.

GDEL, Kurt. ber formal unentscheidbare Stze der Principia Mathema-


tica und verwandter Systeme, I (Sobre proposies indecidveis de Principia
Matematica e sistemas relacionados). In: Monatshefte fr Mathematik und
Physik, 38. Traduzido para o ingls em 1931. Disponvel na internet em
http://home.ddc.net/ygg/etext/godel/godel3.htm.

GRAY, Jeremy. The Hilbert challenge: A perspective on twentieth century


mathematics. Oxford: Oxford University Press, 2000.

HILBERT, David. Foundations of geometry (Traduzido do alemo por L.


Unger). Chicago: Open Court Publisher, 1899.

HILBERT, D. The foundations of mathematics. p. 464-479, 1927.

HINTIKKA, J. Knowledge and belief. Ithaca: Cornell University Press, 1962.

HOARE, C. A. R. An axiomatic basis for computer programming. Commu-


nications of the ACM, n. 10, v. 12, p. 576-580, 1969.

. Communicating sequential processes. Nova York: Prentice Hall


International Series in Computer Science, 1985.

HUTH, M. R. A.; RYAN, M. D. Logic in computer science Modelling and


reasoning about systems. Cambridge: Cambridge University Press, 2000.

JACKY, J. A way of Z: practical programming with formal methods.


Cambridge: Cambridge University Press, 1997.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #242
i i

232 Lgica para Computao

JONES, C. B. Systematic software development using VDM. New Jersey:


Prentice Hall, 1990.

jTAP A tableau prover in java. Disponvel em:


http://i12www.ira.uka.de/aroth/jTAP/, 1999.

KOTONYA, G.; SOMMERVILLE, I. Requirements engineering: processes and


techniques. Chichester: John Wiley and Sons, 1998.

LLOYD, J. W. Foundations of logic programming. 2.ed. Berlim: Springer-


Verlag, 1987.

MACHALE, Desmond. George Boole His life and work. Dublin: Boole Press,
1985.

MCALLESTER, D. Truth maintenance. In: Proceedings of the Eighth National


Conference on Artificial Intelligence (AAAI-90), p. 1109-1116, 1990.

MELO, A. C. V.; CORRA DA SILVA, F. S. Princpios de linguagens de progra-


mao. So Paulo: Edgard Blcher, 2003.

MENDELSON, E. Introduction to mathematical logic 3. ed. Belmont:


Wadsworth and Brooks/Cole, 1987.

MILNER, R. Communication and concurrency. Englewood Cliffs: Prentice-


Hall, 1989.

. Communicating and mobile systems: the -Calculus. Cambridge:


Cambridge University Press, maio 1999.

MOSKEWICZ, Matthew W. et al. Chaff: engineering an efficient SAT solver.


In: Proceedings of the 38th Design Automation Conference (DAC01), p. 530-
535, 2001.

MONK, J. D. (ed.). Handbook of Boolean algebra. Amsterd: Elsevier Science


Publishers, 1989.

NISSANKE, N. Formal specification Techniques and Applications. Springer-


Verlag, 1999.

PARTSCH, H. A. Specification and transformation of programs A formal


approach to software development. Springer-Verlag, 1990.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #243
i i

Referncias Bibliogrficas 233

PLOTKIN, G. D. Structural operational semantics. Lecture Notes DAIMI FN-


19. Dinamarca: Aarhus University, 1981.

POSEGGA, Joachim; SCHMITT, Peter. Implementing semantic tableaux.


In: GABBAY, Dov; DAGOSTINO, Marcello; HHNLE, Reiner; POSEGGA,
Joachim (ed.). Handbook of tableaux based methods in automated deduction.
Dordrecht: Kluwer Academic Publishers, 1999.

PRAWITZ, Dag. Natural deduction. A proof-theoretical study. Estocolmo:


Almqvist and Wiksell, 1965.

RICE, A. Augustus De Morgan: Historian of science. History of Science, n.34,


p. 201-240, 1996.

ROBERTSON, D.; AGUST, J. Software Blueprints Lightweight uses of logic


in conceptual modelling. Boston: Addison-Wesley, 1999.

ROBINSON, J. A. A machine-oriented logic based on the resolution princi-


ple. Journal of the ACM (JACM), n.12, v.1, p. 23-41, Jan. 1965.

SAMPAIO, A. C. A.; WOODCOCK, J. C. P.; CAVALCANTI, A. L. C. Refine-


ment in Circus. In: ERIKSSON, L.; LINDSAY, P. A. (eds.) FME 2002: Formal
Methods Getting IT Right, v. 2391 of Lecture Notes in Computer Science, p.
451-470. Springer-Verlag, unknown 2002.

SCHMIDT, D. Denotational semantics: a methodology for language develop-


ment. Boston: Allyn & Bacon, 1986.

SHOENFIELD, J. R. Mathematical logic. Wellesey: AK Peters, 2001.

SOMMERVILLE, I. Software engineering. 6.ed. Boston: Addison-Wesley,


2001.

SOMMERVILLE, I.; SAWYER, P. Requirements engineering: a good practice


guide. Chichester: John Wiley and Sons, 1997.

SMULLYAN, Raymond M. First-order logic. Springer-Verlag, 1968.

STATMAN, R. Bounds for proof-search and speed-up in predicate calculus.


Annals of Mathematical Logic, n. 15, p. 225-287, 1978.

i i

i i
i i
Lgica para Computao PROVA 4 4/7/2006 #244
i i

234 Lgica para Computao

STERLING, Leon; SHAPIRO, Ehud. The art of Prolog. 2. ed. Cambridge: MIT
Press, 1994.

STILLWELL, John. Emil Post and his anticipation of Goedel and Turing.
Mathematics Magazine, n. 77, v.1, p. 3-14, 2004.

SZABO, M. E. (ed.). Collected papers of Gerhard Gentzen. Studies in Logic.


Amsterd: North Holland, 1969.

VAN HEIJENOORT, J. (ed.). From Frege to Gdel: a source book in mathemat-


ical logic, v. 1, p. 1-7. Vienna, 1995.

VIHAN, P. The last months of Gerhard Gentzen in Prague. In: Collegium


logicum, v.1, p. 1-7. Viena, 1995.

WHITEHEAD, A. N.; RUSSEL, B. A. W. Principia mathematica. Cambridge:


Cambridge University Press, 1910.

Wikimedia Foundation. Wikipedia, the free encyclopedia.


http://en.wikipedia.org/. Acesso em Jul. 2004.

WINSKEL, G. The formal semantics of programming languages An introduc-


tion. Cambridge: MIT Press, 1993.

WITTGENSTEIN, Ludwig. Tractatus logico-philosophicus. 1922. Disponvel


na internet em ingls em diversos sites como:
http://users.compaqnet.be/cn111132/wittgenstein/
tractatus_logico_philosophicus.htm.

WOODCOCK, J. C. P.; DAVIES, J. Using Z: specification, refinement and


proof. Prentice Hall, 1996.

WOODCOCK, Jim. Using Circus for critical industrial applications. In:


WMF2003: 6th Brazilian Workshop on Formal Methods, Campina Grande,
Brasil, unknown 2004. To be published in Electronic Notes in Theoretical
Computer Science. Keynote speech: the Formal Methods Europe Lecture.

WORDSWORTH, J. B. Software engineering with B. Boston: Addison-Wesley,


1996.

i i

i i
Corra da Silva
^
^
Outras Obras
Flvio Soares Corra da Silva professor do
Departamento de Cincia da Computao da
LGICA PARA
Algoritmos e Lgica de Programao
USP campus Butant. graduado (1984) e
mestre (1989) em Engenharia pela USP, doutor
COMPUTAO Marco Antonio Furlan de Souza, Marcelo Marques
Gomes, Marcio Vieira Soares e Ricardo Concilio

|
(1992) em Inteligncia Artificial pela Univer-
sidade de Edinburgh (Esccia) e livre-docente

Finger
Compiladores: Princpios e Prticas
(1999) tambm pela USP. Kenneth C. Louden

Marcelo Finger professor do Departamento de Comunicao entre Computadores e

|
Cincia da Computao da USP campus Butan- O livro apresenta um texto original em portugus que, sem Tecnologias de Rede

^
LGICA PARA

Melo
t. graduado (1988) em Engenharia pela Esco- perder a abordagem introdutria, expe rigor matemtico e profun- Michael A. Gallo e William M. Hancock
la Politcnica da USP, mestre (1990) e doutor didade adequados para o pblico-alvo. A obra apresenta os funda-
(1994) em Cincia da Computao pela Univer- mentos e mtodos da lgica matemtica para estudantes de Cincia Introduo aos Sistemas Operacionais
sidade de Londres (Inglaterra) e livre-docente da Computao, permitindo-lhes apreciar os benefcios e as dificul- Ida M. Flynn e Ann McIver McHoes
(2001) em Cincia da Computao pela USP. Tra-
balha h 16 anos na rea de Lgica Computacio-
dades advindos da aplicao de mtodos matemticos rigorosos para
a resoluo de problemas e, acima de tudo, a enorme importncia COMPUTAO Lgica de Programao

LGICA PARA COMPUTAO


nal e j publicou diversos artigos em peridicos dos mtodos formais e mais especificamente dos mtodos funda- Irenice de Ftima Carboni
e conferncias internacionais. autor de um li- mentados em lgica formal para as diversas facetas e ramificaes
vro de Lgica Temporal e de dois livros infantis. da Cincia da Computao. Modelos Clssicos de Computao
Flvio Soares Corra da Silva e Ana Cristina
Vieira de Melo
Ana Cristina Vieira de Melo professora do De- APLICAES
partamento de Cincia da Computao da USP
Livro-texto para as disciplinas lgica e mtodos formais nos Princpios de Sistemas de Informao
campus Butant. graduada (1986) e mestre Traduo da 6 edio norte-americana
cursos de graduao e ps-graduao em Cincia da Computao,
(1989) em Cincia da Computao pela UFPE, e Ralph M. Stair e George W. Reynolds
Matemtica e Filosofia. Leitura complementar para a disciplina funda-
doutora (1995) em Cincia da Computao pela
mentos matemticos da computao. Leitura recomendada tambm
Universidade de Manchester (Inglaterra). Projeto de Algoritmos com Implementaes
para profissionais e todos aqueles que, direta ou indiretamente, lidam
em Pascal e C 3 edio revista e
com mtodos formais e matemticos para a resoluo de problemas.
ampliada
Nivio Ziviani

Flvio Soares Corra da Silva

^ ISBN 13 978-85-221-0851-0
ISBN 10 85-221-0851-X
Marcelo Finger
Ana Cristina Vieira de Melo

Para suas solues de curso e aprendizado,


visite www.cengage.com.br

S-ar putea să vă placă și